aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/Kbuild6
-rw-r--r--include/linux/acct.h3
-rw-r--r--include/linux/acpi.h30
-rw-r--r--include/linux/aio.h4
-rw-r--r--include/linux/amba/bus.h9
-rw-r--r--include/linux/amba/clcd.h33
-rw-r--r--include/linux/amba/pl061.h2
-rw-r--r--include/linux/ata.h51
-rw-r--r--include/linux/atmel-mci.h4
-rw-r--r--include/linux/audit.h11
-rw-r--r--include/linux/backing-dev.h15
-rw-r--r--include/linux/backlight.h7
-rw-r--r--include/linux/binfmts.h12
-rw-r--r--include/linux/bio.h20
-rw-r--r--include/linux/bitmap.h11
-rw-r--r--include/linux/bitops.h32
-rw-r--r--include/linux/blkdev.h124
-rw-r--r--include/linux/blktrace_api.h4
-rw-r--r--include/linux/bootmem.h8
-rw-r--r--include/linux/brcmphy.h30
-rw-r--r--include/linux/btree-128.h109
-rw-r--r--include/linux/btree-type.h147
-rw-r--r--include/linux/btree.h243
-rw-r--r--include/linux/can/core.h2
-rw-r--r--include/linux/can/dev.h47
-rw-r--r--include/linux/can/netlink.h17
-rw-r--r--include/linux/can/platform/mcp251x.h36
-rw-r--r--include/linux/can/platform/ti_hecc.h44
-rw-r--r--include/linux/capability.h2
-rw-r--r--include/linux/cciss_defs.h130
-rw-r--r--include/linux/cciss_ioctl.h128
-rw-r--r--include/linux/cgroup.h59
-rw-r--r--include/linux/cgroup_subsys.h6
-rw-r--r--include/linux/chio.h2
-rw-r--r--include/linux/circ_buf.h4
-rw-r--r--include/linux/clockchips.h21
-rw-r--r--include/linux/clocksource.h23
-rw-r--r--include/linux/coda_psdev.h3
-rw-r--r--include/linux/compat.h47
-rw-r--r--include/linux/compiler-gcc.h1
-rw-r--r--include/linux/compiler-gcc4.h22
-rw-r--r--include/linux/compiler.h24
-rw-r--r--include/linux/connector.h34
-rw-r--r--include/linux/coredump.h45
-rw-r--r--include/linux/cpu.h15
-rw-r--r--include/linux/cpufreq.h1
-rw-r--r--include/linux/cpumask.h22
-rw-r--r--include/linux/cred.h2
-rw-r--r--include/linux/crypto.h27
-rw-r--r--include/linux/cryptohash.h1
-rw-r--r--include/linux/cs5535.h172
-rw-r--r--include/linux/ctype.h3
-rw-r--r--include/linux/davinci_emac.h39
-rw-r--r--include/linux/dcache.h14
-rw-r--r--include/linux/decompress/mm.h18
-rw-r--r--include/linux/decompress/unlzo.h10
-rw-r--r--include/linux/delayacct.h1
-rw-r--r--include/linux/device-mapper.h13
-rw-r--r--include/linux/device.h71
-rw-r--r--include/linux/dm-dirty-log.h6
-rw-r--r--include/linux/dm-io.h4
-rw-r--r--include/linux/dm-ioctl.h18
-rw-r--r--include/linux/dm-log-userspace.h2
-rw-r--r--include/linux/dm-region-hash.h3
-rw-r--r--include/linux/dm9000.h2
-rw-r--r--include/linux/dma-mapping.h24
-rw-r--r--include/linux/dmaengine.h6
-rw-r--r--include/linux/dmar.h25
-rw-r--r--include/linux/dn.h9
-rw-r--r--include/linux/drbd.h343
-rw-r--r--include/linux/drbd_limits.h137
-rw-r--r--include/linux/drbd_nl.h139
-rw-r--r--include/linux/drbd_tag_magic.h83
-rw-r--r--include/linux/dst.h587
-rw-r--r--include/linux/dynamic_debug.h13
-rw-r--r--include/linux/early_res.h23
-rw-r--r--include/linux/efi.h6
-rw-r--r--include/linux/elf.h42
-rw-r--r--include/linux/elfcore.h17
-rw-r--r--include/linux/enclosure.h2
-rw-r--r--include/linux/err.h5
-rw-r--r--include/linux/errqueue.h6
-rw-r--r--include/linux/ethtool.h112
-rw-r--r--include/linux/eventfd.h16
-rw-r--r--include/linux/exportfs.h7
-rw-r--r--include/linux/ext2_fs.h16
-rw-r--r--include/linux/ext3_fs.h37
-rw-r--r--include/linux/ext3_fs_i.h2
-rw-r--r--include/linux/ext3_fs_sb.h2
-rw-r--r--include/linux/ext3_jbd.h7
-rw-r--r--include/linux/fault-inject.h5
-rw-r--r--include/linux/fb.h3
-rw-r--r--include/linux/fdtable.h11
-rw-r--r--include/linux/fib_rules.h17
-rw-r--r--include/linux/fiemap.h2
-rw-r--r--include/linux/file.h8
-rw-r--r--include/linux/filter.h10
-rw-r--r--include/linux/firewire-cdev.h125
-rw-r--r--include/linux/firewire-constants.h29
-rw-r--r--include/linux/firewire.h32
-rw-r--r--include/linux/firmware-map.h6
-rw-r--r--include/linux/firmware.h5
-rw-r--r--include/linux/freezer.h7
-rw-r--r--include/linux/fs.h136
-rw-r--r--include/linux/fs_stack.h6
-rw-r--r--include/linux/fscache-cache.h2
-rw-r--r--include/linux/fsl_devices.h11
-rw-r--r--include/linux/fsnotify.h12
-rw-r--r--include/linux/ftrace.h13
-rw-r--r--include/linux/ftrace_event.h61
-rw-r--r--include/linux/gameport.h2
-rw-r--r--include/linux/gen_stats.h15
-rw-r--r--include/linux/generic_acl.h41
-rw-r--r--include/linux/genhd.h11
-rw-r--r--include/linux/gfp.h12
-rw-r--r--include/linux/gfs2_ondisk.h36
-rw-r--r--include/linux/gigaset_dev.h22
-rw-r--r--include/linux/gpio.h6
-rw-r--r--include/linux/gpio_keys.h1
-rw-r--r--include/linux/hardirq.h24
-rw-r--r--include/linux/hayesesp.h114
-rw-r--r--include/linux/hid.h6
-rw-r--r--include/linux/highmem.h8
-rw-r--r--include/linux/hil.h16
-rw-r--r--include/linux/hpet.h2
-rw-r--r--include/linux/hrtimer.h60
-rw-r--r--include/linux/htcpld.h24
-rw-r--r--include/linux/hugetlb.h6
-rw-r--r--include/linux/hw_breakpoint.h127
-rw-r--r--include/linux/hw_random.h7
-rw-r--r--include/linux/i2c-algo-bit.h2
-rw-r--r--include/linux/i2c-pnx.h19
-rw-r--r--include/linux/i2c-smbus.h50
-rw-r--r--include/linux/i2c-xiic.h43
-rw-r--r--include/linux/i2c.h198
-rw-r--r--include/linux/i2c/adp5588.h12
-rw-r--r--include/linux/i2c/pca953x.h11
-rw-r--r--include/linux/i2c/tps65010.h19
-rw-r--r--include/linux/i2c/twl.h (renamed from include/linux/i2c/twl4030.h)260
-rw-r--r--include/linux/i2o.h3
-rw-r--r--include/linux/i8042.h18
-rw-r--r--include/linux/i82593.h229
-rw-r--r--include/linux/icmpv6.h3
-rw-r--r--include/linux/ide.h12
-rw-r--r--include/linux/ieee80211.h155
-rw-r--r--include/linux/if.h16
-rw-r--r--include/linux/if_addr.h9
-rw-r--r--include/linux/if_addrlabel.h6
-rw-r--r--include/linux/if_arcnet.h18
-rw-r--r--include/linux/if_arp.h3
-rw-r--r--include/linux/if_bonding.h3
-rw-r--r--include/linux/if_bridge.h9
-rw-r--r--include/linux/if_ec.h12
-rw-r--r--include/linux/if_ether.h6
-rw-r--r--include/linux/if_fddi.h22
-rw-r--r--include/linux/if_hippi.h15
-rw-r--r--include/linux/if_link.h87
-rw-r--r--include/linux/if_macvlan.h84
-rw-r--r--include/linux/if_packet.h28
-rw-r--r--include/linux/if_plip.h3
-rw-r--r--include/linux/if_pppol2tp.h3
-rw-r--r--include/linux/if_tun.h17
-rw-r--r--include/linux/if_tunnel.h19
-rw-r--r--include/linux/if_vlan.h41
-rw-r--r--include/linux/igmp.h17
-rw-r--r--include/linux/ima.h12
-rw-r--r--include/linux/in.h20
-rw-r--r--include/linux/in6.h11
-rw-r--r--include/linux/inetdevice.h52
-rw-r--r--include/linux/init.h2
-rw-r--r--include/linux/init_task.h14
-rw-r--r--include/linux/input-polldev.h22
-rw-r--r--include/linux/input.h99
-rw-r--r--include/linux/input/matrix_keypad.h5
-rw-r--r--include/linux/input/sh_keysc.h15
-rw-r--r--include/linux/input/sparse-keymap.h62
-rw-r--r--include/linux/intel-iommu.h1
-rw-r--r--include/linux/interrupt.h6
-rw-r--r--include/linux/io-mapping.h1
-rw-r--r--include/linux/iocontext.h43
-rw-r--r--include/linux/iommu-helper.h3
-rw-r--r--include/linux/ioport.h31
-rw-r--r--include/linux/ip_vs.h3
-rw-r--r--include/linux/ipc_namespace.h7
-rw-r--r--include/linux/ipmi_smi.h1
-rw-r--r--include/linux/ipv6.h4
-rw-r--r--include/linux/irq.h8
-rw-r--r--include/linux/irqflags.h2
-rw-r--r--include/linux/iscsi_ibft.h8
-rw-r--r--include/linux/isdn/capilli.h8
-rw-r--r--include/linux/isicom.h1
-rw-r--r--include/linux/jbd.h12
-rw-r--r--include/linux/jbd2.h24
-rw-r--r--include/linux/jiffies.h1
-rw-r--r--include/linux/kallsyms.h12
-rw-r--r--include/linux/kbd_kern.h3
-rw-r--r--include/linux/kernel-page-flags.h46
-rw-r--r--include/linux/kernel.h82
-rw-r--r--include/linux/kernel_stat.h1
-rw-r--r--include/linux/kernelcapi.h17
-rw-r--r--include/linux/kexec.h4
-rw-r--r--include/linux/kfifo.h567
-rw-r--r--include/linux/kgdb.h7
-rw-r--r--include/linux/kmemcheck.h110
-rw-r--r--include/linux/kmemleak.h6
-rw-r--r--include/linux/kmod.h1
-rw-r--r--include/linux/kmsg_dump.h61
-rw-r--r--include/linux/kobject.h14
-rw-r--r--include/linux/kprobes.h46
-rw-r--r--include/linux/ksm.h96
-rw-r--r--include/linux/kvm.h283
-rw-r--r--include/linux/kvm_host.h131
-rw-r--r--include/linux/lcm.h8
-rw-r--r--include/linux/leds-lp3944.h3
-rw-r--r--include/linux/leds-pca9532.h2
-rw-r--r--include/linux/leds-regulator.h46
-rw-r--r--include/linux/libata.h14
-rw-r--r--include/linux/lis3lv02d.h15
-rw-r--r--include/linux/list.h20
-rw-r--r--include/linux/list_sort.h11
-rw-r--r--include/linux/llc.h7
-rw-r--r--include/linux/lmb.h2
-rw-r--r--include/linux/lockdep.h8
-rw-r--r--include/linux/lru_cache.h294
-rw-r--r--include/linux/lsm_audit.h18
-rw-r--r--include/linux/magic.h1
-rw-r--r--include/linux/memcontrol.h36
-rw-r--r--include/linux/memory.h29
-rw-r--r--include/linux/memory_hotplug.h1
-rw-r--r--include/linux/mempolicy.h3
-rw-r--r--include/linux/mfd/88pm860x.h375
-rw-r--r--include/linux/mfd/ab3100.h3
-rw-r--r--include/linux/mfd/ab4500.h262
-rw-r--r--include/linux/mfd/adp5520.h299
-rw-r--r--include/linux/mfd/da903x.h4
-rw-r--r--include/linux/mfd/ezx-pcap.h7
-rw-r--r--include/linux/mfd/max8925.h253
-rw-r--r--include/linux/mfd/mc13783-private.h208
-rw-r--r--include/linux/mfd/mc13783.h142
-rw-r--r--include/linux/mfd/mcp.h69
-rw-r--r--include/linux/mfd/pcf50633/core.h17
-rw-r--r--include/linux/mfd/pcf50633/mbc.h1
-rw-r--r--include/linux/mfd/sh_mobile_sdhi.h8
-rw-r--r--include/linux/mfd/tmio.h42
-rw-r--r--include/linux/mfd/twl4030-codec.h272
-rw-r--r--include/linux/mfd/ucb1x00.h259
-rw-r--r--include/linux/mfd/wm831x/core.h49
-rw-r--r--include/linux/mfd/wm831x/gpio.h4
-rw-r--r--include/linux/mfd/wm831x/pdata.h18
-rw-r--r--include/linux/mfd/wm8350/core.h57
-rw-r--r--include/linux/mfd/wm8350/gpio.h19
-rw-r--r--include/linux/mfd/wm8350/pmic.h28
-rw-r--r--include/linux/mfd/wm8350/rtc.h1
-rw-r--r--include/linux/mfd/wm8994/core.h54
-rw-r--r--include/linux/mfd/wm8994/gpio.h72
-rw-r--r--include/linux/mfd/wm8994/pdata.h97
-rw-r--r--include/linux/mfd/wm8994/registers.h4292
-rw-r--r--include/linux/migrate.h8
-rw-r--r--include/linux/miscdevice.h1
-rw-r--r--include/linux/mlx4/device.h1
-rw-r--r--include/linux/mm.h167
-rw-r--r--include/linux/mm_types.h49
-rw-r--r--include/linux/mmc/card.h7
-rw-r--r--include/linux/mmc/host.h5
-rw-r--r--include/linux/mmc/mmc.h1
-rw-r--r--include/linux/mmc/pm.h30
-rw-r--r--include/linux/mmc/sdio.h2
-rw-r--r--include/linux/mmc/sdio_func.h5
-rw-r--r--include/linux/mmc/sdio_ids.h1
-rw-r--r--include/linux/mmdebug.h2
-rw-r--r--include/linux/mmzone.h25
-rw-r--r--include/linux/mnt_namespace.h1
-rw-r--r--include/linux/module.h59
-rw-r--r--include/linux/mount.h16
-rw-r--r--include/linux/mroute.h31
-rw-r--r--include/linux/mroute6.h15
-rw-r--r--include/linux/msdos_fs.h3
-rw-r--r--include/linux/mtd/bbm.h35
-rw-r--r--include/linux/mtd/cfi.h9
-rw-r--r--include/linux/mtd/flashchip.h9
-rw-r--r--include/linux/mtd/nand.h97
-rw-r--r--include/linux/mtd/nand_ecc.h10
-rw-r--r--include/linux/mtd/onenand.h23
-rw-r--r--include/linux/mtd/onenand_regs.h2
-rw-r--r--include/linux/mtd/pismo.h17
-rw-r--r--include/linux/mtd/sh_flctl.h3
-rw-r--r--include/linux/mtd/ubi.h2
-rw-r--r--include/linux/namei.h3
-rw-r--r--include/linux/ncp_fs_sb.h2
-rw-r--r--include/linux/neighbour.h18
-rw-r--r--include/linux/net.h95
-rw-r--r--include/linux/netdevice.h350
-rw-r--r--include/linux/netfilter.h69
-rw-r--r--include/linux/netfilter/Kbuild1
-rw-r--r--include/linux/netfilter/nf_conntrack_common.h28
-rw-r--r--include/linux/netfilter/nf_conntrack_ftp.h3
-rw-r--r--include/linux/netfilter/nf_conntrack_sctp.h3
-rw-r--r--include/linux/netfilter/nf_conntrack_sip.h19
-rw-r--r--include/linux/netfilter/nf_conntrack_tcp.h6
-rw-r--r--include/linux/netfilter/nfnetlink.h14
-rw-r--r--include/linux/netfilter/nfnetlink_compat.h3
-rw-r--r--include/linux/netfilter/nfnetlink_conntrack.h2
-rw-r--r--include/linux/netfilter/x_tables.h115
-rw-r--r--include/linux/netfilter/xt_CT.h17
-rw-r--r--include/linux/netfilter/xt_connbytes.h3
-rw-r--r--include/linux/netfilter/xt_esp.h3
-rw-r--r--include/linux/netfilter/xt_multiport.h9
-rw-r--r--include/linux/netfilter/xt_policy.h18
-rw-r--r--include/linux/netfilter/xt_state.h3
-rw-r--r--include/linux/netfilter/xt_string.h3
-rw-r--r--include/linux/netfilter/xt_tcpudp.h6
-rw-r--r--include/linux/netfilter_arp/arp_tables.h32
-rw-r--r--include/linux/netfilter_bridge/ebt_802_3.h3
-rw-r--r--include/linux/netfilter_bridge/ebt_among.h9
-rw-r--r--include/linux/netfilter_bridge/ebt_arpreply.h3
-rw-r--r--include/linux/netfilter_bridge/ebt_ip.h3
-rw-r--r--include/linux/netfilter_bridge/ebt_ip6.h3
-rw-r--r--include/linux/netfilter_bridge/ebt_limit.h3
-rw-r--r--include/linux/netfilter_bridge/ebt_log.h3
-rw-r--r--include/linux/netfilter_bridge/ebt_mark_m.h3
-rw-r--r--include/linux/netfilter_bridge/ebt_mark_t.h3
-rw-r--r--include/linux/netfilter_bridge/ebt_nat.h3
-rw-r--r--include/linux/netfilter_bridge/ebt_pkttype.h3
-rw-r--r--include/linux/netfilter_bridge/ebt_redirect.h3
-rw-r--r--include/linux/netfilter_bridge/ebt_stp.h6
-rw-r--r--include/linux/netfilter_bridge/ebtables.h41
-rw-r--r--include/linux/netfilter_ipv4/ip_tables.h45
-rw-r--r--include/linux/netfilter_ipv4/ipt_SAME.h3
-rw-r--r--include/linux/netfilter_ipv4/ipt_ah.h3
-rw-r--r--include/linux/netfilter_ipv6.h1
-rw-r--r--include/linux/netfilter_ipv6/ip6_tables.h44
-rw-r--r--include/linux/netfilter_ipv6/ip6t_ah.h3
-rw-r--r--include/linux/netfilter_ipv6/ip6t_frag.h3
-rw-r--r--include/linux/netfilter_ipv6/ip6t_ipv6header.h3
-rw-r--r--include/linux/netfilter_ipv6/ip6t_mh.h3
-rw-r--r--include/linux/netfilter_ipv6/ip6t_opts.h3
-rw-r--r--include/linux/netfilter_ipv6/ip6t_rt.h3
-rw-r--r--include/linux/netlink.h26
-rw-r--r--include/linux/netpoll.h11
-rw-r--r--include/linux/nfs4.h3
-rw-r--r--include/linux/nfs_fs.h15
-rw-r--r--include/linux/nfs_fs_sb.h6
-rw-r--r--include/linux/nfs_xdr.h14
-rw-r--r--include/linux/nfsacl.h1
-rw-r--r--include/linux/nfsd/cache.h86
-rw-r--r--include/linux/nfsd/export.h19
-rw-r--r--include/linux/nfsd/nfsd.h424
-rw-r--r--include/linux/nfsd/nfsfh.h206
-rw-r--r--include/linux/nfsd/state.h404
-rw-r--r--include/linux/nfsd/syscall.h8
-rw-r--r--include/linux/nfsd/xdr.h177
-rw-r--r--include/linux/nfsd/xdr3.h346
-rw-r--r--include/linux/nfsd/xdr4.h563
-rw-r--r--include/linux/nilfs2_fs.h25
-rw-r--r--include/linux/nl80211.h207
-rw-r--r--include/linux/nl802154.h6
-rw-r--r--include/linux/node.h16
-rw-r--r--include/linux/nodemask.h44
-rw-r--r--include/linux/notifier.h2
-rw-r--r--include/linux/numa.h2
-rw-r--r--include/linux/of.h129
-rw-r--r--include/linux/of_fdt.h103
-rw-r--r--include/linux/omapfb.h260
-rw-r--r--include/linux/oom.h4
-rw-r--r--include/linux/padata.h88
-rw-r--r--include/linux/page-flags.h14
-rw-r--r--include/linux/page_cgroup.h15
-rw-r--r--include/linux/pagemap.h2
-rw-r--r--include/linux/pci-acpi.h7
-rw-r--r--include/linux/pci-dma.h11
-rw-r--r--include/linux/pci.h268
-rw-r--r--include/linux/pci_hotplug.h41
-rw-r--r--include/linux/pci_ids.h32
-rw-r--r--include/linux/pci_regs.h19
-rw-r--r--include/linux/pcieport_if.h16
-rw-r--r--include/linux/percpu-defs.h41
-rw-r--r--include/linux/percpu.h481
-rw-r--r--include/linux/percpu_counter.h11
-rw-r--r--include/linux/perf_counter.h441
-rw-r--r--include/linux/perf_event.h205
-rw-r--r--include/linux/pfkeyv2.h1
-rw-r--r--include/linux/phy.h3
-rw-r--r--include/linux/pkt_cls.h84
-rw-r--r--include/linux/pkt_sched.h111
-rw-r--r--include/linux/pktcdvd.h12
-rw-r--r--include/linux/platform_device.h29
-rw-r--r--include/linux/plist.h47
-rw-r--r--include/linux/pm.h67
-rw-r--r--include/linux/pm_runtime.h22
-rw-r--r--include/linux/pnp.h13
-rw-r--r--include/linux/poison.h25
-rw-r--r--include/linux/poll.h2
-rw-r--r--include/linux/posix_acl.h14
-rw-r--r--include/linux/power_supply.h1
-rw-r--r--include/linux/preempt.h5
-rw-r--r--include/linux/ptrace.h48
-rw-r--r--include/linux/pwm_backlight.h2
-rw-r--r--include/linux/quota.h55
-rw-r--r--include/linux/quotaops.h304
-rw-r--r--include/linux/radix-tree.h7
-rw-r--r--include/linux/raid/pq.h19
-rw-r--r--include/linux/raid_class.h1
-rw-r--r--include/linux/range.h30
-rw-r--r--include/linux/ratelimit.h33
-rw-r--r--include/linux/rbtree.h8
-rw-r--r--include/linux/rculist.h33
-rw-r--r--include/linux/rculist_nulls.h4
-rw-r--r--include/linux/rcupdate.h242
-rw-r--r--include/linux/rcutiny.h117
-rw-r--r--include/linux/rcutree.h20
-rw-r--r--include/linux/rds.h8
-rw-r--r--include/linux/reboot.h1
-rw-r--r--include/linux/regulator/consumer.h14
-rw-r--r--include/linux/regulator/driver.h6
-rw-r--r--include/linux/regulator/fixed.h2
-rw-r--r--include/linux/regulator/machine.h6
-rw-r--r--include/linux/regulator/max8649.h44
-rw-r--r--include/linux/regulator/max8660.h57
-rw-r--r--include/linux/reiserfs_fs.h134
-rw-r--r--include/linux/reiserfs_fs_sb.h20
-rw-r--r--include/linux/reiserfs_xattr.h5
-rw-r--r--include/linux/resource.h8
-rw-r--r--include/linux/resume-trace.h7
-rw-r--r--include/linux/rfkill.h5
-rw-r--r--include/linux/rmap.h81
-rw-r--r--include/linux/route.h3
-rw-r--r--include/linux/rtc.h6
-rw-r--r--include/linux/rtmutex.h8
-rw-r--r--include/linux/rtnetlink.h62
-rw-r--r--include/linux/rwlock.h125
-rw-r--r--include/linux/rwlock_api_smp.h282
-rw-r--r--include/linux/rwlock_types.h56
-rw-r--r--include/linux/rwsem-spinlock.h6
-rw-r--r--include/linux/sched.h233
-rw-r--r--include/linux/screen_info.h5
-rw-r--r--include/linux/sctp.h1
-rw-r--r--include/linux/securebits.h24
-rw-r--r--include/linux/security.h71
-rw-r--r--include/linux/sem.h5
-rw-r--r--include/linux/seq_file.h18
-rw-r--r--include/linux/serial_core.h14
-rw-r--r--include/linux/serial_reg.h8
-rw-r--r--include/linux/serial_sci.h10
-rw-r--r--include/linux/serio.h21
-rw-r--r--include/linux/sh_intc.h40
-rw-r--r--include/linux/sh_pfc.h96
-rw-r--r--include/linux/shmem_fs.h16
-rw-r--r--include/linux/signal.h2
-rw-r--r--include/linux/skbuff.h56
-rw-r--r--include/linux/slab.h6
-rw-r--r--include/linux/slab_def.h4
-rw-r--r--include/linux/slub_def.h31
-rw-r--r--include/linux/sm501-regs.h2
-rw-r--r--include/linux/smb_fs_sb.h3
-rw-r--r--include/linux/smp.h13
-rw-r--r--include/linux/smp_lock.h21
-rw-r--r--include/linux/smsc911x.h1
-rw-r--r--include/linux/snmp.h3
-rw-r--r--include/linux/socket.h14
-rw-r--r--include/linux/sonypi.h1
-rw-r--r--include/linux/spi/ad7879.h12
-rw-r--r--include/linux/spi/ads7846.h3
-rw-r--r--include/linux/spi/dw_spi.h217
-rw-r--r--include/linux/spi/l4f00242t03.h31
-rw-r--r--include/linux/spi/max7301.h18
-rw-r--r--include/linux/spi/sh_msiof.h10
-rw-r--r--include/linux/spi/spi.h1
-rw-r--r--include/linux/spi/spi_bitbang.h2
-rw-r--r--include/linux/spi/wl12xx.h1
-rw-r--r--include/linux/spi/xilinx_spi.h20
-rw-r--r--include/linux/spinlock.h382
-rw-r--r--include/linux/spinlock_api_smp.h395
-rw-r--r--include/linux/spinlock_api_up.h66
-rw-r--r--include/linux/spinlock_types.h92
-rw-r--r--include/linux/spinlock_types_up.h12
-rw-r--r--include/linux/spinlock_up.h42
-rw-r--r--include/linux/srcu.h98
-rw-r--r--include/linux/ssb/ssb.h20
-rw-r--r--include/linux/stmmac.h53
-rw-r--r--include/linux/string.h15
-rw-r--r--include/linux/sunrpc/bc_xprt.h20
-rw-r--r--include/linux/sunrpc/debug.h3
-rw-r--r--include/linux/sunrpc/rpc_rdma.h2
-rw-r--r--include/linux/sunrpc/sched.h16
-rw-r--r--include/linux/sunrpc/svc.h7
-rw-r--r--include/linux/swap.h76
-rw-r--r--include/linux/swiotlb.h12
-rw-r--r--include/linux/syscalls.h132
-rw-r--r--include/linux/sysctl.h56
-rw-r--r--include/linux/sysdev.h21
-rw-r--r--include/linux/sysfs.h70
-rw-r--r--include/linux/syslog.h52
-rw-r--r--include/linux/taskstats_kern.h8
-rw-r--r--include/linux/tc_act/tc_defact.h6
-rw-r--r--include/linux/tc_act/tc_gact.h9
-rw-r--r--include/linux/tc_act/tc_ipt.h3
-rw-r--r--include/linux/tc_act/tc_mirred.h6
-rw-r--r--include/linux/tc_act/tc_nat.h6
-rw-r--r--include/linux/tc_act/tc_pedit.h9
-rw-r--r--include/linux/tc_act/tc_skbedit.h2
-rw-r--r--include/linux/tc_ematch/tc_em_cmp.h6
-rw-r--r--include/linux/tc_ematch/tc_em_meta.h15
-rw-r--r--include/linux/tc_ematch/tc_em_nbyte.h3
-rw-r--r--include/linux/tc_ematch/tc_em_text.h3
-rw-r--r--include/linux/tcp.h79
-rw-r--r--include/linux/tick.h5
-rw-r--r--include/linux/timb_gpio.h37
-rw-r--r--include/linux/time.h1
-rw-r--r--include/linux/timex.h12
-rw-r--r--include/linux/topology.h2
-rw-r--r--include/linux/tpm.h9
-rw-r--r--include/linux/trace_seq.h7
-rw-r--r--include/linux/tracehook.h7
-rw-r--r--include/linux/tracepoint.h8
-rw-r--r--include/linux/tty.h42
-rw-r--r--include/linux/tty_flip.h7
-rw-r--r--include/linux/tty_ldisc.h8
-rw-r--r--include/linux/uaccess.h4
-rw-r--r--include/linux/ucb1400.h4
-rw-r--r--include/linux/udp.h15
-rw-r--r--include/linux/usb.h114
-rw-r--r--include/linux/usb/Kbuild1
-rw-r--r--include/linux/usb/atmel_usba_udc.h1
-rw-r--r--include/linux/usb/audio.h120
-rw-r--r--include/linux/usb/ch9.h2
-rw-r--r--include/linux/usb/composite.h1
-rw-r--r--include/linux/usb/gadget.h2
-rw-r--r--include/linux/usb/musb.h26
-rw-r--r--include/linux/usb/otg.h103
-rw-r--r--include/linux/usb/quirks.h3
-rw-r--r--include/linux/usb/serial.h19
-rw-r--r--include/linux/usb/ulpi.h7
-rw-r--r--include/linux/usb/usbnet.h29
-rw-r--r--include/linux/usb/vstusb.h71
-rw-r--r--include/linux/usb/wusb.h2
-rw-r--r--include/linux/usb_usual.h4
-rw-r--r--include/linux/usbdevice_fs.h26
-rw-r--r--include/linux/user-return-notifier.h49
-rw-r--r--include/linux/vermagic.h2
-rw-r--r--include/linux/vga_switcheroo.h57
-rw-r--r--include/linux/vhost.h130
-rw-r--r--include/linux/videodev2.h134
-rw-r--r--include/linux/virtio.h5
-rw-r--r--include/linux/virtio_9p.h13
-rw-r--r--include/linux/virtio_balloon.h15
-rw-r--r--include/linux/virtio_blk.h13
-rw-r--r--include/linux/virtio_console.h9
-rw-r--r--include/linux/vmstat.h12
-rw-r--r--include/linux/vt.h19
-rw-r--r--include/linux/vt_kern.h3
-rw-r--r--include/linux/wimax/debug.h73
-rw-r--r--include/linux/wimax/i2400m.h13
-rw-r--r--include/linux/workqueue.h38
-rw-r--r--include/linux/writeback.h8
-rw-r--r--include/linux/x25.h1
-rw-r--r--include/linux/xattr.h13
-rw-r--r--include/linux/xfrm.h47
557 files changed, 20345 insertions, 8217 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild
index 1feed71551c9..e2ea0b2159cd 100644
--- a/include/linux/Kbuild
+++ b/include/linux/Kbuild
@@ -43,6 +43,7 @@ header-y += blkpg.h
43header-y += bpqether.h 43header-y += bpqether.h
44header-y += bsg.h 44header-y += bsg.h
45header-y += can.h 45header-y += can.h
46header-y += cciss_defs.h
46header-y += cdk.h 47header-y += cdk.h
47header-y += chio.h 48header-y += chio.h
48header-y += coda_psdev.h 49header-y += coda_psdev.h
@@ -118,12 +119,14 @@ header-y += mtio.h
118header-y += ncp_no.h 119header-y += ncp_no.h
119header-y += neighbour.h 120header-y += neighbour.h
120header-y += net_dropmon.h 121header-y += net_dropmon.h
122header-y += net_tstamp.h
121header-y += netfilter_arp.h 123header-y += netfilter_arp.h
122header-y += netrom.h 124header-y += netrom.h
123header-y += nfs2.h 125header-y += nfs2.h
124header-y += nfs4_mount.h 126header-y += nfs4_mount.h
125header-y += nfs_mount.h 127header-y += nfs_mount.h
126header-y += nl80211.h 128header-y += nl80211.h
129header-y += omapfb.h
127header-y += param.h 130header-y += param.h
128header-y += pci_regs.h 131header-y += pci_regs.h
129header-y += perf_event.h 132header-y += perf_event.h
@@ -214,7 +217,6 @@ unifdef-y += futex.h
214unifdef-y += fs.h 217unifdef-y += fs.h
215unifdef-y += gameport.h 218unifdef-y += gameport.h
216unifdef-y += generic_serial.h 219unifdef-y += generic_serial.h
217unifdef-y += hayesesp.h
218unifdef-y += hdlcdrv.h 220unifdef-y += hdlcdrv.h
219unifdef-y += hdlc.h 221unifdef-y += hdlc.h
220unifdef-y += hdreg.h 222unifdef-y += hdreg.h
@@ -330,6 +332,7 @@ unifdef-y += scc.h
330unifdef-y += sched.h 332unifdef-y += sched.h
331unifdef-y += screen_info.h 333unifdef-y += screen_info.h
332unifdef-y += sdla.h 334unifdef-y += sdla.h
335unifdef-y += securebits.h
333unifdef-y += selinux_netlink.h 336unifdef-y += selinux_netlink.h
334unifdef-y += sem.h 337unifdef-y += sem.h
335unifdef-y += serial_core.h 338unifdef-y += serial_core.h
@@ -361,6 +364,7 @@ unifdef-y += uio.h
361unifdef-y += unistd.h 364unifdef-y += unistd.h
362unifdef-y += usbdevice_fs.h 365unifdef-y += usbdevice_fs.h
363unifdef-y += utsname.h 366unifdef-y += utsname.h
367unifdef-y += vhost.h
364unifdef-y += videodev2.h 368unifdef-y += videodev2.h
365unifdef-y += videodev.h 369unifdef-y += videodev.h
366unifdef-y += virtio_config.h 370unifdef-y += virtio_config.h
diff --git a/include/linux/acct.h b/include/linux/acct.h
index 882dc7248766..3e4737fa6cce 100644
--- a/include/linux/acct.h
+++ b/include/linux/acct.h
@@ -121,16 +121,15 @@ struct vfsmount;
121struct super_block; 121struct super_block;
122struct pacct_struct; 122struct pacct_struct;
123struct pid_namespace; 123struct pid_namespace;
124extern int acct_parm[]; /* for sysctl */
124extern void acct_auto_close_mnt(struct vfsmount *m); 125extern void acct_auto_close_mnt(struct vfsmount *m);
125extern void acct_auto_close(struct super_block *sb); 126extern void acct_auto_close(struct super_block *sb);
126extern void acct_init_pacct(struct pacct_struct *pacct);
127extern void acct_collect(long exitcode, int group_dead); 127extern void acct_collect(long exitcode, int group_dead);
128extern void acct_process(void); 128extern void acct_process(void);
129extern void acct_exit_ns(struct pid_namespace *); 129extern void acct_exit_ns(struct pid_namespace *);
130#else 130#else
131#define acct_auto_close_mnt(x) do { } while (0) 131#define acct_auto_close_mnt(x) do { } while (0)
132#define acct_auto_close(x) do { } while (0) 132#define acct_auto_close(x) do { } while (0)
133#define acct_init_pacct(x) do { } while (0)
134#define acct_collect(x,y) do { } while (0) 133#define acct_collect(x,y) do { } while (0)
135#define acct_process() do { } while (0) 134#define acct_process() do { } while (0)
136#define acct_exit_ns(ns) do { } while (0) 135#define acct_exit_ns(ns) do { } while (0)
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index dfcd920c3e54..b926afe8c03e 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -80,7 +80,7 @@ char * __acpi_map_table (unsigned long phys_addr, unsigned long size);
80void __acpi_unmap_table(char *map, unsigned long size); 80void __acpi_unmap_table(char *map, unsigned long size);
81int early_acpi_boot_init(void); 81int early_acpi_boot_init(void);
82int acpi_boot_init (void); 82int acpi_boot_init (void);
83int acpi_boot_table_init (void); 83void acpi_boot_table_init (void);
84int acpi_mps_check (void); 84int acpi_mps_check (void);
85int acpi_numa_init (void); 85int acpi_numa_init (void);
86 86
@@ -240,7 +240,7 @@ extern int pnpacpi_disabled;
240#define PXM_INVAL (-1) 240#define PXM_INVAL (-1)
241#define NID_INVAL (-1) 241#define NID_INVAL (-1)
242 242
243int acpi_check_resource_conflict(struct resource *res); 243int acpi_check_resource_conflict(const struct resource *res);
244 244
245int acpi_check_region(resource_size_t start, resource_size_t n, 245int acpi_check_region(resource_size_t start, resource_size_t n,
246 const char *name); 246 const char *name);
@@ -251,12 +251,19 @@ int acpi_check_mem_region(resource_size_t start, resource_size_t n,
251void __init acpi_no_s4_hw_signature(void); 251void __init acpi_no_s4_hw_signature(void);
252void __init acpi_old_suspend_ordering(void); 252void __init acpi_old_suspend_ordering(void);
253void __init acpi_s4_no_nvs(void); 253void __init acpi_s4_no_nvs(void);
254void __init acpi_set_sci_en_on_resume(void);
254#endif /* CONFIG_PM_SLEEP */ 255#endif /* CONFIG_PM_SLEEP */
255 256
257struct acpi_osc_context {
258 char *uuid_str; /* uuid string */
259 int rev;
260 struct acpi_buffer cap; /* arg2/arg3 */
261 struct acpi_buffer ret; /* free by caller if success */
262};
263
256#define OSC_QUERY_TYPE 0 264#define OSC_QUERY_TYPE 0
257#define OSC_SUPPORT_TYPE 1 265#define OSC_SUPPORT_TYPE 1
258#define OSC_CONTROL_TYPE 2 266#define OSC_CONTROL_TYPE 2
259#define OSC_SUPPORT_MASKS 0x1f
260 267
261/* _OSC DW0 Definition */ 268/* _OSC DW0 Definition */
262#define OSC_QUERY_ENABLE 1 269#define OSC_QUERY_ENABLE 1
@@ -265,12 +272,23 @@ void __init acpi_s4_no_nvs(void);
265#define OSC_INVALID_REVISION_ERROR 8 272#define OSC_INVALID_REVISION_ERROR 8
266#define OSC_CAPABILITIES_MASK_ERROR 16 273#define OSC_CAPABILITIES_MASK_ERROR 16
267 274
275acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context);
276
277/* platform-wide _OSC bits */
278#define OSC_SB_PAD_SUPPORT 1
279#define OSC_SB_PPC_OST_SUPPORT 2
280#define OSC_SB_PR3_SUPPORT 4
281#define OSC_SB_CPUHP_OST_SUPPORT 8
282#define OSC_SB_APEI_SUPPORT 16
283
284/* PCI defined _OSC bits */
268/* _OSC DW1 Definition (OS Support Fields) */ 285/* _OSC DW1 Definition (OS Support Fields) */
269#define OSC_EXT_PCI_CONFIG_SUPPORT 1 286#define OSC_EXT_PCI_CONFIG_SUPPORT 1
270#define OSC_ACTIVE_STATE_PWR_SUPPORT 2 287#define OSC_ACTIVE_STATE_PWR_SUPPORT 2
271#define OSC_CLOCK_PWR_CAPABILITY_SUPPORT 4 288#define OSC_CLOCK_PWR_CAPABILITY_SUPPORT 4
272#define OSC_PCI_SEGMENT_GROUPS_SUPPORT 8 289#define OSC_PCI_SEGMENT_GROUPS_SUPPORT 8
273#define OSC_MSI_SUPPORT 16 290#define OSC_MSI_SUPPORT 16
291#define OSC_PCI_SUPPORT_MASKS 0x1f
274 292
275/* _OSC DW1 Definition (OS Control Fields) */ 293/* _OSC DW1 Definition (OS Control Fields) */
276#define OSC_PCI_EXPRESS_NATIVE_HP_CONTROL 1 294#define OSC_PCI_EXPRESS_NATIVE_HP_CONTROL 1
@@ -279,7 +297,7 @@ void __init acpi_s4_no_nvs(void);
279#define OSC_PCI_EXPRESS_AER_CONTROL 8 297#define OSC_PCI_EXPRESS_AER_CONTROL 8
280#define OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL 16 298#define OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL 16
281 299
282#define OSC_CONTROL_MASKS (OSC_PCI_EXPRESS_NATIVE_HP_CONTROL | \ 300#define OSC_PCI_CONTROL_MASKS (OSC_PCI_EXPRESS_NATIVE_HP_CONTROL | \
283 OSC_SHPC_NATIVE_HP_CONTROL | \ 301 OSC_SHPC_NATIVE_HP_CONTROL | \
284 OSC_PCI_EXPRESS_PME_CONTROL | \ 302 OSC_PCI_EXPRESS_PME_CONTROL | \
285 OSC_PCI_EXPRESS_AER_CONTROL | \ 303 OSC_PCI_EXPRESS_AER_CONTROL | \
@@ -303,9 +321,9 @@ static inline int acpi_boot_init(void)
303 return 0; 321 return 0;
304} 322}
305 323
306static inline int acpi_boot_table_init(void) 324static inline void acpi_boot_table_init(void)
307{ 325{
308 return 0; 326 return;
309} 327}
310 328
311static inline int acpi_mps_check(void) 329static inline int acpi_mps_check(void)
diff --git a/include/linux/aio.h b/include/linux/aio.h
index aea219d7d8d1..811dbb369379 100644
--- a/include/linux/aio.h
+++ b/include/linux/aio.h
@@ -102,7 +102,6 @@ struct kiocb {
102 } ki_obj; 102 } ki_obj;
103 103
104 __u64 ki_user_data; /* user's data for completion */ 104 __u64 ki_user_data; /* user's data for completion */
105 wait_queue_t ki_wait;
106 loff_t ki_pos; 105 loff_t ki_pos;
107 106
108 void *private; 107 void *private;
@@ -140,7 +139,6 @@ struct kiocb {
140 (x)->ki_dtor = NULL; \ 139 (x)->ki_dtor = NULL; \
141 (x)->ki_obj.tsk = tsk; \ 140 (x)->ki_obj.tsk = tsk; \
142 (x)->ki_user_data = 0; \ 141 (x)->ki_user_data = 0; \
143 init_wait((&(x)->ki_wait)); \
144 } while (0) 142 } while (0)
145 143
146#define AIO_RING_MAGIC 0xa10a10a1 144#define AIO_RING_MAGIC 0xa10a10a1
@@ -223,8 +221,6 @@ struct mm_struct;
223static inline void exit_aio(struct mm_struct *mm) { } 221static inline void exit_aio(struct mm_struct *mm) { }
224#endif /* CONFIG_AIO */ 222#endif /* CONFIG_AIO */
225 223
226#define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait)
227
228static inline struct kiocb *list_kiocb(struct list_head *h) 224static inline struct kiocb *list_kiocb(struct list_head *h)
229{ 225{
230 return list_entry(h, struct kiocb, ki_list); 226 return list_entry(h, struct kiocb, ki_list);
diff --git a/include/linux/amba/bus.h b/include/linux/amba/bus.h
index ab94335b4bb9..8b1038607831 100644
--- a/include/linux/amba/bus.h
+++ b/include/linux/amba/bus.h
@@ -1,5 +1,9 @@
1/* 1/*
2 * linux/include/asm-arm/hardware/amba.h 2 * linux/include/amba/bus.h
3 *
4 * This device type deals with ARM PrimeCells and anything else that
5 * presents a proper CID (0xB105F00D) at the end of the I/O register
6 * region or that is derived from a PrimeCell.
3 * 7 *
4 * Copyright (C) 2003 Deep Blue Solutions Ltd, All Rights Reserved. 8 * Copyright (C) 2003 Deep Blue Solutions Ltd, All Rights Reserved.
5 * 9 *
@@ -10,6 +14,9 @@
10#ifndef ASMARM_AMBA_H 14#ifndef ASMARM_AMBA_H
11#define ASMARM_AMBA_H 15#define ASMARM_AMBA_H
12 16
17#include <linux/device.h>
18#include <linux/resource.h>
19
13#define AMBA_NR_IRQS 2 20#define AMBA_NR_IRQS 2
14 21
15struct amba_device { 22struct amba_device {
diff --git a/include/linux/amba/clcd.h b/include/linux/amba/clcd.h
index 29c0448265cf..ca16c3801a1e 100644
--- a/include/linux/amba/clcd.h
+++ b/include/linux/amba/clcd.h
@@ -21,22 +21,21 @@
21#define CLCD_UBAS 0x00000010 21#define CLCD_UBAS 0x00000010
22#define CLCD_LBAS 0x00000014 22#define CLCD_LBAS 0x00000014
23 23
24#if !defined(CONFIG_ARCH_VERSATILE) && !defined(CONFIG_ARCH_REALVIEW) 24#define CLCD_PL110_IENB 0x00000018
25#define CLCD_IENB 0x00000018 25#define CLCD_PL110_CNTL 0x0000001c
26#define CLCD_CNTL 0x0000001c 26#define CLCD_PL110_STAT 0x00000020
27#else 27#define CLCD_PL110_INTR 0x00000024
28/* 28#define CLCD_PL110_UCUR 0x00000028
29 * Someone rearranged these two registers on the Versatile 29#define CLCD_PL110_LCUR 0x0000002C
30 * platform... 30
31 */ 31#define CLCD_PL111_CNTL 0x00000018
32#define CLCD_IENB 0x0000001c 32#define CLCD_PL111_IENB 0x0000001c
33#define CLCD_CNTL 0x00000018 33#define CLCD_PL111_RIS 0x00000020
34#endif 34#define CLCD_PL111_MIS 0x00000024
35 35#define CLCD_PL111_ICR 0x00000028
36#define CLCD_STAT 0x00000020 36#define CLCD_PL111_UCUR 0x0000002c
37#define CLCD_INTR 0x00000024 37#define CLCD_PL111_LCUR 0x00000030
38#define CLCD_UCUR 0x00000028 38
39#define CLCD_LCUR 0x0000002C
40#define CLCD_PALL 0x00000200 39#define CLCD_PALL 0x00000200
41#define CLCD_PALETTE 0x00000200 40#define CLCD_PALETTE 0x00000200
42 41
@@ -147,6 +146,8 @@ struct clcd_fb {
147 struct clcd_board *board; 146 struct clcd_board *board;
148 void *board_data; 147 void *board_data;
149 void __iomem *regs; 148 void __iomem *regs;
149 u16 off_ienb;
150 u16 off_cntl;
150 u32 clcd_cntl; 151 u32 clcd_cntl;
151 u32 cmap[16]; 152 u32 cmap[16];
152}; 153};
diff --git a/include/linux/amba/pl061.h b/include/linux/amba/pl061.h
index b4fbd9862606..5ddd9ad4b19c 100644
--- a/include/linux/amba/pl061.h
+++ b/include/linux/amba/pl061.h
@@ -1,3 +1,5 @@
1#include <linux/types.h>
2
1/* platform data for the PL061 GPIO driver */ 3/* platform data for the PL061 GPIO driver */
2 4
3struct pl061_platform_data { 5struct pl061_platform_data {
diff --git a/include/linux/ata.h b/include/linux/ata.h
index 4fb357312b3b..700c5b9b3583 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -75,6 +75,7 @@ enum {
75 ATA_ID_EIDE_DMA_TIME = 66, 75 ATA_ID_EIDE_DMA_TIME = 66,
76 ATA_ID_EIDE_PIO = 67, 76 ATA_ID_EIDE_PIO = 67,
77 ATA_ID_EIDE_PIO_IORDY = 68, 77 ATA_ID_EIDE_PIO_IORDY = 68,
78 ATA_ID_ADDITIONAL_SUPP = 69,
78 ATA_ID_QUEUE_DEPTH = 75, 79 ATA_ID_QUEUE_DEPTH = 75,
79 ATA_ID_MAJOR_VER = 80, 80 ATA_ID_MAJOR_VER = 80,
80 ATA_ID_COMMAND_SET_1 = 82, 81 ATA_ID_COMMAND_SET_1 = 82,
@@ -87,6 +88,7 @@ enum {
87 ATA_ID_HW_CONFIG = 93, 88 ATA_ID_HW_CONFIG = 93,
88 ATA_ID_SPG = 98, 89 ATA_ID_SPG = 98,
89 ATA_ID_LBA_CAPACITY_2 = 100, 90 ATA_ID_LBA_CAPACITY_2 = 100,
91 ATA_ID_SECTOR_SIZE = 106,
90 ATA_ID_LAST_LUN = 126, 92 ATA_ID_LAST_LUN = 126,
91 ATA_ID_DLF = 128, 93 ATA_ID_DLF = 128,
92 ATA_ID_CSFO = 129, 94 ATA_ID_CSFO = 129,
@@ -638,6 +640,18 @@ static inline int ata_id_flush_ext_enabled(const u16 *id)
638 return (id[ATA_ID_CFS_ENABLE_2] & 0x2400) == 0x2400; 640 return (id[ATA_ID_CFS_ENABLE_2] & 0x2400) == 0x2400;
639} 641}
640 642
643static inline int ata_id_has_large_logical_sectors(const u16 *id)
644{
645 if ((id[ATA_ID_SECTOR_SIZE] & 0xc000) != 0x4000)
646 return 0;
647 return id[ATA_ID_SECTOR_SIZE] & (1 << 13);
648}
649
650static inline u16 ata_id_logical_per_physical_sectors(const u16 *id)
651{
652 return 1 << (id[ATA_ID_SECTOR_SIZE] & 0xf);
653}
654
641static inline int ata_id_has_lba48(const u16 *id) 655static inline int ata_id_has_lba48(const u16 *id)
642{ 656{
643 if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000) 657 if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000)
@@ -803,6 +817,16 @@ static inline int ata_id_has_trim(const u16 *id)
803 return 0; 817 return 0;
804} 818}
805 819
820static inline int ata_id_has_zero_after_trim(const u16 *id)
821{
822 /* DSM supported, deterministic read, and read zero after trim set */
823 if (ata_id_has_trim(id) &&
824 (id[ATA_ID_ADDITIONAL_SUPP] & 0x4020) == 0x4020)
825 return 1;
826
827 return 0;
828}
829
806static inline int ata_id_current_chs_valid(const u16 *id) 830static inline int ata_id_current_chs_valid(const u16 *id)
807{ 831{
808 /* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command 832 /* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command
@@ -817,7 +841,8 @@ static inline int ata_id_current_chs_valid(const u16 *id)
817 841
818static inline int ata_id_is_cfa(const u16 *id) 842static inline int ata_id_is_cfa(const u16 *id)
819{ 843{
820 if (id[ATA_ID_CONFIG] == 0x848A) /* Traditional CF */ 844 if ((id[ATA_ID_CONFIG] == 0x848A) || /* Traditional CF */
845 (id[ATA_ID_CONFIG] == 0x844A)) /* Delkin Devices CF */
821 return 1; 846 return 1;
822 /* 847 /*
823 * CF specs don't require specific value in the word 0 anymore and yet 848 * CF specs don't require specific value in the word 0 anymore and yet
@@ -958,17 +983,17 @@ static inline void ata_id_to_hd_driveid(u16 *id)
958} 983}
959 984
960/* 985/*
961 * Write up to 'max' LBA Range Entries to the buffer that will cover the 986 * Write LBA Range Entries to the buffer that will cover the extent from
962 * extent from sector to sector + count. This is used for TRIM and for 987 * sector to sector + count. This is used for TRIM and for ADD LBA(S)
963 * ADD LBA(S) TO NV CACHE PINNED SET. 988 * TO NV CACHE PINNED SET.
964 */ 989 */
965static inline unsigned ata_set_lba_range_entries(void *_buffer, unsigned max, 990static inline unsigned ata_set_lba_range_entries(void *_buffer,
966 u64 sector, unsigned long count) 991 unsigned buf_size, u64 sector, unsigned long count)
967{ 992{
968 __le64 *buffer = _buffer; 993 __le64 *buffer = _buffer;
969 unsigned i = 0; 994 unsigned i = 0, used_bytes;
970 995
971 while (i < max) { 996 while (i < buf_size / 8 ) { /* 6-byte LBA + 2-byte range per entry */
972 u64 entry = sector | 997 u64 entry = sector |
973 ((u64)(count > 0xffff ? 0xffff : count) << 48); 998 ((u64)(count > 0xffff ? 0xffff : count) << 48);
974 buffer[i++] = __cpu_to_le64(entry); 999 buffer[i++] = __cpu_to_le64(entry);
@@ -978,9 +1003,9 @@ static inline unsigned ata_set_lba_range_entries(void *_buffer, unsigned max,
978 sector += 0xffff; 1003 sector += 0xffff;
979 } 1004 }
980 1005
981 max = ALIGN(i * 8, 512); 1006 used_bytes = ALIGN(i * 8, 512);
982 memset(buffer + i, 0, max - i * 8); 1007 memset(buffer + i, 0, used_bytes - i * 8);
983 return max; 1008 return used_bytes;
984} 1009}
985 1010
986static inline int is_multi_taskfile(struct ata_taskfile *tf) 1011static inline int is_multi_taskfile(struct ata_taskfile *tf)
@@ -1000,8 +1025,8 @@ static inline int ata_ok(u8 status)
1000 1025
1001static inline int lba_28_ok(u64 block, u32 n_block) 1026static inline int lba_28_ok(u64 block, u32 n_block)
1002{ 1027{
1003 /* check the ending block number */ 1028 /* check the ending block number: must be LESS THAN 0x0fffffff */
1004 return ((block + n_block) < ((u64)1 << 28)) && (n_block <= 256); 1029 return ((block + n_block) < ((1 << 28) - 1)) && (n_block <= 256);
1005} 1030}
1006 1031
1007static inline int lba_48_ok(u64 block, u32 n_block) 1032static inline int lba_48_ok(u64 block, u32 n_block)
diff --git a/include/linux/atmel-mci.h b/include/linux/atmel-mci.h
index 57b1846a3c87..3e09b345f4d6 100644
--- a/include/linux/atmel-mci.h
+++ b/include/linux/atmel-mci.h
@@ -3,8 +3,6 @@
3 3
4#define ATMEL_MCI_MAX_NR_SLOTS 2 4#define ATMEL_MCI_MAX_NR_SLOTS 2
5 5
6#include <linux/dw_dmac.h>
7
8/** 6/**
9 * struct mci_slot_pdata - board-specific per-slot configuration 7 * struct mci_slot_pdata - board-specific per-slot configuration
10 * @bus_width: Number of data lines wired up the slot 8 * @bus_width: Number of data lines wired up the slot
@@ -34,7 +32,7 @@ struct mci_slot_pdata {
34 * @slot: Per-slot configuration data. 32 * @slot: Per-slot configuration data.
35 */ 33 */
36struct mci_platform_data { 34struct mci_platform_data {
37 struct dw_dma_slave dma_slave; 35 struct mci_dma_data *dma_slave;
38 struct mci_slot_pdata slot[ATMEL_MCI_MAX_NR_SLOTS]; 36 struct mci_slot_pdata slot[ATMEL_MCI_MAX_NR_SLOTS];
39}; 37};
40 38
diff --git a/include/linux/audit.h b/include/linux/audit.h
index 3c7a358241a7..f391d45c8aea 100644
--- a/include/linux/audit.h
+++ b/include/linux/audit.h
@@ -424,7 +424,7 @@ extern void audit_syscall_exit(int failed, long return_code);
424extern void __audit_getname(const char *name); 424extern void __audit_getname(const char *name);
425extern void audit_putname(const char *name); 425extern void audit_putname(const char *name);
426extern void __audit_inode(const char *name, const struct dentry *dentry); 426extern void __audit_inode(const char *name, const struct dentry *dentry);
427extern void __audit_inode_child(const char *dname, const struct dentry *dentry, 427extern void __audit_inode_child(const struct dentry *dentry,
428 const struct inode *parent); 428 const struct inode *parent);
429extern void __audit_ptrace(struct task_struct *t); 429extern void __audit_ptrace(struct task_struct *t);
430 430
@@ -442,11 +442,10 @@ static inline void audit_inode(const char *name, const struct dentry *dentry) {
442 if (unlikely(!audit_dummy_context())) 442 if (unlikely(!audit_dummy_context()))
443 __audit_inode(name, dentry); 443 __audit_inode(name, dentry);
444} 444}
445static inline void audit_inode_child(const char *dname, 445static inline void audit_inode_child(const struct dentry *dentry,
446 const struct dentry *dentry,
447 const struct inode *parent) { 446 const struct inode *parent) {
448 if (unlikely(!audit_dummy_context())) 447 if (unlikely(!audit_dummy_context()))
449 __audit_inode_child(dname, dentry, parent); 448 __audit_inode_child(dentry, parent);
450} 449}
451void audit_core_dumps(long signr); 450void audit_core_dumps(long signr);
452 451
@@ -544,9 +543,9 @@ extern int audit_signals;
544#define audit_getname(n) do { ; } while (0) 543#define audit_getname(n) do { ; } while (0)
545#define audit_putname(n) do { ; } while (0) 544#define audit_putname(n) do { ; } while (0)
546#define __audit_inode(n,d) do { ; } while (0) 545#define __audit_inode(n,d) do { ; } while (0)
547#define __audit_inode_child(d,i,p) do { ; } while (0) 546#define __audit_inode_child(i,p) do { ; } while (0)
548#define audit_inode(n,d) do { ; } while (0) 547#define audit_inode(n,d) do { ; } while (0)
549#define audit_inode_child(d,i,p) do { ; } while (0) 548#define audit_inode_child(i,p) do { ; } while (0)
550#define audit_core_dumps(i) do { ; } while (0) 549#define audit_core_dumps(i) do { ; } while (0)
551#define auditsc_get_stamp(c,t,s) (0) 550#define auditsc_get_stamp(c,t,s) (0)
552#define audit_get_loginuid(t) (-1) 551#define audit_get_loginuid(t) (-1)
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h
index b449e738533a..bd0e3c6f323f 100644
--- a/include/linux/backing-dev.h
+++ b/include/linux/backing-dev.h
@@ -101,6 +101,7 @@ int bdi_register(struct backing_dev_info *bdi, struct device *parent,
101 const char *fmt, ...); 101 const char *fmt, ...);
102int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev); 102int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev);
103void bdi_unregister(struct backing_dev_info *bdi); 103void bdi_unregister(struct backing_dev_info *bdi);
104int bdi_setup_and_register(struct backing_dev_info *, char *, unsigned int);
104void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb, 105void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb,
105 long nr_pages); 106 long nr_pages);
106int bdi_writeback_task(struct bdi_writeback *wb); 107int bdi_writeback_task(struct bdi_writeback *wb);
@@ -246,6 +247,7 @@ int bdi_set_max_ratio(struct backing_dev_info *bdi, unsigned int max_ratio);
246#endif 247#endif
247 248
248extern struct backing_dev_info default_backing_dev_info; 249extern struct backing_dev_info default_backing_dev_info;
250extern struct backing_dev_info noop_backing_dev_info;
249void default_unplug_io_fn(struct backing_dev_info *bdi, struct page *page); 251void default_unplug_io_fn(struct backing_dev_info *bdi, struct page *page);
250 252
251int writeback_in_progress(struct backing_dev_info *bdi); 253int writeback_in_progress(struct backing_dev_info *bdi);
@@ -331,4 +333,17 @@ static inline int bdi_sched_wait(void *word)
331 return 0; 333 return 0;
332} 334}
333 335
336static inline void blk_run_backing_dev(struct backing_dev_info *bdi,
337 struct page *page)
338{
339 if (bdi && bdi->unplug_io_fn)
340 bdi->unplug_io_fn(bdi, page);
341}
342
343static inline void blk_run_address_space(struct address_space *mapping)
344{
345 if (mapping)
346 blk_run_backing_dev(mapping->backing_dev_info, NULL);
347}
348
334#endif /* _LINUX_BACKING_DEV_H */ 349#endif /* _LINUX_BACKING_DEV_H */
diff --git a/include/linux/backlight.h b/include/linux/backlight.h
index 0f5f57858a23..4a3d52e545e1 100644
--- a/include/linux/backlight.h
+++ b/include/linux/backlight.h
@@ -47,7 +47,7 @@ struct backlight_ops {
47 int (*get_brightness)(struct backlight_device *); 47 int (*get_brightness)(struct backlight_device *);
48 /* Check if given framebuffer device is the one bound to this backlight; 48 /* Check if given framebuffer device is the one bound to this backlight;
49 return 0 if not, !=0 if it is. If NULL, backlight always matches the fb. */ 49 return 0 if not, !=0 if it is. If NULL, backlight always matches the fb. */
50 int (*check_fb)(struct fb_info *); 50 int (*check_fb)(struct backlight_device *, struct fb_info *);
51}; 51};
52 52
53/* This structure defines all the properties of a backlight */ 53/* This structure defines all the properties of a backlight */
@@ -86,7 +86,7 @@ struct backlight_device {
86 registered this device has been unloaded, and if class_get_devdata() 86 registered this device has been unloaded, and if class_get_devdata()
87 points to something in the body of that driver, it is also invalid. */ 87 points to something in the body of that driver, it is also invalid. */
88 struct mutex ops_lock; 88 struct mutex ops_lock;
89 struct backlight_ops *ops; 89 const struct backlight_ops *ops;
90 90
91 /* The framebuffer notifier block */ 91 /* The framebuffer notifier block */
92 struct notifier_block fb_notif; 92 struct notifier_block fb_notif;
@@ -103,7 +103,8 @@ static inline void backlight_update_status(struct backlight_device *bd)
103} 103}
104 104
105extern struct backlight_device *backlight_device_register(const char *name, 105extern struct backlight_device *backlight_device_register(const char *name,
106 struct device *dev, void *devdata, struct backlight_ops *ops); 106 struct device *dev, void *devdata, const struct backlight_ops *ops,
107 const struct backlight_properties *props);
107extern void backlight_device_unregister(struct backlight_device *bd); 108extern void backlight_device_unregister(struct backlight_device *bd);
108extern void backlight_force_update(struct backlight_device *bd, 109extern void backlight_force_update(struct backlight_device *bd,
109 enum backlight_update_reason reason); 110 enum backlight_update_reason reason);
diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h
index aece486ac734..c809e286d213 100644
--- a/include/linux/binfmts.h
+++ b/include/linux/binfmts.h
@@ -68,6 +68,15 @@ struct linux_binprm{
68 68
69#define BINPRM_MAX_RECURSION 4 69#define BINPRM_MAX_RECURSION 4
70 70
71/* Function parameter for binfmt->coredump */
72struct coredump_params {
73 long signr;
74 struct pt_regs *regs;
75 struct file *file;
76 unsigned long limit;
77 unsigned long mm_flags;
78};
79
71/* 80/*
72 * This structure defines the functions that are used to load the binary formats that 81 * This structure defines the functions that are used to load the binary formats that
73 * linux accepts. 82 * linux accepts.
@@ -77,7 +86,7 @@ struct linux_binfmt {
77 struct module *module; 86 struct module *module;
78 int (*load_binary)(struct linux_binprm *, struct pt_regs * regs); 87 int (*load_binary)(struct linux_binprm *, struct pt_regs * regs);
79 int (*load_shlib)(struct file *); 88 int (*load_shlib)(struct file *);
80 int (*core_dump)(long signr, struct pt_regs *regs, struct file *file, unsigned long limit); 89 int (*core_dump)(struct coredump_params *cprm);
81 unsigned long min_coredump; /* minimal dump size */ 90 unsigned long min_coredump; /* minimal dump size */
82 int hasvdso; 91 int hasvdso;
83}; 92};
@@ -101,6 +110,7 @@ extern int prepare_binprm(struct linux_binprm *);
101extern int __must_check remove_arg_zero(struct linux_binprm *); 110extern int __must_check remove_arg_zero(struct linux_binprm *);
102extern int search_binary_handler(struct linux_binprm *,struct pt_regs *); 111extern int search_binary_handler(struct linux_binprm *,struct pt_regs *);
103extern int flush_old_exec(struct linux_binprm * bprm); 112extern int flush_old_exec(struct linux_binprm * bprm);
113extern void setup_new_exec(struct linux_binprm * bprm);
104 114
105extern int suid_dumpable; 115extern int suid_dumpable;
106#define SUID_DUMP_DISABLE 0 /* No setuid dumping */ 116#define SUID_DUMP_DISABLE 0 /* No setuid dumping */
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 5be93f18d842..7fc5606e6ea5 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -391,6 +391,18 @@ extern struct bio *bio_copy_kern(struct request_queue *, void *, unsigned int,
391 gfp_t, int); 391 gfp_t, int);
392extern void bio_set_pages_dirty(struct bio *bio); 392extern void bio_set_pages_dirty(struct bio *bio);
393extern void bio_check_pages_dirty(struct bio *bio); 393extern void bio_check_pages_dirty(struct bio *bio);
394
395#ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
396# error "You should define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE for your platform"
397#endif
398#if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
399extern void bio_flush_dcache_pages(struct bio *bi);
400#else
401static inline void bio_flush_dcache_pages(struct bio *bi)
402{
403}
404#endif
405
394extern struct bio *bio_copy_user(struct request_queue *, struct rq_map_data *, 406extern struct bio *bio_copy_user(struct request_queue *, struct rq_map_data *,
395 unsigned long, unsigned int, int, gfp_t); 407 unsigned long, unsigned int, int, gfp_t);
396extern struct bio *bio_copy_user_iov(struct request_queue *, 408extern struct bio *bio_copy_user_iov(struct request_queue *,
@@ -450,11 +462,8 @@ extern struct biovec_slab bvec_slabs[BIOVEC_NR_POOLS] __read_mostly;
450/* 462/*
451 * remember never ever reenable interrupts between a bvec_kmap_irq and 463 * remember never ever reenable interrupts between a bvec_kmap_irq and
452 * bvec_kunmap_irq! 464 * bvec_kunmap_irq!
453 *
454 * This function MUST be inlined - it plays with the CPU interrupt flags.
455 */ 465 */
456static __always_inline char *bvec_kmap_irq(struct bio_vec *bvec, 466static inline char *bvec_kmap_irq(struct bio_vec *bvec, unsigned long *flags)
457 unsigned long *flags)
458{ 467{
459 unsigned long addr; 468 unsigned long addr;
460 469
@@ -470,8 +479,7 @@ static __always_inline char *bvec_kmap_irq(struct bio_vec *bvec,
470 return (char *) addr + bvec->bv_offset; 479 return (char *) addr + bvec->bv_offset;
471} 480}
472 481
473static __always_inline void bvec_kunmap_irq(char *buffer, 482static inline void bvec_kunmap_irq(char *buffer, unsigned long *flags)
474 unsigned long *flags)
475{ 483{
476 unsigned long ptr = (unsigned long) buffer & PAGE_MASK; 484 unsigned long ptr = (unsigned long) buffer & PAGE_MASK;
477 485
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h
index 756d78b8c1c5..daf8c480c786 100644
--- a/include/linux/bitmap.h
+++ b/include/linux/bitmap.h
@@ -42,6 +42,9 @@
42 * bitmap_empty(src, nbits) Are all bits zero in *src? 42 * bitmap_empty(src, nbits) Are all bits zero in *src?
43 * bitmap_full(src, nbits) Are all bits set in *src? 43 * bitmap_full(src, nbits) Are all bits set in *src?
44 * bitmap_weight(src, nbits) Hamming Weight: number set bits 44 * bitmap_weight(src, nbits) Hamming Weight: number set bits
45 * bitmap_set(dst, pos, nbits) Set specified bit area
46 * bitmap_clear(dst, pos, nbits) Clear specified bit area
47 * bitmap_find_next_zero_area(buf, len, pos, n, mask) Find bit free area
45 * bitmap_shift_right(dst, src, n, nbits) *dst = *src >> n 48 * bitmap_shift_right(dst, src, n, nbits) *dst = *src >> n
46 * bitmap_shift_left(dst, src, n, nbits) *dst = *src << n 49 * bitmap_shift_left(dst, src, n, nbits) *dst = *src << n
47 * bitmap_remap(dst, src, old, new, nbits) *dst = map(old, new)(src) 50 * bitmap_remap(dst, src, old, new, nbits) *dst = map(old, new)(src)
@@ -108,6 +111,14 @@ extern int __bitmap_subset(const unsigned long *bitmap1,
108 const unsigned long *bitmap2, int bits); 111 const unsigned long *bitmap2, int bits);
109extern int __bitmap_weight(const unsigned long *bitmap, int bits); 112extern int __bitmap_weight(const unsigned long *bitmap, int bits);
110 113
114extern void bitmap_set(unsigned long *map, int i, int len);
115extern void bitmap_clear(unsigned long *map, int start, int nr);
116extern unsigned long bitmap_find_next_zero_area(unsigned long *map,
117 unsigned long size,
118 unsigned long start,
119 unsigned int nr,
120 unsigned long align_mask);
121
111extern int bitmap_scnprintf(char *buf, unsigned int len, 122extern int bitmap_scnprintf(char *buf, unsigned int len,
112 const unsigned long *src, int nbits); 123 const unsigned long *src, int nbits);
113extern int __bitmap_parse(const char *buf, unsigned int buflen, int is_user, 124extern int __bitmap_parse(const char *buf, unsigned int buflen, int is_user,
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index c05a29cb9bb2..b796eab5ca75 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -16,16 +16,15 @@
16 */ 16 */
17#include <asm/bitops.h> 17#include <asm/bitops.h>
18 18
19#define for_each_bit(bit, addr, size) \ 19#define for_each_set_bit(bit, addr, size) \
20 for ((bit) = find_first_bit((addr), (size)); \ 20 for ((bit) = find_first_bit((addr), (size)); \
21 (bit) < (size); \ 21 (bit) < (size); \
22 (bit) = find_next_bit((addr), (size), (bit) + 1)) 22 (bit) = find_next_bit((addr), (size), (bit) + 1))
23 23
24
25static __inline__ int get_bitmask_order(unsigned int count) 24static __inline__ int get_bitmask_order(unsigned int count)
26{ 25{
27 int order; 26 int order;
28 27
29 order = fls(count); 28 order = fls(count);
30 return order; /* We could be slightly more clever with -1 here... */ 29 return order; /* We could be slightly more clever with -1 here... */
31} 30}
@@ -33,7 +32,7 @@ static __inline__ int get_bitmask_order(unsigned int count)
33static __inline__ int get_count_order(unsigned int count) 32static __inline__ int get_count_order(unsigned int count)
34{ 33{
35 int order; 34 int order;
36 35
37 order = fls(count) - 1; 36 order = fls(count) - 1;
38 if (count & (count - 1)) 37 if (count & (count - 1))
39 order++; 38 order++;
@@ -45,6 +44,31 @@ static inline unsigned long hweight_long(unsigned long w)
45 return sizeof(w) == 4 ? hweight32(w) : hweight64(w); 44 return sizeof(w) == 4 ? hweight32(w) : hweight64(w);
46} 45}
47 46
47/*
48 * Clearly slow versions of the hweightN() functions, their benefit is
49 * of course compile time evaluation of constant arguments.
50 */
51#define HWEIGHT8(w) \
52 ( BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + \
53 (!!((w) & (1ULL << 0))) + \
54 (!!((w) & (1ULL << 1))) + \
55 (!!((w) & (1ULL << 2))) + \
56 (!!((w) & (1ULL << 3))) + \
57 (!!((w) & (1ULL << 4))) + \
58 (!!((w) & (1ULL << 5))) + \
59 (!!((w) & (1ULL << 6))) + \
60 (!!((w) & (1ULL << 7))) )
61
62#define HWEIGHT16(w) (HWEIGHT8(w) + HWEIGHT8((w) >> 8))
63#define HWEIGHT32(w) (HWEIGHT16(w) + HWEIGHT16((w) >> 16))
64#define HWEIGHT64(w) (HWEIGHT32(w) + HWEIGHT32((w) >> 32))
65
66/*
67 * Type invariant version that simply casts things to the
68 * largest type.
69 */
70#define HWEIGHT(w) HWEIGHT64((u64)(w))
71
48/** 72/**
49 * rol32 - rotate a 32-bit value left 73 * rol32 - rotate a 32-bit value left
50 * @word: value to rotate 74 * @word: value to rotate
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 221cecd86bd3..6690e8bae7bb 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -158,7 +158,6 @@ enum rq_flag_bits {
158struct request { 158struct request {
159 struct list_head queuelist; 159 struct list_head queuelist;
160 struct call_single_data csd; 160 struct call_single_data csd;
161 int cpu;
162 161
163 struct request_queue *q; 162 struct request_queue *q;
164 163
@@ -166,9 +165,11 @@ struct request {
166 enum rq_cmd_type_bits cmd_type; 165 enum rq_cmd_type_bits cmd_type;
167 unsigned long atomic_flags; 166 unsigned long atomic_flags;
168 167
168 int cpu;
169
169 /* the following two fields are internal, NEVER access directly */ 170 /* the following two fields are internal, NEVER access directly */
170 sector_t __sector; /* sector cursor */
171 unsigned int __data_len; /* total data len */ 171 unsigned int __data_len; /* total data len */
172 sector_t __sector; /* sector cursor */
172 173
173 struct bio *bio; 174 struct bio *bio;
174 struct bio *biotail; 175 struct bio *biotail;
@@ -201,20 +202,20 @@ struct request {
201 202
202 unsigned short ioprio; 203 unsigned short ioprio;
203 204
205 int ref_count;
206
204 void *special; /* opaque pointer available for LLD use */ 207 void *special; /* opaque pointer available for LLD use */
205 char *buffer; /* kaddr of the current segment if available */ 208 char *buffer; /* kaddr of the current segment if available */
206 209
207 int tag; 210 int tag;
208 int errors; 211 int errors;
209 212
210 int ref_count;
211
212 /* 213 /*
213 * when request is used as a packet command carrier 214 * when request is used as a packet command carrier
214 */ 215 */
215 unsigned short cmd_len;
216 unsigned char __cmd[BLK_MAX_CDB]; 216 unsigned char __cmd[BLK_MAX_CDB];
217 unsigned char *cmd; 217 unsigned char *cmd;
218 unsigned short cmd_len;
218 219
219 unsigned int extra_len; /* length of alignment and padding */ 220 unsigned int extra_len; /* length of alignment and padding */
220 unsigned int sense_len; 221 unsigned int sense_len;
@@ -312,13 +313,16 @@ struct queue_limits {
312 unsigned int io_min; 313 unsigned int io_min;
313 unsigned int io_opt; 314 unsigned int io_opt;
314 unsigned int max_discard_sectors; 315 unsigned int max_discard_sectors;
316 unsigned int discard_granularity;
317 unsigned int discard_alignment;
315 318
316 unsigned short logical_block_size; 319 unsigned short logical_block_size;
317 unsigned short max_hw_segments; 320 unsigned short max_segments;
318 unsigned short max_phys_segments;
319 321
320 unsigned char misaligned; 322 unsigned char misaligned;
323 unsigned char discard_misaligned;
321 unsigned char no_cluster; 324 unsigned char no_cluster;
325 signed char discard_zeroes_data;
322}; 326};
323 327
324struct request_queue 328struct request_queue
@@ -457,8 +461,8 @@ struct request_queue
457#define QUEUE_FLAG_NONROT 14 /* non-rotational device (SSD) */ 461#define QUEUE_FLAG_NONROT 14 /* non-rotational device (SSD) */
458#define QUEUE_FLAG_VIRT QUEUE_FLAG_NONROT /* paravirt device */ 462#define QUEUE_FLAG_VIRT QUEUE_FLAG_NONROT /* paravirt device */
459#define QUEUE_FLAG_IO_STAT 15 /* do IO stats */ 463#define QUEUE_FLAG_IO_STAT 15 /* do IO stats */
460#define QUEUE_FLAG_CQ 16 /* hardware does queuing */ 464#define QUEUE_FLAG_DISCARD 16 /* supports DISCARD */
461#define QUEUE_FLAG_DISCARD 17 /* supports DISCARD */ 465#define QUEUE_FLAG_NOXMERGES 17 /* No extended merges */
462 466
463#define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ 467#define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \
464 (1 << QUEUE_FLAG_CLUSTER) | \ 468 (1 << QUEUE_FLAG_CLUSTER) | \
@@ -582,9 +586,10 @@ enum {
582 586
583#define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) 587#define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags)
584#define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) 588#define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags)
585#define blk_queue_queuing(q) test_bit(QUEUE_FLAG_CQ, &(q)->queue_flags)
586#define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) 589#define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags)
587#define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) 590#define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags)
591#define blk_queue_noxmerges(q) \
592 test_bit(QUEUE_FLAG_NOXMERGES, &(q)->queue_flags)
588#define blk_queue_nonrot(q) test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags) 593#define blk_queue_nonrot(q) test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags)
589#define blk_queue_io_stat(q) test_bit(QUEUE_FLAG_IO_STAT, &(q)->queue_flags) 594#define blk_queue_io_stat(q) test_bit(QUEUE_FLAG_IO_STAT, &(q)->queue_flags)
590#define blk_queue_flushing(q) ((q)->ordseq) 595#define blk_queue_flushing(q) ((q)->ordseq)
@@ -749,6 +754,17 @@ struct req_iterator {
749#define rq_iter_last(rq, _iter) \ 754#define rq_iter_last(rq, _iter) \
750 (_iter.bio->bi_next == NULL && _iter.i == _iter.bio->bi_vcnt-1) 755 (_iter.bio->bi_next == NULL && _iter.i == _iter.bio->bi_vcnt-1)
751 756
757#ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
758# error "You should define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE for your platform"
759#endif
760#if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
761extern void rq_flush_dcache_pages(struct request *rq);
762#else
763static inline void rq_flush_dcache_pages(struct request *rq)
764{
765}
766#endif
767
752extern int blk_register_queue(struct gendisk *disk); 768extern int blk_register_queue(struct gendisk *disk);
753extern void blk_unregister_queue(struct gendisk *disk); 769extern void blk_unregister_queue(struct gendisk *disk);
754extern void register_disk(struct gendisk *dev); 770extern void register_disk(struct gendisk *dev);
@@ -823,19 +839,6 @@ static inline struct request_queue *bdev_get_queue(struct block_device *bdev)
823 return bdev->bd_disk->queue; 839 return bdev->bd_disk->queue;
824} 840}
825 841
826static inline void blk_run_backing_dev(struct backing_dev_info *bdi,
827 struct page *page)
828{
829 if (bdi && bdi->unplug_io_fn)
830 bdi->unplug_io_fn(bdi, page);
831}
832
833static inline void blk_run_address_space(struct address_space *mapping)
834{
835 if (mapping)
836 blk_run_backing_dev(mapping->backing_dev_info, NULL);
837}
838
839/* 842/*
840 * blk_rq_pos() : the current sector 843 * blk_rq_pos() : the current sector
841 * blk_rq_bytes() : bytes left in the entire request 844 * blk_rq_bytes() : bytes left in the entire request
@@ -843,7 +846,6 @@ static inline void blk_run_address_space(struct address_space *mapping)
843 * blk_rq_err_bytes() : bytes left till the next error boundary 846 * blk_rq_err_bytes() : bytes left till the next error boundary
844 * blk_rq_sectors() : sectors left in the entire request 847 * blk_rq_sectors() : sectors left in the entire request
845 * blk_rq_cur_sectors() : sectors left in the current segment 848 * blk_rq_cur_sectors() : sectors left in the current segment
846 * blk_rq_err_sectors() : sectors left till the next error boundary
847 */ 849 */
848static inline sector_t blk_rq_pos(const struct request *rq) 850static inline sector_t blk_rq_pos(const struct request *rq)
849{ 851{
@@ -872,11 +874,6 @@ static inline unsigned int blk_rq_cur_sectors(const struct request *rq)
872 return blk_rq_cur_bytes(rq) >> 9; 874 return blk_rq_cur_bytes(rq) >> 9;
873} 875}
874 876
875static inline unsigned int blk_rq_err_sectors(const struct request *rq)
876{
877 return blk_rq_err_bytes(rq) >> 9;
878}
879
880/* 877/*
881 * Request issue related functions. 878 * Request issue related functions.
882 */ 879 */
@@ -924,10 +921,8 @@ extern struct request_queue *blk_init_queue(request_fn_proc *, spinlock_t *);
924extern void blk_cleanup_queue(struct request_queue *); 921extern void blk_cleanup_queue(struct request_queue *);
925extern void blk_queue_make_request(struct request_queue *, make_request_fn *); 922extern void blk_queue_make_request(struct request_queue *, make_request_fn *);
926extern void blk_queue_bounce_limit(struct request_queue *, u64); 923extern void blk_queue_bounce_limit(struct request_queue *, u64);
927extern void blk_queue_max_sectors(struct request_queue *, unsigned int);
928extern void blk_queue_max_hw_sectors(struct request_queue *, unsigned int); 924extern void blk_queue_max_hw_sectors(struct request_queue *, unsigned int);
929extern void blk_queue_max_phys_segments(struct request_queue *, unsigned short); 925extern void blk_queue_max_segments(struct request_queue *, unsigned short);
930extern void blk_queue_max_hw_segments(struct request_queue *, unsigned short);
931extern void blk_queue_max_segment_size(struct request_queue *, unsigned int); 926extern void blk_queue_max_segment_size(struct request_queue *, unsigned int);
932extern void blk_queue_max_discard_sectors(struct request_queue *q, 927extern void blk_queue_max_discard_sectors(struct request_queue *q,
933 unsigned int max_discard_sectors); 928 unsigned int max_discard_sectors);
@@ -942,6 +937,8 @@ extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt);
942extern void blk_set_default_limits(struct queue_limits *lim); 937extern void blk_set_default_limits(struct queue_limits *lim);
943extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, 938extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
944 sector_t offset); 939 sector_t offset);
940extern int bdev_stack_limits(struct queue_limits *t, struct block_device *bdev,
941 sector_t offset);
945extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, 942extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev,
946 sector_t offset); 943 sector_t offset);
947extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b); 944extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b);
@@ -1015,14 +1012,13 @@ static inline int sb_issue_discard(struct super_block *sb,
1015 1012
1016extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); 1013extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm);
1017 1014
1018#define MAX_PHYS_SEGMENTS 128 1015enum blk_default_limits {
1019#define MAX_HW_SEGMENTS 128 1016 BLK_MAX_SEGMENTS = 128,
1020#define SAFE_MAX_SECTORS 255 1017 BLK_SAFE_MAX_SECTORS = 255,
1021#define BLK_DEF_MAX_SECTORS 1024 1018 BLK_DEF_MAX_SECTORS = 1024,
1022 1019 BLK_MAX_SEGMENT_SIZE = 65536,
1023#define MAX_SEGMENT_SIZE 65536 1020 BLK_SEG_BOUNDARY_MASK = 0xFFFFFFFFUL,
1024 1021};
1025#define BLK_SEG_BOUNDARY_MASK 0xFFFFFFFFUL
1026 1022
1027#define blkdev_entry_to_request(entry) list_entry((entry), struct request, queuelist) 1023#define blkdev_entry_to_request(entry) list_entry((entry), struct request, queuelist)
1028 1024
@@ -1046,14 +1042,9 @@ static inline unsigned int queue_max_hw_sectors(struct request_queue *q)
1046 return q->limits.max_hw_sectors; 1042 return q->limits.max_hw_sectors;
1047} 1043}
1048 1044
1049static inline unsigned short queue_max_hw_segments(struct request_queue *q) 1045static inline unsigned short queue_max_segments(struct request_queue *q)
1050{
1051 return q->limits.max_hw_segments;
1052}
1053
1054static inline unsigned short queue_max_phys_segments(struct request_queue *q)
1055{ 1046{
1056 return q->limits.max_phys_segments; 1047 return q->limits.max_segments;
1057} 1048}
1058 1049
1059static inline unsigned int queue_max_segment_size(struct request_queue *q) 1050static inline unsigned int queue_max_segment_size(struct request_queue *q)
@@ -1114,11 +1105,13 @@ static inline int queue_alignment_offset(struct request_queue *q)
1114 return q->limits.alignment_offset; 1105 return q->limits.alignment_offset;
1115} 1106}
1116 1107
1117static inline int queue_sector_alignment_offset(struct request_queue *q, 1108static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t sector)
1118 sector_t sector)
1119{ 1109{
1120 return ((sector << 9) - q->limits.alignment_offset) 1110 unsigned int granularity = max(lim->physical_block_size, lim->io_min);
1121 & (q->limits.io_min - 1); 1111 unsigned int alignment = (sector << 9) & (granularity - 1);
1112
1113 return (granularity + lim->alignment_offset - alignment)
1114 & (granularity - 1);
1122} 1115}
1123 1116
1124static inline int bdev_alignment_offset(struct block_device *bdev) 1117static inline int bdev_alignment_offset(struct block_device *bdev)
@@ -1134,6 +1127,35 @@ static inline int bdev_alignment_offset(struct block_device *bdev)
1134 return q->limits.alignment_offset; 1127 return q->limits.alignment_offset;
1135} 1128}
1136 1129
1130static inline int queue_discard_alignment(struct request_queue *q)
1131{
1132 if (q->limits.discard_misaligned)
1133 return -1;
1134
1135 return q->limits.discard_alignment;
1136}
1137
1138static inline int queue_limit_discard_alignment(struct queue_limits *lim, sector_t sector)
1139{
1140 unsigned int alignment = (sector << 9) & (lim->discard_granularity - 1);
1141
1142 return (lim->discard_granularity + lim->discard_alignment - alignment)
1143 & (lim->discard_granularity - 1);
1144}
1145
1146static inline unsigned int queue_discard_zeroes_data(struct request_queue *q)
1147{
1148 if (q->limits.discard_zeroes_data == 1)
1149 return 1;
1150
1151 return 0;
1152}
1153
1154static inline unsigned int bdev_discard_zeroes_data(struct block_device *bdev)
1155{
1156 return queue_discard_zeroes_data(bdev_get_queue(bdev));
1157}
1158
1137static inline int queue_dma_alignment(struct request_queue *q) 1159static inline int queue_dma_alignment(struct request_queue *q)
1138{ 1160{
1139 return q ? q->dma_alignment : 511; 1161 return q ? q->dma_alignment : 511;
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h
index 3b73b9992b26..416bf62d6d46 100644
--- a/include/linux/blktrace_api.h
+++ b/include/linux/blktrace_api.h
@@ -150,8 +150,8 @@ struct blk_user_trace_setup {
150struct blk_trace { 150struct blk_trace {
151 int trace_state; 151 int trace_state;
152 struct rchan *rchan; 152 struct rchan *rchan;
153 unsigned long *sequence; 153 unsigned long __percpu *sequence;
154 unsigned char *msg_data; 154 unsigned char __percpu *msg_data;
155 u16 act_mask; 155 u16 act_mask;
156 u64 start_lba; 156 u64 start_lba;
157 u64 end_lba; 157 u64 end_lba;
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h
index dd97fb8408a8..266ab9291232 100644
--- a/include/linux/bootmem.h
+++ b/include/linux/bootmem.h
@@ -23,6 +23,7 @@ extern unsigned long max_pfn;
23extern unsigned long saved_max_pfn; 23extern unsigned long saved_max_pfn;
24#endif 24#endif
25 25
26#ifndef CONFIG_NO_BOOTMEM
26/* 27/*
27 * node_bootmem_map is a map pointer - the bits represent all physical 28 * node_bootmem_map is a map pointer - the bits represent all physical
28 * memory pages (including holes) on the node. 29 * memory pages (including holes) on the node.
@@ -37,6 +38,7 @@ typedef struct bootmem_data {
37} bootmem_data_t; 38} bootmem_data_t;
38 39
39extern bootmem_data_t bootmem_node_data[]; 40extern bootmem_data_t bootmem_node_data[];
41#endif
40 42
41extern unsigned long bootmem_bootmap_pages(unsigned long); 43extern unsigned long bootmem_bootmap_pages(unsigned long);
42 44
@@ -46,6 +48,7 @@ extern unsigned long init_bootmem_node(pg_data_t *pgdat,
46 unsigned long endpfn); 48 unsigned long endpfn);
47extern unsigned long init_bootmem(unsigned long addr, unsigned long memend); 49extern unsigned long init_bootmem(unsigned long addr, unsigned long memend);
48 50
51unsigned long free_all_memory_core_early(int nodeid);
49extern unsigned long free_all_bootmem_node(pg_data_t *pgdat); 52extern unsigned long free_all_bootmem_node(pg_data_t *pgdat);
50extern unsigned long free_all_bootmem(void); 53extern unsigned long free_all_bootmem(void);
51 54
@@ -53,6 +56,7 @@ extern void free_bootmem_node(pg_data_t *pgdat,
53 unsigned long addr, 56 unsigned long addr,
54 unsigned long size); 57 unsigned long size);
55extern void free_bootmem(unsigned long addr, unsigned long size); 58extern void free_bootmem(unsigned long addr, unsigned long size);
59extern void free_bootmem_late(unsigned long addr, unsigned long size);
56 60
57/* 61/*
58 * Flags for reserve_bootmem (also if CONFIG_HAVE_ARCH_BOOTMEM_NODE, 62 * Flags for reserve_bootmem (also if CONFIG_HAVE_ARCH_BOOTMEM_NODE,
@@ -83,6 +87,10 @@ extern void *__alloc_bootmem_node(pg_data_t *pgdat,
83 unsigned long size, 87 unsigned long size,
84 unsigned long align, 88 unsigned long align,
85 unsigned long goal); 89 unsigned long goal);
90void *__alloc_bootmem_node_high(pg_data_t *pgdat,
91 unsigned long size,
92 unsigned long align,
93 unsigned long goal);
86extern void *__alloc_bootmem_node_nopanic(pg_data_t *pgdat, 94extern void *__alloc_bootmem_node_nopanic(pg_data_t *pgdat,
87 unsigned long size, 95 unsigned long size,
88 unsigned long align, 96 unsigned long align,
diff --git a/include/linux/brcmphy.h b/include/linux/brcmphy.h
index 9b64b6d67873..7f437ca1ed44 100644
--- a/include/linux/brcmphy.h
+++ b/include/linux/brcmphy.h
@@ -1,6 +1,24 @@
1#define PHY_BRCM_WIRESPEED_ENABLE 0x00000001 1#define PHY_ID_BCM50610 0x0143bd60
2#define PHY_BRCM_AUTO_PWRDWN_ENABLE 0x00000002 2#define PHY_ID_BCM50610M 0x0143bd70
3#define PHY_BRCM_APD_CLK125_ENABLE 0x00000004 3#define PHY_ID_BCMAC131 0x0143bc70
4#define PHY_BRCM_STD_IBND_DISABLE 0x00000008 4#define PHY_ID_BCM57780 0x03625d90
5#define PHY_BRCM_EXT_IBND_RX_ENABLE 0x00000010 5
6#define PHY_BRCM_EXT_IBND_TX_ENABLE 0x00000020 6#define PHY_BCM_OUI_MASK 0xfffffc00
7#define PHY_BCM_OUI_1 0x00206000
8#define PHY_BCM_OUI_2 0x0143bc00
9#define PHY_BCM_OUI_3 0x03625c00
10
11
12#define PHY_BCM_FLAGS_MODE_COPPER 0x00000001
13#define PHY_BCM_FLAGS_MODE_1000BX 0x00000002
14#define PHY_BCM_FLAGS_INTF_SGMII 0x00000010
15#define PHY_BCM_FLAGS_INTF_XAUI 0x00000020
16#define PHY_BRCM_WIRESPEED_ENABLE 0x00000100
17#define PHY_BRCM_AUTO_PWRDWN_ENABLE 0x00000200
18#define PHY_BRCM_RX_REFCLK_UNUSED 0x00000400
19#define PHY_BRCM_STD_IBND_DISABLE 0x00000800
20#define PHY_BRCM_EXT_IBND_RX_ENABLE 0x00001000
21#define PHY_BRCM_EXT_IBND_TX_ENABLE 0x00002000
22#define PHY_BRCM_CLEAR_RGMII_MODE 0x00004000
23#define PHY_BRCM_DIS_TXCRXC_NOENRGY 0x00008000
24#define PHY_BCM_FLAGS_VALID 0x80000000
diff --git a/include/linux/btree-128.h b/include/linux/btree-128.h
new file mode 100644
index 000000000000..0b3414c4c928
--- /dev/null
+++ b/include/linux/btree-128.h
@@ -0,0 +1,109 @@
1extern struct btree_geo btree_geo128;
2
3struct btree_head128 { struct btree_head h; };
4
5static inline void btree_init_mempool128(struct btree_head128 *head,
6 mempool_t *mempool)
7{
8 btree_init_mempool(&head->h, mempool);
9}
10
11static inline int btree_init128(struct btree_head128 *head)
12{
13 return btree_init(&head->h);
14}
15
16static inline void btree_destroy128(struct btree_head128 *head)
17{
18 btree_destroy(&head->h);
19}
20
21static inline void *btree_lookup128(struct btree_head128 *head, u64 k1, u64 k2)
22{
23 u64 key[2] = {k1, k2};
24 return btree_lookup(&head->h, &btree_geo128, (unsigned long *)&key);
25}
26
27static inline void *btree_get_prev128(struct btree_head128 *head,
28 u64 *k1, u64 *k2)
29{
30 u64 key[2] = {*k1, *k2};
31 void *val;
32
33 val = btree_get_prev(&head->h, &btree_geo128,
34 (unsigned long *)&key);
35 *k1 = key[0];
36 *k2 = key[1];
37 return val;
38}
39
40static inline int btree_insert128(struct btree_head128 *head, u64 k1, u64 k2,
41 void *val, gfp_t gfp)
42{
43 u64 key[2] = {k1, k2};
44 return btree_insert(&head->h, &btree_geo128,
45 (unsigned long *)&key, val, gfp);
46}
47
48static inline int btree_update128(struct btree_head128 *head, u64 k1, u64 k2,
49 void *val)
50{
51 u64 key[2] = {k1, k2};
52 return btree_update(&head->h, &btree_geo128,
53 (unsigned long *)&key, val);
54}
55
56static inline void *btree_remove128(struct btree_head128 *head, u64 k1, u64 k2)
57{
58 u64 key[2] = {k1, k2};
59 return btree_remove(&head->h, &btree_geo128, (unsigned long *)&key);
60}
61
62static inline void *btree_last128(struct btree_head128 *head, u64 *k1, u64 *k2)
63{
64 u64 key[2];
65 void *val;
66
67 val = btree_last(&head->h, &btree_geo128, (unsigned long *)&key[0]);
68 if (val) {
69 *k1 = key[0];
70 *k2 = key[1];
71 }
72
73 return val;
74}
75
76static inline int btree_merge128(struct btree_head128 *target,
77 struct btree_head128 *victim,
78 gfp_t gfp)
79{
80 return btree_merge(&target->h, &victim->h, &btree_geo128, gfp);
81}
82
83void visitor128(void *elem, unsigned long opaque, unsigned long *__key,
84 size_t index, void *__func);
85
86typedef void (*visitor128_t)(void *elem, unsigned long opaque,
87 u64 key1, u64 key2, size_t index);
88
89static inline size_t btree_visitor128(struct btree_head128 *head,
90 unsigned long opaque,
91 visitor128_t func2)
92{
93 return btree_visitor(&head->h, &btree_geo128, opaque,
94 visitor128, func2);
95}
96
97static inline size_t btree_grim_visitor128(struct btree_head128 *head,
98 unsigned long opaque,
99 visitor128_t func2)
100{
101 return btree_grim_visitor(&head->h, &btree_geo128, opaque,
102 visitor128, func2);
103}
104
105#define btree_for_each_safe128(head, k1, k2, val) \
106 for (val = btree_last128(head, &k1, &k2); \
107 val; \
108 val = btree_get_prev128(head, &k1, &k2))
109
diff --git a/include/linux/btree-type.h b/include/linux/btree-type.h
new file mode 100644
index 000000000000..9a1147ef8563
--- /dev/null
+++ b/include/linux/btree-type.h
@@ -0,0 +1,147 @@
1#define __BTREE_TP(pfx, type, sfx) pfx ## type ## sfx
2#define _BTREE_TP(pfx, type, sfx) __BTREE_TP(pfx, type, sfx)
3#define BTREE_TP(pfx) _BTREE_TP(pfx, BTREE_TYPE_SUFFIX,)
4#define BTREE_FN(name) BTREE_TP(btree_ ## name)
5#define BTREE_TYPE_HEAD BTREE_TP(struct btree_head)
6#define VISITOR_FN BTREE_TP(visitor)
7#define VISITOR_FN_T _BTREE_TP(visitor, BTREE_TYPE_SUFFIX, _t)
8
9BTREE_TYPE_HEAD {
10 struct btree_head h;
11};
12
13static inline void BTREE_FN(init_mempool)(BTREE_TYPE_HEAD *head,
14 mempool_t *mempool)
15{
16 btree_init_mempool(&head->h, mempool);
17}
18
19static inline int BTREE_FN(init)(BTREE_TYPE_HEAD *head)
20{
21 return btree_init(&head->h);
22}
23
24static inline void BTREE_FN(destroy)(BTREE_TYPE_HEAD *head)
25{
26 btree_destroy(&head->h);
27}
28
29static inline int BTREE_FN(merge)(BTREE_TYPE_HEAD *target,
30 BTREE_TYPE_HEAD *victim,
31 gfp_t gfp)
32{
33 return btree_merge(&target->h, &victim->h, BTREE_TYPE_GEO, gfp);
34}
35
36#if (BITS_PER_LONG > BTREE_TYPE_BITS)
37static inline void *BTREE_FN(lookup)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key)
38{
39 unsigned long _key = key;
40 return btree_lookup(&head->h, BTREE_TYPE_GEO, &_key);
41}
42
43static inline int BTREE_FN(insert)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key,
44 void *val, gfp_t gfp)
45{
46 unsigned long _key = key;
47 return btree_insert(&head->h, BTREE_TYPE_GEO, &_key, val, gfp);
48}
49
50static inline int BTREE_FN(update)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key,
51 void *val)
52{
53 unsigned long _key = key;
54 return btree_update(&head->h, BTREE_TYPE_GEO, &_key, val);
55}
56
57static inline void *BTREE_FN(remove)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key)
58{
59 unsigned long _key = key;
60 return btree_remove(&head->h, BTREE_TYPE_GEO, &_key);
61}
62
63static inline void *BTREE_FN(last)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE *key)
64{
65 unsigned long _key;
66 void *val = btree_last(&head->h, BTREE_TYPE_GEO, &_key);
67 if (val)
68 *key = _key;
69 return val;
70}
71
72static inline void *BTREE_FN(get_prev)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE *key)
73{
74 unsigned long _key = *key;
75 void *val = btree_get_prev(&head->h, BTREE_TYPE_GEO, &_key);
76 if (val)
77 *key = _key;
78 return val;
79}
80#else
81static inline void *BTREE_FN(lookup)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key)
82{
83 return btree_lookup(&head->h, BTREE_TYPE_GEO, (unsigned long *)&key);
84}
85
86static inline int BTREE_FN(insert)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key,
87 void *val, gfp_t gfp)
88{
89 return btree_insert(&head->h, BTREE_TYPE_GEO, (unsigned long *)&key,
90 val, gfp);
91}
92
93static inline int BTREE_FN(update)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key,
94 void *val)
95{
96 return btree_update(&head->h, BTREE_TYPE_GEO, (unsigned long *)&key, val);
97}
98
99static inline void *BTREE_FN(remove)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key)
100{
101 return btree_remove(&head->h, BTREE_TYPE_GEO, (unsigned long *)&key);
102}
103
104static inline void *BTREE_FN(last)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE *key)
105{
106 return btree_last(&head->h, BTREE_TYPE_GEO, (unsigned long *)key);
107}
108
109static inline void *BTREE_FN(get_prev)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE *key)
110{
111 return btree_get_prev(&head->h, BTREE_TYPE_GEO, (unsigned long *)key);
112}
113#endif
114
115void VISITOR_FN(void *elem, unsigned long opaque, unsigned long *key,
116 size_t index, void *__func);
117
118typedef void (*VISITOR_FN_T)(void *elem, unsigned long opaque,
119 BTREE_KEYTYPE key, size_t index);
120
121static inline size_t BTREE_FN(visitor)(BTREE_TYPE_HEAD *head,
122 unsigned long opaque,
123 VISITOR_FN_T func2)
124{
125 return btree_visitor(&head->h, BTREE_TYPE_GEO, opaque,
126 visitorl, func2);
127}
128
129static inline size_t BTREE_FN(grim_visitor)(BTREE_TYPE_HEAD *head,
130 unsigned long opaque,
131 VISITOR_FN_T func2)
132{
133 return btree_grim_visitor(&head->h, BTREE_TYPE_GEO, opaque,
134 visitorl, func2);
135}
136
137#undef VISITOR_FN
138#undef VISITOR_FN_T
139#undef __BTREE_TP
140#undef _BTREE_TP
141#undef BTREE_TP
142#undef BTREE_FN
143#undef BTREE_TYPE_HEAD
144#undef BTREE_TYPE_SUFFIX
145#undef BTREE_TYPE_GEO
146#undef BTREE_KEYTYPE
147#undef BTREE_TYPE_BITS
diff --git a/include/linux/btree.h b/include/linux/btree.h
new file mode 100644
index 000000000000..65b5bb058324
--- /dev/null
+++ b/include/linux/btree.h
@@ -0,0 +1,243 @@
1#ifndef BTREE_H
2#define BTREE_H
3
4#include <linux/kernel.h>
5#include <linux/mempool.h>
6
7/**
8 * DOC: B+Tree basics
9 *
10 * A B+Tree is a data structure for looking up arbitrary (currently allowing
11 * unsigned long, u32, u64 and 2 * u64) keys into pointers. The data structure
12 * is described at http://en.wikipedia.org/wiki/B-tree, we currently do not
13 * use binary search to find the key on lookups.
14 *
15 * Each B+Tree consists of a head, that contains bookkeeping information and
16 * a variable number (starting with zero) nodes. Each node contains the keys
17 * and pointers to sub-nodes, or, for leaf nodes, the keys and values for the
18 * tree entries.
19 *
20 * Each node in this implementation has the following layout:
21 * [key1, key2, ..., keyN] [val1, val2, ..., valN]
22 *
23 * Each key here is an array of unsigned longs, geo->no_longs in total. The
24 * number of keys and values (N) is geo->no_pairs.
25 */
26
27/**
28 * struct btree_head - btree head
29 *
30 * @node: the first node in the tree
31 * @mempool: mempool used for node allocations
32 * @height: current of the tree
33 */
34struct btree_head {
35 unsigned long *node;
36 mempool_t *mempool;
37 int height;
38};
39
40/* btree geometry */
41struct btree_geo;
42
43/**
44 * btree_alloc - allocate function for the mempool
45 * @gfp_mask: gfp mask for the allocation
46 * @pool_data: unused
47 */
48void *btree_alloc(gfp_t gfp_mask, void *pool_data);
49
50/**
51 * btree_free - free function for the mempool
52 * @element: the element to free
53 * @pool_data: unused
54 */
55void btree_free(void *element, void *pool_data);
56
57/**
58 * btree_init_mempool - initialise a btree with given mempool
59 *
60 * @head: the btree head to initialise
61 * @mempool: the mempool to use
62 *
63 * When this function is used, there is no need to destroy
64 * the mempool.
65 */
66void btree_init_mempool(struct btree_head *head, mempool_t *mempool);
67
68/**
69 * btree_init - initialise a btree
70 *
71 * @head: the btree head to initialise
72 *
73 * This function allocates the memory pool that the
74 * btree needs. Returns zero or a negative error code
75 * (-%ENOMEM) when memory allocation fails.
76 *
77 */
78int __must_check btree_init(struct btree_head *head);
79
80/**
81 * btree_destroy - destroy mempool
82 *
83 * @head: the btree head to destroy
84 *
85 * This function destroys the internal memory pool, use only
86 * when using btree_init(), not with btree_init_mempool().
87 */
88void btree_destroy(struct btree_head *head);
89
90/**
91 * btree_lookup - look up a key in the btree
92 *
93 * @head: the btree to look in
94 * @geo: the btree geometry
95 * @key: the key to look up
96 *
97 * This function returns the value for the given key, or %NULL.
98 */
99void *btree_lookup(struct btree_head *head, struct btree_geo *geo,
100 unsigned long *key);
101
102/**
103 * btree_insert - insert an entry into the btree
104 *
105 * @head: the btree to add to
106 * @geo: the btree geometry
107 * @key: the key to add (must not already be present)
108 * @val: the value to add (must not be %NULL)
109 * @gfp: allocation flags for node allocations
110 *
111 * This function returns 0 if the item could be added, or an
112 * error code if it failed (may fail due to memory pressure).
113 */
114int __must_check btree_insert(struct btree_head *head, struct btree_geo *geo,
115 unsigned long *key, void *val, gfp_t gfp);
116/**
117 * btree_update - update an entry in the btree
118 *
119 * @head: the btree to update
120 * @geo: the btree geometry
121 * @key: the key to update
122 * @val: the value to change it to (must not be %NULL)
123 *
124 * This function returns 0 if the update was successful, or
125 * -%ENOENT if the key could not be found.
126 */
127int btree_update(struct btree_head *head, struct btree_geo *geo,
128 unsigned long *key, void *val);
129/**
130 * btree_remove - remove an entry from the btree
131 *
132 * @head: the btree to update
133 * @geo: the btree geometry
134 * @key: the key to remove
135 *
136 * This function returns the removed entry, or %NULL if the key
137 * could not be found.
138 */
139void *btree_remove(struct btree_head *head, struct btree_geo *geo,
140 unsigned long *key);
141
142/**
143 * btree_merge - merge two btrees
144 *
145 * @target: the tree that gets all the entries
146 * @victim: the tree that gets merged into @target
147 * @geo: the btree geometry
148 * @gfp: allocation flags
149 *
150 * The two trees @target and @victim may not contain the same keys,
151 * that is a bug and triggers a BUG(). This function returns zero
152 * if the trees were merged successfully, and may return a failure
153 * when memory allocation fails, in which case both trees might have
154 * been partially merged, i.e. some entries have been moved from
155 * @victim to @target.
156 */
157int btree_merge(struct btree_head *target, struct btree_head *victim,
158 struct btree_geo *geo, gfp_t gfp);
159
160/**
161 * btree_last - get last entry in btree
162 *
163 * @head: btree head
164 * @geo: btree geometry
165 * @key: last key
166 *
167 * Returns the last entry in the btree, and sets @key to the key
168 * of that entry; returns NULL if the tree is empty, in that case
169 * key is not changed.
170 */
171void *btree_last(struct btree_head *head, struct btree_geo *geo,
172 unsigned long *key);
173
174/**
175 * btree_get_prev - get previous entry
176 *
177 * @head: btree head
178 * @geo: btree geometry
179 * @key: pointer to key
180 *
181 * The function returns the next item right before the value pointed to by
182 * @key, and updates @key with its key, or returns %NULL when there is no
183 * entry with a key smaller than the given key.
184 */
185void *btree_get_prev(struct btree_head *head, struct btree_geo *geo,
186 unsigned long *key);
187
188
189/* internal use, use btree_visitor{l,32,64,128} */
190size_t btree_visitor(struct btree_head *head, struct btree_geo *geo,
191 unsigned long opaque,
192 void (*func)(void *elem, unsigned long opaque,
193 unsigned long *key, size_t index,
194 void *func2),
195 void *func2);
196
197/* internal use, use btree_grim_visitor{l,32,64,128} */
198size_t btree_grim_visitor(struct btree_head *head, struct btree_geo *geo,
199 unsigned long opaque,
200 void (*func)(void *elem, unsigned long opaque,
201 unsigned long *key,
202 size_t index, void *func2),
203 void *func2);
204
205
206#include <linux/btree-128.h>
207
208extern struct btree_geo btree_geo32;
209#define BTREE_TYPE_SUFFIX l
210#define BTREE_TYPE_BITS BITS_PER_LONG
211#define BTREE_TYPE_GEO &btree_geo32
212#define BTREE_KEYTYPE unsigned long
213#include <linux/btree-type.h>
214
215#define btree_for_each_safel(head, key, val) \
216 for (val = btree_lastl(head, &key); \
217 val; \
218 val = btree_get_prevl(head, &key))
219
220#define BTREE_TYPE_SUFFIX 32
221#define BTREE_TYPE_BITS 32
222#define BTREE_TYPE_GEO &btree_geo32
223#define BTREE_KEYTYPE u32
224#include <linux/btree-type.h>
225
226#define btree_for_each_safe32(head, key, val) \
227 for (val = btree_last32(head, &key); \
228 val; \
229 val = btree_get_prev32(head, &key))
230
231extern struct btree_geo btree_geo64;
232#define BTREE_TYPE_SUFFIX 64
233#define BTREE_TYPE_BITS 64
234#define BTREE_TYPE_GEO &btree_geo64
235#define BTREE_KEYTYPE u64
236#include <linux/btree-type.h>
237
238#define btree_for_each_safe64(head, key, val) \
239 for (val = btree_last64(head, &key); \
240 val; \
241 val = btree_get_prev64(head, &key))
242
243#endif
diff --git a/include/linux/can/core.h b/include/linux/can/core.h
index 25085cbadcfc..6c507bea275f 100644
--- a/include/linux/can/core.h
+++ b/include/linux/can/core.h
@@ -32,14 +32,12 @@
32 * struct can_proto - CAN protocol structure 32 * struct can_proto - CAN protocol structure
33 * @type: type argument in socket() syscall, e.g. SOCK_DGRAM. 33 * @type: type argument in socket() syscall, e.g. SOCK_DGRAM.
34 * @protocol: protocol number in socket() syscall. 34 * @protocol: protocol number in socket() syscall.
35 * @capability: capability needed to open the socket, or -1 for no restriction.
36 * @ops: pointer to struct proto_ops for sock->ops. 35 * @ops: pointer to struct proto_ops for sock->ops.
37 * @prot: pointer to struct proto structure. 36 * @prot: pointer to struct proto structure.
38 */ 37 */
39struct can_proto { 38struct can_proto {
40 int type; 39 int type;
41 int protocol; 40 int protocol;
42 int capability;
43 struct proto_ops *ops; 41 struct proto_ops *ops;
44 struct proto *prot; 42 struct proto *prot;
45}; 43};
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h
index 5824b20b5fcb..6e5a7f00223d 100644
--- a/include/linux/can/dev.h
+++ b/include/linux/can/dev.h
@@ -29,8 +29,6 @@ enum can_mode {
29/* 29/*
30 * CAN common private data 30 * CAN common private data
31 */ 31 */
32#define CAN_ECHO_SKB_MAX 4
33
34struct can_priv { 32struct can_priv {
35 struct can_device_stats can_stats; 33 struct can_device_stats can_stats;
36 34
@@ -40,19 +38,47 @@ struct can_priv {
40 38
41 enum can_state state; 39 enum can_state state;
42 u32 ctrlmode; 40 u32 ctrlmode;
41 u32 ctrlmode_supported;
43 42
44 int restart_ms; 43 int restart_ms;
45 struct timer_list restart_timer; 44 struct timer_list restart_timer;
46 45
47 struct sk_buff *echo_skb[CAN_ECHO_SKB_MAX];
48
49 int (*do_set_bittiming)(struct net_device *dev); 46 int (*do_set_bittiming)(struct net_device *dev);
50 int (*do_set_mode)(struct net_device *dev, enum can_mode mode); 47 int (*do_set_mode)(struct net_device *dev, enum can_mode mode);
51 int (*do_get_state)(const struct net_device *dev, 48 int (*do_get_state)(const struct net_device *dev,
52 enum can_state *state); 49 enum can_state *state);
50 int (*do_get_berr_counter)(const struct net_device *dev,
51 struct can_berr_counter *bec);
52
53 unsigned int echo_skb_max;
54 struct sk_buff **echo_skb;
53}; 55};
54 56
55struct net_device *alloc_candev(int sizeof_priv); 57/*
58 * get_can_dlc(value) - helper macro to cast a given data length code (dlc)
59 * to __u8 and ensure the dlc value to be max. 8 bytes.
60 *
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)
63 */
64#define get_can_dlc(i) (min_t(__u8, (i), 8))
65
66/* Drop a given socketbuffer if it does not contain a valid CAN frame. */
67static inline int can_dropped_invalid_skb(struct net_device *dev,
68 struct sk_buff *skb)
69{
70 const struct can_frame *cf = (struct can_frame *)skb->data;
71
72 if (unlikely(skb->len != sizeof(*cf) || cf->can_dlc > 8)) {
73 kfree_skb(skb);
74 dev->stats.tx_dropped++;
75 return 1;
76 }
77
78 return 0;
79}
80
81struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max);
56void free_candev(struct net_device *dev); 82void free_candev(struct net_device *dev);
57 83
58int open_candev(struct net_device *dev); 84int open_candev(struct net_device *dev);
@@ -64,8 +90,13 @@ void unregister_candev(struct net_device *dev);
64int can_restart_now(struct net_device *dev); 90int can_restart_now(struct net_device *dev);
65void can_bus_off(struct net_device *dev); 91void can_bus_off(struct net_device *dev);
66 92
67void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, int idx); 93void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev,
68void can_get_echo_skb(struct net_device *dev, int idx); 94 unsigned int idx);
69void can_free_echo_skb(struct net_device *dev, int idx); 95void can_get_echo_skb(struct net_device *dev, unsigned int idx);
96void can_free_echo_skb(struct net_device *dev, unsigned int idx);
97
98struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf);
99struct sk_buff *alloc_can_err_skb(struct net_device *dev,
100 struct can_frame **cf);
70 101
71#endif /* CAN_DEV_H */ 102#endif /* CAN_DEV_H */
diff --git a/include/linux/can/netlink.h b/include/linux/can/netlink.h
index 9ecbb7871c0e..3250de935e1a 100644
--- a/include/linux/can/netlink.h
+++ b/include/linux/can/netlink.h
@@ -70,6 +70,14 @@ enum can_state {
70}; 70};
71 71
72/* 72/*
73 * CAN bus error counters
74 */
75struct can_berr_counter {
76 __u16 txerr;
77 __u16 rxerr;
78};
79
80/*
73 * CAN controller mode 81 * CAN controller mode
74 */ 82 */
75struct can_ctrlmode { 83struct can_ctrlmode {
@@ -77,9 +85,11 @@ struct can_ctrlmode {
77 __u32 flags; 85 __u32 flags;
78}; 86};
79 87
80#define CAN_CTRLMODE_LOOPBACK 0x1 /* Loopback mode */ 88#define CAN_CTRLMODE_LOOPBACK 0x01 /* Loopback mode */
81#define CAN_CTRLMODE_LISTENONLY 0x2 /* Listen-only mode */ 89#define CAN_CTRLMODE_LISTENONLY 0x02 /* Listen-only mode */
82#define CAN_CTRLMODE_3_SAMPLES 0x4 /* Triple sampling mode */ 90#define CAN_CTRLMODE_3_SAMPLES 0x04 /* Triple sampling mode */
91#define CAN_CTRLMODE_ONE_SHOT 0x08 /* One-Shot mode */
92#define CAN_CTRLMODE_BERR_REPORTING 0x10 /* Bus-error reporting */
83 93
84/* 94/*
85 * CAN device statistics 95 * CAN device statistics
@@ -105,6 +115,7 @@ enum {
105 IFLA_CAN_CTRLMODE, 115 IFLA_CAN_CTRLMODE,
106 IFLA_CAN_RESTART_MS, 116 IFLA_CAN_RESTART_MS,
107 IFLA_CAN_RESTART, 117 IFLA_CAN_RESTART,
118 IFLA_CAN_BERR_COUNTER,
108 __IFLA_CAN_MAX 119 __IFLA_CAN_MAX
109}; 120};
110 121
diff --git a/include/linux/can/platform/mcp251x.h b/include/linux/can/platform/mcp251x.h
new file mode 100644
index 000000000000..1448177d86d5
--- /dev/null
+++ b/include/linux/can/platform/mcp251x.h
@@ -0,0 +1,36 @@
1#ifndef __CAN_PLATFORM_MCP251X_H__
2#define __CAN_PLATFORM_MCP251X_H__
3
4/*
5 *
6 * CAN bus driver for Microchip 251x CAN Controller with SPI Interface
7 *
8 */
9
10#include <linux/spi/spi.h>
11
12/**
13 * struct mcp251x_platform_data - MCP251X SPI CAN controller platform data
14 * @oscillator_frequency: - oscillator frequency in Hz
15 * @model: - actual type of chip
16 * @board_specific_setup: - called before probing the chip (power,reset)
17 * @transceiver_enable: - called to power on/off the transceiver
18 * @power_enable: - called to power on/off the mcp *and* the
19 * transceiver
20 *
21 * Please note that you should define power_enable or transceiver_enable or
22 * none of them. Defining both of them is no use.
23 *
24 */
25
26struct mcp251x_platform_data {
27 unsigned long oscillator_frequency;
28 int model;
29#define CAN_MCP251X_MCP2510 0
30#define CAN_MCP251X_MCP2515 1
31 int (*board_specific_setup)(struct spi_device *spi);
32 int (*transceiver_enable)(int enable);
33 int (*power_enable) (int enable);
34};
35
36#endif /* __CAN_PLATFORM_MCP251X_H__ */
diff --git a/include/linux/can/platform/ti_hecc.h b/include/linux/can/platform/ti_hecc.h
new file mode 100644
index 000000000000..af17cb3f7a84
--- /dev/null
+++ b/include/linux/can/platform/ti_hecc.h
@@ -0,0 +1,44 @@
1#ifndef __CAN_PLATFORM_TI_HECC_H__
2#define __CAN_PLATFORM_TI_HECC_H__
3
4/*
5 * TI HECC (High End CAN Controller) driver platform header
6 *
7 * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation version 2.
12 *
13 * This program is distributed as is WITHOUT ANY WARRANTY of any
14 * kind, whether express or implied; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 */
19
20/**
21 * struct hecc_platform_data - HECC Platform Data
22 *
23 * @scc_hecc_offset: mostly 0 - should really never change
24 * @scc_ram_offset: SCC RAM offset
25 * @hecc_ram_offset: HECC RAM offset
26 * @mbx_offset: Mailbox RAM offset
27 * @int_line: Interrupt line to use - 0 or 1
28 * @version: version for future use
29 * @transceiver_switch: platform specific callback fn for transceiver control
30 *
31 * Platform data structure to get all platform specific settings.
32 * this structure also accounts the fact that the IP may have different
33 * RAM and mailbox offsets for different SOC's
34 */
35struct ti_hecc_platform_data {
36 u32 scc_hecc_offset;
37 u32 scc_ram_offset;
38 u32 hecc_ram_offset;
39 u32 mbx_offset;
40 u32 int_line;
41 u32 version;
42 void (*transceiver_switch) (int);
43};
44#endif
diff --git a/include/linux/capability.h b/include/linux/capability.h
index c8f2a5f70ed5..39e5ff512fbe 100644
--- a/include/linux/capability.h
+++ b/include/linux/capability.h
@@ -92,9 +92,7 @@ struct vfs_cap_data {
92#define _KERNEL_CAPABILITY_VERSION _LINUX_CAPABILITY_VERSION_3 92#define _KERNEL_CAPABILITY_VERSION _LINUX_CAPABILITY_VERSION_3
93#define _KERNEL_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_3 93#define _KERNEL_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_3
94 94
95#ifdef CONFIG_SECURITY_FILE_CAPABILITIES
96extern int file_caps_enabled; 95extern int file_caps_enabled;
97#endif
98 96
99typedef struct kernel_cap_struct { 97typedef struct kernel_cap_struct {
100 __u32 cap[_KERNEL_CAPABILITY_U32S]; 98 __u32 cap[_KERNEL_CAPABILITY_U32S];
diff --git a/include/linux/cciss_defs.h b/include/linux/cciss_defs.h
new file mode 100644
index 000000000000..316b670d4e33
--- /dev/null
+++ b/include/linux/cciss_defs.h
@@ -0,0 +1,130 @@
1#ifndef CCISS_DEFS_H
2#define CCISS_DEFS_H
3
4#include <linux/types.h>
5
6/* general boundary definitions */
7#define SENSEINFOBYTES 32 /* note that this value may vary
8 between host implementations */
9
10/* Command Status value */
11#define CMD_SUCCESS 0x0000
12#define CMD_TARGET_STATUS 0x0001
13#define CMD_DATA_UNDERRUN 0x0002
14#define CMD_DATA_OVERRUN 0x0003
15#define CMD_INVALID 0x0004
16#define CMD_PROTOCOL_ERR 0x0005
17#define CMD_HARDWARE_ERR 0x0006
18#define CMD_CONNECTION_LOST 0x0007
19#define CMD_ABORTED 0x0008
20#define CMD_ABORT_FAILED 0x0009
21#define CMD_UNSOLICITED_ABORT 0x000A
22#define CMD_TIMEOUT 0x000B
23#define CMD_UNABORTABLE 0x000C
24
25/* transfer direction */
26#define XFER_NONE 0x00
27#define XFER_WRITE 0x01
28#define XFER_READ 0x02
29#define XFER_RSVD 0x03
30
31/* task attribute */
32#define ATTR_UNTAGGED 0x00
33#define ATTR_SIMPLE 0x04
34#define ATTR_HEADOFQUEUE 0x05
35#define ATTR_ORDERED 0x06
36#define ATTR_ACA 0x07
37
38/* cdb type */
39#define TYPE_CMD 0x00
40#define TYPE_MSG 0x01
41
42/* Type defs used in the following structs */
43#define BYTE __u8
44#define WORD __u16
45#define HWORD __u16
46#define DWORD __u32
47
48#define CISS_MAX_LUN 1024
49
50#define LEVEL2LUN 1 /* index into Target(x) structure, due to byte swapping */
51#define LEVEL3LUN 0
52
53#pragma pack(1)
54
55/* Command List Structure */
56typedef union _SCSI3Addr_struct {
57 struct {
58 BYTE Dev;
59 BYTE Bus:6;
60 BYTE Mode:2; /* b00 */
61 } PeripDev;
62 struct {
63 BYTE DevLSB;
64 BYTE DevMSB:6;
65 BYTE Mode:2; /* b01 */
66 } LogDev;
67 struct {
68 BYTE Dev:5;
69 BYTE Bus:3;
70 BYTE Targ:6;
71 BYTE Mode:2; /* b10 */
72 } LogUnit;
73} SCSI3Addr_struct;
74
75typedef struct _PhysDevAddr_struct {
76 DWORD TargetId:24;
77 DWORD Bus:6;
78 DWORD Mode:2;
79 SCSI3Addr_struct Target[2]; /* 2 level target device addr */
80} PhysDevAddr_struct;
81
82typedef struct _LogDevAddr_struct {
83 DWORD VolId:30;
84 DWORD Mode:2;
85 BYTE reserved[4];
86} LogDevAddr_struct;
87
88typedef union _LUNAddr_struct {
89 BYTE LunAddrBytes[8];
90 SCSI3Addr_struct SCSI3Lun[4];
91 PhysDevAddr_struct PhysDev;
92 LogDevAddr_struct LogDev;
93} LUNAddr_struct;
94
95typedef struct _RequestBlock_struct {
96 BYTE CDBLen;
97 struct {
98 BYTE Type:3;
99 BYTE Attribute:3;
100 BYTE Direction:2;
101 } Type;
102 HWORD Timeout;
103 BYTE CDB[16];
104} RequestBlock_struct;
105
106typedef union _MoreErrInfo_struct{
107 struct {
108 BYTE Reserved[3];
109 BYTE Type;
110 DWORD ErrorInfo;
111 } Common_Info;
112 struct{
113 BYTE Reserved[2];
114 BYTE offense_size; /* size of offending entry */
115 BYTE offense_num; /* byte # of offense 0-base */
116 DWORD offense_value;
117 } Invalid_Cmd;
118} MoreErrInfo_struct;
119typedef struct _ErrorInfo_struct {
120 BYTE ScsiStatus;
121 BYTE SenseLen;
122 HWORD CommandStatus;
123 DWORD ResidualCnt;
124 MoreErrInfo_struct MoreErrInfo;
125 BYTE SenseInfo[SENSEINFOBYTES];
126} ErrorInfo_struct;
127
128#pragma pack()
129
130#endif /* CCISS_DEFS_H */
diff --git a/include/linux/cciss_ioctl.h b/include/linux/cciss_ioctl.h
index cb57c30081a8..986493f5b92b 100644
--- a/include/linux/cciss_ioctl.h
+++ b/include/linux/cciss_ioctl.h
@@ -3,6 +3,7 @@
3 3
4#include <linux/types.h> 4#include <linux/types.h>
5#include <linux/ioctl.h> 5#include <linux/ioctl.h>
6#include <linux/cciss_defs.h>
6 7
7#define CCISS_IOC_MAGIC 'B' 8#define CCISS_IOC_MAGIC 'B'
8 9
@@ -36,133 +37,6 @@ typedef __u32 DriverVer_type;
36 37
37#define MAX_KMALLOC_SIZE 128000 38#define MAX_KMALLOC_SIZE 128000
38 39
39#ifndef CCISS_CMD_H
40// This defines are duplicated in cciss_cmd.h in the driver directory
41
42//general boundary defintions
43#define SENSEINFOBYTES 32//note that this value may vary between host implementations
44
45//Command Status value
46#define CMD_SUCCESS 0x0000
47#define CMD_TARGET_STATUS 0x0001
48#define CMD_DATA_UNDERRUN 0x0002
49#define CMD_DATA_OVERRUN 0x0003
50#define CMD_INVALID 0x0004
51#define CMD_PROTOCOL_ERR 0x0005
52#define CMD_HARDWARE_ERR 0x0006
53#define CMD_CONNECTION_LOST 0x0007
54#define CMD_ABORTED 0x0008
55#define CMD_ABORT_FAILED 0x0009
56#define CMD_UNSOLICITED_ABORT 0x000A
57#define CMD_TIMEOUT 0x000B
58#define CMD_UNABORTABLE 0x000C
59
60//transfer direction
61#define XFER_NONE 0x00
62#define XFER_WRITE 0x01
63#define XFER_READ 0x02
64#define XFER_RSVD 0x03
65
66//task attribute
67#define ATTR_UNTAGGED 0x00
68#define ATTR_SIMPLE 0x04
69#define ATTR_HEADOFQUEUE 0x05
70#define ATTR_ORDERED 0x06
71#define ATTR_ACA 0x07
72
73//cdb type
74#define TYPE_CMD 0x00
75#define TYPE_MSG 0x01
76
77// Type defs used in the following structs
78#define BYTE __u8
79#define WORD __u16
80#define HWORD __u16
81#define DWORD __u32
82
83#define CISS_MAX_LUN 1024
84
85#define LEVEL2LUN 1 // index into Target(x) structure, due to byte swapping
86#define LEVEL3LUN 0
87
88#pragma pack(1)
89
90//Command List Structure
91typedef union _SCSI3Addr_struct {
92 struct {
93 BYTE Dev;
94 BYTE Bus:6;
95 BYTE Mode:2; // b00
96 } PeripDev;
97 struct {
98 BYTE DevLSB;
99 BYTE DevMSB:6;
100 BYTE Mode:2; // b01
101 } LogDev;
102 struct {
103 BYTE Dev:5;
104 BYTE Bus:3;
105 BYTE Targ:6;
106 BYTE Mode:2; // b10
107 } LogUnit;
108} SCSI3Addr_struct;
109
110typedef struct _PhysDevAddr_struct {
111 DWORD TargetId:24;
112 DWORD Bus:6;
113 DWORD Mode:2;
114 SCSI3Addr_struct Target[2]; //2 level target device addr
115} PhysDevAddr_struct;
116
117typedef struct _LogDevAddr_struct {
118 DWORD VolId:30;
119 DWORD Mode:2;
120 BYTE reserved[4];
121} LogDevAddr_struct;
122
123typedef union _LUNAddr_struct {
124 BYTE LunAddrBytes[8];
125 SCSI3Addr_struct SCSI3Lun[4];
126 PhysDevAddr_struct PhysDev;
127 LogDevAddr_struct LogDev;
128} LUNAddr_struct;
129
130typedef struct _RequestBlock_struct {
131 BYTE CDBLen;
132 struct {
133 BYTE Type:3;
134 BYTE Attribute:3;
135 BYTE Direction:2;
136 } Type;
137 HWORD Timeout;
138 BYTE CDB[16];
139} RequestBlock_struct;
140
141typedef union _MoreErrInfo_struct{
142 struct {
143 BYTE Reserved[3];
144 BYTE Type;
145 DWORD ErrorInfo;
146 }Common_Info;
147 struct{
148 BYTE Reserved[2];
149 BYTE offense_size;//size of offending entry
150 BYTE offense_num; //byte # of offense 0-base
151 DWORD offense_value;
152 }Invalid_Cmd;
153}MoreErrInfo_struct;
154typedef struct _ErrorInfo_struct {
155 BYTE ScsiStatus;
156 BYTE SenseLen;
157 HWORD CommandStatus;
158 DWORD ResidualCnt;
159 MoreErrInfo_struct MoreErrInfo;
160 BYTE SenseInfo[SENSEINFOBYTES];
161} ErrorInfo_struct;
162
163#pragma pack()
164#endif /* CCISS_CMD_H */
165
166typedef struct _IOCTL_Command_struct { 40typedef struct _IOCTL_Command_struct {
167 LUNAddr_struct LUN_info; 41 LUNAddr_struct LUN_info;
168 RequestBlock_struct Request; 42 RequestBlock_struct Request;
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index 0008dee66514..8f78073d7caa 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -28,6 +28,7 @@ struct css_id;
28extern int cgroup_init_early(void); 28extern int cgroup_init_early(void);
29extern int cgroup_init(void); 29extern int cgroup_init(void);
30extern void cgroup_lock(void); 30extern void cgroup_lock(void);
31extern int cgroup_lock_is_held(void);
31extern bool cgroup_lock_live_group(struct cgroup *cgrp); 32extern bool cgroup_lock_live_group(struct cgroup *cgrp);
32extern void cgroup_unlock(void); 33extern void cgroup_unlock(void);
33extern void cgroup_fork(struct task_struct *p); 34extern void cgroup_fork(struct task_struct *p);
@@ -36,16 +37,24 @@ extern void cgroup_post_fork(struct task_struct *p);
36extern void cgroup_exit(struct task_struct *p, int run_callbacks); 37extern void cgroup_exit(struct task_struct *p, int run_callbacks);
37extern int cgroupstats_build(struct cgroupstats *stats, 38extern int cgroupstats_build(struct cgroupstats *stats,
38 struct dentry *dentry); 39 struct dentry *dentry);
40extern int cgroup_load_subsys(struct cgroup_subsys *ss);
41extern void cgroup_unload_subsys(struct cgroup_subsys *ss);
39 42
40extern const struct file_operations proc_cgroup_operations; 43extern const struct file_operations proc_cgroup_operations;
41 44
42/* Define the enumeration of all cgroup subsystems */ 45/* Define the enumeration of all builtin cgroup subsystems */
43#define SUBSYS(_x) _x ## _subsys_id, 46#define SUBSYS(_x) _x ## _subsys_id,
44enum cgroup_subsys_id { 47enum cgroup_subsys_id {
45#include <linux/cgroup_subsys.h> 48#include <linux/cgroup_subsys.h>
46 CGROUP_SUBSYS_COUNT 49 CGROUP_BUILTIN_SUBSYS_COUNT
47}; 50};
48#undef SUBSYS 51#undef SUBSYS
52/*
53 * This define indicates the maximum number of subsystems that can be loaded
54 * at once. We limit to this many since cgroupfs_root has subsys_bits to keep
55 * track of all of them.
56 */
57#define CGROUP_SUBSYS_COUNT (BITS_PER_BYTE*sizeof(unsigned long))
49 58
50/* Per-subsystem/per-cgroup state maintained by the system. */ 59/* Per-subsystem/per-cgroup state maintained by the system. */
51struct cgroup_subsys_state { 60struct cgroup_subsys_state {
@@ -75,6 +84,12 @@ enum {
75 CSS_REMOVED, /* This CSS is dead */ 84 CSS_REMOVED, /* This CSS is dead */
76}; 85};
77 86
87/* Caller must verify that the css is not for root cgroup */
88static inline void __css_get(struct cgroup_subsys_state *css, int count)
89{
90 atomic_add(count, &css->refcnt);
91}
92
78/* 93/*
79 * Call css_get() to hold a reference on the css; it can be used 94 * Call css_get() to hold a reference on the css; it can be used
80 * for a reference obtained via: 95 * for a reference obtained via:
@@ -86,7 +101,7 @@ static inline void css_get(struct cgroup_subsys_state *css)
86{ 101{
87 /* We don't need to reference count the root state */ 102 /* We don't need to reference count the root state */
88 if (!test_bit(CSS_ROOT, &css->flags)) 103 if (!test_bit(CSS_ROOT, &css->flags))
89 atomic_inc(&css->refcnt); 104 __css_get(css, 1);
90} 105}
91 106
92static inline bool css_is_removed(struct cgroup_subsys_state *css) 107static inline bool css_is_removed(struct cgroup_subsys_state *css)
@@ -117,11 +132,11 @@ static inline bool css_tryget(struct cgroup_subsys_state *css)
117 * css_get() or css_tryget() 132 * css_get() or css_tryget()
118 */ 133 */
119 134
120extern void __css_put(struct cgroup_subsys_state *css); 135extern void __css_put(struct cgroup_subsys_state *css, int count);
121static inline void css_put(struct cgroup_subsys_state *css) 136static inline void css_put(struct cgroup_subsys_state *css)
122{ 137{
123 if (!test_bit(CSS_ROOT, &css->flags)) 138 if (!test_bit(CSS_ROOT, &css->flags))
124 __css_put(css); 139 __css_put(css, 1);
125} 140}
126 141
127/* bits in struct cgroup flags field */ 142/* bits in struct cgroup flags field */
@@ -220,6 +235,10 @@ struct cgroup {
220 235
221 /* For RCU-protected deletion */ 236 /* For RCU-protected deletion */
222 struct rcu_head rcu_head; 237 struct rcu_head rcu_head;
238
239 /* List of events which userspace want to recieve */
240 struct list_head event_list;
241 spinlock_t event_list_lock;
223}; 242};
224 243
225/* 244/*
@@ -257,7 +276,8 @@ struct css_set {
257 /* 276 /*
258 * Set of subsystem states, one for each subsystem. This array 277 * Set of subsystem states, one for each subsystem. This array
259 * is immutable after creation apart from the init_css_set 278 * is immutable after creation apart from the init_css_set
260 * during subsystem registration (at boot time). 279 * during subsystem registration (at boot time) and modular subsystem
280 * loading/unloading.
261 */ 281 */
262 struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]; 282 struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT];
263 283
@@ -362,6 +382,23 @@ struct cftype {
362 int (*trigger)(struct cgroup *cgrp, unsigned int event); 382 int (*trigger)(struct cgroup *cgrp, unsigned int event);
363 383
364 int (*release)(struct inode *inode, struct file *file); 384 int (*release)(struct inode *inode, struct file *file);
385
386 /*
387 * register_event() callback will be used to add new userspace
388 * waiter for changes related to the cftype. Implement it if
389 * you want to provide this functionality. Use eventfd_signal()
390 * on eventfd to send notification to userspace.
391 */
392 int (*register_event)(struct cgroup *cgrp, struct cftype *cft,
393 struct eventfd_ctx *eventfd, const char *args);
394 /*
395 * unregister_event() callback will be called when userspace
396 * closes the eventfd or on cgroup removing.
397 * This callback must be implemented, if you want provide
398 * notification functionality.
399 */
400 int (*unregister_event)(struct cgroup *cgrp, struct cftype *cft,
401 struct eventfd_ctx *eventfd);
365}; 402};
366 403
367struct cgroup_scanner { 404struct cgroup_scanner {
@@ -427,6 +464,8 @@ struct cgroup_subsys {
427 void (*destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp); 464 void (*destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp);
428 int (*can_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp, 465 int (*can_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
429 struct task_struct *tsk, bool threadgroup); 466 struct task_struct *tsk, bool threadgroup);
467 void (*cancel_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
468 struct task_struct *tsk, bool threadgroup);
430 void (*attach)(struct cgroup_subsys *ss, struct cgroup *cgrp, 469 void (*attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
431 struct cgroup *old_cgrp, struct task_struct *tsk, 470 struct cgroup *old_cgrp, struct task_struct *tsk,
432 bool threadgroup); 471 bool threadgroup);
@@ -471,6 +510,9 @@ struct cgroup_subsys {
471 /* used when use_id == true */ 510 /* used when use_id == true */
472 struct idr idr; 511 struct idr idr;
473 spinlock_t id_lock; 512 spinlock_t id_lock;
513
514 /* should be defined only by modular subsystems */
515 struct module *module;
474}; 516};
475 517
476#define SUBSYS(_x) extern struct cgroup_subsys _x ## _subsys; 518#define SUBSYS(_x) extern struct cgroup_subsys _x ## _subsys;
@@ -486,7 +528,10 @@ static inline struct cgroup_subsys_state *cgroup_subsys_state(
486static inline struct cgroup_subsys_state *task_subsys_state( 528static inline struct cgroup_subsys_state *task_subsys_state(
487 struct task_struct *task, int subsys_id) 529 struct task_struct *task, int subsys_id)
488{ 530{
489 return rcu_dereference(task->cgroups->subsys[subsys_id]); 531 return rcu_dereference_check(task->cgroups->subsys[subsys_id],
532 rcu_read_lock_held() ||
533 lockdep_is_held(&task->alloc_lock) ||
534 cgroup_lock_is_held());
490} 535}
491 536
492static inline struct cgroup* task_cgroup(struct task_struct *task, 537static inline struct cgroup* task_cgroup(struct task_struct *task,
diff --git a/include/linux/cgroup_subsys.h b/include/linux/cgroup_subsys.h
index 9c8d31bacf46..ccefff02b6cb 100644
--- a/include/linux/cgroup_subsys.h
+++ b/include/linux/cgroup_subsys.h
@@ -60,3 +60,9 @@ SUBSYS(net_cls)
60#endif 60#endif
61 61
62/* */ 62/* */
63
64#ifdef CONFIG_BLK_CGROUP
65SUBSYS(blkio)
66#endif
67
68/* */
diff --git a/include/linux/chio.h b/include/linux/chio.h
index 519248d8b2b6..d9bac7f97282 100644
--- a/include/linux/chio.h
+++ b/include/linux/chio.h
@@ -21,7 +21,7 @@
21 * query vendor-specific element types 21 * query vendor-specific element types
22 * 22 *
23 * accessing elements works by specifing type and unit of the element. 23 * accessing elements works by specifing type and unit of the element.
24 * for eample, storage elements are addressed with type = CHET_ST and 24 * for example, storage elements are addressed with type = CHET_ST and
25 * unit = 0 .. cp_nslots-1 25 * unit = 0 .. cp_nslots-1
26 * 26 *
27 */ 27 */
diff --git a/include/linux/circ_buf.h b/include/linux/circ_buf.h
index a2ed0591fb19..90f2471dc6f2 100644
--- a/include/linux/circ_buf.h
+++ b/include/linux/circ_buf.h
@@ -1,3 +1,7 @@
1/*
2 * See Documentation/circular-buffers.txt for more information.
3 */
4
1#ifndef _LINUX_CIRC_BUF_H 5#ifndef _LINUX_CIRC_BUF_H
2#define _LINUX_CIRC_BUF_H 1 6#define _LINUX_CIRC_BUF_H 1
3 7
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h
index 3a1dbba4d3ae..fc53492b6ad7 100644
--- a/include/linux/clockchips.h
+++ b/include/linux/clockchips.h
@@ -73,14 +73,15 @@ enum clock_event_nofitiers {
73 * @list: list head for the management code 73 * @list: list head for the management code
74 * @mode: operating mode assigned by the management code 74 * @mode: operating mode assigned by the management code
75 * @next_event: local storage for the next event in oneshot mode 75 * @next_event: local storage for the next event in oneshot mode
76 * @retries: number of forced programming retries
76 */ 77 */
77struct clock_event_device { 78struct clock_event_device {
78 const char *name; 79 const char *name;
79 unsigned int features; 80 unsigned int features;
80 unsigned long max_delta_ns; 81 u64 max_delta_ns;
81 unsigned long min_delta_ns; 82 u64 min_delta_ns;
82 unsigned long mult; 83 u32 mult;
83 int shift; 84 u32 shift;
84 int rating; 85 int rating;
85 int irq; 86 int irq;
86 const struct cpumask *cpumask; 87 const struct cpumask *cpumask;
@@ -93,6 +94,7 @@ struct clock_event_device {
93 struct list_head list; 94 struct list_head list;
94 enum clock_event_mode mode; 95 enum clock_event_mode mode;
95 ktime_t next_event; 96 ktime_t next_event;
97 unsigned long retries;
96}; 98};
97 99
98/* 100/*
@@ -116,8 +118,8 @@ static inline unsigned long div_sc(unsigned long ticks, unsigned long nsec,
116} 118}
117 119
118/* Clock event layer functions */ 120/* Clock event layer functions */
119extern unsigned long clockevent_delta2ns(unsigned long latch, 121extern u64 clockevent_delta2ns(unsigned long latch,
120 struct clock_event_device *evt); 122 struct clock_event_device *evt);
121extern void clockevents_register_device(struct clock_event_device *dev); 123extern void clockevents_register_device(struct clock_event_device *dev);
122 124
123extern void clockevents_exchange_device(struct clock_event_device *old, 125extern void clockevents_exchange_device(struct clock_event_device *old,
@@ -130,6 +132,13 @@ extern int clockevents_program_event(struct clock_event_device *dev,
130 132
131extern void clockevents_handle_noop(struct clock_event_device *dev); 133extern void clockevents_handle_noop(struct clock_event_device *dev);
132 134
135static inline void
136clockevents_calc_mult_shift(struct clock_event_device *ce, u32 freq, u32 minsec)
137{
138 return clocks_calc_mult_shift(&ce->mult, &ce->shift, NSEC_PER_SEC,
139 freq, minsec);
140}
141
133#ifdef CONFIG_GENERIC_CLOCKEVENTS 142#ifdef CONFIG_GENERIC_CLOCKEVENTS
134extern void clockevents_notify(unsigned long reason, void *arg); 143extern void clockevents_notify(unsigned long reason, void *arg);
135#else 144#else
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h
index 83d2fbd81b93..4bca8b60cdf7 100644
--- a/include/linux/clocksource.h
+++ b/include/linux/clocksource.h
@@ -151,8 +151,10 @@ extern u64 timecounter_cyc2time(struct timecounter *tc,
151 * subtraction of non 64 bit counters 151 * subtraction of non 64 bit counters
152 * @mult: cycle to nanosecond multiplier 152 * @mult: cycle to nanosecond multiplier
153 * @shift: cycle to nanosecond divisor (power of two) 153 * @shift: cycle to nanosecond divisor (power of two)
154 * @max_idle_ns: max idle time permitted by the clocksource (nsecs)
154 * @flags: flags describing special properties 155 * @flags: flags describing special properties
155 * @vread: vsyscall based read 156 * @vread: vsyscall based read
157 * @suspend: suspend function for the clocksource, if necessary
156 * @resume: resume function for the clocksource, if necessary 158 * @resume: resume function for the clocksource, if necessary
157 */ 159 */
158struct clocksource { 160struct clocksource {
@@ -168,9 +170,11 @@ struct clocksource {
168 cycle_t mask; 170 cycle_t mask;
169 u32 mult; 171 u32 mult;
170 u32 shift; 172 u32 shift;
173 u64 max_idle_ns;
171 unsigned long flags; 174 unsigned long flags;
172 cycle_t (*vread)(void); 175 cycle_t (*vread)(void);
173 void (*resume)(void); 176 void (*suspend)(struct clocksource *cs);
177 void (*resume)(struct clocksource *cs);
174#ifdef CONFIG_IA64 178#ifdef CONFIG_IA64
175 void *fsys_mmio; /* used by fsyscall asm code */ 179 void *fsys_mmio; /* used by fsyscall asm code */
176#define CLKSRC_FSYS_MMIO_SET(mmio, addr) ((mmio) = (addr)) 180#define CLKSRC_FSYS_MMIO_SET(mmio, addr) ((mmio) = (addr))
@@ -275,15 +279,28 @@ extern void clocksource_unregister(struct clocksource*);
275extern void clocksource_touch_watchdog(void); 279extern void clocksource_touch_watchdog(void);
276extern struct clocksource* clocksource_get_next(void); 280extern struct clocksource* clocksource_get_next(void);
277extern void clocksource_change_rating(struct clocksource *cs, int rating); 281extern void clocksource_change_rating(struct clocksource *cs, int rating);
282extern void clocksource_suspend(void);
278extern void clocksource_resume(void); 283extern void clocksource_resume(void);
279extern struct clocksource * __init __weak clocksource_default_clock(void); 284extern struct clocksource * __init __weak clocksource_default_clock(void);
280extern void clocksource_mark_unstable(struct clocksource *cs); 285extern void clocksource_mark_unstable(struct clocksource *cs);
281 286
287extern void
288clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec);
289
290static inline void
291clocksource_calc_mult_shift(struct clocksource *cs, u32 freq, u32 minsec)
292{
293 return clocks_calc_mult_shift(&cs->mult, &cs->shift, freq,
294 NSEC_PER_SEC, minsec);
295}
296
282#ifdef CONFIG_GENERIC_TIME_VSYSCALL 297#ifdef CONFIG_GENERIC_TIME_VSYSCALL
283extern void update_vsyscall(struct timespec *ts, struct clocksource *c); 298extern void
299update_vsyscall(struct timespec *ts, struct clocksource *c, u32 mult);
284extern void update_vsyscall_tz(void); 300extern void update_vsyscall_tz(void);
285#else 301#else
286static inline void update_vsyscall(struct timespec *ts, struct clocksource *c) 302static inline void
303update_vsyscall(struct timespec *ts, struct clocksource *c, u32 mult)
287{ 304{
288} 305}
289 306
diff --git a/include/linux/coda_psdev.h b/include/linux/coda_psdev.h
index 5b5d4731f956..8859e2ede9fe 100644
--- a/include/linux/coda_psdev.h
+++ b/include/linux/coda_psdev.h
@@ -7,6 +7,8 @@
7#define MAX_CODADEVS 5 /* how many do we allow */ 7#define MAX_CODADEVS 5 /* how many do we allow */
8 8
9#ifdef __KERNEL__ 9#ifdef __KERNEL__
10#include <linux/backing-dev.h>
11
10struct kstatfs; 12struct kstatfs;
11 13
12/* communication pending/processing queues */ 14/* communication pending/processing queues */
@@ -17,6 +19,7 @@ struct venus_comm {
17 struct list_head vc_processing; 19 struct list_head vc_processing;
18 int vc_inuse; 20 int vc_inuse;
19 struct super_block *vc_sb; 21 struct super_block *vc_sb;
22 struct backing_dev_info bdi;
20}; 23};
21 24
22 25
diff --git a/include/linux/compat.h b/include/linux/compat.h
index af931ee43dd8..717c691ecd8e 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
@@ -10,6 +10,8 @@
10#include <linux/stat.h> 10#include <linux/stat.h>
11#include <linux/param.h> /* for HZ */ 11#include <linux/param.h> /* for HZ */
12#include <linux/sem.h> 12#include <linux/sem.h>
13#include <linux/socket.h>
14#include <linux/if.h>
13 15
14#include <asm/compat.h> 16#include <asm/compat.h>
15#include <asm/siginfo.h> 17#include <asm/siginfo.h>
@@ -21,6 +23,7 @@
21typedef __compat_uid32_t compat_uid_t; 23typedef __compat_uid32_t compat_uid_t;
22typedef __compat_gid32_t compat_gid_t; 24typedef __compat_gid32_t compat_gid_t;
23 25
26struct compat_sel_arg_struct;
24struct rusage; 27struct rusage;
25 28
26struct compat_itimerspec { 29struct compat_itimerspec {
@@ -154,6 +157,48 @@ typedef struct compat_sigevent {
154 } _sigev_un; 157 } _sigev_un;
155} compat_sigevent_t; 158} compat_sigevent_t;
156 159
160struct compat_ifmap {
161 compat_ulong_t mem_start;
162 compat_ulong_t mem_end;
163 unsigned short base_addr;
164 unsigned char irq;
165 unsigned char dma;
166 unsigned char port;
167};
168
169struct compat_if_settings
170{
171 unsigned int type; /* Type of physical device or protocol */
172 unsigned int size; /* Size of the data allocated by the caller */
173 compat_uptr_t ifs_ifsu; /* union of pointers */
174};
175
176struct compat_ifreq {
177 union {
178 char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */
179 } ifr_ifrn;
180 union {
181 struct sockaddr ifru_addr;
182 struct sockaddr ifru_dstaddr;
183 struct sockaddr ifru_broadaddr;
184 struct sockaddr ifru_netmask;
185 struct sockaddr ifru_hwaddr;
186 short ifru_flags;
187 compat_int_t ifru_ivalue;
188 compat_int_t ifru_mtu;
189 struct compat_ifmap ifru_map;
190 char ifru_slave[IFNAMSIZ]; /* Just fits the size */
191 char ifru_newname[IFNAMSIZ];
192 compat_caddr_t ifru_data;
193 struct compat_if_settings ifru_settings;
194 } ifr_ifru;
195};
196
197struct compat_ifconf {
198 compat_int_t ifc_len; /* size of buffer */
199 compat_caddr_t ifcbuf;
200};
201
157struct compat_robust_list { 202struct compat_robust_list {
158 compat_uptr_t next; 203 compat_uptr_t next;
159}; 204};
@@ -205,6 +250,8 @@ asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp,
205 compat_ulong_t __user *outp, compat_ulong_t __user *exp, 250 compat_ulong_t __user *outp, compat_ulong_t __user *exp,
206 struct compat_timeval __user *tvp); 251 struct compat_timeval __user *tvp);
207 252
253asmlinkage long compat_sys_old_select(struct compat_sel_arg_struct __user *arg);
254
208asmlinkage long compat_sys_wait4(compat_pid_t pid, 255asmlinkage long compat_sys_wait4(compat_pid_t pid,
209 compat_uint_t __user *stat_addr, int options, 256 compat_uint_t __user *stat_addr, int options,
210 struct compat_rusage __user *ru); 257 struct compat_rusage __user *ru);
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index a3ed7cb8ca34..73dcf804bc94 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -79,6 +79,7 @@
79#define noinline __attribute__((noinline)) 79#define noinline __attribute__((noinline))
80#define __attribute_const__ __attribute__((__const__)) 80#define __attribute_const__ __attribute__((__const__))
81#define __maybe_unused __attribute__((unused)) 81#define __maybe_unused __attribute__((unused))
82#define __always_unused __attribute__((unused))
82 83
83#define __gcc_header(x) #x 84#define __gcc_header(x) #x
84#define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h) 85#define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h)
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h
index 450fa597c94d..94dea3ffbfa1 100644
--- a/include/linux/compiler-gcc4.h
+++ b/include/linux/compiler-gcc4.h
@@ -36,4 +36,26 @@
36 the kernel context */ 36 the kernel context */
37#define __cold __attribute__((__cold__)) 37#define __cold __attribute__((__cold__))
38 38
39
40#if __GNUC_MINOR__ >= 5
41/*
42 * Mark a position in code as unreachable. This can be used to
43 * suppress control flow warnings after asm blocks that transfer
44 * control elsewhere.
45 *
46 * Early snapshots of gcc 4.5 don't support this and we can't detect
47 * this in the preprocessor, but we can live with this because they're
48 * unreleased. Really, we need to have autoconf for the kernel.
49 */
50#define unreachable() __builtin_unreachable()
51#endif
52
53#endif
54
55#if __GNUC_MINOR__ > 0
56#define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
57#endif
58#if __GNUC_MINOR__ >= 4
59#define __compiletime_warning(message) __attribute__((warning(message)))
60#define __compiletime_error(message) __attribute__((error(message)))
39#endif 61#endif
diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index 04fb5135b4e1..a5a472b10746 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -5,7 +5,7 @@
5 5
6#ifdef __CHECKER__ 6#ifdef __CHECKER__
7# define __user __attribute__((noderef, address_space(1))) 7# define __user __attribute__((noderef, address_space(1)))
8# define __kernel /* default address space */ 8# define __kernel __attribute__((address_space(0)))
9# define __safe __attribute__((safe)) 9# define __safe __attribute__((safe))
10# define __force __attribute__((force)) 10# define __force __attribute__((force))
11# define __nocast __attribute__((nocast)) 11# define __nocast __attribute__((nocast))
@@ -15,6 +15,7 @@
15# define __acquire(x) __context__(x,1) 15# define __acquire(x) __context__(x,1)
16# define __release(x) __context__(x,-1) 16# define __release(x) __context__(x,-1)
17# define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0) 17# define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0)
18# define __percpu __attribute__((noderef, address_space(3)))
18extern void __chk_user_ptr(const volatile void __user *); 19extern void __chk_user_ptr(const volatile void __user *);
19extern void __chk_io_ptr(const volatile void __iomem *); 20extern void __chk_io_ptr(const volatile void __iomem *);
20#else 21#else
@@ -32,6 +33,7 @@ extern void __chk_io_ptr(const volatile void __iomem *);
32# define __acquire(x) (void)0 33# define __acquire(x) (void)0
33# define __release(x) (void)0 34# define __release(x) (void)0
34# define __cond_lock(x,c) (c) 35# define __cond_lock(x,c) (c)
36# define __percpu
35#endif 37#endif
36 38
37#ifdef __KERNEL__ 39#ifdef __KERNEL__
@@ -144,6 +146,11 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
144# define barrier() __memory_barrier() 146# define barrier() __memory_barrier()
145#endif 147#endif
146 148
149/* Unreachable code */
150#ifndef unreachable
151# define unreachable() do { } while (1)
152#endif
153
147#ifndef RELOC_HIDE 154#ifndef RELOC_HIDE
148# define RELOC_HIDE(ptr, off) \ 155# define RELOC_HIDE(ptr, off) \
149 ({ unsigned long __ptr; \ 156 ({ unsigned long __ptr; \
@@ -213,6 +220,10 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
213# define __maybe_unused /* unimplemented */ 220# define __maybe_unused /* unimplemented */
214#endif 221#endif
215 222
223#ifndef __always_unused
224# define __always_unused /* unimplemented */
225#endif
226
216#ifndef noinline 227#ifndef noinline
217#define noinline 228#define noinline
218#endif 229#endif
@@ -266,6 +277,17 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
266# define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) 277# define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
267#endif 278#endif
268 279
280/* Compile time object size, -1 for unknown */
281#ifndef __compiletime_object_size
282# define __compiletime_object_size(obj) -1
283#endif
284#ifndef __compiletime_warning
285# define __compiletime_warning(message)
286#endif
287#ifndef __compiletime_error
288# define __compiletime_error(message)
289#endif
290
269/* 291/*
270 * Prevent the compiler from merging or refetching accesses. The compiler 292 * Prevent the compiler from merging or refetching accesses. The compiler
271 * is also forbidden from reordering successive instances of ACCESS_ONCE(), 293 * is also forbidden from reordering successive instances of ACCESS_ONCE(),
diff --git a/include/linux/connector.h b/include/linux/connector.h
index 3a14615fd35c..3a779ffba60b 100644
--- a/include/linux/connector.h
+++ b/include/linux/connector.h
@@ -24,9 +24,6 @@
24 24
25#include <linux/types.h> 25#include <linux/types.h>
26 26
27#define CN_IDX_CONNECTOR 0xffffffff
28#define CN_VAL_CONNECTOR 0xffffffff
29
30/* 27/*
31 * Process Events connector unique ids -- used for message routing 28 * Process Events connector unique ids -- used for message routing
32 */ 29 */
@@ -43,6 +40,8 @@
43#define CN_DST_VAL 0x1 40#define CN_DST_VAL 0x1
44#define CN_IDX_DM 0x7 /* Device Mapper */ 41#define CN_IDX_DM 0x7 /* Device Mapper */
45#define CN_VAL_DM_USERSPACE_LOG 0x1 42#define CN_VAL_DM_USERSPACE_LOG 0x1
43#define CN_IDX_DRBD 0x8
44#define CN_VAL_DRBD 0x1
46 45
47#define CN_NETLINK_USERS 8 46#define CN_NETLINK_USERS 8
48 47
@@ -73,30 +72,6 @@ struct cn_msg {
73 __u8 data[0]; 72 __u8 data[0];
74}; 73};
75 74
76/*
77 * Notify structure - requests notification about
78 * registering/unregistering idx/val in range [first, first+range].
79 */
80struct cn_notify_req {
81 __u32 first;
82 __u32 range;
83};
84
85/*
86 * Main notification control message
87 * *_notify_num - number of appropriate cn_notify_req structures after
88 * this struct.
89 * group - notification receiver's idx.
90 * len - total length of the attached data.
91 */
92struct cn_ctl_msg {
93 __u32 idx_notify_num;
94 __u32 val_notify_num;
95 __u32 group;
96 __u32 len;
97 __u8 data[0];
98};
99
100#ifdef __KERNEL__ 75#ifdef __KERNEL__
101 76
102#include <asm/atomic.h> 77#include <asm/atomic.h>
@@ -149,11 +124,6 @@ struct cn_callback_entry {
149 u32 seq, group; 124 u32 seq, group;
150}; 125};
151 126
152struct cn_ctl_entry {
153 struct list_head notify_entry;
154 struct cn_ctl_msg *msg;
155};
156
157struct cn_dev { 127struct cn_dev {
158 struct cb_id id; 128 struct cb_id id;
159 129
diff --git a/include/linux/coredump.h b/include/linux/coredump.h
new file mode 100644
index 000000000000..8ba66a9d9022
--- /dev/null
+++ b/include/linux/coredump.h
@@ -0,0 +1,45 @@
1#ifndef _LINUX_COREDUMP_H
2#define _LINUX_COREDUMP_H
3
4#include <linux/types.h>
5#include <linux/mm.h>
6#include <linux/fs.h>
7
8/*
9 * These are the only things you should do on a core-file: use only these
10 * functions to write out all the necessary info.
11 */
12static inline int dump_write(struct file *file, const void *addr, int nr)
13{
14 return file->f_op->write(file, addr, nr, &file->f_pos) == nr;
15}
16
17static inline int dump_seek(struct file *file, loff_t off)
18{
19 int ret = 1;
20
21 if (file->f_op->llseek && file->f_op->llseek != no_llseek) {
22 if (file->f_op->llseek(file, off, SEEK_CUR) < 0)
23 return 0;
24 } else {
25 char *buf = (char *)get_zeroed_page(GFP_KERNEL);
26
27 if (!buf)
28 return 0;
29 while (off > 0) {
30 unsigned long n = off;
31
32 if (n > PAGE_SIZE)
33 n = PAGE_SIZE;
34 if (!dump_write(file, buf, n)) {
35 ret = 0;
36 break;
37 }
38 off -= n;
39 }
40 free_page((unsigned long)buf);
41 }
42 return ret;
43}
44
45#endif /* _LINUX_COREDUMP_H */
diff --git a/include/linux/cpu.h b/include/linux/cpu.h
index 47536197ffdd..e287863ac053 100644
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -43,6 +43,8 @@ extern int sched_create_sysfs_power_savings_entries(struct sysdev_class *cls);
43 43
44#ifdef CONFIG_HOTPLUG_CPU 44#ifdef CONFIG_HOTPLUG_CPU
45extern void unregister_cpu(struct cpu *cpu); 45extern void unregister_cpu(struct cpu *cpu);
46extern ssize_t arch_cpu_probe(const char *, size_t);
47extern ssize_t arch_cpu_release(const char *, size_t);
46#endif 48#endif
47struct notifier_block; 49struct notifier_block;
48 50
@@ -115,6 +117,19 @@ extern void put_online_cpus(void);
115#define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) 117#define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb)
116int cpu_down(unsigned int cpu); 118int cpu_down(unsigned int cpu);
117 119
120#ifdef CONFIG_ARCH_CPU_PROBE_RELEASE
121extern void cpu_hotplug_driver_lock(void);
122extern void cpu_hotplug_driver_unlock(void);
123#else
124static inline void cpu_hotplug_driver_lock(void)
125{
126}
127
128static inline void cpu_hotplug_driver_unlock(void)
129{
130}
131#endif
132
118#else /* CONFIG_HOTPLUG_CPU */ 133#else /* CONFIG_HOTPLUG_CPU */
119 134
120#define get_online_cpus() do { } while (0) 135#define get_online_cpus() do { } while (0)
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 79a2340d83cd..4de02b10007f 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -232,6 +232,7 @@ struct cpufreq_driver {
232 /* optional */ 232 /* optional */
233 unsigned int (*getavg) (struct cpufreq_policy *policy, 233 unsigned int (*getavg) (struct cpufreq_policy *policy,
234 unsigned int cpu); 234 unsigned int cpu);
235 int (*bios_limit) (int cpu, unsigned int *limit);
235 236
236 int (*exit) (struct cpufreq_policy *policy); 237 int (*exit) (struct cpufreq_policy *policy);
237 int (*suspend) (struct cpufreq_policy *policy, pm_message_t pmsg); 238 int (*suspend) (struct cpufreq_policy *policy, pm_message_t pmsg);
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
index 789cf5f920ce..bae6fe24d1f9 100644
--- a/include/linux/cpumask.h
+++ b/include/linux/cpumask.h
@@ -84,14 +84,16 @@ extern const struct cpumask *const cpu_active_mask;
84#define num_online_cpus() cpumask_weight(cpu_online_mask) 84#define num_online_cpus() cpumask_weight(cpu_online_mask)
85#define num_possible_cpus() cpumask_weight(cpu_possible_mask) 85#define num_possible_cpus() cpumask_weight(cpu_possible_mask)
86#define num_present_cpus() cpumask_weight(cpu_present_mask) 86#define num_present_cpus() cpumask_weight(cpu_present_mask)
87#define num_active_cpus() cpumask_weight(cpu_active_mask)
87#define cpu_online(cpu) cpumask_test_cpu((cpu), cpu_online_mask) 88#define cpu_online(cpu) cpumask_test_cpu((cpu), cpu_online_mask)
88#define cpu_possible(cpu) cpumask_test_cpu((cpu), cpu_possible_mask) 89#define cpu_possible(cpu) cpumask_test_cpu((cpu), cpu_possible_mask)
89#define cpu_present(cpu) cpumask_test_cpu((cpu), cpu_present_mask) 90#define cpu_present(cpu) cpumask_test_cpu((cpu), cpu_present_mask)
90#define cpu_active(cpu) cpumask_test_cpu((cpu), cpu_active_mask) 91#define cpu_active(cpu) cpumask_test_cpu((cpu), cpu_active_mask)
91#else 92#else
92#define num_online_cpus() 1 93#define num_online_cpus() 1U
93#define num_possible_cpus() 1 94#define num_possible_cpus() 1U
94#define num_present_cpus() 1 95#define num_present_cpus() 1U
96#define num_active_cpus() 1U
95#define cpu_online(cpu) ((cpu) == 0) 97#define cpu_online(cpu) ((cpu) == 0)
96#define cpu_possible(cpu) ((cpu) == 0) 98#define cpu_possible(cpu) ((cpu) == 0)
97#define cpu_present(cpu) ((cpu) == 0) 99#define cpu_present(cpu) ((cpu) == 0)
@@ -141,6 +143,8 @@ static inline unsigned int cpumask_any_but(const struct cpumask *mask,
141 143
142#define for_each_cpu(cpu, mask) \ 144#define for_each_cpu(cpu, mask) \
143 for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask) 145 for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)
146#define for_each_cpu_not(cpu, mask) \
147 for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)
144#define for_each_cpu_and(cpu, mask, and) \ 148#define for_each_cpu_and(cpu, mask, and) \
145 for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask, (void)and) 149 for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask, (void)and)
146#else 150#else
@@ -201,6 +205,18 @@ int cpumask_any_but(const struct cpumask *mask, unsigned int cpu);
201 (cpu) < nr_cpu_ids;) 205 (cpu) < nr_cpu_ids;)
202 206
203/** 207/**
208 * for_each_cpu_not - iterate over every cpu in a complemented mask
209 * @cpu: the (optionally unsigned) integer iterator
210 * @mask: the cpumask pointer
211 *
212 * After the loop, cpu is >= nr_cpu_ids.
213 */
214#define for_each_cpu_not(cpu, mask) \
215 for ((cpu) = -1; \
216 (cpu) = cpumask_next_zero((cpu), (mask)), \
217 (cpu) < nr_cpu_ids;)
218
219/**
204 * for_each_cpu_and - iterate over every cpu in both masks 220 * for_each_cpu_and - iterate over every cpu in both masks
205 * @cpu: the (optionally unsigned) integer iterator 221 * @cpu: the (optionally unsigned) integer iterator
206 * @mask: the first cpumask pointer 222 * @mask: the first cpumask pointer
diff --git a/include/linux/cred.h b/include/linux/cred.h
index 4e3387a89cb9..52507c3e1387 100644
--- a/include/linux/cred.h
+++ b/include/linux/cred.h
@@ -280,7 +280,7 @@ static inline void put_cred(const struct cred *_cred)
280 * task or by holding tasklist_lock to prevent it from being unlinked. 280 * task or by holding tasklist_lock to prevent it from being unlinked.
281 */ 281 */
282#define __task_cred(task) \ 282#define __task_cred(task) \
283 ((const struct cred *)(rcu_dereference((task)->real_cred))) 283 ((const struct cred *)(rcu_dereference_check((task)->real_cred, rcu_read_lock_held() || lockdep_tasklist_lock_is_held())))
284 284
285/** 285/**
286 * get_task_cred - Get another task's objective credentials 286 * get_task_cred - Get another task's objective credentials
diff --git a/include/linux/crypto.h b/include/linux/crypto.h
index fd929889e8dc..24d2e30f1b46 100644
--- a/include/linux/crypto.h
+++ b/include/linux/crypto.h
@@ -250,29 +250,6 @@ struct cipher_alg {
250 void (*cia_decrypt)(struct crypto_tfm *tfm, u8 *dst, const u8 *src); 250 void (*cia_decrypt)(struct crypto_tfm *tfm, u8 *dst, const u8 *src);
251}; 251};
252 252
253struct digest_alg {
254 unsigned int dia_digestsize;
255 void (*dia_init)(struct crypto_tfm *tfm);
256 void (*dia_update)(struct crypto_tfm *tfm, const u8 *data,
257 unsigned int len);
258 void (*dia_final)(struct crypto_tfm *tfm, u8 *out);
259 int (*dia_setkey)(struct crypto_tfm *tfm, const u8 *key,
260 unsigned int keylen);
261};
262
263struct hash_alg {
264 int (*init)(struct hash_desc *desc);
265 int (*update)(struct hash_desc *desc, struct scatterlist *sg,
266 unsigned int nbytes);
267 int (*final)(struct hash_desc *desc, u8 *out);
268 int (*digest)(struct hash_desc *desc, struct scatterlist *sg,
269 unsigned int nbytes, u8 *out);
270 int (*setkey)(struct crypto_hash *tfm, const u8 *key,
271 unsigned int keylen);
272
273 unsigned int digestsize;
274};
275
276struct compress_alg { 253struct compress_alg {
277 int (*coa_compress)(struct crypto_tfm *tfm, const u8 *src, 254 int (*coa_compress)(struct crypto_tfm *tfm, const u8 *src,
278 unsigned int slen, u8 *dst, unsigned int *dlen); 255 unsigned int slen, u8 *dst, unsigned int *dlen);
@@ -293,8 +270,6 @@ struct rng_alg {
293#define cra_aead cra_u.aead 270#define cra_aead cra_u.aead
294#define cra_blkcipher cra_u.blkcipher 271#define cra_blkcipher cra_u.blkcipher
295#define cra_cipher cra_u.cipher 272#define cra_cipher cra_u.cipher
296#define cra_digest cra_u.digest
297#define cra_hash cra_u.hash
298#define cra_compress cra_u.compress 273#define cra_compress cra_u.compress
299#define cra_rng cra_u.rng 274#define cra_rng cra_u.rng
300 275
@@ -320,8 +295,6 @@ struct crypto_alg {
320 struct aead_alg aead; 295 struct aead_alg aead;
321 struct blkcipher_alg blkcipher; 296 struct blkcipher_alg blkcipher;
322 struct cipher_alg cipher; 297 struct cipher_alg cipher;
323 struct digest_alg digest;
324 struct hash_alg hash;
325 struct compress_alg compress; 298 struct compress_alg compress;
326 struct rng_alg rng; 299 struct rng_alg rng;
327 } cra_u; 300 } cra_u;
diff --git a/include/linux/cryptohash.h b/include/linux/cryptohash.h
index c118b2ad9807..ec78a4bbe1d5 100644
--- a/include/linux/cryptohash.h
+++ b/include/linux/cryptohash.h
@@ -2,6 +2,7 @@
2#define __CRYPTOHASH_H 2#define __CRYPTOHASH_H
3 3
4#define SHA_DIGEST_WORDS 5 4#define SHA_DIGEST_WORDS 5
5#define SHA_MESSAGE_BYTES (512 /*bits*/ / 8)
5#define SHA_WORKSPACE_WORDS 80 6#define SHA_WORKSPACE_WORDS 80
6 7
7void sha_init(__u32 *buf); 8void sha_init(__u32 *buf);
diff --git a/include/linux/cs5535.h b/include/linux/cs5535.h
new file mode 100644
index 000000000000..d5a1d4810b80
--- /dev/null
+++ b/include/linux/cs5535.h
@@ -0,0 +1,172 @@
1/*
2 * AMD CS5535/CS5536 definitions
3 * Copyright (C) 2006 Advanced Micro Devices, Inc.
4 * Copyright (C) 2009 Andres Salomon <dilinger@collabora.co.uk>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of version 2 of the GNU General Public License
8 * as published by the Free Software Foundation.
9 */
10
11#ifndef _CS5535_H
12#define _CS5535_H
13
14/* MSRs */
15#define MSR_GLIU_P2D_RO0 0x10000029
16
17#define MSR_LX_GLD_MSR_CONFIG 0x48002001
18#define MSR_LX_MSR_PADSEL 0x48002011 /* NOT 0x48000011; the data
19 * sheet has the wrong value */
20#define MSR_GLCP_SYS_RSTPLL 0x4C000014
21#define MSR_GLCP_DOTPLL 0x4C000015
22
23#define MSR_LBAR_SMB 0x5140000B
24#define MSR_LBAR_GPIO 0x5140000C
25#define MSR_LBAR_MFGPT 0x5140000D
26#define MSR_LBAR_ACPI 0x5140000E
27#define MSR_LBAR_PMS 0x5140000F
28
29#define MSR_DIVIL_SOFT_RESET 0x51400017
30
31#define MSR_PIC_YSEL_LOW 0x51400020
32#define MSR_PIC_YSEL_HIGH 0x51400021
33#define MSR_PIC_ZSEL_LOW 0x51400022
34#define MSR_PIC_ZSEL_HIGH 0x51400023
35#define MSR_PIC_IRQM_LPC 0x51400025
36
37#define MSR_MFGPT_IRQ 0x51400028
38#define MSR_MFGPT_NR 0x51400029
39#define MSR_MFGPT_SETUP 0x5140002B
40
41#define MSR_LX_SPARE_MSR 0x80000011 /* DC-specific */
42
43#define MSR_GX_GLD_MSR_CONFIG 0xC0002001
44#define MSR_GX_MSR_PADSEL 0xC0002011
45
46/* resource sizes */
47#define LBAR_GPIO_SIZE 0xFF
48#define LBAR_MFGPT_SIZE 0x40
49#define LBAR_ACPI_SIZE 0x40
50#define LBAR_PMS_SIZE 0x80
51
52/* VSA2 magic values */
53#define VSA_VRC_INDEX 0xAC1C
54#define VSA_VRC_DATA 0xAC1E
55#define VSA_VR_UNLOCK 0xFC53 /* unlock virtual register */
56#define VSA_VR_SIGNATURE 0x0003
57#define VSA_VR_MEM_SIZE 0x0200
58#define AMD_VSA_SIG 0x4132 /* signature is ascii 'VSA2' */
59#define GSW_VSA_SIG 0x534d /* General Software signature */
60
61#include <linux/io.h>
62
63static inline int cs5535_has_vsa2(void)
64{
65 static int has_vsa2 = -1;
66
67 if (has_vsa2 == -1) {
68 uint16_t val;
69
70 /*
71 * The VSA has virtual registers that we can query for a
72 * signature.
73 */
74 outw(VSA_VR_UNLOCK, VSA_VRC_INDEX);
75 outw(VSA_VR_SIGNATURE, VSA_VRC_INDEX);
76
77 val = inw(VSA_VRC_DATA);
78 has_vsa2 = (val == AMD_VSA_SIG || val == GSW_VSA_SIG);
79 }
80
81 return has_vsa2;
82}
83
84/* GPIOs */
85#define GPIO_OUTPUT_VAL 0x00
86#define GPIO_OUTPUT_ENABLE 0x04
87#define GPIO_OUTPUT_OPEN_DRAIN 0x08
88#define GPIO_OUTPUT_INVERT 0x0C
89#define GPIO_OUTPUT_AUX1 0x10
90#define GPIO_OUTPUT_AUX2 0x14
91#define GPIO_PULL_UP 0x18
92#define GPIO_PULL_DOWN 0x1C
93#define GPIO_INPUT_ENABLE 0x20
94#define GPIO_INPUT_INVERT 0x24
95#define GPIO_INPUT_FILTER 0x28
96#define GPIO_INPUT_EVENT_COUNT 0x2C
97#define GPIO_READ_BACK 0x30
98#define GPIO_INPUT_AUX1 0x34
99#define GPIO_EVENTS_ENABLE 0x38
100#define GPIO_LOCK_ENABLE 0x3C
101#define GPIO_POSITIVE_EDGE_EN 0x40
102#define GPIO_NEGATIVE_EDGE_EN 0x44
103#define GPIO_POSITIVE_EDGE_STS 0x48
104#define GPIO_NEGATIVE_EDGE_STS 0x4C
105
106#define GPIO_MAP_X 0xE0
107#define GPIO_MAP_Y 0xE4
108#define GPIO_MAP_Z 0xE8
109#define GPIO_MAP_W 0xEC
110
111void cs5535_gpio_set(unsigned offset, unsigned int reg);
112void cs5535_gpio_clear(unsigned offset, unsigned int reg);
113int cs5535_gpio_isset(unsigned offset, unsigned int reg);
114
115/* MFGPTs */
116
117#define MFGPT_MAX_TIMERS 8
118#define MFGPT_TIMER_ANY (-1)
119
120#define MFGPT_DOMAIN_WORKING 1
121#define MFGPT_DOMAIN_STANDBY 2
122#define MFGPT_DOMAIN_ANY (MFGPT_DOMAIN_WORKING | MFGPT_DOMAIN_STANDBY)
123
124#define MFGPT_CMP1 0
125#define MFGPT_CMP2 1
126
127#define MFGPT_EVENT_IRQ 0
128#define MFGPT_EVENT_NMI 1
129#define MFGPT_EVENT_RESET 3
130
131#define MFGPT_REG_CMP1 0
132#define MFGPT_REG_CMP2 2
133#define MFGPT_REG_COUNTER 4
134#define MFGPT_REG_SETUP 6
135
136#define MFGPT_SETUP_CNTEN (1 << 15)
137#define MFGPT_SETUP_CMP2 (1 << 14)
138#define MFGPT_SETUP_CMP1 (1 << 13)
139#define MFGPT_SETUP_SETUP (1 << 12)
140#define MFGPT_SETUP_STOPEN (1 << 11)
141#define MFGPT_SETUP_EXTEN (1 << 10)
142#define MFGPT_SETUP_REVEN (1 << 5)
143#define MFGPT_SETUP_CLKSEL (1 << 4)
144
145struct cs5535_mfgpt_timer;
146
147extern uint16_t cs5535_mfgpt_read(struct cs5535_mfgpt_timer *timer,
148 uint16_t reg);
149extern void cs5535_mfgpt_write(struct cs5535_mfgpt_timer *timer, uint16_t reg,
150 uint16_t value);
151
152extern int cs5535_mfgpt_toggle_event(struct cs5535_mfgpt_timer *timer, int cmp,
153 int event, int enable);
154extern int cs5535_mfgpt_set_irq(struct cs5535_mfgpt_timer *timer, int cmp,
155 int *irq, int enable);
156extern struct cs5535_mfgpt_timer *cs5535_mfgpt_alloc_timer(int timer,
157 int domain);
158extern void cs5535_mfgpt_free_timer(struct cs5535_mfgpt_timer *timer);
159
160static inline int cs5535_mfgpt_setup_irq(struct cs5535_mfgpt_timer *timer,
161 int cmp, int *irq)
162{
163 return cs5535_mfgpt_set_irq(timer, cmp, irq, 1);
164}
165
166static inline int cs5535_mfgpt_release_irq(struct cs5535_mfgpt_timer *timer,
167 int cmp, int *irq)
168{
169 return cs5535_mfgpt_set_irq(timer, cmp, irq, 0);
170}
171
172#endif
diff --git a/include/linux/ctype.h b/include/linux/ctype.h
index afa36392297a..a3d6ee0044f9 100644
--- a/include/linux/ctype.h
+++ b/include/linux/ctype.h
@@ -15,7 +15,7 @@
15#define _X 0x40 /* hex digit */ 15#define _X 0x40 /* hex digit */
16#define _SP 0x80 /* hard space (0x20) */ 16#define _SP 0x80 /* hard space (0x20) */
17 17
18extern unsigned char _ctype[]; 18extern const unsigned char _ctype[];
19 19
20#define __ismask(x) (_ctype[(int)(unsigned char)(x)]) 20#define __ismask(x) (_ctype[(int)(unsigned char)(x)])
21 21
@@ -27,6 +27,7 @@ extern unsigned char _ctype[];
27#define islower(c) ((__ismask(c)&(_L)) != 0) 27#define islower(c) ((__ismask(c)&(_L)) != 0)
28#define isprint(c) ((__ismask(c)&(_P|_U|_L|_D|_SP)) != 0) 28#define isprint(c) ((__ismask(c)&(_P|_U|_L|_D|_SP)) != 0)
29#define ispunct(c) ((__ismask(c)&(_P)) != 0) 29#define ispunct(c) ((__ismask(c)&(_P)) != 0)
30/* Note: isspace() must return false for %NUL-terminator */
30#define isspace(c) ((__ismask(c)&(_S)) != 0) 31#define isspace(c) ((__ismask(c)&(_S)) != 0)
31#define isupper(c) ((__ismask(c)&(_U)) != 0) 32#define isupper(c) ((__ismask(c)&(_U)) != 0)
32#define isxdigit(c) ((__ismask(c)&(_D|_X)) != 0) 33#define isxdigit(c) ((__ismask(c)&(_D|_X)) != 0)
diff --git a/include/linux/davinci_emac.h b/include/linux/davinci_emac.h
new file mode 100644
index 000000000000..7c930dba477c
--- /dev/null
+++ b/include/linux/davinci_emac.h
@@ -0,0 +1,39 @@
1/*
2 * TI DaVinci EMAC platform support
3 *
4 * Author: Kevin Hilman, Deep Root Systems, LLC
5 *
6 * 2007 (c) Deep Root Systems, LLC. This file is licensed under
7 * the terms of the GNU General Public License version 2. This program
8 * is licensed "as is" without any warranty of any kind, whether express
9 * or implied.
10 */
11#ifndef _LINUX_DAVINCI_EMAC_H
12#define _LINUX_DAVINCI_EMAC_H
13
14#include <linux/if_ether.h>
15#include <linux/memory.h>
16
17struct emac_platform_data {
18 char mac_addr[ETH_ALEN];
19 u32 ctrl_reg_offset;
20 u32 ctrl_mod_reg_offset;
21 u32 ctrl_ram_offset;
22 u32 hw_ram_addr;
23 u32 mdio_reg_offset;
24 u32 ctrl_ram_size;
25 u32 phy_mask;
26 u32 mdio_max_freq;
27 u8 rmii_en;
28 u8 version;
29 void (*interrupt_enable) (void);
30 void (*interrupt_disable) (void);
31};
32
33enum {
34 EMAC_VERSION_1, /* DM644x */
35 EMAC_VERSION_2, /* DM646x */
36};
37
38void davinci_get_mac_addr(struct memory_accessor *mem_acc, void *context);
39#endif
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index 30b93b2a01a4..eebb617c17d8 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -186,6 +186,8 @@ d_iput: no no no yes
186 186
187#define DCACHE_FSNOTIFY_PARENT_WATCHED 0x0080 /* Parent inode is watched by some fsnotify listener */ 187#define DCACHE_FSNOTIFY_PARENT_WATCHED 0x0080 /* Parent inode is watched by some fsnotify listener */
188 188
189#define DCACHE_CANT_MOUNT 0x0100
190
189extern spinlock_t dcache_lock; 191extern spinlock_t dcache_lock;
190extern seqlock_t rename_lock; 192extern seqlock_t rename_lock;
191 193
@@ -358,6 +360,18 @@ static inline int d_unlinked(struct dentry *dentry)
358 return d_unhashed(dentry) && !IS_ROOT(dentry); 360 return d_unhashed(dentry) && !IS_ROOT(dentry);
359} 361}
360 362
363static inline int cant_mount(struct dentry *dentry)
364{
365 return (dentry->d_flags & DCACHE_CANT_MOUNT);
366}
367
368static inline void dont_mount(struct dentry *dentry)
369{
370 spin_lock(&dentry->d_lock);
371 dentry->d_flags |= DCACHE_CANT_MOUNT;
372 spin_unlock(&dentry->d_lock);
373}
374
361static inline struct dentry *dget_parent(struct dentry *dentry) 375static inline struct dentry *dget_parent(struct dentry *dentry)
362{ 376{
363 struct dentry *ret; 377 struct dentry *ret;
diff --git a/include/linux/decompress/mm.h b/include/linux/decompress/mm.h
index 12ff8c3f1d05..ad5ec1d0475e 100644
--- a/include/linux/decompress/mm.h
+++ b/include/linux/decompress/mm.h
@@ -14,18 +14,28 @@
14 14
15/* Code active when included from pre-boot environment: */ 15/* Code active when included from pre-boot environment: */
16 16
17/*
18 * Some architectures want to ensure there is no local data in their
19 * pre-boot environment, so that data can arbitarily relocated (via
20 * GOT references). This is achieved by defining STATIC_RW_DATA to
21 * be null.
22 */
23#ifndef STATIC_RW_DATA
24#define STATIC_RW_DATA static
25#endif
26
17/* A trivial malloc implementation, adapted from 27/* A trivial malloc implementation, adapted from
18 * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994 28 * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
19 */ 29 */
20static unsigned long malloc_ptr; 30STATIC_RW_DATA unsigned long malloc_ptr;
21static int malloc_count; 31STATIC_RW_DATA int malloc_count;
22 32
23static void *malloc(int size) 33static void *malloc(int size)
24{ 34{
25 void *p; 35 void *p;
26 36
27 if (size < 0) 37 if (size < 0)
28 error("Malloc error"); 38 return NULL;
29 if (!malloc_ptr) 39 if (!malloc_ptr)
30 malloc_ptr = free_mem_ptr; 40 malloc_ptr = free_mem_ptr;
31 41
@@ -35,7 +45,7 @@ static void *malloc(int size)
35 malloc_ptr += size; 45 malloc_ptr += size;
36 46
37 if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr) 47 if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr)
38 error("Out of memory"); 48 return NULL;
39 49
40 malloc_count++; 50 malloc_count++;
41 return p; 51 return p;
diff --git a/include/linux/decompress/unlzo.h b/include/linux/decompress/unlzo.h
new file mode 100644
index 000000000000..987229752519
--- /dev/null
+++ b/include/linux/decompress/unlzo.h
@@ -0,0 +1,10 @@
1#ifndef DECOMPRESS_UNLZO_H
2#define DECOMPRESS_UNLZO_H
3
4int unlzo(unsigned char *inbuf, int len,
5 int(*fill)(void*, unsigned int),
6 int(*flush)(void*, unsigned int),
7 unsigned char *output,
8 int *pos,
9 void(*error)(char *x));
10#endif
diff --git a/include/linux/delayacct.h b/include/linux/delayacct.h
index 5076fe0c8a96..6cee17c22313 100644
--- a/include/linux/delayacct.h
+++ b/include/linux/delayacct.h
@@ -18,6 +18,7 @@
18#define _LINUX_DELAYACCT_H 18#define _LINUX_DELAYACCT_H
19 19
20#include <linux/sched.h> 20#include <linux/sched.h>
21#include <linux/slab.h>
21 22
22/* 23/*
23 * Per-task flags relevant to delay accounting 24 * Per-task flags relevant to delay accounting
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
index df7607e6dce8..1381cd97b4ed 100644
--- a/include/linux/device-mapper.h
+++ b/include/linux/device-mapper.h
@@ -118,10 +118,9 @@ struct dm_dev {
118/* 118/*
119 * Constructors should call these functions to ensure destination devices 119 * Constructors should call these functions to ensure destination devices
120 * are opened/closed correctly. 120 * are opened/closed correctly.
121 * FIXME: too many arguments.
122 */ 121 */
123int dm_get_device(struct dm_target *ti, const char *path, sector_t start, 122int dm_get_device(struct dm_target *ti, const char *path, fmode_t mode,
124 sector_t len, fmode_t mode, struct dm_dev **result); 123 struct dm_dev **result);
125void dm_put_device(struct dm_target *ti, struct dm_dev *d); 124void dm_put_device(struct dm_target *ti, struct dm_dev *d);
126 125
127/* 126/*
@@ -235,7 +234,7 @@ void dm_uevent_add(struct mapped_device *md, struct list_head *elist);
235const char *dm_device_name(struct mapped_device *md); 234const char *dm_device_name(struct mapped_device *md);
236int dm_copy_name_and_uuid(struct mapped_device *md, char *name, char *uuid); 235int dm_copy_name_and_uuid(struct mapped_device *md, char *name, char *uuid);
237struct gendisk *dm_disk(struct mapped_device *md); 236struct gendisk *dm_disk(struct mapped_device *md);
238int dm_suspended(struct mapped_device *md); 237int dm_suspended(struct dm_target *ti);
239int dm_noflush_suspending(struct dm_target *ti); 238int dm_noflush_suspending(struct dm_target *ti);
240union map_info *dm_get_mapinfo(struct bio *bio); 239union map_info *dm_get_mapinfo(struct bio *bio);
241union map_info *dm_get_rq_mapinfo(struct request *rq); 240union map_info *dm_get_rq_mapinfo(struct request *rq);
@@ -276,7 +275,7 @@ void dm_table_unplug_all(struct dm_table *t);
276/* 275/*
277 * Table reference counting. 276 * Table reference counting.
278 */ 277 */
279struct dm_table *dm_get_table(struct mapped_device *md); 278struct dm_table *dm_get_live_table(struct mapped_device *md);
280void dm_table_get(struct dm_table *t); 279void dm_table_get(struct dm_table *t);
281void dm_table_put(struct dm_table *t); 280void dm_table_put(struct dm_table *t);
282 281
@@ -295,8 +294,10 @@ void dm_table_event(struct dm_table *t);
295 294
296/* 295/*
297 * The device must be suspended before calling this method. 296 * The device must be suspended before calling this method.
297 * Returns the previous table, which the caller must destroy.
298 */ 298 */
299int dm_swap_table(struct mapped_device *md, struct dm_table *t); 299struct dm_table *dm_swap_table(struct mapped_device *md,
300 struct dm_table *t);
300 301
301/* 302/*
302 * A wrapper around vmalloc. 303 * A wrapper around vmalloc.
diff --git a/include/linux/device.h b/include/linux/device.h
index 2ea3e4921812..182192892d45 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -106,7 +106,7 @@ extern int bus_unregister_notifier(struct bus_type *bus,
106 106
107/* All 4 notifers below get called with the target struct device * 107/* All 4 notifers below get called with the target struct device *
108 * as an argument. Note that those functions are likely to be called 108 * as an argument. Note that those functions are likely to be called
109 * with the device semaphore held in the core, so be careful. 109 * with the device lock held in the core, so be careful.
110 */ 110 */
111#define BUS_NOTIFY_ADD_DEVICE 0x00000001 /* device added */ 111#define BUS_NOTIFY_ADD_DEVICE 0x00000001 /* device added */
112#define BUS_NOTIFY_DEL_DEVICE 0x00000002 /* device removed */ 112#define BUS_NOTIFY_DEL_DEVICE 0x00000002 /* device removed */
@@ -166,9 +166,9 @@ struct driver_attribute driver_attr_##_name = \
166 __ATTR(_name, _mode, _show, _store) 166 __ATTR(_name, _mode, _show, _store)
167 167
168extern int __must_check driver_create_file(struct device_driver *driver, 168extern int __must_check driver_create_file(struct device_driver *driver,
169 struct driver_attribute *attr); 169 const struct driver_attribute *attr);
170extern void driver_remove_file(struct device_driver *driver, 170extern void driver_remove_file(struct device_driver *driver,
171 struct driver_attribute *attr); 171 const struct driver_attribute *attr);
172 172
173extern int __must_check driver_add_kobj(struct device_driver *drv, 173extern int __must_check driver_add_kobj(struct device_driver *drv,
174 struct kobject *kobj, 174 struct kobject *kobj,
@@ -251,8 +251,10 @@ extern struct device *class_find_device(struct class *class,
251 251
252struct class_attribute { 252struct class_attribute {
253 struct attribute attr; 253 struct attribute attr;
254 ssize_t (*show)(struct class *class, char *buf); 254 ssize_t (*show)(struct class *class, struct class_attribute *attr,
255 ssize_t (*store)(struct class *class, const char *buf, size_t count); 255 char *buf);
256 ssize_t (*store)(struct class *class, struct class_attribute *attr,
257 const char *buf, size_t count);
256}; 258};
257 259
258#define CLASS_ATTR(_name, _mode, _show, _store) \ 260#define CLASS_ATTR(_name, _mode, _show, _store) \
@@ -263,6 +265,23 @@ extern int __must_check class_create_file(struct class *class,
263extern void class_remove_file(struct class *class, 265extern void class_remove_file(struct class *class,
264 const struct class_attribute *attr); 266 const struct class_attribute *attr);
265 267
268/* Simple class attribute that is just a static string */
269
270struct class_attribute_string {
271 struct class_attribute attr;
272 char *str;
273};
274
275/* Currently read-only only */
276#define _CLASS_ATTR_STRING(_name, _mode, _str) \
277 { __ATTR(_name, _mode, show_class_attr_string, NULL), _str }
278#define CLASS_ATTR_STRING(_name, _mode, _str) \
279 struct class_attribute_string class_attr_##_name = \
280 _CLASS_ATTR_STRING(_name, _mode, _str)
281
282extern ssize_t show_class_attr_string(struct class *class, struct class_attribute *attr,
283 char *buf);
284
266struct class_interface { 285struct class_interface {
267 struct list_head node; 286 struct list_head node;
268 struct class *class; 287 struct class *class;
@@ -319,13 +338,13 @@ struct device_attribute {
319struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store) 338struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
320 339
321extern int __must_check device_create_file(struct device *device, 340extern int __must_check device_create_file(struct device *device,
322 struct device_attribute *entry); 341 const struct device_attribute *entry);
323extern void device_remove_file(struct device *dev, 342extern void device_remove_file(struct device *dev,
324 struct device_attribute *attr); 343 const struct device_attribute *attr);
325extern int __must_check device_create_bin_file(struct device *dev, 344extern int __must_check device_create_bin_file(struct device *dev,
326 struct bin_attribute *attr); 345 const struct bin_attribute *attr);
327extern void device_remove_bin_file(struct device *dev, 346extern void device_remove_bin_file(struct device *dev,
328 struct bin_attribute *attr); 347 const struct bin_attribute *attr);
329extern int device_schedule_callback_owner(struct device *dev, 348extern int device_schedule_callback_owner(struct device *dev,
330 void (*func)(struct device *dev), struct module *owner); 349 void (*func)(struct device *dev), struct module *owner);
331 350
@@ -472,6 +491,38 @@ static inline int device_is_registered(struct device *dev)
472 return dev->kobj.state_in_sysfs; 491 return dev->kobj.state_in_sysfs;
473} 492}
474 493
494static inline void device_enable_async_suspend(struct device *dev)
495{
496 if (dev->power.status == DPM_ON)
497 dev->power.async_suspend = true;
498}
499
500static inline void device_disable_async_suspend(struct device *dev)
501{
502 if (dev->power.status == DPM_ON)
503 dev->power.async_suspend = false;
504}
505
506static inline bool device_async_suspend_enabled(struct device *dev)
507{
508 return !!dev->power.async_suspend;
509}
510
511static inline void device_lock(struct device *dev)
512{
513 down(&dev->sem);
514}
515
516static inline int device_trylock(struct device *dev)
517{
518 return down_trylock(&dev->sem);
519}
520
521static inline void device_unlock(struct device *dev)
522{
523 up(&dev->sem);
524}
525
475void driver_init(void); 526void driver_init(void);
476 527
477/* 528/*
@@ -558,7 +609,7 @@ extern void wait_for_device_probe(void);
558#ifdef CONFIG_DEVTMPFS 609#ifdef CONFIG_DEVTMPFS
559extern int devtmpfs_create_node(struct device *dev); 610extern int devtmpfs_create_node(struct device *dev);
560extern int devtmpfs_delete_node(struct device *dev); 611extern int devtmpfs_delete_node(struct device *dev);
561extern int devtmpfs_mount(const char *mountpoint); 612extern int devtmpfs_mount(const char *mntdir);
562#else 613#else
563static inline int devtmpfs_create_node(struct device *dev) { return 0; } 614static inline int devtmpfs_create_node(struct device *dev) { return 0; }
564static inline int devtmpfs_delete_node(struct device *dev) { return 0; } 615static inline int devtmpfs_delete_node(struct device *dev) { return 0; }
diff --git a/include/linux/dm-dirty-log.h b/include/linux/dm-dirty-log.h
index 5e8b11d88f6f..7084503c3405 100644
--- a/include/linux/dm-dirty-log.h
+++ b/include/linux/dm-dirty-log.h
@@ -21,6 +21,7 @@ struct dm_dirty_log_type;
21 21
22struct dm_dirty_log { 22struct dm_dirty_log {
23 struct dm_dirty_log_type *type; 23 struct dm_dirty_log_type *type;
24 int (*flush_callback_fn)(struct dm_target *ti);
24 void *context; 25 void *context;
25}; 26};
26 27
@@ -136,8 +137,9 @@ int dm_dirty_log_type_unregister(struct dm_dirty_log_type *type);
136 * type->constructor/destructor() directly. 137 * type->constructor/destructor() directly.
137 */ 138 */
138struct dm_dirty_log *dm_dirty_log_create(const char *type_name, 139struct dm_dirty_log *dm_dirty_log_create(const char *type_name,
139 struct dm_target *ti, 140 struct dm_target *ti,
140 unsigned argc, char **argv); 141 int (*flush_callback_fn)(struct dm_target *ti),
142 unsigned argc, char **argv);
141void dm_dirty_log_destroy(struct dm_dirty_log *log); 143void dm_dirty_log_destroy(struct dm_dirty_log *log);
142 144
143#endif /* __KERNEL__ */ 145#endif /* __KERNEL__ */
diff --git a/include/linux/dm-io.h b/include/linux/dm-io.h
index b6bf17ee2f61..5c9186b93fff 100644
--- a/include/linux/dm-io.h
+++ b/include/linux/dm-io.h
@@ -37,14 +37,14 @@ enum dm_io_mem_type {
37struct dm_io_memory { 37struct dm_io_memory {
38 enum dm_io_mem_type type; 38 enum dm_io_mem_type type;
39 39
40 unsigned offset;
41
40 union { 42 union {
41 struct page_list *pl; 43 struct page_list *pl;
42 struct bio_vec *bvec; 44 struct bio_vec *bvec;
43 void *vma; 45 void *vma;
44 void *addr; 46 void *addr;
45 } ptr; 47 } ptr;
46
47 unsigned offset;
48}; 48};
49 49
50struct dm_io_notify { 50struct dm_io_notify {
diff --git a/include/linux/dm-ioctl.h b/include/linux/dm-ioctl.h
index 2ab84c83c31a..2c445e113790 100644
--- a/include/linux/dm-ioctl.h
+++ b/include/linux/dm-ioctl.h
@@ -1,6 +1,6 @@
1/* 1/*
2 * Copyright (C) 2001 - 2003 Sistina Software (UK) Limited. 2 * Copyright (C) 2001 - 2003 Sistina Software (UK) Limited.
3 * Copyright (C) 2004 - 2005 Red Hat, Inc. All rights reserved. 3 * Copyright (C) 2004 - 2009 Red Hat, Inc. All rights reserved.
4 * 4 *
5 * This file is released under the LGPL. 5 * This file is released under the LGPL.
6 */ 6 */
@@ -266,9 +266,9 @@ enum {
266#define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl) 266#define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
267 267
268#define DM_VERSION_MAJOR 4 268#define DM_VERSION_MAJOR 4
269#define DM_VERSION_MINOR 15 269#define DM_VERSION_MINOR 17
270#define DM_VERSION_PATCHLEVEL 0 270#define DM_VERSION_PATCHLEVEL 0
271#define DM_VERSION_EXTRA "-ioctl (2009-04-01)" 271#define DM_VERSION_EXTRA "-ioctl (2010-03-05)"
272 272
273/* Status bits */ 273/* Status bits */
274#define DM_READONLY_FLAG (1 << 0) /* In/Out */ 274#define DM_READONLY_FLAG (1 << 0) /* In/Out */
@@ -309,4 +309,16 @@ enum {
309 */ 309 */
310#define DM_NOFLUSH_FLAG (1 << 11) /* In */ 310#define DM_NOFLUSH_FLAG (1 << 11) /* In */
311 311
312/*
313 * If set, any table information returned will relate to the inactive
314 * table instead of the live one. Always check DM_INACTIVE_PRESENT_FLAG
315 * is set before using the data returned.
316 */
317#define DM_QUERY_INACTIVE_TABLE_FLAG (1 << 12) /* In */
318
319/*
320 * If set, a uevent was generated for which the caller may need to wait.
321 */
322#define DM_UEVENT_GENERATED_FLAG (1 << 13) /* Out */
323
312#endif /* _LINUX_DM_IOCTL_H */ 324#endif /* _LINUX_DM_IOCTL_H */
diff --git a/include/linux/dm-log-userspace.h b/include/linux/dm-log-userspace.h
index 8a1f972c0fe9..0c3c3a2110c4 100644
--- a/include/linux/dm-log-userspace.h
+++ b/include/linux/dm-log-userspace.h
@@ -363,7 +363,7 @@
363 * various request types above. The remaining 24-bits are currently 363 * various request types above. The remaining 24-bits are currently
364 * set to zero and are reserved for future use and compatibility concerns. 364 * set to zero and are reserved for future use and compatibility concerns.
365 * 365 *
366 * User-space should always use DM_ULOG_REQUEST_TYPE to aquire the 366 * User-space should always use DM_ULOG_REQUEST_TYPE to acquire the
367 * request type from the 'request_type' field to maintain forward compatibility. 367 * request type from the 'request_type' field to maintain forward compatibility.
368 */ 368 */
369#define DM_ULOG_REQUEST_MASK 0xFF 369#define DM_ULOG_REQUEST_MASK 0xFF
diff --git a/include/linux/dm-region-hash.h b/include/linux/dm-region-hash.h
index a9e652a41373..9e2a7a401df5 100644
--- a/include/linux/dm-region-hash.h
+++ b/include/linux/dm-region-hash.h
@@ -78,8 +78,7 @@ void dm_rh_dec(struct dm_region_hash *rh, region_t region);
78/* Delay bios on regions. */ 78/* Delay bios on regions. */
79void dm_rh_delay(struct dm_region_hash *rh, struct bio *bio); 79void dm_rh_delay(struct dm_region_hash *rh, struct bio *bio);
80 80
81void dm_rh_mark_nosync(struct dm_region_hash *rh, 81void dm_rh_mark_nosync(struct dm_region_hash *rh, struct bio *bio);
82 struct bio *bio, unsigned done, int error);
83 82
84/* 83/*
85 * Region recovery control. 84 * Region recovery control.
diff --git a/include/linux/dm9000.h b/include/linux/dm9000.h
index c30879cf93bc..96e87693d933 100644
--- a/include/linux/dm9000.h
+++ b/include/linux/dm9000.h
@@ -23,7 +23,7 @@
23#define DM9000_PLATF_NO_EEPROM (0x0010) 23#define DM9000_PLATF_NO_EEPROM (0x0010)
24#define DM9000_PLATF_SIMPLE_PHY (0x0020) /* Use NSR to find LinkStatus */ 24#define DM9000_PLATF_SIMPLE_PHY (0x0020) /* Use NSR to find LinkStatus */
25 25
26/* platfrom data for platfrom device structure's platfrom_data field */ 26/* platform data for platform device structure's platform_data field */
27 27
28struct dm9000_plat_data { 28struct dm9000_plat_data {
29 unsigned int flags; 29 unsigned int flags;
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index 91b761846061..ca32ed78b057 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -127,6 +127,14 @@ static inline u64 dma_get_mask(struct device *dev)
127 return DMA_BIT_MASK(32); 127 return DMA_BIT_MASK(32);
128} 128}
129 129
130static inline int dma_set_coherent_mask(struct device *dev, u64 mask)
131{
132 if (!dma_supported(dev, mask))
133 return -EIO;
134 dev->coherent_dma_mask = mask;
135 return 0;
136}
137
130extern u64 dma_get_required_mask(struct device *dev); 138extern u64 dma_get_required_mask(struct device *dev);
131 139
132static inline unsigned int dma_get_max_seg_size(struct device *dev) 140static inline unsigned int dma_get_max_seg_size(struct device *dev)
@@ -232,4 +240,20 @@ struct dma_attrs;
232 240
233#endif /* CONFIG_HAVE_DMA_ATTRS */ 241#endif /* CONFIG_HAVE_DMA_ATTRS */
234 242
243#ifdef CONFIG_NEED_DMA_MAP_STATE
244#define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME) dma_addr_t ADDR_NAME
245#define DEFINE_DMA_UNMAP_LEN(LEN_NAME) __u32 LEN_NAME
246#define dma_unmap_addr(PTR, ADDR_NAME) ((PTR)->ADDR_NAME)
247#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL) (((PTR)->ADDR_NAME) = (VAL))
248#define dma_unmap_len(PTR, LEN_NAME) ((PTR)->LEN_NAME)
249#define dma_unmap_len_set(PTR, LEN_NAME, VAL) (((PTR)->LEN_NAME) = (VAL))
250#else
251#define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME)
252#define DEFINE_DMA_UNMAP_LEN(LEN_NAME)
253#define dma_unmap_addr(PTR, ADDR_NAME) (0)
254#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0)
255#define dma_unmap_len(PTR, LEN_NAME) (0)
256#define dma_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0)
257#endif
258
235#endif 259#endif
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
index 2b9f2ac7ed60..20ea12c86fd0 100644
--- a/include/linux/dmaengine.h
+++ b/include/linux/dmaengine.h
@@ -31,6 +31,8 @@
31 * if dma_cookie_t is >0 it's a DMA request cookie, <0 it's an error code 31 * if dma_cookie_t is >0 it's a DMA request cookie, <0 it's an error code
32 */ 32 */
33typedef s32 dma_cookie_t; 33typedef s32 dma_cookie_t;
34#define DMA_MIN_COOKIE 1
35#define DMA_MAX_COOKIE INT_MAX
34 36
35#define dma_submit_error(cookie) ((cookie) < 0 ? 1 : 0) 37#define dma_submit_error(cookie) ((cookie) < 0 ? 1 : 0)
36 38
@@ -74,7 +76,7 @@ enum dma_transaction_type {
74 * control completion, and communicate status. 76 * control completion, and communicate status.
75 * @DMA_PREP_INTERRUPT - trigger an interrupt (callback) upon completion of 77 * @DMA_PREP_INTERRUPT - trigger an interrupt (callback) upon completion of
76 * this transaction 78 * this transaction
77 * @DMA_CTRL_ACK - the descriptor cannot be reused until the client 79 * @DMA_CTRL_ACK - if clear, the descriptor cannot be reused until the client
78 * acknowledges receipt, i.e. has has a chance to establish any dependency 80 * acknowledges receipt, i.e. has has a chance to establish any dependency
79 * chains 81 * chains
80 * @DMA_COMPL_SKIP_SRC_UNMAP - set to disable dma-unmapping the source buffer(s) 82 * @DMA_COMPL_SKIP_SRC_UNMAP - set to disable dma-unmapping the source buffer(s)
@@ -162,7 +164,7 @@ struct dma_chan {
162 struct dma_chan_dev *dev; 164 struct dma_chan_dev *dev;
163 165
164 struct list_head device_node; 166 struct list_head device_node;
165 struct dma_chan_percpu *local; 167 struct dma_chan_percpu __percpu *local;
166 int client_count; 168 int client_count;
167 int table_count; 169 int table_count;
168 void *private; 170 void *private;
diff --git a/include/linux/dmar.h b/include/linux/dmar.h
index 4a2b162c256a..d7cecc90ed34 100644
--- a/include/linux/dmar.h
+++ b/include/linux/dmar.h
@@ -126,7 +126,9 @@ extern int free_irte(int irq);
126extern int irq_remapped(int irq); 126extern int irq_remapped(int irq);
127extern struct intel_iommu *map_dev_to_ir(struct pci_dev *dev); 127extern struct intel_iommu *map_dev_to_ir(struct pci_dev *dev);
128extern struct intel_iommu *map_ioapic_to_ir(int apic); 128extern struct intel_iommu *map_ioapic_to_ir(int apic);
129extern struct intel_iommu *map_hpet_to_ir(u8 id);
129extern int set_ioapic_sid(struct irte *irte, int apic); 130extern int set_ioapic_sid(struct irte *irte, int apic);
131extern int set_hpet_sid(struct irte *irte, u8 id);
130extern int set_msi_sid(struct irte *irte, struct pci_dev *dev); 132extern int set_msi_sid(struct irte *irte, struct pci_dev *dev);
131#else 133#else
132static inline int alloc_irte(struct intel_iommu *iommu, int irq, u16 count) 134static inline int alloc_irte(struct intel_iommu *iommu, int irq, u16 count)
@@ -158,10 +160,18 @@ static inline struct intel_iommu *map_ioapic_to_ir(int apic)
158{ 160{
159 return NULL; 161 return NULL;
160} 162}
163static inline struct intel_iommu *map_hpet_to_ir(unsigned int hpet_id)
164{
165 return NULL;
166}
161static inline int set_ioapic_sid(struct irte *irte, int apic) 167static inline int set_ioapic_sid(struct irte *irte, int apic)
162{ 168{
163 return 0; 169 return 0;
164} 170}
171static inline int set_hpet_sid(struct irte *irte, u8 id)
172{
173 return -1;
174}
165static inline int set_msi_sid(struct irte *irte, struct pci_dev *dev) 175static inline int set_msi_sid(struct irte *irte, struct pci_dev *dev)
166{ 176{
167 return 0; 177 return 0;
@@ -208,16 +218,9 @@ struct dmar_atsr_unit {
208 u8 include_all:1; /* include all ports */ 218 u8 include_all:1; /* include all ports */
209}; 219};
210 220
211/* Intel DMAR initialization functions */
212extern int intel_iommu_init(void); 221extern int intel_iommu_init(void);
213#else 222#else /* !CONFIG_DMAR: */
214static inline int intel_iommu_init(void) 223static inline int intel_iommu_init(void) { return -ENODEV; }
215{ 224#endif /* CONFIG_DMAR */
216#ifdef CONFIG_INTR_REMAP 225
217 return dmar_dev_scope_init();
218#else
219 return -ENODEV;
220#endif
221}
222#endif /* !CONFIG_DMAR */
223#endif /* __DMAR_H__ */ 226#endif /* __DMAR_H__ */
diff --git a/include/linux/dn.h b/include/linux/dn.h
index fe9990823193..9c50445462d9 100644
--- a/include/linux/dn.h
+++ b/include/linux/dn.h
@@ -71,14 +71,12 @@
71/* Structures */ 71/* Structures */
72 72
73 73
74struct dn_naddr 74struct dn_naddr {
75{
76 __le16 a_len; 75 __le16 a_len;
77 __u8 a_addr[DN_MAXADDL]; /* Two bytes little endian */ 76 __u8 a_addr[DN_MAXADDL]; /* Two bytes little endian */
78}; 77};
79 78
80struct sockaddr_dn 79struct sockaddr_dn {
81{
82 __u16 sdn_family; 80 __u16 sdn_family;
83 __u8 sdn_flags; 81 __u8 sdn_flags;
84 __u8 sdn_objnum; 82 __u8 sdn_objnum;
@@ -101,8 +99,7 @@ struct optdata_dn {
101 __u8 opt_data[16]; /* User data */ 99 __u8 opt_data[16]; /* User data */
102}; 100};
103 101
104struct accessdata_dn 102struct accessdata_dn {
105{
106 __u8 acc_accl; 103 __u8 acc_accl;
107 __u8 acc_acc[DN_MAXACCL]; 104 __u8 acc_acc[DN_MAXACCL];
108 __u8 acc_passl; 105 __u8 acc_passl;
diff --git a/include/linux/drbd.h b/include/linux/drbd.h
new file mode 100644
index 000000000000..4341b1a97a34
--- /dev/null
+++ b/include/linux/drbd.h
@@ -0,0 +1,343 @@
1/*
2 drbd.h
3 Kernel module for 2.6.x Kernels
4
5 This file is part of DRBD by Philipp Reisner and Lars Ellenberg.
6
7 Copyright (C) 2001-2008, LINBIT Information Technologies GmbH.
8 Copyright (C) 2001-2008, Philipp Reisner <philipp.reisner@linbit.com>.
9 Copyright (C) 2001-2008, Lars Ellenberg <lars.ellenberg@linbit.com>.
10
11 drbd is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2, or (at your option)
14 any later version.
15
16 drbd is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with drbd; see the file COPYING. If not, write to
23 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24
25*/
26#ifndef DRBD_H
27#define DRBD_H
28#include <linux/connector.h>
29#include <asm/types.h>
30
31#ifdef __KERNEL__
32#include <linux/types.h>
33#include <asm/byteorder.h>
34#else
35#include <sys/types.h>
36#include <sys/wait.h>
37#include <limits.h>
38
39/* Altough the Linux source code makes a difference between
40 generic endianness and the bitfields' endianness, there is no
41 architecture as of Linux-2.6.24-rc4 where the bitfileds' endianness
42 does not match the generic endianness. */
43
44#if __BYTE_ORDER == __LITTLE_ENDIAN
45#define __LITTLE_ENDIAN_BITFIELD
46#elif __BYTE_ORDER == __BIG_ENDIAN
47#define __BIG_ENDIAN_BITFIELD
48#else
49# error "sorry, weird endianness on this box"
50#endif
51
52#endif
53
54
55extern const char *drbd_buildtag(void);
56#define REL_VERSION "8.3.7"
57#define API_VERSION 88
58#define PRO_VERSION_MIN 86
59#define PRO_VERSION_MAX 92
60
61
62enum drbd_io_error_p {
63 EP_PASS_ON, /* FIXME should the better be named "Ignore"? */
64 EP_CALL_HELPER,
65 EP_DETACH
66};
67
68enum drbd_fencing_p {
69 FP_DONT_CARE,
70 FP_RESOURCE,
71 FP_STONITH
72};
73
74enum drbd_disconnect_p {
75 DP_RECONNECT,
76 DP_DROP_NET_CONF,
77 DP_FREEZE_IO
78};
79
80enum drbd_after_sb_p {
81 ASB_DISCONNECT,
82 ASB_DISCARD_YOUNGER_PRI,
83 ASB_DISCARD_OLDER_PRI,
84 ASB_DISCARD_ZERO_CHG,
85 ASB_DISCARD_LEAST_CHG,
86 ASB_DISCARD_LOCAL,
87 ASB_DISCARD_REMOTE,
88 ASB_CONSENSUS,
89 ASB_DISCARD_SECONDARY,
90 ASB_CALL_HELPER,
91 ASB_VIOLENTLY
92};
93
94/* KEEP the order, do not delete or insert. Only append. */
95enum drbd_ret_codes {
96 ERR_CODE_BASE = 100,
97 NO_ERROR = 101,
98 ERR_LOCAL_ADDR = 102,
99 ERR_PEER_ADDR = 103,
100 ERR_OPEN_DISK = 104,
101 ERR_OPEN_MD_DISK = 105,
102 ERR_DISK_NOT_BDEV = 107,
103 ERR_MD_NOT_BDEV = 108,
104 ERR_DISK_TO_SMALL = 111,
105 ERR_MD_DISK_TO_SMALL = 112,
106 ERR_BDCLAIM_DISK = 114,
107 ERR_BDCLAIM_MD_DISK = 115,
108 ERR_MD_IDX_INVALID = 116,
109 ERR_IO_MD_DISK = 118,
110 ERR_MD_INVALID = 119,
111 ERR_AUTH_ALG = 120,
112 ERR_AUTH_ALG_ND = 121,
113 ERR_NOMEM = 122,
114 ERR_DISCARD = 123,
115 ERR_DISK_CONFIGURED = 124,
116 ERR_NET_CONFIGURED = 125,
117 ERR_MANDATORY_TAG = 126,
118 ERR_MINOR_INVALID = 127,
119 ERR_INTR = 129, /* EINTR */
120 ERR_RESIZE_RESYNC = 130,
121 ERR_NO_PRIMARY = 131,
122 ERR_SYNC_AFTER = 132,
123 ERR_SYNC_AFTER_CYCLE = 133,
124 ERR_PAUSE_IS_SET = 134,
125 ERR_PAUSE_IS_CLEAR = 135,
126 ERR_PACKET_NR = 137,
127 ERR_NO_DISK = 138,
128 ERR_NOT_PROTO_C = 139,
129 ERR_NOMEM_BITMAP = 140,
130 ERR_INTEGRITY_ALG = 141, /* DRBD 8.2 only */
131 ERR_INTEGRITY_ALG_ND = 142, /* DRBD 8.2 only */
132 ERR_CPU_MASK_PARSE = 143, /* DRBD 8.2 only */
133 ERR_CSUMS_ALG = 144, /* DRBD 8.2 only */
134 ERR_CSUMS_ALG_ND = 145, /* DRBD 8.2 only */
135 ERR_VERIFY_ALG = 146, /* DRBD 8.2 only */
136 ERR_VERIFY_ALG_ND = 147, /* DRBD 8.2 only */
137 ERR_CSUMS_RESYNC_RUNNING= 148, /* DRBD 8.2 only */
138 ERR_VERIFY_RUNNING = 149, /* DRBD 8.2 only */
139 ERR_DATA_NOT_CURRENT = 150,
140 ERR_CONNECTED = 151, /* DRBD 8.3 only */
141 ERR_PERM = 152,
142
143 /* insert new ones above this line */
144 AFTER_LAST_ERR_CODE
145};
146
147#define DRBD_PROT_A 1
148#define DRBD_PROT_B 2
149#define DRBD_PROT_C 3
150
151enum drbd_role {
152 R_UNKNOWN = 0,
153 R_PRIMARY = 1, /* role */
154 R_SECONDARY = 2, /* role */
155 R_MASK = 3,
156};
157
158/* The order of these constants is important.
159 * The lower ones (<C_WF_REPORT_PARAMS) indicate
160 * that there is no socket!
161 * >=C_WF_REPORT_PARAMS ==> There is a socket
162 */
163enum drbd_conns {
164 C_STANDALONE,
165 C_DISCONNECTING, /* Temporal state on the way to StandAlone. */
166 C_UNCONNECTED, /* >= C_UNCONNECTED -> inc_net() succeeds */
167
168 /* These temporal states are all used on the way
169 * from >= C_CONNECTED to Unconnected.
170 * The 'disconnect reason' states
171 * I do not allow to change beween them. */
172 C_TIMEOUT,
173 C_BROKEN_PIPE,
174 C_NETWORK_FAILURE,
175 C_PROTOCOL_ERROR,
176 C_TEAR_DOWN,
177
178 C_WF_CONNECTION,
179 C_WF_REPORT_PARAMS, /* we have a socket */
180 C_CONNECTED, /* we have introduced each other */
181 C_STARTING_SYNC_S, /* starting full sync by admin request. */
182 C_STARTING_SYNC_T, /* stariing full sync by admin request. */
183 C_WF_BITMAP_S,
184 C_WF_BITMAP_T,
185 C_WF_SYNC_UUID,
186
187 /* All SyncStates are tested with this comparison
188 * xx >= C_SYNC_SOURCE && xx <= C_PAUSED_SYNC_T */
189 C_SYNC_SOURCE,
190 C_SYNC_TARGET,
191 C_VERIFY_S,
192 C_VERIFY_T,
193 C_PAUSED_SYNC_S,
194 C_PAUSED_SYNC_T,
195 C_MASK = 31
196};
197
198enum drbd_disk_state {
199 D_DISKLESS,
200 D_ATTACHING, /* In the process of reading the meta-data */
201 D_FAILED, /* Becomes D_DISKLESS as soon as we told it the peer */
202 /* when >= D_FAILED it is legal to access mdev->bc */
203 D_NEGOTIATING, /* Late attaching state, we need to talk to the peer */
204 D_INCONSISTENT,
205 D_OUTDATED,
206 D_UNKNOWN, /* Only used for the peer, never for myself */
207 D_CONSISTENT, /* Might be D_OUTDATED, might be D_UP_TO_DATE ... */
208 D_UP_TO_DATE, /* Only this disk state allows applications' IO ! */
209 D_MASK = 15
210};
211
212union drbd_state {
213/* According to gcc's docs is the ...
214 * The order of allocation of bit-fields within a unit (C90 6.5.2.1, C99 6.7.2.1).
215 * Determined by ABI.
216 * pointed out by Maxim Uvarov q<muvarov@ru.mvista.com>
217 * even though we transmit as "cpu_to_be32(state)",
218 * the offsets of the bitfields still need to be swapped
219 * on different endianess.
220 */
221 struct {
222#if defined(__LITTLE_ENDIAN_BITFIELD)
223 unsigned role:2 ; /* 3/4 primary/secondary/unknown */
224 unsigned peer:2 ; /* 3/4 primary/secondary/unknown */
225 unsigned conn:5 ; /* 17/32 cstates */
226 unsigned disk:4 ; /* 8/16 from D_DISKLESS to D_UP_TO_DATE */
227 unsigned pdsk:4 ; /* 8/16 from D_DISKLESS to D_UP_TO_DATE */
228 unsigned susp:1 ; /* 2/2 IO suspended no/yes */
229 unsigned aftr_isp:1 ; /* isp .. imposed sync pause */
230 unsigned peer_isp:1 ;
231 unsigned user_isp:1 ;
232 unsigned _pad:11; /* 0 unused */
233#elif defined(__BIG_ENDIAN_BITFIELD)
234 unsigned _pad:11; /* 0 unused */
235 unsigned user_isp:1 ;
236 unsigned peer_isp:1 ;
237 unsigned aftr_isp:1 ; /* isp .. imposed sync pause */
238 unsigned susp:1 ; /* 2/2 IO suspended no/yes */
239 unsigned pdsk:4 ; /* 8/16 from D_DISKLESS to D_UP_TO_DATE */
240 unsigned disk:4 ; /* 8/16 from D_DISKLESS to D_UP_TO_DATE */
241 unsigned conn:5 ; /* 17/32 cstates */
242 unsigned peer:2 ; /* 3/4 primary/secondary/unknown */
243 unsigned role:2 ; /* 3/4 primary/secondary/unknown */
244#else
245# error "this endianess is not supported"
246#endif
247 };
248 unsigned int i;
249};
250
251enum drbd_state_ret_codes {
252 SS_CW_NO_NEED = 4,
253 SS_CW_SUCCESS = 3,
254 SS_NOTHING_TO_DO = 2,
255 SS_SUCCESS = 1,
256 SS_UNKNOWN_ERROR = 0, /* Used to sleep longer in _drbd_request_state */
257 SS_TWO_PRIMARIES = -1,
258 SS_NO_UP_TO_DATE_DISK = -2,
259 SS_NO_LOCAL_DISK = -4,
260 SS_NO_REMOTE_DISK = -5,
261 SS_CONNECTED_OUTDATES = -6,
262 SS_PRIMARY_NOP = -7,
263 SS_RESYNC_RUNNING = -8,
264 SS_ALREADY_STANDALONE = -9,
265 SS_CW_FAILED_BY_PEER = -10,
266 SS_IS_DISKLESS = -11,
267 SS_DEVICE_IN_USE = -12,
268 SS_NO_NET_CONFIG = -13,
269 SS_NO_VERIFY_ALG = -14, /* drbd-8.2 only */
270 SS_NEED_CONNECTION = -15, /* drbd-8.2 only */
271 SS_LOWER_THAN_OUTDATED = -16,
272 SS_NOT_SUPPORTED = -17, /* drbd-8.2 only */
273 SS_IN_TRANSIENT_STATE = -18, /* Retry after the next state change */
274 SS_CONCURRENT_ST_CHG = -19, /* Concurrent cluster side state change! */
275 SS_AFTER_LAST_ERROR = -20, /* Keep this at bottom */
276};
277
278/* from drbd_strings.c */
279extern const char *drbd_conn_str(enum drbd_conns);
280extern const char *drbd_role_str(enum drbd_role);
281extern const char *drbd_disk_str(enum drbd_disk_state);
282extern const char *drbd_set_st_err_str(enum drbd_state_ret_codes);
283
284#define SHARED_SECRET_MAX 64
285
286#define MDF_CONSISTENT (1 << 0)
287#define MDF_PRIMARY_IND (1 << 1)
288#define MDF_CONNECTED_IND (1 << 2)
289#define MDF_FULL_SYNC (1 << 3)
290#define MDF_WAS_UP_TO_DATE (1 << 4)
291#define MDF_PEER_OUT_DATED (1 << 5)
292#define MDF_CRASHED_PRIMARY (1 << 6)
293
294enum drbd_uuid_index {
295 UI_CURRENT,
296 UI_BITMAP,
297 UI_HISTORY_START,
298 UI_HISTORY_END,
299 UI_SIZE, /* nl-packet: number of dirty bits */
300 UI_FLAGS, /* nl-packet: flags */
301 UI_EXTENDED_SIZE /* Everything. */
302};
303
304enum drbd_timeout_flag {
305 UT_DEFAULT = 0,
306 UT_DEGRADED = 1,
307 UT_PEER_OUTDATED = 2,
308};
309
310#define UUID_JUST_CREATED ((__u64)4)
311
312#define DRBD_MAGIC 0x83740267
313#define BE_DRBD_MAGIC __constant_cpu_to_be32(DRBD_MAGIC)
314
315/* these are of type "int" */
316#define DRBD_MD_INDEX_INTERNAL -1
317#define DRBD_MD_INDEX_FLEX_EXT -2
318#define DRBD_MD_INDEX_FLEX_INT -3
319
320/* Start of the new netlink/connector stuff */
321
322#define DRBD_NL_CREATE_DEVICE 0x01
323#define DRBD_NL_SET_DEFAULTS 0x02
324
325
326/* For searching a vacant cn_idx value */
327#define CN_IDX_STEP 6977
328
329struct drbd_nl_cfg_req {
330 int packet_type;
331 unsigned int drbd_minor;
332 int flags;
333 unsigned short tag_list[];
334};
335
336struct drbd_nl_cfg_reply {
337 int packet_type;
338 unsigned int minor;
339 int ret_code; /* enum ret_code or set_st_err_t */
340 unsigned short tag_list[]; /* only used with get_* calls */
341};
342
343#endif
diff --git a/include/linux/drbd_limits.h b/include/linux/drbd_limits.h
new file mode 100644
index 000000000000..51f47a586ad8
--- /dev/null
+++ b/include/linux/drbd_limits.h
@@ -0,0 +1,137 @@
1/*
2 drbd_limits.h
3 This file is part of DRBD by Philipp Reisner and Lars Ellenberg.
4*/
5
6/*
7 * Our current limitations.
8 * Some of them are hard limits,
9 * some of them are arbitrary range limits, that make it easier to provide
10 * feedback about nonsense settings for certain configurable values.
11 */
12
13#ifndef DRBD_LIMITS_H
14#define DRBD_LIMITS_H 1
15
16#define DEBUG_RANGE_CHECK 0
17
18#define DRBD_MINOR_COUNT_MIN 1
19#define DRBD_MINOR_COUNT_MAX 255
20
21#define DRBD_DIALOG_REFRESH_MIN 0
22#define DRBD_DIALOG_REFRESH_MAX 600
23
24/* valid port number */
25#define DRBD_PORT_MIN 1
26#define DRBD_PORT_MAX 0xffff
27
28/* startup { */
29 /* if you want more than 3.4 days, disable */
30#define DRBD_WFC_TIMEOUT_MIN 0
31#define DRBD_WFC_TIMEOUT_MAX 300000
32#define DRBD_WFC_TIMEOUT_DEF 0
33
34#define DRBD_DEGR_WFC_TIMEOUT_MIN 0
35#define DRBD_DEGR_WFC_TIMEOUT_MAX 300000
36#define DRBD_DEGR_WFC_TIMEOUT_DEF 0
37
38#define DRBD_OUTDATED_WFC_TIMEOUT_MIN 0
39#define DRBD_OUTDATED_WFC_TIMEOUT_MAX 300000
40#define DRBD_OUTDATED_WFC_TIMEOUT_DEF 0
41/* }*/
42
43/* net { */
44 /* timeout, unit centi seconds
45 * more than one minute timeout is not usefull */
46#define DRBD_TIMEOUT_MIN 1
47#define DRBD_TIMEOUT_MAX 600
48#define DRBD_TIMEOUT_DEF 60 /* 6 seconds */
49
50 /* active connection retries when C_WF_CONNECTION */
51#define DRBD_CONNECT_INT_MIN 1
52#define DRBD_CONNECT_INT_MAX 120
53#define DRBD_CONNECT_INT_DEF 10 /* seconds */
54
55 /* keep-alive probes when idle */
56#define DRBD_PING_INT_MIN 1
57#define DRBD_PING_INT_MAX 120
58#define DRBD_PING_INT_DEF 10
59
60 /* timeout for the ping packets.*/
61#define DRBD_PING_TIMEO_MIN 1
62#define DRBD_PING_TIMEO_MAX 100
63#define DRBD_PING_TIMEO_DEF 5
64
65 /* max number of write requests between write barriers */
66#define DRBD_MAX_EPOCH_SIZE_MIN 1
67#define DRBD_MAX_EPOCH_SIZE_MAX 20000
68#define DRBD_MAX_EPOCH_SIZE_DEF 2048
69
70 /* I don't think that a tcp send buffer of more than 10M is usefull */
71#define DRBD_SNDBUF_SIZE_MIN 0
72#define DRBD_SNDBUF_SIZE_MAX (10<<20)
73#define DRBD_SNDBUF_SIZE_DEF 0
74
75#define DRBD_RCVBUF_SIZE_MIN 0
76#define DRBD_RCVBUF_SIZE_MAX (10<<20)
77#define DRBD_RCVBUF_SIZE_DEF 0
78
79 /* @4k PageSize -> 128kB - 512MB */
80#define DRBD_MAX_BUFFERS_MIN 32
81#define DRBD_MAX_BUFFERS_MAX 131072
82#define DRBD_MAX_BUFFERS_DEF 2048
83
84 /* @4k PageSize -> 4kB - 512MB */
85#define DRBD_UNPLUG_WATERMARK_MIN 1
86#define DRBD_UNPLUG_WATERMARK_MAX 131072
87#define DRBD_UNPLUG_WATERMARK_DEF (DRBD_MAX_BUFFERS_DEF/16)
88
89 /* 0 is disabled.
90 * 200 should be more than enough even for very short timeouts */
91#define DRBD_KO_COUNT_MIN 0
92#define DRBD_KO_COUNT_MAX 200
93#define DRBD_KO_COUNT_DEF 0
94/* } */
95
96/* syncer { */
97 /* FIXME allow rate to be zero? */
98#define DRBD_RATE_MIN 1
99/* channel bonding 10 GbE, or other hardware */
100#define DRBD_RATE_MAX (4 << 20)
101#define DRBD_RATE_DEF 250 /* kb/second */
102
103 /* less than 7 would hit performance unneccessarily.
104 * 3833 is the largest prime that still does fit
105 * into 64 sectors of activity log */
106#define DRBD_AL_EXTENTS_MIN 7
107#define DRBD_AL_EXTENTS_MAX 3833
108#define DRBD_AL_EXTENTS_DEF 127
109
110#define DRBD_AFTER_MIN -1
111#define DRBD_AFTER_MAX 255
112#define DRBD_AFTER_DEF -1
113
114/* } */
115
116/* drbdsetup XY resize -d Z
117 * you are free to reduce the device size to nothing, if you want to.
118 * the upper limit with 64bit kernel, enough ram and flexible meta data
119 * is 16 TB, currently. */
120/* DRBD_MAX_SECTORS */
121#define DRBD_DISK_SIZE_SECT_MIN 0
122#define DRBD_DISK_SIZE_SECT_MAX (16 * (2LLU << 30))
123#define DRBD_DISK_SIZE_SECT_DEF 0 /* = disabled = no user size... */
124
125#define DRBD_ON_IO_ERROR_DEF EP_PASS_ON
126#define DRBD_FENCING_DEF FP_DONT_CARE
127#define DRBD_AFTER_SB_0P_DEF ASB_DISCONNECT
128#define DRBD_AFTER_SB_1P_DEF ASB_DISCONNECT
129#define DRBD_AFTER_SB_2P_DEF ASB_DISCONNECT
130#define DRBD_RR_CONFLICT_DEF ASB_DISCONNECT
131
132#define DRBD_MAX_BIO_BVECS_MIN 0
133#define DRBD_MAX_BIO_BVECS_MAX 128
134#define DRBD_MAX_BIO_BVECS_DEF 0
135
136#undef RANGE
137#endif
diff --git a/include/linux/drbd_nl.h b/include/linux/drbd_nl.h
new file mode 100644
index 000000000000..f7431a4ca608
--- /dev/null
+++ b/include/linux/drbd_nl.h
@@ -0,0 +1,139 @@
1/*
2 PAKET( name,
3 TYPE ( pn, pr, member )
4 ...
5 )
6
7 You may never reissue one of the pn arguments
8*/
9
10#if !defined(NL_PACKET) || !defined(NL_STRING) || !defined(NL_INTEGER) || !defined(NL_BIT) || !defined(NL_INT64)
11#error "The macros NL_PACKET, NL_STRING, NL_INTEGER, NL_INT64 and NL_BIT needs to be defined"
12#endif
13
14NL_PACKET(primary, 1,
15 NL_BIT( 1, T_MAY_IGNORE, primary_force)
16)
17
18NL_PACKET(secondary, 2, )
19
20NL_PACKET(disk_conf, 3,
21 NL_INT64( 2, T_MAY_IGNORE, disk_size)
22 NL_STRING( 3, T_MANDATORY, backing_dev, 128)
23 NL_STRING( 4, T_MANDATORY, meta_dev, 128)
24 NL_INTEGER( 5, T_MANDATORY, meta_dev_idx)
25 NL_INTEGER( 6, T_MAY_IGNORE, on_io_error)
26 NL_INTEGER( 7, T_MAY_IGNORE, fencing)
27 NL_BIT( 37, T_MAY_IGNORE, use_bmbv)
28 NL_BIT( 53, T_MAY_IGNORE, no_disk_flush)
29 NL_BIT( 54, T_MAY_IGNORE, no_md_flush)
30 /* 55 max_bio_size was available in 8.2.6rc2 */
31 NL_INTEGER( 56, T_MAY_IGNORE, max_bio_bvecs)
32 NL_BIT( 57, T_MAY_IGNORE, no_disk_barrier)
33 NL_BIT( 58, T_MAY_IGNORE, no_disk_drain)
34)
35
36NL_PACKET(detach, 4, )
37
38NL_PACKET(net_conf, 5,
39 NL_STRING( 8, T_MANDATORY, my_addr, 128)
40 NL_STRING( 9, T_MANDATORY, peer_addr, 128)
41 NL_STRING( 10, T_MAY_IGNORE, shared_secret, SHARED_SECRET_MAX)
42 NL_STRING( 11, T_MAY_IGNORE, cram_hmac_alg, SHARED_SECRET_MAX)
43 NL_STRING( 44, T_MAY_IGNORE, integrity_alg, SHARED_SECRET_MAX)
44 NL_INTEGER( 14, T_MAY_IGNORE, timeout)
45 NL_INTEGER( 15, T_MANDATORY, wire_protocol)
46 NL_INTEGER( 16, T_MAY_IGNORE, try_connect_int)
47 NL_INTEGER( 17, T_MAY_IGNORE, ping_int)
48 NL_INTEGER( 18, T_MAY_IGNORE, max_epoch_size)
49 NL_INTEGER( 19, T_MAY_IGNORE, max_buffers)
50 NL_INTEGER( 20, T_MAY_IGNORE, unplug_watermark)
51 NL_INTEGER( 21, T_MAY_IGNORE, sndbuf_size)
52 NL_INTEGER( 22, T_MAY_IGNORE, ko_count)
53 NL_INTEGER( 24, T_MAY_IGNORE, after_sb_0p)
54 NL_INTEGER( 25, T_MAY_IGNORE, after_sb_1p)
55 NL_INTEGER( 26, T_MAY_IGNORE, after_sb_2p)
56 NL_INTEGER( 39, T_MAY_IGNORE, rr_conflict)
57 NL_INTEGER( 40, T_MAY_IGNORE, ping_timeo)
58 NL_INTEGER( 67, T_MAY_IGNORE, rcvbuf_size)
59 /* 59 addr_family was available in GIT, never released */
60 NL_BIT( 60, T_MANDATORY, mind_af)
61 NL_BIT( 27, T_MAY_IGNORE, want_lose)
62 NL_BIT( 28, T_MAY_IGNORE, two_primaries)
63 NL_BIT( 41, T_MAY_IGNORE, always_asbp)
64 NL_BIT( 61, T_MAY_IGNORE, no_cork)
65 NL_BIT( 62, T_MANDATORY, auto_sndbuf_size)
66 NL_BIT( 70, T_MANDATORY, dry_run)
67)
68
69NL_PACKET(disconnect, 6, )
70
71NL_PACKET(resize, 7,
72 NL_INT64( 29, T_MAY_IGNORE, resize_size)
73 NL_BIT( 68, T_MAY_IGNORE, resize_force)
74)
75
76NL_PACKET(syncer_conf, 8,
77 NL_INTEGER( 30, T_MAY_IGNORE, rate)
78 NL_INTEGER( 31, T_MAY_IGNORE, after)
79 NL_INTEGER( 32, T_MAY_IGNORE, al_extents)
80 NL_STRING( 52, T_MAY_IGNORE, verify_alg, SHARED_SECRET_MAX)
81 NL_STRING( 51, T_MAY_IGNORE, cpu_mask, 32)
82 NL_STRING( 64, T_MAY_IGNORE, csums_alg, SHARED_SECRET_MAX)
83 NL_BIT( 65, T_MAY_IGNORE, use_rle)
84)
85
86NL_PACKET(invalidate, 9, )
87NL_PACKET(invalidate_peer, 10, )
88NL_PACKET(pause_sync, 11, )
89NL_PACKET(resume_sync, 12, )
90NL_PACKET(suspend_io, 13, )
91NL_PACKET(resume_io, 14, )
92NL_PACKET(outdate, 15, )
93NL_PACKET(get_config, 16, )
94NL_PACKET(get_state, 17,
95 NL_INTEGER( 33, T_MAY_IGNORE, state_i)
96)
97
98NL_PACKET(get_uuids, 18,
99 NL_STRING( 34, T_MAY_IGNORE, uuids, (UI_SIZE*sizeof(__u64)))
100 NL_INTEGER( 35, T_MAY_IGNORE, uuids_flags)
101)
102
103NL_PACKET(get_timeout_flag, 19,
104 NL_BIT( 36, T_MAY_IGNORE, use_degraded)
105)
106
107NL_PACKET(call_helper, 20,
108 NL_STRING( 38, T_MAY_IGNORE, helper, 32)
109)
110
111/* Tag nr 42 already allocated in drbd-8.1 development. */
112
113NL_PACKET(sync_progress, 23,
114 NL_INTEGER( 43, T_MAY_IGNORE, sync_progress)
115)
116
117NL_PACKET(dump_ee, 24,
118 NL_STRING( 45, T_MAY_IGNORE, dump_ee_reason, 32)
119 NL_STRING( 46, T_MAY_IGNORE, seen_digest, SHARED_SECRET_MAX)
120 NL_STRING( 47, T_MAY_IGNORE, calc_digest, SHARED_SECRET_MAX)
121 NL_INT64( 48, T_MAY_IGNORE, ee_sector)
122 NL_INT64( 49, T_MAY_IGNORE, ee_block_id)
123 NL_STRING( 50, T_MAY_IGNORE, ee_data, 32 << 10)
124)
125
126NL_PACKET(start_ov, 25,
127 NL_INT64( 66, T_MAY_IGNORE, start_sector)
128)
129
130NL_PACKET(new_c_uuid, 26,
131 NL_BIT( 63, T_MANDATORY, clear_bm)
132)
133
134#undef NL_PACKET
135#undef NL_INTEGER
136#undef NL_INT64
137#undef NL_BIT
138#undef NL_STRING
139
diff --git a/include/linux/drbd_tag_magic.h b/include/linux/drbd_tag_magic.h
new file mode 100644
index 000000000000..fcdff8410e99
--- /dev/null
+++ b/include/linux/drbd_tag_magic.h
@@ -0,0 +1,83 @@
1#ifndef DRBD_TAG_MAGIC_H
2#define DRBD_TAG_MAGIC_H
3
4#define TT_END 0
5#define TT_REMOVED 0xE000
6
7/* declare packet_type enums */
8enum packet_types {
9#define NL_PACKET(name, number, fields) P_ ## name = number,
10#define NL_INTEGER(pn, pr, member)
11#define NL_INT64(pn, pr, member)
12#define NL_BIT(pn, pr, member)
13#define NL_STRING(pn, pr, member, len)
14#include "drbd_nl.h"
15 P_nl_after_last_packet,
16};
17
18/* These struct are used to deduce the size of the tag lists: */
19#define NL_PACKET(name, number, fields) \
20 struct name ## _tag_len_struct { fields };
21#define NL_INTEGER(pn, pr, member) \
22 int member; int tag_and_len ## member;
23#define NL_INT64(pn, pr, member) \
24 __u64 member; int tag_and_len ## member;
25#define NL_BIT(pn, pr, member) \
26 unsigned char member:1; int tag_and_len ## member;
27#define NL_STRING(pn, pr, member, len) \
28 unsigned char member[len]; int member ## _len; \
29 int tag_and_len ## member;
30#include "linux/drbd_nl.h"
31
32/* declate tag-list-sizes */
33static const int tag_list_sizes[] = {
34#define NL_PACKET(name, number, fields) 2 fields ,
35#define NL_INTEGER(pn, pr, member) + 4 + 4
36#define NL_INT64(pn, pr, member) + 4 + 8
37#define NL_BIT(pn, pr, member) + 4 + 1
38#define NL_STRING(pn, pr, member, len) + 4 + (len)
39#include "drbd_nl.h"
40};
41
42/* The two highest bits are used for the tag type */
43#define TT_MASK 0xC000
44#define TT_INTEGER 0x0000
45#define TT_INT64 0x4000
46#define TT_BIT 0x8000
47#define TT_STRING 0xC000
48/* The next bit indicates if processing of the tag is mandatory */
49#define T_MANDATORY 0x2000
50#define T_MAY_IGNORE 0x0000
51#define TN_MASK 0x1fff
52/* The remaining 13 bits are used to enumerate the tags */
53
54#define tag_type(T) ((T) & TT_MASK)
55#define tag_number(T) ((T) & TN_MASK)
56
57/* declare tag enums */
58#define NL_PACKET(name, number, fields) fields
59enum drbd_tags {
60#define NL_INTEGER(pn, pr, member) T_ ## member = pn | TT_INTEGER | pr ,
61#define NL_INT64(pn, pr, member) T_ ## member = pn | TT_INT64 | pr ,
62#define NL_BIT(pn, pr, member) T_ ## member = pn | TT_BIT | pr ,
63#define NL_STRING(pn, pr, member, len) T_ ## member = pn | TT_STRING | pr ,
64#include "drbd_nl.h"
65};
66
67struct tag {
68 const char *name;
69 int type_n_flags;
70 int max_len;
71};
72
73/* declare tag names */
74#define NL_PACKET(name, number, fields) fields
75static const struct tag tag_descriptions[] = {
76#define NL_INTEGER(pn, pr, member) [ pn ] = { #member, TT_INTEGER | pr, sizeof(int) },
77#define NL_INT64(pn, pr, member) [ pn ] = { #member, TT_INT64 | pr, sizeof(__u64) },
78#define NL_BIT(pn, pr, member) [ pn ] = { #member, TT_BIT | pr, sizeof(int) },
79#define NL_STRING(pn, pr, member, len) [ pn ] = { #member, TT_STRING | pr, (len) },
80#include "drbd_nl.h"
81};
82
83#endif
diff --git a/include/linux/dst.h b/include/linux/dst.h
deleted file mode 100644
index e26fed84b1aa..000000000000
--- a/include/linux/dst.h
+++ /dev/null
@@ -1,587 +0,0 @@
1/*
2 * 2007+ Copyright (c) Evgeniy Polyakov <johnpol@2ka.mipt.ru>
3 * All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
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
16#ifndef __DST_H
17#define __DST_H
18
19#include <linux/types.h>
20#include <linux/connector.h>
21
22#define DST_NAMELEN 32
23#define DST_NAME "dst"
24
25enum {
26 /* Remove node with given id from storage */
27 DST_DEL_NODE = 0,
28 /* Add remote node with given id to the storage */
29 DST_ADD_REMOTE,
30 /* Add local node with given id to the storage to be exported and used by remote peers */
31 DST_ADD_EXPORT,
32 /* Crypto initialization command (hash/cipher used to protect the connection) */
33 DST_CRYPTO,
34 /* Security attributes for given connection (permissions for example) */
35 DST_SECURITY,
36 /* Register given node in the block layer subsystem */
37 DST_START,
38 DST_CMD_MAX
39};
40
41struct dst_ctl
42{
43 /* Storage name */
44 char name[DST_NAMELEN];
45 /* Command flags */
46 __u32 flags;
47 /* Command itself (see above) */
48 __u32 cmd;
49 /* Maximum number of pages per single request in this device */
50 __u32 max_pages;
51 /* Stale/error transaction scanning timeout in milliseconds */
52 __u32 trans_scan_timeout;
53 /* Maximum number of retry sends before completing transaction as broken */
54 __u32 trans_max_retries;
55 /* Storage size */
56 __u64 size;
57};
58
59/* Reply command carries completion status */
60struct dst_ctl_ack
61{
62 struct cn_msg msg;
63 int error;
64 int unused[3];
65};
66
67/*
68 * Unfortunaltely socket address structure is not exported to userspace
69 * and is redefined there.
70 */
71#define SADDR_MAX_DATA 128
72
73struct saddr {
74 /* address family, AF_xxx */
75 unsigned short sa_family;
76 /* 14 bytes of protocol address */
77 char sa_data[SADDR_MAX_DATA];
78 /* Number of bytes used in sa_data */
79 unsigned short sa_data_len;
80};
81
82/* Address structure */
83struct dst_network_ctl
84{
85 /* Socket type: datagram, stream...*/
86 unsigned int type;
87 /* Let me guess, is it a Jupiter diameter? */
88 unsigned int proto;
89 /* Peer's address */
90 struct saddr addr;
91};
92
93struct dst_crypto_ctl
94{
95 /* Cipher and hash names */
96 char cipher_algo[DST_NAMELEN];
97 char hash_algo[DST_NAMELEN];
98
99 /* Key sizes. Can be zero for digest for example */
100 unsigned int cipher_keysize, hash_keysize;
101 /* Alignment. Calculated by the DST itself. */
102 unsigned int crypto_attached_size;
103 /* Number of threads to perform crypto operations */
104 int thread_num;
105};
106
107/* Export security attributes have this bits checked in when client connects */
108#define DST_PERM_READ (1<<0)
109#define DST_PERM_WRITE (1<<1)
110
111/*
112 * Right now it is simple model, where each remote address
113 * is assigned to set of permissions it is allowed to perform.
114 * In real world block device does not know anything but
115 * reading and writing, so it should be more than enough.
116 */
117struct dst_secure_user
118{
119 unsigned int permissions;
120 struct saddr addr;
121};
122
123/*
124 * Export control command: device to export and network address to accept
125 * clients to work with given device
126 */
127struct dst_export_ctl
128{
129 char device[DST_NAMELEN];
130 struct dst_network_ctl ctl;
131};
132
133enum {
134 DST_CFG = 1, /* Request remote configuration */
135 DST_IO, /* IO command */
136 DST_IO_RESPONSE, /* IO response */
137 DST_PING, /* Keepalive message */
138 DST_NCMD_MAX,
139};
140
141struct dst_cmd
142{
143 /* Network command itself, see above */
144 __u32 cmd;
145 /*
146 * Size of the attached data
147 * (in most cases, for READ command it means how many bytes were requested)
148 */
149 __u32 size;
150 /* Crypto size: number of attached bytes with digest/hmac */
151 __u32 csize;
152 /* Here we can carry secret data */
153 __u32 reserved;
154 /* Read/write bits, see how they are encoded in bio structure */
155 __u64 rw;
156 /* BIO flags */
157 __u64 flags;
158 /* Unique command id (like transaction ID) */
159 __u64 id;
160 /* Sector to start IO from */
161 __u64 sector;
162 /* Hash data is placed after this header */
163 __u8 hash[0];
164};
165
166/*
167 * Convert command to/from network byte order.
168 * We do not use hton*() functions, since there is
169 * no 64-bit implementation.
170 */
171static inline void dst_convert_cmd(struct dst_cmd *c)
172{
173 c->cmd = __cpu_to_be32(c->cmd);
174 c->csize = __cpu_to_be32(c->csize);
175 c->size = __cpu_to_be32(c->size);
176 c->sector = __cpu_to_be64(c->sector);
177 c->id = __cpu_to_be64(c->id);
178 c->flags = __cpu_to_be64(c->flags);
179 c->rw = __cpu_to_be64(c->rw);
180}
181
182/* Transaction id */
183typedef __u64 dst_gen_t;
184
185#ifdef __KERNEL__
186
187#include <linux/blkdev.h>
188#include <linux/bio.h>
189#include <linux/device.h>
190#include <linux/mempool.h>
191#include <linux/net.h>
192#include <linux/poll.h>
193#include <linux/rbtree.h>
194
195#ifdef CONFIG_DST_DEBUG
196#define dprintk(f, a...) printk(KERN_NOTICE f, ##a)
197#else
198static inline void __attribute__ ((format (printf, 1, 2)))
199 dprintk(const char *fmt, ...) {}
200#endif
201
202struct dst_node;
203
204struct dst_trans
205{
206 /* DST node we are working with */
207 struct dst_node *n;
208
209 /* Entry inside transaction tree */
210 struct rb_node trans_entry;
211
212 /* Merlin kills this transaction when this memory cell equals zero */
213 atomic_t refcnt;
214
215 /* How this transaction should be processed by crypto engine */
216 short enc;
217 /* How many times this transaction was resent */
218 short retries;
219 /* Completion status */
220 int error;
221
222 /* When did we send it to the remote peer */
223 long send_time;
224
225 /* My name is...
226 * Well, computers does not speak, they have unique id instead */
227 dst_gen_t gen;
228
229 /* Block IO we are working with */
230 struct bio *bio;
231
232 /* Network command for above block IO request */
233 struct dst_cmd cmd;
234};
235
236struct dst_crypto_engine
237{
238 /* What should we do with all block requests */
239 struct crypto_hash *hash;
240 struct crypto_ablkcipher *cipher;
241
242 /* Pool of pages used to encrypt data into before sending */
243 int page_num;
244 struct page **pages;
245
246 /* What to do with current request */
247 int enc;
248 /* Who we are and where do we go */
249 struct scatterlist *src, *dst;
250
251 /* Maximum timeout waiting for encryption to be completed */
252 long timeout;
253 /* IV is a 64-bit sequential counter */
254 u64 iv;
255
256 /* Secret data */
257 void *private;
258
259 /* Cached temporary data lives here */
260 int size;
261 void *data;
262};
263
264struct dst_state
265{
266 /* The main state protection */
267 struct mutex state_lock;
268
269 /* Polling machinery for sockets */
270 wait_queue_t wait;
271 wait_queue_head_t *whead;
272 /* Most of events are being waited here */
273 wait_queue_head_t thread_wait;
274
275 /* Who owns this? */
276 struct dst_node *node;
277
278 /* Network address for this state */
279 struct dst_network_ctl ctl;
280
281 /* Permissions to work with: read-only or rw connection */
282 u32 permissions;
283
284 /* Called when we need to clean private data */
285 void (* cleanup)(struct dst_state *st);
286
287 /* Used by the server: BIO completion queues BIOs here */
288 struct list_head request_list;
289 spinlock_t request_lock;
290
291 /* Guess what? No, it is not number of planets */
292 atomic_t refcnt;
293
294 /* This flags is set when connection should be dropped */
295 int need_exit;
296
297 /*
298 * Socket to work with. Second pointer is used for
299 * lockless check if socket was changed before performing
300 * next action (like working with cached polling result)
301 */
302 struct socket *socket, *read_socket;
303
304 /* Cached preallocated data */
305 void *data;
306 unsigned int size;
307
308 /* Currently processed command */
309 struct dst_cmd cmd;
310};
311
312struct dst_info
313{
314 /* Device size */
315 u64 size;
316
317 /* Local device name for export devices */
318 char local[DST_NAMELEN];
319
320 /* Network setup */
321 struct dst_network_ctl net;
322
323 /* Sysfs bits use this */
324 struct device device;
325};
326
327struct dst_node
328{
329 struct list_head node_entry;
330
331 /* Hi, my name is stored here */
332 char name[DST_NAMELEN];
333 /* My cache name is stored here */
334 char cache_name[DST_NAMELEN];
335
336 /* Block device attached to given node.
337 * Only valid for exporting nodes */
338 struct block_device *bdev;
339 /* Network state machine for given peer */
340 struct dst_state *state;
341
342 /* Block IO machinery */
343 struct request_queue *queue;
344 struct gendisk *disk;
345
346 /* Number of threads in processing pool */
347 int thread_num;
348 /* Maximum number of pages in single IO */
349 int max_pages;
350
351 /* I'm that big in bytes */
352 loff_t size;
353
354 /* Exported to userspace node information */
355 struct dst_info *info;
356
357 /*
358 * Security attribute list.
359 * Used only by exporting node currently.
360 */
361 struct list_head security_list;
362 struct mutex security_lock;
363
364 /*
365 * When this unerflows below zero, university collapses.
366 * But this will not happen, since node will be freed,
367 * when reference counter reaches zero.
368 */
369 atomic_t refcnt;
370
371 /* How precisely should I be started? */
372 int (*start)(struct dst_node *);
373
374 /* Crypto capabilities */
375 struct dst_crypto_ctl crypto;
376 u8 *hash_key;
377 u8 *cipher_key;
378
379 /* Pool of processing thread */
380 struct thread_pool *pool;
381
382 /* Transaction IDs live here */
383 atomic_long_t gen;
384
385 /*
386 * How frequently and how many times transaction
387 * tree should be scanned to drop stale objects.
388 */
389 long trans_scan_timeout;
390 int trans_max_retries;
391
392 /* Small gnomes live here */
393 struct rb_root trans_root;
394 struct mutex trans_lock;
395
396 /*
397 * Transaction cache/memory pool.
398 * It is big enough to contain not only transaction
399 * itself, but additional crypto data (digest/hmac).
400 */
401 struct kmem_cache *trans_cache;
402 mempool_t *trans_pool;
403
404 /* This entity scans transaction tree */
405 struct delayed_work trans_work;
406
407 wait_queue_head_t wait;
408};
409
410/* Kernel representation of the security attribute */
411struct dst_secure
412{
413 struct list_head sec_entry;
414 struct dst_secure_user sec;
415};
416
417int dst_process_bio(struct dst_node *n, struct bio *bio);
418
419int dst_node_init_connected(struct dst_node *n, struct dst_network_ctl *r);
420int dst_node_init_listened(struct dst_node *n, struct dst_export_ctl *le);
421
422static inline struct dst_state *dst_state_get(struct dst_state *st)
423{
424 BUG_ON(atomic_read(&st->refcnt) == 0);
425 atomic_inc(&st->refcnt);
426 return st;
427}
428
429void dst_state_put(struct dst_state *st);
430
431struct dst_state *dst_state_alloc(struct dst_node *n);
432int dst_state_socket_create(struct dst_state *st);
433void dst_state_socket_release(struct dst_state *st);
434
435void dst_state_exit_connected(struct dst_state *st);
436
437int dst_state_schedule_receiver(struct dst_state *st);
438
439void dst_dump_addr(struct socket *sk, struct sockaddr *sa, char *str);
440
441static inline void dst_state_lock(struct dst_state *st)
442{
443 mutex_lock(&st->state_lock);
444}
445
446static inline void dst_state_unlock(struct dst_state *st)
447{
448 mutex_unlock(&st->state_lock);
449}
450
451void dst_poll_exit(struct dst_state *st);
452int dst_poll_init(struct dst_state *st);
453
454static inline unsigned int dst_state_poll(struct dst_state *st)
455{
456 unsigned int revents = POLLHUP | POLLERR;
457
458 dst_state_lock(st);
459 if (st->socket)
460 revents = st->socket->ops->poll(NULL, st->socket, NULL);
461 dst_state_unlock(st);
462
463 return revents;
464}
465
466static inline int dst_thread_setup(void *private, void *data)
467{
468 return 0;
469}
470
471void dst_node_put(struct dst_node *n);
472
473static inline struct dst_node *dst_node_get(struct dst_node *n)
474{
475 atomic_inc(&n->refcnt);
476 return n;
477}
478
479int dst_data_recv(struct dst_state *st, void *data, unsigned int size);
480int dst_recv_cdata(struct dst_state *st, void *cdata);
481int dst_data_send_header(struct socket *sock,
482 void *data, unsigned int size, int more);
483
484int dst_send_bio(struct dst_state *st, struct dst_cmd *cmd, struct bio *bio);
485
486int dst_process_io(struct dst_state *st);
487int dst_export_crypto(struct dst_node *n, struct bio *bio);
488int dst_export_send_bio(struct bio *bio);
489int dst_start_export(struct dst_node *n);
490
491int __init dst_export_init(void);
492void dst_export_exit(void);
493
494/* Private structure for export block IO requests */
495struct dst_export_priv
496{
497 struct list_head request_entry;
498 struct dst_state *state;
499 struct bio *bio;
500 struct dst_cmd cmd;
501};
502
503static inline void dst_trans_get(struct dst_trans *t)
504{
505 atomic_inc(&t->refcnt);
506}
507
508struct dst_trans *dst_trans_search(struct dst_node *node, dst_gen_t gen);
509int dst_trans_remove(struct dst_trans *t);
510int dst_trans_remove_nolock(struct dst_trans *t);
511void dst_trans_put(struct dst_trans *t);
512
513/*
514 * Convert bio into network command.
515 */
516static inline void dst_bio_to_cmd(struct bio *bio, struct dst_cmd *cmd,
517 u32 command, u64 id)
518{
519 cmd->cmd = command;
520 cmd->flags = (bio->bi_flags << BIO_POOL_BITS) >> BIO_POOL_BITS;
521 cmd->rw = bio->bi_rw;
522 cmd->size = bio->bi_size;
523 cmd->csize = 0;
524 cmd->id = id;
525 cmd->sector = bio->bi_sector;
526};
527
528int dst_trans_send(struct dst_trans *t);
529int dst_trans_crypto(struct dst_trans *t);
530
531int dst_node_crypto_init(struct dst_node *n, struct dst_crypto_ctl *ctl);
532void dst_node_crypto_exit(struct dst_node *n);
533
534static inline int dst_need_crypto(struct dst_node *n)
535{
536 struct dst_crypto_ctl *c = &n->crypto;
537 /*
538 * Logical OR is appropriate here, but boolean one produces
539 * more optimal code, so it is used instead.
540 */
541 return (c->hash_algo[0] | c->cipher_algo[0]);
542}
543
544int dst_node_trans_init(struct dst_node *n, unsigned int size);
545void dst_node_trans_exit(struct dst_node *n);
546
547/*
548 * Pool of threads.
549 * Ready list contains threads currently free to be used,
550 * active one contains threads with some work scheduled for them.
551 * Caller can wait in given queue when thread is ready.
552 */
553struct thread_pool
554{
555 int thread_num;
556 struct mutex thread_lock;
557 struct list_head ready_list, active_list;
558
559 wait_queue_head_t wait;
560};
561
562void thread_pool_del_worker(struct thread_pool *p);
563void thread_pool_del_worker_id(struct thread_pool *p, unsigned int id);
564int thread_pool_add_worker(struct thread_pool *p,
565 char *name,
566 unsigned int id,
567 void *(* init)(void *data),
568 void (* cleanup)(void *data),
569 void *data);
570
571void thread_pool_destroy(struct thread_pool *p);
572struct thread_pool *thread_pool_create(int num, char *name,
573 void *(* init)(void *data),
574 void (* cleanup)(void *data),
575 void *data);
576
577int thread_pool_schedule(struct thread_pool *p,
578 int (* setup)(void *stored_private, void *setup_data),
579 int (* action)(void *stored_private, void *setup_data),
580 void *setup_data, long timeout);
581int thread_pool_schedule_private(struct thread_pool *p,
582 int (* setup)(void *private, void *data),
583 int (* action)(void *private, void *data),
584 void *data, long timeout, void *id);
585
586#endif /* __KERNEL__ */
587#endif /* __DST_H */
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index a0d9422a1569..f8c2e1767500 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -57,8 +57,7 @@ extern int ddebug_remove_module(char *mod_name);
57 { KBUILD_MODNAME, __func__, __FILE__, fmt, DEBUG_HASH, \ 57 { KBUILD_MODNAME, __func__, __FILE__, fmt, DEBUG_HASH, \
58 DEBUG_HASH2, __LINE__, _DPRINTK_FLAGS_DEFAULT }; \ 58 DEBUG_HASH2, __LINE__, _DPRINTK_FLAGS_DEFAULT }; \
59 if (__dynamic_dbg_enabled(descriptor)) \ 59 if (__dynamic_dbg_enabled(descriptor)) \
60 printk(KERN_DEBUG KBUILD_MODNAME ":" pr_fmt(fmt), \ 60 printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); \
61 ##__VA_ARGS__); \
62 } while (0) 61 } while (0)
63 62
64 63
@@ -69,9 +68,7 @@ extern int ddebug_remove_module(char *mod_name);
69 { KBUILD_MODNAME, __func__, __FILE__, fmt, DEBUG_HASH, \ 68 { KBUILD_MODNAME, __func__, __FILE__, fmt, DEBUG_HASH, \
70 DEBUG_HASH2, __LINE__, _DPRINTK_FLAGS_DEFAULT }; \ 69 DEBUG_HASH2, __LINE__, _DPRINTK_FLAGS_DEFAULT }; \
71 if (__dynamic_dbg_enabled(descriptor)) \ 70 if (__dynamic_dbg_enabled(descriptor)) \
72 dev_printk(KERN_DEBUG, dev, \ 71 dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); \
73 KBUILD_MODNAME ": " fmt, \
74 ##__VA_ARGS__); \
75 } while (0) 72 } while (0)
76 73
77#else 74#else
@@ -81,8 +78,10 @@ static inline int ddebug_remove_module(char *mod)
81 return 0; 78 return 0;
82} 79}
83 80
84#define dynamic_pr_debug(fmt, ...) do { } while (0) 81#define dynamic_pr_debug(fmt, ...) \
85#define dynamic_dev_dbg(dev, format, ...) do { } while (0) 82 do { if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); } while (0)
83#define dynamic_dev_dbg(dev, format, ...) \
84 do { if (0) dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); } while (0)
86#endif 85#endif
87 86
88#endif 87#endif
diff --git a/include/linux/early_res.h b/include/linux/early_res.h
new file mode 100644
index 000000000000..29c09f57a13c
--- /dev/null
+++ b/include/linux/early_res.h
@@ -0,0 +1,23 @@
1#ifndef _LINUX_EARLY_RES_H
2#define _LINUX_EARLY_RES_H
3#ifdef __KERNEL__
4
5extern void reserve_early(u64 start, u64 end, char *name);
6extern void reserve_early_overlap_ok(u64 start, u64 end, char *name);
7extern void free_early(u64 start, u64 end);
8void free_early_partial(u64 start, u64 end);
9extern void early_res_to_bootmem(u64 start, u64 end);
10
11void reserve_early_without_check(u64 start, u64 end, char *name);
12u64 find_early_area(u64 ei_start, u64 ei_last, u64 start, u64 end,
13 u64 size, u64 align);
14u64 find_early_area_size(u64 ei_start, u64 ei_last, u64 start,
15 u64 *sizep, u64 align);
16u64 find_fw_memmap_area(u64 start, u64 end, u64 size, u64 align);
17u64 get_max_mapped(void);
18#include <linux/range.h>
19int get_free_all_memory_range(struct range **rangep, int nodeid);
20
21#endif /* __KERNEL__ */
22
23#endif /* _LINUX_EARLY_RES_H */
diff --git a/include/linux/efi.h b/include/linux/efi.h
index ce4581fbc08b..fb737bc19a8c 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -280,11 +280,7 @@ efi_guidcmp (efi_guid_t left, efi_guid_t right)
280static inline char * 280static inline char *
281efi_guid_unparse(efi_guid_t *guid, char *out) 281efi_guid_unparse(efi_guid_t *guid, char *out)
282{ 282{
283 sprintf(out, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", 283 sprintf(out, "%pUl", guid->b);
284 guid->b[3], guid->b[2], guid->b[1], guid->b[0],
285 guid->b[5], guid->b[4], guid->b[7], guid->b[6],
286 guid->b[8], guid->b[9], guid->b[10], guid->b[11],
287 guid->b[12], guid->b[13], guid->b[14], guid->b[15]);
288 return out; 284 return out;
289} 285}
290 286
diff --git a/include/linux/elf.h b/include/linux/elf.h
index 90a4ed0ea0e5..597858418051 100644
--- a/include/linux/elf.h
+++ b/include/linux/elf.h
@@ -50,6 +50,28 @@ typedef __s64 Elf64_Sxword;
50 50
51#define PT_GNU_STACK (PT_LOOS + 0x474e551) 51#define PT_GNU_STACK (PT_LOOS + 0x474e551)
52 52
53/*
54 * Extended Numbering
55 *
56 * If the real number of program header table entries is larger than
57 * or equal to PN_XNUM(0xffff), it is set to sh_info field of the
58 * section header at index 0, and PN_XNUM is set to e_phnum
59 * field. Otherwise, the section header at index 0 is zero
60 * initialized, if it exists.
61 *
62 * Specifications are available in:
63 *
64 * - Sun microsystems: Linker and Libraries.
65 * Part No: 817-1984-17, September 2008.
66 * URL: http://docs.sun.com/app/docs/doc/817-1984
67 *
68 * - System V ABI AMD64 Architecture Processor Supplement
69 * Draft Version 0.99.,
70 * May 11, 2009.
71 * URL: http://www.x86-64.org/
72 */
73#define PN_XNUM 0xffff
74
53/* These constants define the different elf file types */ 75/* These constants define the different elf file types */
54#define ET_NONE 0 76#define ET_NONE 0
55#define ET_REL 1 77#define ET_REL 1
@@ -286,7 +308,7 @@ typedef struct elf64_phdr {
286#define SHN_COMMON 0xfff2 308#define SHN_COMMON 0xfff2
287#define SHN_HIRESERVE 0xffff 309#define SHN_HIRESERVE 0xffff
288 310
289typedef struct { 311typedef struct elf32_shdr {
290 Elf32_Word sh_name; 312 Elf32_Word sh_name;
291 Elf32_Word sh_type; 313 Elf32_Word sh_type;
292 Elf32_Word sh_flags; 314 Elf32_Word sh_flags;
@@ -349,7 +371,11 @@ typedef struct elf64_shdr {
349#define ELF_OSABI ELFOSABI_NONE 371#define ELF_OSABI ELFOSABI_NONE
350#endif 372#endif
351 373
352/* Notes used in ET_CORE */ 374/*
375 * Notes used in ET_CORE. Architectures export some of the arch register sets
376 * using the corresponding note types via the PTRACE_GETREGSET and
377 * PTRACE_SETREGSET requests.
378 */
353#define NT_PRSTATUS 1 379#define NT_PRSTATUS 1
354#define NT_PRFPREG 2 380#define NT_PRFPREG 2
355#define NT_PRPSINFO 3 381#define NT_PRPSINFO 3
@@ -361,7 +387,13 @@ typedef struct elf64_shdr {
361#define NT_PPC_VSX 0x102 /* PowerPC VSX registers */ 387#define NT_PPC_VSX 0x102 /* PowerPC VSX registers */
362#define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ 388#define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */
363#define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */ 389#define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */
364#define NT_PRXSTATUS 0x300 /* s390 upper register halves */ 390#define NT_X86_XSTATE 0x202 /* x86 extended state using xsave */
391#define NT_S390_HIGH_GPRS 0x300 /* s390 upper register halves */
392#define NT_S390_TIMER 0x301 /* s390 timer register */
393#define NT_S390_TODCMP 0x302 /* s390 TOD clock comparator register */
394#define NT_S390_TODPREG 0x303 /* s390 TOD programmable register */
395#define NT_S390_CTRS 0x304 /* s390 control registers */
396#define NT_S390_PREFIX 0x305 /* s390 prefix register */
365 397
366 398
367/* Note header in a PT_NOTE section */ 399/* Note header in a PT_NOTE section */
@@ -384,16 +416,20 @@ typedef struct elf64_note {
384extern Elf32_Dyn _DYNAMIC []; 416extern Elf32_Dyn _DYNAMIC [];
385#define elfhdr elf32_hdr 417#define elfhdr elf32_hdr
386#define elf_phdr elf32_phdr 418#define elf_phdr elf32_phdr
419#define elf_shdr elf32_shdr
387#define elf_note elf32_note 420#define elf_note elf32_note
388#define elf_addr_t Elf32_Off 421#define elf_addr_t Elf32_Off
422#define Elf_Half Elf32_Half
389 423
390#else 424#else
391 425
392extern Elf64_Dyn _DYNAMIC []; 426extern Elf64_Dyn _DYNAMIC [];
393#define elfhdr elf64_hdr 427#define elfhdr elf64_hdr
394#define elf_phdr elf64_phdr 428#define elf_phdr elf64_phdr
429#define elf_shdr elf64_shdr
395#define elf_note elf64_note 430#define elf_note elf64_note
396#define elf_addr_t Elf64_Off 431#define elf_addr_t Elf64_Off
432#define Elf_Half Elf64_Half
397 433
398#endif 434#endif
399 435
diff --git a/include/linux/elfcore.h b/include/linux/elfcore.h
index 00d6a68d0421..e687bc3ba4da 100644
--- a/include/linux/elfcore.h
+++ b/include/linux/elfcore.h
@@ -8,6 +8,8 @@
8#include <linux/user.h> 8#include <linux/user.h>
9#endif 9#endif
10#include <linux/ptrace.h> 10#include <linux/ptrace.h>
11#include <linux/elf.h>
12#include <linux/fs.h>
11 13
12struct elf_siginfo 14struct elf_siginfo
13{ 15{
@@ -150,5 +152,20 @@ static inline int elf_core_copy_task_xfpregs(struct task_struct *t, elf_fpxregse
150 152
151#endif /* __KERNEL__ */ 153#endif /* __KERNEL__ */
152 154
155/*
156 * These functions parameterize elf_core_dump in fs/binfmt_elf.c to write out
157 * extra segments containing the gate DSO contents. Dumping its
158 * contents makes post-mortem fully interpretable later without matching up
159 * the same kernel and hardware config to see what PC values meant.
160 * Dumping its extra ELF program headers includes all the other information
161 * a debugger needs to easily find how the gate DSO was being used.
162 */
163extern Elf_Half elf_core_extra_phdrs(void);
164extern int
165elf_core_write_extra_phdrs(struct file *file, loff_t offset, size_t *size,
166 unsigned long limit);
167extern int
168elf_core_write_extra_data(struct file *file, size_t *size, unsigned long limit);
169extern size_t elf_core_extra_data_size(void);
153 170
154#endif /* _LINUX_ELFCORE_H */ 171#endif /* _LINUX_ELFCORE_H */
diff --git a/include/linux/enclosure.h b/include/linux/enclosure.h
index 90d1c2184112..9a33c5f7e126 100644
--- a/include/linux/enclosure.h
+++ b/include/linux/enclosure.h
@@ -42,6 +42,8 @@ enum enclosure_status {
42 ENCLOSURE_STATUS_NOT_INSTALLED, 42 ENCLOSURE_STATUS_NOT_INSTALLED,
43 ENCLOSURE_STATUS_UNKNOWN, 43 ENCLOSURE_STATUS_UNKNOWN,
44 ENCLOSURE_STATUS_UNAVAILABLE, 44 ENCLOSURE_STATUS_UNAVAILABLE,
45 /* last element for counting purposes */
46 ENCLOSURE_STATUS_MAX
45}; 47};
46 48
47/* SFF-8485 activity light settings */ 49/* SFF-8485 activity light settings */
diff --git a/include/linux/err.h b/include/linux/err.h
index ec87f3142bf3..1b12642636c7 100644
--- a/include/linux/err.h
+++ b/include/linux/err.h
@@ -34,6 +34,11 @@ static inline long IS_ERR(const void *ptr)
34 return IS_ERR_VALUE((unsigned long)ptr); 34 return IS_ERR_VALUE((unsigned long)ptr);
35} 35}
36 36
37static inline long IS_ERR_OR_NULL(const void *ptr)
38{
39 return !ptr || IS_ERR_VALUE((unsigned long)ptr);
40}
41
37/** 42/**
38 * ERR_CAST - Explicitly cast an error-valued pointer to another pointer type 43 * ERR_CAST - Explicitly cast an error-valued pointer to another pointer type
39 * @ptr: The pointer to cast. 44 * @ptr: The pointer to cast.
diff --git a/include/linux/errqueue.h b/include/linux/errqueue.h
index ec12cc74366f..034072cea853 100644
--- a/include/linux/errqueue.h
+++ b/include/linux/errqueue.h
@@ -3,8 +3,7 @@
3 3
4#include <linux/types.h> 4#include <linux/types.h>
5 5
6struct sock_extended_err 6struct sock_extended_err {
7{
8 __u32 ee_errno; 7 __u32 ee_errno;
9 __u8 ee_origin; 8 __u8 ee_origin;
10 __u8 ee_type; 9 __u8 ee_type;
@@ -31,8 +30,7 @@ struct sock_extended_err
31 30
32#define SKB_EXT_ERR(skb) ((struct sock_exterr_skb *) ((skb)->cb)) 31#define SKB_EXT_ERR(skb) ((struct sock_exterr_skb *) ((skb)->cb))
33 32
34struct sock_exterr_skb 33struct sock_exterr_skb {
35{
36 union { 34 union {
37 struct inet_skb_parm h4; 35 struct inet_skb_parm h4;
38#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) 36#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
index 15e4eb713694..b33f316bb92e 100644
--- a/include/linux/ethtool.h
+++ b/include/linux/ethtool.h
@@ -49,17 +49,25 @@ static inline __u32 ethtool_cmd_speed(struct ethtool_cmd *ep)
49 return (ep->speed_hi << 16) | ep->speed; 49 return (ep->speed_hi << 16) | ep->speed;
50} 50}
51 51
52#define ETHTOOL_FWVERS_LEN 32
52#define ETHTOOL_BUSINFO_LEN 32 53#define ETHTOOL_BUSINFO_LEN 32
53/* these strings are set to whatever the driver author decides... */ 54/* these strings are set to whatever the driver author decides... */
54struct ethtool_drvinfo { 55struct ethtool_drvinfo {
55 __u32 cmd; 56 __u32 cmd;
56 char driver[32]; /* driver short name, "tulip", "eepro100" */ 57 char driver[32]; /* driver short name, "tulip", "eepro100" */
57 char version[32]; /* driver version string */ 58 char version[32]; /* driver version string */
58 char fw_version[32]; /* firmware version string, if applicable */ 59 char fw_version[ETHTOOL_FWVERS_LEN]; /* firmware version string */
59 char bus_info[ETHTOOL_BUSINFO_LEN]; /* Bus info for this IF. */ 60 char bus_info[ETHTOOL_BUSINFO_LEN]; /* Bus info for this IF. */
60 /* For PCI devices, use pci_name(pci_dev). */ 61 /* For PCI devices, use pci_name(pci_dev). */
61 char reserved1[32]; 62 char reserved1[32];
62 char reserved2[12]; 63 char reserved2[12];
64 /*
65 * Some struct members below are filled in
66 * using ops->get_sset_count(). Obtaining
67 * this info from ethtool_drvinfo is now
68 * deprecated; Use ETHTOOL_GSSET_INFO
69 * instead.
70 */
63 __u32 n_priv_flags; /* number of flags valid in ETHTOOL_GPFLAGS */ 71 __u32 n_priv_flags; /* number of flags valid in ETHTOOL_GPFLAGS */
64 __u32 n_stats; /* number of u64's from ETHTOOL_GSTATS */ 72 __u32 n_stats; /* number of u64's from ETHTOOL_GSTATS */
65 __u32 testinfo_len; 73 __u32 testinfo_len;
@@ -241,6 +249,7 @@ enum ethtool_stringset {
241 ETH_SS_TEST = 0, 249 ETH_SS_TEST = 0,
242 ETH_SS_STATS, 250 ETH_SS_STATS,
243 ETH_SS_PRIV_FLAGS, 251 ETH_SS_PRIV_FLAGS,
252 ETH_SS_NTUPLE_FILTERS,
244}; 253};
245 254
246/* for passing string sets for data tagging */ 255/* for passing string sets for data tagging */
@@ -251,6 +260,17 @@ struct ethtool_gstrings {
251 __u8 data[0]; 260 __u8 data[0];
252}; 261};
253 262
263struct ethtool_sset_info {
264 __u32 cmd; /* ETHTOOL_GSSET_INFO */
265 __u32 reserved;
266 __u64 sset_mask; /* input: each bit selects an sset to query */
267 /* output: each bit a returned sset */
268 __u32 data[0]; /* ETH_SS_xxx count, in order, based on bits
269 in sset_mask. One bit implies one
270 __u32, two bits implies two
271 __u32's, etc. */
272};
273
254enum ethtool_test_flags { 274enum ethtool_test_flags {
255 ETH_TEST_FL_OFFLINE = (1 << 0), /* online / offline */ 275 ETH_TEST_FL_OFFLINE = (1 << 0), /* online / offline */
256 ETH_TEST_FL_FAILED = (1 << 1), /* test passed / failed */ 276 ETH_TEST_FL_FAILED = (1 << 1), /* test passed / failed */
@@ -289,6 +309,7 @@ struct ethtool_perm_addr {
289 */ 309 */
290enum ethtool_flags { 310enum ethtool_flags {
291 ETH_FLAG_LRO = (1 << 15), /* LRO is enabled */ 311 ETH_FLAG_LRO = (1 << 15), /* LRO is enabled */
312 ETH_FLAG_NTUPLE = (1 << 27), /* N-tuple filters enabled */
292}; 313};
293 314
294/* The following structures are for supporting RX network flow 315/* The following structures are for supporting RX network flow
@@ -362,6 +383,35 @@ struct ethtool_rxnfc {
362 __u32 rule_locs[0]; 383 __u32 rule_locs[0];
363}; 384};
364 385
386struct ethtool_rx_ntuple_flow_spec {
387 __u32 flow_type;
388 union {
389 struct ethtool_tcpip4_spec tcp_ip4_spec;
390 struct ethtool_tcpip4_spec udp_ip4_spec;
391 struct ethtool_tcpip4_spec sctp_ip4_spec;
392 struct ethtool_ah_espip4_spec ah_ip4_spec;
393 struct ethtool_ah_espip4_spec esp_ip4_spec;
394 struct ethtool_rawip4_spec raw_ip4_spec;
395 struct ethtool_ether_spec ether_spec;
396 struct ethtool_usrip4_spec usr_ip4_spec;
397 __u8 hdata[64];
398 } h_u, m_u; /* entry, mask */
399
400 __u16 vlan_tag;
401 __u16 vlan_tag_mask;
402 __u64 data; /* user-defined flow spec data */
403 __u64 data_mask; /* user-defined flow spec mask */
404
405 /* signed to distinguish between queue and actions (DROP) */
406 __s32 action;
407#define ETHTOOL_RXNTUPLE_ACTION_DROP -1
408};
409
410struct ethtool_rx_ntuple {
411 __u32 cmd;
412 struct ethtool_rx_ntuple_flow_spec fs;
413};
414
365#define ETHTOOL_FLASH_MAX_FILENAME 128 415#define ETHTOOL_FLASH_MAX_FILENAME 128
366enum ethtool_flash_op_type { 416enum ethtool_flash_op_type {
367 ETHTOOL_FLASH_ALL_REGIONS = 0, 417 ETHTOOL_FLASH_ALL_REGIONS = 0,
@@ -376,6 +426,20 @@ struct ethtool_flash {
376 426
377#ifdef __KERNEL__ 427#ifdef __KERNEL__
378 428
429#include <linux/rculist.h>
430
431struct ethtool_rx_ntuple_flow_spec_container {
432 struct ethtool_rx_ntuple_flow_spec fs;
433 struct list_head list;
434};
435
436struct ethtool_rx_ntuple_list {
437#define ETHTOOL_MAX_NTUPLE_LIST_ENTRY 1024
438#define ETHTOOL_MAX_NTUPLE_STRING_PER_ENTRY 14
439 struct list_head list;
440 unsigned int count;
441};
442
379struct net_device; 443struct net_device;
380 444
381/* Some generic methods drivers may use in their ethtool_ops */ 445/* Some generic methods drivers may use in their ethtool_ops */
@@ -393,6 +457,7 @@ u32 ethtool_op_get_ufo(struct net_device *dev);
393int ethtool_op_set_ufo(struct net_device *dev, u32 data); 457int ethtool_op_set_ufo(struct net_device *dev, u32 data);
394u32 ethtool_op_get_flags(struct net_device *dev); 458u32 ethtool_op_get_flags(struct net_device *dev);
395int ethtool_op_set_flags(struct net_device *dev, u32 data); 459int ethtool_op_set_flags(struct net_device *dev, u32 data);
460void ethtool_ntuple_flush(struct net_device *dev);
396 461
397/** 462/**
398 * &ethtool_ops - Alter and report network device settings 463 * &ethtool_ops - Alter and report network device settings
@@ -495,13 +560,12 @@ struct ethtool_ops {
495 u32 (*get_priv_flags)(struct net_device *); 560 u32 (*get_priv_flags)(struct net_device *);
496 int (*set_priv_flags)(struct net_device *, u32); 561 int (*set_priv_flags)(struct net_device *, u32);
497 int (*get_sset_count)(struct net_device *, int); 562 int (*get_sset_count)(struct net_device *, int);
498
499 /* the following hooks are obsolete */
500 int (*self_test_count)(struct net_device *);/* use get_sset_count */
501 int (*get_stats_count)(struct net_device *);/* use get_sset_count */
502 int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *); 563 int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *);
503 int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); 564 int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
504 int (*flash_device)(struct net_device *, struct ethtool_flash *); 565 int (*flash_device)(struct net_device *, struct ethtool_flash *);
566 int (*reset)(struct net_device *, u32 *);
567 int (*set_rx_ntuple)(struct net_device *, struct ethtool_rx_ntuple *);
568 int (*get_rx_ntuple)(struct net_device *, u32 stringset, void *);
505}; 569};
506#endif /* __KERNEL__ */ 570#endif /* __KERNEL__ */
507 571
@@ -559,6 +623,10 @@ struct ethtool_ops {
559#define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */ 623#define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */
560#define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */ 624#define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */
561#define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */ 625#define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */
626#define ETHTOOL_RESET 0x00000034 /* Reset hardware */
627#define ETHTOOL_SRXNTUPLE 0x00000035 /* Add an n-tuple filter to device */
628#define ETHTOOL_GRXNTUPLE 0x00000036 /* Get n-tuple filters from device */
629#define ETHTOOL_GSSET_INFO 0x00000037 /* Get string set info */
562 630
563/* compatibility with older code */ 631/* compatibility with older code */
564#define SPARC_ETH_GSET ETHTOOL_GSET 632#define SPARC_ETH_GSET ETHTOOL_GSET
@@ -633,6 +701,8 @@ struct ethtool_ops {
633#define PORT_MII 0x02 701#define PORT_MII 0x02
634#define PORT_FIBRE 0x03 702#define PORT_FIBRE 0x03
635#define PORT_BNC 0x04 703#define PORT_BNC 0x04
704#define PORT_DA 0x05
705#define PORT_NONE 0xef
636#define PORT_OTHER 0xff 706#define PORT_OTHER 0xff
637 707
638/* Which transceiver to use. */ 708/* Which transceiver to use. */
@@ -676,6 +746,8 @@ struct ethtool_ops {
676#define AH_V6_FLOW 0x0b 746#define AH_V6_FLOW 0x0b
677#define ESP_V6_FLOW 0x0c 747#define ESP_V6_FLOW 0x0c
678#define IP_USER_FLOW 0x0d 748#define IP_USER_FLOW 0x0d
749#define IPV4_FLOW 0x10
750#define IPV6_FLOW 0x11
679 751
680/* L3-L4 network traffic flow hash options */ 752/* L3-L4 network traffic flow hash options */
681#define RXH_L2DA (1 << 1) 753#define RXH_L2DA (1 << 1)
@@ -689,4 +761,34 @@ struct ethtool_ops {
689 761
690#define RX_CLS_FLOW_DISC 0xffffffffffffffffULL 762#define RX_CLS_FLOW_DISC 0xffffffffffffffffULL
691 763
764/* Reset flags */
765/* The reset() operation must clear the flags for the components which
766 * were actually reset. On successful return, the flags indicate the
767 * components which were not reset, either because they do not exist
768 * in the hardware or because they cannot be reset independently. The
769 * driver must never reset any components that were not requested.
770 */
771enum ethtool_reset_flags {
772 /* These flags represent components dedicated to the interface
773 * the command is addressed to. Shift any flag left by
774 * ETH_RESET_SHARED_SHIFT to reset a shared component of the
775 * same type.
776 */
777 ETH_RESET_MGMT = 1 << 0, /* Management processor */
778 ETH_RESET_IRQ = 1 << 1, /* Interrupt requester */
779 ETH_RESET_DMA = 1 << 2, /* DMA engine */
780 ETH_RESET_FILTER = 1 << 3, /* Filtering/flow direction */
781 ETH_RESET_OFFLOAD = 1 << 4, /* Protocol offload */
782 ETH_RESET_MAC = 1 << 5, /* Media access controller */
783 ETH_RESET_PHY = 1 << 6, /* Transceiver/PHY */
784 ETH_RESET_RAM = 1 << 7, /* RAM shared between
785 * multiple components */
786
787 ETH_RESET_DEDICATED = 0x0000ffff, /* All components dedicated to
788 * this interface */
789 ETH_RESET_ALL = 0xffffffff, /* All components used by this
790 * interface, even if shared */
791};
792#define ETH_RESET_SHARED_SHIFT 16
793
692#endif /* _LINUX_ETHTOOL_H */ 794#endif /* _LINUX_ETHTOOL_H */
diff --git a/include/linux/eventfd.h b/include/linux/eventfd.h
index 94dd10366a78..91bb4f27238c 100644
--- a/include/linux/eventfd.h
+++ b/include/linux/eventfd.h
@@ -10,6 +10,7 @@
10 10
11#include <linux/fcntl.h> 11#include <linux/fcntl.h>
12#include <linux/file.h> 12#include <linux/file.h>
13#include <linux/wait.h>
13 14
14/* 15/*
15 * CAREFUL: Check include/asm-generic/fcntl.h when defining 16 * CAREFUL: Check include/asm-generic/fcntl.h when defining
@@ -34,6 +35,9 @@ struct file *eventfd_fget(int fd);
34struct eventfd_ctx *eventfd_ctx_fdget(int fd); 35struct eventfd_ctx *eventfd_ctx_fdget(int fd);
35struct eventfd_ctx *eventfd_ctx_fileget(struct file *file); 36struct eventfd_ctx *eventfd_ctx_fileget(struct file *file);
36int eventfd_signal(struct eventfd_ctx *ctx, int n); 37int eventfd_signal(struct eventfd_ctx *ctx, int n);
38ssize_t eventfd_ctx_read(struct eventfd_ctx *ctx, int no_wait, __u64 *cnt);
39int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx, wait_queue_t *wait,
40 __u64 *cnt);
37 41
38#else /* CONFIG_EVENTFD */ 42#else /* CONFIG_EVENTFD */
39 43
@@ -61,6 +65,18 @@ static inline void eventfd_ctx_put(struct eventfd_ctx *ctx)
61 65
62} 66}
63 67
68static inline ssize_t eventfd_ctx_read(struct eventfd_ctx *ctx, int no_wait,
69 __u64 *cnt)
70{
71 return -ENOSYS;
72}
73
74static inline int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx,
75 wait_queue_t *wait, __u64 *cnt)
76{
77 return -ENOSYS;
78}
79
64#endif 80#endif
65 81
66#endif /* _LINUX_EVENTFD_H */ 82#endif /* _LINUX_EVENTFD_H */
diff --git a/include/linux/exportfs.h b/include/linux/exportfs.h
index 27e772cefb6a..a9cd507f8cd2 100644
--- a/include/linux/exportfs.h
+++ b/include/linux/exportfs.h
@@ -96,8 +96,9 @@ struct fid {
96 * @fh_to_parent: find the implied object's parent and get a dentry for it 96 * @fh_to_parent: find the implied object's parent and get a dentry for it
97 * @get_name: find the name for a given inode in a given directory 97 * @get_name: find the name for a given inode in a given directory
98 * @get_parent: find the parent of a given directory 98 * @get_parent: find the parent of a given directory
99 * @commit_metadata: commit metadata changes to stable storage
99 * 100 *
100 * See Documentation/filesystems/Exporting for details on how to use 101 * See Documentation/filesystems/nfs/Exporting for details on how to use
101 * this interface correctly. 102 * this interface correctly.
102 * 103 *
103 * encode_fh: 104 * encode_fh:
@@ -137,6 +138,9 @@ struct fid {
137 * is also a directory. In the event that it cannot be found, or storage 138 * is also a directory. In the event that it cannot be found, or storage
138 * space cannot be allocated, a %ERR_PTR should be returned. 139 * space cannot be allocated, a %ERR_PTR should be returned.
139 * 140 *
141 * commit_metadata:
142 * @commit_metadata should commit metadata changes to stable storage.
143 *
140 * Locking rules: 144 * Locking rules:
141 * get_parent is called with child->d_inode->i_mutex down 145 * get_parent is called with child->d_inode->i_mutex down
142 * get_name is not (which is possibly inconsistent) 146 * get_name is not (which is possibly inconsistent)
@@ -152,6 +156,7 @@ struct export_operations {
152 int (*get_name)(struct dentry *parent, char *name, 156 int (*get_name)(struct dentry *parent, char *name,
153 struct dentry *child); 157 struct dentry *child);
154 struct dentry * (*get_parent)(struct dentry *child); 158 struct dentry * (*get_parent)(struct dentry *child);
159 int (*commit_metadata)(struct inode *inode);
155}; 160};
156 161
157extern int exportfs_encode_fh(struct dentry *dentry, struct fid *fid, 162extern int exportfs_encode_fh(struct dentry *dentry, struct fid *fid,
diff --git a/include/linux/ext2_fs.h b/include/linux/ext2_fs.h
index 121720d74e15..2dfa7076e8b6 100644
--- a/include/linux/ext2_fs.h
+++ b/include/linux/ext2_fs.h
@@ -565,14 +565,14 @@ struct ext2_dir_entry_2 {
565 * other bits are reserved for now. 565 * other bits are reserved for now.
566 */ 566 */
567enum { 567enum {
568 EXT2_FT_UNKNOWN, 568 EXT2_FT_UNKNOWN = 0,
569 EXT2_FT_REG_FILE, 569 EXT2_FT_REG_FILE = 1,
570 EXT2_FT_DIR, 570 EXT2_FT_DIR = 2,
571 EXT2_FT_CHRDEV, 571 EXT2_FT_CHRDEV = 3,
572 EXT2_FT_BLKDEV, 572 EXT2_FT_BLKDEV = 4,
573 EXT2_FT_FIFO, 573 EXT2_FT_FIFO = 5,
574 EXT2_FT_SOCK, 574 EXT2_FT_SOCK = 6,
575 EXT2_FT_SYMLINK, 575 EXT2_FT_SYMLINK = 7,
576 EXT2_FT_MAX 576 EXT2_FT_MAX
577}; 577};
578 578
diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h
index 7499b3667798..5f494b465097 100644
--- a/include/linux/ext3_fs.h
+++ b/include/linux/ext3_fs.h
@@ -202,14 +202,6 @@ static inline __u32 ext3_mask_flags(umode_t mode, __u32 flags)
202 return flags & EXT3_OTHER_FLMASK; 202 return flags & EXT3_OTHER_FLMASK;
203} 203}
204 204
205/*
206 * Inode dynamic state flags
207 */
208#define EXT3_STATE_JDATA 0x00000001 /* journaled data exists */
209#define EXT3_STATE_NEW 0x00000002 /* inode is newly created */
210#define EXT3_STATE_XATTR 0x00000004 /* has in-inode xattrs */
211#define EXT3_STATE_FLUSH_ON_CLOSE 0x00000008
212
213/* Used to pass group descriptor data when online resize is done */ 205/* Used to pass group descriptor data when online resize is done */
214struct ext3_new_group_input { 206struct ext3_new_group_input {
215 __u32 group; /* Group number for this data */ 207 __u32 group; /* Group number for this data */
@@ -560,6 +552,31 @@ static inline int ext3_valid_inum(struct super_block *sb, unsigned long ino)
560 (ino >= EXT3_FIRST_INO(sb) && 552 (ino >= EXT3_FIRST_INO(sb) &&
561 ino <= le32_to_cpu(EXT3_SB(sb)->s_es->s_inodes_count)); 553 ino <= le32_to_cpu(EXT3_SB(sb)->s_es->s_inodes_count));
562} 554}
555
556/*
557 * Inode dynamic state flags
558 */
559enum {
560 EXT3_STATE_JDATA, /* journaled data exists */
561 EXT3_STATE_NEW, /* inode is newly created */
562 EXT3_STATE_XATTR, /* has in-inode xattrs */
563 EXT3_STATE_FLUSH_ON_CLOSE, /* flush dirty pages on close */
564};
565
566static inline int ext3_test_inode_state(struct inode *inode, int bit)
567{
568 return test_bit(bit, &EXT3_I(inode)->i_state_flags);
569}
570
571static inline void ext3_set_inode_state(struct inode *inode, int bit)
572{
573 set_bit(bit, &EXT3_I(inode)->i_state_flags);
574}
575
576static inline void ext3_clear_inode_state(struct inode *inode, int bit)
577{
578 clear_bit(bit, &EXT3_I(inode)->i_state_flags);
579}
563#else 580#else
564/* Assume that user mode programs are passing in an ext3fs superblock, not 581/* Assume that user mode programs are passing in an ext3fs superblock, not
565 * a kernel struct super_block. This will allow us to call the feature-test 582 * a kernel struct super_block. This will allow us to call the feature-test
@@ -877,7 +894,7 @@ int ext3_get_blocks_handle(handle_t *handle, struct inode *inode,
877 int create); 894 int create);
878 895
879extern struct inode *ext3_iget(struct super_block *, unsigned long); 896extern struct inode *ext3_iget(struct super_block *, unsigned long);
880extern int ext3_write_inode (struct inode *, int); 897extern int ext3_write_inode (struct inode *, struct writeback_control *);
881extern int ext3_setattr (struct dentry *, struct iattr *); 898extern int ext3_setattr (struct dentry *, struct iattr *);
882extern void ext3_delete_inode (struct inode *); 899extern void ext3_delete_inode (struct inode *);
883extern int ext3_sync_inode (handle_t *, struct inode *); 900extern int ext3_sync_inode (handle_t *, struct inode *);
@@ -918,6 +935,8 @@ extern void ext3_abort (struct super_block *, const char *, const char *, ...)
918 __attribute__ ((format (printf, 3, 4))); 935 __attribute__ ((format (printf, 3, 4)));
919extern void ext3_warning (struct super_block *, const char *, const char *, ...) 936extern void ext3_warning (struct super_block *, const char *, const char *, ...)
920 __attribute__ ((format (printf, 3, 4))); 937 __attribute__ ((format (printf, 3, 4)));
938extern void ext3_msg(struct super_block *, const char *, const char *, ...)
939 __attribute__ ((format (printf, 3, 4)));
921extern void ext3_update_dynamic_rev (struct super_block *sb); 940extern void ext3_update_dynamic_rev (struct super_block *sb);
922 941
923#define ext3_std_error(sb, errno) \ 942#define ext3_std_error(sb, errno) \
diff --git a/include/linux/ext3_fs_i.h b/include/linux/ext3_fs_i.h
index 93e7428156ba..f42c098aed8d 100644
--- a/include/linux/ext3_fs_i.h
+++ b/include/linux/ext3_fs_i.h
@@ -87,7 +87,7 @@ struct ext3_inode_info {
87 * near to their parent directory's inode. 87 * near to their parent directory's inode.
88 */ 88 */
89 __u32 i_block_group; 89 __u32 i_block_group;
90 __u32 i_state; /* Dynamic state flags for ext3 */ 90 unsigned long i_state_flags; /* Dynamic state flags for ext3 */
91 91
92 /* block reservation info */ 92 /* block reservation info */
93 struct ext3_block_alloc_info *i_block_alloc_info; 93 struct ext3_block_alloc_info *i_block_alloc_info;
diff --git a/include/linux/ext3_fs_sb.h b/include/linux/ext3_fs_sb.h
index f07f34de2f0e..258088ab3c6b 100644
--- a/include/linux/ext3_fs_sb.h
+++ b/include/linux/ext3_fs_sb.h
@@ -72,6 +72,8 @@ struct ext3_sb_info {
72 struct inode * s_journal_inode; 72 struct inode * s_journal_inode;
73 struct journal_s * s_journal; 73 struct journal_s * s_journal;
74 struct list_head s_orphan; 74 struct list_head s_orphan;
75 struct mutex s_orphan_lock;
76 struct mutex s_resize_lock;
75 unsigned long s_commit_interval; 77 unsigned long s_commit_interval;
76 struct block_device *journal_bdev; 78 struct block_device *journal_bdev;
77#ifdef CONFIG_JBD_DEBUG 79#ifdef CONFIG_JBD_DEBUG
diff --git a/include/linux/ext3_jbd.h b/include/linux/ext3_jbd.h
index cf82d519be40..d7b5ddca99c2 100644
--- a/include/linux/ext3_jbd.h
+++ b/include/linux/ext3_jbd.h
@@ -44,13 +44,13 @@
44 44
45#define EXT3_DATA_TRANS_BLOCKS(sb) (EXT3_SINGLEDATA_TRANS_BLOCKS + \ 45#define EXT3_DATA_TRANS_BLOCKS(sb) (EXT3_SINGLEDATA_TRANS_BLOCKS + \
46 EXT3_XATTR_TRANS_BLOCKS - 2 + \ 46 EXT3_XATTR_TRANS_BLOCKS - 2 + \
47 2*EXT3_QUOTA_TRANS_BLOCKS(sb)) 47 EXT3_MAXQUOTAS_TRANS_BLOCKS(sb))
48 48
49/* Delete operations potentially hit one directory's namespace plus an 49/* Delete operations potentially hit one directory's namespace plus an
50 * entire inode, plus arbitrary amounts of bitmap/indirection data. Be 50 * entire inode, plus arbitrary amounts of bitmap/indirection data. Be
51 * generous. We can grow the delete transaction later if necessary. */ 51 * generous. We can grow the delete transaction later if necessary. */
52 52
53#define EXT3_DELETE_TRANS_BLOCKS(sb) (2 * EXT3_DATA_TRANS_BLOCKS(sb) + 64) 53#define EXT3_DELETE_TRANS_BLOCKS(sb) (EXT3_MAXQUOTAS_TRANS_BLOCKS(sb) + 64)
54 54
55/* Define an arbitrary limit for the amount of data we will anticipate 55/* Define an arbitrary limit for the amount of data we will anticipate
56 * writing to any given transaction. For unbounded transactions such as 56 * writing to any given transaction. For unbounded transactions such as
@@ -86,6 +86,9 @@
86#define EXT3_QUOTA_INIT_BLOCKS(sb) 0 86#define EXT3_QUOTA_INIT_BLOCKS(sb) 0
87#define EXT3_QUOTA_DEL_BLOCKS(sb) 0 87#define EXT3_QUOTA_DEL_BLOCKS(sb) 0
88#endif 88#endif
89#define EXT3_MAXQUOTAS_TRANS_BLOCKS(sb) (MAXQUOTAS*EXT3_QUOTA_TRANS_BLOCKS(sb))
90#define EXT3_MAXQUOTAS_INIT_BLOCKS(sb) (MAXQUOTAS*EXT3_QUOTA_INIT_BLOCKS(sb))
91#define EXT3_MAXQUOTAS_DEL_BLOCKS(sb) (MAXQUOTAS*EXT3_QUOTA_DEL_BLOCKS(sb))
89 92
90int 93int
91ext3_mark_iloc_dirty(handle_t *handle, 94ext3_mark_iloc_dirty(handle_t *handle,
diff --git a/include/linux/fault-inject.h b/include/linux/fault-inject.h
index 06ca9b21dad2..7b64ad40e4ce 100644
--- a/include/linux/fault-inject.h
+++ b/include/linux/fault-inject.h
@@ -82,9 +82,10 @@ static inline void cleanup_fault_attr_dentries(struct fault_attr *attr)
82#endif /* CONFIG_FAULT_INJECTION */ 82#endif /* CONFIG_FAULT_INJECTION */
83 83
84#ifdef CONFIG_FAILSLAB 84#ifdef CONFIG_FAILSLAB
85extern bool should_failslab(size_t size, gfp_t gfpflags); 85extern bool should_failslab(size_t size, gfp_t gfpflags, unsigned long flags);
86#else 86#else
87static inline bool should_failslab(size_t size, gfp_t gfpflags) 87static inline bool should_failslab(size_t size, gfp_t gfpflags,
88 unsigned long flags)
88{ 89{
89 return false; 90 return false;
90} 91}
diff --git a/include/linux/fb.h b/include/linux/fb.h
index de9c722e7b90..c10163b4c40e 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -543,6 +543,8 @@ struct fb_cursor_user {
543#define FB_EVENT_GET_REQ 0x0D 543#define FB_EVENT_GET_REQ 0x0D
544/* Unbind from the console if possible */ 544/* Unbind from the console if possible */
545#define FB_EVENT_FB_UNBIND 0x0E 545#define FB_EVENT_FB_UNBIND 0x0E
546/* CONSOLE-SPECIFIC: remap all consoles to new fb - for vga switcheroo */
547#define FB_EVENT_REMAP_ALL_CONSOLE 0x0F
546 548
547struct fb_event { 549struct fb_event {
548 struct fb_info *info; 550 struct fb_info *info;
@@ -763,6 +765,7 @@ struct fb_tile_ops {
763 * takes over; acceleration engine should be in a quiescent state */ 765 * takes over; acceleration engine should be in a quiescent state */
764 766
765/* hints */ 767/* hints */
768#define FBINFO_VIRTFB 0x0004 /* FB is System RAM, not device. */
766#define FBINFO_PARTIAL_PAN_OK 0x0040 /* otw use pan only for double-buffering */ 769#define FBINFO_PARTIAL_PAN_OK 0x0040 /* otw use pan only for double-buffering */
767#define FBINFO_READS_FAST 0x0080 /* soft-copy faster than rendering */ 770#define FBINFO_READS_FAST 0x0080 /* soft-copy faster than rendering */
768 771
diff --git a/include/linux/fdtable.h b/include/linux/fdtable.h
index a2ec74bc4812..013dc529e95f 100644
--- a/include/linux/fdtable.h
+++ b/include/linux/fdtable.h
@@ -57,7 +57,14 @@ struct files_struct {
57 struct file * fd_array[NR_OPEN_DEFAULT]; 57 struct file * fd_array[NR_OPEN_DEFAULT];
58}; 58};
59 59
60#define files_fdtable(files) (rcu_dereference((files)->fdt)) 60#define rcu_dereference_check_fdtable(files, fdtfd) \
61 (rcu_dereference_check((fdtfd), \
62 rcu_read_lock_held() || \
63 lockdep_is_held(&(files)->file_lock) || \
64 atomic_read(&(files)->count) == 1))
65
66#define files_fdtable(files) \
67 (rcu_dereference_check_fdtable((files), (files)->fdt))
61 68
62struct file_operations; 69struct file_operations;
63struct vfsmount; 70struct vfsmount;
@@ -78,7 +85,7 @@ static inline struct file * fcheck_files(struct files_struct *files, unsigned in
78 struct fdtable *fdt = files_fdtable(files); 85 struct fdtable *fdt = files_fdtable(files);
79 86
80 if (fd < fdt->max_fds) 87 if (fd < fdt->max_fds)
81 file = rcu_dereference(fdt->fd[fd]); 88 file = rcu_dereference_check_fdtable(files, fdt->fd[fd]);
82 return file; 89 return file;
83} 90}
84 91
diff --git a/include/linux/fib_rules.h b/include/linux/fib_rules.h
index 87b606b63f1e..51da65b68b85 100644
--- a/include/linux/fib_rules.h
+++ b/include/linux/fib_rules.h
@@ -8,13 +8,14 @@
8#define FIB_RULE_PERMANENT 0x00000001 8#define FIB_RULE_PERMANENT 0x00000001
9#define FIB_RULE_INVERT 0x00000002 9#define FIB_RULE_INVERT 0x00000002
10#define FIB_RULE_UNRESOLVED 0x00000004 10#define FIB_RULE_UNRESOLVED 0x00000004
11#define FIB_RULE_DEV_DETACHED 0x00000008 11#define FIB_RULE_IIF_DETACHED 0x00000008
12#define FIB_RULE_DEV_DETACHED FIB_RULE_IIF_DETACHED
13#define FIB_RULE_OIF_DETACHED 0x00000010
12 14
13/* try to find source address in routing lookups */ 15/* try to find source address in routing lookups */
14#define FIB_RULE_FIND_SADDR 0x00010000 16#define FIB_RULE_FIND_SADDR 0x00010000
15 17
16struct fib_rule_hdr 18struct fib_rule_hdr {
17{
18 __u8 family; 19 __u8 family;
19 __u8 dst_len; 20 __u8 dst_len;
20 __u8 src_len; 21 __u8 src_len;
@@ -28,12 +29,12 @@ struct fib_rule_hdr
28 __u32 flags; 29 __u32 flags;
29}; 30};
30 31
31enum 32enum {
32{
33 FRA_UNSPEC, 33 FRA_UNSPEC,
34 FRA_DST, /* destination address */ 34 FRA_DST, /* destination address */
35 FRA_SRC, /* source address */ 35 FRA_SRC, /* source address */
36 FRA_IFNAME, /* interface name */ 36 FRA_IIFNAME, /* interface name */
37#define FRA_IFNAME FRA_IIFNAME
37 FRA_GOTO, /* target to jump to (FR_ACT_GOTO) */ 38 FRA_GOTO, /* target to jump to (FR_ACT_GOTO) */
38 FRA_UNUSED2, 39 FRA_UNUSED2,
39 FRA_PRIORITY, /* priority/preference */ 40 FRA_PRIORITY, /* priority/preference */
@@ -47,13 +48,13 @@ enum
47 FRA_UNUSED8, 48 FRA_UNUSED8,
48 FRA_TABLE, /* Extended table id */ 49 FRA_TABLE, /* Extended table id */
49 FRA_FWMASK, /* mask for netfilter mark */ 50 FRA_FWMASK, /* mask for netfilter mark */
51 FRA_OIFNAME,
50 __FRA_MAX 52 __FRA_MAX
51}; 53};
52 54
53#define FRA_MAX (__FRA_MAX - 1) 55#define FRA_MAX (__FRA_MAX - 1)
54 56
55enum 57enum {
56{
57 FR_ACT_UNSPEC, 58 FR_ACT_UNSPEC,
58 FR_ACT_TO_TBL, /* Pass to fixed table */ 59 FR_ACT_TO_TBL, /* Pass to fixed table */
59 FR_ACT_GOTO, /* Jump to another rule */ 60 FR_ACT_GOTO, /* Jump to another rule */
diff --git a/include/linux/fiemap.h b/include/linux/fiemap.h
index 934e22d65801..d830747f5c0b 100644
--- a/include/linux/fiemap.h
+++ b/include/linux/fiemap.h
@@ -62,5 +62,7 @@ struct fiemap {
62#define FIEMAP_EXTENT_MERGED 0x00001000 /* File does not natively 62#define FIEMAP_EXTENT_MERGED 0x00001000 /* File does not natively
63 * support extents. Result 63 * support extents. Result
64 * merged for efficiency. */ 64 * merged for efficiency. */
65#define FIEMAP_EXTENT_SHARED 0x00002000 /* Space shared with other
66 * files. */
65 67
66#endif /* _LINUX_FIEMAP_H */ 68#endif /* _LINUX_FIEMAP_H */
diff --git a/include/linux/file.h b/include/linux/file.h
index 335a0a5c316e..5555508fd517 100644
--- a/include/linux/file.h
+++ b/include/linux/file.h
@@ -18,11 +18,9 @@ extern void drop_file_write_access(struct file *file);
18struct file_operations; 18struct file_operations;
19struct vfsmount; 19struct vfsmount;
20struct dentry; 20struct dentry;
21extern int init_file(struct file *, struct vfsmount *mnt, 21struct path;
22 struct dentry *dentry, fmode_t mode, 22extern struct file *alloc_file(struct path *, fmode_t mode,
23 const struct file_operations *fop); 23 const struct file_operations *fop);
24extern struct file *alloc_file(struct vfsmount *, struct dentry *dentry,
25 fmode_t mode, const struct file_operations *fop);
26 24
27static inline void fput_light(struct file *file, int fput_needed) 25static inline void fput_light(struct file *file, int fput_needed)
28{ 26{
diff --git a/include/linux/filter.h b/include/linux/filter.h
index 1354aaf6abbe..29a0e3db9f43 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -23,16 +23,14 @@
23 * the BPF code definitions which need to match so you can share filters 23 * the BPF code definitions which need to match so you can share filters
24 */ 24 */
25 25
26struct sock_filter /* Filter block */ 26struct sock_filter { /* Filter block */
27{
28 __u16 code; /* Actual filter code */ 27 __u16 code; /* Actual filter code */
29 __u8 jt; /* Jump true */ 28 __u8 jt; /* Jump true */
30 __u8 jf; /* Jump false */ 29 __u8 jf; /* Jump false */
31 __u32 k; /* Generic multiuse field */ 30 __u32 k; /* Generic multiuse field */
32}; 31};
33 32
34struct sock_fprog /* Required for SO_ATTACH_FILTER. */ 33struct sock_fprog { /* Required for SO_ATTACH_FILTER. */
35{
36 unsigned short len; /* Number of filter blocks */ 34 unsigned short len; /* Number of filter blocks */
37 struct sock_filter __user *filter; 35 struct sock_filter __user *filter;
38}; 36};
@@ -123,7 +121,9 @@ struct sock_fprog /* Required for SO_ATTACH_FILTER. */
123#define SKF_AD_IFINDEX 8 121#define SKF_AD_IFINDEX 8
124#define SKF_AD_NLATTR 12 122#define SKF_AD_NLATTR 12
125#define SKF_AD_NLATTR_NEST 16 123#define SKF_AD_NLATTR_NEST 16
126#define SKF_AD_MAX 20 124#define SKF_AD_MARK 20
125#define SKF_AD_QUEUE 24
126#define SKF_AD_MAX 28
127#define SKF_NET_OFF (-0x100000) 127#define SKF_NET_OFF (-0x100000)
128#define SKF_LL_OFF (-0x200000) 128#define SKF_LL_OFF (-0x200000)
129 129
diff --git a/include/linux/firewire-cdev.h b/include/linux/firewire-cdev.h
index c6b3ca3af6df..68f883b30a53 100644
--- a/include/linux/firewire-cdev.h
+++ b/include/linux/firewire-cdev.h
@@ -1,21 +1,26 @@
1/* 1/*
2 * Char device interface. 2 * Char device interface.
3 * 3 *
4 * Copyright (C) 2005-2006 Kristian Hoegsberg <krh@bitplanet.net> 4 * Copyright (C) 2005-2007 Kristian Hoegsberg <krh@bitplanet.net>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * it under the terms of the GNU General Public License as published by 7 * copy of this software and associated documentation files (the "Software"),
8 * the Free Software Foundation; either version 2 of the License, or 8 * to deal in the Software without restriction, including without limitation
9 * (at your option) any later version. 9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * 10 * and/or sell copies of the Software, and to permit persons to whom the
11 * This program is distributed in the hope that it will be useful, 11 * Software is furnished to do so, subject to the following conditions:
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * The above copyright notice and this permission notice (including the next
14 * GNU General Public License for more details. 14 * paragraph) shall be included in all copies or substantial portions of the
15 * 15 * Software.
16 * You should have received a copy of the GNU General Public License 16 *
17 * along with this program; if not, write to the Free Software Foundation, 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 * DEALINGS IN THE SOFTWARE.
19 */ 24 */
20 25
21#ifndef _LINUX_FIREWIRE_CDEV_H 26#ifndef _LINUX_FIREWIRE_CDEV_H
@@ -248,13 +253,20 @@ union fw_cdev_event {
248#define FW_CDEV_IOC_SEND_BROADCAST_REQUEST _IOW('#', 0x12, struct fw_cdev_send_request) 253#define FW_CDEV_IOC_SEND_BROADCAST_REQUEST _IOW('#', 0x12, struct fw_cdev_send_request)
249#define FW_CDEV_IOC_SEND_STREAM_PACKET _IOW('#', 0x13, struct fw_cdev_send_stream_packet) 254#define FW_CDEV_IOC_SEND_STREAM_PACKET _IOW('#', 0x13, struct fw_cdev_send_stream_packet)
250 255
256/* available since kernel version 2.6.34 */
257#define FW_CDEV_IOC_GET_CYCLE_TIMER2 _IOWR('#', 0x14, struct fw_cdev_get_cycle_timer2)
258
251/* 259/*
252 * FW_CDEV_VERSION History 260 * FW_CDEV_VERSION History
253 * 1 (2.6.22) - initial version 261 * 1 (2.6.22) - initial version
254 * 2 (2.6.30) - changed &fw_cdev_event_iso_interrupt.header if 262 * 2 (2.6.30) - changed &fw_cdev_event_iso_interrupt.header if
255 * &fw_cdev_create_iso_context.header_size is 8 or more 263 * &fw_cdev_create_iso_context.header_size is 8 or more
264 * (2.6.32) - added time stamp to xmit &fw_cdev_event_iso_interrupt
265 * (2.6.33) - IR has always packet-per-buffer semantics now, not one of
266 * dual-buffer or packet-per-buffer depending on hardware
267 * 3 (2.6.34) - made &fw_cdev_get_cycle_timer reliable
256 */ 268 */
257#define FW_CDEV_VERSION 2 269#define FW_CDEV_VERSION 3
258 270
259/** 271/**
260 * struct fw_cdev_get_info - General purpose information ioctl 272 * struct fw_cdev_get_info - General purpose information ioctl
@@ -340,6 +352,9 @@ struct fw_cdev_send_response {
340 * The @closure field is passed back to userspace in the response event. 352 * The @closure field is passed back to userspace in the response event.
341 * The @handle field is an out parameter, returning a handle to the allocated 353 * The @handle field is an out parameter, returning a handle to the allocated
342 * range to be used for later deallocation of the range. 354 * range to be used for later deallocation of the range.
355 *
356 * The address range is allocated on all local nodes. The address allocation
357 * is exclusive except for the FCP command and response registers.
343 */ 358 */
344struct fw_cdev_allocate { 359struct fw_cdev_allocate {
345 __u64 offset; 360 __u64 offset;
@@ -377,7 +392,7 @@ struct fw_cdev_initiate_bus_reset {
377 * @immediate: If non-zero, immediate key to insert before pointer 392 * @immediate: If non-zero, immediate key to insert before pointer
378 * @key: Upper 8 bits of root directory pointer 393 * @key: Upper 8 bits of root directory pointer
379 * @data: Userspace pointer to contents of descriptor block 394 * @data: Userspace pointer to contents of descriptor block
380 * @length: Length of descriptor block data, in bytes 395 * @length: Length of descriptor block data, in quadlets
381 * @handle: Handle to the descriptor, written by the kernel 396 * @handle: Handle to the descriptor, written by the kernel
382 * 397 *
383 * Add a descriptor block and optionally a preceding immediate key to the local 398 * Add a descriptor block and optionally a preceding immediate key to the local
@@ -391,6 +406,8 @@ struct fw_cdev_initiate_bus_reset {
391 * If not 0, the @immediate field specifies an immediate key which will be 406 * If not 0, the @immediate field specifies an immediate key which will be
392 * inserted before the root directory pointer. 407 * inserted before the root directory pointer.
393 * 408 *
409 * @immediate, @key, and @data array elements are CPU-endian quadlets.
410 *
394 * If successful, the kernel adds the descriptor and writes back a handle to the 411 * If successful, the kernel adds the descriptor and writes back a handle to the
395 * kernel-side object to be used for later removal of the descriptor block and 412 * kernel-side object to be used for later removal of the descriptor block and
396 * immediate key. 413 * immediate key.
@@ -426,7 +443,7 @@ struct fw_cdev_remove_descriptor {
426 * @type: %FW_CDEV_ISO_CONTEXT_TRANSMIT or %FW_CDEV_ISO_CONTEXT_RECEIVE 443 * @type: %FW_CDEV_ISO_CONTEXT_TRANSMIT or %FW_CDEV_ISO_CONTEXT_RECEIVE
427 * @header_size: Header size to strip for receive contexts 444 * @header_size: Header size to strip for receive contexts
428 * @channel: Channel to bind to 445 * @channel: Channel to bind to
429 * @speed: Speed to transmit at 446 * @speed: Speed for transmit contexts
430 * @closure: To be returned in &fw_cdev_event_iso_interrupt 447 * @closure: To be returned in &fw_cdev_event_iso_interrupt
431 * @handle: Handle to context, written back by kernel 448 * @handle: Handle to context, written back by kernel
432 * 449 *
@@ -439,6 +456,9 @@ struct fw_cdev_remove_descriptor {
439 * If a context was successfully created, the kernel writes back a handle to the 456 * If a context was successfully created, the kernel writes back a handle to the
440 * context, which must be passed in for subsequent operations on that context. 457 * context, which must be passed in for subsequent operations on that context.
441 * 458 *
459 * For receive contexts, @header_size must be at least 4 and must be a multiple
460 * of 4.
461 *
442 * Note that the effect of a @header_size > 4 depends on 462 * Note that the effect of a @header_size > 4 depends on
443 * &fw_cdev_get_info.version, as documented at &fw_cdev_event_iso_interrupt. 463 * &fw_cdev_get_info.version, as documented at &fw_cdev_event_iso_interrupt.
444 */ 464 */
@@ -469,10 +489,34 @@ struct fw_cdev_create_iso_context {
469 * 489 *
470 * &struct fw_cdev_iso_packet is used to describe isochronous packet queues. 490 * &struct fw_cdev_iso_packet is used to describe isochronous packet queues.
471 * 491 *
472 * Use the FW_CDEV_ISO_ macros to fill in @control. The sy and tag fields are 492 * Use the FW_CDEV_ISO_ macros to fill in @control.
473 * specified by IEEE 1394a and IEC 61883. 493 *
474 * 494 * For transmit packets, the header length must be a multiple of 4 and specifies
475 * FIXME - finish this documentation 495 * the numbers of bytes in @header that will be prepended to the packet's
496 * payload; these bytes are copied into the kernel and will not be accessed
497 * after the ioctl has returned. The sy and tag fields are copied to the iso
498 * packet header (these fields are specified by IEEE 1394a and IEC 61883-1).
499 * The skip flag specifies that no packet is to be sent in a frame; when using
500 * this, all other fields except the interrupt flag must be zero.
501 *
502 * For receive packets, the header length must be a multiple of the context's
503 * header size; if the header length is larger than the context's header size,
504 * multiple packets are queued for this entry. The sy and tag fields are
505 * ignored. If the sync flag is set, the context drops all packets until
506 * a packet with a matching sy field is received (the sync value to wait for is
507 * specified in the &fw_cdev_start_iso structure). The payload length defines
508 * how many payload bytes can be received for one packet (in addition to payload
509 * quadlets that have been defined as headers and are stripped and returned in
510 * the &fw_cdev_event_iso_interrupt structure). If more bytes are received, the
511 * additional bytes are dropped. If less bytes are received, the remaining
512 * bytes in this part of the payload buffer will not be written to, not even by
513 * the next packet, i.e., packets received in consecutive frames will not
514 * necessarily be consecutive in memory. If an entry has queued multiple
515 * packets, the payload length is divided equally among them.
516 *
517 * When a packet with the interrupt flag set has been completed, the
518 * &fw_cdev_event_iso_interrupt event will be sent. An entry that has queued
519 * multiple receive packets is completed when its last packet is completed.
476 */ 520 */
477struct fw_cdev_iso_packet { 521struct fw_cdev_iso_packet {
478 __u32 control; 522 __u32 control;
@@ -489,7 +533,7 @@ struct fw_cdev_iso_packet {
489 * Queue a number of isochronous packets for reception or transmission. 533 * Queue a number of isochronous packets for reception or transmission.
490 * This ioctl takes a pointer to an array of &fw_cdev_iso_packet structs, 534 * This ioctl takes a pointer to an array of &fw_cdev_iso_packet structs,
491 * which describe how to transmit from or receive into a contiguous region 535 * which describe how to transmit from or receive into a contiguous region
492 * of a mmap()'ed payload buffer. As part of the packet descriptors, 536 * of a mmap()'ed payload buffer. As part of transmit packet descriptors,
493 * a series of headers can be supplied, which will be prepended to the 537 * a series of headers can be supplied, which will be prepended to the
494 * payload during DMA. 538 * payload during DMA.
495 * 539 *
@@ -539,14 +583,18 @@ struct fw_cdev_stop_iso {
539/** 583/**
540 * struct fw_cdev_get_cycle_timer - read cycle timer register 584 * struct fw_cdev_get_cycle_timer - read cycle timer register
541 * @local_time: system time, in microseconds since the Epoch 585 * @local_time: system time, in microseconds since the Epoch
542 * @cycle_timer: isochronous cycle timer, as per OHCI 1.1 clause 5.13 586 * @cycle_timer: Cycle Time register contents
543 * 587 *
544 * The %FW_CDEV_IOC_GET_CYCLE_TIMER ioctl reads the isochronous cycle timer 588 * The %FW_CDEV_IOC_GET_CYCLE_TIMER ioctl reads the isochronous cycle timer
545 * and also the system clock. This allows to express the receive time of an 589 * and also the system clock (%CLOCK_REALTIME). This allows to express the
546 * isochronous packet as a system time with microsecond accuracy. 590 * receive time of an isochronous packet as a system time.
547 * 591 *
548 * @cycle_timer consists of 7 bits cycleSeconds, 13 bits cycleCount, and 592 * @cycle_timer consists of 7 bits cycleSeconds, 13 bits cycleCount, and
549 * 12 bits cycleOffset, in host byte order. 593 * 12 bits cycleOffset, in host byte order. Cf. the Cycle Time register
594 * per IEEE 1394 or Isochronous Cycle Timer register per OHCI-1394.
595 *
596 * In version 1 and 2 of the ABI, this ioctl returned unreliable (non-
597 * monotonic) @cycle_timer values on certain controllers.
550 */ 598 */
551struct fw_cdev_get_cycle_timer { 599struct fw_cdev_get_cycle_timer {
552 __u64 local_time; 600 __u64 local_time;
@@ -554,6 +602,25 @@ struct fw_cdev_get_cycle_timer {
554}; 602};
555 603
556/** 604/**
605 * struct fw_cdev_get_cycle_timer2 - read cycle timer register
606 * @tv_sec: system time, seconds
607 * @tv_nsec: system time, sub-seconds part in nanoseconds
608 * @clk_id: input parameter, clock from which to get the system time
609 * @cycle_timer: Cycle Time register contents
610 *
611 * The %FW_CDEV_IOC_GET_CYCLE_TIMER2 works like
612 * %FW_CDEV_IOC_GET_CYCLE_TIMER but lets you choose a clock like with POSIX'
613 * clock_gettime function. Supported @clk_id values are POSIX' %CLOCK_REALTIME
614 * and %CLOCK_MONOTONIC and Linux' %CLOCK_MONOTONIC_RAW.
615 */
616struct fw_cdev_get_cycle_timer2 {
617 __s64 tv_sec;
618 __s32 tv_nsec;
619 __s32 clk_id;
620 __u32 cycle_timer;
621};
622
623/**
557 * struct fw_cdev_allocate_iso_resource - (De)allocate a channel or bandwidth 624 * struct fw_cdev_allocate_iso_resource - (De)allocate a channel or bandwidth
558 * @closure: Passed back to userspace in correponding iso resource events 625 * @closure: Passed back to userspace in correponding iso resource events
559 * @channels: Isochronous channels of which one is to be (de)allocated 626 * @channels: Isochronous channels of which one is to be (de)allocated
@@ -585,8 +652,8 @@ struct fw_cdev_get_cycle_timer {
585 * instead of allocated. 652 * instead of allocated.
586 * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation. 653 * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation.
587 * 654 *
588 * To summarize, %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE allocates iso resources 655 * To summarize, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE allocates iso resources
589 * for the lifetime of the fd or handle. 656 * for the lifetime of the fd or @handle.
590 * In contrast, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE allocates iso resources 657 * In contrast, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE allocates iso resources
591 * for the duration of a bus generation. 658 * for the duration of a bus generation.
592 * 659 *
diff --git a/include/linux/firewire-constants.h b/include/linux/firewire-constants.h
index b316770a43fd..9b4bb5fbba4b 100644
--- a/include/linux/firewire-constants.h
+++ b/include/linux/firewire-constants.h
@@ -1,3 +1,28 @@
1/*
2 * IEEE 1394 constants.
3 *
4 * Copyright (C) 2005-2007 Kristian Hoegsberg <krh@bitplanet.net>
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 * DEALINGS IN THE SOFTWARE.
24 */
25
1#ifndef _LINUX_FIREWIRE_CONSTANTS_H 26#ifndef _LINUX_FIREWIRE_CONSTANTS_H
2#define _LINUX_FIREWIRE_CONSTANTS_H 27#define _LINUX_FIREWIRE_CONSTANTS_H
3 28
@@ -21,7 +46,7 @@
21#define EXTCODE_WRAP_ADD 0x6 46#define EXTCODE_WRAP_ADD 0x6
22#define EXTCODE_VENDOR_DEPENDENT 0x7 47#define EXTCODE_VENDOR_DEPENDENT 0x7
23 48
24/* Juju specific tcodes */ 49/* Linux firewire-core (Juju) specific tcodes */
25#define TCODE_LOCK_MASK_SWAP (0x10 | EXTCODE_MASK_SWAP) 50#define TCODE_LOCK_MASK_SWAP (0x10 | EXTCODE_MASK_SWAP)
26#define TCODE_LOCK_COMPARE_SWAP (0x10 | EXTCODE_COMPARE_SWAP) 51#define TCODE_LOCK_COMPARE_SWAP (0x10 | EXTCODE_COMPARE_SWAP)
27#define TCODE_LOCK_FETCH_ADD (0x10 | EXTCODE_FETCH_ADD) 52#define TCODE_LOCK_FETCH_ADD (0x10 | EXTCODE_FETCH_ADD)
@@ -36,7 +61,7 @@
36#define RCODE_TYPE_ERROR 0x6 61#define RCODE_TYPE_ERROR 0x6
37#define RCODE_ADDRESS_ERROR 0x7 62#define RCODE_ADDRESS_ERROR 0x7
38 63
39/* Juju specific rcodes */ 64/* Linux firewire-core (Juju) specific rcodes */
40#define RCODE_SEND_ERROR 0x10 65#define RCODE_SEND_ERROR 0x10
41#define RCODE_CANCELLED 0x11 66#define RCODE_CANCELLED 0x11
42#define RCODE_BUSY 0x12 67#define RCODE_BUSY 0x12
diff --git a/include/linux/firewire.h b/include/linux/firewire.h
index 7e1d4dec83e7..4bd94bf5e739 100644
--- a/include/linux/firewire.h
+++ b/include/linux/firewire.h
@@ -20,20 +20,6 @@
20#define fw_notify(s, args...) printk(KERN_NOTICE KBUILD_MODNAME ": " s, ## args) 20#define fw_notify(s, args...) printk(KERN_NOTICE KBUILD_MODNAME ": " s, ## args)
21#define fw_error(s, args...) printk(KERN_ERR KBUILD_MODNAME ": " s, ## args) 21#define fw_error(s, args...) printk(KERN_ERR KBUILD_MODNAME ": " s, ## args)
22 22
23static inline void fw_memcpy_from_be32(void *_dst, void *_src, size_t size)
24{
25 u32 *dst = _dst;
26 __be32 *src = _src;
27 int i;
28
29 for (i = 0; i < size / 4; i++)
30 dst[i] = be32_to_cpu(src[i]);
31}
32
33static inline void fw_memcpy_to_be32(void *_dst, void *_src, size_t size)
34{
35 fw_memcpy_from_be32(_dst, _src, size);
36}
37#define CSR_REGISTER_BASE 0xfffff0000000ULL 23#define CSR_REGISTER_BASE 0xfffff0000000ULL
38 24
39/* register offsets are relative to CSR_REGISTER_BASE */ 25/* register offsets are relative to CSR_REGISTER_BASE */
@@ -79,12 +65,13 @@ static inline void fw_memcpy_to_be32(void *_dst, void *_src, size_t size)
79#define CSR_DIRECTORY_ID 0x20 65#define CSR_DIRECTORY_ID 0x20
80 66
81struct fw_csr_iterator { 67struct fw_csr_iterator {
82 u32 *p; 68 const u32 *p;
83 u32 *end; 69 const u32 *end;
84}; 70};
85 71
86void fw_csr_iterator_init(struct fw_csr_iterator *ci, u32 *p); 72void fw_csr_iterator_init(struct fw_csr_iterator *ci, const u32 *p);
87int fw_csr_iterator_next(struct fw_csr_iterator *ci, int *key, int *value); 73int fw_csr_iterator_next(struct fw_csr_iterator *ci, int *key, int *value);
74int fw_csr_string(const u32 *directory, int key, char *buf, size_t size);
88 75
89extern struct bus_type fw_bus_type; 76extern struct bus_type fw_bus_type;
90 77
@@ -131,7 +118,7 @@ struct fw_card {
131 118
132 bool broadcast_channel_allocated; 119 bool broadcast_channel_allocated;
133 u32 broadcast_channel; 120 u32 broadcast_channel;
134 u32 topology_map[(CSR_TOPOLOGY_MAP_END - CSR_TOPOLOGY_MAP) / 4]; 121 __be32 topology_map[(CSR_TOPOLOGY_MAP_END - CSR_TOPOLOGY_MAP) / 4];
135}; 122};
136 123
137struct fw_attribute_group { 124struct fw_attribute_group {
@@ -176,7 +163,7 @@ struct fw_device {
176 struct mutex client_list_mutex; 163 struct mutex client_list_mutex;
177 struct list_head client_list; 164 struct list_head client_list;
178 165
179 u32 *config_rom; 166 const u32 *config_rom;
180 size_t config_rom_length; 167 size_t config_rom_length;
181 int config_rom_retries; 168 int config_rom_retries;
182 unsigned is_local:1; 169 unsigned is_local:1;
@@ -218,7 +205,7 @@ int fw_device_enable_phys_dma(struct fw_device *device);
218 */ 205 */
219struct fw_unit { 206struct fw_unit {
220 struct device device; 207 struct device device;
221 u32 *directory; 208 const u32 *directory;
222 struct fw_attribute_group attribute_group; 209 struct fw_attribute_group attribute_group;
223}; 210};
224 211
@@ -262,8 +249,8 @@ typedef void (*fw_transaction_callback_t)(struct fw_card *card, int rcode,
262 void *data, size_t length, 249 void *data, size_t length,
263 void *callback_data); 250 void *callback_data);
264/* 251/*
265 * Important note: The callback must guarantee that either fw_send_response() 252 * Important note: Except for the FCP registers, the callback must guarantee
266 * or kfree() is called on the @request. 253 * that either fw_send_response() or kfree() is called on the @request.
267 */ 254 */
268typedef void (*fw_address_callback_t)(struct fw_card *card, 255typedef void (*fw_address_callback_t)(struct fw_card *card,
269 struct fw_request *request, 256 struct fw_request *request,
@@ -281,6 +268,7 @@ struct fw_packet {
281 void *payload; 268 void *payload;
282 size_t payload_length; 269 size_t payload_length;
283 dma_addr_t payload_bus; 270 dma_addr_t payload_bus;
271 bool payload_mapped;
284 u32 timestamp; 272 u32 timestamp;
285 273
286 /* 274 /*
diff --git a/include/linux/firmware-map.h b/include/linux/firmware-map.h
index 875451f1373a..c6dcc1dfe781 100644
--- a/include/linux/firmware-map.h
+++ b/include/linux/firmware-map.h
@@ -24,17 +24,17 @@
24 */ 24 */
25#ifdef CONFIG_FIRMWARE_MEMMAP 25#ifdef CONFIG_FIRMWARE_MEMMAP
26 26
27int firmware_map_add(u64 start, u64 end, const char *type);
28int firmware_map_add_early(u64 start, u64 end, const char *type); 27int firmware_map_add_early(u64 start, u64 end, const char *type);
28int firmware_map_add_hotplug(u64 start, u64 end, const char *type);
29 29
30#else /* CONFIG_FIRMWARE_MEMMAP */ 30#else /* CONFIG_FIRMWARE_MEMMAP */
31 31
32static inline int firmware_map_add(u64 start, u64 end, const char *type) 32static inline int firmware_map_add_early(u64 start, u64 end, const char *type)
33{ 33{
34 return 0; 34 return 0;
35} 35}
36 36
37static inline int firmware_map_add_early(u64 start, u64 end, const char *type) 37static inline int firmware_map_add_hotplug(u64 start, u64 end, const char *type)
38{ 38{
39 return 0; 39 return 0;
40} 40}
diff --git a/include/linux/firmware.h b/include/linux/firmware.h
index d31544628436..043811f0d277 100644
--- a/include/linux/firmware.h
+++ b/include/linux/firmware.h
@@ -4,6 +4,7 @@
4#include <linux/module.h> 4#include <linux/module.h>
5#include <linux/types.h> 5#include <linux/types.h>
6#include <linux/compiler.h> 6#include <linux/compiler.h>
7#include <linux/gfp.h>
7 8
8#define FW_ACTION_NOHOTPLUG 0 9#define FW_ACTION_NOHOTPLUG 0
9#define FW_ACTION_HOTPLUG 1 10#define FW_ACTION_HOTPLUG 1
@@ -38,7 +39,7 @@ int request_firmware(const struct firmware **fw, const char *name,
38 struct device *device); 39 struct device *device);
39int request_firmware_nowait( 40int request_firmware_nowait(
40 struct module *module, int uevent, 41 struct module *module, int uevent,
41 const char *name, struct device *device, void *context, 42 const char *name, struct device *device, gfp_t gfp, void *context,
42 void (*cont)(const struct firmware *fw, void *context)); 43 void (*cont)(const struct firmware *fw, void *context));
43 44
44void release_firmware(const struct firmware *fw); 45void release_firmware(const struct firmware *fw);
@@ -51,7 +52,7 @@ static inline int request_firmware(const struct firmware **fw,
51} 52}
52static inline int request_firmware_nowait( 53static inline int request_firmware_nowait(
53 struct module *module, int uevent, 54 struct module *module, int uevent,
54 const char *name, struct device *device, void *context, 55 const char *name, struct device *device, gfp_t gfp, void *context,
55 void (*cont)(const struct firmware *fw, void *context)) 56 void (*cont)(const struct firmware *fw, void *context))
56{ 57{
57 return -EINVAL; 58 return -EINVAL;
diff --git a/include/linux/freezer.h b/include/linux/freezer.h
index 5a361f85cfec..da7e52b099f3 100644
--- a/include/linux/freezer.h
+++ b/include/linux/freezer.h
@@ -64,9 +64,12 @@ extern bool freeze_task(struct task_struct *p, bool sig_only);
64extern void cancel_freezing(struct task_struct *p); 64extern void cancel_freezing(struct task_struct *p);
65 65
66#ifdef CONFIG_CGROUP_FREEZER 66#ifdef CONFIG_CGROUP_FREEZER
67extern int cgroup_frozen(struct task_struct *task); 67extern int cgroup_freezing_or_frozen(struct task_struct *task);
68#else /* !CONFIG_CGROUP_FREEZER */ 68#else /* !CONFIG_CGROUP_FREEZER */
69static inline int cgroup_frozen(struct task_struct *task) { return 0; } 69static inline int cgroup_freezing_or_frozen(struct task_struct *task)
70{
71 return 0;
72}
70#endif /* !CONFIG_CGROUP_FREEZER */ 73#endif /* !CONFIG_CGROUP_FREEZER */
71 74
72/* 75/*
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 5c7e0ff370ba..894918440bc8 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -60,24 +60,24 @@ struct inodes_stat_t {
60 */ 60 */
61 61
62/* file is open for reading */ 62/* file is open for reading */
63#define FMODE_READ ((__force fmode_t)1) 63#define FMODE_READ ((__force fmode_t)0x1)
64/* file is open for writing */ 64/* file is open for writing */
65#define FMODE_WRITE ((__force fmode_t)2) 65#define FMODE_WRITE ((__force fmode_t)0x2)
66/* file is seekable */ 66/* file is seekable */
67#define FMODE_LSEEK ((__force fmode_t)4) 67#define FMODE_LSEEK ((__force fmode_t)0x4)
68/* file can be accessed using pread */ 68/* file can be accessed using pread */
69#define FMODE_PREAD ((__force fmode_t)8) 69#define FMODE_PREAD ((__force fmode_t)0x8)
70/* file can be accessed using pwrite */ 70/* file can be accessed using pwrite */
71#define FMODE_PWRITE ((__force fmode_t)16) 71#define FMODE_PWRITE ((__force fmode_t)0x10)
72/* File is opened for execution with sys_execve / sys_uselib */ 72/* File is opened for execution with sys_execve / sys_uselib */
73#define FMODE_EXEC ((__force fmode_t)32) 73#define FMODE_EXEC ((__force fmode_t)0x20)
74/* File is opened with O_NDELAY (only set for block devices) */ 74/* File is opened with O_NDELAY (only set for block devices) */
75#define FMODE_NDELAY ((__force fmode_t)64) 75#define FMODE_NDELAY ((__force fmode_t)0x40)
76/* File is opened with O_EXCL (only set for block devices) */ 76/* File is opened with O_EXCL (only set for block devices) */
77#define FMODE_EXCL ((__force fmode_t)128) 77#define FMODE_EXCL ((__force fmode_t)0x80)
78/* File is opened using open(.., 3, ..) and is writeable only for ioctls 78/* File is opened using open(.., 3, ..) and is writeable only for ioctls
79 (specialy hack for floppy.c) */ 79 (specialy hack for floppy.c) */
80#define FMODE_WRITE_IOCTL ((__force fmode_t)256) 80#define FMODE_WRITE_IOCTL ((__force fmode_t)0x100)
81 81
82/* 82/*
83 * Don't update ctime and mtime. 83 * Don't update ctime and mtime.
@@ -85,7 +85,10 @@ struct inodes_stat_t {
85 * Currently a special hack for the XFS open_by_handle ioctl, but we'll 85 * Currently a special hack for the XFS open_by_handle ioctl, but we'll
86 * hopefully graduate it to a proper O_CMTIME flag supported by open(2) soon. 86 * hopefully graduate it to a proper O_CMTIME flag supported by open(2) soon.
87 */ 87 */
88#define FMODE_NOCMTIME ((__force fmode_t)2048) 88#define FMODE_NOCMTIME ((__force fmode_t)0x800)
89
90/* Expect random access pattern */
91#define FMODE_RANDOM ((__force fmode_t)0x1000)
89 92
90/* 93/*
91 * The below are the various read and write types that we support. Some of 94 * The below are the various read and write types that we support. Some of
@@ -129,7 +132,7 @@ struct inodes_stat_t {
129 * WRITE_SYNC Like WRITE_SYNC_PLUG, but also unplugs the device 132 * WRITE_SYNC Like WRITE_SYNC_PLUG, but also unplugs the device
130 * immediately after submission. The write equivalent 133 * immediately after submission. The write equivalent
131 * of READ_SYNC. 134 * of READ_SYNC.
132 * WRITE_ODIRECT Special case write for O_DIRECT only. 135 * WRITE_ODIRECT_PLUG Special case write for O_DIRECT only.
133 * SWRITE_SYNC 136 * SWRITE_SYNC
134 * SWRITE_SYNC_PLUG Like WRITE_SYNC/WRITE_SYNC_PLUG, but locks the buffer. 137 * SWRITE_SYNC_PLUG Like WRITE_SYNC/WRITE_SYNC_PLUG, but locks the buffer.
135 * See SWRITE. 138 * See SWRITE.
@@ -151,7 +154,8 @@ struct inodes_stat_t {
151#define READ_META (READ | (1 << BIO_RW_META)) 154#define READ_META (READ | (1 << BIO_RW_META))
152#define WRITE_SYNC_PLUG (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE)) 155#define WRITE_SYNC_PLUG (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))
153#define WRITE_SYNC (WRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG)) 156#define WRITE_SYNC (WRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG))
154#define WRITE_ODIRECT (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG)) 157#define WRITE_ODIRECT_PLUG (WRITE | (1 << BIO_RW_SYNCIO))
158#define WRITE_META (WRITE | (1 << BIO_RW_META))
155#define SWRITE_SYNC_PLUG \ 159#define SWRITE_SYNC_PLUG \
156 (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE)) 160 (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))
157#define SWRITE_SYNC (SWRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG)) 161#define SWRITE_SYNC (SWRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG))
@@ -304,6 +308,7 @@ struct inodes_stat_t {
304#define BLKIOOPT _IO(0x12,121) 308#define BLKIOOPT _IO(0x12,121)
305#define BLKALIGNOFF _IO(0x12,122) 309#define BLKALIGNOFF _IO(0x12,122)
306#define BLKPBSZGET _IO(0x12,123) 310#define BLKPBSZGET _IO(0x12,123)
311#define BLKDISCARDZEROES _IO(0x12,124)
307 312
308#define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ 313#define BMAP_IOCTL 1 /* obsolete - kept for compatibility */
309#define FIBMAP _IO(0x00,1) /* bmap access */ 314#define FIBMAP _IO(0x00,1) /* bmap access */
@@ -728,6 +733,7 @@ struct inode {
728 uid_t i_uid; 733 uid_t i_uid;
729 gid_t i_gid; 734 gid_t i_gid;
730 dev_t i_rdev; 735 dev_t i_rdev;
736 unsigned int i_blkbits;
731 u64 i_version; 737 u64 i_version;
732 loff_t i_size; 738 loff_t i_size;
733#ifdef __NEED_I_SIZE_ORDERED 739#ifdef __NEED_I_SIZE_ORDERED
@@ -737,7 +743,6 @@ struct inode {
737 struct timespec i_mtime; 743 struct timespec i_mtime;
738 struct timespec i_ctime; 744 struct timespec i_ctime;
739 blkcnt_t i_blocks; 745 blkcnt_t i_blocks;
740 unsigned int i_blkbits;
741 unsigned short i_bytes; 746 unsigned short i_bytes;
742 umode_t i_mode; 747 umode_t i_mode;
743 spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ 748 spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */
@@ -1096,10 +1101,6 @@ struct file_lock {
1096 1101
1097extern void send_sigio(struct fown_struct *fown, int fd, int band); 1102extern void send_sigio(struct fown_struct *fown, int fd, int band);
1098 1103
1099/* fs/sync.c */
1100extern int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
1101 loff_t endbyte, unsigned int flags);
1102
1103#ifdef CONFIG_FILE_LOCKING 1104#ifdef CONFIG_FILE_LOCKING
1104extern int fcntl_getlk(struct file *, struct flock __user *); 1105extern int fcntl_getlk(struct file *, struct flock __user *);
1105extern int fcntl_setlk(unsigned int, struct file *, unsigned int, 1106extern int fcntl_setlk(unsigned int, struct file *, unsigned int,
@@ -1310,6 +1311,8 @@ extern int send_sigurg(struct fown_struct *fown);
1310#define MNT_FORCE 0x00000001 /* Attempt to forcibily umount */ 1311#define MNT_FORCE 0x00000001 /* Attempt to forcibily umount */
1311#define MNT_DETACH 0x00000002 /* Just detach from the tree */ 1312#define MNT_DETACH 0x00000002 /* Just detach from the tree */
1312#define MNT_EXPIRE 0x00000004 /* Mark for expiry */ 1313#define MNT_EXPIRE 0x00000004 /* Mark for expiry */
1314#define UMOUNT_NOFOLLOW 0x00000008 /* Don't follow symlink on umount */
1315#define UMOUNT_UNUSED 0x80000000 /* Flag guaranteed to be unused */
1313 1316
1314extern struct list_head super_blocks; 1317extern struct list_head super_blocks;
1315extern spinlock_t sb_lock; 1318extern spinlock_t sb_lock;
@@ -1319,9 +1322,9 @@ extern spinlock_t sb_lock;
1319struct super_block { 1322struct super_block {
1320 struct list_head s_list; /* Keep this first */ 1323 struct list_head s_list; /* Keep this first */
1321 dev_t s_dev; /* search index; _not_ kdev_t */ 1324 dev_t s_dev; /* search index; _not_ kdev_t */
1322 unsigned long s_blocksize;
1323 unsigned char s_blocksize_bits;
1324 unsigned char s_dirt; 1325 unsigned char s_dirt;
1326 unsigned char s_blocksize_bits;
1327 unsigned long s_blocksize;
1325 loff_t s_maxbytes; /* Max file size */ 1328 loff_t s_maxbytes; /* Max file size */
1326 struct file_system_type *s_type; 1329 struct file_system_type *s_type;
1327 const struct super_operations *s_op; 1330 const struct super_operations *s_op;
@@ -1362,16 +1365,16 @@ struct super_block {
1362 void *s_fs_info; /* Filesystem private info */ 1365 void *s_fs_info; /* Filesystem private info */
1363 fmode_t s_mode; 1366 fmode_t s_mode;
1364 1367
1368 /* Granularity of c/m/atime in ns.
1369 Cannot be worse than a second */
1370 u32 s_time_gran;
1371
1365 /* 1372 /*
1366 * The next field is for VFS *only*. No filesystems have any business 1373 * The next field is for VFS *only*. No filesystems have any business
1367 * even looking at it. You had been warned. 1374 * even looking at it. You had been warned.
1368 */ 1375 */
1369 struct mutex s_vfs_rename_mutex; /* Kludge */ 1376 struct mutex s_vfs_rename_mutex; /* Kludge */
1370 1377
1371 /* Granularity of c/m/atime in ns.
1372 Cannot be worse than a second */
1373 u32 s_time_gran;
1374
1375 /* 1378 /*
1376 * Filesystem subtype. If non-empty the filesystem type field 1379 * Filesystem subtype. If non-empty the filesystem type field
1377 * in /proc/mounts will be "type.subtype" 1380 * in /proc/mounts will be "type.subtype"
@@ -1560,7 +1563,7 @@ struct super_operations {
1560 void (*destroy_inode)(struct inode *); 1563 void (*destroy_inode)(struct inode *);
1561 1564
1562 void (*dirty_inode) (struct inode *); 1565 void (*dirty_inode) (struct inode *);
1563 int (*write_inode) (struct inode *, int); 1566 int (*write_inode) (struct inode *, struct writeback_control *wbc);
1564 void (*drop_inode) (struct inode *); 1567 void (*drop_inode) (struct inode *);
1565 void (*delete_inode) (struct inode *); 1568 void (*delete_inode) (struct inode *);
1566 void (*put_super) (struct super_block *); 1569 void (*put_super) (struct super_block *);
@@ -1592,7 +1595,7 @@ struct super_operations {
1592 * until that flag is cleared. I_WILL_FREE, I_FREEING and I_CLEAR are set at 1595 * until that flag is cleared. I_WILL_FREE, I_FREEING and I_CLEAR are set at
1593 * various stages of removing an inode. 1596 * various stages of removing an inode.
1594 * 1597 *
1595 * Two bits are used for locking and completion notification, I_LOCK and I_SYNC. 1598 * Two bits are used for locking and completion notification, I_NEW and I_SYNC.
1596 * 1599 *
1597 * I_DIRTY_SYNC Inode is dirty, but doesn't have to be written on 1600 * I_DIRTY_SYNC Inode is dirty, but doesn't have to be written on
1598 * fdatasync(). i_atime is the usual cause. 1601 * fdatasync(). i_atime is the usual cause.
@@ -1601,8 +1604,14 @@ struct super_operations {
1601 * don't have to write inode on fdatasync() when only 1604 * don't have to write inode on fdatasync() when only
1602 * mtime has changed in it. 1605 * mtime has changed in it.
1603 * I_DIRTY_PAGES Inode has dirty pages. Inode itself may be clean. 1606 * I_DIRTY_PAGES Inode has dirty pages. Inode itself may be clean.
1604 * I_NEW get_new_inode() sets i_state to I_LOCK|I_NEW. Both 1607 * I_NEW Serves as both a mutex and completion notification.
1605 * are cleared by unlock_new_inode(), called from iget(). 1608 * New inodes set I_NEW. If two processes both create
1609 * the same inode, one of them will release its inode and
1610 * wait for I_NEW to be released before returning.
1611 * Inodes in I_WILL_FREE, I_FREEING or I_CLEAR state can
1612 * also cause waiting on I_NEW, without I_NEW actually
1613 * being set. find_inode() uses this to prevent returning
1614 * nearly-dead inodes.
1606 * I_WILL_FREE Must be set when calling write_inode_now() if i_count 1615 * I_WILL_FREE Must be set when calling write_inode_now() if i_count
1607 * is zero. I_FREEING must be set when I_WILL_FREE is 1616 * is zero. I_FREEING must be set when I_WILL_FREE is
1608 * cleared. 1617 * cleared.
@@ -1616,35 +1625,23 @@ struct super_operations {
1616 * prohibited for many purposes. iget() must wait for 1625 * prohibited for many purposes. iget() must wait for
1617 * the inode to be completely released, then create it 1626 * the inode to be completely released, then create it
1618 * anew. Other functions will just ignore such inodes, 1627 * anew. Other functions will just ignore such inodes,
1619 * if appropriate. I_LOCK is used for waiting. 1628 * if appropriate. I_NEW is used for waiting.
1620 * 1629 *
1621 * I_LOCK Serves as both a mutex and completion notification. 1630 * I_SYNC Synchonized write of dirty inode data. The bits is
1622 * New inodes set I_LOCK. If two processes both create 1631 * set during data writeback, and cleared with a wakeup
1623 * the same inode, one of them will release its inode and 1632 * on the bit address once it is done.
1624 * wait for I_LOCK to be released before returning.
1625 * Inodes in I_WILL_FREE, I_FREEING or I_CLEAR state can
1626 * also cause waiting on I_LOCK, without I_LOCK actually
1627 * being set. find_inode() uses this to prevent returning
1628 * nearly-dead inodes.
1629 * I_SYNC Similar to I_LOCK, but limited in scope to writeback
1630 * of inode dirty data. Having a separate lock for this
1631 * purpose reduces latency and prevents some filesystem-
1632 * specific deadlocks.
1633 * 1633 *
1634 * Q: What is the difference between I_WILL_FREE and I_FREEING? 1634 * Q: What is the difference between I_WILL_FREE and I_FREEING?
1635 * Q: igrab() only checks on (I_FREEING|I_WILL_FREE). Should it also check on
1636 * I_CLEAR? If not, why?
1637 */ 1635 */
1638#define I_DIRTY_SYNC 1 1636#define I_DIRTY_SYNC 1
1639#define I_DIRTY_DATASYNC 2 1637#define I_DIRTY_DATASYNC 2
1640#define I_DIRTY_PAGES 4 1638#define I_DIRTY_PAGES 4
1641#define I_NEW 8 1639#define __I_NEW 3
1640#define I_NEW (1 << __I_NEW)
1642#define I_WILL_FREE 16 1641#define I_WILL_FREE 16
1643#define I_FREEING 32 1642#define I_FREEING 32
1644#define I_CLEAR 64 1643#define I_CLEAR 64
1645#define __I_LOCK 7 1644#define __I_SYNC 7
1646#define I_LOCK (1 << __I_LOCK)
1647#define __I_SYNC 8
1648#define I_SYNC (1 << __I_SYNC) 1645#define I_SYNC (1 << __I_SYNC)
1649 1646
1650#define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES) 1647#define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)
@@ -1805,7 +1802,8 @@ extern int may_umount(struct vfsmount *);
1805extern long do_mount(char *, char *, char *, unsigned long, void *); 1802extern long do_mount(char *, char *, char *, unsigned long, void *);
1806extern struct vfsmount *collect_mounts(struct path *); 1803extern struct vfsmount *collect_mounts(struct path *);
1807extern void drop_collected_mounts(struct vfsmount *); 1804extern void drop_collected_mounts(struct vfsmount *);
1808 1805extern int iterate_mounts(int (*)(struct vfsmount *, void *), void *,
1806 struct vfsmount *);
1809extern int vfs_statfs(struct dentry *, struct kstatfs *); 1807extern int vfs_statfs(struct dentry *, struct kstatfs *);
1810 1808
1811extern int current_umask(void); 1809extern int current_umask(void);
@@ -2069,12 +2067,6 @@ extern int invalidate_inodes(struct super_block *);
2069unsigned long invalidate_mapping_pages(struct address_space *mapping, 2067unsigned long invalidate_mapping_pages(struct address_space *mapping,
2070 pgoff_t start, pgoff_t end); 2068 pgoff_t start, pgoff_t end);
2071 2069
2072static inline unsigned long __deprecated
2073invalidate_inode_pages(struct address_space *mapping)
2074{
2075 return invalidate_mapping_pages(mapping, 0, ~0UL);
2076}
2077
2078static inline void invalidate_remote_inode(struct inode *inode) 2070static inline void invalidate_remote_inode(struct inode *inode)
2079{ 2071{
2080 if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || 2072 if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
@@ -2093,8 +2085,6 @@ extern int filemap_fdatawait_range(struct address_space *, loff_t lstart,
2093extern int filemap_write_and_wait(struct address_space *mapping); 2085extern int filemap_write_and_wait(struct address_space *mapping);
2094extern int filemap_write_and_wait_range(struct address_space *mapping, 2086extern int filemap_write_and_wait_range(struct address_space *mapping,
2095 loff_t lstart, loff_t lend); 2087 loff_t lstart, loff_t lend);
2096extern int wait_on_page_writeback_range(struct address_space *mapping,
2097 pgoff_t start, pgoff_t end);
2098extern int __filemap_fdatawrite_range(struct address_space *mapping, 2088extern int __filemap_fdatawrite_range(struct address_space *mapping,
2099 loff_t start, loff_t end, int sync_mode); 2089 loff_t start, loff_t end, int sync_mode);
2100extern int filemap_fdatawrite_range(struct address_space *mapping, 2090extern int filemap_fdatawrite_range(struct address_space *mapping,
@@ -2145,6 +2135,7 @@ extern struct file * open_exec(const char *);
2145 2135
2146/* fs/dcache.c -- generic fs support functions */ 2136/* fs/dcache.c -- generic fs support functions */
2147extern int is_subdir(struct dentry *, struct dentry *); 2137extern int is_subdir(struct dentry *, struct dentry *);
2138extern int path_is_under(struct path *, struct path *);
2148extern ino_t find_inode_number(struct dentry *, struct qstr *); 2139extern ino_t find_inode_number(struct dentry *, struct qstr *);
2149 2140
2150#include <linux/err.h> 2141#include <linux/err.h>
@@ -2193,7 +2184,6 @@ static inline void insert_inode_hash(struct inode *inode) {
2193 __insert_inode_hash(inode, inode->i_ino); 2184 __insert_inode_hash(inode, inode->i_ino);
2194} 2185}
2195 2186
2196extern struct file * get_empty_filp(void);
2197extern void file_move(struct file *f, struct list_head *list); 2187extern void file_move(struct file *f, struct list_head *list);
2198extern void file_kill(struct file *f); 2188extern void file_kill(struct file *f);
2199#ifdef CONFIG_BLOCK 2189#ifdef CONFIG_BLOCK
@@ -2225,6 +2215,7 @@ extern int generic_segment_checks(const struct iovec *iov,
2225/* fs/block_dev.c */ 2215/* fs/block_dev.c */
2226extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, 2216extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov,
2227 unsigned long nr_segs, loff_t pos); 2217 unsigned long nr_segs, loff_t pos);
2218extern int blkdev_fsync(struct file *filp, struct dentry *dentry, int datasync);
2228 2219
2229/* fs/splice.c */ 2220/* fs/splice.c */
2230extern ssize_t generic_file_splice_read(struct file *, loff_t *, 2221extern ssize_t generic_file_splice_read(struct file *, loff_t *,
@@ -2268,9 +2259,11 @@ ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
2268 int lock_type); 2259 int lock_type);
2269 2260
2270enum { 2261enum {
2271 DIO_LOCKING = 1, /* need locking between buffered and direct access */ 2262 /* need locking between buffered and direct access */
2272 DIO_NO_LOCKING, /* bdev; no locking at all between buffered/direct */ 2263 DIO_LOCKING = 0x01,
2273 DIO_OWN_LOCKING, /* filesystem locks buffered and direct internally */ 2264
2265 /* filesystem does not support filling holes */
2266 DIO_SKIP_HOLES = 0x02,
2274}; 2267};
2275 2268
2276static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, 2269static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb,
@@ -2279,7 +2272,8 @@ static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb,
2279 dio_iodone_t end_io) 2272 dio_iodone_t end_io)
2280{ 2273{
2281 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, 2274 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
2282 nr_segs, get_block, end_io, DIO_LOCKING); 2275 nr_segs, get_block, end_io,
2276 DIO_LOCKING | DIO_SKIP_HOLES);
2283} 2277}
2284 2278
2285static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb, 2279static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb,
@@ -2288,16 +2282,7 @@ static inline ssize_t blockdev_direct_IO_no_locking(int rw, struct kiocb *iocb,
2288 dio_iodone_t end_io) 2282 dio_iodone_t end_io)
2289{ 2283{
2290 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, 2284 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
2291 nr_segs, get_block, end_io, DIO_NO_LOCKING); 2285 nr_segs, get_block, end_io, 0);
2292}
2293
2294static inline ssize_t blockdev_direct_IO_own_locking(int rw, struct kiocb *iocb,
2295 struct inode *inode, struct block_device *bdev, const struct iovec *iov,
2296 loff_t offset, unsigned long nr_segs, get_block_t get_block,
2297 dio_iodone_t end_io)
2298{
2299 return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
2300 nr_segs, get_block, end_io, DIO_OWN_LOCKING);
2301} 2286}
2302#endif 2287#endif
2303 2288
@@ -2317,6 +2302,7 @@ extern const struct inode_operations page_symlink_inode_operations;
2317extern int generic_readlink(struct dentry *, char __user *, int); 2302extern int generic_readlink(struct dentry *, char __user *, int);
2318extern void generic_fillattr(struct inode *, struct kstat *); 2303extern void generic_fillattr(struct inode *, struct kstat *);
2319extern int vfs_getattr(struct vfsmount *, struct dentry *, struct kstat *); 2304extern int vfs_getattr(struct vfsmount *, struct dentry *, struct kstat *);
2305void __inode_add_bytes(struct inode *inode, loff_t bytes);
2320void inode_add_bytes(struct inode *inode, loff_t bytes); 2306void inode_add_bytes(struct inode *inode, loff_t bytes);
2321void inode_sub_bytes(struct inode *inode, loff_t bytes); 2307void inode_sub_bytes(struct inode *inode, loff_t bytes);
2322loff_t inode_get_bytes(struct inode *inode); 2308loff_t inode_get_bytes(struct inode *inode);
@@ -2332,8 +2318,9 @@ extern int vfs_fstatat(int , char __user *, struct kstat *, int);
2332extern int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd, 2318extern int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd,
2333 unsigned long arg); 2319 unsigned long arg);
2334extern int __generic_block_fiemap(struct inode *inode, 2320extern int __generic_block_fiemap(struct inode *inode,
2335 struct fiemap_extent_info *fieinfo, u64 start, 2321 struct fiemap_extent_info *fieinfo,
2336 u64 len, get_block_t *get_block); 2322 loff_t start, loff_t len,
2323 get_block_t *get_block);
2337extern int generic_block_fiemap(struct inode *inode, 2324extern int generic_block_fiemap(struct inode *inode,
2338 struct fiemap_extent_info *fieinfo, u64 start, 2325 struct fiemap_extent_info *fieinfo, u64 start,
2339 u64 len, get_block_t *get_block); 2326 u64 len, get_block_t *get_block);
@@ -2359,8 +2346,6 @@ extern int simple_rename(struct inode *, struct dentry *, struct inode *, struct
2359extern int simple_sync_file(struct file *, struct dentry *, int); 2346extern int simple_sync_file(struct file *, struct dentry *, int);
2360extern int simple_empty(struct dentry *); 2347extern int simple_empty(struct dentry *);
2361extern int simple_readpage(struct file *file, struct page *page); 2348extern int simple_readpage(struct file *file, struct page *page);
2362extern int simple_prepare_write(struct file *file, struct page *page,
2363 unsigned offset, unsigned to);
2364extern int simple_write_begin(struct file *file, struct address_space *mapping, 2349extern int simple_write_begin(struct file *file, struct address_space *mapping,
2365 loff_t pos, unsigned len, unsigned flags, 2350 loff_t pos, unsigned len, unsigned flags,
2366 struct page **pagep, void **fsdata); 2351 struct page **pagep, void **fsdata);
@@ -2482,5 +2467,8 @@ int proc_nr_files(struct ctl_table *table, int write,
2482 2467
2483int __init get_filesystem_list(char *buf); 2468int __init get_filesystem_list(char *buf);
2484 2469
2470#define ACC_MODE(x) ("\004\002\006\006"[(x)&O_ACCMODE])
2471#define OPEN_FMODE(flag) ((__force fmode_t)((flag + 1) & O_ACCMODE))
2472
2485#endif /* __KERNEL__ */ 2473#endif /* __KERNEL__ */
2486#endif /* _LINUX_FS_H */ 2474#endif /* _LINUX_FS_H */
diff --git a/include/linux/fs_stack.h b/include/linux/fs_stack.h
index bb516ceeefc9..da317c7163ab 100644
--- a/include/linux/fs_stack.h
+++ b/include/linux/fs_stack.h
@@ -8,10 +8,8 @@
8#include <linux/fs.h> 8#include <linux/fs.h>
9 9
10/* externs for fs/stack.c */ 10/* externs for fs/stack.c */
11extern void fsstack_copy_attr_all(struct inode *dest, const struct inode *src, 11extern void fsstack_copy_attr_all(struct inode *dest, const struct inode *src);
12 int (*get_nlinks)(struct inode *)); 12extern void fsstack_copy_inode_size(struct inode *dst, struct inode *src);
13
14extern void fsstack_copy_inode_size(struct inode *dst, const struct inode *src);
15 13
16/* inlines */ 14/* inlines */
17static inline void fsstack_copy_attr_atime(struct inode *dest, 15static inline void fsstack_copy_attr_atime(struct inode *dest,
diff --git a/include/linux/fscache-cache.h b/include/linux/fscache-cache.h
index 7be0c6fbe880..c57db27ac861 100644
--- a/include/linux/fscache-cache.h
+++ b/include/linux/fscache-cache.h
@@ -105,7 +105,7 @@ struct fscache_operation {
105 /* operation releaser */ 105 /* operation releaser */
106 fscache_operation_release_t release; 106 fscache_operation_release_t release;
107 107
108#ifdef CONFIG_SLOW_WORK_PROC 108#ifdef CONFIG_SLOW_WORK_DEBUG
109 const char *name; /* operation name */ 109 const char *name; /* operation name */
110 const char *state; /* operation state */ 110 const char *state; /* operation state */
111#define fscache_set_op_name(OP, N) do { (OP)->name = (N); } while(0) 111#define fscache_set_op_name(OP, N) do { (OP)->name = (N); } while(0)
diff --git a/include/linux/fsl_devices.h b/include/linux/fsl_devices.h
index 43fc95d822d5..28e33fea5107 100644
--- a/include/linux/fsl_devices.h
+++ b/include/linux/fsl_devices.h
@@ -74,7 +74,12 @@ struct spi_device;
74struct fsl_spi_platform_data { 74struct fsl_spi_platform_data {
75 u32 initial_spmode; /* initial SPMODE value */ 75 u32 initial_spmode; /* initial SPMODE value */
76 s16 bus_num; 76 s16 bus_num;
77 bool qe_mode; 77 unsigned int flags;
78#define SPI_QE_CPU_MODE (1 << 0) /* QE CPU ("PIO") mode */
79#define SPI_CPM_MODE (1 << 1) /* CPM/QE ("DMA") mode */
80#define SPI_CPM1 (1 << 2) /* SPI unit is in CPM1 block */
81#define SPI_CPM2 (1 << 3) /* SPI unit is in CPM2 block */
82#define SPI_QE (1 << 4) /* SPI unit is in QE block */
78 /* board specific information */ 83 /* board specific information */
79 u16 max_chipselect; 84 u16 max_chipselect;
80 void (*cs_control)(struct spi_device *spi, bool on); 85 void (*cs_control)(struct spi_device *spi, bool on);
@@ -90,6 +95,10 @@ struct mpc8xx_pcmcia_ops {
90 * lead to a deep sleep (i.e. power removed from the core, 95 * lead to a deep sleep (i.e. power removed from the core,
91 * instead of just the clock). 96 * instead of just the clock).
92 */ 97 */
98#if defined(CONFIG_PPC_83xx) && defined(CONFIG_SUSPEND)
93int fsl_deep_sleep(void); 99int fsl_deep_sleep(void);
100#else
101static inline int fsl_deep_sleep(void) { return 0; }
102#endif
94 103
95#endif /* _FSL_DEVICE_H_ */ 104#endif /* _FSL_DEVICE_H_ */
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h
index 936f9aa8bb97..01755909ce81 100644
--- a/include/linux/fsnotify.h
+++ b/include/linux/fsnotify.h
@@ -15,6 +15,7 @@
15#include <linux/inotify.h> 15#include <linux/inotify.h>
16#include <linux/fsnotify_backend.h> 16#include <linux/fsnotify_backend.h>
17#include <linux/audit.h> 17#include <linux/audit.h>
18#include <linux/slab.h>
18 19
19/* 20/*
20 * fsnotify_d_instantiate - instantiate a dentry for inode 21 * fsnotify_d_instantiate - instantiate a dentry for inode
@@ -65,7 +66,7 @@ static inline void fsnotify_link_count(struct inode *inode)
65 * fsnotify_move - file old_name at old_dir was moved to new_name at new_dir 66 * fsnotify_move - file old_name at old_dir was moved to new_name at new_dir
66 */ 67 */
67static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir, 68static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir,
68 const char *old_name, const char *new_name, 69 const char *old_name,
69 int isdir, struct inode *target, struct dentry *moved) 70 int isdir, struct inode *target, struct dentry *moved)
70{ 71{
71 struct inode *source = moved->d_inode; 72 struct inode *source = moved->d_inode;
@@ -73,6 +74,7 @@ static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir,
73 u32 fs_cookie = fsnotify_get_cookie(); 74 u32 fs_cookie = fsnotify_get_cookie();
74 __u32 old_dir_mask = (FS_EVENT_ON_CHILD | FS_MOVED_FROM); 75 __u32 old_dir_mask = (FS_EVENT_ON_CHILD | FS_MOVED_FROM);
75 __u32 new_dir_mask = (FS_EVENT_ON_CHILD | FS_MOVED_TO); 76 __u32 new_dir_mask = (FS_EVENT_ON_CHILD | FS_MOVED_TO);
77 const char *new_name = moved->d_name.name;
76 78
77 if (old_dir == new_dir) 79 if (old_dir == new_dir)
78 old_dir_mask |= FS_DN_RENAME; 80 old_dir_mask |= FS_DN_RENAME;
@@ -103,7 +105,7 @@ static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir,
103 inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL, NULL); 105 inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL, NULL);
104 fsnotify(source, FS_MOVE_SELF, moved->d_inode, FSNOTIFY_EVENT_INODE, NULL, 0); 106 fsnotify(source, FS_MOVE_SELF, moved->d_inode, FSNOTIFY_EVENT_INODE, NULL, 0);
105 } 107 }
106 audit_inode_child(new_name, moved, new_dir); 108 audit_inode_child(moved, new_dir);
107} 109}
108 110
109/* 111/*
@@ -146,7 +148,7 @@ static inline void fsnotify_create(struct inode *inode, struct dentry *dentry)
146{ 148{
147 inotify_inode_queue_event(inode, IN_CREATE, 0, dentry->d_name.name, 149 inotify_inode_queue_event(inode, IN_CREATE, 0, dentry->d_name.name,
148 dentry->d_inode); 150 dentry->d_inode);
149 audit_inode_child(dentry->d_name.name, dentry, inode); 151 audit_inode_child(dentry, inode);
150 152
151 fsnotify(inode, FS_CREATE, dentry->d_inode, FSNOTIFY_EVENT_INODE, dentry->d_name.name, 0); 153 fsnotify(inode, FS_CREATE, dentry->d_inode, FSNOTIFY_EVENT_INODE, dentry->d_name.name, 0);
152} 154}
@@ -161,7 +163,7 @@ static inline void fsnotify_link(struct inode *dir, struct inode *inode, struct
161 inotify_inode_queue_event(dir, IN_CREATE, 0, new_dentry->d_name.name, 163 inotify_inode_queue_event(dir, IN_CREATE, 0, new_dentry->d_name.name,
162 inode); 164 inode);
163 fsnotify_link_count(inode); 165 fsnotify_link_count(inode);
164 audit_inode_child(new_dentry->d_name.name, new_dentry, dir); 166 audit_inode_child(new_dentry, dir);
165 167
166 fsnotify(dir, FS_CREATE, inode, FSNOTIFY_EVENT_INODE, new_dentry->d_name.name, 0); 168 fsnotify(dir, FS_CREATE, inode, FSNOTIFY_EVENT_INODE, new_dentry->d_name.name, 0);
167} 169}
@@ -175,7 +177,7 @@ static inline void fsnotify_mkdir(struct inode *inode, struct dentry *dentry)
175 struct inode *d_inode = dentry->d_inode; 177 struct inode *d_inode = dentry->d_inode;
176 178
177 inotify_inode_queue_event(inode, mask, 0, dentry->d_name.name, d_inode); 179 inotify_inode_queue_event(inode, mask, 0, dentry->d_name.name, d_inode);
178 audit_inode_child(dentry->d_name.name, dentry, inode); 180 audit_inode_child(dentry, inode);
179 181
180 fsnotify(inode, mask, d_inode, FSNOTIFY_EVENT_INODE, dentry->d_name.name, 0); 182 fsnotify(inode, mask, d_inode, FSNOTIFY_EVENT_INODE, dentry->d_name.name, 0);
181} 183}
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index 0b4f97d24d7f..01e6adea07ec 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -134,6 +134,8 @@ extern void
134unregister_ftrace_function_probe_func(char *glob, struct ftrace_probe_ops *ops); 134unregister_ftrace_function_probe_func(char *glob, struct ftrace_probe_ops *ops);
135extern void unregister_ftrace_function_probe_all(char *glob); 135extern void unregister_ftrace_function_probe_all(char *glob);
136 136
137extern int ftrace_text_reserved(void *start, void *end);
138
137enum { 139enum {
138 FTRACE_FL_FREE = (1 << 0), 140 FTRACE_FL_FREE = (1 << 0),
139 FTRACE_FL_FAILED = (1 << 1), 141 FTRACE_FL_FAILED = (1 << 1),
@@ -141,7 +143,6 @@ enum {
141 FTRACE_FL_ENABLED = (1 << 3), 143 FTRACE_FL_ENABLED = (1 << 3),
142 FTRACE_FL_NOTRACE = (1 << 4), 144 FTRACE_FL_NOTRACE = (1 << 4),
143 FTRACE_FL_CONVERTED = (1 << 5), 145 FTRACE_FL_CONVERTED = (1 << 5),
144 FTRACE_FL_FROZEN = (1 << 6),
145}; 146};
146 147
147struct dyn_ftrace { 148struct dyn_ftrace {
@@ -250,6 +251,10 @@ static inline int unregister_ftrace_command(char *cmd_name)
250{ 251{
251 return -EINVAL; 252 return -EINVAL;
252} 253}
254static inline int ftrace_text_reserved(void *start, void *end)
255{
256 return 0;
257}
253#endif /* CONFIG_DYNAMIC_FTRACE */ 258#endif /* CONFIG_DYNAMIC_FTRACE */
254 259
255/* totally disable ftrace - can not re-enable after this */ 260/* totally disable ftrace - can not re-enable after this */
@@ -511,4 +516,10 @@ static inline void trace_hw_branch_oops(void) {}
511 516
512#endif /* CONFIG_HW_BRANCH_TRACER */ 517#endif /* CONFIG_HW_BRANCH_TRACER */
513 518
519#ifdef CONFIG_FTRACE_SYSCALLS
520
521unsigned long arch_syscall_addr(int nr);
522
523#endif /* CONFIG_FTRACE_SYSCALLS */
524
514#endif /* _LINUX_FTRACE_H */ 525#endif /* _LINUX_FTRACE_H */
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
index 4ec5e67e18cf..c0f4b364c711 100644
--- a/include/linux/ftrace_event.h
+++ b/include/linux/ftrace_event.h
@@ -5,6 +5,7 @@
5#include <linux/trace_seq.h> 5#include <linux/trace_seq.h>
6#include <linux/percpu.h> 6#include <linux/percpu.h>
7#include <linux/hardirq.h> 7#include <linux/hardirq.h>
8#include <linux/perf_event.h>
8 9
9struct trace_array; 10struct trace_array;
10struct tracer; 11struct tracer;
@@ -57,6 +58,7 @@ struct trace_iterator {
57 /* The below is zeroed out in pipe_read */ 58 /* The below is zeroed out in pipe_read */
58 struct trace_seq seq; 59 struct trace_seq seq;
59 struct trace_entry *ent; 60 struct trace_entry *ent;
61 int leftover;
60 int cpu; 62 int cpu;
61 u64 ts; 63 u64 ts;
62 64
@@ -117,12 +119,11 @@ struct ftrace_event_call {
117 struct dentry *dir; 119 struct dentry *dir;
118 struct trace_event *event; 120 struct trace_event *event;
119 int enabled; 121 int enabled;
120 int (*regfunc)(void *); 122 int (*regfunc)(struct ftrace_event_call *);
121 void (*unregfunc)(void *); 123 void (*unregfunc)(struct ftrace_event_call *);
122 int id; 124 int id;
123 int (*raw_init)(void); 125 const char *print_fmt;
124 int (*show_format)(struct ftrace_event_call *call, 126 int (*raw_init)(struct ftrace_event_call *);
125 struct trace_seq *s);
126 int (*define_fields)(struct ftrace_event_call *); 127 int (*define_fields)(struct ftrace_event_call *);
127 struct list_head fields; 128 struct list_head fields;
128 int filter_active; 129 int filter_active;
@@ -130,21 +131,18 @@ struct ftrace_event_call {
130 void *mod; 131 void *mod;
131 void *data; 132 void *data;
132 133
133 atomic_t profile_count; 134 int perf_refcount;
134 int (*profile_enable)(void); 135 int (*perf_event_enable)(struct ftrace_event_call *);
135 void (*profile_disable)(void); 136 void (*perf_event_disable)(struct ftrace_event_call *);
136}; 137};
137 138
138#define FTRACE_MAX_PROFILE_SIZE 2048 139#define PERF_MAX_TRACE_SIZE 2048
139
140extern char *trace_profile_buf;
141extern char *trace_profile_buf_nmi;
142 140
143#define MAX_FILTER_PRED 32 141#define MAX_FILTER_PRED 32
144#define MAX_FILTER_STR_VAL 256 /* Should handle KSYM_SYMBOL_LEN */ 142#define MAX_FILTER_STR_VAL 256 /* Should handle KSYM_SYMBOL_LEN */
145 143
146extern void destroy_preds(struct ftrace_event_call *call); 144extern void destroy_preds(struct ftrace_event_call *call);
147extern int filter_match_preds(struct ftrace_event_call *call, void *rec); 145extern int filter_match_preds(struct event_filter *filter, void *rec);
148extern int filter_current_check_discard(struct ring_buffer *buffer, 146extern int filter_current_check_discard(struct ring_buffer *buffer,
149 struct ftrace_event_call *call, 147 struct ftrace_event_call *call,
150 void *rec, 148 void *rec,
@@ -157,11 +155,12 @@ enum {
157 FILTER_PTR_STRING, 155 FILTER_PTR_STRING,
158}; 156};
159 157
160extern int trace_define_field(struct ftrace_event_call *call, 158extern int trace_event_raw_init(struct ftrace_event_call *call);
161 const char *type, const char *name, 159extern int trace_define_field(struct ftrace_event_call *call, const char *type,
162 int offset, int size, int is_signed, 160 const char *name, int offset, int size,
163 int filter_type); 161 int is_signed, int filter_type);
164extern int trace_define_common_fields(struct ftrace_event_call *call); 162extern int trace_add_event_call(struct ftrace_event_call *call);
163extern void trace_remove_event_call(struct ftrace_event_call *call);
165 164
166#define is_signed_type(type) (((type)(-1)) < 0) 165#define is_signed_type(type) (((type)(-1)) < 0)
167 166
@@ -186,4 +185,30 @@ do { \
186 __trace_printk(ip, fmt, ##args); \ 185 __trace_printk(ip, fmt, ##args); \
187} while (0) 186} while (0)
188 187
188#ifdef CONFIG_PERF_EVENTS
189struct perf_event;
190
191DECLARE_PER_CPU(struct pt_regs, perf_trace_regs);
192
193extern int perf_trace_enable(int event_id);
194extern void perf_trace_disable(int event_id);
195extern int ftrace_profile_set_filter(struct perf_event *event, int event_id,
196 char *filter_str);
197extern void ftrace_profile_free_filter(struct perf_event *event);
198extern void *
199perf_trace_buf_prepare(int size, unsigned short type, int *rctxp,
200 unsigned long *irq_flags);
201
202static inline void
203perf_trace_buf_submit(void *raw_data, int size, int rctx, u64 addr,
204 u64 count, unsigned long irq_flags, struct pt_regs *regs)
205{
206 struct trace_entry *entry = raw_data;
207
208 perf_tp_event(entry->type, addr, count, raw_data, size, regs);
209 perf_swevent_put_recursion_context(rctx);
210 local_irq_restore(irq_flags);
211}
212#endif
213
189#endif /* _LINUX_FTRACE_EVENT_H */ 214#endif /* _LINUX_FTRACE_EVENT_H */
diff --git a/include/linux/gameport.h b/include/linux/gameport.h
index 1bc08541c2b9..361d1cc288d0 100644
--- a/include/linux/gameport.h
+++ b/include/linux/gameport.h
@@ -16,6 +16,7 @@
16#include <linux/mutex.h> 16#include <linux/mutex.h>
17#include <linux/device.h> 17#include <linux/device.h>
18#include <linux/timer.h> 18#include <linux/timer.h>
19#include <linux/slab.h>
19 20
20struct gameport { 21struct gameport {
21 22
@@ -46,7 +47,6 @@ struct gameport {
46 struct mutex drv_mutex; /* protects serio->drv so attributes can pin driver */ 47 struct mutex drv_mutex; /* protects serio->drv so attributes can pin driver */
47 48
48 struct device dev; 49 struct device dev;
49 unsigned int registered; /* port has been fully registered with driver core */
50 50
51 struct list_head node; 51 struct list_head node;
52}; 52};
diff --git a/include/linux/gen_stats.h b/include/linux/gen_stats.h
index 710e901085d0..552c8a0a12d1 100644
--- a/include/linux/gen_stats.h
+++ b/include/linux/gen_stats.h
@@ -18,13 +18,11 @@ enum {
18 * @bytes: number of seen bytes 18 * @bytes: number of seen bytes
19 * @packets: number of seen packets 19 * @packets: number of seen packets
20 */ 20 */
21struct gnet_stats_basic 21struct gnet_stats_basic {
22{
23 __u64 bytes; 22 __u64 bytes;
24 __u32 packets; 23 __u32 packets;
25}; 24};
26struct gnet_stats_basic_packed 25struct gnet_stats_basic_packed {
27{
28 __u64 bytes; 26 __u64 bytes;
29 __u32 packets; 27 __u32 packets;
30} __attribute__ ((packed)); 28} __attribute__ ((packed));
@@ -34,8 +32,7 @@ struct gnet_stats_basic_packed
34 * @bps: current byte rate 32 * @bps: current byte rate
35 * @pps: current packet rate 33 * @pps: current packet rate
36 */ 34 */
37struct gnet_stats_rate_est 35struct gnet_stats_rate_est {
38{
39 __u32 bps; 36 __u32 bps;
40 __u32 pps; 37 __u32 pps;
41}; 38};
@@ -48,8 +45,7 @@ struct gnet_stats_rate_est
48 * @requeues: number of requeues 45 * @requeues: number of requeues
49 * @overlimits: number of enqueues over the limit 46 * @overlimits: number of enqueues over the limit
50 */ 47 */
51struct gnet_stats_queue 48struct gnet_stats_queue {
52{
53 __u32 qlen; 49 __u32 qlen;
54 __u32 backlog; 50 __u32 backlog;
55 __u32 drops; 51 __u32 drops;
@@ -62,8 +58,7 @@ struct gnet_stats_queue
62 * @interval: sampling period 58 * @interval: sampling period
63 * @ewma_log: the log of measurement window weight 59 * @ewma_log: the log of measurement window weight
64 */ 60 */
65struct gnet_estimator 61struct gnet_estimator {
66{
67 signed char interval; 62 signed char interval;
68 unsigned char ewma_log; 63 unsigned char ewma_log;
69}; 64};
diff --git a/include/linux/generic_acl.h b/include/linux/generic_acl.h
index 886f5faa08cb..ca666d18ed67 100644
--- a/include/linux/generic_acl.h
+++ b/include/linux/generic_acl.h
@@ -1,36 +1,15 @@
1/* 1#ifndef LINUX_GENERIC_ACL_H
2 * include/linux/generic_acl.h 2#define LINUX_GENERIC_ACL_H
3 *
4 * (C) 2005 Andreas Gruenbacher <agruen@suse.de>
5 *
6 * This file is released under the GPL.
7 */
8 3
9#ifndef GENERIC_ACL_H 4#include <linux/xattr.h>
10#define GENERIC_ACL_H
11 5
12#include <linux/posix_acl.h> 6struct inode;
13#include <linux/posix_acl_xattr.h>
14 7
15/** 8extern struct xattr_handler generic_acl_access_handler;
16 * struct generic_acl_operations - filesystem operations 9extern struct xattr_handler generic_acl_default_handler;
17 *
18 * Filesystems must make these operations available to the generic
19 * operations.
20 */
21struct generic_acl_operations {
22 struct posix_acl *(*getacl)(struct inode *, int);
23 void (*setacl)(struct inode *, int, struct posix_acl *);
24};
25 10
26size_t generic_acl_list(struct inode *, struct generic_acl_operations *, int, 11int generic_acl_init(struct inode *, struct inode *);
27 char *, size_t); 12int generic_acl_chmod(struct inode *);
28int generic_acl_get(struct inode *, struct generic_acl_operations *, int, 13int generic_check_acl(struct inode *inode, int mask);
29 void *, size_t);
30int generic_acl_set(struct inode *, struct generic_acl_operations *, int,
31 const void *, size_t);
32int generic_acl_init(struct inode *, struct inode *,
33 struct generic_acl_operations *);
34int generic_acl_chmod(struct inode *, struct generic_acl_operations *);
35 14
36#endif 15#endif /* LINUX_GENERIC_ACL_H */
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index 297df45ffd0a..5f2f4c4d8fb0 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -91,6 +91,7 @@ struct hd_struct {
91 sector_t start_sect; 91 sector_t start_sect;
92 sector_t nr_sects; 92 sector_t nr_sects;
93 sector_t alignment_offset; 93 sector_t alignment_offset;
94 unsigned int discard_alignment;
94 struct device __dev; 95 struct device __dev;
95 struct kobject *holder_dir; 96 struct kobject *holder_dir;
96 int policy, partno; 97 int policy, partno;
@@ -100,7 +101,7 @@ struct hd_struct {
100 unsigned long stamp; 101 unsigned long stamp;
101 int in_flight[2]; 102 int in_flight[2];
102#ifdef CONFIG_SMP 103#ifdef CONFIG_SMP
103 struct disk_stats *dkstats; 104 struct disk_stats __percpu *dkstats;
104#else 105#else
105 struct disk_stats dkstats; 106 struct disk_stats dkstats;
106#endif 107#endif
@@ -108,7 +109,7 @@ struct hd_struct {
108}; 109};
109 110
110#define GENHD_FL_REMOVABLE 1 111#define GENHD_FL_REMOVABLE 1
111#define GENHD_FL_DRIVERFS 2 112/* 2 is unused */
112#define GENHD_FL_MEDIA_CHANGE_NOTIFY 4 113#define GENHD_FL_MEDIA_CHANGE_NOTIFY 4
113#define GENHD_FL_CD 8 114#define GENHD_FL_CD 8
114#define GENHD_FL_UP 16 115#define GENHD_FL_UP 16
@@ -255,9 +256,9 @@ extern struct hd_struct *disk_map_sector_rcu(struct gendisk *disk,
255#define part_stat_read(part, field) \ 256#define part_stat_read(part, field) \
256({ \ 257({ \
257 typeof((part)->dkstats->field) res = 0; \ 258 typeof((part)->dkstats->field) res = 0; \
258 int i; \ 259 unsigned int _cpu; \
259 for_each_possible_cpu(i) \ 260 for_each_possible_cpu(_cpu) \
260 res += per_cpu_ptr((part)->dkstats, i)->field; \ 261 res += per_cpu_ptr((part)->dkstats, _cpu)->field; \
261 res; \ 262 res; \
262}) 263})
263 264
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 557bdad320b6..4c6d41333f98 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -30,7 +30,8 @@ struct vm_area_struct;
30 * _might_ fail. This depends upon the particular VM implementation. 30 * _might_ fail. This depends upon the particular VM implementation.
31 * 31 *
32 * __GFP_NOFAIL: The VM implementation _must_ retry infinitely: the caller 32 * __GFP_NOFAIL: The VM implementation _must_ retry infinitely: the caller
33 * cannot handle allocation failures. 33 * cannot handle allocation failures. This modifier is deprecated and no new
34 * users should be added.
34 * 35 *
35 * __GFP_NORETRY: The VM implementation must not retry indefinitely. 36 * __GFP_NORETRY: The VM implementation must not retry indefinitely.
36 * 37 *
@@ -83,6 +84,7 @@ struct vm_area_struct;
83#define GFP_HIGHUSER_MOVABLE (__GFP_WAIT | __GFP_IO | __GFP_FS | \ 84#define GFP_HIGHUSER_MOVABLE (__GFP_WAIT | __GFP_IO | __GFP_FS | \
84 __GFP_HARDWALL | __GFP_HIGHMEM | \ 85 __GFP_HARDWALL | __GFP_HIGHMEM | \
85 __GFP_MOVABLE) 86 __GFP_MOVABLE)
87#define GFP_IOFS (__GFP_IO | __GFP_FS)
86 88
87#ifdef CONFIG_NUMA 89#ifdef CONFIG_NUMA
88#define GFP_THISNODE (__GFP_THISNODE | __GFP_NOWARN | __GFP_NORETRY) 90#define GFP_THISNODE (__GFP_THISNODE | __GFP_NOWARN | __GFP_NORETRY)
@@ -325,7 +327,7 @@ void free_pages_exact(void *virt, size_t size);
325 327
326extern void __free_pages(struct page *page, unsigned int order); 328extern void __free_pages(struct page *page, unsigned int order);
327extern void free_pages(unsigned long addr, unsigned int order); 329extern void free_pages(unsigned long addr, unsigned int order);
328extern void free_hot_page(struct page *page); 330extern void free_hot_cold_page(struct page *page, int cold);
329 331
330#define __free_page(page) __free_pages((page), 0) 332#define __free_page(page) __free_pages((page), 0)
331#define free_page(addr) free_pages((addr),0) 333#define free_page(addr) free_pages((addr),0)
@@ -337,9 +339,7 @@ void drain_local_pages(void *dummy);
337 339
338extern gfp_t gfp_allowed_mask; 340extern gfp_t gfp_allowed_mask;
339 341
340static inline void set_gfp_allowed_mask(gfp_t mask) 342extern void set_gfp_allowed_mask(gfp_t mask);
341{ 343extern gfp_t clear_gfp_allowed_mask(gfp_t mask);
342 gfp_allowed_mask = mask;
343}
344 344
345#endif /* __LINUX_GFP_H */ 345#endif /* __LINUX_GFP_H */
diff --git a/include/linux/gfs2_ondisk.h b/include/linux/gfs2_ondisk.h
index b80c88dedbbb..4f4462974c14 100644
--- a/include/linux/gfs2_ondisk.h
+++ b/include/linux/gfs2_ondisk.h
@@ -81,7 +81,11 @@ struct gfs2_meta_header {
81 __be32 mh_type; 81 __be32 mh_type;
82 __be64 __pad0; /* Was generation number in gfs1 */ 82 __be64 __pad0; /* Was generation number in gfs1 */
83 __be32 mh_format; 83 __be32 mh_format;
84 __be32 __pad1; /* Was incarnation number in gfs1 */ 84 /* This union is to keep userspace happy */
85 union {
86 __be32 mh_jid; /* Was incarnation number in gfs1 */
87 __be32 __pad1;
88 };
85}; 89};
86 90
87/* 91/*
@@ -176,33 +180,6 @@ struct gfs2_rgrp {
176}; 180};
177 181
178/* 182/*
179 * quota linked list: user quotas and group quotas form two separate
180 * singly linked lists. ll_next stores uids or gids of next quotas in the
181 * linked list.
182
183Given the uid/gid, how to calculate the quota file offsets for the corresponding
184gfs2_quota structures on disk:
185
186for user quotas, given uid,
187offset = uid * sizeof(struct gfs2_quota);
188
189for group quotas, given gid,
190offset = (gid * sizeof(struct gfs2_quota)) + sizeof(struct gfs2_quota);
191
192
193 uid:0 gid:0 uid:12 gid:12 uid:17 gid:17 uid:5142 gid:5142
194+-------+-------+ +-------+-------+ +-------+- - - -+ +- - - -+-------+
195| valid | valid | :: | valid | valid | :: | valid | inval | :: | inval | valid |
196+-------+-------+ +-------+-------+ +-------+- - - -+ +- - - -+-------+
197next:12 next:12 next:17 next:5142 next:NULL next:NULL
198 | | | | |<-- user quota list |
199 \______|___________/ \______|___________/ group quota list -->|
200 | | |
201 \__________________/ \_______________________________________/
202
203*/
204
205/*
206 * quota structure 183 * quota structure
207 */ 184 */
208 185
@@ -210,8 +187,7 @@ struct gfs2_quota {
210 __be64 qu_limit; 187 __be64 qu_limit;
211 __be64 qu_warn; 188 __be64 qu_warn;
212 __be64 qu_value; 189 __be64 qu_value;
213 __be32 qu_ll_next; /* location of next quota in list */ 190 __u8 qu_reserved[64];
214 __u8 qu_reserved[60];
215}; 191};
216 192
217/* 193/*
diff --git a/include/linux/gigaset_dev.h b/include/linux/gigaset_dev.h
index 5dc4a316ca37..258ba82937e7 100644
--- a/include/linux/gigaset_dev.h
+++ b/include/linux/gigaset_dev.h
@@ -16,15 +16,23 @@
16 16
17#include <linux/ioctl.h> 17#include <linux/ioctl.h>
18 18
19/* The magic IOCTL value for this interface. */
19#define GIGASET_IOCTL 0x47 20#define GIGASET_IOCTL 0x47
20 21
21#define GIGVER_DRIVER 0 22/* enable/disable device control via character device (lock out ISDN subsys) */
22#define GIGVER_COMPAT 1 23#define GIGASET_REDIR _IOWR(GIGASET_IOCTL, 0, int)
23#define GIGVER_FWBASE 2
24 24
25#define GIGASET_REDIR _IOWR (GIGASET_IOCTL, 0, int) 25/* enable adapter configuration mode (M10x only) */
26#define GIGASET_CONFIG _IOWR (GIGASET_IOCTL, 1, int) 26#define GIGASET_CONFIG _IOWR(GIGASET_IOCTL, 1, int)
27#define GIGASET_BRKCHARS _IOW (GIGASET_IOCTL, 2, unsigned char[6]) //FIXME [6] okay? 27
28#define GIGASET_VERSION _IOWR (GIGASET_IOCTL, 3, unsigned[4]) 28/* set break characters (M105 only) */
29#define GIGASET_BRKCHARS _IOW(GIGASET_IOCTL, 2, unsigned char[6])
30
31/* get version information selected by arg[0] */
32#define GIGASET_VERSION _IOWR(GIGASET_IOCTL, 3, unsigned[4])
33/* values for GIGASET_VERSION arg[0] */
34#define GIGVER_DRIVER 0 /* get driver version */
35#define GIGVER_COMPAT 1 /* get interface compatibility version */
36#define GIGVER_FWBASE 2 /* get base station firmware version */
29 37
30#endif 38#endif
diff --git a/include/linux/gpio.h b/include/linux/gpio.h
index 059bd189d35d..4e949a5b5b85 100644
--- a/include/linux/gpio.h
+++ b/include/linux/gpio.h
@@ -99,6 +99,12 @@ static inline int gpio_export_link(struct device *dev, const char *name,
99 return -EINVAL; 99 return -EINVAL;
100} 100}
101 101
102static inline int gpio_sysfs_set_active_low(unsigned gpio, int value)
103{
104 /* GPIO can never have been requested */
105 WARN_ON(1);
106 return -EINVAL;
107}
102 108
103static inline void gpio_unexport(unsigned gpio) 109static inline void gpio_unexport(unsigned gpio)
104{ 110{
diff --git a/include/linux/gpio_keys.h b/include/linux/gpio_keys.h
index 1289fa7623ca..cd0b3f30f48e 100644
--- a/include/linux/gpio_keys.h
+++ b/include/linux/gpio_keys.h
@@ -10,6 +10,7 @@ struct gpio_keys_button {
10 int type; /* input event type (EV_KEY, EV_SW) */ 10 int type; /* input event type (EV_KEY, EV_SW) */
11 int wakeup; /* configure the button as a wake-up source */ 11 int wakeup; /* configure the button as a wake-up source */
12 int debounce_interval; /* debounce ticks interval in msecs */ 12 int debounce_interval; /* debounce ticks interval in msecs */
13 bool can_disable;
13}; 14};
14 15
15struct gpio_keys_platform_data { 16struct gpio_keys_platform_data {
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h
index 6d527ee82b2b..d5b387669dab 100644
--- a/include/linux/hardirq.h
+++ b/include/linux/hardirq.h
@@ -139,10 +139,34 @@ static inline void account_system_vtime(struct task_struct *tsk)
139#endif 139#endif
140 140
141#if defined(CONFIG_NO_HZ) 141#if defined(CONFIG_NO_HZ)
142#if defined(CONFIG_TINY_RCU)
143extern void rcu_enter_nohz(void);
144extern void rcu_exit_nohz(void);
145
146static inline void rcu_irq_enter(void)
147{
148 rcu_exit_nohz();
149}
150
151static inline void rcu_irq_exit(void)
152{
153 rcu_enter_nohz();
154}
155
156static inline void rcu_nmi_enter(void)
157{
158}
159
160static inline void rcu_nmi_exit(void)
161{
162}
163
164#else
142extern void rcu_irq_enter(void); 165extern void rcu_irq_enter(void);
143extern void rcu_irq_exit(void); 166extern void rcu_irq_exit(void);
144extern void rcu_nmi_enter(void); 167extern void rcu_nmi_enter(void);
145extern void rcu_nmi_exit(void); 168extern void rcu_nmi_exit(void);
169#endif
146#else 170#else
147# define rcu_irq_enter() do { } while (0) 171# define rcu_irq_enter() do { } while (0)
148# define rcu_irq_exit() do { } while (0) 172# define rcu_irq_exit() do { } while (0)
diff --git a/include/linux/hayesesp.h b/include/linux/hayesesp.h
deleted file mode 100644
index 92b08cfe4a75..000000000000
--- a/include/linux/hayesesp.h
+++ /dev/null
@@ -1,114 +0,0 @@
1#ifndef HAYESESP_H
2#define HAYESESP_H
3
4struct hayes_esp_config {
5 short flow_on;
6 short flow_off;
7 short rx_trigger;
8 short tx_trigger;
9 short pio_threshold;
10 unsigned char rx_timeout;
11 char dma_channel;
12};
13
14#ifdef __KERNEL__
15
16#define ESP_DMA_CHANNEL 0
17#define ESP_RX_TRIGGER 768
18#define ESP_TX_TRIGGER 768
19#define ESP_FLOW_OFF 1016
20#define ESP_FLOW_ON 944
21#define ESP_RX_TMOUT 128
22#define ESP_PIO_THRESHOLD 32
23
24#define ESP_IN_MAJOR 57 /* major dev # for dial in */
25#define ESP_OUT_MAJOR 58 /* major dev # for dial out */
26#define ESPC_SCALE 3
27#define UART_ESI_BASE 0x00
28#define UART_ESI_SID 0x01
29#define UART_ESI_RX 0x02
30#define UART_ESI_TX 0x02
31#define UART_ESI_CMD1 0x04
32#define UART_ESI_CMD2 0x05
33#define UART_ESI_STAT1 0x04
34#define UART_ESI_STAT2 0x05
35#define UART_ESI_RWS 0x07
36
37#define UART_IER_DMA_TMOUT 0x80
38#define UART_IER_DMA_TC 0x08
39
40#define ESI_SET_IRQ 0x04
41#define ESI_SET_DMA_TMOUT 0x05
42#define ESI_SET_SRV_MASK 0x06
43#define ESI_SET_ERR_MASK 0x07
44#define ESI_SET_FLOW_CNTL 0x08
45#define ESI_SET_FLOW_CHARS 0x09
46#define ESI_SET_FLOW_LVL 0x0a
47#define ESI_SET_TRIGGER 0x0b
48#define ESI_SET_RX_TIMEOUT 0x0c
49#define ESI_SET_FLOW_TMOUT 0x0d
50#define ESI_WRITE_UART 0x0e
51#define ESI_READ_UART 0x0f
52#define ESI_SET_MODE 0x10
53#define ESI_GET_ERR_STAT 0x12
54#define ESI_GET_UART_STAT 0x13
55#define ESI_GET_RX_AVAIL 0x14
56#define ESI_GET_TX_AVAIL 0x15
57#define ESI_START_DMA_RX 0x16
58#define ESI_START_DMA_TX 0x17
59#define ESI_ISSUE_BREAK 0x1a
60#define ESI_FLUSH_RX 0x1b
61#define ESI_FLUSH_TX 0x1c
62#define ESI_SET_BAUD 0x1d
63#define ESI_SET_ENH_IRQ 0x1f
64#define ESI_SET_REINTR 0x20
65#define ESI_SET_PRESCALAR 0x23
66#define ESI_NO_COMMAND 0xff
67
68#define ESP_STAT_RX_TIMEOUT 0x01
69#define ESP_STAT_DMA_RX 0x02
70#define ESP_STAT_DMA_TX 0x04
71#define ESP_STAT_NEVER_DMA 0x08
72#define ESP_STAT_USE_PIO 0x10
73
74#define ESP_MAGIC 0x53ee
75#define ESP_XMIT_SIZE 4096
76
77struct esp_struct {
78 int magic;
79 struct tty_port port;
80 spinlock_t lock;
81 int io_port;
82 int irq;
83 int read_status_mask;
84 int ignore_status_mask;
85 int timeout;
86 int stat_flags;
87 int custom_divisor;
88 int close_delay;
89 unsigned short closing_wait;
90 unsigned short closing_wait2;
91 int IER; /* Interrupt Enable Register */
92 int MCR; /* Modem control register */
93 unsigned long last_active;
94 int line;
95 unsigned char *xmit_buf;
96 int xmit_head;
97 int xmit_tail;
98 int xmit_cnt;
99 wait_queue_head_t break_wait;
100 struct async_icount icount; /* kernel counters for the 4 input interrupts */
101 struct hayes_esp_config config; /* port configuration */
102 struct esp_struct *next_port; /* For the linked list */
103};
104
105struct esp_pio_buffer {
106 unsigned char data[1024];
107 struct esp_pio_buffer *next;
108};
109
110#endif /* __KERNEL__ */
111
112
113#endif /* ESP_H */
114
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 10f628416740..b1344ec4b7fc 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -312,6 +312,7 @@ struct hid_item {
312#define HID_QUIRK_MULTI_INPUT 0x00000040 312#define HID_QUIRK_MULTI_INPUT 0x00000040
313#define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000 313#define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000
314#define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 314#define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000
315#define HID_QUIRK_NO_INIT_REPORTS 0x20000000
315 316
316/* 317/*
317 * This is the global environment of the parser. This information is 318 * This is the global environment of the parser. This information is
@@ -500,7 +501,7 @@ struct hid_device { /* device report descriptor */
500 void (*hiddev_report_event) (struct hid_device *, struct hid_report *); 501 void (*hiddev_report_event) (struct hid_device *, struct hid_report *);
501 502
502 /* handler for raw output data, used by hidraw */ 503 /* handler for raw output data, used by hidraw */
503 int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t); 504 int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t, unsigned char);
504 505
505 /* debugging support via debugfs */ 506 /* debugging support via debugfs */
506 unsigned short debug; 507 unsigned short debug;
@@ -662,7 +663,7 @@ struct hid_ll_driver {
662 663
663/* Applications from HID Usage Tables 4/8/99 Version 1.1 */ 664/* Applications from HID Usage Tables 4/8/99 Version 1.1 */
664/* We ignore a few input applications that are not widely used */ 665/* We ignore a few input applications that are not widely used */
665#define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001) || (a == 0x000d0002)) 666#define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001) || ((a >= 0x000d0002) && (a <= 0x000d0006)))
666 667
667/* HID core API */ 668/* HID core API */
668 669
@@ -689,6 +690,7 @@ int hid_input_report(struct hid_device *, int type, u8 *, int, int);
689int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field); 690int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field);
690void hid_output_report(struct hid_report *report, __u8 *data); 691void hid_output_report(struct hid_report *report, __u8 *data);
691struct hid_device *hid_allocate_device(void); 692struct hid_device *hid_allocate_device(void);
693struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id);
692int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size); 694int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size);
693int hid_check_keys_pressed(struct hid_device *hid); 695int hid_check_keys_pressed(struct hid_device *hid);
694int hid_connect(struct hid_device *hid, unsigned int connect_mask); 696int hid_connect(struct hid_device *hid, unsigned int connect_mask);
diff --git a/include/linux/highmem.h b/include/linux/highmem.h
index 211ff4497269..74152c08ad07 100644
--- a/include/linux/highmem.h
+++ b/include/linux/highmem.h
@@ -17,6 +17,12 @@ static inline void flush_anon_page(struct vm_area_struct *vma, struct page *page
17static inline void flush_kernel_dcache_page(struct page *page) 17static inline void flush_kernel_dcache_page(struct page *page)
18{ 18{
19} 19}
20static inline void flush_kernel_vmap_range(void *vaddr, int size)
21{
22}
23static inline void invalidate_kernel_vmap_range(void *vaddr, int size)
24{
25}
20#endif 26#endif
21 27
22#include <asm/kmap_types.h> 28#include <asm/kmap_types.h>
@@ -46,7 +52,7 @@ void kmap_flush_unused(void);
46 52
47static inline unsigned int nr_free_highpages(void) { return 0; } 53static inline unsigned int nr_free_highpages(void) { return 0; }
48 54
49#define totalhigh_pages 0 55#define totalhigh_pages 0UL
50 56
51#ifndef ARCH_HAS_KMAP 57#ifndef ARCH_HAS_KMAP
52static inline void *kmap(struct page *page) 58static inline void *kmap(struct page *page)
diff --git a/include/linux/hil.h b/include/linux/hil.h
index 13352d7d0caf..523785a9de70 100644
--- a/include/linux/hil.h
+++ b/include/linux/hil.h
@@ -168,14 +168,14 @@ enum hil_command {
168 HIL_CMD_PR6 = 0x45, /* Prompt6 */ 168 HIL_CMD_PR6 = 0x45, /* Prompt6 */
169 HIL_CMD_PR7 = 0x46, /* Prompt7 */ 169 HIL_CMD_PR7 = 0x46, /* Prompt7 */
170 HIL_CMD_PRM = 0x47, /* Prompt (General Purpose) */ 170 HIL_CMD_PRM = 0x47, /* Prompt (General Purpose) */
171 HIL_CMD_AK1 = 0x48, /* Acknowlege1 */ 171 HIL_CMD_AK1 = 0x48, /* Acknowledge1 */
172 HIL_CMD_AK2 = 0x49, /* Acknowlege2 */ 172 HIL_CMD_AK2 = 0x49, /* Acknowledge2 */
173 HIL_CMD_AK3 = 0x4a, /* Acknowlege3 */ 173 HIL_CMD_AK3 = 0x4a, /* Acknowledge3 */
174 HIL_CMD_AK4 = 0x4b, /* Acknowlege4 */ 174 HIL_CMD_AK4 = 0x4b, /* Acknowledge4 */
175 HIL_CMD_AK5 = 0x4c, /* Acknowlege5 */ 175 HIL_CMD_AK5 = 0x4c, /* Acknowledge5 */
176 HIL_CMD_AK6 = 0x4d, /* Acknowlege6 */ 176 HIL_CMD_AK6 = 0x4d, /* Acknowledge6 */
177 HIL_CMD_AK7 = 0x4e, /* Acknowlege7 */ 177 HIL_CMD_AK7 = 0x4e, /* Acknowledge7 */
178 HIL_CMD_ACK = 0x4f, /* Acknowlege (General Purpose) */ 178 HIL_CMD_ACK = 0x4f, /* Acknowledge (General Purpose) */
179 179
180 /* 0x50 to 0x78 reserved for future use */ 180 /* 0x50 to 0x78 reserved for future use */
181 /* 0x80 to 0xEF device-specific commands */ 181 /* 0x80 to 0xEF device-specific commands */
diff --git a/include/linux/hpet.h b/include/linux/hpet.h
index 79f63a27bcef..219ca4f6bea6 100644
--- a/include/linux/hpet.h
+++ b/include/linux/hpet.h
@@ -126,4 +126,6 @@ struct hpet_info {
126#define HPET_DPI _IO('h', 0x05) /* disable periodic */ 126#define HPET_DPI _IO('h', 0x05) /* disable periodic */
127#define HPET_IRQFREQ _IOW('h', 0x6, unsigned long) /* IRQFREQ usec */ 127#define HPET_IRQFREQ _IOW('h', 0x6, unsigned long) /* IRQFREQ usec */
128 128
129#define MAX_HPET_TBS 8 /* maximum hpet timer blocks */
130
129#endif /* !__HPET__ */ 131#endif /* !__HPET__ */
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
index b984b947f5db..b34823755ee4 100644
--- a/include/linux/hrtimer.h
+++ b/include/linux/hrtimer.h
@@ -162,19 +162,24 @@ struct hrtimer_clock_base {
162 * @expires_next: absolute time of the next event which was scheduled 162 * @expires_next: absolute time of the next event which was scheduled
163 * via clock_set_next_event() 163 * via clock_set_next_event()
164 * @hres_active: State of high resolution mode 164 * @hres_active: State of high resolution mode
165 * @check_clocks: Indictator, when set evaluate time source and clock 165 * @hang_detected: The last hrtimer interrupt detected a hang
166 * event devices whether high resolution mode can be 166 * @nr_events: Total number of hrtimer interrupt events
167 * activated. 167 * @nr_retries: Total number of hrtimer interrupt retries
168 * @nr_events: Total number of timer interrupt events 168 * @nr_hangs: Total number of hrtimer interrupt hangs
169 * @max_hang_time: Maximum time spent in hrtimer_interrupt
169 * @to_pull: LITMUS^RT list of timers to be pulled on this cpu 170 * @to_pull: LITMUS^RT list of timers to be pulled on this cpu
170 */ 171 */
171struct hrtimer_cpu_base { 172struct hrtimer_cpu_base {
172 spinlock_t lock; 173 raw_spinlock_t lock;
173 struct hrtimer_clock_base clock_base[HRTIMER_MAX_CLOCK_BASES]; 174 struct hrtimer_clock_base clock_base[HRTIMER_MAX_CLOCK_BASES];
174#ifdef CONFIG_HIGH_RES_TIMERS 175#ifdef CONFIG_HIGH_RES_TIMERS
175 ktime_t expires_next; 176 ktime_t expires_next;
176 int hres_active; 177 int hres_active;
178 int hang_detected;
177 unsigned long nr_events; 179 unsigned long nr_events;
180 unsigned long nr_retries;
181 unsigned long nr_hangs;
182 ktime_t max_hang_time;
178#endif 183#endif
179 struct list_head to_pull; 184 struct list_head to_pull;
180}; 185};
@@ -460,49 +465,4 @@ extern u64 ktime_divns(const ktime_t kt, s64 div);
460/* Show pending timers: */ 465/* Show pending timers: */
461extern void sysrq_timer_list_show(void); 466extern void sysrq_timer_list_show(void);
462 467
463/*
464 * Timer-statistics info:
465 */
466#ifdef CONFIG_TIMER_STATS
467
468extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
469 void *timerf, char *comm,
470 unsigned int timer_flag);
471
472static inline void timer_stats_account_hrtimer(struct hrtimer *timer)
473{
474 if (likely(!timer->start_site))
475 return;
476 timer_stats_update_stats(timer, timer->start_pid, timer->start_site,
477 timer->function, timer->start_comm, 0);
478}
479
480extern void __timer_stats_hrtimer_set_start_info(struct hrtimer *timer,
481 void *addr);
482
483static inline void timer_stats_hrtimer_set_start_info(struct hrtimer *timer)
484{
485 if (likely(!timer_stats_active))
486 return;
487 __timer_stats_hrtimer_set_start_info(timer, __builtin_return_address(0));
488}
489
490static inline void timer_stats_hrtimer_clear_start_info(struct hrtimer *timer)
491{
492 timer->start_site = NULL;
493}
494#else
495static inline void timer_stats_account_hrtimer(struct hrtimer *timer)
496{
497}
498
499static inline void timer_stats_hrtimer_set_start_info(struct hrtimer *timer)
500{
501}
502
503static inline void timer_stats_hrtimer_clear_start_info(struct hrtimer *timer)
504{
505}
506#endif
507
508#endif 468#endif
diff --git a/include/linux/htcpld.h b/include/linux/htcpld.h
new file mode 100644
index 000000000000..ab3f6cb4dddc
--- /dev/null
+++ b/include/linux/htcpld.h
@@ -0,0 +1,24 @@
1#ifndef __LINUX_HTCPLD_H
2#define __LINUX_HTCPLD_H
3
4struct htcpld_chip_platform_data {
5 unsigned int addr;
6 unsigned int reset;
7 unsigned int num_gpios;
8 unsigned int gpio_out_base;
9 unsigned int gpio_in_base;
10 unsigned int irq_base;
11 unsigned int num_irqs;
12};
13
14struct htcpld_core_platform_data {
15 unsigned int int_reset_gpio_hi;
16 unsigned int int_reset_gpio_lo;
17 unsigned int i2c_adapter_id;
18
19 struct htcpld_chip_platform_data *chip;
20 unsigned int num_chip;
21};
22
23#endif /* __LINUX_HTCPLD_H */
24
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index 41a59afc70fa..78b4bc64c006 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -23,6 +23,12 @@ void reset_vma_resv_huge_pages(struct vm_area_struct *vma);
23int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); 23int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *);
24int hugetlb_overcommit_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); 24int hugetlb_overcommit_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *);
25int hugetlb_treat_movable_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); 25int hugetlb_treat_movable_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *);
26
27#ifdef CONFIG_NUMA
28int hugetlb_mempolicy_sysctl_handler(struct ctl_table *, int,
29 void __user *, size_t *, loff_t *);
30#endif
31
26int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *); 32int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *);
27int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, 33int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *,
28 struct page **, struct vm_area_struct **, 34 struct page **, struct vm_area_struct **,
diff --git a/include/linux/hw_breakpoint.h b/include/linux/hw_breakpoint.h
new file mode 100644
index 000000000000..c70d27af03f9
--- /dev/null
+++ b/include/linux/hw_breakpoint.h
@@ -0,0 +1,127 @@
1#ifndef _LINUX_HW_BREAKPOINT_H
2#define _LINUX_HW_BREAKPOINT_H
3
4enum {
5 HW_BREAKPOINT_LEN_1 = 1,
6 HW_BREAKPOINT_LEN_2 = 2,
7 HW_BREAKPOINT_LEN_4 = 4,
8 HW_BREAKPOINT_LEN_8 = 8,
9};
10
11enum {
12 HW_BREAKPOINT_R = 1,
13 HW_BREAKPOINT_W = 2,
14 HW_BREAKPOINT_X = 4,
15};
16
17#ifdef __KERNEL__
18
19#include <linux/perf_event.h>
20
21#ifdef CONFIG_HAVE_HW_BREAKPOINT
22
23static inline void hw_breakpoint_init(struct perf_event_attr *attr)
24{
25 memset(attr, 0, sizeof(*attr));
26
27 attr->type = PERF_TYPE_BREAKPOINT;
28 attr->size = sizeof(*attr);
29 /*
30 * As it's for in-kernel or ptrace use, we want it to be pinned
31 * and to call its callback every hits.
32 */
33 attr->pinned = 1;
34 attr->sample_period = 1;
35}
36
37static inline unsigned long hw_breakpoint_addr(struct perf_event *bp)
38{
39 return bp->attr.bp_addr;
40}
41
42static inline int hw_breakpoint_type(struct perf_event *bp)
43{
44 return bp->attr.bp_type;
45}
46
47static inline unsigned long hw_breakpoint_len(struct perf_event *bp)
48{
49 return bp->attr.bp_len;
50}
51
52extern struct perf_event *
53register_user_hw_breakpoint(struct perf_event_attr *attr,
54 perf_overflow_handler_t triggered,
55 struct task_struct *tsk);
56
57/* FIXME: only change from the attr, and don't unregister */
58extern int
59modify_user_hw_breakpoint(struct perf_event *bp, struct perf_event_attr *attr);
60
61/*
62 * Kernel breakpoints are not associated with any particular thread.
63 */
64extern struct perf_event *
65register_wide_hw_breakpoint_cpu(struct perf_event_attr *attr,
66 perf_overflow_handler_t triggered,
67 int cpu);
68
69extern struct perf_event * __percpu *
70register_wide_hw_breakpoint(struct perf_event_attr *attr,
71 perf_overflow_handler_t triggered);
72
73extern int register_perf_hw_breakpoint(struct perf_event *bp);
74extern int __register_perf_hw_breakpoint(struct perf_event *bp);
75extern void unregister_hw_breakpoint(struct perf_event *bp);
76extern void unregister_wide_hw_breakpoint(struct perf_event * __percpu *cpu_events);
77
78extern int dbg_reserve_bp_slot(struct perf_event *bp);
79extern int dbg_release_bp_slot(struct perf_event *bp);
80extern int reserve_bp_slot(struct perf_event *bp);
81extern void release_bp_slot(struct perf_event *bp);
82
83extern void flush_ptrace_hw_breakpoint(struct task_struct *tsk);
84
85static inline struct arch_hw_breakpoint *counter_arch_bp(struct perf_event *bp)
86{
87 return &bp->hw.info;
88}
89
90#else /* !CONFIG_HAVE_HW_BREAKPOINT */
91
92static inline struct perf_event *
93register_user_hw_breakpoint(struct perf_event_attr *attr,
94 perf_overflow_handler_t triggered,
95 struct task_struct *tsk) { return NULL; }
96static inline int
97modify_user_hw_breakpoint(struct perf_event *bp,
98 struct perf_event_attr *attr) { return -ENOSYS; }
99static inline struct perf_event *
100register_wide_hw_breakpoint_cpu(struct perf_event_attr *attr,
101 perf_overflow_handler_t triggered,
102 int cpu) { return NULL; }
103static inline struct perf_event * __percpu *
104register_wide_hw_breakpoint(struct perf_event_attr *attr,
105 perf_overflow_handler_t triggered) { return NULL; }
106static inline int
107register_perf_hw_breakpoint(struct perf_event *bp) { return -ENOSYS; }
108static inline int
109__register_perf_hw_breakpoint(struct perf_event *bp) { return -ENOSYS; }
110static inline void unregister_hw_breakpoint(struct perf_event *bp) { }
111static inline void
112unregister_wide_hw_breakpoint(struct perf_event * __percpu *cpu_events) { }
113static inline int
114reserve_bp_slot(struct perf_event *bp) {return -ENOSYS; }
115static inline void release_bp_slot(struct perf_event *bp) { }
116
117static inline void flush_ptrace_hw_breakpoint(struct task_struct *tsk) { }
118
119static inline struct arch_hw_breakpoint *counter_arch_bp(struct perf_event *bp)
120{
121 return NULL;
122}
123
124#endif /* CONFIG_HAVE_HW_BREAKPOINT */
125#endif /* __KERNEL__ */
126
127#endif /* _LINUX_HW_BREAKPOINT_H */
diff --git a/include/linux/hw_random.h b/include/linux/hw_random.h
index 7244456e7e65..9bede7633f74 100644
--- a/include/linux/hw_random.h
+++ b/include/linux/hw_random.h
@@ -22,10 +22,12 @@
22 * @cleanup: Cleanup callback (can be NULL). 22 * @cleanup: Cleanup callback (can be NULL).
23 * @data_present: Callback to determine if data is available 23 * @data_present: Callback to determine if data is available
24 * on the RNG. If NULL, it is assumed that 24 * on the RNG. If NULL, it is assumed that
25 * there is always data available. 25 * there is always data available. *OBSOLETE*
26 * @data_read: Read data from the RNG device. 26 * @data_read: Read data from the RNG device.
27 * Returns the number of lower random bytes in "data". 27 * Returns the number of lower random bytes in "data".
28 * Must not be NULL. 28 * Must not be NULL. *OSOLETE*
29 * @read: New API. drivers can fill up to max bytes of data
30 * into the buffer. The buffer is aligned for any type.
29 * @priv: Private data, for use by the RNG driver. 31 * @priv: Private data, for use by the RNG driver.
30 */ 32 */
31struct hwrng { 33struct hwrng {
@@ -34,6 +36,7 @@ struct hwrng {
34 void (*cleanup)(struct hwrng *rng); 36 void (*cleanup)(struct hwrng *rng);
35 int (*data_present)(struct hwrng *rng, int wait); 37 int (*data_present)(struct hwrng *rng, int wait);
36 int (*data_read)(struct hwrng *rng, u32 *data); 38 int (*data_read)(struct hwrng *rng, u32 *data);
39 int (*read)(struct hwrng *rng, void *data, size_t max, bool wait);
37 unsigned long priv; 40 unsigned long priv;
38 41
39 /* internal. */ 42 /* internal. */
diff --git a/include/linux/i2c-algo-bit.h b/include/linux/i2c-algo-bit.h
index 111334f5b922..4f98148c11c3 100644
--- a/include/linux/i2c-algo-bit.h
+++ b/include/linux/i2c-algo-bit.h
@@ -36,6 +36,8 @@ struct i2c_algo_bit_data {
36 void (*setscl) (void *data, int state); 36 void (*setscl) (void *data, int state);
37 int (*getsda) (void *data); 37 int (*getsda) (void *data);
38 int (*getscl) (void *data); 38 int (*getscl) (void *data);
39 int (*pre_xfer) (struct i2c_adapter *);
40 void (*post_xfer) (struct i2c_adapter *);
39 41
40 /* local settings */ 42 /* local settings */
41 int udelay; /* half clock cycle time in us, 43 int udelay; /* half clock cycle time in us,
diff --git a/include/linux/i2c-pnx.h b/include/linux/i2c-pnx.h
index 9eb07bbc6522..a87124d4d533 100644
--- a/include/linux/i2c-pnx.h
+++ b/include/linux/i2c-pnx.h
@@ -12,9 +12,8 @@
12#ifndef __I2C_PNX_H__ 12#ifndef __I2C_PNX_H__
13#define __I2C_PNX_H__ 13#define __I2C_PNX_H__
14 14
15#include <linux/pm.h>
16
17struct platform_device; 15struct platform_device;
16struct clk;
18 17
19struct i2c_pnx_mif { 18struct i2c_pnx_mif {
20 int ret; /* Return value */ 19 int ret; /* Return value */
@@ -26,20 +25,18 @@ struct i2c_pnx_mif {
26}; 25};
27 26
28struct i2c_pnx_algo_data { 27struct i2c_pnx_algo_data {
29 u32 base; 28 void __iomem *ioaddr;
30 u32 ioaddr;
31 int irq;
32 struct i2c_pnx_mif mif; 29 struct i2c_pnx_mif mif;
33 int last; 30 int last;
31 struct clk *clk;
32 struct i2c_pnx_data *i2c_pnx;
33 struct i2c_adapter adapter;
34}; 34};
35 35
36struct i2c_pnx_data { 36struct i2c_pnx_data {
37 int (*suspend) (struct platform_device *pdev, pm_message_t state); 37 const char *name;
38 int (*resume) (struct platform_device *pdev); 38 u32 base;
39 u32 (*calculate_input_freq) (struct platform_device *pdev); 39 int irq;
40 int (*set_clock_run) (struct platform_device *pdev);
41 int (*set_clock_stop) (struct platform_device *pdev);
42 struct i2c_adapter *adapter;
43}; 40};
44 41
45#endif /* __I2C_PNX_H__ */ 42#endif /* __I2C_PNX_H__ */
diff --git a/include/linux/i2c-smbus.h b/include/linux/i2c-smbus.h
new file mode 100644
index 000000000000..63f57a8c8b31
--- /dev/null
+++ b/include/linux/i2c-smbus.h
@@ -0,0 +1,50 @@
1/*
2 * i2c-smbus.h - SMBus extensions to the I2C protocol
3 *
4 * Copyright (C) 2010 Jean Delvare <khali@linux-fr.org>
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., 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20
21#ifndef _LINUX_I2C_SMBUS_H
22#define _LINUX_I2C_SMBUS_H
23
24#include <linux/i2c.h>
25
26
27/**
28 * i2c_smbus_alert_setup - platform data for the smbus_alert i2c client
29 * @alert_edge_triggered: whether the alert interrupt is edge (1) or level (0)
30 * triggered
31 * @irq: IRQ number, if the smbus_alert driver should take care of interrupt
32 * handling
33 *
34 * If irq is not specified, the smbus_alert driver doesn't take care of
35 * interrupt handling. In that case it is up to the I2C bus driver to either
36 * handle the interrupts or to poll for alerts.
37 *
38 * If irq is specified then it it crucial that alert_edge_triggered is
39 * properly set.
40 */
41struct i2c_smbus_alert_setup {
42 unsigned int alert_edge_triggered:1;
43 int irq;
44};
45
46struct i2c_client *i2c_setup_smbus_alert(struct i2c_adapter *adapter,
47 struct i2c_smbus_alert_setup *setup);
48int i2c_handle_smbus_alert(struct i2c_client *ara);
49
50#endif /* _LINUX_I2C_SMBUS_H */
diff --git a/include/linux/i2c-xiic.h b/include/linux/i2c-xiic.h
new file mode 100644
index 000000000000..4f9f2256a97e
--- /dev/null
+++ b/include/linux/i2c-xiic.h
@@ -0,0 +1,43 @@
1/*
2 * i2c-xiic.h
3 * Copyright (c) 2009 Intel Corporation
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/* Supports:
20 * Xilinx IIC
21 */
22
23#ifndef _LINUX_I2C_XIIC_H
24#define _LINUX_I2C_XIIC_H
25
26/**
27 * struct xiic_i2c_platform_data - Platform data of the Xilinx I2C driver
28 * @num_devices: Number of devices that shall be added when the driver
29 * is probed.
30 * @devices: The actuall devices to add.
31 *
32 * This purpose of this platform data struct is to be able to provide a number
33 * of devices that should be added to the I2C bus. The reason is that sometimes
34 * the I2C board info is not enough, a new PCI board can for instance be
35 * plugged into a standard PC, and the bus number might be unknown at
36 * early init time.
37 */
38struct xiic_i2c_platform_data {
39 u8 num_devices;
40 struct i2c_board_info const *devices;
41};
42
43#endif /* _LINUX_I2C_XIIC_H */
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index 7b40cda57a70..6ed1d59bfb1e 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -53,6 +53,7 @@ struct i2c_board_info;
53 * on a bus (or read from them). Apart from two basic transfer functions to 53 * on a bus (or read from them). Apart from two basic transfer functions to
54 * transmit one message at a time, a more complex version can be used to 54 * transmit one message at a time, a more complex version can be used to
55 * transmit an arbitrary number of messages without interruption. 55 * transmit an arbitrary number of messages without interruption.
56 * @count must be be less than 64k since msg.len is u16.
56 */ 57 */
57extern int i2c_master_send(struct i2c_client *client, const char *buf, 58extern int i2c_master_send(struct i2c_client *client, const char *buf,
58 int count); 59 int count);
@@ -110,7 +111,7 @@ extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client,
110 * @driver: Device driver model driver 111 * @driver: Device driver model driver
111 * @id_table: List of I2C devices supported by this driver 112 * @id_table: List of I2C devices supported by this driver
112 * @detect: Callback for device detection 113 * @detect: Callback for device detection
113 * @address_data: The I2C addresses to probe, ignore or force (for detect) 114 * @address_list: The I2C addresses to probe (for detect)
114 * @clients: List of detected clients we created (for i2c-core use only) 115 * @clients: List of detected clients we created (for i2c-core use only)
115 * 116 *
116 * The driver.owner field should be set to the module owner of this driver. 117 * The driver.owner field should be set to the module owner of this driver.
@@ -152,6 +153,13 @@ struct i2c_driver {
152 int (*suspend)(struct i2c_client *, pm_message_t mesg); 153 int (*suspend)(struct i2c_client *, pm_message_t mesg);
153 int (*resume)(struct i2c_client *); 154 int (*resume)(struct i2c_client *);
154 155
156 /* Alert callback, for example for the SMBus alert protocol.
157 * The format and meaning of the data value depends on the protocol.
158 * For the SMBus alert protocol, there is a single bit of data passed
159 * as the alert response's low bit ("event flag").
160 */
161 void (*alert)(struct i2c_client *, unsigned int data);
162
155 /* a ioctl like command that can be used to perform specific functions 163 /* a ioctl like command that can be used to perform specific functions
156 * with the device. 164 * with the device.
157 */ 165 */
@@ -161,8 +169,8 @@ struct i2c_driver {
161 const struct i2c_device_id *id_table; 169 const struct i2c_device_id *id_table;
162 170
163 /* Device detection callback for automatic device creation */ 171 /* Device detection callback for automatic device creation */
164 int (*detect)(struct i2c_client *, int kind, struct i2c_board_info *); 172 int (*detect)(struct i2c_client *, struct i2c_board_info *);
165 const struct i2c_client_address_data *address_data; 173 const unsigned short *address_list;
166 struct list_head clients; 174 struct list_head clients;
167}; 175};
168#define to_i2c_driver(d) container_of(d, struct i2c_driver, driver) 176#define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
@@ -338,8 +346,7 @@ struct i2c_adapter {
338 void *algo_data; 346 void *algo_data;
339 347
340 /* data fields that are valid for all devices */ 348 /* data fields that are valid for all devices */
341 u8 level; /* nesting level for lockdep */ 349 struct rt_mutex bus_lock;
342 struct mutex bus_lock;
343 350
344 int timeout; /* in jiffies */ 351 int timeout; /* in jiffies */
345 int retries; 352 int retries;
@@ -348,6 +355,8 @@ struct i2c_adapter {
348 int nr; 355 int nr;
349 char name[48]; 356 char name[48];
350 struct completion dev_released; 357 struct completion dev_released;
358
359 struct list_head userspace_clients;
351}; 360};
352#define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev) 361#define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
353 362
@@ -367,7 +376,7 @@ static inline void i2c_set_adapdata(struct i2c_adapter *dev, void *data)
367 */ 376 */
368static inline void i2c_lock_adapter(struct i2c_adapter *adapter) 377static inline void i2c_lock_adapter(struct i2c_adapter *adapter)
369{ 378{
370 mutex_lock(&adapter->bus_lock); 379 rt_mutex_lock(&adapter->bus_lock);
371} 380}
372 381
373/** 382/**
@@ -376,7 +385,7 @@ static inline void i2c_lock_adapter(struct i2c_adapter *adapter)
376 */ 385 */
377static inline void i2c_unlock_adapter(struct i2c_adapter *adapter) 386static inline void i2c_unlock_adapter(struct i2c_adapter *adapter)
378{ 387{
379 mutex_unlock(&adapter->bus_lock); 388 rt_mutex_unlock(&adapter->bus_lock);
380} 389}
381 390
382/*flags for the client struct: */ 391/*flags for the client struct: */
@@ -392,17 +401,6 @@ static inline void i2c_unlock_adapter(struct i2c_adapter *adapter)
392#define I2C_CLASS_DDC (1<<3) /* DDC bus on graphics adapters */ 401#define I2C_CLASS_DDC (1<<3) /* DDC bus on graphics adapters */
393#define I2C_CLASS_SPD (1<<7) /* SPD EEPROMs and similar */ 402#define I2C_CLASS_SPD (1<<7) /* SPD EEPROMs and similar */
394 403
395/* i2c_client_address_data is the struct for holding default client
396 * addresses for a driver and for the parameters supplied on the
397 * command line
398 */
399struct i2c_client_address_data {
400 const unsigned short *normal_i2c;
401 const unsigned short *probe;
402 const unsigned short *ignore;
403 const unsigned short * const *forces;
404};
405
406/* Internal numbers to terminate lists */ 404/* Internal numbers to terminate lists */
407#define I2C_CLIENT_END 0xfffeU 405#define I2C_CLIENT_END 0xfffeU
408 406
@@ -580,168 +578,4 @@ union i2c_smbus_data {
580#define I2C_SMBUS_BLOCK_PROC_CALL 7 /* SMBus 2.0 */ 578#define I2C_SMBUS_BLOCK_PROC_CALL 7 /* SMBus 2.0 */
581#define I2C_SMBUS_I2C_BLOCK_DATA 8 579#define I2C_SMBUS_I2C_BLOCK_DATA 8
582 580
583
584#ifdef __KERNEL__
585
586/* These defines are used for probing i2c client addresses */
587/* The length of the option lists */
588#define I2C_CLIENT_MAX_OPTS 48
589
590/* Default fill of many variables */
591#define I2C_CLIENT_DEFAULTS {I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
592 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
593 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
594 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
595 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
596 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
597 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
598 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
599 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
600 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
601 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
602 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
603 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
604 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
605 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
606 I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END}
607
608/* I2C_CLIENT_MODULE_PARM creates a module parameter, and puts it in the
609 module header */
610
611#define I2C_CLIENT_MODULE_PARM(var,desc) \
612 static unsigned short var[I2C_CLIENT_MAX_OPTS] = I2C_CLIENT_DEFAULTS; \
613 static unsigned int var##_num; \
614 module_param_array(var, short, &var##_num, 0); \
615 MODULE_PARM_DESC(var, desc)
616
617#define I2C_CLIENT_MODULE_PARM_FORCE(name) \
618I2C_CLIENT_MODULE_PARM(force_##name, \
619 "List of adapter,address pairs which are " \
620 "unquestionably assumed to contain a `" \
621 # name "' chip")
622
623
624#define I2C_CLIENT_INSMOD_COMMON \
625I2C_CLIENT_MODULE_PARM(probe, "List of adapter,address pairs to scan " \
626 "additionally"); \
627I2C_CLIENT_MODULE_PARM(ignore, "List of adapter,address pairs not to " \
628 "scan"); \
629static const struct i2c_client_address_data addr_data = { \
630 .normal_i2c = normal_i2c, \
631 .probe = probe, \
632 .ignore = ignore, \
633 .forces = forces, \
634}
635
636#define I2C_CLIENT_FORCE_TEXT \
637 "List of adapter,address pairs to boldly assume to be present"
638
639/* These are the ones you want to use in your own drivers. Pick the one
640 which matches the number of devices the driver differenciates between. */
641#define I2C_CLIENT_INSMOD \
642I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
643static const unsigned short * const forces[] = { force, NULL }; \
644I2C_CLIENT_INSMOD_COMMON
645
646#define I2C_CLIENT_INSMOD_1(chip1) \
647enum chips { any_chip, chip1 }; \
648I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
649I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
650static const unsigned short * const forces[] = { force, \
651 force_##chip1, NULL }; \
652I2C_CLIENT_INSMOD_COMMON
653
654#define I2C_CLIENT_INSMOD_2(chip1, chip2) \
655enum chips { any_chip, chip1, chip2 }; \
656I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
657I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
658I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
659static const unsigned short * const forces[] = { force, \
660 force_##chip1, force_##chip2, NULL }; \
661I2C_CLIENT_INSMOD_COMMON
662
663#define I2C_CLIENT_INSMOD_3(chip1, chip2, chip3) \
664enum chips { any_chip, chip1, chip2, chip3 }; \
665I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
666I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
667I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
668I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
669static const unsigned short * const forces[] = { force, \
670 force_##chip1, force_##chip2, force_##chip3, NULL }; \
671I2C_CLIENT_INSMOD_COMMON
672
673#define I2C_CLIENT_INSMOD_4(chip1, chip2, chip3, chip4) \
674enum chips { any_chip, chip1, chip2, chip3, chip4 }; \
675I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
676I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
677I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
678I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
679I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
680static const unsigned short * const forces[] = { force, \
681 force_##chip1, force_##chip2, force_##chip3, \
682 force_##chip4, NULL}; \
683I2C_CLIENT_INSMOD_COMMON
684
685#define I2C_CLIENT_INSMOD_5(chip1, chip2, chip3, chip4, chip5) \
686enum chips { any_chip, chip1, chip2, chip3, chip4, chip5 }; \
687I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
688I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
689I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
690I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
691I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
692I2C_CLIENT_MODULE_PARM_FORCE(chip5); \
693static const unsigned short * const forces[] = { force, \
694 force_##chip1, force_##chip2, force_##chip3, \
695 force_##chip4, force_##chip5, NULL }; \
696I2C_CLIENT_INSMOD_COMMON
697
698#define I2C_CLIENT_INSMOD_6(chip1, chip2, chip3, chip4, chip5, chip6) \
699enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6 }; \
700I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
701I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
702I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
703I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
704I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
705I2C_CLIENT_MODULE_PARM_FORCE(chip5); \
706I2C_CLIENT_MODULE_PARM_FORCE(chip6); \
707static const unsigned short * const forces[] = { force, \
708 force_##chip1, force_##chip2, force_##chip3, \
709 force_##chip4, force_##chip5, force_##chip6, NULL }; \
710I2C_CLIENT_INSMOD_COMMON
711
712#define I2C_CLIENT_INSMOD_7(chip1, chip2, chip3, chip4, chip5, chip6, chip7) \
713enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, \
714 chip7 }; \
715I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
716I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
717I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
718I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
719I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
720I2C_CLIENT_MODULE_PARM_FORCE(chip5); \
721I2C_CLIENT_MODULE_PARM_FORCE(chip6); \
722I2C_CLIENT_MODULE_PARM_FORCE(chip7); \
723static const unsigned short * const forces[] = { force, \
724 force_##chip1, force_##chip2, force_##chip3, \
725 force_##chip4, force_##chip5, force_##chip6, \
726 force_##chip7, NULL }; \
727I2C_CLIENT_INSMOD_COMMON
728
729#define I2C_CLIENT_INSMOD_8(chip1, chip2, chip3, chip4, chip5, chip6, chip7, chip8) \
730enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, \
731 chip7, chip8 }; \
732I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \
733I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
734I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
735I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
736I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
737I2C_CLIENT_MODULE_PARM_FORCE(chip5); \
738I2C_CLIENT_MODULE_PARM_FORCE(chip6); \
739I2C_CLIENT_MODULE_PARM_FORCE(chip7); \
740I2C_CLIENT_MODULE_PARM_FORCE(chip8); \
741static const unsigned short * const forces[] = { force, \
742 force_##chip1, force_##chip2, force_##chip3, \
743 force_##chip4, force_##chip5, force_##chip6, \
744 force_##chip7, force_##chip8, NULL }; \
745I2C_CLIENT_INSMOD_COMMON
746#endif /* __KERNEL__ */
747#endif /* _LINUX_I2C_H */ 581#endif /* _LINUX_I2C_H */
diff --git a/include/linux/i2c/adp5588.h b/include/linux/i2c/adp5588.h
index fc5db826b48e..02c9af374741 100644
--- a/include/linux/i2c/adp5588.h
+++ b/include/linux/i2c/adp5588.h
@@ -89,4 +89,16 @@ struct adp5588_kpad_platform_data {
89 unsigned short unlock_key2; /* Unlock Key 2 */ 89 unsigned short unlock_key2; /* Unlock Key 2 */
90}; 90};
91 91
92struct adp5588_gpio_platform_data {
93 unsigned gpio_start; /* GPIO Chip base # */
94 unsigned pullup_dis_mask; /* Pull-Up Disable Mask */
95 int (*setup)(struct i2c_client *client,
96 int gpio, unsigned ngpio,
97 void *context);
98 int (*teardown)(struct i2c_client *client,
99 int gpio, unsigned ngpio,
100 void *context);
101 void *context;
102};
103
92#endif 104#endif
diff --git a/include/linux/i2c/pca953x.h b/include/linux/i2c/pca953x.h
index 81736d6a8db7..d5c5a60c8a0b 100644
--- a/include/linux/i2c/pca953x.h
+++ b/include/linux/i2c/pca953x.h
@@ -1,3 +1,9 @@
1#ifndef _LINUX_PCA953X_H
2#define _LINUX_PCA953X_H
3
4#include <linux/types.h>
5#include <linux/i2c.h>
6
1/* platform data for the PCA9539 16-bit I/O expander driver */ 7/* platform data for the PCA9539 16-bit I/O expander driver */
2 8
3struct pca953x_platform_data { 9struct pca953x_platform_data {
@@ -7,6 +13,9 @@ struct pca953x_platform_data {
7 /* initial polarity inversion setting */ 13 /* initial polarity inversion setting */
8 uint16_t invert; 14 uint16_t invert;
9 15
16 /* interrupt base */
17 int irq_base;
18
10 void *context; /* param to setup/teardown */ 19 void *context; /* param to setup/teardown */
11 20
12 int (*setup)(struct i2c_client *client, 21 int (*setup)(struct i2c_client *client,
@@ -17,3 +26,5 @@ struct pca953x_platform_data {
17 void *context); 26 void *context);
18 char **names; 27 char **names;
19}; 28};
29
30#endif /* _LINUX_PCA953X_H */
diff --git a/include/linux/i2c/tps65010.h b/include/linux/i2c/tps65010.h
index 918c5354d9b8..08aa92278d71 100644
--- a/include/linux/i2c/tps65010.h
+++ b/include/linux/i2c/tps65010.h
@@ -72,6 +72,21 @@
72#define TPS_VDCDC1 0x0c 72#define TPS_VDCDC1 0x0c
73# define TPS_ENABLE_LP (1 << 3) 73# define TPS_ENABLE_LP (1 << 3)
74#define TPS_VDCDC2 0x0d 74#define TPS_VDCDC2 0x0d
75# define TPS_LP_COREOFF (1 << 7)
76# define TPS_VCORE_1_8V (7<<4)
77# define TPS_VCORE_1_5V (6 << 4)
78# define TPS_VCORE_1_4V (5 << 4)
79# define TPS_VCORE_1_3V (4 << 4)
80# define TPS_VCORE_1_2V (3 << 4)
81# define TPS_VCORE_1_1V (2 << 4)
82# define TPS_VCORE_1_0V (1 << 4)
83# define TPS_VCORE_0_85V (0 << 4)
84# define TPS_VCORE_LP_1_2V (3 << 2)
85# define TPS_VCORE_LP_1_1V (2 << 2)
86# define TPS_VCORE_LP_1_0V (1 << 2)
87# define TPS_VCORE_LP_0_85V (0 << 2)
88# define TPS_VIB (1 << 1)
89# define TPS_VCORE_DISCH (1 << 0)
75#define TPS_VREGS1 0x0e 90#define TPS_VREGS1 0x0e
76# define TPS_LDO2_ENABLE (1 << 7) 91# define TPS_LDO2_ENABLE (1 << 7)
77# define TPS_LDO2_OFF (1 << 6) 92# define TPS_LDO2_OFF (1 << 6)
@@ -152,6 +167,10 @@ extern int tps65010_config_vregs1(unsigned value);
152 */ 167 */
153extern int tps65013_set_low_pwr(unsigned mode); 168extern int tps65013_set_low_pwr(unsigned mode);
154 169
170/* tps65010_set_vdcdc2
171 * value to be written to VDCDC2
172 */
173extern int tps65010_config_vdcdc2(unsigned value);
155 174
156struct i2c_client; 175struct i2c_client;
157 176
diff --git a/include/linux/i2c/twl4030.h b/include/linux/i2c/twl.h
index 508824ee35e6..fb6784e86d5f 100644
--- a/include/linux/i2c/twl4030.h
+++ b/include/linux/i2c/twl.h
@@ -22,8 +22,8 @@
22 * 22 *
23 */ 23 */
24 24
25#ifndef __TWL4030_H_ 25#ifndef __TWL_H_
26#define __TWL4030_H_ 26#define __TWL_H_
27 27
28#include <linux/types.h> 28#include <linux/types.h>
29#include <linux/input/matrix_keypad.h> 29#include <linux/input/matrix_keypad.h>
@@ -61,28 +61,117 @@
61#define TWL4030_MODULE_PWMA 0x0E 61#define TWL4030_MODULE_PWMA 0x0E
62#define TWL4030_MODULE_PWMB 0x0F 62#define TWL4030_MODULE_PWMB 0x0F
63 63
64#define TWL5031_MODULE_ACCESSORY 0x10
65#define TWL5031_MODULE_INTERRUPTS 0x11
66
64/* Slave 3 (i2c address 0x4b) */ 67/* Slave 3 (i2c address 0x4b) */
65#define TWL4030_MODULE_BACKUP 0x10 68#define TWL4030_MODULE_BACKUP 0x12
66#define TWL4030_MODULE_INT 0x11 69#define TWL4030_MODULE_INT 0x13
67#define TWL4030_MODULE_PM_MASTER 0x12 70#define TWL4030_MODULE_PM_MASTER 0x14
68#define TWL4030_MODULE_PM_RECEIVER 0x13 71#define TWL4030_MODULE_PM_RECEIVER 0x15
69#define TWL4030_MODULE_RTC 0x14 72#define TWL4030_MODULE_RTC 0x16
70#define TWL4030_MODULE_SECURED_REG 0x15 73#define TWL4030_MODULE_SECURED_REG 0x17
74
75#define TWL_MODULE_USB TWL4030_MODULE_USB
76#define TWL_MODULE_AUDIO_VOICE TWL4030_MODULE_AUDIO_VOICE
77#define TWL_MODULE_PIH TWL4030_MODULE_PIH
78#define TWL_MODULE_MADC TWL4030_MODULE_MADC
79#define TWL_MODULE_MAIN_CHARGE TWL4030_MODULE_MAIN_CHARGE
80#define TWL_MODULE_PM_MASTER TWL4030_MODULE_PM_MASTER
81#define TWL_MODULE_PM_RECEIVER TWL4030_MODULE_PM_RECEIVER
82#define TWL_MODULE_RTC TWL4030_MODULE_RTC
83#define TWL_MODULE_PWM TWL4030_MODULE_PWM0
84
85#define TWL6030_MODULE_ID0 0x0D
86#define TWL6030_MODULE_ID1 0x0E
87#define TWL6030_MODULE_ID2 0x0F
88
89#define GPIO_INTR_OFFSET 0
90#define KEYPAD_INTR_OFFSET 1
91#define BCI_INTR_OFFSET 2
92#define MADC_INTR_OFFSET 3
93#define USB_INTR_OFFSET 4
94#define BCI_PRES_INTR_OFFSET 9
95#define USB_PRES_INTR_OFFSET 10
96#define RTC_INTR_OFFSET 11
97
98/*
99 * Offset from TWL6030_IRQ_BASE / pdata->irq_base
100 */
101#define PWR_INTR_OFFSET 0
102#define HOTDIE_INTR_OFFSET 12
103#define SMPSLDO_INTR_OFFSET 13
104#define BATDETECT_INTR_OFFSET 14
105#define SIMDETECT_INTR_OFFSET 15
106#define MMCDETECT_INTR_OFFSET 16
107#define GASGAUGE_INTR_OFFSET 17
108#define USBOTG_INTR_OFFSET 4
109#define CHARGER_INTR_OFFSET 2
110#define RSV_INTR_OFFSET 0
111
112/* INT register offsets */
113#define REG_INT_STS_A 0x00
114#define REG_INT_STS_B 0x01
115#define REG_INT_STS_C 0x02
116
117#define REG_INT_MSK_LINE_A 0x03
118#define REG_INT_MSK_LINE_B 0x04
119#define REG_INT_MSK_LINE_C 0x05
120
121#define REG_INT_MSK_STS_A 0x06
122#define REG_INT_MSK_STS_B 0x07
123#define REG_INT_MSK_STS_C 0x08
124
125/* MASK INT REG GROUP A */
126#define TWL6030_PWR_INT_MASK 0x07
127#define TWL6030_RTC_INT_MASK 0x18
128#define TWL6030_HOTDIE_INT_MASK 0x20
129#define TWL6030_SMPSLDOA_INT_MASK 0xC0
130
131/* MASK INT REG GROUP B */
132#define TWL6030_SMPSLDOB_INT_MASK 0x01
133#define TWL6030_BATDETECT_INT_MASK 0x02
134#define TWL6030_SIMDETECT_INT_MASK 0x04
135#define TWL6030_MMCDETECT_INT_MASK 0x08
136#define TWL6030_GPADC_INT_MASK 0x60
137#define TWL6030_GASGAUGE_INT_MASK 0x80
138
139/* MASK INT REG GROUP C */
140#define TWL6030_USBOTG_INT_MASK 0x0F
141#define TWL6030_CHARGER_CTRL_INT_MASK 0x10
142#define TWL6030_CHARGER_FAULT_INT_MASK 0x60
143
144
145#define TWL4030_CLASS_ID 0x4030
146#define TWL6030_CLASS_ID 0x6030
147unsigned int twl_rev(void);
148#define GET_TWL_REV (twl_rev())
149#define TWL_CLASS_IS(class, id) \
150static inline int twl_class_is_ ##class(void) \
151{ \
152 return ((id) == (GET_TWL_REV)) ? 1 : 0; \
153}
154
155TWL_CLASS_IS(4030, TWL4030_CLASS_ID)
156TWL_CLASS_IS(6030, TWL6030_CLASS_ID)
71 157
72/* 158/*
73 * Read and write single 8-bit registers 159 * Read and write single 8-bit registers
74 */ 160 */
75int twl4030_i2c_write_u8(u8 mod_no, u8 val, u8 reg); 161int twl_i2c_write_u8(u8 mod_no, u8 val, u8 reg);
76int twl4030_i2c_read_u8(u8 mod_no, u8 *val, u8 reg); 162int twl_i2c_read_u8(u8 mod_no, u8 *val, u8 reg);
77 163
78/* 164/*
79 * Read and write several 8-bit registers at once. 165 * Read and write several 8-bit registers at once.
80 * 166 *
81 * IMPORTANT: For twl4030_i2c_write(), allocate num_bytes + 1 167 * IMPORTANT: For twl_i2c_write(), allocate num_bytes + 1
82 * for the value, and populate your data starting at offset 1. 168 * for the value, and populate your data starting at offset 1.
83 */ 169 */
84int twl4030_i2c_write(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes); 170int twl_i2c_write(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
85int twl4030_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes); 171int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
172
173int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
174int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
86 175
87/*----------------------------------------------------------------------*/ 176/*----------------------------------------------------------------------*/
88 177
@@ -155,6 +244,21 @@ int twl4030_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
155 244
156/*----------------------------------------------------------------------*/ 245/*----------------------------------------------------------------------*/
157 246
247/*Interface Bit Register (INTBR) offsets
248 *(Use TWL_4030_MODULE_INTBR)
249 */
250
251#define REG_GPPUPDCTR1 0x0F
252
253/*I2C1 and I2C4(SR) SDA/SCL pull-up control bits */
254
255#define I2C_SCL_CTRL_PU BIT(0)
256#define I2C_SDA_CTRL_PU BIT(2)
257#define SR_I2C_SCL_CTRL_PU BIT(4)
258#define SR_I2C_SDA_CTRL_PU BIT(6)
259
260/*----------------------------------------------------------------------*/
261
158/* 262/*
159 * Keypad register offsets (use TWL4030_MODULE_KEYPAD) 263 * Keypad register offsets (use TWL4030_MODULE_KEYPAD)
160 * ... SIH/interrupt only 264 * ... SIH/interrupt only
@@ -221,6 +325,38 @@ int twl4030_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
221 325
222/*----------------------------------------------------------------------*/ 326/*----------------------------------------------------------------------*/
223 327
328/*
329 * Accessory Interrupts
330 */
331#define TWL5031_ACIIMR_LSB 0x05
332#define TWL5031_ACIIMR_MSB 0x06
333#define TWL5031_ACIIDR_LSB 0x07
334#define TWL5031_ACIIDR_MSB 0x08
335#define TWL5031_ACCISR1 0x0F
336#define TWL5031_ACCIMR1 0x10
337#define TWL5031_ACCISR2 0x11
338#define TWL5031_ACCIMR2 0x12
339#define TWL5031_ACCSIR 0x13
340#define TWL5031_ACCEDR1 0x14
341#define TWL5031_ACCSIHCTRL 0x15
342
343/*----------------------------------------------------------------------*/
344
345/*
346 * Battery Charger Controller
347 */
348
349#define TWL5031_INTERRUPTS_BCIISR1 0x0
350#define TWL5031_INTERRUPTS_BCIIMR1 0x1
351#define TWL5031_INTERRUPTS_BCIISR2 0x2
352#define TWL5031_INTERRUPTS_BCIIMR2 0x3
353#define TWL5031_INTERRUPTS_BCISIR 0x4
354#define TWL5031_INTERRUPTS_BCIEDR1 0x5
355#define TWL5031_INTERRUPTS_BCIEDR2 0x6
356#define TWL5031_INTERRUPTS_BCISIHCTRL 0x7
357
358/*----------------------------------------------------------------------*/
359
224/* Power bus message definitions */ 360/* Power bus message definitions */
225 361
226/* The TWL4030/5030 splits its power-management resources (the various 362/* The TWL4030/5030 splits its power-management resources (the various
@@ -250,6 +386,7 @@ int twl4030_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
250 386
251#define RES_TYPE_ALL 0x7 387#define RES_TYPE_ALL 0x7
252 388
389/* Resource states */
253#define RES_STATE_WRST 0xF 390#define RES_STATE_WRST 0xF
254#define RES_STATE_ACTIVE 0xE 391#define RES_STATE_ACTIVE 0xE
255#define RES_STATE_SLEEP 0x8 392#define RES_STATE_SLEEP 0x8
@@ -310,8 +447,18 @@ int twl4030_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
310#define MSG_SINGULAR(devgrp, id, state) \ 447#define MSG_SINGULAR(devgrp, id, state) \
311 ((devgrp) << 13 | 0 << 12 | (id) << 4 | (state)) 448 ((devgrp) << 13 | 0 << 12 | (id) << 4 | (state))
312 449
450#define MSG_BROADCAST_ALL(devgrp, state) \
451 ((devgrp) << 5 | (state))
452
453#define MSG_BROADCAST_REF MSG_BROADCAST_ALL
454#define MSG_BROADCAST_PROV MSG_BROADCAST_ALL
455#define MSG_BROADCAST__CLK_RST MSG_BROADCAST_ALL
313/*----------------------------------------------------------------------*/ 456/*----------------------------------------------------------------------*/
314 457
458struct twl4030_clock_init_data {
459 bool ck32k_lowpwr_enable;
460};
461
315struct twl4030_bci_platform_data { 462struct twl4030_bci_platform_data {
316 int *battery_tmp_tbl; 463 int *battery_tmp_tbl;
317 unsigned int tblsize; 464 unsigned int tblsize;
@@ -391,38 +538,78 @@ struct twl4030_resconfig {
391 u8 devgroup; /* Processor group that Power resource belongs to */ 538 u8 devgroup; /* Processor group that Power resource belongs to */
392 u8 type; /* Power resource addressed, 6 / broadcast message */ 539 u8 type; /* Power resource addressed, 6 / broadcast message */
393 u8 type2; /* Power resource addressed, 3 / broadcast message */ 540 u8 type2; /* Power resource addressed, 3 / broadcast message */
541 u8 remap_off; /* off state remapping */
542 u8 remap_sleep; /* sleep state remapping */
394}; 543};
395 544
396struct twl4030_power_data { 545struct twl4030_power_data {
397 struct twl4030_script **scripts; 546 struct twl4030_script **scripts;
398 unsigned num; 547 unsigned num;
399 struct twl4030_resconfig *resource_config; 548 struct twl4030_resconfig *resource_config;
549#define TWL4030_RESCONFIG_UNDEF ((u8)-1)
400}; 550};
401 551
402extern void twl4030_power_init(struct twl4030_power_data *triton2_scripts); 552extern void twl4030_power_init(struct twl4030_power_data *triton2_scripts);
553extern int twl4030_remove_script(u8 flags);
554
555struct twl4030_codec_audio_data {
556 unsigned int audio_mclk;
557 unsigned int ramp_delay_value;
558 unsigned int hs_extmute:1;
559 void (*set_hs_extmute)(int mute);
560};
561
562struct twl4030_codec_vibra_data {
563 unsigned int audio_mclk;
564 unsigned int coexist;
565};
566
567struct twl4030_codec_data {
568 unsigned int audio_mclk;
569 struct twl4030_codec_audio_data *audio;
570 struct twl4030_codec_vibra_data *vibra;
571
572 /* twl6030 */
573 int audpwron_gpio; /* audio power-on gpio */
574 int naudint_irq; /* audio interrupt */
575};
403 576
404struct twl4030_platform_data { 577struct twl4030_platform_data {
405 unsigned irq_base, irq_end; 578 unsigned irq_base, irq_end;
579 struct twl4030_clock_init_data *clock;
406 struct twl4030_bci_platform_data *bci; 580 struct twl4030_bci_platform_data *bci;
407 struct twl4030_gpio_platform_data *gpio; 581 struct twl4030_gpio_platform_data *gpio;
408 struct twl4030_madc_platform_data *madc; 582 struct twl4030_madc_platform_data *madc;
409 struct twl4030_keypad_data *keypad; 583 struct twl4030_keypad_data *keypad;
410 struct twl4030_usb_data *usb; 584 struct twl4030_usb_data *usb;
411 struct twl4030_power_data *power; 585 struct twl4030_power_data *power;
586 struct twl4030_codec_data *codec;
412 587
413 /* LDO regulators */ 588 /* Common LDO regulators for TWL4030/TWL6030 */
414 struct regulator_init_data *vdac; 589 struct regulator_init_data *vdac;
590 struct regulator_init_data *vaux1;
591 struct regulator_init_data *vaux2;
592 struct regulator_init_data *vaux3;
593 /* TWL4030 LDO regulators */
415 struct regulator_init_data *vpll1; 594 struct regulator_init_data *vpll1;
416 struct regulator_init_data *vpll2; 595 struct regulator_init_data *vpll2;
417 struct regulator_init_data *vmmc1; 596 struct regulator_init_data *vmmc1;
418 struct regulator_init_data *vmmc2; 597 struct regulator_init_data *vmmc2;
419 struct regulator_init_data *vsim; 598 struct regulator_init_data *vsim;
420 struct regulator_init_data *vaux1;
421 struct regulator_init_data *vaux2;
422 struct regulator_init_data *vaux3;
423 struct regulator_init_data *vaux4; 599 struct regulator_init_data *vaux4;
424 600 struct regulator_init_data *vio;
425 /* REVISIT more to come ... _nothing_ should be hard-wired */ 601 struct regulator_init_data *vdd1;
602 struct regulator_init_data *vdd2;
603 struct regulator_init_data *vintana1;
604 struct regulator_init_data *vintana2;
605 struct regulator_init_data *vintdig;
606 /* TWL6030 LDO regulators */
607 struct regulator_init_data *vmmc;
608 struct regulator_init_data *vpp;
609 struct regulator_init_data *vusim;
610 struct regulator_init_data *vana;
611 struct regulator_init_data *vcxio;
612 struct regulator_init_data *vusb;
426}; 613};
427 614
428/*----------------------------------------------------------------------*/ 615/*----------------------------------------------------------------------*/
@@ -439,12 +626,7 @@ int twl4030_sih_setup(int module);
439#define TWL4030_VAUX3_DEV_GRP 0x1F 626#define TWL4030_VAUX3_DEV_GRP 0x1F
440#define TWL4030_VAUX3_DEDICATED 0x22 627#define TWL4030_VAUX3_DEDICATED 0x22
441 628
442#if defined(CONFIG_TWL4030_BCI_BATTERY) || \ 629static inline int twl4030charger_usb_en(int enable) { return 0; }
443 defined(CONFIG_TWL4030_BCI_BATTERY_MODULE)
444 extern int twl4030charger_usb_en(int enable);
445#else
446 static inline int twl4030charger_usb_en(int enable) { return 0; }
447#endif
448 630
449/*----------------------------------------------------------------------*/ 631/*----------------------------------------------------------------------*/
450 632
@@ -454,6 +636,7 @@ int twl4030_sih_setup(int module);
454 * VIO is generally fixed. 636 * VIO is generally fixed.
455 */ 637 */
456 638
639/* TWL4030 SMPS/LDO's */
457/* EXTERNAL dc-to-dc buck converters */ 640/* EXTERNAL dc-to-dc buck converters */
458#define TWL4030_REG_VDD1 0 641#define TWL4030_REG_VDD1 0
459#define TWL4030_REG_VDD2 1 642#define TWL4030_REG_VDD2 1
@@ -480,4 +663,31 @@ int twl4030_sih_setup(int module);
480#define TWL4030_REG_VUSB1V8 18 663#define TWL4030_REG_VUSB1V8 18
481#define TWL4030_REG_VUSB3V1 19 664#define TWL4030_REG_VUSB3V1 19
482 665
666/* TWL6030 SMPS/LDO's */
667/* EXTERNAL dc-to-dc buck convertor contollable via SR */
668#define TWL6030_REG_VDD1 30
669#define TWL6030_REG_VDD2 31
670#define TWL6030_REG_VDD3 32
671
672/* Non SR compliant dc-to-dc buck convertors */
673#define TWL6030_REG_VMEM 33
674#define TWL6030_REG_V2V1 34
675#define TWL6030_REG_V1V29 35
676#define TWL6030_REG_V1V8 36
677
678/* EXTERNAL LDOs */
679#define TWL6030_REG_VAUX1_6030 37
680#define TWL6030_REG_VAUX2_6030 38
681#define TWL6030_REG_VAUX3_6030 39
682#define TWL6030_REG_VMMC 40
683#define TWL6030_REG_VPP 41
684#define TWL6030_REG_VUSIM 42
685#define TWL6030_REG_VANA 43
686#define TWL6030_REG_VCXIO 44
687#define TWL6030_REG_VDAC 45
688#define TWL6030_REG_VUSB 46
689
690/* INTERNAL LDOs */
691#define TWL6030_REG_VRTC 47
692
483#endif /* End of __TWL4030_H */ 693#endif /* End of __TWL4030_H */
diff --git a/include/linux/i2o.h b/include/linux/i2o.h
index 4c4e57d1f19d..9e7a12d6385d 100644
--- a/include/linux/i2o.h
+++ b/include/linux/i2o.h
@@ -385,7 +385,7 @@
385/* defines for max_sectors and max_phys_segments */ 385/* defines for max_sectors and max_phys_segments */
386#define I2O_MAX_SECTORS 1024 386#define I2O_MAX_SECTORS 1024
387#define I2O_MAX_SECTORS_LIMITED 128 387#define I2O_MAX_SECTORS_LIMITED 128
388#define I2O_MAX_PHYS_SEGMENTS MAX_PHYS_SEGMENTS 388#define I2O_MAX_PHYS_SEGMENTS BLK_MAX_SEGMENTS
389 389
390/* 390/*
391 * Message structures 391 * Message structures
@@ -782,7 +782,6 @@ extern int i2o_exec_lct_get(struct i2o_controller *);
782#define to_i2o_driver(drv) container_of(drv,struct i2o_driver, driver) 782#define to_i2o_driver(drv) container_of(drv,struct i2o_driver, driver)
783#define to_i2o_device(dev) container_of(dev, struct i2o_device, device) 783#define to_i2o_device(dev) container_of(dev, struct i2o_device, device)
784#define to_i2o_controller(dev) container_of(dev, struct i2o_controller, device) 784#define to_i2o_controller(dev) container_of(dev, struct i2o_controller, device)
785#define kobj_to_i2o_device(kobj) to_i2o_device(container_of(kobj, struct device, kobj))
786 785
787/** 786/**
788 * i2o_out_to_virt - Turn an I2O message to a virtual address 787 * i2o_out_to_virt - Turn an I2O message to a virtual address
diff --git a/include/linux/i8042.h b/include/linux/i8042.h
index 60c3360ef6ad..9bf6870ee5f4 100644
--- a/include/linux/i8042.h
+++ b/include/linux/i8042.h
@@ -39,6 +39,10 @@ void i8042_lock_chip(void);
39void i8042_unlock_chip(void); 39void i8042_unlock_chip(void);
40int i8042_command(unsigned char *param, int command); 40int i8042_command(unsigned char *param, int command);
41bool i8042_check_port_owner(const struct serio *); 41bool i8042_check_port_owner(const struct serio *);
42int i8042_install_filter(bool (*filter)(unsigned char data, unsigned char str,
43 struct serio *serio));
44int i8042_remove_filter(bool (*filter)(unsigned char data, unsigned char str,
45 struct serio *serio));
42 46
43#else 47#else
44 48
@@ -52,7 +56,7 @@ void i8042_unlock_chip(void)
52 56
53int i8042_command(unsigned char *param, int command) 57int i8042_command(unsigned char *param, int command)
54{ 58{
55 return -ENOSYS; 59 return -ENODEV;
56} 60}
57 61
58bool i8042_check_port_owner(const struct serio *serio) 62bool i8042_check_port_owner(const struct serio *serio)
@@ -60,6 +64,18 @@ bool i8042_check_port_owner(const struct serio *serio)
60 return false; 64 return false;
61} 65}
62 66
67int i8042_install_filter(bool (*filter)(unsigned char data, unsigned char str,
68 struct serio *serio))
69{
70 return -ENODEV;
71}
72
73int i8042_remove_filter(bool (*filter)(unsigned char data, unsigned char str,
74 struct serio *serio))
75{
76 return -ENODEV;
77}
78
63#endif 79#endif
64 80
65#endif 81#endif
diff --git a/include/linux/i82593.h b/include/linux/i82593.h
new file mode 100644
index 000000000000..afac5c7a323d
--- /dev/null
+++ b/include/linux/i82593.h
@@ -0,0 +1,229 @@
1/*
2 * Definitions for Intel 82593 CSMA/CD Core LAN Controller
3 * The definitions are taken from the 1992 users manual with Intel
4 * order number 297125-001.
5 *
6 * /usr/src/pc/RCS/i82593.h,v 1.1 1996/07/17 15:23:12 root Exp
7 *
8 * Copyright 1994, Anders Klemets <klemets@it.kth.se>
9 *
10 * HISTORY
11 * i82593.h,v
12 * Revision 1.4 2005/11/4 09:15:00 baroniunas
13 * Modified copyright with permission of author as follows:
14 *
15 * "If I82539.H is the only file with my copyright statement
16 * that is included in the Source Forge project, then you have
17 * my approval to change the copyright statement to be a GPL
18 * license, in the way you proposed on October 10."
19 *
20 * Revision 1.1 1996/07/17 15:23:12 root
21 * Initial revision
22 *
23 * Revision 1.3 1995/04/05 15:13:58 adj
24 * Initial alpha release
25 *
26 * Revision 1.2 1994/06/16 23:57:31 klemets
27 * Mirrored all the fields in the configuration block.
28 *
29 * Revision 1.1 1994/06/02 20:25:34 klemets
30 * Initial revision
31 *
32 *
33 */
34#ifndef _I82593_H
35#define _I82593_H
36
37/* Intel 82593 CSMA/CD Core LAN Controller */
38
39/* Port 0 Command Register definitions */
40
41/* Execution operations */
42#define OP0_NOP 0 /* CHNL = 0 */
43#define OP0_SWIT_TO_PORT_1 0 /* CHNL = 1 */
44#define OP0_IA_SETUP 1
45#define OP0_CONFIGURE 2
46#define OP0_MC_SETUP 3
47#define OP0_TRANSMIT 4
48#define OP0_TDR 5
49#define OP0_DUMP 6
50#define OP0_DIAGNOSE 7
51#define OP0_TRANSMIT_NO_CRC 9
52#define OP0_RETRANSMIT 12
53#define OP0_ABORT 13
54/* Reception operations */
55#define OP0_RCV_ENABLE 8
56#define OP0_RCV_DISABLE 10
57#define OP0_STOP_RCV 11
58/* Status pointer control operations */
59#define OP0_FIX_PTR 15 /* CHNL = 1 */
60#define OP0_RLS_PTR 15 /* CHNL = 0 */
61#define OP0_RESET 14
62
63#define CR0_CHNL (1 << 4) /* 0=Channel 0, 1=Channel 1 */
64#define CR0_STATUS_0 0x00
65#define CR0_STATUS_1 0x20
66#define CR0_STATUS_2 0x40
67#define CR0_STATUS_3 0x60
68#define CR0_INT_ACK (1 << 7) /* 0=No ack, 1=acknowledge */
69
70/* Port 0 Status Register definitions */
71
72#define SR0_NO_RESULT 0 /* dummy */
73#define SR0_EVENT_MASK 0x0f
74#define SR0_IA_SETUP_DONE 1
75#define SR0_CONFIGURE_DONE 2
76#define SR0_MC_SETUP_DONE 3
77#define SR0_TRANSMIT_DONE 4
78#define SR0_TDR_DONE 5
79#define SR0_DUMP_DONE 6
80#define SR0_DIAGNOSE_PASSED 7
81#define SR0_TRANSMIT_NO_CRC_DONE 9
82#define SR0_RETRANSMIT_DONE 12
83#define SR0_EXECUTION_ABORTED 13
84#define SR0_END_OF_FRAME 8
85#define SR0_RECEPTION_ABORTED 10
86#define SR0_DIAGNOSE_FAILED 15
87#define SR0_STOP_REG_HIT 11
88
89#define SR0_CHNL (1 << 4)
90#define SR0_EXECUTION (1 << 5)
91#define SR0_RECEPTION (1 << 6)
92#define SR0_INTERRUPT (1 << 7)
93#define SR0_BOTH_RX_TX (SR0_EXECUTION | SR0_RECEPTION)
94
95#define SR3_EXEC_STATE_MASK 0x03
96#define SR3_EXEC_IDLE 0
97#define SR3_TX_ABORT_IN_PROGRESS 1
98#define SR3_EXEC_ACTIVE 2
99#define SR3_ABORT_IN_PROGRESS 3
100#define SR3_EXEC_CHNL (1 << 2)
101#define SR3_STP_ON_NO_RSRC (1 << 3)
102#define SR3_RCVING_NO_RSRC (1 << 4)
103#define SR3_RCV_STATE_MASK 0x60
104#define SR3_RCV_IDLE 0x00
105#define SR3_RCV_READY 0x20
106#define SR3_RCV_ACTIVE 0x40
107#define SR3_RCV_STOP_IN_PROG 0x60
108#define SR3_RCV_CHNL (1 << 7)
109
110/* Port 1 Command Register definitions */
111
112#define OP1_NOP 0
113#define OP1_SWIT_TO_PORT_0 1
114#define OP1_INT_DISABLE 2
115#define OP1_INT_ENABLE 3
116#define OP1_SET_TS 5
117#define OP1_RST_TS 7
118#define OP1_POWER_DOWN 8
119#define OP1_RESET_RING_MNGMT 11
120#define OP1_RESET 14
121#define OP1_SEL_RST 15
122
123#define CR1_STATUS_4 0x00
124#define CR1_STATUS_5 0x20
125#define CR1_STATUS_6 0x40
126#define CR1_STOP_REG_UPDATE (1 << 7)
127
128/* Receive frame status bits */
129
130#define RX_RCLD (1 << 0)
131#define RX_IA_MATCH (1 << 1)
132#define RX_NO_AD_MATCH (1 << 2)
133#define RX_NO_SFD (1 << 3)
134#define RX_SRT_FRM (1 << 7)
135#define RX_OVRRUN (1 << 8)
136#define RX_ALG_ERR (1 << 10)
137#define RX_CRC_ERR (1 << 11)
138#define RX_LEN_ERR (1 << 12)
139#define RX_RCV_OK (1 << 13)
140#define RX_TYP_LEN (1 << 15)
141
142/* Transmit status bits */
143
144#define TX_NCOL_MASK 0x0f
145#define TX_FRTL (1 << 4)
146#define TX_MAX_COL (1 << 5)
147#define TX_HRT_BEAT (1 << 6)
148#define TX_DEFER (1 << 7)
149#define TX_UND_RUN (1 << 8)
150#define TX_LOST_CTS (1 << 9)
151#define TX_LOST_CRS (1 << 10)
152#define TX_LTCOL (1 << 11)
153#define TX_OK (1 << 13)
154#define TX_COLL (1 << 15)
155
156struct i82593_conf_block {
157 u_char fifo_limit : 4,
158 forgnesi : 1,
159 fifo_32 : 1,
160 d6mod : 1,
161 throttle_enb : 1;
162 u_char throttle : 6,
163 cntrxint : 1,
164 contin : 1;
165 u_char addr_len : 3,
166 acloc : 1,
167 preamb_len : 2,
168 loopback : 2;
169 u_char lin_prio : 3,
170 tbofstop : 1,
171 exp_prio : 3,
172 bof_met : 1;
173 u_char : 4,
174 ifrm_spc : 4;
175 u_char : 5,
176 slottim_low : 3;
177 u_char slottim_hi : 3,
178 : 1,
179 max_retr : 4;
180 u_char prmisc : 1,
181 bc_dis : 1,
182 : 1,
183 crs_1 : 1,
184 nocrc_ins : 1,
185 crc_1632 : 1,
186 : 1,
187 crs_cdt : 1;
188 u_char cs_filter : 3,
189 crs_src : 1,
190 cd_filter : 3,
191 : 1;
192 u_char : 2,
193 min_fr_len : 6;
194 u_char lng_typ : 1,
195 lng_fld : 1,
196 rxcrc_xf : 1,
197 artx : 1,
198 sarec : 1,
199 tx_jabber : 1, /* why is this called max_len in the manual? */
200 hash_1 : 1,
201 lbpkpol : 1;
202 u_char : 6,
203 fdx : 1,
204 : 1;
205 u_char dummy_6 : 6, /* supposed to be ones */
206 mult_ia : 1,
207 dis_bof : 1;
208 u_char dummy_1 : 1, /* supposed to be one */
209 tx_ifs_retrig : 2,
210 mc_all : 1,
211 rcv_mon : 2,
212 frag_acpt : 1,
213 tstrttrs : 1;
214 u_char fretx : 1,
215 runt_eop : 1,
216 hw_sw_pin : 1,
217 big_endn : 1,
218 syncrqs : 1,
219 sttlen : 1,
220 tx_eop : 1,
221 rx_eop : 1;
222 u_char rbuf_size : 5,
223 rcvstop : 1,
224 : 2;
225};
226
227#define I82593_MAX_MULTICAST_ADDRESSES 128 /* Hardware hashed filter */
228
229#endif /* _I82593_H */
diff --git a/include/linux/icmpv6.h b/include/linux/icmpv6.h
index c0d8357917e2..4c4c74ec5987 100644
--- a/include/linux/icmpv6.h
+++ b/include/linux/icmpv6.h
@@ -174,8 +174,7 @@ struct icmp6_filter {
174 174
175extern void icmpv6_send(struct sk_buff *skb, 175extern void icmpv6_send(struct sk_buff *skb,
176 u8 type, u8 code, 176 u8 type, u8 code,
177 __u32 info, 177 __u32 info);
178 struct net_device *dev);
179 178
180extern int icmpv6_init(void); 179extern int icmpv6_init(void);
181extern int icmpv6_err_convert(u8 type, u8 code, 180extern int icmpv6_err_convert(u8 type, u8 code,
diff --git a/include/linux/ide.h b/include/linux/ide.h
index e4135d6e0556..3239d1c10acb 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -125,8 +125,8 @@ struct ide_io_ports {
125 * Timeouts for various operations: 125 * Timeouts for various operations:
126 */ 126 */
127enum { 127enum {
128 /* spec allows up to 20ms */ 128 /* spec allows up to 20ms, but CF cards and SSD drives need more */
129 WAIT_DRQ = HZ / 10, /* 100ms */ 129 WAIT_DRQ = 1 * HZ, /* 1s */
130 /* some laptops are very slow */ 130 /* some laptops are very slow */
131 WAIT_READY = 5 * HZ, /* 5s */ 131 WAIT_READY = 5 * HZ, /* 5s */
132 /* should be less than 3ms (?), if all ATAPI CD is closed at boot */ 132 /* should be less than 3ms (?), if all ATAPI CD is closed at boot */
@@ -515,6 +515,8 @@ struct ide_drive_s {
515 u8 init_speed; /* transfer rate set at boot */ 515 u8 init_speed; /* transfer rate set at boot */
516 u8 current_speed; /* current transfer rate set */ 516 u8 current_speed; /* current transfer rate set */
517 u8 desired_speed; /* desired transfer rate set */ 517 u8 desired_speed; /* desired transfer rate set */
518 u8 pio_mode; /* for ->set_pio_mode _only_ */
519 u8 dma_mode; /* for ->dma_pio_mode _only_ */
518 u8 dn; /* now wide spread use */ 520 u8 dn; /* now wide spread use */
519 u8 acoustic; /* acoustic management */ 521 u8 acoustic; /* acoustic management */
520 u8 media; /* disk, cdrom, tape, floppy, ... */ 522 u8 media; /* disk, cdrom, tape, floppy, ... */
@@ -622,8 +624,8 @@ extern const struct ide_tp_ops default_tp_ops;
622 */ 624 */
623struct ide_port_ops { 625struct ide_port_ops {
624 void (*init_dev)(ide_drive_t *); 626 void (*init_dev)(ide_drive_t *);
625 void (*set_pio_mode)(ide_drive_t *, const u8); 627 void (*set_pio_mode)(struct hwif_s *, ide_drive_t *);
626 void (*set_dma_mode)(ide_drive_t *, const u8); 628 void (*set_dma_mode)(struct hwif_s *, ide_drive_t *);
627 int (*reset_poll)(ide_drive_t *); 629 int (*reset_poll)(ide_drive_t *);
628 void (*pre_reset)(ide_drive_t *); 630 void (*pre_reset)(ide_drive_t *);
629 void (*resetproc)(ide_drive_t *); 631 void (*resetproc)(ide_drive_t *);
@@ -1167,6 +1169,7 @@ extern void ide_stall_queue(ide_drive_t *drive, unsigned long timeout);
1167extern void ide_timer_expiry(unsigned long); 1169extern void ide_timer_expiry(unsigned long);
1168extern irqreturn_t ide_intr(int irq, void *dev_id); 1170extern irqreturn_t ide_intr(int irq, void *dev_id);
1169extern void do_ide_request(struct request_queue *); 1171extern void do_ide_request(struct request_queue *);
1172extern void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq);
1170 1173
1171void ide_init_disk(struct gendisk *, ide_drive_t *); 1174void ide_init_disk(struct gendisk *, ide_drive_t *);
1172 1175
@@ -1494,7 +1497,6 @@ int ide_timing_compute(ide_drive_t *, u8, struct ide_timing *, int, int);
1494#ifdef CONFIG_IDE_XFER_MODE 1497#ifdef CONFIG_IDE_XFER_MODE
1495int ide_scan_pio_blacklist(char *); 1498int ide_scan_pio_blacklist(char *);
1496const char *ide_xfer_verbose(u8); 1499const char *ide_xfer_verbose(u8);
1497u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8);
1498int ide_pio_need_iordy(ide_drive_t *, const u8); 1500int ide_pio_need_iordy(ide_drive_t *, const u8);
1499int ide_set_pio_mode(ide_drive_t *, u8); 1501int ide_set_pio_mode(ide_drive_t *, u8);
1500int ide_set_dma_mode(ide_drive_t *, u8); 1502int ide_set_dma_mode(ide_drive_t *, u8);
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index 52e15e079c61..19984958ab7b 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -115,12 +115,31 @@
115#define IEEE80211_MAX_SSID_LEN 32 115#define IEEE80211_MAX_SSID_LEN 32
116 116
117#define IEEE80211_MAX_MESH_ID_LEN 32 117#define IEEE80211_MAX_MESH_ID_LEN 32
118#define IEEE80211_MESH_CONFIG_LEN 24
119 118
120#define IEEE80211_QOS_CTL_LEN 2 119#define IEEE80211_QOS_CTL_LEN 2
121#define IEEE80211_QOS_CTL_TID_MASK 0x000F 120#define IEEE80211_QOS_CTL_TID_MASK 0x000F
122#define IEEE80211_QOS_CTL_TAG1D_MASK 0x0007 121#define IEEE80211_QOS_CTL_TAG1D_MASK 0x0007
123 122
123/* U-APSD queue for WMM IEs sent by AP */
124#define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD (1<<7)
125
126/* U-APSD queues for WMM IEs sent by STA */
127#define IEEE80211_WMM_IE_STA_QOSINFO_AC_VO (1<<0)
128#define IEEE80211_WMM_IE_STA_QOSINFO_AC_VI (1<<1)
129#define IEEE80211_WMM_IE_STA_QOSINFO_AC_BK (1<<2)
130#define IEEE80211_WMM_IE_STA_QOSINFO_AC_BE (1<<3)
131#define IEEE80211_WMM_IE_STA_QOSINFO_AC_MASK 0x0f
132
133/* U-APSD max SP length for WMM IEs sent by STA */
134#define IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL 0x00
135#define IEEE80211_WMM_IE_STA_QOSINFO_SP_2 0x01
136#define IEEE80211_WMM_IE_STA_QOSINFO_SP_4 0x02
137#define IEEE80211_WMM_IE_STA_QOSINFO_SP_6 0x03
138#define IEEE80211_WMM_IE_STA_QOSINFO_SP_MASK 0x03
139#define IEEE80211_WMM_IE_STA_QOSINFO_SP_SHIFT 5
140
141#define IEEE80211_HT_CTL_LEN 4
142
124struct ieee80211_hdr { 143struct ieee80211_hdr {
125 __le16 frame_control; 144 __le16 frame_control;
126 __le16 duration_id; 145 __le16 duration_id;
@@ -131,6 +150,25 @@ struct ieee80211_hdr {
131 u8 addr4[6]; 150 u8 addr4[6];
132} __attribute__ ((packed)); 151} __attribute__ ((packed));
133 152
153struct ieee80211_hdr_3addr {
154 __le16 frame_control;
155 __le16 duration_id;
156 u8 addr1[6];
157 u8 addr2[6];
158 u8 addr3[6];
159 __le16 seq_ctrl;
160} __attribute__ ((packed));
161
162struct ieee80211_qos_hdr {
163 __le16 frame_control;
164 __le16 duration_id;
165 u8 addr1[6];
166 u8 addr2[6];
167 u8 addr3[6];
168 __le16 seq_ctrl;
169 __le16 qos_ctrl;
170} __attribute__ ((packed));
171
134/** 172/**
135 * ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set 173 * ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set
136 * @fc: frame control bytes in little-endian byteorder 174 * @fc: frame control bytes in little-endian byteorder
@@ -472,7 +510,7 @@ static inline int ieee80211_is_cfendack(__le16 fc)
472} 510}
473 511
474/** 512/**
475 * ieee80211_is_nullfunc - check if FTYPE=IEEE80211_FTYPE_DATA and STYPE=IEEE80211_STYPE_NULLFUNC 513 * ieee80211_is_nullfunc - check if frame is a regular (non-QoS) nullfunc frame
476 * @fc: frame control bytes in little-endian byteorder 514 * @fc: frame control bytes in little-endian byteorder
477 */ 515 */
478static inline int ieee80211_is_nullfunc(__le16 fc) 516static inline int ieee80211_is_nullfunc(__le16 fc)
@@ -481,6 +519,16 @@ static inline int ieee80211_is_nullfunc(__le16 fc)
481 cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_NULLFUNC); 519 cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_NULLFUNC);
482} 520}
483 521
522/**
523 * ieee80211_is_qos_nullfunc - check if frame is a QoS nullfunc frame
524 * @fc: frame control bytes in little-endian byteorder
525 */
526static inline int ieee80211_is_qos_nullfunc(__le16 fc)
527{
528 return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) ==
529 cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_NULLFUNC);
530}
531
484struct ieee80211s_hdr { 532struct ieee80211s_hdr {
485 u8 flags; 533 u8 flags;
486 u8 ttl; 534 u8 ttl;
@@ -544,6 +592,35 @@ struct ieee80211_tim_ie {
544 u8 virtual_map[1]; 592 u8 virtual_map[1];
545} __attribute__ ((packed)); 593} __attribute__ ((packed));
546 594
595/**
596 * struct ieee80211_meshconf_ie
597 *
598 * This structure refers to "Mesh Configuration information element"
599 */
600struct ieee80211_meshconf_ie {
601 u8 meshconf_psel;
602 u8 meshconf_pmetric;
603 u8 meshconf_congest;
604 u8 meshconf_synch;
605 u8 meshconf_auth;
606 u8 meshconf_form;
607 u8 meshconf_cap;
608} __attribute__ ((packed));
609
610/**
611 * struct ieee80211_rann_ie
612 *
613 * This structure refers to "Root Announcement information element"
614 */
615struct ieee80211_rann_ie {
616 u8 rann_flags;
617 u8 rann_hopcount;
618 u8 rann_ttl;
619 u8 rann_addr[6];
620 u32 rann_seq;
621 u32 rann_metric;
622} __attribute__ ((packed));
623
547#define WLAN_SA_QUERY_TR_ID_LEN 2 624#define WLAN_SA_QUERY_TR_ID_LEN 2
548 625
549struct ieee80211_mgmt { 626struct ieee80211_mgmt {
@@ -669,6 +746,10 @@ struct ieee80211_mgmt {
669 u8 action; 746 u8 action;
670 u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN]; 747 u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN];
671 } __attribute__ ((packed)) sa_query; 748 } __attribute__ ((packed)) sa_query;
749 struct {
750 u8 action;
751 u8 smps_control;
752 } __attribute__ ((packed)) ht_smps;
672 } u; 753 } u;
673 } __attribute__ ((packed)) action; 754 } __attribute__ ((packed)) action;
674 } u; 755 } u;
@@ -733,7 +814,10 @@ struct ieee80211_bar {
733/** 814/**
734 * struct ieee80211_mcs_info - MCS information 815 * struct ieee80211_mcs_info - MCS information
735 * @rx_mask: RX mask 816 * @rx_mask: RX mask
736 * @rx_highest: highest supported RX rate 817 * @rx_highest: highest supported RX rate. If set represents
818 * the highest supported RX data rate in units of 1 Mbps.
819 * If this field is 0 this value should not be used to
820 * consider the highest RX data rate supported.
737 * @tx_params: TX parameters 821 * @tx_params: TX parameters
738 */ 822 */
739struct ieee80211_mcs_info { 823struct ieee80211_mcs_info {
@@ -786,6 +870,7 @@ struct ieee80211_ht_cap {
786#define IEEE80211_HT_CAP_LDPC_CODING 0x0001 870#define IEEE80211_HT_CAP_LDPC_CODING 0x0001
787#define IEEE80211_HT_CAP_SUP_WIDTH_20_40 0x0002 871#define IEEE80211_HT_CAP_SUP_WIDTH_20_40 0x0002
788#define IEEE80211_HT_CAP_SM_PS 0x000C 872#define IEEE80211_HT_CAP_SM_PS 0x000C
873#define IEEE80211_HT_CAP_SM_PS_SHIFT 2
789#define IEEE80211_HT_CAP_GRN_FLD 0x0010 874#define IEEE80211_HT_CAP_GRN_FLD 0x0010
790#define IEEE80211_HT_CAP_SGI_20 0x0020 875#define IEEE80211_HT_CAP_SGI_20 0x0020
791#define IEEE80211_HT_CAP_SGI_40 0x0040 876#define IEEE80211_HT_CAP_SGI_40 0x0040
@@ -794,13 +879,14 @@ struct ieee80211_ht_cap {
794#define IEEE80211_HT_CAP_DELAY_BA 0x0400 879#define IEEE80211_HT_CAP_DELAY_BA 0x0400
795#define IEEE80211_HT_CAP_MAX_AMSDU 0x0800 880#define IEEE80211_HT_CAP_MAX_AMSDU 0x0800
796#define IEEE80211_HT_CAP_DSSSCCK40 0x1000 881#define IEEE80211_HT_CAP_DSSSCCK40 0x1000
797#define IEEE80211_HT_CAP_PSMP_SUPPORT 0x2000 882#define IEEE80211_HT_CAP_RESERVED 0x2000
798#define IEEE80211_HT_CAP_40MHZ_INTOLERANT 0x4000 883#define IEEE80211_HT_CAP_40MHZ_INTOLERANT 0x4000
799#define IEEE80211_HT_CAP_LSIG_TXOP_PROT 0x8000 884#define IEEE80211_HT_CAP_LSIG_TXOP_PROT 0x8000
800 885
801/* 802.11n HT capability AMPDU settings (for ampdu_params_info) */ 886/* 802.11n HT capability AMPDU settings (for ampdu_params_info) */
802#define IEEE80211_HT_AMPDU_PARM_FACTOR 0x03 887#define IEEE80211_HT_AMPDU_PARM_FACTOR 0x03
803#define IEEE80211_HT_AMPDU_PARM_DENSITY 0x1C 888#define IEEE80211_HT_AMPDU_PARM_DENSITY 0x1C
889#define IEEE80211_HT_AMPDU_PARM_DENSITY_SHIFT 2
804 890
805/* 891/*
806 * Maximum length of AMPDU that the STA can receive. 892 * Maximum length of AMPDU that the STA can receive.
@@ -884,12 +970,17 @@ struct ieee80211_ht_info {
884#define IEEE80211_MAX_AMPDU_BUF 0x40 970#define IEEE80211_MAX_AMPDU_BUF 0x40
885 971
886 972
887/* Spatial Multiplexing Power Save Modes */ 973/* Spatial Multiplexing Power Save Modes (for capability) */
888#define WLAN_HT_CAP_SM_PS_STATIC 0 974#define WLAN_HT_CAP_SM_PS_STATIC 0
889#define WLAN_HT_CAP_SM_PS_DYNAMIC 1 975#define WLAN_HT_CAP_SM_PS_DYNAMIC 1
890#define WLAN_HT_CAP_SM_PS_INVALID 2 976#define WLAN_HT_CAP_SM_PS_INVALID 2
891#define WLAN_HT_CAP_SM_PS_DISABLED 3 977#define WLAN_HT_CAP_SM_PS_DISABLED 3
892 978
979/* for SM power control field lower two bits */
980#define WLAN_HT_SMPS_CONTROL_DISABLED 0
981#define WLAN_HT_SMPS_CONTROL_STATIC 1
982#define WLAN_HT_SMPS_CONTROL_DYNAMIC 3
983
893/* Authentication algorithms */ 984/* Authentication algorithms */
894#define WLAN_AUTH_OPEN 0 985#define WLAN_AUTH_OPEN 0
895#define WLAN_AUTH_SHARED_KEY 1 986#define WLAN_AUTH_SHARED_KEY 1
@@ -1033,12 +1124,12 @@ enum ieee80211_eid {
1033 WLAN_EID_TIM = 5, 1124 WLAN_EID_TIM = 5,
1034 WLAN_EID_IBSS_PARAMS = 6, 1125 WLAN_EID_IBSS_PARAMS = 6,
1035 WLAN_EID_CHALLENGE = 16, 1126 WLAN_EID_CHALLENGE = 16,
1036 /* 802.11d */ 1127
1037 WLAN_EID_COUNTRY = 7, 1128 WLAN_EID_COUNTRY = 7,
1038 WLAN_EID_HP_PARAMS = 8, 1129 WLAN_EID_HP_PARAMS = 8,
1039 WLAN_EID_HP_TABLE = 9, 1130 WLAN_EID_HP_TABLE = 9,
1040 WLAN_EID_REQUEST = 10, 1131 WLAN_EID_REQUEST = 10,
1041 /* 802.11e */ 1132
1042 WLAN_EID_QBSS_LOAD = 11, 1133 WLAN_EID_QBSS_LOAD = 11,
1043 WLAN_EID_EDCA_PARAM_SET = 12, 1134 WLAN_EID_EDCA_PARAM_SET = 12,
1044 WLAN_EID_TSPEC = 13, 1135 WLAN_EID_TSPEC = 13,
@@ -1060,7 +1151,8 @@ enum ieee80211_eid {
1060 WLAN_EID_PREQ = 68, 1151 WLAN_EID_PREQ = 68,
1061 WLAN_EID_PREP = 69, 1152 WLAN_EID_PREP = 69,
1062 WLAN_EID_PERR = 70, 1153 WLAN_EID_PERR = 70,
1063 /* 802.11h */ 1154 WLAN_EID_RANN = 49, /* compatible with FreeBSD */
1155
1064 WLAN_EID_PWR_CONSTRAINT = 32, 1156 WLAN_EID_PWR_CONSTRAINT = 32,
1065 WLAN_EID_PWR_CAPABILITY = 33, 1157 WLAN_EID_PWR_CAPABILITY = 33,
1066 WLAN_EID_TPC_REQUEST = 34, 1158 WLAN_EID_TPC_REQUEST = 34,
@@ -1071,20 +1163,41 @@ enum ieee80211_eid {
1071 WLAN_EID_MEASURE_REPORT = 39, 1163 WLAN_EID_MEASURE_REPORT = 39,
1072 WLAN_EID_QUIET = 40, 1164 WLAN_EID_QUIET = 40,
1073 WLAN_EID_IBSS_DFS = 41, 1165 WLAN_EID_IBSS_DFS = 41,
1074 /* 802.11g */ 1166
1075 WLAN_EID_ERP_INFO = 42, 1167 WLAN_EID_ERP_INFO = 42,
1076 WLAN_EID_EXT_SUPP_RATES = 50, 1168 WLAN_EID_EXT_SUPP_RATES = 50,
1077 /* 802.11n */ 1169
1078 WLAN_EID_HT_CAPABILITY = 45, 1170 WLAN_EID_HT_CAPABILITY = 45,
1079 WLAN_EID_HT_INFORMATION = 61, 1171 WLAN_EID_HT_INFORMATION = 61,
1080 /* 802.11i */ 1172
1081 WLAN_EID_RSN = 48, 1173 WLAN_EID_RSN = 48,
1082 WLAN_EID_TIMEOUT_INTERVAL = 56, 1174 WLAN_EID_MMIE = 76,
1083 WLAN_EID_MMIE = 76 /* 802.11w */,
1084 WLAN_EID_WPA = 221, 1175 WLAN_EID_WPA = 221,
1085 WLAN_EID_GENERIC = 221, 1176 WLAN_EID_GENERIC = 221,
1086 WLAN_EID_VENDOR_SPECIFIC = 221, 1177 WLAN_EID_VENDOR_SPECIFIC = 221,
1087 WLAN_EID_QOS_PARAMETER = 222 1178 WLAN_EID_QOS_PARAMETER = 222,
1179
1180 WLAN_EID_AP_CHAN_REPORT = 51,
1181 WLAN_EID_NEIGHBOR_REPORT = 52,
1182 WLAN_EID_RCPI = 53,
1183 WLAN_EID_BSS_AVG_ACCESS_DELAY = 63,
1184 WLAN_EID_ANTENNA_INFO = 64,
1185 WLAN_EID_RSNI = 65,
1186 WLAN_EID_MEASUREMENT_PILOT_TX_INFO = 66,
1187 WLAN_EID_BSS_AVAILABLE_CAPACITY = 67,
1188 WLAN_EID_BSS_AC_ACCESS_DELAY = 68,
1189 WLAN_EID_RRM_ENABLED_CAPABILITIES = 70,
1190 WLAN_EID_MULTIPLE_BSSID = 71,
1191
1192 WLAN_EID_MOBILITY_DOMAIN = 54,
1193 WLAN_EID_FAST_BSS_TRANSITION = 55,
1194 WLAN_EID_TIMEOUT_INTERVAL = 56,
1195 WLAN_EID_RIC_DATA = 57,
1196 WLAN_EID_RIC_DESCRIPTOR = 75,
1197
1198 WLAN_EID_DSE_REGISTERED_LOCATION = 58,
1199 WLAN_EID_SUPPORTED_REGULATORY_CLASSES = 59,
1200 WLAN_EID_EXT_CHANSWITCH_ANN = 60,
1088}; 1201};
1089 1202
1090/* Action category code */ 1203/* Action category code */
@@ -1111,6 +1224,18 @@ enum ieee80211_spectrum_mgmt_actioncode {
1111 WLAN_ACTION_SPCT_CHL_SWITCH = 4, 1224 WLAN_ACTION_SPCT_CHL_SWITCH = 4,
1112}; 1225};
1113 1226
1227/* HT action codes */
1228enum ieee80211_ht_actioncode {
1229 WLAN_HT_ACTION_NOTIFY_CHANWIDTH = 0,
1230 WLAN_HT_ACTION_SMPS = 1,
1231 WLAN_HT_ACTION_PSMP = 2,
1232 WLAN_HT_ACTION_PCO_PHASE = 3,
1233 WLAN_HT_ACTION_CSI = 4,
1234 WLAN_HT_ACTION_NONCOMPRESSED_BF = 5,
1235 WLAN_HT_ACTION_COMPRESSED_BF = 6,
1236 WLAN_HT_ACTION_ASEL_IDX_FEEDBACK = 7,
1237};
1238
1114/* Security key length */ 1239/* Security key length */
1115enum ieee80211_key_len { 1240enum ieee80211_key_len {
1116 WLAN_KEY_LEN_WEP40 = 5, 1241 WLAN_KEY_LEN_WEP40 = 5,
@@ -1227,6 +1352,8 @@ enum ieee80211_sa_query_action {
1227 1352
1228#define WLAN_MAX_KEY_LEN 32 1353#define WLAN_MAX_KEY_LEN 32
1229 1354
1355#define WLAN_PMKID_LEN 16
1356
1230/** 1357/**
1231 * ieee80211_get_qos_ctl - get pointer to qos control bytes 1358 * ieee80211_get_qos_ctl - get pointer to qos control bytes
1232 * @hdr: the frame 1359 * @hdr: the frame
diff --git a/include/linux/if.h b/include/linux/if.h
index b9a6229f3be7..3a9f410a296b 100644
--- a/include/linux/if.h
+++ b/include/linux/if.h
@@ -70,6 +70,7 @@
70#define IFF_XMIT_DST_RELEASE 0x400 /* dev_hard_start_xmit() is allowed to 70#define IFF_XMIT_DST_RELEASE 0x400 /* dev_hard_start_xmit() is allowed to
71 * release skb->dst 71 * release skb->dst
72 */ 72 */
73#define IFF_DONT_BRIDGE 0x800 /* disallow bridging this ether dev */
73 74
74#define IF_GET_IFACE 0x0001 /* for querying only */ 75#define IF_GET_IFACE 0x0001 /* for querying only */
75#define IF_GET_PROTO 0x0002 76#define IF_GET_PROTO 0x0002
@@ -125,8 +126,7 @@ enum {
125 * being very small might be worth keeping for clean configuration. 126 * being very small might be worth keeping for clean configuration.
126 */ 127 */
127 128
128struct ifmap 129struct ifmap {
129{
130 unsigned long mem_start; 130 unsigned long mem_start;
131 unsigned long mem_end; 131 unsigned long mem_end;
132 unsigned short base_addr; 132 unsigned short base_addr;
@@ -136,8 +136,7 @@ struct ifmap
136 /* 3 bytes spare */ 136 /* 3 bytes spare */
137}; 137};
138 138
139struct if_settings 139struct if_settings {
140{
141 unsigned int type; /* Type of physical device or protocol */ 140 unsigned int type; /* Type of physical device or protocol */
142 unsigned int size; /* Size of the data allocated by the caller */ 141 unsigned int size; /* Size of the data allocated by the caller */
143 union { 142 union {
@@ -161,8 +160,7 @@ struct if_settings
161 * remainder may be interface specific. 160 * remainder may be interface specific.
162 */ 161 */
163 162
164struct ifreq 163struct ifreq {
165{
166#define IFHWADDRLEN 6 164#define IFHWADDRLEN 6
167 union 165 union
168 { 166 {
@@ -211,11 +209,9 @@ struct ifreq
211 * must know all networks accessible). 209 * must know all networks accessible).
212 */ 210 */
213 211
214struct ifconf 212struct ifconf {
215{
216 int ifc_len; /* size of buffer */ 213 int ifc_len; /* size of buffer */
217 union 214 union {
218 {
219 char __user *ifcu_buf; 215 char __user *ifcu_buf;
220 struct ifreq __user *ifcu_req; 216 struct ifreq __user *ifcu_req;
221 } ifc_ifcu; 217 } ifc_ifcu;
diff --git a/include/linux/if_addr.h b/include/linux/if_addr.h
index fd9740466757..23357ab81a77 100644
--- a/include/linux/if_addr.h
+++ b/include/linux/if_addr.h
@@ -4,8 +4,7 @@
4#include <linux/types.h> 4#include <linux/types.h>
5#include <linux/netlink.h> 5#include <linux/netlink.h>
6 6
7struct ifaddrmsg 7struct ifaddrmsg {
8{
9 __u8 ifa_family; 8 __u8 ifa_family;
10 __u8 ifa_prefixlen; /* The prefix length */ 9 __u8 ifa_prefixlen; /* The prefix length */
11 __u8 ifa_flags; /* Flags */ 10 __u8 ifa_flags; /* Flags */
@@ -20,8 +19,7 @@ struct ifaddrmsg
20 * but for point-to-point IFA_ADDRESS is DESTINATION address, 19 * but for point-to-point IFA_ADDRESS is DESTINATION address,
21 * local address is supplied in IFA_LOCAL attribute. 20 * local address is supplied in IFA_LOCAL attribute.
22 */ 21 */
23enum 22enum {
24{
25 IFA_UNSPEC, 23 IFA_UNSPEC,
26 IFA_ADDRESS, 24 IFA_ADDRESS,
27 IFA_LOCAL, 25 IFA_LOCAL,
@@ -47,8 +45,7 @@ enum
47#define IFA_F_TENTATIVE 0x40 45#define IFA_F_TENTATIVE 0x40
48#define IFA_F_PERMANENT 0x80 46#define IFA_F_PERMANENT 0x80
49 47
50struct ifa_cacheinfo 48struct ifa_cacheinfo {
51{
52 __u32 ifa_prefered; 49 __u32 ifa_prefered;
53 __u32 ifa_valid; 50 __u32 ifa_valid;
54 __u32 cstamp; /* created timestamp, hundredths of seconds */ 51 __u32 cstamp; /* created timestamp, hundredths of seconds */
diff --git a/include/linux/if_addrlabel.h b/include/linux/if_addrlabel.h
index 89571f65d6de..54580c298187 100644
--- a/include/linux/if_addrlabel.h
+++ b/include/linux/if_addrlabel.h
@@ -12,8 +12,7 @@
12 12
13#include <linux/types.h> 13#include <linux/types.h>
14 14
15struct ifaddrlblmsg 15struct ifaddrlblmsg {
16{
17 __u8 ifal_family; /* Address family */ 16 __u8 ifal_family; /* Address family */
18 __u8 __ifal_reserved; /* Reserved */ 17 __u8 __ifal_reserved; /* Reserved */
19 __u8 ifal_prefixlen; /* Prefix length */ 18 __u8 ifal_prefixlen; /* Prefix length */
@@ -22,8 +21,7 @@ struct ifaddrlblmsg
22 __u32 ifal_seq; /* sequence number */ 21 __u32 ifal_seq; /* sequence number */
23}; 22};
24 23
25enum 24enum {
26{
27 IFAL_ADDRESS = 1, 25 IFAL_ADDRESS = 1,
28 IFAL_LABEL = 2, 26 IFAL_LABEL = 2,
29 __IFAL_MAX 27 __IFAL_MAX
diff --git a/include/linux/if_arcnet.h b/include/linux/if_arcnet.h
index 0835debab115..46e34bd0e783 100644
--- a/include/linux/if_arcnet.h
+++ b/include/linux/if_arcnet.h
@@ -56,8 +56,7 @@
56/* 56/*
57 * The RFC1201-specific components of an arcnet packet header. 57 * The RFC1201-specific components of an arcnet packet header.
58 */ 58 */
59struct arc_rfc1201 59struct arc_rfc1201 {
60{
61 __u8 proto; /* protocol ID field - varies */ 60 __u8 proto; /* protocol ID field - varies */
62 __u8 split_flag; /* for use with split packets */ 61 __u8 split_flag; /* for use with split packets */
63 __be16 sequence; /* sequence number */ 62 __be16 sequence; /* sequence number */
@@ -69,8 +68,7 @@ struct arc_rfc1201
69/* 68/*
70 * The RFC1051-specific components. 69 * The RFC1051-specific components.
71 */ 70 */
72struct arc_rfc1051 71struct arc_rfc1051 {
73{
74 __u8 proto; /* ARC_P_RFC1051_ARP/RFC1051_IP */ 72 __u8 proto; /* ARC_P_RFC1051_ARP/RFC1051_IP */
75 __u8 payload[0]; /* 507 bytes */ 73 __u8 payload[0]; /* 507 bytes */
76}; 74};
@@ -81,8 +79,7 @@ struct arc_rfc1051
81 * The ethernet-encap-specific components. We have a real ethernet header 79 * The ethernet-encap-specific components. We have a real ethernet header
82 * and some data. 80 * and some data.
83 */ 81 */
84struct arc_eth_encap 82struct arc_eth_encap {
85{
86 __u8 proto; /* Always ARC_P_ETHER */ 83 __u8 proto; /* Always ARC_P_ETHER */
87 struct ethhdr eth; /* standard ethernet header (yuck!) */ 84 struct ethhdr eth; /* standard ethernet header (yuck!) */
88 __u8 payload[0]; /* 493 bytes */ 85 __u8 payload[0]; /* 493 bytes */
@@ -90,8 +87,7 @@ struct arc_eth_encap
90#define ETH_ENCAP_HDR_SIZE 14 87#define ETH_ENCAP_HDR_SIZE 14
91 88
92 89
93struct arc_cap 90struct arc_cap {
94{
95 __u8 proto; 91 __u8 proto;
96 __u8 cookie[sizeof(int)]; /* Actually NOT sent over the network */ 92 __u8 cookie[sizeof(int)]; /* Actually NOT sent over the network */
97 union { 93 union {
@@ -108,8 +104,7 @@ struct arc_cap
108 * the _end_ of the 512-byte buffer. We hide this complexity inside the 104 * the _end_ of the 512-byte buffer. We hide this complexity inside the
109 * driver. 105 * driver.
110 */ 106 */
111struct arc_hardware 107struct arc_hardware {
112{
113 __u8 source, /* source ARCnet - filled in automagically */ 108 __u8 source, /* source ARCnet - filled in automagically */
114 dest, /* destination ARCnet - 0 for broadcast */ 109 dest, /* destination ARCnet - 0 for broadcast */
115 offset[2]; /* offset bytes (some weird semantics) */ 110 offset[2]; /* offset bytes (some weird semantics) */
@@ -120,8 +115,7 @@ struct arc_hardware
120 * This is an ARCnet frame header, as seen by the kernel (and userspace, 115 * This is an ARCnet frame header, as seen by the kernel (and userspace,
121 * when you do a raw packet capture). 116 * when you do a raw packet capture).
122 */ 117 */
123struct archdr 118struct archdr {
124{
125 /* hardware requirements */ 119 /* hardware requirements */
126 struct arc_hardware hard; 120 struct arc_hardware hard;
127 121
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h
index 282eb37e2dec..e80b7f88f7c6 100644
--- a/include/linux/if_arp.h
+++ b/include/linux/if_arp.h
@@ -133,8 +133,7 @@ struct arpreq_old {
133 * This structure defines an ethernet arp header. 133 * This structure defines an ethernet arp header.
134 */ 134 */
135 135
136struct arphdr 136struct arphdr {
137{
138 __be16 ar_hrd; /* format of hardware address */ 137 __be16 ar_hrd; /* format of hardware address */
139 __be16 ar_pro; /* format of protocol address */ 138 __be16 ar_pro; /* format of protocol address */
140 unsigned char ar_hln; /* length of hardware address */ 139 unsigned char ar_hln; /* length of hardware address */
diff --git a/include/linux/if_bonding.h b/include/linux/if_bonding.h
index 65c2d247068b..cd525fae3c98 100644
--- a/include/linux/if_bonding.h
+++ b/include/linux/if_bonding.h
@@ -94,8 +94,7 @@ typedef struct ifbond {
94 __s32 miimon; 94 __s32 miimon;
95} ifbond; 95} ifbond;
96 96
97typedef struct ifslave 97typedef struct ifslave {
98{
99 __s32 slave_id; /* Used as an IN param to the BOND_SLAVE_INFO_QUERY ioctl */ 98 __s32 slave_id; /* Used as an IN param to the BOND_SLAVE_INFO_QUERY ioctl */
100 char slave_name[IFNAMSIZ]; 99 char slave_name[IFNAMSIZ];
101 __s8 link; 100 __s8 link;
diff --git a/include/linux/if_bridge.h b/include/linux/if_bridge.h
index 6badb3e2c4e4..938b7e81df95 100644
--- a/include/linux/if_bridge.h
+++ b/include/linux/if_bridge.h
@@ -49,8 +49,7 @@
49#define BR_STATE_FORWARDING 3 49#define BR_STATE_FORWARDING 3
50#define BR_STATE_BLOCKING 4 50#define BR_STATE_BLOCKING 4
51 51
52struct __bridge_info 52struct __bridge_info {
53{
54 __u64 designated_root; 53 __u64 designated_root;
55 __u64 bridge_id; 54 __u64 bridge_id;
56 __u32 root_path_cost; 55 __u32 root_path_cost;
@@ -72,8 +71,7 @@ struct __bridge_info
72 __u32 gc_timer_value; 71 __u32 gc_timer_value;
73}; 72};
74 73
75struct __port_info 74struct __port_info {
76{
77 __u64 designated_root; 75 __u64 designated_root;
78 __u64 designated_bridge; 76 __u64 designated_bridge;
79 __u16 port_id; 77 __u16 port_id;
@@ -89,8 +87,7 @@ struct __port_info
89 __u32 hold_timer_value; 87 __u32 hold_timer_value;
90}; 88};
91 89
92struct __fdb_entry 90struct __fdb_entry {
93{
94 __u8 mac_addr[6]; 91 __u8 mac_addr[6];
95 __u8 port_no; 92 __u8 port_no;
96 __u8 is_local; 93 __u8 is_local;
diff --git a/include/linux/if_ec.h b/include/linux/if_ec.h
index e7499aa79783..d85f9f48129f 100644
--- a/include/linux/if_ec.h
+++ b/include/linux/if_ec.h
@@ -5,14 +5,12 @@
5 5
6/* User visible stuff. Glibc provides its own but libc5 folk will use these */ 6/* User visible stuff. Glibc provides its own but libc5 folk will use these */
7 7
8struct ec_addr 8struct ec_addr {
9{
10 unsigned char station; /* Station number. */ 9 unsigned char station; /* Station number. */
11 unsigned char net; /* Network number. */ 10 unsigned char net; /* Network number. */
12}; 11};
13 12
14struct sockaddr_ec 13struct sockaddr_ec {
15{
16 unsigned short sec_family; 14 unsigned short sec_family;
17 unsigned char port; /* Port number. */ 15 unsigned char port; /* Port number. */
18 unsigned char cb; /* Control/flag byte. */ 16 unsigned char cb; /* Control/flag byte. */
@@ -37,8 +35,7 @@ struct sockaddr_ec
37#define EC_HLEN 6 35#define EC_HLEN 6
38 36
39/* This is what an Econet frame looks like on the wire. */ 37/* This is what an Econet frame looks like on the wire. */
40struct ec_framehdr 38struct ec_framehdr {
41{
42 unsigned char dst_stn; 39 unsigned char dst_stn;
43 unsigned char dst_net; 40 unsigned char dst_net;
44 unsigned char src_stn; 41 unsigned char src_stn;
@@ -62,8 +59,7 @@ static inline struct econet_sock *ec_sk(const struct sock *sk)
62 return (struct econet_sock *)sk; 59 return (struct econet_sock *)sk;
63} 60}
64 61
65struct ec_device 62struct ec_device {
66{
67 unsigned char station, net; /* Econet protocol address */ 63 unsigned char station, net; /* Econet protocol address */
68}; 64};
69 65
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h
index 580b6004d00e..299b4121f914 100644
--- a/include/linux/if_ether.h
+++ b/include/linux/if_ether.h
@@ -136,13 +136,7 @@ extern struct ctl_table ether_table[];
136 136
137extern ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len); 137extern ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len);
138 138
139/*
140 * Display a 6 byte device address (MAC) in a readable format.
141 */
142extern char *print_mac(char *buf, const unsigned char *addr) __deprecated;
143#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" 139#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x"
144#define MAC_BUF_SIZE 18
145#define DECLARE_MAC_BUF(var) char var[MAC_BUF_SIZE]
146 140
147#endif 141#endif
148 142
diff --git a/include/linux/if_fddi.h b/include/linux/if_fddi.h
index 45de1046dbbf..5459c5c09930 100644
--- a/include/linux/if_fddi.h
+++ b/include/linux/if_fddi.h
@@ -63,36 +63,32 @@
63#define FDDI_UI_CMD 0x03 63#define FDDI_UI_CMD 0x03
64 64
65/* Define 802.2 Type 1 header */ 65/* Define 802.2 Type 1 header */
66struct fddi_8022_1_hdr 66struct fddi_8022_1_hdr {
67 {
68 __u8 dsap; /* destination service access point */ 67 __u8 dsap; /* destination service access point */
69 __u8 ssap; /* source service access point */ 68 __u8 ssap; /* source service access point */
70 __u8 ctrl; /* control byte #1 */ 69 __u8 ctrl; /* control byte #1 */
71 } __attribute__ ((packed)); 70} __attribute__ ((packed));
72 71
73/* Define 802.2 Type 2 header */ 72/* Define 802.2 Type 2 header */
74struct fddi_8022_2_hdr 73struct fddi_8022_2_hdr {
75 {
76 __u8 dsap; /* destination service access point */ 74 __u8 dsap; /* destination service access point */
77 __u8 ssap; /* source service access point */ 75 __u8 ssap; /* source service access point */
78 __u8 ctrl_1; /* control byte #1 */ 76 __u8 ctrl_1; /* control byte #1 */
79 __u8 ctrl_2; /* control byte #2 */ 77 __u8 ctrl_2; /* control byte #2 */
80 } __attribute__ ((packed)); 78} __attribute__ ((packed));
81 79
82/* Define 802.2 SNAP header */ 80/* Define 802.2 SNAP header */
83#define FDDI_K_OUI_LEN 3 81#define FDDI_K_OUI_LEN 3
84struct fddi_snap_hdr 82struct fddi_snap_hdr {
85 {
86 __u8 dsap; /* always 0xAA */ 83 __u8 dsap; /* always 0xAA */
87 __u8 ssap; /* always 0xAA */ 84 __u8 ssap; /* always 0xAA */
88 __u8 ctrl; /* always 0x03 */ 85 __u8 ctrl; /* always 0x03 */
89 __u8 oui[FDDI_K_OUI_LEN]; /* organizational universal id */ 86 __u8 oui[FDDI_K_OUI_LEN]; /* organizational universal id */
90 __be16 ethertype; /* packet type ID field */ 87 __be16 ethertype; /* packet type ID field */
91 } __attribute__ ((packed)); 88} __attribute__ ((packed));
92 89
93/* Define FDDI LLC frame header */ 90/* Define FDDI LLC frame header */
94struct fddihdr 91struct fddihdr {
95 {
96 __u8 fc; /* frame control */ 92 __u8 fc; /* frame control */
97 __u8 daddr[FDDI_K_ALEN]; /* destination address */ 93 __u8 daddr[FDDI_K_ALEN]; /* destination address */
98 __u8 saddr[FDDI_K_ALEN]; /* source address */ 94 __u8 saddr[FDDI_K_ALEN]; /* source address */
@@ -102,7 +98,7 @@ struct fddihdr
102 struct fddi_8022_2_hdr llc_8022_2; 98 struct fddi_8022_2_hdr llc_8022_2;
103 struct fddi_snap_hdr llc_snap; 99 struct fddi_snap_hdr llc_snap;
104 } hdr; 100 } hdr;
105 } __attribute__ ((packed)); 101} __attribute__ ((packed));
106 102
107#ifdef __KERNEL__ 103#ifdef __KERNEL__
108#include <linux/netdevice.h> 104#include <linux/netdevice.h>
@@ -197,7 +193,7 @@ struct fddi_statistics {
197 __u32 port_pc_withhold[2]; 193 __u32 port_pc_withhold[2];
198 __u32 port_ler_flag[2]; 194 __u32 port_ler_flag[2];
199 __u32 port_hardware_present[2]; 195 __u32 port_hardware_present[2];
200 }; 196};
201#endif /* __KERNEL__ */ 197#endif /* __KERNEL__ */
202 198
203#endif /* _LINUX_IF_FDDI_H */ 199#endif /* _LINUX_IF_FDDI_H */
diff --git a/include/linux/if_hippi.h b/include/linux/if_hippi.h
index 4a7c9940b080..8d038eb8db5c 100644
--- a/include/linux/if_hippi.h
+++ b/include/linux/if_hippi.h
@@ -51,8 +51,7 @@
51 * HIPPI statistics collection data. 51 * HIPPI statistics collection data.
52 */ 52 */
53 53
54struct hipnet_statistics 54struct hipnet_statistics {
55{
56 int rx_packets; /* total packets received */ 55 int rx_packets; /* total packets received */
57 int tx_packets; /* total packets transmitted */ 56 int tx_packets; /* total packets transmitted */
58 int rx_errors; /* bad packets received */ 57 int rx_errors; /* bad packets received */
@@ -77,8 +76,7 @@ struct hipnet_statistics
77}; 76};
78 77
79 78
80struct hippi_fp_hdr 79struct hippi_fp_hdr {
81{
82#if 0 80#if 0
83 __u8 ulp; /* must contain 4 */ 81 __u8 ulp; /* must contain 4 */
84#if defined (__BIG_ENDIAN_BITFIELD) 82#if defined (__BIG_ENDIAN_BITFIELD)
@@ -108,8 +106,7 @@ struct hippi_fp_hdr
108 __be32 d2_size; 106 __be32 d2_size;
109} __attribute__ ((packed)); 107} __attribute__ ((packed));
110 108
111struct hippi_le_hdr 109struct hippi_le_hdr {
112{
113#if defined (__BIG_ENDIAN_BITFIELD) 110#if defined (__BIG_ENDIAN_BITFIELD)
114 __u8 fc:3; 111 __u8 fc:3;
115 __u8 double_wide:1; 112 __u8 double_wide:1;
@@ -139,8 +136,7 @@ struct hippi_le_hdr
139 * Looks like the dsap and ssap fields have been swapped by mistake in 136 * Looks like the dsap and ssap fields have been swapped by mistake in
140 * RFC 2067 "IP over HIPPI". 137 * RFC 2067 "IP over HIPPI".
141 */ 138 */
142struct hippi_snap_hdr 139struct hippi_snap_hdr {
143{
144 __u8 dsap; /* always 0xAA */ 140 __u8 dsap; /* always 0xAA */
145 __u8 ssap; /* always 0xAA */ 141 __u8 ssap; /* always 0xAA */
146 __u8 ctrl; /* always 0x03 */ 142 __u8 ctrl; /* always 0x03 */
@@ -148,8 +144,7 @@ struct hippi_snap_hdr
148 __be16 ethertype; /* packet type ID field */ 144 __be16 ethertype; /* packet type ID field */
149} __attribute__ ((packed)); 145} __attribute__ ((packed));
150 146
151struct hippi_hdr 147struct hippi_hdr {
152{
153 struct hippi_fp_hdr fp; 148 struct hippi_fp_hdr fp;
154 struct hippi_le_hdr le; 149 struct hippi_le_hdr le;
155 struct hippi_snap_hdr snap; 150 struct hippi_snap_hdr snap;
diff --git a/include/linux/if_link.h b/include/linux/if_link.h
index 176c5182c515..d94963b379d9 100644
--- a/include/linux/if_link.h
+++ b/include/linux/if_link.h
@@ -5,8 +5,7 @@
5#include <linux/netlink.h> 5#include <linux/netlink.h>
6 6
7/* The struct should be in sync with struct net_device_stats */ 7/* The struct should be in sync with struct net_device_stats */
8struct rtnl_link_stats 8struct rtnl_link_stats {
9{
10 __u32 rx_packets; /* total packets received */ 9 __u32 rx_packets; /* total packets received */
11 __u32 tx_packets; /* total packets transmitted */ 10 __u32 tx_packets; /* total packets transmitted */
12 __u32 rx_bytes; /* total bytes received */ 11 __u32 rx_bytes; /* total bytes received */
@@ -39,8 +38,7 @@ struct rtnl_link_stats
39}; 38};
40 39
41/* The struct should be in sync with struct ifmap */ 40/* The struct should be in sync with struct ifmap */
42struct rtnl_link_ifmap 41struct rtnl_link_ifmap {
43{
44 __u64 mem_start; 42 __u64 mem_start;
45 __u64 mem_end; 43 __u64 mem_end;
46 __u64 base_addr; 44 __u64 base_addr;
@@ -49,8 +47,7 @@ struct rtnl_link_ifmap
49 __u8 port; 47 __u8 port;
50}; 48};
51 49
52enum 50enum {
53{
54 IFLA_UNSPEC, 51 IFLA_UNSPEC,
55 IFLA_ADDRESS, 52 IFLA_ADDRESS,
56 IFLA_BROADCAST, 53 IFLA_BROADCAST,
@@ -81,6 +78,8 @@ enum
81#define IFLA_LINKINFO IFLA_LINKINFO 78#define IFLA_LINKINFO IFLA_LINKINFO
82 IFLA_NET_NS_PID, 79 IFLA_NET_NS_PID,
83 IFLA_IFALIAS, 80 IFLA_IFALIAS,
81 IFLA_NUM_VF, /* Number of VFs if device is SR-IOV PF */
82 IFLA_VFINFO_LIST,
84 __IFLA_MAX 83 __IFLA_MAX
85}; 84};
86 85
@@ -123,8 +122,7 @@ enum
123 */ 122 */
124 123
125/* Subtype attributes for IFLA_PROTINFO */ 124/* Subtype attributes for IFLA_PROTINFO */
126enum 125enum {
127{
128 IFLA_INET6_UNSPEC, 126 IFLA_INET6_UNSPEC,
129 IFLA_INET6_FLAGS, /* link flags */ 127 IFLA_INET6_FLAGS, /* link flags */
130 IFLA_INET6_CONF, /* sysctl parameters */ 128 IFLA_INET6_CONF, /* sysctl parameters */
@@ -137,16 +135,14 @@ enum
137 135
138#define IFLA_INET6_MAX (__IFLA_INET6_MAX - 1) 136#define IFLA_INET6_MAX (__IFLA_INET6_MAX - 1)
139 137
140struct ifla_cacheinfo 138struct ifla_cacheinfo {
141{
142 __u32 max_reasm_len; 139 __u32 max_reasm_len;
143 __u32 tstamp; /* ipv6InterfaceTable updated timestamp */ 140 __u32 tstamp; /* ipv6InterfaceTable updated timestamp */
144 __u32 reachable_time; 141 __u32 reachable_time;
145 __u32 retrans_time; 142 __u32 retrans_time;
146}; 143};
147 144
148enum 145enum {
149{
150 IFLA_INFO_UNSPEC, 146 IFLA_INFO_UNSPEC,
151 IFLA_INFO_KIND, 147 IFLA_INFO_KIND,
152 IFLA_INFO_DATA, 148 IFLA_INFO_DATA,
@@ -158,8 +154,7 @@ enum
158 154
159/* VLAN section */ 155/* VLAN section */
160 156
161enum 157enum {
162{
163 IFLA_VLAN_UNSPEC, 158 IFLA_VLAN_UNSPEC,
164 IFLA_VLAN_ID, 159 IFLA_VLAN_ID,
165 IFLA_VLAN_FLAGS, 160 IFLA_VLAN_FLAGS,
@@ -175,8 +170,7 @@ struct ifla_vlan_flags {
175 __u32 mask; 170 __u32 mask;
176}; 171};
177 172
178enum 173enum {
179{
180 IFLA_VLAN_QOS_UNSPEC, 174 IFLA_VLAN_QOS_UNSPEC,
181 IFLA_VLAN_QOS_MAPPING, 175 IFLA_VLAN_QOS_MAPPING,
182 __IFLA_VLAN_QOS_MAX 176 __IFLA_VLAN_QOS_MAX
@@ -184,10 +178,67 @@ enum
184 178
185#define IFLA_VLAN_QOS_MAX (__IFLA_VLAN_QOS_MAX - 1) 179#define IFLA_VLAN_QOS_MAX (__IFLA_VLAN_QOS_MAX - 1)
186 180
187struct ifla_vlan_qos_mapping 181struct ifla_vlan_qos_mapping {
188{
189 __u32 from; 182 __u32 from;
190 __u32 to; 183 __u32 to;
191}; 184};
192 185
186/* MACVLAN section */
187enum {
188 IFLA_MACVLAN_UNSPEC,
189 IFLA_MACVLAN_MODE,
190 __IFLA_MACVLAN_MAX,
191};
192
193#define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1)
194
195enum macvlan_mode {
196 MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */
197 MACVLAN_MODE_VEPA = 2, /* talk to other ports through ext bridge */
198 MACVLAN_MODE_BRIDGE = 4, /* talk to bridge ports directly */
199};
200
201/* SR-IOV virtual function managment section */
202
203enum {
204 IFLA_VF_INFO_UNSPEC,
205 IFLA_VF_INFO,
206 __IFLA_VF_INFO_MAX,
207};
208
209#define IFLA_VF_INFO_MAX (__IFLA_VF_INFO_MAX - 1)
210
211enum {
212 IFLA_VF_UNSPEC,
213 IFLA_VF_MAC, /* Hardware queue specific attributes */
214 IFLA_VF_VLAN,
215 IFLA_VF_TX_RATE, /* TX Bandwidth Allocation */
216 __IFLA_VF_MAX,
217};
218
219#define IFLA_VF_MAX (__IFLA_VF_MAX - 1)
220
221struct ifla_vf_mac {
222 __u32 vf;
223 __u8 mac[32]; /* MAX_ADDR_LEN */
224};
225
226struct ifla_vf_vlan {
227 __u32 vf;
228 __u32 vlan; /* 0 - 4095, 0 disables VLAN filter */
229 __u32 qos;
230};
231
232struct ifla_vf_tx_rate {
233 __u32 vf;
234 __u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */
235};
236
237struct ifla_vf_info {
238 __u32 vf;
239 __u8 mac[32];
240 __u32 vlan;
241 __u32 qos;
242 __u32 tx_rate;
243};
193#endif /* _LINUX_IF_LINK_H */ 244#endif /* _LINUX_IF_LINK_H */
diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h
index 5f200bac3749..b78a712247da 100644
--- a/include/linux/if_macvlan.h
+++ b/include/linux/if_macvlan.h
@@ -1,6 +1,90 @@
1#ifndef _LINUX_IF_MACVLAN_H 1#ifndef _LINUX_IF_MACVLAN_H
2#define _LINUX_IF_MACVLAN_H 2#define _LINUX_IF_MACVLAN_H
3 3
4#include <linux/if_link.h>
5#include <linux/list.h>
6#include <linux/netdevice.h>
7#include <linux/netlink.h>
8#include <net/netlink.h>
9
10#if defined(CONFIG_MACVTAP) || defined(CONFIG_MACVTAP_MODULE)
11struct socket *macvtap_get_socket(struct file *);
12#else
13#include <linux/err.h>
14#include <linux/errno.h>
15struct file;
16struct socket;
17static inline struct socket *macvtap_get_socket(struct file *f)
18{
19 return ERR_PTR(-EINVAL);
20}
21#endif /* CONFIG_MACVTAP */
22
23struct macvlan_port;
24struct macvtap_queue;
25
26/**
27 * struct macvlan_rx_stats - MACVLAN percpu rx stats
28 * @rx_packets: number of received packets
29 * @rx_bytes: number of received bytes
30 * @multicast: number of received multicast packets
31 * @rx_errors: number of errors
32 */
33struct macvlan_rx_stats {
34 unsigned long rx_packets;
35 unsigned long rx_bytes;
36 unsigned long multicast;
37 unsigned long rx_errors;
38};
39
40struct macvlan_dev {
41 struct net_device *dev;
42 struct list_head list;
43 struct hlist_node hlist;
44 struct macvlan_port *port;
45 struct net_device *lowerdev;
46 struct macvlan_rx_stats __percpu *rx_stats;
47 enum macvlan_mode mode;
48 int (*receive)(struct sk_buff *skb);
49 int (*forward)(struct net_device *dev, struct sk_buff *skb);
50 struct macvtap_queue *tap;
51};
52
53static inline void macvlan_count_rx(const struct macvlan_dev *vlan,
54 unsigned int len, bool success,
55 bool multicast)
56{
57 struct macvlan_rx_stats *rx_stats;
58
59 rx_stats = per_cpu_ptr(vlan->rx_stats, smp_processor_id());
60 if (likely(success)) {
61 rx_stats->rx_packets++;;
62 rx_stats->rx_bytes += len;
63 if (multicast)
64 rx_stats->multicast++;
65 } else {
66 rx_stats->rx_errors++;
67 }
68}
69
70extern int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
71 struct nlattr *tb[], struct nlattr *data[],
72 int (*receive)(struct sk_buff *skb),
73 int (*forward)(struct net_device *dev,
74 struct sk_buff *skb));
75
76extern void macvlan_count_rx(const struct macvlan_dev *vlan,
77 unsigned int len, bool success,
78 bool multicast);
79
80extern void macvlan_dellink(struct net_device *dev, struct list_head *head);
81
82extern int macvlan_link_register(struct rtnl_link_ops *ops);
83
84extern netdev_tx_t macvlan_start_xmit(struct sk_buff *skb,
85 struct net_device *dev);
86
87
4extern struct sk_buff *(*macvlan_handle_frame_hook)(struct sk_buff *); 88extern struct sk_buff *(*macvlan_handle_frame_hook)(struct sk_buff *);
5 89
6#endif /* _LINUX_IF_MACVLAN_H */ 90#endif /* _LINUX_IF_MACVLAN_H */
diff --git a/include/linux/if_packet.h b/include/linux/if_packet.h
index dea7d6b7cf98..aa57a5f993fc 100644
--- a/include/linux/if_packet.h
+++ b/include/linux/if_packet.h
@@ -3,15 +3,13 @@
3 3
4#include <linux/types.h> 4#include <linux/types.h>
5 5
6struct sockaddr_pkt 6struct sockaddr_pkt {
7{
8 unsigned short spkt_family; 7 unsigned short spkt_family;
9 unsigned char spkt_device[14]; 8 unsigned char spkt_device[14];
10 __be16 spkt_protocol; 9 __be16 spkt_protocol;
11}; 10};
12 11
13struct sockaddr_ll 12struct sockaddr_ll {
14{
15 unsigned short sll_family; 13 unsigned short sll_family;
16 __be16 sll_protocol; 14 __be16 sll_protocol;
17 int sll_ifindex; 15 int sll_ifindex;
@@ -48,15 +46,14 @@ struct sockaddr_ll
48#define PACKET_RESERVE 12 46#define PACKET_RESERVE 12
49#define PACKET_TX_RING 13 47#define PACKET_TX_RING 13
50#define PACKET_LOSS 14 48#define PACKET_LOSS 14
49#define PACKET_VNET_HDR 15
51 50
52struct tpacket_stats 51struct tpacket_stats {
53{
54 unsigned int tp_packets; 52 unsigned int tp_packets;
55 unsigned int tp_drops; 53 unsigned int tp_drops;
56}; 54};
57 55
58struct tpacket_auxdata 56struct tpacket_auxdata {
59{
60 __u32 tp_status; 57 __u32 tp_status;
61 __u32 tp_len; 58 __u32 tp_len;
62 __u32 tp_snaplen; 59 __u32 tp_snaplen;
@@ -78,8 +75,7 @@ struct tpacket_auxdata
78#define TP_STATUS_SENDING 0x2 75#define TP_STATUS_SENDING 0x2
79#define TP_STATUS_WRONG_FORMAT 0x4 76#define TP_STATUS_WRONG_FORMAT 0x4
80 77
81struct tpacket_hdr 78struct tpacket_hdr {
82{
83 unsigned long tp_status; 79 unsigned long tp_status;
84 unsigned int tp_len; 80 unsigned int tp_len;
85 unsigned int tp_snaplen; 81 unsigned int tp_snaplen;
@@ -93,8 +89,7 @@ struct tpacket_hdr
93#define TPACKET_ALIGN(x) (((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1)) 89#define TPACKET_ALIGN(x) (((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1))
94#define TPACKET_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll)) 90#define TPACKET_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll))
95 91
96struct tpacket2_hdr 92struct tpacket2_hdr {
97{
98 __u32 tp_status; 93 __u32 tp_status;
99 __u32 tp_len; 94 __u32 tp_len;
100 __u32 tp_snaplen; 95 __u32 tp_snaplen;
@@ -107,8 +102,7 @@ struct tpacket2_hdr
107 102
108#define TPACKET2_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll)) 103#define TPACKET2_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll))
109 104
110enum tpacket_versions 105enum tpacket_versions {
111{
112 TPACKET_V1, 106 TPACKET_V1,
113 TPACKET_V2, 107 TPACKET_V2,
114}; 108};
@@ -126,16 +120,14 @@ enum tpacket_versions
126 - Pad to align to TPACKET_ALIGNMENT=16 120 - Pad to align to TPACKET_ALIGNMENT=16
127 */ 121 */
128 122
129struct tpacket_req 123struct tpacket_req {
130{
131 unsigned int tp_block_size; /* Minimal size of contiguous block */ 124 unsigned int tp_block_size; /* Minimal size of contiguous block */
132 unsigned int tp_block_nr; /* Number of blocks */ 125 unsigned int tp_block_nr; /* Number of blocks */
133 unsigned int tp_frame_size; /* Size of frame */ 126 unsigned int tp_frame_size; /* Size of frame */
134 unsigned int tp_frame_nr; /* Total number of frames */ 127 unsigned int tp_frame_nr; /* Total number of frames */
135}; 128};
136 129
137struct packet_mreq 130struct packet_mreq {
138{
139 int mr_ifindex; 131 int mr_ifindex;
140 unsigned short mr_type; 132 unsigned short mr_type;
141 unsigned short mr_alen; 133 unsigned short mr_alen;
diff --git a/include/linux/if_plip.h b/include/linux/if_plip.h
index 153a649915a2..6298c7e88b2b 100644
--- a/include/linux/if_plip.h
+++ b/include/linux/if_plip.h
@@ -15,8 +15,7 @@
15 15
16#define SIOCDEVPLIP SIOCDEVPRIVATE 16#define SIOCDEVPLIP SIOCDEVPRIVATE
17 17
18struct plipconf 18struct plipconf {
19{
20 unsigned short pcmd; 19 unsigned short pcmd;
21 unsigned long nibble; 20 unsigned long nibble;
22 unsigned long trigger; 21 unsigned long trigger;
diff --git a/include/linux/if_pppol2tp.h b/include/linux/if_pppol2tp.h
index 3a14b088c8ec..c58baea4a25b 100644
--- a/include/linux/if_pppol2tp.h
+++ b/include/linux/if_pppol2tp.h
@@ -24,8 +24,7 @@
24/* Structure used to connect() the socket to a particular tunnel UDP 24/* Structure used to connect() the socket to a particular tunnel UDP
25 * socket. 25 * socket.
26 */ 26 */
27struct pppol2tp_addr 27struct pppol2tp_addr {
28{
29 __kernel_pid_t pid; /* pid that owns the fd. 28 __kernel_pid_t pid; /* pid that owns the fd.
30 * 0 => current */ 29 * 0 => current */
31 int fd; /* FD of UDP socket to use */ 30 int fd; /* FD of UDP socket to use */
diff --git a/include/linux/if_tun.h b/include/linux/if_tun.h
index 3f5fd523b49d..1350a246893a 100644
--- a/include/linux/if_tun.h
+++ b/include/linux/if_tun.h
@@ -18,6 +18,7 @@
18 18
19#include <linux/types.h> 19#include <linux/types.h>
20#include <linux/if_ether.h> 20#include <linux/if_ether.h>
21#include <linux/filter.h>
21 22
22/* Read queue size */ 23/* Read queue size */
23#define TUN_READQ_SIZE 500 24#define TUN_READQ_SIZE 500
@@ -48,6 +49,8 @@
48#define TUNGETIFF _IOR('T', 210, unsigned int) 49#define TUNGETIFF _IOR('T', 210, unsigned int)
49#define TUNGETSNDBUF _IOR('T', 211, int) 50#define TUNGETSNDBUF _IOR('T', 211, int)
50#define TUNSETSNDBUF _IOW('T', 212, int) 51#define TUNSETSNDBUF _IOW('T', 212, int)
52#define TUNATTACHFILTER _IOW('T', 213, struct sock_fprog)
53#define TUNDETACHFILTER _IOW('T', 214, struct sock_fprog)
51 54
52/* TUNSETIFF ifr flags */ 55/* TUNSETIFF ifr flags */
53#define IFF_TUN 0x0001 56#define IFF_TUN 0x0001
@@ -86,4 +89,18 @@ struct tun_filter {
86 __u8 addr[0][ETH_ALEN]; 89 __u8 addr[0][ETH_ALEN];
87}; 90};
88 91
92#ifdef __KERNEL__
93#if defined(CONFIG_TUN) || defined(CONFIG_TUN_MODULE)
94struct socket *tun_get_socket(struct file *);
95#else
96#include <linux/err.h>
97#include <linux/errno.h>
98struct file;
99struct socket;
100static inline struct socket *tun_get_socket(struct file *f)
101{
102 return ERR_PTR(-EINVAL);
103}
104#endif /* CONFIG_TUN */
105#endif /* __KERNEL__ */
89#endif /* __IF_TUN_H */ 106#endif /* __IF_TUN_H */
diff --git a/include/linux/if_tunnel.h b/include/linux/if_tunnel.h
index 5a9aae4adb44..16b92d008bed 100644
--- a/include/linux/if_tunnel.h
+++ b/include/linux/if_tunnel.h
@@ -2,9 +2,11 @@
2#define _IF_TUNNEL_H_ 2#define _IF_TUNNEL_H_
3 3
4#include <linux/types.h> 4#include <linux/types.h>
5#include <asm/byteorder.h>
5 6
6#ifdef __KERNEL__ 7#ifdef __KERNEL__
7#include <linux/ip.h> 8#include <linux/ip.h>
9#include <linux/in6.h>
8#endif 10#endif
9 11
10#define SIOCGETTUNNEL (SIOCDEVPRIVATE + 0) 12#define SIOCGETTUNNEL (SIOCDEVPRIVATE + 0)
@@ -15,6 +17,10 @@
15#define SIOCADDPRL (SIOCDEVPRIVATE + 5) 17#define SIOCADDPRL (SIOCDEVPRIVATE + 5)
16#define SIOCDELPRL (SIOCDEVPRIVATE + 6) 18#define SIOCDELPRL (SIOCDEVPRIVATE + 6)
17#define SIOCCHGPRL (SIOCDEVPRIVATE + 7) 19#define SIOCCHGPRL (SIOCDEVPRIVATE + 7)
20#define SIOCGET6RD (SIOCDEVPRIVATE + 8)
21#define SIOCADD6RD (SIOCDEVPRIVATE + 9)
22#define SIOCDEL6RD (SIOCDEVPRIVATE + 10)
23#define SIOCCHG6RD (SIOCDEVPRIVATE + 11)
18 24
19#define GRE_CSUM __cpu_to_be16(0x8000) 25#define GRE_CSUM __cpu_to_be16(0x8000)
20#define GRE_ROUTING __cpu_to_be16(0x4000) 26#define GRE_ROUTING __cpu_to_be16(0x4000)
@@ -25,8 +31,7 @@
25#define GRE_FLAGS __cpu_to_be16(0x00F8) 31#define GRE_FLAGS __cpu_to_be16(0x00F8)
26#define GRE_VERSION __cpu_to_be16(0x0007) 32#define GRE_VERSION __cpu_to_be16(0x0007)
27 33
28struct ip_tunnel_parm 34struct ip_tunnel_parm {
29{
30 char name[IFNAMSIZ]; 35 char name[IFNAMSIZ];
31 int link; 36 int link;
32 __be16 i_flags; 37 __be16 i_flags;
@@ -51,8 +56,14 @@ struct ip_tunnel_prl {
51/* PRL flags */ 56/* PRL flags */
52#define PRL_DEFAULT 0x0001 57#define PRL_DEFAULT 0x0001
53 58
54enum 59struct ip_tunnel_6rd {
55{ 60 struct in6_addr prefix;
61 __be32 relay_prefix;
62 __u16 prefixlen;
63 __u16 relay_prefixlen;
64};
65
66enum {
56 IFLA_GRE_UNSPEC, 67 IFLA_GRE_UNSPEC,
57 IFLA_GRE_LINK, 68 IFLA_GRE_LINK,
58 IFLA_GRE_IFLAGS, 69 IFLA_GRE_IFLAGS,
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
index 7ff9af1d0f05..3d870fda8c4f 100644
--- a/include/linux/if_vlan.h
+++ b/include/linux/if_vlan.h
@@ -63,7 +63,11 @@ static inline struct vlan_ethhdr *vlan_eth_hdr(const struct sk_buff *skb)
63 return (struct vlan_ethhdr *)skb_mac_header(skb); 63 return (struct vlan_ethhdr *)skb_mac_header(skb);
64} 64}
65 65
66#define VLAN_VID_MASK 0xfff 66#define VLAN_PRIO_MASK 0xe000 /* Priority Code Point */
67#define VLAN_PRIO_SHIFT 13
68#define VLAN_CFI_MASK 0x1000 /* Canonical Format Indicator */
69#define VLAN_TAG_PRESENT VLAN_CFI_MASK
70#define VLAN_VID_MASK 0x0fff /* VLAN Identifier */
67 71
68/* found in socket.c */ 72/* found in socket.c */
69extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *)); 73extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *));
@@ -81,6 +85,7 @@ struct vlan_group {
81 * the vlan is attached to. 85 * the vlan is attached to.
82 */ 86 */
83 unsigned int nr_vlans; 87 unsigned int nr_vlans;
88 int killall;
84 struct hlist_node hlist; /* linked list */ 89 struct hlist_node hlist; /* linked list */
85 struct net_device **vlan_devices_arrays[VLAN_GROUP_ARRAY_SPLIT_PARTS]; 90 struct net_device **vlan_devices_arrays[VLAN_GROUP_ARRAY_SPLIT_PARTS];
86 struct rcu_head rcu; 91 struct rcu_head rcu;
@@ -105,8 +110,8 @@ static inline void vlan_group_set_device(struct vlan_group *vg,
105 array[vlan_id % VLAN_GROUP_ARRAY_PART_LEN] = dev; 110 array[vlan_id % VLAN_GROUP_ARRAY_PART_LEN] = dev;
106} 111}
107 112
108#define vlan_tx_tag_present(__skb) ((__skb)->vlan_tci) 113#define vlan_tx_tag_present(__skb) ((__skb)->vlan_tci & VLAN_TAG_PRESENT)
109#define vlan_tx_tag_get(__skb) ((__skb)->vlan_tci) 114#define vlan_tx_tag_get(__skb) ((__skb)->vlan_tci & ~VLAN_TAG_PRESENT)
110 115
111#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) 116#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
112extern struct net_device *vlan_dev_real_dev(const struct net_device *dev); 117extern struct net_device *vlan_dev_real_dev(const struct net_device *dev);
@@ -115,10 +120,12 @@ extern u16 vlan_dev_vlan_id(const struct net_device *dev);
115extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, 120extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
116 u16 vlan_tci, int polling); 121 u16 vlan_tci, int polling);
117extern int vlan_hwaccel_do_receive(struct sk_buff *skb); 122extern int vlan_hwaccel_do_receive(struct sk_buff *skb);
118extern int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, 123extern gro_result_t
119 unsigned int vlan_tci, struct sk_buff *skb); 124vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
120extern int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, 125 unsigned int vlan_tci, struct sk_buff *skb);
121 unsigned int vlan_tci); 126extern gro_result_t
127vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,
128 unsigned int vlan_tci);
122 129
123#else 130#else
124static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) 131static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev)
@@ -145,17 +152,18 @@ static inline int vlan_hwaccel_do_receive(struct sk_buff *skb)
145 return 0; 152 return 0;
146} 153}
147 154
148static inline int vlan_gro_receive(struct napi_struct *napi, 155static inline gro_result_t
149 struct vlan_group *grp, 156vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
150 unsigned int vlan_tci, struct sk_buff *skb) 157 unsigned int vlan_tci, struct sk_buff *skb)
151{ 158{
152 return NET_RX_DROP; 159 return GRO_DROP;
153} 160}
154 161
155static inline int vlan_gro_frags(struct napi_struct *napi, 162static inline gro_result_t
156 struct vlan_group *grp, unsigned int vlan_tci) 163vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,
164 unsigned int vlan_tci)
157{ 165{
158 return NET_RX_DROP; 166 return GRO_DROP;
159} 167}
160#endif 168#endif
161 169
@@ -231,7 +239,7 @@ static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, u16 vlan_tci)
231static inline struct sk_buff *__vlan_hwaccel_put_tag(struct sk_buff *skb, 239static inline struct sk_buff *__vlan_hwaccel_put_tag(struct sk_buff *skb,
232 u16 vlan_tci) 240 u16 vlan_tci)
233{ 241{
234 skb->vlan_tci = vlan_tci; 242 skb->vlan_tci = VLAN_TAG_PRESENT | vlan_tci;
235 return skb; 243 return skb;
236} 244}
237 245
@@ -284,7 +292,7 @@ static inline int __vlan_hwaccel_get_tag(const struct sk_buff *skb,
284 u16 *vlan_tci) 292 u16 *vlan_tci)
285{ 293{
286 if (vlan_tx_tag_present(skb)) { 294 if (vlan_tx_tag_present(skb)) {
287 *vlan_tci = skb->vlan_tci; 295 *vlan_tci = vlan_tx_tag_get(skb);
288 return 0; 296 return 0;
289 } else { 297 } else {
290 *vlan_tci = 0; 298 *vlan_tci = 0;
@@ -331,6 +339,7 @@ enum vlan_ioctl_cmds {
331enum vlan_flags { 339enum vlan_flags {
332 VLAN_FLAG_REORDER_HDR = 0x1, 340 VLAN_FLAG_REORDER_HDR = 0x1,
333 VLAN_FLAG_GVRP = 0x2, 341 VLAN_FLAG_GVRP = 0x2,
342 VLAN_FLAG_LOOSE_BINDING = 0x4,
334}; 343};
335 344
336enum vlan_name_types { 345enum vlan_name_types {
diff --git a/include/linux/igmp.h b/include/linux/igmp.h
index fe158e0e20e6..93fc2449af10 100644
--- a/include/linux/igmp.h
+++ b/include/linux/igmp.h
@@ -27,8 +27,7 @@
27 * Header in on cable format 27 * Header in on cable format
28 */ 28 */
29 29
30struct igmphdr 30struct igmphdr {
31{
32 __u8 type; 31 __u8 type;
33 __u8 code; /* For newer IGMP */ 32 __u8 code; /* For newer IGMP */
34 __sum16 csum; 33 __sum16 csum;
@@ -151,10 +150,10 @@ static inline struct igmpv3_query *
151extern int sysctl_igmp_max_memberships; 150extern int sysctl_igmp_max_memberships;
152extern int sysctl_igmp_max_msf; 151extern int sysctl_igmp_max_msf;
153 152
154struct ip_sf_socklist 153struct ip_sf_socklist {
155{
156 unsigned int sl_max; 154 unsigned int sl_max;
157 unsigned int sl_count; 155 unsigned int sl_count;
156 struct rcu_head rcu;
158 __be32 sl_addr[0]; 157 __be32 sl_addr[0];
159}; 158};
160 159
@@ -167,16 +166,15 @@ struct ip_sf_socklist
167 this list never used in fast path code 166 this list never used in fast path code
168 */ 167 */
169 168
170struct ip_mc_socklist 169struct ip_mc_socklist {
171{
172 struct ip_mc_socklist *next; 170 struct ip_mc_socklist *next;
173 struct ip_mreqn multi; 171 struct ip_mreqn multi;
174 unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */ 172 unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */
175 struct ip_sf_socklist *sflist; 173 struct ip_sf_socklist *sflist;
174 struct rcu_head rcu;
176}; 175};
177 176
178struct ip_sf_list 177struct ip_sf_list {
179{
180 struct ip_sf_list *sf_next; 178 struct ip_sf_list *sf_next;
181 __be32 sf_inaddr; 179 __be32 sf_inaddr;
182 unsigned long sf_count[2]; /* include/exclude counts */ 180 unsigned long sf_count[2]; /* include/exclude counts */
@@ -185,8 +183,7 @@ struct ip_sf_list
185 unsigned char sf_crcount; /* retrans. left to send */ 183 unsigned char sf_crcount; /* retrans. left to send */
186}; 184};
187 185
188struct ip_mc_list 186struct ip_mc_list {
189{
190 struct in_device *interface; 187 struct in_device *interface;
191 __be32 multiaddr; 188 __be32 multiaddr;
192 struct ip_sf_list *sources; 189 struct ip_sf_list *sources;
diff --git a/include/linux/ima.h b/include/linux/ima.h
index 0e3f2a4c25f6..975837e7d6c0 100644
--- a/include/linux/ima.h
+++ b/include/linux/ima.h
@@ -13,18 +13,14 @@
13#include <linux/fs.h> 13#include <linux/fs.h>
14struct linux_binprm; 14struct linux_binprm;
15 15
16#define IMA_COUNT_UPDATE 1
17#define IMA_COUNT_LEAVE 0
18
19#ifdef CONFIG_IMA 16#ifdef CONFIG_IMA
20extern int ima_bprm_check(struct linux_binprm *bprm); 17extern int ima_bprm_check(struct linux_binprm *bprm);
21extern int ima_inode_alloc(struct inode *inode); 18extern int ima_inode_alloc(struct inode *inode);
22extern void ima_inode_free(struct inode *inode); 19extern void ima_inode_free(struct inode *inode);
23extern int ima_path_check(struct path *path, int mask, int update_counts); 20extern int ima_file_check(struct file *file, int mask);
24extern void ima_file_free(struct file *file); 21extern void ima_file_free(struct file *file);
25extern int ima_file_mmap(struct file *file, unsigned long prot); 22extern int ima_file_mmap(struct file *file, unsigned long prot);
26extern void ima_counts_get(struct file *file); 23extern void ima_counts_get(struct file *file);
27extern void ima_counts_put(struct path *path, int mask);
28 24
29#else 25#else
30static inline int ima_bprm_check(struct linux_binprm *bprm) 26static inline int ima_bprm_check(struct linux_binprm *bprm)
@@ -42,7 +38,7 @@ static inline void ima_inode_free(struct inode *inode)
42 return; 38 return;
43} 39}
44 40
45static inline int ima_path_check(struct path *path, int mask, int update_counts) 41static inline int ima_file_check(struct file *file, int mask)
46{ 42{
47 return 0; 43 return 0;
48} 44}
@@ -62,9 +58,5 @@ static inline void ima_counts_get(struct file *file)
62 return; 58 return;
63} 59}
64 60
65static inline void ima_counts_put(struct path *path, int mask)
66{
67 return;
68}
69#endif /* CONFIG_IMA_H */ 61#endif /* CONFIG_IMA_H */
70#endif /* _LINUX_IMA_H */ 62#endif /* _LINUX_IMA_H */
diff --git a/include/linux/in.h b/include/linux/in.h
index cf196da04ec9..583c76f9c30f 100644
--- a/include/linux/in.h
+++ b/include/linux/in.h
@@ -84,6 +84,8 @@ struct in_addr {
84#define IP_ORIGDSTADDR 20 84#define IP_ORIGDSTADDR 20
85#define IP_RECVORIGDSTADDR IP_ORIGDSTADDR 85#define IP_RECVORIGDSTADDR IP_ORIGDSTADDR
86 86
87#define IP_MINTTL 21
88
87/* IP_MTU_DISCOVER values */ 89/* IP_MTU_DISCOVER values */
88#define IP_PMTUDISC_DONT 0 /* Never send DF frames */ 90#define IP_PMTUDISC_DONT 0 /* Never send DF frames */
89#define IP_PMTUDISC_WANT 1 /* Use per route hints */ 91#define IP_PMTUDISC_WANT 1 /* Use per route hints */
@@ -118,14 +120,12 @@ struct in_addr {
118 120
119/* Request struct for multicast socket ops */ 121/* Request struct for multicast socket ops */
120 122
121struct ip_mreq 123struct ip_mreq {
122{
123 struct in_addr imr_multiaddr; /* IP multicast address of group */ 124 struct in_addr imr_multiaddr; /* IP multicast address of group */
124 struct in_addr imr_interface; /* local IP address of interface */ 125 struct in_addr imr_interface; /* local IP address of interface */
125}; 126};
126 127
127struct ip_mreqn 128struct ip_mreqn {
128{
129 struct in_addr imr_multiaddr; /* IP multicast address of group */ 129 struct in_addr imr_multiaddr; /* IP multicast address of group */
130 struct in_addr imr_address; /* local IP address of interface */ 130 struct in_addr imr_address; /* local IP address of interface */
131 int imr_ifindex; /* Interface index */ 131 int imr_ifindex; /* Interface index */
@@ -149,21 +149,18 @@ struct ip_msfilter {
149 (sizeof(struct ip_msfilter) - sizeof(__u32) \ 149 (sizeof(struct ip_msfilter) - sizeof(__u32) \
150 + (numsrc) * sizeof(__u32)) 150 + (numsrc) * sizeof(__u32))
151 151
152struct group_req 152struct group_req {
153{
154 __u32 gr_interface; /* interface index */ 153 __u32 gr_interface; /* interface index */
155 struct __kernel_sockaddr_storage gr_group; /* group address */ 154 struct __kernel_sockaddr_storage gr_group; /* group address */
156}; 155};
157 156
158struct group_source_req 157struct group_source_req {
159{
160 __u32 gsr_interface; /* interface index */ 158 __u32 gsr_interface; /* interface index */
161 struct __kernel_sockaddr_storage gsr_group; /* group address */ 159 struct __kernel_sockaddr_storage gsr_group; /* group address */
162 struct __kernel_sockaddr_storage gsr_source; /* source address */ 160 struct __kernel_sockaddr_storage gsr_source; /* source address */
163}; 161};
164 162
165struct group_filter 163struct group_filter {
166{
167 __u32 gf_interface; /* interface index */ 164 __u32 gf_interface; /* interface index */
168 struct __kernel_sockaddr_storage gf_group; /* multicast address */ 165 struct __kernel_sockaddr_storage gf_group; /* multicast address */
169 __u32 gf_fmode; /* filter mode */ 166 __u32 gf_fmode; /* filter mode */
@@ -175,8 +172,7 @@ struct group_filter
175 (sizeof(struct group_filter) - sizeof(struct __kernel_sockaddr_storage) \ 172 (sizeof(struct group_filter) - sizeof(struct __kernel_sockaddr_storage) \
176 + (numsrc) * sizeof(struct __kernel_sockaddr_storage)) 173 + (numsrc) * sizeof(struct __kernel_sockaddr_storage))
177 174
178struct in_pktinfo 175struct in_pktinfo {
179{
180 int ipi_ifindex; 176 int ipi_ifindex;
181 struct in_addr ipi_spec_dst; 177 struct in_addr ipi_spec_dst;
182 struct in_addr ipi_addr; 178 struct in_addr ipi_addr;
diff --git a/include/linux/in6.h b/include/linux/in6.h
index 718bf21c5754..bd55c6e46b2e 100644
--- a/include/linux/in6.h
+++ b/include/linux/in6.h
@@ -27,10 +27,8 @@
27 * IPv6 address structure 27 * IPv6 address structure
28 */ 28 */
29 29
30struct in6_addr 30struct in6_addr {
31{ 31 union {
32 union
33 {
34 __u8 u6_addr8[16]; 32 __u8 u6_addr8[16];
35 __be16 u6_addr16[8]; 33 __be16 u6_addr16[8];
36 __be32 u6_addr32[4]; 34 __be32 u6_addr32[4];
@@ -75,8 +73,7 @@ struct ipv6_mreq {
75 73
76#define ipv6mr_acaddr ipv6mr_multiaddr 74#define ipv6mr_acaddr ipv6mr_multiaddr
77 75
78struct in6_flowlabel_req 76struct in6_flowlabel_req {
79{
80 struct in6_addr flr_dst; 77 struct in6_addr flr_dst;
81 __be32 flr_label; 78 __be32 flr_label;
82 __u8 flr_action; 79 __u8 flr_action;
@@ -113,7 +110,7 @@ struct in6_flowlabel_req
113#define IPV6_FLOWINFO_FLOWLABEL 0x000fffff 110#define IPV6_FLOWINFO_FLOWLABEL 0x000fffff
114#define IPV6_FLOWINFO_PRIORITY 0x0ff00000 111#define IPV6_FLOWINFO_PRIORITY 0x0ff00000
115 112
116/* These defintions are obsolete */ 113/* These definitions are obsolete */
117#define IPV6_PRIORITY_UNCHARACTERIZED 0x0000 114#define IPV6_PRIORITY_UNCHARACTERIZED 0x0000
118#define IPV6_PRIORITY_FILLER 0x0100 115#define IPV6_PRIORITY_FILLER 0x0100
119#define IPV6_PRIORITY_UNATTENDED 0x0200 116#define IPV6_PRIORITY_UNATTENDED 0x0200
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h
index ad27c7da8798..2be1a1a2beb9 100644
--- a/include/linux/inetdevice.h
+++ b/include/linux/inetdevice.h
@@ -10,15 +10,43 @@
10#include <linux/timer.h> 10#include <linux/timer.h>
11#include <linux/sysctl.h> 11#include <linux/sysctl.h>
12 12
13struct ipv4_devconf 13enum
14{ 14{
15 IPV4_DEVCONF_FORWARDING=1,
16 IPV4_DEVCONF_MC_FORWARDING,
17 IPV4_DEVCONF_PROXY_ARP,
18 IPV4_DEVCONF_ACCEPT_REDIRECTS,
19 IPV4_DEVCONF_SECURE_REDIRECTS,
20 IPV4_DEVCONF_SEND_REDIRECTS,
21 IPV4_DEVCONF_SHARED_MEDIA,
22 IPV4_DEVCONF_RP_FILTER,
23 IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE,
24 IPV4_DEVCONF_BOOTP_RELAY,
25 IPV4_DEVCONF_LOG_MARTIANS,
26 IPV4_DEVCONF_TAG,
27 IPV4_DEVCONF_ARPFILTER,
28 IPV4_DEVCONF_MEDIUM_ID,
29 IPV4_DEVCONF_NOXFRM,
30 IPV4_DEVCONF_NOPOLICY,
31 IPV4_DEVCONF_FORCE_IGMP_VERSION,
32 IPV4_DEVCONF_ARP_ANNOUNCE,
33 IPV4_DEVCONF_ARP_IGNORE,
34 IPV4_DEVCONF_PROMOTE_SECONDARIES,
35 IPV4_DEVCONF_ARP_ACCEPT,
36 IPV4_DEVCONF_ARP_NOTIFY,
37 IPV4_DEVCONF_ACCEPT_LOCAL,
38 IPV4_DEVCONF_SRC_VMARK,
39 IPV4_DEVCONF_PROXY_ARP_PVLAN,
40 __IPV4_DEVCONF_MAX
41};
42
43struct ipv4_devconf {
15 void *sysctl; 44 void *sysctl;
16 int data[__NET_IPV4_CONF_MAX - 1]; 45 int data[__IPV4_DEVCONF_MAX - 1];
17 DECLARE_BITMAP(state, __NET_IPV4_CONF_MAX - 1); 46 DECLARE_BITMAP(state, __IPV4_DEVCONF_MAX - 1);
18}; 47};
19 48
20struct in_device 49struct in_device {
21{
22 struct net_device *dev; 50 struct net_device *dev;
23 atomic_t refcnt; 51 atomic_t refcnt;
24 int dead; 52 int dead;
@@ -42,7 +70,7 @@ struct in_device
42 struct rcu_head rcu_head; 70 struct rcu_head rcu_head;
43}; 71};
44 72
45#define IPV4_DEVCONF(cnf, attr) ((cnf).data[NET_IPV4_CONF_ ## attr - 1]) 73#define IPV4_DEVCONF(cnf, attr) ((cnf).data[IPV4_DEVCONF_ ## attr - 1])
46#define IPV4_DEVCONF_ALL(net, attr) \ 74#define IPV4_DEVCONF_ALL(net, attr) \
47 IPV4_DEVCONF((*(net)->ipv4.devconf_all), attr) 75 IPV4_DEVCONF((*(net)->ipv4.devconf_all), attr)
48 76
@@ -62,13 +90,13 @@ static inline void ipv4_devconf_set(struct in_device *in_dev, int index,
62 90
63static inline void ipv4_devconf_setall(struct in_device *in_dev) 91static inline void ipv4_devconf_setall(struct in_device *in_dev)
64{ 92{
65 bitmap_fill(in_dev->cnf.state, __NET_IPV4_CONF_MAX - 1); 93 bitmap_fill(in_dev->cnf.state, __IPV4_DEVCONF_MAX - 1);
66} 94}
67 95
68#define IN_DEV_CONF_GET(in_dev, attr) \ 96#define IN_DEV_CONF_GET(in_dev, attr) \
69 ipv4_devconf_get((in_dev), NET_IPV4_CONF_ ## attr) 97 ipv4_devconf_get((in_dev), IPV4_DEVCONF_ ## attr)
70#define IN_DEV_CONF_SET(in_dev, attr, val) \ 98#define IN_DEV_CONF_SET(in_dev, attr, val) \
71 ipv4_devconf_set((in_dev), NET_IPV4_CONF_ ## attr, (val)) 99 ipv4_devconf_set((in_dev), IPV4_DEVCONF_ ## attr, (val))
72 100
73#define IN_DEV_ANDCONF(in_dev, attr) \ 101#define IN_DEV_ANDCONF(in_dev, attr) \
74 (IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr) && \ 102 (IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr) && \
@@ -83,12 +111,15 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev)
83#define IN_DEV_FORWARD(in_dev) IN_DEV_CONF_GET((in_dev), FORWARDING) 111#define IN_DEV_FORWARD(in_dev) IN_DEV_CONF_GET((in_dev), FORWARDING)
84#define IN_DEV_MFORWARD(in_dev) IN_DEV_ANDCONF((in_dev), MC_FORWARDING) 112#define IN_DEV_MFORWARD(in_dev) IN_DEV_ANDCONF((in_dev), MC_FORWARDING)
85#define IN_DEV_RPFILTER(in_dev) IN_DEV_MAXCONF((in_dev), RP_FILTER) 113#define IN_DEV_RPFILTER(in_dev) IN_DEV_MAXCONF((in_dev), RP_FILTER)
114#define IN_DEV_SRC_VMARK(in_dev) IN_DEV_ORCONF((in_dev), SRC_VMARK)
86#define IN_DEV_SOURCE_ROUTE(in_dev) IN_DEV_ANDCONF((in_dev), \ 115#define IN_DEV_SOURCE_ROUTE(in_dev) IN_DEV_ANDCONF((in_dev), \
87 ACCEPT_SOURCE_ROUTE) 116 ACCEPT_SOURCE_ROUTE)
117#define IN_DEV_ACCEPT_LOCAL(in_dev) IN_DEV_ORCONF((in_dev), ACCEPT_LOCAL)
88#define IN_DEV_BOOTP_RELAY(in_dev) IN_DEV_ANDCONF((in_dev), BOOTP_RELAY) 118#define IN_DEV_BOOTP_RELAY(in_dev) IN_DEV_ANDCONF((in_dev), BOOTP_RELAY)
89 119
90#define IN_DEV_LOG_MARTIANS(in_dev) IN_DEV_ORCONF((in_dev), LOG_MARTIANS) 120#define IN_DEV_LOG_MARTIANS(in_dev) IN_DEV_ORCONF((in_dev), LOG_MARTIANS)
91#define IN_DEV_PROXY_ARP(in_dev) IN_DEV_ORCONF((in_dev), PROXY_ARP) 121#define IN_DEV_PROXY_ARP(in_dev) IN_DEV_ORCONF((in_dev), PROXY_ARP)
122#define IN_DEV_PROXY_ARP_PVLAN(in_dev) IN_DEV_CONF_GET(in_dev, PROXY_ARP_PVLAN)
92#define IN_DEV_SHARED_MEDIA(in_dev) IN_DEV_ORCONF((in_dev), SHARED_MEDIA) 123#define IN_DEV_SHARED_MEDIA(in_dev) IN_DEV_ORCONF((in_dev), SHARED_MEDIA)
93#define IN_DEV_TX_REDIRECTS(in_dev) IN_DEV_ORCONF((in_dev), SEND_REDIRECTS) 124#define IN_DEV_TX_REDIRECTS(in_dev) IN_DEV_ORCONF((in_dev), SEND_REDIRECTS)
94#define IN_DEV_SEC_REDIRECTS(in_dev) IN_DEV_ORCONF((in_dev), \ 125#define IN_DEV_SEC_REDIRECTS(in_dev) IN_DEV_ORCONF((in_dev), \
@@ -110,8 +141,7 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev)
110#define IN_DEV_ARP_IGNORE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_IGNORE) 141#define IN_DEV_ARP_IGNORE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_IGNORE)
111#define IN_DEV_ARP_NOTIFY(in_dev) IN_DEV_MAXCONF((in_dev), ARP_NOTIFY) 142#define IN_DEV_ARP_NOTIFY(in_dev) IN_DEV_MAXCONF((in_dev), ARP_NOTIFY)
112 143
113struct in_ifaddr 144struct in_ifaddr {
114{
115 struct in_ifaddr *ifa_next; 145 struct in_ifaddr *ifa_next;
116 struct in_device *ifa_dev; 146 struct in_device *ifa_dev;
117 struct rcu_head rcu_head; 147 struct rcu_head rcu_head;
diff --git a/include/linux/init.h b/include/linux/init.h
index ff8bde520d03..ab1d31f9352b 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -149,6 +149,8 @@ void prepare_namespace(void);
149 149
150extern void (*late_time_init)(void); 150extern void (*late_time_init)(void);
151 151
152extern int initcall_debug;
153
152#endif 154#endif
153 155
154#ifndef MODULE 156#ifndef MODULE
diff --git a/include/linux/init_task.h b/include/linux/init_task.h
index 21a6f5d9af22..b1ed1cd8e2a8 100644
--- a/include/linux/init_task.h
+++ b/include/linux/init_task.h
@@ -32,14 +32,6 @@ extern struct fs_struct init_fs;
32} 32}
33 33
34extern struct nsproxy init_nsproxy; 34extern struct nsproxy init_nsproxy;
35#define INIT_NSPROXY(nsproxy) { \
36 .pid_ns = &init_pid_ns, \
37 .count = ATOMIC_INIT(1), \
38 .uts_ns = &init_uts_ns, \
39 .mnt_ns = NULL, \
40 INIT_NET_NS(net_ns) \
41 INIT_IPC_NS(ipc_ns) \
42}
43 35
44#define INIT_SIGHAND(sighand) { \ 36#define INIT_SIGHAND(sighand) { \
45 .count = ATOMIC_INIT(1), \ 37 .count = ATOMIC_INIT(1), \
@@ -83,16 +75,12 @@ extern struct group_info init_groups;
83#define INIT_IDS 75#define INIT_IDS
84#endif 76#endif
85 77
86#ifdef CONFIG_SECURITY_FILE_CAPABILITIES
87/* 78/*
88 * Because of the reduced scope of CAP_SETPCAP when filesystem 79 * Because of the reduced scope of CAP_SETPCAP when filesystem
89 * capabilities are in effect, it is safe to allow CAP_SETPCAP to 80 * capabilities are in effect, it is safe to allow CAP_SETPCAP to
90 * be available in the default configuration. 81 * be available in the default configuration.
91 */ 82 */
92# define CAP_INIT_BSET CAP_FULL_SET 83# define CAP_INIT_BSET CAP_FULL_SET
93#else
94# define CAP_INIT_BSET CAP_INIT_EFF_SET
95#endif
96 84
97#ifdef CONFIG_TREE_PREEMPT_RCU 85#ifdef CONFIG_TREE_PREEMPT_RCU
98#define INIT_TASK_RCU_PREEMPT(tsk) \ 86#define INIT_TASK_RCU_PREEMPT(tsk) \
@@ -169,7 +157,7 @@ extern struct cred init_cred;
169 .journal_info = NULL, \ 157 .journal_info = NULL, \
170 .cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \ 158 .cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \
171 .fs_excl = ATOMIC_INIT(0), \ 159 .fs_excl = ATOMIC_INIT(0), \
172 .pi_lock = __SPIN_LOCK_UNLOCKED(tsk.pi_lock), \ 160 .pi_lock = __RAW_SPIN_LOCK_UNLOCKED(tsk.pi_lock), \
173 .timer_slack_ns = 50000, /* 50 usec default slack */ \ 161 .timer_slack_ns = 50000, /* 50 usec default slack */ \
174 .pids = { \ 162 .pids = { \
175 [PIDTYPE_PID] = INIT_PID_LINK(PIDTYPE_PID), \ 163 [PIDTYPE_PID] = INIT_PID_LINK(PIDTYPE_PID), \
diff --git a/include/linux/input-polldev.h b/include/linux/input-polldev.h
index 597a0077b3c5..5e3dddf8f562 100644
--- a/include/linux/input-polldev.h
+++ b/include/linux/input-polldev.h
@@ -14,12 +14,19 @@
14 14
15/** 15/**
16 * struct input_polled_dev - simple polled input device 16 * struct input_polled_dev - simple polled input device
17 * @private: private driver data 17 * @private: private driver data.
18 * @flush: driver-supplied method that flushes device's state upon 18 * @open: driver-supplied method that prepares device for polling
19 * opening (optional) 19 * (enabled the device and maybe flushes device state).
20 * @close: driver-supplied method that is called when device is no
21 * longer being polled. Used to put device into low power mode.
20 * @poll: driver-supplied method that polls the device and posts 22 * @poll: driver-supplied method that polls the device and posts
21 * input events (mandatory). 23 * input events (mandatory).
22 * @poll_interval: specifies how often the poll() method shoudl be called. 24 * @poll_interval: specifies how often the poll() method should be called.
25 * Defaults to 500 msec unless overriden when registering the device.
26 * @poll_interval_max: specifies upper bound for the poll interval.
27 * Defaults to the initial value of @poll_interval.
28 * @poll_interval_min: specifies lower bound for the poll interval.
29 * Defaults to 0.
23 * @input: input device structire associated with the polled device. 30 * @input: input device structire associated with the polled device.
24 * Must be properly initialized by the driver (id, name, phys, bits). 31 * Must be properly initialized by the driver (id, name, phys, bits).
25 * 32 *
@@ -30,11 +37,16 @@
30struct input_polled_dev { 37struct input_polled_dev {
31 void *private; 38 void *private;
32 39
33 void (*flush)(struct input_polled_dev *dev); 40 void (*open)(struct input_polled_dev *dev);
41 void (*close)(struct input_polled_dev *dev);
34 void (*poll)(struct input_polled_dev *dev); 42 void (*poll)(struct input_polled_dev *dev);
35 unsigned int poll_interval; /* msec */ 43 unsigned int poll_interval; /* msec */
44 unsigned int poll_interval_max; /* msec */
45 unsigned int poll_interval_min; /* msec */
36 46
37 struct input_dev *input; 47 struct input_dev *input;
48
49/* private: */
38 struct delayed_work work; 50 struct delayed_work work;
39}; 51};
40 52
diff --git a/include/linux/input.h b/include/linux/input.h
index c2b1a7d244d9..7ed2251b33f1 100644
--- a/include/linux/input.h
+++ b/include/linux/input.h
@@ -58,10 +58,10 @@ struct input_absinfo {
58 58
59#define EVIOCGVERSION _IOR('E', 0x01, int) /* get driver version */ 59#define EVIOCGVERSION _IOR('E', 0x01, int) /* get driver version */
60#define EVIOCGID _IOR('E', 0x02, struct input_id) /* get device ID */ 60#define EVIOCGID _IOR('E', 0x02, struct input_id) /* get device ID */
61#define EVIOCGREP _IOR('E', 0x03, int[2]) /* get repeat settings */ 61#define EVIOCGREP _IOR('E', 0x03, unsigned int[2]) /* get repeat settings */
62#define EVIOCSREP _IOW('E', 0x03, int[2]) /* set repeat settings */ 62#define EVIOCSREP _IOW('E', 0x03, unsigned int[2]) /* set repeat settings */
63#define EVIOCGKEYCODE _IOR('E', 0x04, int[2]) /* get keycode */ 63#define EVIOCGKEYCODE _IOR('E', 0x04, unsigned int[2]) /* get keycode */
64#define EVIOCSKEYCODE _IOW('E', 0x04, int[2]) /* set keycode */ 64#define EVIOCSKEYCODE _IOW('E', 0x04, unsigned int[2]) /* set keycode */
65 65
66#define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */ 66#define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */
67#define EVIOCGPHYS(len) _IOC(_IOC_READ, 'E', 0x07, len) /* get physical location */ 67#define EVIOCGPHYS(len) _IOC(_IOC_READ, 'E', 0x07, len) /* get physical location */
@@ -376,8 +376,9 @@ struct input_absinfo {
376#define KEY_DISPLAY_OFF 245 /* display device to off state */ 376#define KEY_DISPLAY_OFF 245 /* display device to off state */
377 377
378#define KEY_WIMAX 246 378#define KEY_WIMAX 246
379#define KEY_RFKILL 247 /* Key that controls all radios */
379 380
380/* Range 248 - 255 is reserved for special needs of AT keyboard driver */ 381/* Code 255 is reserved for special needs of AT keyboard driver */
381 382
382#define BTN_MISC 0x100 383#define BTN_MISC 0x100
383#define BTN_0 0x100 384#define BTN_0 0x100
@@ -595,6 +596,51 @@ struct input_absinfo {
595#define KEY_NUMERIC_STAR 0x20a 596#define KEY_NUMERIC_STAR 0x20a
596#define KEY_NUMERIC_POUND 0x20b 597#define KEY_NUMERIC_POUND 0x20b
597 598
599#define KEY_CAMERA_FOCUS 0x210
600#define KEY_WPS_BUTTON 0x211 /* WiFi Protected Setup key */
601
602#define BTN_TRIGGER_HAPPY 0x2c0
603#define BTN_TRIGGER_HAPPY1 0x2c0
604#define BTN_TRIGGER_HAPPY2 0x2c1
605#define BTN_TRIGGER_HAPPY3 0x2c2
606#define BTN_TRIGGER_HAPPY4 0x2c3
607#define BTN_TRIGGER_HAPPY5 0x2c4
608#define BTN_TRIGGER_HAPPY6 0x2c5
609#define BTN_TRIGGER_HAPPY7 0x2c6
610#define BTN_TRIGGER_HAPPY8 0x2c7
611#define BTN_TRIGGER_HAPPY9 0x2c8
612#define BTN_TRIGGER_HAPPY10 0x2c9
613#define BTN_TRIGGER_HAPPY11 0x2ca
614#define BTN_TRIGGER_HAPPY12 0x2cb
615#define BTN_TRIGGER_HAPPY13 0x2cc
616#define BTN_TRIGGER_HAPPY14 0x2cd
617#define BTN_TRIGGER_HAPPY15 0x2ce
618#define BTN_TRIGGER_HAPPY16 0x2cf
619#define BTN_TRIGGER_HAPPY17 0x2d0
620#define BTN_TRIGGER_HAPPY18 0x2d1
621#define BTN_TRIGGER_HAPPY19 0x2d2
622#define BTN_TRIGGER_HAPPY20 0x2d3
623#define BTN_TRIGGER_HAPPY21 0x2d4
624#define BTN_TRIGGER_HAPPY22 0x2d5
625#define BTN_TRIGGER_HAPPY23 0x2d6
626#define BTN_TRIGGER_HAPPY24 0x2d7
627#define BTN_TRIGGER_HAPPY25 0x2d8
628#define BTN_TRIGGER_HAPPY26 0x2d9
629#define BTN_TRIGGER_HAPPY27 0x2da
630#define BTN_TRIGGER_HAPPY28 0x2db
631#define BTN_TRIGGER_HAPPY29 0x2dc
632#define BTN_TRIGGER_HAPPY30 0x2dd
633#define BTN_TRIGGER_HAPPY31 0x2de
634#define BTN_TRIGGER_HAPPY32 0x2df
635#define BTN_TRIGGER_HAPPY33 0x2e0
636#define BTN_TRIGGER_HAPPY34 0x2e1
637#define BTN_TRIGGER_HAPPY35 0x2e2
638#define BTN_TRIGGER_HAPPY36 0x2e3
639#define BTN_TRIGGER_HAPPY37 0x2e4
640#define BTN_TRIGGER_HAPPY38 0x2e5
641#define BTN_TRIGGER_HAPPY39 0x2e6
642#define BTN_TRIGGER_HAPPY40 0x2e7
643
598/* We avoid low common keys in module aliases so they don't get huge. */ 644/* We avoid low common keys in module aliases so they don't get huge. */
599#define KEY_MIN_INTERESTING KEY_MUTE 645#define KEY_MIN_INTERESTING KEY_MUTE
600#define KEY_MAX 0x2ff 646#define KEY_MAX 0x2ff
@@ -658,6 +704,7 @@ struct input_absinfo {
658#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */ 704#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
659#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */ 705#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
660#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */ 706#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */
707#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */
661 708
662#define ABS_MAX 0x3f 709#define ABS_MAX 0x3f
663#define ABS_CNT (ABS_MAX+1) 710#define ABS_CNT (ABS_MAX+1)
@@ -677,6 +724,9 @@ struct input_absinfo {
677#define SW_LINEOUT_INSERT 0x06 /* set = inserted */ 724#define SW_LINEOUT_INSERT 0x06 /* set = inserted */
678#define SW_JACK_PHYSICAL_INSERT 0x07 /* set = mechanical switch set */ 725#define SW_JACK_PHYSICAL_INSERT 0x07 /* set = mechanical switch set */
679#define SW_VIDEOOUT_INSERT 0x08 /* set = inserted */ 726#define SW_VIDEOOUT_INSERT 0x08 /* set = inserted */
727#define SW_CAMERA_LENS_COVER 0x09 /* set = lens covered */
728#define SW_KEYPAD_SLIDE 0x0a /* set = keypad slide out */
729#define SW_FRONT_PROXIMITY 0x0b /* set = front proximity sensor active */
680#define SW_MAX 0x0f 730#define SW_MAX 0x0f
681#define SW_CNT (SW_MAX+1) 731#define SW_CNT (SW_MAX+1)
682 732
@@ -890,7 +940,7 @@ struct ff_periodic_effect {
890 struct ff_envelope envelope; 940 struct ff_envelope envelope;
891 941
892 __u32 custom_len; 942 __u32 custom_len;
893 __s16 *custom_data; 943 __s16 __user *custom_data;
894}; 944};
895 945
896/** 946/**
@@ -1016,9 +1066,12 @@ struct ff_effect {
1016 * @keycodesize: size of elements in keycode table 1066 * @keycodesize: size of elements in keycode table
1017 * @keycode: map of scancodes to keycodes for this device 1067 * @keycode: map of scancodes to keycodes for this device
1018 * @setkeycode: optional method to alter current keymap, used to implement 1068 * @setkeycode: optional method to alter current keymap, used to implement
1019 * sparse keymaps. If not supplied default mechanism will be used 1069 * sparse keymaps. If not supplied default mechanism will be used.
1070 * The method is being called while holding event_lock and thus must
1071 * not sleep
1020 * @getkeycode: optional method to retrieve current keymap. If not supplied 1072 * @getkeycode: optional method to retrieve current keymap. If not supplied
1021 * default mechanism will be used 1073 * default mechanism will be used. The method is being called while
1074 * holding event_lock and thus must not sleep
1022 * @ff: force feedback structure associated with the device if device 1075 * @ff: force feedback structure associated with the device if device
1023 * supports force feedback effects 1076 * supports force feedback effects
1024 * @repeat_key: stores key code of the last key pressed; used to implement 1077 * @repeat_key: stores key code of the last key pressed; used to implement
@@ -1035,6 +1088,7 @@ struct ff_effect {
1035 * @absmin: minimum values for events coming from absolute axes 1088 * @absmin: minimum values for events coming from absolute axes
1036 * @absfuzz: describes noisiness for axes 1089 * @absfuzz: describes noisiness for axes
1037 * @absflat: size of the center flat position (used by joydev) 1090 * @absflat: size of the center flat position (used by joydev)
1091 * @absres: resolution used for events coming form absolute axes
1038 * @open: this method is called when the very first user calls 1092 * @open: this method is called when the very first user calls
1039 * input_open_device(). The driver must prepare the device 1093 * input_open_device(). The driver must prepare the device
1040 * to start generating events (start polling thread, 1094 * to start generating events (start polling thread,
@@ -1088,8 +1142,10 @@ struct input_dev {
1088 unsigned int keycodemax; 1142 unsigned int keycodemax;
1089 unsigned int keycodesize; 1143 unsigned int keycodesize;
1090 void *keycode; 1144 void *keycode;
1091 int (*setkeycode)(struct input_dev *dev, int scancode, int keycode); 1145 int (*setkeycode)(struct input_dev *dev,
1092 int (*getkeycode)(struct input_dev *dev, int scancode, int *keycode); 1146 unsigned int scancode, unsigned int keycode);
1147 int (*getkeycode)(struct input_dev *dev,
1148 unsigned int scancode, unsigned int *keycode);
1093 1149
1094 struct ff_device *ff; 1150 struct ff_device *ff;
1095 1151
@@ -1189,6 +1245,10 @@ struct input_handle;
1189 * @event: event handler. This method is being called by input core with 1245 * @event: event handler. This method is being called by input core with
1190 * interrupts disabled and dev->event_lock spinlock held and so 1246 * interrupts disabled and dev->event_lock spinlock held and so
1191 * it may not sleep 1247 * it may not sleep
1248 * @filter: similar to @event; separates normal event handlers from
1249 * "filters".
1250 * @match: called after comparing device's id with handler's id_table
1251 * to perform fine-grained matching between device and handler
1192 * @connect: called when attaching a handler to an input device 1252 * @connect: called when attaching a handler to an input device
1193 * @disconnect: disconnects a handler from input device 1253 * @disconnect: disconnects a handler from input device
1194 * @start: starts handler for given handle. This function is called by 1254 * @start: starts handler for given handle. This function is called by
@@ -1200,8 +1260,6 @@ struct input_handle;
1200 * @name: name of the handler, to be shown in /proc/bus/input/handlers 1260 * @name: name of the handler, to be shown in /proc/bus/input/handlers
1201 * @id_table: pointer to a table of input_device_ids this driver can 1261 * @id_table: pointer to a table of input_device_ids this driver can
1202 * handle 1262 * handle
1203 * @blacklist: pointer to a table of input_device_ids this driver should
1204 * ignore even if they match @id_table
1205 * @h_list: list of input handles associated with the handler 1263 * @h_list: list of input handles associated with the handler
1206 * @node: for placing the driver onto input_handler_list 1264 * @node: for placing the driver onto input_handler_list
1207 * 1265 *
@@ -1210,6 +1268,11 @@ struct input_handle;
1210 * same time. All of them will get their copy of input event generated by 1268 * same time. All of them will get their copy of input event generated by
1211 * the device. 1269 * the device.
1212 * 1270 *
1271 * The very same structure is used to implement input filters. Input core
1272 * allows filters to run first and will not pass event to regular handlers
1273 * if any of the filters indicate that the event should be filtered (by
1274 * returning %true from their filter() method).
1275 *
1213 * Note that input core serializes calls to connect() and disconnect() 1276 * Note that input core serializes calls to connect() and disconnect()
1214 * methods. 1277 * methods.
1215 */ 1278 */
@@ -1218,6 +1281,8 @@ struct input_handler {
1218 void *private; 1281 void *private;
1219 1282
1220 void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); 1283 void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
1284 bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
1285 bool (*match)(struct input_handler *handler, struct input_dev *dev);
1221 int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); 1286 int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id);
1222 void (*disconnect)(struct input_handle *handle); 1287 void (*disconnect)(struct input_handle *handle);
1223 void (*start)(struct input_handle *handle); 1288 void (*start)(struct input_handle *handle);
@@ -1227,7 +1292,6 @@ struct input_handler {
1227 const char *name; 1292 const char *name;
1228 1293
1229 const struct input_device_id *id_table; 1294 const struct input_device_id *id_table;
1230 const struct input_device_id *blacklist;
1231 1295
1232 struct list_head h_list; 1296 struct list_head h_list;
1233 struct list_head node; 1297 struct list_head node;
@@ -1289,6 +1353,9 @@ void input_unregister_device(struct input_dev *);
1289int __must_check input_register_handler(struct input_handler *); 1353int __must_check input_register_handler(struct input_handler *);
1290void input_unregister_handler(struct input_handler *); 1354void input_unregister_handler(struct input_handler *);
1291 1355
1356int input_handler_for_each_handle(struct input_handler *, void *data,
1357 int (*fn)(struct input_handle *, void *));
1358
1292int input_register_handle(struct input_handle *); 1359int input_register_handle(struct input_handle *);
1293void input_unregister_handle(struct input_handle *); 1360void input_unregister_handle(struct input_handle *);
1294 1361
@@ -1350,8 +1417,10 @@ static inline void input_set_abs_params(struct input_dev *dev, int axis, int min
1350 dev->absbit[BIT_WORD(axis)] |= BIT_MASK(axis); 1417 dev->absbit[BIT_WORD(axis)] |= BIT_MASK(axis);
1351} 1418}
1352 1419
1353int input_get_keycode(struct input_dev *dev, int scancode, int *keycode); 1420int input_get_keycode(struct input_dev *dev,
1354int input_set_keycode(struct input_dev *dev, int scancode, int keycode); 1421 unsigned int scancode, unsigned int *keycode);
1422int input_set_keycode(struct input_dev *dev,
1423 unsigned int scancode, unsigned int keycode);
1355 1424
1356extern struct class input_class; 1425extern struct class input_class;
1357 1426
diff --git a/include/linux/input/matrix_keypad.h b/include/linux/input/matrix_keypad.h
index b3cd42d50e16..c964cd7f436a 100644
--- a/include/linux/input/matrix_keypad.h
+++ b/include/linux/input/matrix_keypad.h
@@ -41,6 +41,10 @@ struct matrix_keymap_data {
41 * @col_scan_delay_us: delay, measured in microseconds, that is 41 * @col_scan_delay_us: delay, measured in microseconds, that is
42 * needed before we can keypad after activating column gpio 42 * needed before we can keypad after activating column gpio
43 * @debounce_ms: debounce interval in milliseconds 43 * @debounce_ms: debounce interval in milliseconds
44 * @active_low: gpio polarity
45 * @wakeup: controls whether the device should be set up as wakeup
46 * source
47 * @no_autorepeat: disable key autorepeat
44 * 48 *
45 * This structure represents platform-specific data that use used by 49 * This structure represents platform-specific data that use used by
46 * matrix_keypad driver to perform proper initialization. 50 * matrix_keypad driver to perform proper initialization.
@@ -61,6 +65,7 @@ struct matrix_keypad_platform_data {
61 65
62 bool active_low; 66 bool active_low;
63 bool wakeup; 67 bool wakeup;
68 bool no_autorepeat;
64}; 69};
65 70
66/** 71/**
diff --git a/include/linux/input/sh_keysc.h b/include/linux/input/sh_keysc.h
new file mode 100644
index 000000000000..649dc7f12925
--- /dev/null
+++ b/include/linux/input/sh_keysc.h
@@ -0,0 +1,15 @@
1#ifndef __SH_KEYSC_H__
2#define __SH_KEYSC_H__
3
4#define SH_KEYSC_MAXKEYS 49
5
6struct sh_keysc_info {
7 enum { SH_KEYSC_MODE_1, SH_KEYSC_MODE_2, SH_KEYSC_MODE_3,
8 SH_KEYSC_MODE_4, SH_KEYSC_MODE_5, SH_KEYSC_MODE_6 } mode;
9 int scan_timing; /* 0 -> 7, see KYCR1, SCN[2:0] */
10 int delay;
11 int kycr2_delay;
12 int keycodes[SH_KEYSC_MAXKEYS]; /* KEYIN * KEYOUT */
13};
14
15#endif /* __SH_KEYSC_H__ */
diff --git a/include/linux/input/sparse-keymap.h b/include/linux/input/sparse-keymap.h
new file mode 100644
index 000000000000..52db62064c6e
--- /dev/null
+++ b/include/linux/input/sparse-keymap.h
@@ -0,0 +1,62 @@
1#ifndef _SPARSE_KEYMAP_H
2#define _SPARSE_KEYMAP_H
3
4/*
5 * Copyright (c) 2009 Dmitry Torokhov
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
12#define KE_END 0 /* Indicates end of keymap */
13#define KE_KEY 1 /* Ordinary key/button */
14#define KE_SW 2 /* Switch (predetermined value) */
15#define KE_VSW 3 /* Switch (value supplied at runtime) */
16#define KE_IGNORE 4 /* Known entry that should be ignored */
17#define KE_LAST KE_IGNORE
18
19/**
20 * struct key_entry - keymap entry for use in sparse keymap
21 * @type: Type of the key entry (KE_KEY, KE_SW, KE_VSW, KE_END);
22 * drivers are allowed to extend the list with their own
23 * private definitions.
24 * @code: Device-specific data identifying the button/switch
25 * @keycode: KEY_* code assigned to a key/button
26 * @sw.code: SW_* code assigned to a switch
27 * @sw.value: Value that should be sent in an input even when KE_SW
28 * switch is toggled. KE_VSW switches ignore this field and
29 * expect driver to supply value for the event.
30 *
31 * This structure defines an entry in a sparse keymap used by some
32 * input devices for which traditional table-based approach is not
33 * suitable.
34 */
35struct key_entry {
36 int type; /* See KE_* above */
37 u32 code;
38 union {
39 u16 keycode; /* For KE_KEY */
40 struct { /* For KE_SW, KE_VSW */
41 u8 code;
42 u8 value; /* For KE_SW, ignored by KE_VSW */
43 } sw;
44 };
45};
46
47struct key_entry *sparse_keymap_entry_from_scancode(struct input_dev *dev,
48 unsigned int code);
49struct key_entry *sparse_keymap_entry_from_keycode(struct input_dev *dev,
50 unsigned int code);
51int sparse_keymap_setup(struct input_dev *dev,
52 const struct key_entry *keymap,
53 int (*setup)(struct input_dev *, struct key_entry *));
54void sparse_keymap_free(struct input_dev *dev);
55
56void sparse_keymap_report_entry(struct input_dev *dev, const struct key_entry *ke,
57 unsigned int value, bool autorelease);
58
59bool sparse_keymap_report_event(struct input_dev *dev, unsigned int code,
60 unsigned int value, bool autorelease);
61
62#endif /* _SPARSE_KEYMAP_H */
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h
index 4f0a72a9740c..9310c699a37d 100644
--- a/include/linux/intel-iommu.h
+++ b/include/linux/intel-iommu.h
@@ -332,6 +332,7 @@ struct intel_iommu {
332#ifdef CONFIG_INTR_REMAP 332#ifdef CONFIG_INTR_REMAP
333 struct ir_table *ir_table; /* Interrupt remapping info */ 333 struct ir_table *ir_table; /* Interrupt remapping info */
334#endif 334#endif
335 int node;
335}; 336};
336 337
337static inline void __iommu_flush_cache( 338static inline void __iommu_flush_cache(
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 7ca72b74eec7..75f3f00ac1e5 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -603,12 +603,6 @@ static inline void init_irq_proc(void)
603} 603}
604#endif 604#endif
605 605
606#if defined(CONFIG_GENERIC_HARDIRQS) && defined(CONFIG_DEBUG_SHIRQ)
607extern void debug_poll_all_shared_irqs(void);
608#else
609static inline void debug_poll_all_shared_irqs(void) { }
610#endif
611
612struct seq_file; 606struct seq_file;
613int show_interrupts(struct seq_file *p, void *v); 607int show_interrupts(struct seq_file *p, void *v);
614 608
diff --git a/include/linux/io-mapping.h b/include/linux/io-mapping.h
index 97eb928b4924..25085ddd955f 100644
--- a/include/linux/io-mapping.h
+++ b/include/linux/io-mapping.h
@@ -19,6 +19,7 @@
19#define _LINUX_IO_MAPPING_H 19#define _LINUX_IO_MAPPING_H
20 20
21#include <linux/types.h> 21#include <linux/types.h>
22#include <linux/slab.h>
22#include <asm/io.h> 23#include <asm/io.h>
23#include <asm/page.h> 24#include <asm/page.h>
24#include <asm/iomap.h> 25#include <asm/iomap.h>
diff --git a/include/linux/iocontext.h b/include/linux/iocontext.h
index 4da4a75c3f1e..a0bb301afac0 100644
--- a/include/linux/iocontext.h
+++ b/include/linux/iocontext.h
@@ -4,32 +4,6 @@
4#include <linux/radix-tree.h> 4#include <linux/radix-tree.h>
5#include <linux/rcupdate.h> 5#include <linux/rcupdate.h>
6 6
7/*
8 * This is the per-process anticipatory I/O scheduler state.
9 */
10struct as_io_context {
11 spinlock_t lock;
12
13 void (*dtor)(struct as_io_context *aic); /* destructor */
14 void (*exit)(struct as_io_context *aic); /* called on task exit */
15
16 unsigned long state;
17 atomic_t nr_queued; /* queued reads & sync writes */
18 atomic_t nr_dispatched; /* number of requests gone to the drivers */
19
20 /* IO History tracking */
21 /* Thinktime */
22 unsigned long last_end_request;
23 unsigned long ttime_total;
24 unsigned long ttime_samples;
25 unsigned long ttime_mean;
26 /* Layout pattern */
27 unsigned int seek_samples;
28 sector_t last_request_pos;
29 u64 seek_total;
30 sector_t seek_mean;
31};
32
33struct cfq_queue; 7struct cfq_queue;
34struct cfq_io_context { 8struct cfq_io_context {
35 void *key; 9 void *key;
@@ -40,16 +14,11 @@ struct cfq_io_context {
40 struct io_context *ioc; 14 struct io_context *ioc;
41 15
42 unsigned long last_end_request; 16 unsigned long last_end_request;
43 sector_t last_request_pos;
44 17
45 unsigned long ttime_total; 18 unsigned long ttime_total;
46 unsigned long ttime_samples; 19 unsigned long ttime_samples;
47 unsigned long ttime_mean; 20 unsigned long ttime_mean;
48 21
49 unsigned int seek_samples;
50 u64 seek_total;
51 sector_t seek_mean;
52
53 struct list_head queue_list; 22 struct list_head queue_list;
54 struct hlist_node cic_list; 23 struct hlist_node cic_list;
55 24
@@ -73,13 +42,16 @@ struct io_context {
73 unsigned short ioprio; 42 unsigned short ioprio;
74 unsigned short ioprio_changed; 43 unsigned short ioprio_changed;
75 44
45#if defined(CONFIG_BLK_CGROUP) || defined(CONFIG_BLK_CGROUP_MODULE)
46 unsigned short cgroup_changed;
47#endif
48
76 /* 49 /*
77 * For request batching 50 * For request batching
78 */ 51 */
79 unsigned long last_waited; /* Time last woken after wait for request */
80 int nr_batch_requests; /* Number of requests left in the batch */ 52 int nr_batch_requests; /* Number of requests left in the batch */
53 unsigned long last_waited; /* Time last woken after wait for request */
81 54
82 struct as_io_context *aic;
83 struct radix_tree_root radix_root; 55 struct radix_tree_root radix_root;
84 struct hlist_head cic_list; 56 struct hlist_head cic_list;
85 void *ioc_data; 57 void *ioc_data;
@@ -99,14 +71,15 @@ static inline struct io_context *ioc_task_link(struct io_context *ioc)
99 return NULL; 71 return NULL;
100} 72}
101 73
74struct task_struct;
102#ifdef CONFIG_BLOCK 75#ifdef CONFIG_BLOCK
103int put_io_context(struct io_context *ioc); 76int put_io_context(struct io_context *ioc);
104void exit_io_context(void); 77void exit_io_context(struct task_struct *task);
105struct io_context *get_io_context(gfp_t gfp_flags, int node); 78struct io_context *get_io_context(gfp_t gfp_flags, int node);
106struct io_context *alloc_io_context(gfp_t gfp_flags, int node); 79struct io_context *alloc_io_context(gfp_t gfp_flags, int node);
107void copy_io_context(struct io_context **pdst, struct io_context **psrc); 80void copy_io_context(struct io_context **pdst, struct io_context **psrc);
108#else 81#else
109static inline void exit_io_context(void) 82static inline void exit_io_context(struct task_struct *task)
110{ 83{
111} 84}
112 85
diff --git a/include/linux/iommu-helper.h b/include/linux/iommu-helper.h
index 3b068e5b5671..64d1b638745d 100644
--- a/include/linux/iommu-helper.h
+++ b/include/linux/iommu-helper.h
@@ -14,14 +14,11 @@ static inline unsigned long iommu_device_max_index(unsigned long size,
14extern int iommu_is_span_boundary(unsigned int index, unsigned int nr, 14extern int iommu_is_span_boundary(unsigned int index, unsigned int nr,
15 unsigned long shift, 15 unsigned long shift,
16 unsigned long boundary_size); 16 unsigned long boundary_size);
17extern void iommu_area_reserve(unsigned long *map, unsigned long i, int len);
18extern unsigned long iommu_area_alloc(unsigned long *map, unsigned long size, 17extern unsigned long iommu_area_alloc(unsigned long *map, unsigned long size,
19 unsigned long start, unsigned int nr, 18 unsigned long start, unsigned int nr,
20 unsigned long shift, 19 unsigned long shift,
21 unsigned long boundary_size, 20 unsigned long boundary_size,
22 unsigned long align_mask); 21 unsigned long align_mask);
23extern void iommu_area_free(unsigned long *map, unsigned long start,
24 unsigned int nr);
25 22
26extern unsigned long iommu_num_pages(unsigned long addr, unsigned long len, 23extern unsigned long iommu_num_pages(unsigned long addr, unsigned long len,
27 unsigned long io_page_size); 24 unsigned long io_page_size);
diff --git a/include/linux/ioport.h b/include/linux/ioport.h
index 83aa81297ea3..26fad187d661 100644
--- a/include/linux/ioport.h
+++ b/include/linux/ioport.h
@@ -34,22 +34,24 @@ struct resource_list {
34 */ 34 */
35#define IORESOURCE_BITS 0x000000ff /* Bus-specific bits */ 35#define IORESOURCE_BITS 0x000000ff /* Bus-specific bits */
36 36
37#define IORESOURCE_TYPE_BITS 0x00000f00 /* Resource type */ 37#define IORESOURCE_TYPE_BITS 0x00001f00 /* Resource type */
38#define IORESOURCE_IO 0x00000100 38#define IORESOURCE_IO 0x00000100
39#define IORESOURCE_MEM 0x00000200 39#define IORESOURCE_MEM 0x00000200
40#define IORESOURCE_IRQ 0x00000400 40#define IORESOURCE_IRQ 0x00000400
41#define IORESOURCE_DMA 0x00000800 41#define IORESOURCE_DMA 0x00000800
42#define IORESOURCE_BUS 0x00001000
42 43
43#define IORESOURCE_PREFETCH 0x00001000 /* No side effects */ 44#define IORESOURCE_PREFETCH 0x00002000 /* No side effects */
44#define IORESOURCE_READONLY 0x00002000 45#define IORESOURCE_READONLY 0x00004000
45#define IORESOURCE_CACHEABLE 0x00004000 46#define IORESOURCE_CACHEABLE 0x00008000
46#define IORESOURCE_RANGELENGTH 0x00008000 47#define IORESOURCE_RANGELENGTH 0x00010000
47#define IORESOURCE_SHADOWABLE 0x00010000 48#define IORESOURCE_SHADOWABLE 0x00020000
48 49
49#define IORESOURCE_SIZEALIGN 0x00020000 /* size indicates alignment */ 50#define IORESOURCE_SIZEALIGN 0x00040000 /* size indicates alignment */
50#define IORESOURCE_STARTALIGN 0x00040000 /* start field is alignment */ 51#define IORESOURCE_STARTALIGN 0x00080000 /* start field is alignment */
51 52
52#define IORESOURCE_MEM_64 0x00100000 53#define IORESOURCE_MEM_64 0x00100000
54#define IORESOURCE_WINDOW 0x00200000 /* forwarded by bridge */
53 55
54#define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */ 56#define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */
55#define IORESOURCE_DISABLED 0x10000000 57#define IORESOURCE_DISABLED 0x10000000
@@ -110,27 +112,32 @@ struct resource_list {
110extern struct resource ioport_resource; 112extern struct resource ioport_resource;
111extern struct resource iomem_resource; 113extern struct resource iomem_resource;
112 114
115extern struct resource *request_resource_conflict(struct resource *root, struct resource *new);
113extern int request_resource(struct resource *root, struct resource *new); 116extern int request_resource(struct resource *root, struct resource *new);
114extern int release_resource(struct resource *new); 117extern int release_resource(struct resource *new);
118void release_child_resources(struct resource *new);
115extern void reserve_region_with_split(struct resource *root, 119extern void reserve_region_with_split(struct resource *root,
116 resource_size_t start, resource_size_t end, 120 resource_size_t start, resource_size_t end,
117 const char *name); 121 const char *name);
122extern struct resource *insert_resource_conflict(struct resource *parent, struct resource *new);
118extern int insert_resource(struct resource *parent, struct resource *new); 123extern int insert_resource(struct resource *parent, struct resource *new);
119extern void insert_resource_expand_to_fit(struct resource *root, struct resource *new); 124extern void insert_resource_expand_to_fit(struct resource *root, struct resource *new);
120extern int allocate_resource(struct resource *root, struct resource *new, 125extern int allocate_resource(struct resource *root, struct resource *new,
121 resource_size_t size, resource_size_t min, 126 resource_size_t size, resource_size_t min,
122 resource_size_t max, resource_size_t align, 127 resource_size_t max, resource_size_t align,
123 void (*alignf)(void *, struct resource *, 128 resource_size_t (*alignf)(void *,
124 resource_size_t, resource_size_t), 129 const struct resource *,
130 resource_size_t,
131 resource_size_t),
125 void *alignf_data); 132 void *alignf_data);
126int adjust_resource(struct resource *res, resource_size_t start, 133int adjust_resource(struct resource *res, resource_size_t start,
127 resource_size_t size); 134 resource_size_t size);
128resource_size_t resource_alignment(struct resource *res); 135resource_size_t resource_alignment(struct resource *res);
129static inline resource_size_t resource_size(struct resource *res) 136static inline resource_size_t resource_size(const struct resource *res)
130{ 137{
131 return res->end - res->start + 1; 138 return res->end - res->start + 1;
132} 139}
133static inline unsigned long resource_type(struct resource *res) 140static inline unsigned long resource_type(const struct resource *res)
134{ 141{
135 return res->flags & IORESOURCE_TYPE_BITS; 142 return res->flags & IORESOURCE_TYPE_BITS;
136} 143}
diff --git a/include/linux/ip_vs.h b/include/linux/ip_vs.h
index 148265e63e8d..dfc170362842 100644
--- a/include/linux/ip_vs.h
+++ b/include/linux/ip_vs.h
@@ -127,8 +127,7 @@ struct ip_vs_dest_user {
127/* 127/*
128 * IPVS statistics object (for user space) 128 * IPVS statistics object (for user space)
129 */ 129 */
130struct ip_vs_stats_user 130struct ip_vs_stats_user {
131{
132 __u32 conns; /* connections scheduled */ 131 __u32 conns; /* connections scheduled */
133 __u32 inpkts; /* incoming packets */ 132 __u32 inpkts; /* incoming packets */
134 __u32 outpkts; /* outgoing packets */ 133 __u32 outpkts; /* outgoing packets */
diff --git a/include/linux/ipc_namespace.h b/include/linux/ipc_namespace.h
index e408722a84c7..51952989ad42 100644
--- a/include/linux/ipc_namespace.h
+++ b/include/linux/ipc_namespace.h
@@ -62,11 +62,6 @@ extern struct ipc_namespace init_ipc_ns;
62extern atomic_t nr_ipc_ns; 62extern atomic_t nr_ipc_ns;
63 63
64extern spinlock_t mq_lock; 64extern spinlock_t mq_lock;
65#if defined(CONFIG_POSIX_MQUEUE) || defined(CONFIG_SYSVIPC)
66#define INIT_IPC_NS(ns) .ns = &init_ipc_ns,
67#else
68#define INIT_IPC_NS(ns)
69#endif
70 65
71#ifdef CONFIG_SYSVIPC 66#ifdef CONFIG_SYSVIPC
72extern int register_ipcns_notifier(struct ipc_namespace *); 67extern int register_ipcns_notifier(struct ipc_namespace *);
@@ -87,7 +82,7 @@ extern int mq_init_ns(struct ipc_namespace *ns);
87/* default values */ 82/* default values */
88#define DFLT_QUEUESMAX 256 /* max number of message queues */ 83#define DFLT_QUEUESMAX 256 /* max number of message queues */
89#define DFLT_MSGMAX 10 /* max number of messages in each queue */ 84#define DFLT_MSGMAX 10 /* max number of messages in each queue */
90#define HARD_MSGMAX (131072/sizeof(void *)) 85#define HARD_MSGMAX (32768*sizeof(void *)/4)
91#define DFLT_MSGSIZEMAX 8192 /* max message size */ 86#define DFLT_MSGSIZEMAX 8192 /* max message size */
92#else 87#else
93static inline int mq_init_ns(struct ipc_namespace *ns) { return 0; } 88static inline int mq_init_ns(struct ipc_namespace *ns) { return 0; }
diff --git a/include/linux/ipmi_smi.h b/include/linux/ipmi_smi.h
index f7c9c75a2775..4b48318ac542 100644
--- a/include/linux/ipmi_smi.h
+++ b/include/linux/ipmi_smi.h
@@ -39,7 +39,6 @@
39#include <linux/module.h> 39#include <linux/module.h>
40#include <linux/device.h> 40#include <linux/device.h>
41#include <linux/platform_device.h> 41#include <linux/platform_device.h>
42#include <linux/ipmi_smi.h>
43 42
44/* This files describes the interface for IPMI system management interface 43/* This files describes the interface for IPMI system management interface
45 drivers to bind into the IPMI message handler. */ 44 drivers to bind into the IPMI message handler. */
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index c662efa68289..e0cc9a7db2b5 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -167,6 +167,7 @@ struct ipv6_devconf {
167#endif 167#endif
168 __s32 disable_ipv6; 168 __s32 disable_ipv6;
169 __s32 accept_dad; 169 __s32 accept_dad;
170 __s32 force_tllao;
170 void *sysctl; 171 void *sysctl;
171}; 172};
172 173
@@ -207,6 +208,7 @@ enum {
207 DEVCONF_MC_FORWARDING, 208 DEVCONF_MC_FORWARDING,
208 DEVCONF_DISABLE_IPV6, 209 DEVCONF_DISABLE_IPV6,
209 DEVCONF_ACCEPT_DAD, 210 DEVCONF_ACCEPT_DAD,
211 DEVCONF_FORCE_TLLAO,
210 DEVCONF_MAX 212 DEVCONF_MAX
211}; 213};
212 214
@@ -503,7 +505,7 @@ static inline struct raw6_sock *raw6_sk(const struct sock *sk)
503 505
504#define INET6_MATCH(__sk, __net, __hash, __saddr, __daddr, __ports, __dif)\ 506#define INET6_MATCH(__sk, __net, __hash, __saddr, __daddr, __ports, __dif)\
505 (((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net) && \ 507 (((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net) && \
506 ((*((__portpair *)&(inet_sk(__sk)->dport))) == (__ports)) && \ 508 ((*((__portpair *)&(inet_sk(__sk)->inet_dport))) == (__ports)) && \
507 ((__sk)->sk_family == AF_INET6) && \ 509 ((__sk)->sk_family == AF_INET6) && \
508 ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) && \ 510 ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) && \
509 ipv6_addr_equal(&inet6_sk(__sk)->rcv_saddr, (__daddr)) && \ 511 ipv6_addr_equal(&inet6_sk(__sk)->rcv_saddr, (__daddr)) && \
diff --git a/include/linux/irq.h b/include/linux/irq.h
index ae9653dbcd78..707ab122e2e6 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -90,7 +90,7 @@ struct msi_desc;
90 * @startup: start up the interrupt (defaults to ->enable if NULL) 90 * @startup: start up the interrupt (defaults to ->enable if NULL)
91 * @shutdown: shut down the interrupt (defaults to ->disable if NULL) 91 * @shutdown: shut down the interrupt (defaults to ->disable if NULL)
92 * @enable: enable the interrupt (defaults to chip->unmask if NULL) 92 * @enable: enable the interrupt (defaults to chip->unmask if NULL)
93 * @disable: disable the interrupt (defaults to chip->mask if NULL) 93 * @disable: disable the interrupt
94 * @ack: start of a new interrupt 94 * @ack: start of a new interrupt
95 * @mask: mask an interrupt source 95 * @mask: mask an interrupt source
96 * @mask_ack: ack and mask an interrupt source 96 * @mask_ack: ack and mask an interrupt source
@@ -192,7 +192,7 @@ struct irq_desc {
192 unsigned int irq_count; /* For detecting broken IRQs */ 192 unsigned int irq_count; /* For detecting broken IRQs */
193 unsigned long last_unhandled; /* Aging timer for unhandled count */ 193 unsigned long last_unhandled; /* Aging timer for unhandled count */
194 unsigned int irqs_unhandled; 194 unsigned int irqs_unhandled;
195 spinlock_t lock; 195 raw_spinlock_t lock;
196#ifdef CONFIG_SMP 196#ifdef CONFIG_SMP
197 cpumask_var_t affinity; 197 cpumask_var_t affinity;
198 unsigned int node; 198 unsigned int node;
@@ -282,7 +282,7 @@ extern irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action);
282 282
283/* 283/*
284 * Built-in IRQ handlers for various IRQ types, 284 * Built-in IRQ handlers for various IRQ types,
285 * callable via desc->chip->handle_irq() 285 * callable via desc->handle_irq()
286 */ 286 */
287extern void handle_level_irq(unsigned int irq, struct irq_desc *desc); 287extern void handle_level_irq(unsigned int irq, struct irq_desc *desc);
288extern void handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc); 288extern void handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc);
@@ -400,7 +400,9 @@ static inline int irq_has_action(unsigned int irq)
400 400
401/* Dynamic irq helper functions */ 401/* Dynamic irq helper functions */
402extern void dynamic_irq_init(unsigned int irq); 402extern void dynamic_irq_init(unsigned int irq);
403void dynamic_irq_init_keep_chip_data(unsigned int irq);
403extern void dynamic_irq_cleanup(unsigned int irq); 404extern void dynamic_irq_cleanup(unsigned int irq);
405void dynamic_irq_cleanup_keep_chip_data(unsigned int irq);
404 406
405/* Set/get chip/data for an IRQ: */ 407/* Set/get chip/data for an IRQ: */
406extern int set_irq_chip(unsigned int irq, struct irq_chip *chip); 408extern int set_irq_chip(unsigned int irq, struct irq_chip *chip);
diff --git a/include/linux/irqflags.h b/include/linux/irqflags.h
index b02a3f1d46a0..006bf45eae30 100644
--- a/include/linux/irqflags.h
+++ b/include/linux/irqflags.h
@@ -124,6 +124,6 @@
124 typecheck(unsigned long, flags); \ 124 typecheck(unsigned long, flags); \
125 raw_irqs_disabled_flags(flags); \ 125 raw_irqs_disabled_flags(flags); \
126}) 126})
127#endif /* CONFIG_X86 */ 127#endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */
128 128
129#endif 129#endif
diff --git a/include/linux/iscsi_ibft.h b/include/linux/iscsi_ibft.h
index 6092487e2950..d2e4042f8f5e 100644
--- a/include/linux/iscsi_ibft.h
+++ b/include/linux/iscsi_ibft.h
@@ -42,9 +42,13 @@ extern struct ibft_table_header *ibft_addr;
42 * mapped address is set in the ibft_addr variable. 42 * mapped address is set in the ibft_addr variable.
43 */ 43 */
44#ifdef CONFIG_ISCSI_IBFT_FIND 44#ifdef CONFIG_ISCSI_IBFT_FIND
45extern void __init reserve_ibft_region(void); 45unsigned long find_ibft_region(unsigned long *sizep);
46#else 46#else
47static inline void reserve_ibft_region(void) { } 47static inline unsigned long find_ibft_region(unsigned long *sizep)
48{
49 *sizep = 0;
50 return 0;
51}
48#endif 52#endif
49 53
50#endif /* ISCSI_IBFT_H */ 54#endif /* ISCSI_IBFT_H */
diff --git a/include/linux/isdn/capilli.h b/include/linux/isdn/capilli.h
index 7acb87a44872..11b57c485854 100644
--- a/include/linux/isdn/capilli.h
+++ b/include/linux/isdn/capilli.h
@@ -50,8 +50,7 @@ struct capi_ctr {
50 u16 (*send_message)(struct capi_ctr *, struct sk_buff *skb); 50 u16 (*send_message)(struct capi_ctr *, struct sk_buff *skb);
51 51
52 char *(*procinfo)(struct capi_ctr *); 52 char *(*procinfo)(struct capi_ctr *);
53 int (*ctr_read_proc)(char *page, char **start, off_t off, 53 const struct file_operations *proc_fops;
54 int count, int *eof, struct capi_ctr *card);
55 54
56 /* filled in before calling ready callback */ 55 /* filled in before calling ready callback */
57 u8 manu[CAPI_MANUFACTURER_LEN]; /* CAPI_GET_MANUFACTURER */ 56 u8 manu[CAPI_MANUFACTURER_LEN]; /* CAPI_GET_MANUFACTURER */
@@ -67,9 +66,10 @@ struct capi_ctr {
67 unsigned long nsentdatapkt; 66 unsigned long nsentdatapkt;
68 67
69 int cnr; /* controller number */ 68 int cnr; /* controller number */
70 volatile unsigned short cardstate; /* controller state */ 69 unsigned short state; /* controller state */
71 volatile int blocked; /* output blocked */ 70 int blocked; /* output blocked */
72 int traceflag; /* capi trace */ 71 int traceflag; /* capi trace */
72 wait_queue_head_t state_wait_queue;
73 73
74 struct proc_dir_entry *procent; 74 struct proc_dir_entry *procent;
75 char procfn[128]; 75 char procfn[128];
diff --git a/include/linux/isicom.h b/include/linux/isicom.h
index bbd42197298f..b92e05650639 100644
--- a/include/linux/isicom.h
+++ b/include/linux/isicom.h
@@ -67,6 +67,7 @@
67 67
68#define FIRMWARE_LOADED 0x0001 68#define FIRMWARE_LOADED 0x0001
69#define BOARD_ACTIVE 0x0002 69#define BOARD_ACTIVE 0x0002
70#define BOARD_INIT 0x0004
70 71
71 /* isi_port status bitmap */ 72 /* isi_port status bitmap */
72 73
diff --git a/include/linux/jbd.h b/include/linux/jbd.h
index 331530cd3cc6..516a2a27e87a 100644
--- a/include/linux/jbd.h
+++ b/include/linux/jbd.h
@@ -31,6 +31,7 @@
31#include <linux/mutex.h> 31#include <linux/mutex.h>
32#include <linux/timer.h> 32#include <linux/timer.h>
33#include <linux/lockdep.h> 33#include <linux/lockdep.h>
34#include <linux/slab.h>
34 35
35#define journal_oom_retry 1 36#define journal_oom_retry 1
36 37
@@ -246,19 +247,8 @@ typedef struct journal_superblock_s
246 247
247#define J_ASSERT(assert) BUG_ON(!(assert)) 248#define J_ASSERT(assert) BUG_ON(!(assert))
248 249
249#if defined(CONFIG_BUFFER_DEBUG)
250void buffer_assertion_failure(struct buffer_head *bh);
251#define J_ASSERT_BH(bh, expr) \
252 do { \
253 if (!(expr)) \
254 buffer_assertion_failure(bh); \
255 J_ASSERT(expr); \
256 } while (0)
257#define J_ASSERT_JH(jh, expr) J_ASSERT_BH(jh2bh(jh), expr)
258#else
259#define J_ASSERT_BH(bh, expr) J_ASSERT(expr) 250#define J_ASSERT_BH(bh, expr) J_ASSERT(expr)
260#define J_ASSERT_JH(jh, expr) J_ASSERT(expr) 251#define J_ASSERT_JH(jh, expr) J_ASSERT(expr)
261#endif
262 252
263#if defined(JBD_PARANOID_IOFAIL) 253#if defined(JBD_PARANOID_IOFAIL)
264#define J_EXPECT(expr, why...) J_ASSERT(expr) 254#define J_EXPECT(expr, why...) J_ASSERT(expr)
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
index f1011f7f3d41..a4d2e9f7088a 100644
--- a/include/linux/jbd2.h
+++ b/include/linux/jbd2.h
@@ -30,6 +30,7 @@
30#include <linux/bit_spinlock.h> 30#include <linux/bit_spinlock.h>
31#include <linux/mutex.h> 31#include <linux/mutex.h>
32#include <linux/timer.h> 32#include <linux/timer.h>
33#include <linux/slab.h>
33#endif 34#endif
34 35
35#define journal_oom_retry 1 36#define journal_oom_retry 1
@@ -69,15 +70,8 @@ extern u8 jbd2_journal_enable_debug;
69#define jbd_debug(f, a...) /**/ 70#define jbd_debug(f, a...) /**/
70#endif 71#endif
71 72
72static inline void *jbd2_alloc(size_t size, gfp_t flags) 73extern void *jbd2_alloc(size_t size, gfp_t flags);
73{ 74extern void jbd2_free(void *ptr, size_t size);
74 return (void *)__get_free_pages(flags, get_order(size));
75}
76
77static inline void jbd2_free(void *ptr, size_t size)
78{
79 free_pages((unsigned long)ptr, get_order(size));
80};
81 75
82#define JBD2_MIN_JOURNAL_BLOCKS 1024 76#define JBD2_MIN_JOURNAL_BLOCKS 1024
83 77
@@ -284,19 +278,8 @@ typedef struct journal_superblock_s
284 278
285#define J_ASSERT(assert) BUG_ON(!(assert)) 279#define J_ASSERT(assert) BUG_ON(!(assert))
286 280
287#if defined(CONFIG_BUFFER_DEBUG)
288void buffer_assertion_failure(struct buffer_head *bh);
289#define J_ASSERT_BH(bh, expr) \
290 do { \
291 if (!(expr)) \
292 buffer_assertion_failure(bh); \
293 J_ASSERT(expr); \
294 } while (0)
295#define J_ASSERT_JH(jh, expr) J_ASSERT_BH(jh2bh(jh), expr)
296#else
297#define J_ASSERT_BH(bh, expr) J_ASSERT(expr) 281#define J_ASSERT_BH(bh, expr) J_ASSERT(expr)
298#define J_ASSERT_JH(jh, expr) J_ASSERT(expr) 282#define J_ASSERT_JH(jh, expr) J_ASSERT(expr)
299#endif
300 283
301#if defined(JBD2_PARANOID_IOFAIL) 284#if defined(JBD2_PARANOID_IOFAIL)
302#define J_EXPECT(expr, why...) J_ASSERT(expr) 285#define J_EXPECT(expr, why...) J_ASSERT(expr)
@@ -653,6 +636,7 @@ struct transaction_s
653 * waiting for it to finish. 636 * waiting for it to finish.
654 */ 637 */
655 unsigned int t_synchronous_commit:1; 638 unsigned int t_synchronous_commit:1;
639 unsigned int t_flushed_data_blocks:1;
656 640
657 /* 641 /*
658 * For use by the filesystem to store fs-specific data 642 * For use by the filesystem to store fs-specific data
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
index 1a9cf78bfce5..6811f4bfc6e7 100644
--- a/include/linux/jiffies.h
+++ b/include/linux/jiffies.h
@@ -307,6 +307,7 @@ extern clock_t jiffies_to_clock_t(long x);
307extern unsigned long clock_t_to_jiffies(unsigned long x); 307extern unsigned long clock_t_to_jiffies(unsigned long x);
308extern u64 jiffies_64_to_clock_t(u64 x); 308extern u64 jiffies_64_to_clock_t(u64 x);
309extern u64 nsec_to_clock_t(u64 x); 309extern u64 nsec_to_clock_t(u64 x);
310extern unsigned long nsecs_to_jiffies(u64 n);
310 311
311#define TIMESTAMP_SIZE 30 312#define TIMESTAMP_SIZE 30
312 313
diff --git a/include/linux/kallsyms.h b/include/linux/kallsyms.h
index 792274269f2b..d8e9b3d1c23c 100644
--- a/include/linux/kallsyms.h
+++ b/include/linux/kallsyms.h
@@ -107,18 +107,6 @@ static inline void print_symbol(const char *fmt, unsigned long addr)
107 __builtin_extract_return_addr((void *)addr)); 107 __builtin_extract_return_addr((void *)addr));
108} 108}
109 109
110/*
111 * Pretty-print a function pointer. This function is deprecated.
112 * Please use the "%pF" vsprintf format instead.
113 */
114static inline void __deprecated print_fn_descriptor_symbol(const char *fmt, void *addr)
115{
116#if defined(CONFIG_IA64) || defined(CONFIG_PPC64)
117 addr = *(void **)addr;
118#endif
119 print_symbol(fmt, (unsigned long)addr);
120}
121
122static inline void print_ip_sym(unsigned long ip) 110static inline void print_ip_sym(unsigned long ip)
123{ 111{
124 printk("[<%p>] %pS\n", (void *) ip, (void *) ip); 112 printk("[<%p>] %pS\n", (void *) ip, (void *) ip);
diff --git a/include/linux/kbd_kern.h b/include/linux/kbd_kern.h
index 8bdb16bfe5fb..506ad20c18f8 100644
--- a/include/linux/kbd_kern.h
+++ b/include/linux/kbd_kern.h
@@ -161,7 +161,4 @@ static inline void con_schedule_flip(struct tty_struct *t)
161 schedule_delayed_work(&t->buf.work, 0); 161 schedule_delayed_work(&t->buf.work, 0);
162} 162}
163 163
164/* mac_hid.c */
165extern int mac_hid_mouse_emulate_buttons(int, unsigned int, int);
166
167#endif 164#endif
diff --git a/include/linux/kernel-page-flags.h b/include/linux/kernel-page-flags.h
new file mode 100644
index 000000000000..bd92a89f4b0a
--- /dev/null
+++ b/include/linux/kernel-page-flags.h
@@ -0,0 +1,46 @@
1#ifndef LINUX_KERNEL_PAGE_FLAGS_H
2#define LINUX_KERNEL_PAGE_FLAGS_H
3
4/*
5 * Stable page flag bits exported to user space
6 */
7
8#define KPF_LOCKED 0
9#define KPF_ERROR 1
10#define KPF_REFERENCED 2
11#define KPF_UPTODATE 3
12#define KPF_DIRTY 4
13#define KPF_LRU 5
14#define KPF_ACTIVE 6
15#define KPF_SLAB 7
16#define KPF_WRITEBACK 8
17#define KPF_RECLAIM 9
18#define KPF_BUDDY 10
19
20/* 11-20: new additions in 2.6.31 */
21#define KPF_MMAP 11
22#define KPF_ANON 12
23#define KPF_SWAPCACHE 13
24#define KPF_SWAPBACKED 14
25#define KPF_COMPOUND_HEAD 15
26#define KPF_COMPOUND_TAIL 16
27#define KPF_HUGE 17
28#define KPF_UNEVICTABLE 18
29#define KPF_HWPOISON 19
30#define KPF_NOPAGE 20
31
32#define KPF_KSM 21
33
34/* kernel hacking assistances
35 * WARNING: subject to change, never rely on them!
36 */
37#define KPF_RESERVED 32
38#define KPF_MLOCKED 33
39#define KPF_MAPPEDTODISK 34
40#define KPF_PRIVATE 35
41#define KPF_PRIVATE_2 36
42#define KPF_OWNER_PRIVATE 37
43#define KPF_ARCH 38
44#define KPF_UNCACHED 39
45
46#endif /* LINUX_KERNEL_PAGE_FLAGS_H */
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index f4e3184fa054..9365227dbaf6 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -15,7 +15,6 @@
15#include <linux/bitops.h> 15#include <linux/bitops.h>
16#include <linux/log2.h> 16#include <linux/log2.h>
17#include <linux/typecheck.h> 17#include <linux/typecheck.h>
18#include <linux/ratelimit.h>
19#include <linux/dynamic_debug.h> 18#include <linux/dynamic_debug.h>
20#include <asm/byteorder.h> 19#include <asm/byteorder.h>
21#include <asm/bug.h> 20#include <asm/bug.h>
@@ -45,6 +44,16 @@ extern const char linux_proc_banner[];
45 44
46#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) 45#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
47 46
47/*
48 * This looks more complex than it should be. But we need to
49 * get the type for the ~ right in round_down (it needs to be
50 * as wide as the result!), and we want to evaluate the macro
51 * arguments just once each.
52 */
53#define __round_mask(x, y) ((__typeof__(x))((y)-1))
54#define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
55#define round_down(x, y) ((x) & ~__round_mask(x, y))
56
48#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) 57#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
49#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) 58#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
50#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y)) 59#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
@@ -125,7 +134,7 @@ extern int _cond_resched(void);
125#endif 134#endif
126 135
127#ifdef CONFIG_DEBUG_SPINLOCK_SLEEP 136#ifdef CONFIG_DEBUG_SPINLOCK_SLEEP
128 void __might_sleep(char *file, int line, int preempt_offset); 137 void __might_sleep(const char *file, int line, int preempt_offset);
129/** 138/**
130 * might_sleep - annotation for functions that can sleep 139 * might_sleep - annotation for functions that can sleep
131 * 140 *
@@ -139,7 +148,8 @@ extern int _cond_resched(void);
139# define might_sleep() \ 148# define might_sleep() \
140 do { __might_sleep(__FILE__, __LINE__, 0); might_resched(); } while (0) 149 do { __might_sleep(__FILE__, __LINE__, 0); might_resched(); } while (0)
141#else 150#else
142 static inline void __might_sleep(char *file, int line, int preempt_offset) { } 151 static inline void __might_sleep(const char *file, int line,
152 int preempt_offset) { }
143# define might_sleep() do { might_resched(); } while (0) 153# define might_sleep() do { might_resched(); } while (0)
144#endif 154#endif
145 155
@@ -241,8 +251,8 @@ asmlinkage int vprintk(const char *fmt, va_list args)
241asmlinkage int printk(const char * fmt, ...) 251asmlinkage int printk(const char * fmt, ...)
242 __attribute__ ((format (printf, 1, 2))) __cold; 252 __attribute__ ((format (printf, 1, 2))) __cold;
243 253
244extern struct ratelimit_state printk_ratelimit_state; 254extern int __printk_ratelimit(const char *func);
245extern int printk_ratelimit(void); 255#define printk_ratelimit() __printk_ratelimit(__func__)
246extern bool printk_timed_ratelimit(unsigned long *caller_jiffies, 256extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
247 unsigned int interval_msec); 257 unsigned int interval_msec);
248 258
@@ -252,10 +262,10 @@ extern int printk_delay_msec;
252 * Print a one-time message (analogous to WARN_ONCE() et al): 262 * Print a one-time message (analogous to WARN_ONCE() et al):
253 */ 263 */
254#define printk_once(x...) ({ \ 264#define printk_once(x...) ({ \
255 static bool __print_once = true; \ 265 static bool __print_once; \
256 \ 266 \
257 if (__print_once) { \ 267 if (!__print_once) { \
258 __print_once = false; \ 268 __print_once = true; \
259 printk(x); \ 269 printk(x); \
260 } \ 270 } \
261}) 271})
@@ -398,15 +408,58 @@ static inline char *pack_hex_byte(char *buf, u8 byte)
398 printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 408 printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
399#elif defined(CONFIG_DYNAMIC_DEBUG) 409#elif defined(CONFIG_DYNAMIC_DEBUG)
400/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */ 410/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
401#define pr_debug(fmt, ...) do { \ 411#define pr_debug(fmt, ...) \
402 dynamic_pr_debug(fmt, ##__VA_ARGS__); \ 412 dynamic_pr_debug(fmt, ##__VA_ARGS__)
403 } while (0)
404#else 413#else
405#define pr_debug(fmt, ...) \ 414#define pr_debug(fmt, ...) \
406 ({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; }) 415 ({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; })
407#endif 416#endif
408 417
409/* 418/*
419 * ratelimited messages with local ratelimit_state,
420 * no local ratelimit_state used in the !PRINTK case
421 */
422#ifdef CONFIG_PRINTK
423#define printk_ratelimited(fmt, ...) ({ \
424 static struct ratelimit_state _rs = { \
425 .interval = DEFAULT_RATELIMIT_INTERVAL, \
426 .burst = DEFAULT_RATELIMIT_BURST, \
427 }; \
428 \
429 if (__ratelimit(&_rs)) \
430 printk(fmt, ##__VA_ARGS__); \
431})
432#else
433/* No effect, but we still get type checking even in the !PRINTK case: */
434#define printk_ratelimited printk
435#endif
436
437#define pr_emerg_ratelimited(fmt, ...) \
438 printk_ratelimited(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
439#define pr_alert_ratelimited(fmt, ...) \
440 printk_ratelimited(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
441#define pr_crit_ratelimited(fmt, ...) \
442 printk_ratelimited(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
443#define pr_err_ratelimited(fmt, ...) \
444 printk_ratelimited(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
445#define pr_warning_ratelimited(fmt, ...) \
446 printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
447#define pr_notice_ratelimited(fmt, ...) \
448 printk_ratelimited(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
449#define pr_info_ratelimited(fmt, ...) \
450 printk_ratelimited(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
451/* no pr_cont_ratelimited, don't do that... */
452/* If you are writing a driver, please use dev_dbg instead */
453#if defined(DEBUG)
454#define pr_debug_ratelimited(fmt, ...) \
455 printk_ratelimited(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
456#else
457#define pr_debug_ratelimited(fmt, ...) \
458 ({ if (0) printk_ratelimited(KERN_DEBUG pr_fmt(fmt), \
459 ##__VA_ARGS__); 0; })
460#endif
461
462/*
410 * General tracing related utility functions - trace_printk(), 463 * General tracing related utility functions - trace_printk(),
411 * tracing_on/tracing_off and tracing_start()/tracing_stop 464 * tracing_on/tracing_off and tracing_start()/tracing_stop
412 * 465 *
@@ -493,6 +546,8 @@ extern int
493__trace_printk(unsigned long ip, const char *fmt, ...) 546__trace_printk(unsigned long ip, const char *fmt, ...)
494 __attribute__ ((format (printf, 2, 3))); 547 __attribute__ ((format (printf, 2, 3)));
495 548
549extern void trace_dump_stack(void);
550
496/* 551/*
497 * The double __builtin_constant_p is because gcc will give us an error 552 * The double __builtin_constant_p is because gcc will give us an error
498 * if we try to allocate the static variable to fmt if it is not a 553 * if we try to allocate the static variable to fmt if it is not a
@@ -526,6 +581,7 @@ trace_printk(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
526static inline void tracing_start(void) { } 581static inline void tracing_start(void) { }
527static inline void tracing_stop(void) { } 582static inline void tracing_stop(void) { }
528static inline void ftrace_off_permanent(void) { } 583static inline void ftrace_off_permanent(void) { }
584static inline void trace_dump_stack(void) { }
529static inline int 585static inline int
530trace_printk(const char *fmt, ...) 586trace_printk(const char *fmt, ...)
531{ 587{
@@ -689,6 +745,10 @@ struct sysinfo {
689/* Force a compilation error if condition is constant and true */ 745/* Force a compilation error if condition is constant and true */
690#define MAYBE_BUILD_BUG_ON(cond) ((void)sizeof(char[1 - 2 * !!(cond)])) 746#define MAYBE_BUILD_BUG_ON(cond) ((void)sizeof(char[1 - 2 * !!(cond)]))
691 747
748/* Force a compilation error if a constant expression is not a power of 2 */
749#define BUILD_BUG_ON_NOT_POWER_OF_2(n) \
750 BUILD_BUG_ON((n) == 0 || (((n) & ((n) - 1)) != 0))
751
692/* Force a compilation error if condition is true, but also produce a 752/* Force a compilation error if condition is true, but also produce a
693 result (of value 0 and type size_t), so the expression can be used 753 result (of value 0 and type size_t), so the expression can be used
694 e.g. in a structure initializer (or where-ever else comma expressions 754 e.g. in a structure initializer (or where-ever else comma expressions
diff --git a/include/linux/kernel_stat.h b/include/linux/kernel_stat.h
index 348fa8874b52..c059044bc6dc 100644
--- a/include/linux/kernel_stat.h
+++ b/include/linux/kernel_stat.h
@@ -25,6 +25,7 @@ struct cpu_usage_stat {
25 cputime64_t iowait; 25 cputime64_t iowait;
26 cputime64_t steal; 26 cputime64_t steal;
27 cputime64_t guest; 27 cputime64_t guest;
28 cputime64_t guest_nice;
28}; 29};
29 30
30struct kernel_stat { 31struct kernel_stat {
diff --git a/include/linux/kernelcapi.h b/include/linux/kernelcapi.h
index a53e932f80fb..9c2683929fd3 100644
--- a/include/linux/kernelcapi.h
+++ b/include/linux/kernelcapi.h
@@ -48,9 +48,7 @@ typedef struct kcapi_carddef {
48#include <linux/list.h> 48#include <linux/list.h>
49#include <linux/skbuff.h> 49#include <linux/skbuff.h>
50#include <linux/workqueue.h> 50#include <linux/workqueue.h>
51 51#include <linux/notifier.h>
52#define KCI_CONTRUP 0 /* arg: struct capi_profile */
53#define KCI_CONTRDOWN 1 /* arg: NULL */
54 52
55struct capi20_appl { 53struct capi20_appl {
56 u16 applid; 54 u16 applid;
@@ -67,11 +65,6 @@ struct capi20_appl {
67 struct sk_buff_head recv_queue; 65 struct sk_buff_head recv_queue;
68 struct work_struct recv_work; 66 struct work_struct recv_work;
69 int release_in_progress; 67 int release_in_progress;
70
71 /* ugly hack to allow for notification of added/removed
72 * controllers. The Right Way (tm) is known. XXX
73 */
74 void (*callback) (unsigned int cmd, __u32 contr, void *data);
75}; 68};
76 69
77u16 capi20_isinstalled(void); 70u16 capi20_isinstalled(void);
@@ -84,11 +77,11 @@ u16 capi20_get_serial(u32 contr, u8 serial[CAPI_SERIAL_LEN]);
84u16 capi20_get_profile(u32 contr, struct capi_profile *profp); 77u16 capi20_get_profile(u32 contr, struct capi_profile *profp);
85int capi20_manufacturer(unsigned int cmd, void __user *data); 78int capi20_manufacturer(unsigned int cmd, void __user *data);
86 79
87/* temporary hack XXX */ 80#define CAPICTR_UP 0
88void capi20_set_callback(struct capi20_appl *ap, 81#define CAPICTR_DOWN 1
89 void (*callback) (unsigned int cmd, __u32 contr, void *data));
90
91 82
83int register_capictr_notifier(struct notifier_block *nb);
84int unregister_capictr_notifier(struct notifier_block *nb);
92 85
93#define CAPI_NOERROR 0x0000 86#define CAPI_NOERROR 0x0000
94 87
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index adc34f2c6eff..03e8e8dbc577 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -199,13 +199,15 @@ extern struct kimage *kexec_crash_image;
199 */ 199 */
200extern struct resource crashk_res; 200extern struct resource crashk_res;
201typedef u32 note_buf_t[KEXEC_NOTE_BYTES/4]; 201typedef u32 note_buf_t[KEXEC_NOTE_BYTES/4];
202extern note_buf_t *crash_notes; 202extern note_buf_t __percpu *crash_notes;
203extern u32 vmcoreinfo_note[VMCOREINFO_NOTE_SIZE/4]; 203extern u32 vmcoreinfo_note[VMCOREINFO_NOTE_SIZE/4];
204extern size_t vmcoreinfo_size; 204extern size_t vmcoreinfo_size;
205extern size_t vmcoreinfo_max_size; 205extern size_t vmcoreinfo_max_size;
206 206
207int __init parse_crashkernel(char *cmdline, unsigned long long system_ram, 207int __init parse_crashkernel(char *cmdline, unsigned long long system_ram,
208 unsigned long long *crash_size, unsigned long long *crash_base); 208 unsigned long long *crash_size, unsigned long long *crash_base);
209int crash_shrink_memory(unsigned long new_size);
210size_t crash_get_memory_size(void);
209 211
210#else /* !CONFIG_KEXEC */ 212#else /* !CONFIG_KEXEC */
211struct pt_regs; 213struct pt_regs;
diff --git a/include/linux/kfifo.h b/include/linux/kfifo.h
index ad6bdf5a5970..e117b1aee69c 100644
--- a/include/linux/kfifo.h
+++ b/include/linux/kfifo.h
@@ -1,6 +1,7 @@
1/* 1/*
2 * A simple kernel FIFO implementation. 2 * A generic kernel FIFO implementation.
3 * 3 *
4 * Copyright (C) 2009 Stefani Seibold <stefani@seibold.net>
4 * Copyright (C) 2004 Stelian Pop <stelian@popies.net> 5 * Copyright (C) 2004 Stelian Pop <stelian@popies.net>
5 * 6 *
6 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
@@ -18,6 +19,25 @@
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 * 20 *
20 */ 21 */
22
23/*
24 * Howto porting drivers to the new generic fifo API:
25 *
26 * - Modify the declaration of the "struct kfifo *" object into a
27 * in-place "struct kfifo" object
28 * - Init the in-place object with kfifo_alloc() or kfifo_init()
29 * Note: The address of the in-place "struct kfifo" object must be
30 * passed as the first argument to this functions
31 * - Replace the use of __kfifo_put into kfifo_in and __kfifo_get
32 * into kfifo_out
33 * - Replace the use of kfifo_put into kfifo_in_locked and kfifo_get
34 * into kfifo_out_locked
35 * Note: the spinlock pointer formerly passed to kfifo_init/kfifo_alloc
36 * must be passed now to the kfifo_in_locked and kfifo_out_locked
37 * as the last parameter.
38 * - All formerly name __kfifo_* functions has been renamed into kfifo_*
39 */
40
21#ifndef _LINUX_KFIFO_H 41#ifndef _LINUX_KFIFO_H
22#define _LINUX_KFIFO_H 42#define _LINUX_KFIFO_H
23 43
@@ -29,26 +49,81 @@ struct kfifo {
29 unsigned int size; /* the size of the allocated buffer */ 49 unsigned int size; /* the size of the allocated buffer */
30 unsigned int in; /* data is added at offset (in % size) */ 50 unsigned int in; /* data is added at offset (in % size) */
31 unsigned int out; /* data is extracted from off. (out % size) */ 51 unsigned int out; /* data is extracted from off. (out % size) */
32 spinlock_t *lock; /* protects concurrent modifications */
33}; 52};
34 53
35extern struct kfifo *kfifo_init(unsigned char *buffer, unsigned int size, 54/*
36 gfp_t gfp_mask, spinlock_t *lock); 55 * Macros for declaration and initialization of the kfifo datatype
37extern struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, 56 */
38 spinlock_t *lock); 57
58/* helper macro */
59#define __kfifo_initializer(s, b) \
60 (struct kfifo) { \
61 .size = s, \
62 .in = 0, \
63 .out = 0, \
64 .buffer = b \
65 }
66
67/**
68 * DECLARE_KFIFO - macro to declare a kfifo and the associated buffer
69 * @name: name of the declared kfifo datatype
70 * @size: size of the fifo buffer. Must be a power of two.
71 *
72 * Note1: the macro can be used inside struct or union declaration
73 * Note2: the macro creates two objects:
74 * A kfifo object with the given name and a buffer for the kfifo
75 * object named name##kfifo_buffer
76 */
77#define DECLARE_KFIFO(name, size) \
78union { \
79 struct kfifo name; \
80 unsigned char name##kfifo_buffer[size + sizeof(struct kfifo)]; \
81}
82
83/**
84 * INIT_KFIFO - Initialize a kfifo declared by DECLARE_KFIFO
85 * @name: name of the declared kfifo datatype
86 */
87#define INIT_KFIFO(name) \
88 name = __kfifo_initializer(sizeof(name##kfifo_buffer) - \
89 sizeof(struct kfifo), \
90 name##kfifo_buffer + sizeof(struct kfifo))
91
92/**
93 * DEFINE_KFIFO - macro to define and initialize a kfifo
94 * @name: name of the declared kfifo datatype
95 * @size: size of the fifo buffer. Must be a power of two.
96 *
97 * Note1: the macro can be used for global and local kfifo data type variables
98 * Note2: the macro creates two objects:
99 * A kfifo object with the given name and a buffer for the kfifo
100 * object named name##kfifo_buffer
101 */
102#define DEFINE_KFIFO(name, size) \
103 unsigned char name##kfifo_buffer[size]; \
104 struct kfifo name = __kfifo_initializer(size, name##kfifo_buffer)
105
106extern void kfifo_init(struct kfifo *fifo, void *buffer,
107 unsigned int size);
108extern __must_check int kfifo_alloc(struct kfifo *fifo, unsigned int size,
109 gfp_t gfp_mask);
39extern void kfifo_free(struct kfifo *fifo); 110extern void kfifo_free(struct kfifo *fifo);
40extern unsigned int __kfifo_put(struct kfifo *fifo, 111extern unsigned int kfifo_in(struct kfifo *fifo,
41 const unsigned char *buffer, unsigned int len); 112 const void *from, unsigned int len);
42extern unsigned int __kfifo_get(struct kfifo *fifo, 113extern __must_check unsigned int kfifo_out(struct kfifo *fifo,
43 unsigned char *buffer, unsigned int len); 114 void *to, unsigned int len);
115extern __must_check unsigned int kfifo_out_peek(struct kfifo *fifo,
116 void *to, unsigned int len, unsigned offset);
44 117
45/** 118/**
46 * __kfifo_reset - removes the entire FIFO contents, no locking version 119 * kfifo_initialized - Check if kfifo is initialized.
47 * @fifo: the fifo to be emptied. 120 * @fifo: fifo to check
121 * Return %true if FIFO is initialized, otherwise %false.
122 * Assumes the fifo was 0 before.
48 */ 123 */
49static inline void __kfifo_reset(struct kfifo *fifo) 124static inline bool kfifo_initialized(struct kfifo *fifo)
50{ 125{
51 fifo->in = fifo->out = 0; 126 return fifo->buffer != NULL;
52} 127}
53 128
54/** 129/**
@@ -57,96 +132,484 @@ static inline void __kfifo_reset(struct kfifo *fifo)
57 */ 132 */
58static inline void kfifo_reset(struct kfifo *fifo) 133static inline void kfifo_reset(struct kfifo *fifo)
59{ 134{
60 unsigned long flags; 135 fifo->in = fifo->out = 0;
136}
61 137
62 spin_lock_irqsave(fifo->lock, flags); 138/**
139 * kfifo_reset_out - skip FIFO contents
140 * @fifo: the fifo to be emptied.
141 */
142static inline void kfifo_reset_out(struct kfifo *fifo)
143{
144 smp_mb();
145 fifo->out = fifo->in;
146}
63 147
64 __kfifo_reset(fifo); 148/**
149 * kfifo_size - returns the size of the fifo in bytes
150 * @fifo: the fifo to be used.
151 */
152static inline __must_check unsigned int kfifo_size(struct kfifo *fifo)
153{
154 return fifo->size;
155}
65 156
66 spin_unlock_irqrestore(fifo->lock, flags); 157/**
158 * kfifo_len - returns the number of used bytes in the FIFO
159 * @fifo: the fifo to be used.
160 */
161static inline unsigned int kfifo_len(struct kfifo *fifo)
162{
163 register unsigned int out;
164
165 out = fifo->out;
166 smp_rmb();
167 return fifo->in - out;
67} 168}
68 169
69/** 170/**
70 * kfifo_put - puts some data into the FIFO 171 * kfifo_is_empty - returns true if the fifo is empty
71 * @fifo: the fifo to be used. 172 * @fifo: the fifo to be used.
72 * @buffer: the data to be added. 173 */
73 * @len: the length of the data to be added. 174static inline __must_check int kfifo_is_empty(struct kfifo *fifo)
175{
176 return fifo->in == fifo->out;
177}
178
179/**
180 * kfifo_is_full - returns true if the fifo is full
181 * @fifo: the fifo to be used.
182 */
183static inline __must_check int kfifo_is_full(struct kfifo *fifo)
184{
185 return kfifo_len(fifo) == kfifo_size(fifo);
186}
187
188/**
189 * kfifo_avail - returns the number of bytes available in the FIFO
190 * @fifo: the fifo to be used.
191 */
192static inline __must_check unsigned int kfifo_avail(struct kfifo *fifo)
193{
194 return kfifo_size(fifo) - kfifo_len(fifo);
195}
196
197/**
198 * kfifo_in_locked - puts some data into the FIFO using a spinlock for locking
199 * @fifo: the fifo to be used.
200 * @from: the data to be added.
201 * @n: the length of the data to be added.
202 * @lock: pointer to the spinlock to use for locking.
74 * 203 *
75 * This function copies at most @len bytes from the @buffer into 204 * This function copies at most @len bytes from the @from buffer into
76 * the FIFO depending on the free space, and returns the number of 205 * the FIFO depending on the free space, and returns the number of
77 * bytes copied. 206 * bytes copied.
78 */ 207 */
79static inline unsigned int kfifo_put(struct kfifo *fifo, 208static inline unsigned int kfifo_in_locked(struct kfifo *fifo,
80 const unsigned char *buffer, unsigned int len) 209 const void *from, unsigned int n, spinlock_t *lock)
81{ 210{
82 unsigned long flags; 211 unsigned long flags;
83 unsigned int ret; 212 unsigned int ret;
84 213
85 spin_lock_irqsave(fifo->lock, flags); 214 spin_lock_irqsave(lock, flags);
86 215
87 ret = __kfifo_put(fifo, buffer, len); 216 ret = kfifo_in(fifo, from, n);
88 217
89 spin_unlock_irqrestore(fifo->lock, flags); 218 spin_unlock_irqrestore(lock, flags);
90 219
91 return ret; 220 return ret;
92} 221}
93 222
94/** 223/**
95 * kfifo_get - gets some data from the FIFO 224 * kfifo_out_locked - gets some data from the FIFO using a spinlock for locking
96 * @fifo: the fifo to be used. 225 * @fifo: the fifo to be used.
97 * @buffer: where the data must be copied. 226 * @to: where the data must be copied.
98 * @len: the size of the destination buffer. 227 * @n: the size of the destination buffer.
228 * @lock: pointer to the spinlock to use for locking.
99 * 229 *
100 * This function copies at most @len bytes from the FIFO into the 230 * This function copies at most @len bytes from the FIFO into the
101 * @buffer and returns the number of copied bytes. 231 * @to buffer and returns the number of copied bytes.
102 */ 232 */
103static inline unsigned int kfifo_get(struct kfifo *fifo, 233static inline __must_check unsigned int kfifo_out_locked(struct kfifo *fifo,
104 unsigned char *buffer, unsigned int len) 234 void *to, unsigned int n, spinlock_t *lock)
105{ 235{
106 unsigned long flags; 236 unsigned long flags;
107 unsigned int ret; 237 unsigned int ret;
108 238
109 spin_lock_irqsave(fifo->lock, flags); 239 spin_lock_irqsave(lock, flags);
240
241 ret = kfifo_out(fifo, to, n);
242
243 spin_unlock_irqrestore(lock, flags);
244
245 return ret;
246}
247
248extern void kfifo_skip(struct kfifo *fifo, unsigned int len);
249
250extern __must_check int kfifo_from_user(struct kfifo *fifo,
251 const void __user *from, unsigned int n, unsigned *lenout);
252
253extern __must_check int kfifo_to_user(struct kfifo *fifo,
254 void __user *to, unsigned int n, unsigned *lenout);
255
256/*
257 * __kfifo_add_out internal helper function for updating the out offset
258 */
259static inline void __kfifo_add_out(struct kfifo *fifo,
260 unsigned int off)
261{
262 smp_mb();
263 fifo->out += off;
264}
265
266/*
267 * __kfifo_add_in internal helper function for updating the in offset
268 */
269static inline void __kfifo_add_in(struct kfifo *fifo,
270 unsigned int off)
271{
272 smp_wmb();
273 fifo->in += off;
274}
110 275
111 ret = __kfifo_get(fifo, buffer, len); 276/*
277 * __kfifo_off internal helper function for calculating the index of a
278 * given offeset
279 */
280static inline unsigned int __kfifo_off(struct kfifo *fifo, unsigned int off)
281{
282 return off & (fifo->size - 1);
283}
112 284
113 /* 285/*
114 * optimization: if the FIFO is empty, set the indices to 0 286 * __kfifo_peek_n internal helper function for determinate the length of
115 * so we don't wrap the next time 287 * the next record in the fifo
116 */ 288 */
117 if (fifo->in == fifo->out) 289static inline unsigned int __kfifo_peek_n(struct kfifo *fifo,
118 fifo->in = fifo->out = 0; 290 unsigned int recsize)
291{
292#define __KFIFO_GET(fifo, off, shift) \
293 ((fifo)->buffer[__kfifo_off((fifo), (fifo)->out+(off))] << (shift))
294
295 unsigned int l;
296
297 l = __KFIFO_GET(fifo, 0, 0);
298
299 if (--recsize)
300 l |= __KFIFO_GET(fifo, 1, 8);
119 301
120 spin_unlock_irqrestore(fifo->lock, flags); 302 return l;
303#undef __KFIFO_GET
304}
305
306/*
307 * __kfifo_poke_n internal helper function for storing the length of
308 * the next record into the fifo
309 */
310static inline void __kfifo_poke_n(struct kfifo *fifo,
311 unsigned int recsize, unsigned int n)
312{
313#define __KFIFO_PUT(fifo, off, val, shift) \
314 ( \
315 (fifo)->buffer[__kfifo_off((fifo), (fifo)->in+(off))] = \
316 (unsigned char)((val) >> (shift)) \
317 )
121 318
319 __KFIFO_PUT(fifo, 0, n, 0);
320
321 if (--recsize)
322 __KFIFO_PUT(fifo, 1, n, 8);
323#undef __KFIFO_PUT
324}
325
326/*
327 * __kfifo_in_... internal functions for put date into the fifo
328 * do not call it directly, use kfifo_in_rec() instead
329 */
330extern unsigned int __kfifo_in_n(struct kfifo *fifo,
331 const void *from, unsigned int n, unsigned int recsize);
332
333extern unsigned int __kfifo_in_generic(struct kfifo *fifo,
334 const void *from, unsigned int n, unsigned int recsize);
335
336static inline unsigned int __kfifo_in_rec(struct kfifo *fifo,
337 const void *from, unsigned int n, unsigned int recsize)
338{
339 unsigned int ret;
340
341 ret = __kfifo_in_n(fifo, from, n, recsize);
342
343 if (likely(ret == 0)) {
344 if (recsize)
345 __kfifo_poke_n(fifo, recsize, n);
346 __kfifo_add_in(fifo, n + recsize);
347 }
122 return ret; 348 return ret;
123} 349}
124 350
125/** 351/**
126 * __kfifo_len - returns the number of bytes available in the FIFO, no locking version 352 * kfifo_in_rec - puts some record data into the FIFO
127 * @fifo: the fifo to be used. 353 * @fifo: the fifo to be used.
354 * @from: the data to be added.
355 * @n: the length of the data to be added.
356 * @recsize: size of record field
357 *
358 * This function copies @n bytes from the @from into the FIFO and returns
359 * the number of bytes which cannot be copied.
360 * A returned value greater than the @n value means that the record doesn't
361 * fit into the buffer.
362 *
363 * Note that with only one concurrent reader and one concurrent
364 * writer, you don't need extra locking to use these functions.
128 */ 365 */
129static inline unsigned int __kfifo_len(struct kfifo *fifo) 366static inline __must_check unsigned int kfifo_in_rec(struct kfifo *fifo,
367 void *from, unsigned int n, unsigned int recsize)
130{ 368{
131 return fifo->in - fifo->out; 369 if (!__builtin_constant_p(recsize))
370 return __kfifo_in_generic(fifo, from, n, recsize);
371 return __kfifo_in_rec(fifo, from, n, recsize);
372}
373
374/*
375 * __kfifo_out_... internal functions for get date from the fifo
376 * do not call it directly, use kfifo_out_rec() instead
377 */
378extern unsigned int __kfifo_out_n(struct kfifo *fifo,
379 void *to, unsigned int reclen, unsigned int recsize);
380
381extern unsigned int __kfifo_out_generic(struct kfifo *fifo,
382 void *to, unsigned int n,
383 unsigned int recsize, unsigned int *total);
384
385static inline unsigned int __kfifo_out_rec(struct kfifo *fifo,
386 void *to, unsigned int n, unsigned int recsize,
387 unsigned int *total)
388{
389 unsigned int l;
390
391 if (!recsize) {
392 l = n;
393 if (total)
394 *total = l;
395 } else {
396 l = __kfifo_peek_n(fifo, recsize);
397 if (total)
398 *total = l;
399 if (n < l)
400 return l;
401 }
402
403 return __kfifo_out_n(fifo, to, l, recsize);
132} 404}
133 405
134/** 406/**
135 * kfifo_len - returns the number of bytes available in the FIFO 407 * kfifo_out_rec - gets some record data from the FIFO
136 * @fifo: the fifo to be used. 408 * @fifo: the fifo to be used.
409 * @to: where the data must be copied.
410 * @n: the size of the destination buffer.
411 * @recsize: size of record field
412 * @total: pointer where the total number of to copied bytes should stored
413 *
414 * This function copies at most @n bytes from the FIFO to @to and returns the
415 * number of bytes which cannot be copied.
416 * A returned value greater than the @n value means that the record doesn't
417 * fit into the @to buffer.
418 *
419 * Note that with only one concurrent reader and one concurrent
420 * writer, you don't need extra locking to use these functions.
137 */ 421 */
138static inline unsigned int kfifo_len(struct kfifo *fifo) 422static inline __must_check unsigned int kfifo_out_rec(struct kfifo *fifo,
423 void *to, unsigned int n, unsigned int recsize,
424 unsigned int *total)
425
139{ 426{
140 unsigned long flags; 427 if (!__builtin_constant_p(recsize))
141 unsigned int ret; 428 return __kfifo_out_generic(fifo, to, n, recsize, total);
429 return __kfifo_out_rec(fifo, to, n, recsize, total);
430}
142 431
143 spin_lock_irqsave(fifo->lock, flags); 432/*
433 * __kfifo_from_user_... internal functions for transfer from user space into
434 * the fifo. do not call it directly, use kfifo_from_user_rec() instead
435 */
436extern unsigned int __kfifo_from_user_n(struct kfifo *fifo,
437 const void __user *from, unsigned int n, unsigned int recsize);
438
439extern unsigned int __kfifo_from_user_generic(struct kfifo *fifo,
440 const void __user *from, unsigned int n, unsigned int recsize);
144 441
145 ret = __kfifo_len(fifo); 442static inline unsigned int __kfifo_from_user_rec(struct kfifo *fifo,
443 const void __user *from, unsigned int n, unsigned int recsize)
444{
445 unsigned int ret;
146 446
147 spin_unlock_irqrestore(fifo->lock, flags); 447 ret = __kfifo_from_user_n(fifo, from, n, recsize);
148 448
449 if (likely(ret == 0)) {
450 if (recsize)
451 __kfifo_poke_n(fifo, recsize, n);
452 __kfifo_add_in(fifo, n + recsize);
453 }
149 return ret; 454 return ret;
150} 455}
151 456
457/**
458 * kfifo_from_user_rec - puts some data from user space into the FIFO
459 * @fifo: the fifo to be used.
460 * @from: pointer to the data to be added.
461 * @n: the length of the data to be added.
462 * @recsize: size of record field
463 *
464 * This function copies @n bytes from the @from into the
465 * FIFO and returns the number of bytes which cannot be copied.
466 *
467 * If the returned value is equal or less the @n value, the copy_from_user()
468 * functions has failed. Otherwise the record doesn't fit into the buffer.
469 *
470 * Note that with only one concurrent reader and one concurrent
471 * writer, you don't need extra locking to use these functions.
472 */
473static inline __must_check unsigned int kfifo_from_user_rec(struct kfifo *fifo,
474 const void __user *from, unsigned int n, unsigned int recsize)
475{
476 if (!__builtin_constant_p(recsize))
477 return __kfifo_from_user_generic(fifo, from, n, recsize);
478 return __kfifo_from_user_rec(fifo, from, n, recsize);
479}
480
481/*
482 * __kfifo_to_user_... internal functions for transfer fifo data into user space
483 * do not call it directly, use kfifo_to_user_rec() instead
484 */
485extern unsigned int __kfifo_to_user_n(struct kfifo *fifo,
486 void __user *to, unsigned int n, unsigned int reclen,
487 unsigned int recsize);
488
489extern unsigned int __kfifo_to_user_generic(struct kfifo *fifo,
490 void __user *to, unsigned int n, unsigned int recsize,
491 unsigned int *total);
492
493static inline unsigned int __kfifo_to_user_rec(struct kfifo *fifo,
494 void __user *to, unsigned int n,
495 unsigned int recsize, unsigned int *total)
496{
497 unsigned int l;
498
499 if (!recsize) {
500 l = n;
501 if (total)
502 *total = l;
503 } else {
504 l = __kfifo_peek_n(fifo, recsize);
505 if (total)
506 *total = l;
507 if (n < l)
508 return l;
509 }
510
511 return __kfifo_to_user_n(fifo, to, n, l, recsize);
512}
513
514/**
515 * kfifo_to_user_rec - gets data from the FIFO and write it to user space
516 * @fifo: the fifo to be used.
517 * @to: where the data must be copied.
518 * @n: the size of the destination buffer.
519 * @recsize: size of record field
520 * @total: pointer where the total number of to copied bytes should stored
521 *
522 * This function copies at most @n bytes from the FIFO to the @to.
523 * In case of an error, the function returns the number of bytes which cannot
524 * be copied.
525 * If the returned value is equal or less the @n value, the copy_to_user()
526 * functions has failed. Otherwise the record doesn't fit into the @to buffer.
527 *
528 * Note that with only one concurrent reader and one concurrent
529 * writer, you don't need extra locking to use these functions.
530 */
531static inline __must_check unsigned int kfifo_to_user_rec(struct kfifo *fifo,
532 void __user *to, unsigned int n, unsigned int recsize,
533 unsigned int *total)
534{
535 if (!__builtin_constant_p(recsize))
536 return __kfifo_to_user_generic(fifo, to, n, recsize, total);
537 return __kfifo_to_user_rec(fifo, to, n, recsize, total);
538}
539
540/*
541 * __kfifo_peek_... internal functions for peek into the next fifo record
542 * do not call it directly, use kfifo_peek_rec() instead
543 */
544extern unsigned int __kfifo_peek_generic(struct kfifo *fifo,
545 unsigned int recsize);
546
547/**
548 * kfifo_peek_rec - gets the size of the next FIFO record data
549 * @fifo: the fifo to be used.
550 * @recsize: size of record field
551 *
552 * This function returns the size of the next FIFO record in number of bytes
553 */
554static inline __must_check unsigned int kfifo_peek_rec(struct kfifo *fifo,
555 unsigned int recsize)
556{
557 if (!__builtin_constant_p(recsize))
558 return __kfifo_peek_generic(fifo, recsize);
559 if (!recsize)
560 return kfifo_len(fifo);
561 return __kfifo_peek_n(fifo, recsize);
562}
563
564/*
565 * __kfifo_skip_... internal functions for skip the next fifo record
566 * do not call it directly, use kfifo_skip_rec() instead
567 */
568extern void __kfifo_skip_generic(struct kfifo *fifo, unsigned int recsize);
569
570static inline void __kfifo_skip_rec(struct kfifo *fifo,
571 unsigned int recsize)
572{
573 unsigned int l;
574
575 if (recsize) {
576 l = __kfifo_peek_n(fifo, recsize);
577
578 if (l + recsize <= kfifo_len(fifo)) {
579 __kfifo_add_out(fifo, l + recsize);
580 return;
581 }
582 }
583 kfifo_reset_out(fifo);
584}
585
586/**
587 * kfifo_skip_rec - skip the next fifo out record
588 * @fifo: the fifo to be used.
589 * @recsize: size of record field
590 *
591 * This function skips the next FIFO record
592 */
593static inline void kfifo_skip_rec(struct kfifo *fifo,
594 unsigned int recsize)
595{
596 if (!__builtin_constant_p(recsize))
597 __kfifo_skip_generic(fifo, recsize);
598 else
599 __kfifo_skip_rec(fifo, recsize);
600}
601
602/**
603 * kfifo_avail_rec - returns the number of bytes available in a record FIFO
604 * @fifo: the fifo to be used.
605 * @recsize: size of record field
606 */
607static inline __must_check unsigned int kfifo_avail_rec(struct kfifo *fifo,
608 unsigned int recsize)
609{
610 unsigned int l = kfifo_size(fifo) - kfifo_len(fifo);
611
612 return (l > recsize) ? l - recsize : 0;
613}
614
152#endif 615#endif
diff --git a/include/linux/kgdb.h b/include/linux/kgdb.h
index 6adcc297e354..19ec41a183f5 100644
--- a/include/linux/kgdb.h
+++ b/include/linux/kgdb.h
@@ -29,8 +29,7 @@ struct pt_regs;
29 * 29 *
30 * On some architectures it is required to skip a breakpoint 30 * On some architectures it is required to skip a breakpoint
31 * exception when it occurs after a breakpoint has been removed. 31 * exception when it occurs after a breakpoint has been removed.
32 * This can be implemented in the architecture specific portion of 32 * This can be implemented in the architecture specific portion of kgdb.
33 * for kgdb.
34 */ 33 */
35extern int kgdb_skipexception(int exception, struct pt_regs *regs); 34extern int kgdb_skipexception(int exception, struct pt_regs *regs);
36 35
@@ -65,7 +64,7 @@ struct uart_port;
65/** 64/**
66 * kgdb_breakpoint - compiled in breakpoint 65 * kgdb_breakpoint - compiled in breakpoint
67 * 66 *
68 * This will be impelmented a static inline per architecture. This 67 * This will be implemented as a static inline per architecture. This
69 * function is called by the kgdb core to execute an architecture 68 * function is called by the kgdb core to execute an architecture
70 * specific trap to cause kgdb to enter the exception processing. 69 * specific trap to cause kgdb to enter the exception processing.
71 * 70 *
@@ -190,7 +189,7 @@ kgdb_arch_handle_exception(int vector, int signo, int err_code,
190 * @flags: Current IRQ state 189 * @flags: Current IRQ state
191 * 190 *
192 * On SMP systems, we need to get the attention of the other CPUs 191 * On SMP systems, we need to get the attention of the other CPUs
193 * and get them be in a known state. This should do what is needed 192 * and get them into a known state. This should do what is needed
194 * to get the other CPUs to call kgdb_wait(). Note that on some arches, 193 * to get the other CPUs to call kgdb_wait(). Note that on some arches,
195 * the NMI approach is not used for rounding up all the CPUs. For example, 194 * the NMI approach is not used for rounding up all the CPUs. For example,
196 * in case of MIPS, smp_call_function() is used to roundup CPUs. In 195 * in case of MIPS, smp_call_function() is used to roundup CPUs. In
diff --git a/include/linux/kmemcheck.h b/include/linux/kmemcheck.h
index e880d4cf9e22..08d7dc4ddf40 100644
--- a/include/linux/kmemcheck.h
+++ b/include/linux/kmemcheck.h
@@ -36,6 +36,56 @@ int kmemcheck_hide_addr(unsigned long address);
36 36
37bool kmemcheck_is_obj_initialized(unsigned long addr, size_t size); 37bool kmemcheck_is_obj_initialized(unsigned long addr, size_t size);
38 38
39/*
40 * Bitfield annotations
41 *
42 * How to use: If you have a struct using bitfields, for example
43 *
44 * struct a {
45 * int x:8, y:8;
46 * };
47 *
48 * then this should be rewritten as
49 *
50 * struct a {
51 * kmemcheck_bitfield_begin(flags);
52 * int x:8, y:8;
53 * kmemcheck_bitfield_end(flags);
54 * };
55 *
56 * Now the "flags_begin" and "flags_end" members may be used to refer to the
57 * beginning and end, respectively, of the bitfield (and things like
58 * &x.flags_begin is allowed). As soon as the struct is allocated, the bit-
59 * fields should be annotated:
60 *
61 * struct a *a = kmalloc(sizeof(struct a), GFP_KERNEL);
62 * kmemcheck_annotate_bitfield(a, flags);
63 */
64#define kmemcheck_bitfield_begin(name) \
65 int name##_begin[0];
66
67#define kmemcheck_bitfield_end(name) \
68 int name##_end[0];
69
70#define kmemcheck_annotate_bitfield(ptr, name) \
71 do { \
72 int _n; \
73 \
74 if (!ptr) \
75 break; \
76 \
77 _n = (long) &((ptr)->name##_end) \
78 - (long) &((ptr)->name##_begin); \
79 MAYBE_BUILD_BUG_ON(_n < 0); \
80 \
81 kmemcheck_mark_initialized(&((ptr)->name##_begin), _n); \
82 } while (0)
83
84#define kmemcheck_annotate_variable(var) \
85 do { \
86 kmemcheck_mark_initialized(&(var), sizeof(var)); \
87 } while (0) \
88
39#else 89#else
40#define kmemcheck_enabled 0 90#define kmemcheck_enabled 0
41 91
@@ -106,60 +156,16 @@ static inline bool kmemcheck_is_obj_initialized(unsigned long addr, size_t size)
106 return true; 156 return true;
107} 157}
108 158
109#endif /* CONFIG_KMEMCHECK */ 159#define kmemcheck_bitfield_begin(name)
110 160#define kmemcheck_bitfield_end(name)
111/* 161#define kmemcheck_annotate_bitfield(ptr, name) \
112 * Bitfield annotations 162 do { \
113 * 163 } while (0)
114 * How to use: If you have a struct using bitfields, for example
115 *
116 * struct a {
117 * int x:8, y:8;
118 * };
119 *
120 * then this should be rewritten as
121 *
122 * struct a {
123 * kmemcheck_bitfield_begin(flags);
124 * int x:8, y:8;
125 * kmemcheck_bitfield_end(flags);
126 * };
127 *
128 * Now the "flags_begin" and "flags_end" members may be used to refer to the
129 * beginning and end, respectively, of the bitfield (and things like
130 * &x.flags_begin is allowed). As soon as the struct is allocated, the bit-
131 * fields should be annotated:
132 *
133 * struct a *a = kmalloc(sizeof(struct a), GFP_KERNEL);
134 * kmemcheck_annotate_bitfield(a, flags);
135 *
136 * Note: We provide the same definitions for both kmemcheck and non-
137 * kmemcheck kernels. This makes it harder to introduce accidental errors. It
138 * is also allowed to pass NULL pointers to kmemcheck_annotate_bitfield().
139 */
140#define kmemcheck_bitfield_begin(name) \
141 int name##_begin[0];
142
143#define kmemcheck_bitfield_end(name) \
144 int name##_end[0];
145 164
146#define kmemcheck_annotate_bitfield(ptr, name) \ 165#define kmemcheck_annotate_variable(var) \
147 do { \ 166 do { \
148 int _n; \
149 \
150 if (!ptr) \
151 break; \
152 \
153 _n = (long) &((ptr)->name##_end) \
154 - (long) &((ptr)->name##_begin); \
155 MAYBE_BUILD_BUG_ON(_n < 0); \
156 \
157 kmemcheck_mark_initialized(&((ptr)->name##_begin), _n); \
158 } while (0) 167 } while (0)
159 168
160#define kmemcheck_annotate_variable(var) \ 169#endif /* CONFIG_KMEMCHECK */
161 do { \
162 kmemcheck_mark_initialized(&(var), sizeof(var)); \
163 } while (0) \
164 170
165#endif /* LINUX_KMEMCHECK_H */ 171#endif /* LINUX_KMEMCHECK_H */
diff --git a/include/linux/kmemleak.h b/include/linux/kmemleak.h
index 3c7497d46ee9..99d9a6766f7e 100644
--- a/include/linux/kmemleak.h
+++ b/include/linux/kmemleak.h
@@ -32,8 +32,7 @@ extern void kmemleak_padding(const void *ptr, unsigned long offset,
32 size_t size) __ref; 32 size_t size) __ref;
33extern void kmemleak_not_leak(const void *ptr) __ref; 33extern void kmemleak_not_leak(const void *ptr) __ref;
34extern void kmemleak_ignore(const void *ptr) __ref; 34extern void kmemleak_ignore(const void *ptr) __ref;
35extern void kmemleak_scan_area(const void *ptr, unsigned long offset, 35extern void kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp) __ref;
36 size_t length, gfp_t gfp) __ref;
37extern void kmemleak_no_scan(const void *ptr) __ref; 36extern void kmemleak_no_scan(const void *ptr) __ref;
38 37
39static inline void kmemleak_alloc_recursive(const void *ptr, size_t size, 38static inline void kmemleak_alloc_recursive(const void *ptr, size_t size,
@@ -84,8 +83,7 @@ static inline void kmemleak_not_leak(const void *ptr)
84static inline void kmemleak_ignore(const void *ptr) 83static inline void kmemleak_ignore(const void *ptr)
85{ 84{
86} 85}
87static inline void kmemleak_scan_area(const void *ptr, unsigned long offset, 86static inline void kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp)
88 size_t length, gfp_t gfp)
89{ 87{
90} 88}
91static inline void kmemleak_erase(void **ptr) 89static inline void kmemleak_erase(void **ptr)
diff --git a/include/linux/kmod.h b/include/linux/kmod.h
index 384ca8bbf1ac..facb27fe7de0 100644
--- a/include/linux/kmod.h
+++ b/include/linux/kmod.h
@@ -27,6 +27,7 @@
27#define KMOD_PATH_LEN 256 27#define KMOD_PATH_LEN 256
28 28
29#ifdef CONFIG_MODULES 29#ifdef CONFIG_MODULES
30extern char modprobe_path[]; /* for sysctl */
30/* modprobe exit status on success, -ve on error. Return value 31/* modprobe exit status on success, -ve on error. Return value
31 * usually useless though. */ 32 * usually useless though. */
32extern int __request_module(bool wait, const char *name, ...) \ 33extern int __request_module(bool wait, const char *name, ...) \
diff --git a/include/linux/kmsg_dump.h b/include/linux/kmsg_dump.h
new file mode 100644
index 000000000000..24b44145a886
--- /dev/null
+++ b/include/linux/kmsg_dump.h
@@ -0,0 +1,61 @@
1/*
2 * linux/include/kmsg_dump.h
3 *
4 * Copyright (C) 2009 Net Insight AB
5 *
6 * Author: Simon Kagstrom <simon.kagstrom@netinsight.net>
7 *
8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file COPYING in the main directory of this archive
10 * for more details.
11 */
12#ifndef _LINUX_KMSG_DUMP_H
13#define _LINUX_KMSG_DUMP_H
14
15#include <linux/list.h>
16
17enum kmsg_dump_reason {
18 KMSG_DUMP_OOPS,
19 KMSG_DUMP_PANIC,
20 KMSG_DUMP_KEXEC,
21};
22
23/**
24 * struct kmsg_dumper - kernel crash message dumper structure
25 * @dump: The callback which gets called on crashes. The buffer is passed
26 * as two sections, where s1 (length l1) contains the older
27 * messages and s2 (length l2) contains the newer.
28 * @list: Entry in the dumper list (private)
29 * @registered: Flag that specifies if this is already registered
30 */
31struct kmsg_dumper {
32 void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason,
33 const char *s1, unsigned long l1,
34 const char *s2, unsigned long l2);
35 struct list_head list;
36 int registered;
37};
38
39#ifdef CONFIG_PRINTK
40void kmsg_dump(enum kmsg_dump_reason reason);
41
42int kmsg_dump_register(struct kmsg_dumper *dumper);
43
44int kmsg_dump_unregister(struct kmsg_dumper *dumper);
45#else
46static inline void kmsg_dump(enum kmsg_dump_reason reason)
47{
48}
49
50static inline int kmsg_dump_register(struct kmsg_dumper *dumper)
51{
52 return -EINVAL;
53}
54
55static inline int kmsg_dump_unregister(struct kmsg_dumper *dumper)
56{
57 return -EINVAL;
58}
59#endif
60
61#endif /* _LINUX_KMSG_DUMP_H */
diff --git a/include/linux/kobject.h b/include/linux/kobject.h
index 58ae8e00fcdd..3950d3c2850d 100644
--- a/include/linux/kobject.h
+++ b/include/linux/kobject.h
@@ -106,7 +106,7 @@ extern char *kobject_get_path(struct kobject *kobj, gfp_t flag);
106 106
107struct kobj_type { 107struct kobj_type {
108 void (*release)(struct kobject *kobj); 108 void (*release)(struct kobject *kobj);
109 struct sysfs_ops *sysfs_ops; 109 const struct sysfs_ops *sysfs_ops;
110 struct attribute **default_attrs; 110 struct attribute **default_attrs;
111}; 111};
112 112
@@ -118,9 +118,9 @@ struct kobj_uevent_env {
118}; 118};
119 119
120struct kset_uevent_ops { 120struct kset_uevent_ops {
121 int (*filter)(struct kset *kset, struct kobject *kobj); 121 int (* const filter)(struct kset *kset, struct kobject *kobj);
122 const char *(*name)(struct kset *kset, struct kobject *kobj); 122 const char *(* const name)(struct kset *kset, struct kobject *kobj);
123 int (*uevent)(struct kset *kset, struct kobject *kobj, 123 int (* const uevent)(struct kset *kset, struct kobject *kobj,
124 struct kobj_uevent_env *env); 124 struct kobj_uevent_env *env);
125}; 125};
126 126
@@ -132,7 +132,7 @@ struct kobj_attribute {
132 const char *buf, size_t count); 132 const char *buf, size_t count);
133}; 133};
134 134
135extern struct sysfs_ops kobj_sysfs_ops; 135extern const struct sysfs_ops kobj_sysfs_ops;
136 136
137/** 137/**
138 * struct kset - a set of kobjects of a specific type, belonging to a specific subsystem. 138 * struct kset - a set of kobjects of a specific type, belonging to a specific subsystem.
@@ -155,14 +155,14 @@ struct kset {
155 struct list_head list; 155 struct list_head list;
156 spinlock_t list_lock; 156 spinlock_t list_lock;
157 struct kobject kobj; 157 struct kobject kobj;
158 struct kset_uevent_ops *uevent_ops; 158 const struct kset_uevent_ops *uevent_ops;
159}; 159};
160 160
161extern void kset_init(struct kset *kset); 161extern void kset_init(struct kset *kset);
162extern int __must_check kset_register(struct kset *kset); 162extern int __must_check kset_register(struct kset *kset);
163extern void kset_unregister(struct kset *kset); 163extern void kset_unregister(struct kset *kset);
164extern struct kset * __must_check kset_create_and_add(const char *name, 164extern struct kset * __must_check kset_create_and_add(const char *name,
165 struct kset_uevent_ops *u, 165 const struct kset_uevent_ops *u,
166 struct kobject *parent_kobj); 166 struct kobject *parent_kobj);
167 167
168static inline struct kset *to_kset(struct kobject *kobj) 168static inline struct kset *to_kset(struct kobject *kobj)
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
index 3a46b7b7abb2..e7d1b2e0070d 100644
--- a/include/linux/kprobes.h
+++ b/include/linux/kprobes.h
@@ -122,6 +122,11 @@ struct kprobe {
122/* Kprobe status flags */ 122/* Kprobe status flags */
123#define KPROBE_FLAG_GONE 1 /* breakpoint has already gone */ 123#define KPROBE_FLAG_GONE 1 /* breakpoint has already gone */
124#define KPROBE_FLAG_DISABLED 2 /* probe is temporarily disabled */ 124#define KPROBE_FLAG_DISABLED 2 /* probe is temporarily disabled */
125#define KPROBE_FLAG_OPTIMIZED 4 /*
126 * probe is really optimized.
127 * NOTE:
128 * this flag is only for optimized_kprobe.
129 */
125 130
126/* Has this kprobe gone ? */ 131/* Has this kprobe gone ? */
127static inline int kprobe_gone(struct kprobe *p) 132static inline int kprobe_gone(struct kprobe *p)
@@ -134,6 +139,12 @@ static inline int kprobe_disabled(struct kprobe *p)
134{ 139{
135 return p->flags & (KPROBE_FLAG_DISABLED | KPROBE_FLAG_GONE); 140 return p->flags & (KPROBE_FLAG_DISABLED | KPROBE_FLAG_GONE);
136} 141}
142
143/* Is this kprobe really running optimized path ? */
144static inline int kprobe_optimized(struct kprobe *p)
145{
146 return p->flags & KPROBE_FLAG_OPTIMIZED;
147}
137/* 148/*
138 * Special probe type that uses setjmp-longjmp type tricks to resume 149 * Special probe type that uses setjmp-longjmp type tricks to resume
139 * execution at a specified entry with a matching prototype corresponding 150 * execution at a specified entry with a matching prototype corresponding
@@ -249,6 +260,39 @@ extern kprobe_opcode_t *get_insn_slot(void);
249extern void free_insn_slot(kprobe_opcode_t *slot, int dirty); 260extern void free_insn_slot(kprobe_opcode_t *slot, int dirty);
250extern void kprobes_inc_nmissed_count(struct kprobe *p); 261extern void kprobes_inc_nmissed_count(struct kprobe *p);
251 262
263#ifdef CONFIG_OPTPROBES
264/*
265 * Internal structure for direct jump optimized probe
266 */
267struct optimized_kprobe {
268 struct kprobe kp;
269 struct list_head list; /* list for optimizing queue */
270 struct arch_optimized_insn optinsn;
271};
272
273/* Architecture dependent functions for direct jump optimization */
274extern int arch_prepared_optinsn(struct arch_optimized_insn *optinsn);
275extern int arch_check_optimized_kprobe(struct optimized_kprobe *op);
276extern int arch_prepare_optimized_kprobe(struct optimized_kprobe *op);
277extern void arch_remove_optimized_kprobe(struct optimized_kprobe *op);
278extern int arch_optimize_kprobe(struct optimized_kprobe *op);
279extern void arch_unoptimize_kprobe(struct optimized_kprobe *op);
280extern kprobe_opcode_t *get_optinsn_slot(void);
281extern void free_optinsn_slot(kprobe_opcode_t *slot, int dirty);
282extern int arch_within_optimized_kprobe(struct optimized_kprobe *op,
283 unsigned long addr);
284
285extern void opt_pre_handler(struct kprobe *p, struct pt_regs *regs);
286
287#ifdef CONFIG_SYSCTL
288extern int sysctl_kprobes_optimization;
289extern int proc_kprobes_optimization_handler(struct ctl_table *table,
290 int write, void __user *buffer,
291 size_t *length, loff_t *ppos);
292#endif
293
294#endif /* CONFIG_OPTPROBES */
295
252/* Get the kprobe at this addr (if any) - called with preemption disabled */ 296/* Get the kprobe at this addr (if any) - called with preemption disabled */
253struct kprobe *get_kprobe(void *addr); 297struct kprobe *get_kprobe(void *addr);
254void kretprobe_hash_lock(struct task_struct *tsk, 298void kretprobe_hash_lock(struct task_struct *tsk,
@@ -296,6 +340,8 @@ void recycle_rp_inst(struct kretprobe_instance *ri, struct hlist_head *head);
296int disable_kprobe(struct kprobe *kp); 340int disable_kprobe(struct kprobe *kp);
297int enable_kprobe(struct kprobe *kp); 341int enable_kprobe(struct kprobe *kp);
298 342
343void dump_kprobe(struct kprobe *kp);
344
299#else /* !CONFIG_KPROBES: */ 345#else /* !CONFIG_KPROBES: */
300 346
301static inline int kprobes_built_in(void) 347static inline int kprobes_built_in(void)
diff --git a/include/linux/ksm.h b/include/linux/ksm.h
index a485c14ecd5d..43bdab769fc3 100644
--- a/include/linux/ksm.h
+++ b/include/linux/ksm.h
@@ -9,8 +9,12 @@
9 9
10#include <linux/bitops.h> 10#include <linux/bitops.h>
11#include <linux/mm.h> 11#include <linux/mm.h>
12#include <linux/pagemap.h>
13#include <linux/rmap.h>
12#include <linux/sched.h> 14#include <linux/sched.h>
13#include <linux/vmstat.h> 15
16struct stable_node;
17struct mem_cgroup;
14 18
15#ifdef CONFIG_KSM 19#ifdef CONFIG_KSM
16int ksm_madvise(struct vm_area_struct *vma, unsigned long start, 20int ksm_madvise(struct vm_area_struct *vma, unsigned long start,
@@ -34,46 +38,110 @@ static inline void ksm_exit(struct mm_struct *mm)
34/* 38/*
35 * A KSM page is one of those write-protected "shared pages" or "merged pages" 39 * A KSM page is one of those write-protected "shared pages" or "merged pages"
36 * which KSM maps into multiple mms, wherever identical anonymous page content 40 * which KSM maps into multiple mms, wherever identical anonymous page content
37 * is found in VM_MERGEABLE vmas. It's a PageAnon page, with NULL anon_vma. 41 * is found in VM_MERGEABLE vmas. It's a PageAnon page, pointing not to any
42 * anon_vma, but to that page's node of the stable tree.
38 */ 43 */
39static inline int PageKsm(struct page *page) 44static inline int PageKsm(struct page *page)
40{ 45{
41 return ((unsigned long)page->mapping == PAGE_MAPPING_ANON); 46 return ((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) ==
47 (PAGE_MAPPING_ANON | PAGE_MAPPING_KSM);
48}
49
50static inline struct stable_node *page_stable_node(struct page *page)
51{
52 return PageKsm(page) ? page_rmapping(page) : NULL;
53}
54
55static inline void set_page_stable_node(struct page *page,
56 struct stable_node *stable_node)
57{
58 page->mapping = (void *)stable_node +
59 (PAGE_MAPPING_ANON | PAGE_MAPPING_KSM);
42} 60}
43 61
44/* 62/*
45 * But we have to avoid the checking which page_add_anon_rmap() performs. 63 * When do_swap_page() first faults in from swap what used to be a KSM page,
64 * no problem, it will be assigned to this vma's anon_vma; but thereafter,
65 * it might be faulted into a different anon_vma (or perhaps to a different
66 * offset in the same anon_vma). do_swap_page() cannot do all the locking
67 * needed to reconstitute a cross-anon_vma KSM page: for now it has to make
68 * a copy, and leave remerging the pages to a later pass of ksmd.
69 *
70 * We'd like to make this conditional on vma->vm_flags & VM_MERGEABLE,
71 * but what if the vma was unmerged while the page was swapped out?
46 */ 72 */
47static inline void page_add_ksm_rmap(struct page *page) 73struct page *ksm_does_need_to_copy(struct page *page,
74 struct vm_area_struct *vma, unsigned long address);
75static inline struct page *ksm_might_need_to_copy(struct page *page,
76 struct vm_area_struct *vma, unsigned long address)
48{ 77{
49 if (atomic_inc_and_test(&page->_mapcount)) { 78 struct anon_vma *anon_vma = page_anon_vma(page);
50 page->mapping = (void *) PAGE_MAPPING_ANON; 79
51 __inc_zone_page_state(page, NR_ANON_PAGES); 80 if (!anon_vma ||
52 } 81 (anon_vma == vma->anon_vma &&
82 page->index == linear_page_index(vma, address)))
83 return page;
84
85 return ksm_does_need_to_copy(page, vma, address);
53} 86}
87
88int page_referenced_ksm(struct page *page,
89 struct mem_cgroup *memcg, unsigned long *vm_flags);
90int try_to_unmap_ksm(struct page *page, enum ttu_flags flags);
91int rmap_walk_ksm(struct page *page, int (*rmap_one)(struct page *,
92 struct vm_area_struct *, unsigned long, void *), void *arg);
93void ksm_migrate_page(struct page *newpage, struct page *oldpage);
94
54#else /* !CONFIG_KSM */ 95#else /* !CONFIG_KSM */
55 96
97static inline int ksm_fork(struct mm_struct *mm, struct mm_struct *oldmm)
98{
99 return 0;
100}
101
102static inline void ksm_exit(struct mm_struct *mm)
103{
104}
105
106static inline int PageKsm(struct page *page)
107{
108 return 0;
109}
110
111#ifdef CONFIG_MMU
56static inline int ksm_madvise(struct vm_area_struct *vma, unsigned long start, 112static inline int ksm_madvise(struct vm_area_struct *vma, unsigned long start,
57 unsigned long end, int advice, unsigned long *vm_flags) 113 unsigned long end, int advice, unsigned long *vm_flags)
58{ 114{
59 return 0; 115 return 0;
60} 116}
61 117
62static inline int ksm_fork(struct mm_struct *mm, struct mm_struct *oldmm) 118static inline struct page *ksm_might_need_to_copy(struct page *page,
119 struct vm_area_struct *vma, unsigned long address)
120{
121 return page;
122}
123
124static inline int page_referenced_ksm(struct page *page,
125 struct mem_cgroup *memcg, unsigned long *vm_flags)
63{ 126{
64 return 0; 127 return 0;
65} 128}
66 129
67static inline void ksm_exit(struct mm_struct *mm) 130static inline int try_to_unmap_ksm(struct page *page, enum ttu_flags flags)
68{ 131{
132 return 0;
69} 133}
70 134
71static inline int PageKsm(struct page *page) 135static inline int rmap_walk_ksm(struct page *page, int (*rmap_one)(struct page*,
136 struct vm_area_struct *, unsigned long, void *), void *arg)
72{ 137{
73 return 0; 138 return 0;
74} 139}
75 140
76/* No stub required for page_add_ksm_rmap(page) */ 141static inline void ksm_migrate_page(struct page *newpage, struct page *oldpage)
142{
143}
144#endif /* CONFIG_MMU */
77#endif /* !CONFIG_KSM */ 145#endif /* !CONFIG_KSM */
78 146
79#endif 147#endif /* __LINUX_KSM_H */
diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index f8f8900fc5ec..60df9c84ecae 100644
--- a/include/linux/kvm.h
+++ b/include/linux/kvm.h
@@ -14,12 +14,76 @@
14 14
15#define KVM_API_VERSION 12 15#define KVM_API_VERSION 12
16 16
17/* for KVM_TRACE_ENABLE, deprecated */ 17/* *** Deprecated interfaces *** */
18
19#define KVM_TRC_SHIFT 16
20
21#define KVM_TRC_ENTRYEXIT (1 << KVM_TRC_SHIFT)
22#define KVM_TRC_HANDLER (1 << (KVM_TRC_SHIFT + 1))
23
24#define KVM_TRC_VMENTRY (KVM_TRC_ENTRYEXIT + 0x01)
25#define KVM_TRC_VMEXIT (KVM_TRC_ENTRYEXIT + 0x02)
26#define KVM_TRC_PAGE_FAULT (KVM_TRC_HANDLER + 0x01)
27
28#define KVM_TRC_HEAD_SIZE 12
29#define KVM_TRC_CYCLE_SIZE 8
30#define KVM_TRC_EXTRA_MAX 7
31
32#define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02)
33#define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03)
34#define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04)
35#define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05)
36#define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06)
37#define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07)
38#define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08)
39#define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09)
40#define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A)
41#define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B)
42#define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C)
43#define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D)
44#define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E)
45#define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F)
46#define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10)
47#define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11)
48#define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12)
49#define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13)
50#define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14)
51#define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15)
52#define KVM_TRC_GTLB_WRITE (KVM_TRC_HANDLER + 0x16)
53#define KVM_TRC_STLB_WRITE (KVM_TRC_HANDLER + 0x17)
54#define KVM_TRC_STLB_INVAL (KVM_TRC_HANDLER + 0x18)
55#define KVM_TRC_PPC_INSTR (KVM_TRC_HANDLER + 0x19)
56
18struct kvm_user_trace_setup { 57struct kvm_user_trace_setup {
19 __u32 buf_size; /* sub_buffer size of each per-cpu */ 58 __u32 buf_size;
20 __u32 buf_nr; /* the number of sub_buffers of each per-cpu */ 59 __u32 buf_nr;
60};
61
62#define __KVM_DEPRECATED_MAIN_W_0x06 \
63 _IOW(KVMIO, 0x06, struct kvm_user_trace_setup)
64#define __KVM_DEPRECATED_MAIN_0x07 _IO(KVMIO, 0x07)
65#define __KVM_DEPRECATED_MAIN_0x08 _IO(KVMIO, 0x08)
66
67#define __KVM_DEPRECATED_VM_R_0x70 _IOR(KVMIO, 0x70, struct kvm_assigned_irq)
68
69struct kvm_breakpoint {
70 __u32 enabled;
71 __u32 padding;
72 __u64 address;
73};
74
75struct kvm_debug_guest {
76 __u32 enabled;
77 __u32 pad;
78 struct kvm_breakpoint breakpoints[4];
79 __u32 singlestep;
21}; 80};
22 81
82#define __KVM_DEPRECATED_VCPU_W_0x87 _IOW(KVMIO, 0x87, struct kvm_debug_guest)
83
84/* *** End of deprecated interfaces *** */
85
86
23/* for KVM_CREATE_MEMORY_REGION */ 87/* for KVM_CREATE_MEMORY_REGION */
24struct kvm_memory_region { 88struct kvm_memory_region {
25 __u32 slot; 89 __u32 slot;
@@ -39,7 +103,7 @@ struct kvm_userspace_memory_region {
39 103
40/* for kvm_memory_region::flags */ 104/* for kvm_memory_region::flags */
41#define KVM_MEM_LOG_DIRTY_PAGES 1UL 105#define KVM_MEM_LOG_DIRTY_PAGES 1UL
42 106#define KVM_MEMSLOT_INVALID (1UL << 1)
43 107
44/* for KVM_IRQ_LINE */ 108/* for KVM_IRQ_LINE */
45struct kvm_irq_level { 109struct kvm_irq_level {
@@ -99,6 +163,7 @@ struct kvm_pit_config {
99 163
100/* For KVM_EXIT_INTERNAL_ERROR */ 164/* For KVM_EXIT_INTERNAL_ERROR */
101#define KVM_INTERNAL_ERROR_EMULATION 1 165#define KVM_INTERNAL_ERROR_EMULATION 1
166#define KVM_INTERNAL_ERROR_SIMUL_EX 2
102 167
103/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ 168/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
104struct kvm_run { 169struct kvm_run {
@@ -116,6 +181,11 @@ struct kvm_run {
116 __u64 cr8; 181 __u64 cr8;
117 __u64 apic_base; 182 __u64 apic_base;
118 183
184#ifdef __KVM_S390
185 /* the processor status word for s390 */
186 __u64 psw_mask; /* psw upper half */
187 __u64 psw_addr; /* psw lower half */
188#endif
119 union { 189 union {
120 /* KVM_EXIT_UNKNOWN */ 190 /* KVM_EXIT_UNKNOWN */
121 struct { 191 struct {
@@ -167,8 +237,6 @@ struct kvm_run {
167 /* KVM_EXIT_S390_SIEIC */ 237 /* KVM_EXIT_S390_SIEIC */
168 struct { 238 struct {
169 __u8 icptcode; 239 __u8 icptcode;
170 __u64 mask; /* psw upper half */
171 __u64 addr; /* psw lower half */
172 __u16 ipa; 240 __u16 ipa;
173 __u32 ipb; 241 __u32 ipb;
174 } s390_sieic; 242 } s390_sieic;
@@ -187,6 +255,9 @@ struct kvm_run {
187 } dcr; 255 } dcr;
188 struct { 256 struct {
189 __u32 suberror; 257 __u32 suberror;
258 /* Available with KVM_CAP_INTERNAL_ERROR_DATA: */
259 __u32 ndata;
260 __u64 data[16];
190 } internal; 261 } internal;
191 /* Fix the size of the union. */ 262 /* Fix the size of the union. */
192 char padding[256]; 263 char padding[256];
@@ -329,24 +400,6 @@ struct kvm_ioeventfd {
329 __u8 pad[36]; 400 __u8 pad[36];
330}; 401};
331 402
332#define KVM_TRC_SHIFT 16
333/*
334 * kvm trace categories
335 */
336#define KVM_TRC_ENTRYEXIT (1 << KVM_TRC_SHIFT)
337#define KVM_TRC_HANDLER (1 << (KVM_TRC_SHIFT + 1)) /* only 12 bits */
338
339/*
340 * kvm trace action
341 */
342#define KVM_TRC_VMENTRY (KVM_TRC_ENTRYEXIT + 0x01)
343#define KVM_TRC_VMEXIT (KVM_TRC_ENTRYEXIT + 0x02)
344#define KVM_TRC_PAGE_FAULT (KVM_TRC_HANDLER + 0x01)
345
346#define KVM_TRC_HEAD_SIZE 12
347#define KVM_TRC_CYCLE_SIZE 8
348#define KVM_TRC_EXTRA_MAX 7
349
350#define KVMIO 0xAE 403#define KVMIO 0xAE
351 404
352/* 405/*
@@ -367,12 +420,10 @@ struct kvm_ioeventfd {
367 */ 420 */
368#define KVM_GET_VCPU_MMAP_SIZE _IO(KVMIO, 0x04) /* in bytes */ 421#define KVM_GET_VCPU_MMAP_SIZE _IO(KVMIO, 0x04) /* in bytes */
369#define KVM_GET_SUPPORTED_CPUID _IOWR(KVMIO, 0x05, struct kvm_cpuid2) 422#define KVM_GET_SUPPORTED_CPUID _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
370/* 423#define KVM_TRACE_ENABLE __KVM_DEPRECATED_MAIN_W_0x06
371 * ioctls for kvm trace 424#define KVM_TRACE_PAUSE __KVM_DEPRECATED_MAIN_0x07
372 */ 425#define KVM_TRACE_DISABLE __KVM_DEPRECATED_MAIN_0x08
373#define KVM_TRACE_ENABLE _IOW(KVMIO, 0x06, struct kvm_user_trace_setup) 426
374#define KVM_TRACE_PAUSE _IO(KVMIO, 0x07)
375#define KVM_TRACE_DISABLE _IO(KVMIO, 0x08)
376/* 427/*
377 * Extension capability list. 428 * Extension capability list.
378 */ 429 */
@@ -436,6 +487,21 @@ struct kvm_ioeventfd {
436#endif 487#endif
437#define KVM_CAP_IOEVENTFD 36 488#define KVM_CAP_IOEVENTFD 36
438#define KVM_CAP_SET_IDENTITY_MAP_ADDR 37 489#define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
490#ifdef __KVM_HAVE_XEN_HVM
491#define KVM_CAP_XEN_HVM 38
492#endif
493#define KVM_CAP_ADJUST_CLOCK 39
494#define KVM_CAP_INTERNAL_ERROR_DATA 40
495#ifdef __KVM_HAVE_VCPU_EVENTS
496#define KVM_CAP_VCPU_EVENTS 41
497#endif
498#define KVM_CAP_S390_PSW 42
499#define KVM_CAP_PPC_SEGSTATE 43
500#define KVM_CAP_HYPERV 44
501#define KVM_CAP_HYPERV_VAPIC 45
502#define KVM_CAP_HYPERV_SPIN 46
503#define KVM_CAP_PCI_SEGMENT 47
504#define KVM_CAP_X86_ROBUST_SINGLESTEP 51
439 505
440#ifdef KVM_CAP_IRQ_ROUTING 506#ifdef KVM_CAP_IRQ_ROUTING
441 507
@@ -488,6 +554,18 @@ struct kvm_x86_mce {
488}; 554};
489#endif 555#endif
490 556
557#ifdef KVM_CAP_XEN_HVM
558struct kvm_xen_hvm_config {
559 __u32 flags;
560 __u32 msr;
561 __u64 blob_addr_32;
562 __u64 blob_addr_64;
563 __u8 blob_size_32;
564 __u8 blob_size_64;
565 __u8 pad2[30];
566};
567#endif
568
491#define KVM_IRQFD_FLAG_DEASSIGN (1 << 0) 569#define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)
492 570
493struct kvm_irqfd { 571struct kvm_irqfd {
@@ -497,55 +575,66 @@ struct kvm_irqfd {
497 __u8 pad[20]; 575 __u8 pad[20];
498}; 576};
499 577
578struct kvm_clock_data {
579 __u64 clock;
580 __u32 flags;
581 __u32 pad[9];
582};
583
500/* 584/*
501 * ioctls for VM fds 585 * ioctls for VM fds
502 */ 586 */
503#define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region) 587#define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region)
504/* 588/*
505 * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns 589 * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
506 * a vcpu fd. 590 * a vcpu fd.
507 */ 591 */
508#define KVM_CREATE_VCPU _IO(KVMIO, 0x41) 592#define KVM_CREATE_VCPU _IO(KVMIO, 0x41)
509#define KVM_GET_DIRTY_LOG _IOW(KVMIO, 0x42, struct kvm_dirty_log) 593#define KVM_GET_DIRTY_LOG _IOW(KVMIO, 0x42, struct kvm_dirty_log)
510#define KVM_SET_MEMORY_ALIAS _IOW(KVMIO, 0x43, struct kvm_memory_alias) 594#define KVM_SET_MEMORY_ALIAS _IOW(KVMIO, 0x43, struct kvm_memory_alias)
511#define KVM_SET_NR_MMU_PAGES _IO(KVMIO, 0x44) 595#define KVM_SET_NR_MMU_PAGES _IO(KVMIO, 0x44)
512#define KVM_GET_NR_MMU_PAGES _IO(KVMIO, 0x45) 596#define KVM_GET_NR_MMU_PAGES _IO(KVMIO, 0x45)
513#define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46,\ 597#define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \
514 struct kvm_userspace_memory_region) 598 struct kvm_userspace_memory_region)
515#define KVM_SET_TSS_ADDR _IO(KVMIO, 0x47) 599#define KVM_SET_TSS_ADDR _IO(KVMIO, 0x47)
516#define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO, 0x48, __u64) 600#define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO, 0x48, __u64)
517/* Device model IOC */ 601/* Device model IOC */
518#define KVM_CREATE_IRQCHIP _IO(KVMIO, 0x60) 602#define KVM_CREATE_IRQCHIP _IO(KVMIO, 0x60)
519#define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level) 603#define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level)
520#define KVM_GET_IRQCHIP _IOWR(KVMIO, 0x62, struct kvm_irqchip) 604#define KVM_GET_IRQCHIP _IOWR(KVMIO, 0x62, struct kvm_irqchip)
521#define KVM_SET_IRQCHIP _IOR(KVMIO, 0x63, struct kvm_irqchip) 605#define KVM_SET_IRQCHIP _IOR(KVMIO, 0x63, struct kvm_irqchip)
522#define KVM_CREATE_PIT _IO(KVMIO, 0x64) 606#define KVM_CREATE_PIT _IO(KVMIO, 0x64)
523#define KVM_GET_PIT _IOWR(KVMIO, 0x65, struct kvm_pit_state) 607#define KVM_GET_PIT _IOWR(KVMIO, 0x65, struct kvm_pit_state)
524#define KVM_SET_PIT _IOR(KVMIO, 0x66, struct kvm_pit_state) 608#define KVM_SET_PIT _IOR(KVMIO, 0x66, struct kvm_pit_state)
525#define KVM_IRQ_LINE_STATUS _IOWR(KVMIO, 0x67, struct kvm_irq_level) 609#define KVM_IRQ_LINE_STATUS _IOWR(KVMIO, 0x67, struct kvm_irq_level)
526#define KVM_REGISTER_COALESCED_MMIO \ 610#define KVM_REGISTER_COALESCED_MMIO \
527 _IOW(KVMIO, 0x67, struct kvm_coalesced_mmio_zone) 611 _IOW(KVMIO, 0x67, struct kvm_coalesced_mmio_zone)
528#define KVM_UNREGISTER_COALESCED_MMIO \ 612#define KVM_UNREGISTER_COALESCED_MMIO \
529 _IOW(KVMIO, 0x68, struct kvm_coalesced_mmio_zone) 613 _IOW(KVMIO, 0x68, struct kvm_coalesced_mmio_zone)
530#define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \ 614#define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \
531 struct kvm_assigned_pci_dev) 615 struct kvm_assigned_pci_dev)
532#define KVM_SET_GSI_ROUTING _IOW(KVMIO, 0x6a, struct kvm_irq_routing) 616#define KVM_SET_GSI_ROUTING _IOW(KVMIO, 0x6a, struct kvm_irq_routing)
533/* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */ 617/* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */
534#define KVM_ASSIGN_IRQ _IOR(KVMIO, 0x70, \ 618#define KVM_ASSIGN_IRQ __KVM_DEPRECATED_VM_R_0x70
535 struct kvm_assigned_irq) 619#define KVM_ASSIGN_DEV_IRQ _IOW(KVMIO, 0x70, struct kvm_assigned_irq)
536#define KVM_ASSIGN_DEV_IRQ _IOW(KVMIO, 0x70, struct kvm_assigned_irq) 620#define KVM_REINJECT_CONTROL _IO(KVMIO, 0x71)
537#define KVM_REINJECT_CONTROL _IO(KVMIO, 0x71) 621#define KVM_DEASSIGN_PCI_DEVICE _IOW(KVMIO, 0x72, \
538#define KVM_DEASSIGN_PCI_DEVICE _IOW(KVMIO, 0x72, \ 622 struct kvm_assigned_pci_dev)
539 struct kvm_assigned_pci_dev) 623#define KVM_ASSIGN_SET_MSIX_NR _IOW(KVMIO, 0x73, \
540#define KVM_ASSIGN_SET_MSIX_NR \ 624 struct kvm_assigned_msix_nr)
541 _IOW(KVMIO, 0x73, struct kvm_assigned_msix_nr) 625#define KVM_ASSIGN_SET_MSIX_ENTRY _IOW(KVMIO, 0x74, \
542#define KVM_ASSIGN_SET_MSIX_ENTRY \ 626 struct kvm_assigned_msix_entry)
543 _IOW(KVMIO, 0x74, struct kvm_assigned_msix_entry) 627#define KVM_DEASSIGN_DEV_IRQ _IOW(KVMIO, 0x75, struct kvm_assigned_irq)
544#define KVM_DEASSIGN_DEV_IRQ _IOW(KVMIO, 0x75, struct kvm_assigned_irq) 628#define KVM_IRQFD _IOW(KVMIO, 0x76, struct kvm_irqfd)
545#define KVM_IRQFD _IOW(KVMIO, 0x76, struct kvm_irqfd) 629#define KVM_CREATE_PIT2 _IOW(KVMIO, 0x77, struct kvm_pit_config)
546#define KVM_CREATE_PIT2 _IOW(KVMIO, 0x77, struct kvm_pit_config) 630#define KVM_SET_BOOT_CPU_ID _IO(KVMIO, 0x78)
547#define KVM_SET_BOOT_CPU_ID _IO(KVMIO, 0x78) 631#define KVM_IOEVENTFD _IOW(KVMIO, 0x79, struct kvm_ioeventfd)
548#define KVM_IOEVENTFD _IOW(KVMIO, 0x79, struct kvm_ioeventfd) 632#define KVM_XEN_HVM_CONFIG _IOW(KVMIO, 0x7a, struct kvm_xen_hvm_config)
633#define KVM_SET_CLOCK _IOW(KVMIO, 0x7b, struct kvm_clock_data)
634#define KVM_GET_CLOCK _IOR(KVMIO, 0x7c, struct kvm_clock_data)
635/* Available with KVM_CAP_PIT_STATE2 */
636#define KVM_GET_PIT2 _IOR(KVMIO, 0x9f, struct kvm_pit_state2)
637#define KVM_SET_PIT2 _IOW(KVMIO, 0xa0, struct kvm_pit_state2)
549 638
550/* 639/*
551 * ioctls for vcpu fds 640 * ioctls for vcpu fds
@@ -558,7 +647,7 @@ struct kvm_irqfd {
558#define KVM_TRANSLATE _IOWR(KVMIO, 0x85, struct kvm_translation) 647#define KVM_TRANSLATE _IOWR(KVMIO, 0x85, struct kvm_translation)
559#define KVM_INTERRUPT _IOW(KVMIO, 0x86, struct kvm_interrupt) 648#define KVM_INTERRUPT _IOW(KVMIO, 0x86, struct kvm_interrupt)
560/* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */ 649/* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
561#define KVM_DEBUG_GUEST __KVM_DEPRECATED_DEBUG_GUEST 650#define KVM_DEBUG_GUEST __KVM_DEPRECATED_VCPU_W_0x87
562#define KVM_GET_MSRS _IOWR(KVMIO, 0x88, struct kvm_msrs) 651#define KVM_GET_MSRS _IOWR(KVMIO, 0x88, struct kvm_msrs)
563#define KVM_SET_MSRS _IOW(KVMIO, 0x89, struct kvm_msrs) 652#define KVM_SET_MSRS _IOW(KVMIO, 0x89, struct kvm_msrs)
564#define KVM_SET_CPUID _IOW(KVMIO, 0x8a, struct kvm_cpuid) 653#define KVM_SET_CPUID _IOW(KVMIO, 0x8a, struct kvm_cpuid)
@@ -570,7 +659,7 @@ struct kvm_irqfd {
570#define KVM_SET_CPUID2 _IOW(KVMIO, 0x90, struct kvm_cpuid2) 659#define KVM_SET_CPUID2 _IOW(KVMIO, 0x90, struct kvm_cpuid2)
571#define KVM_GET_CPUID2 _IOWR(KVMIO, 0x91, struct kvm_cpuid2) 660#define KVM_GET_CPUID2 _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
572/* Available with KVM_CAP_VAPIC */ 661/* Available with KVM_CAP_VAPIC */
573#define KVM_TPR_ACCESS_REPORTING _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl) 662#define KVM_TPR_ACCESS_REPORTING _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)
574/* Available with KVM_CAP_VAPIC */ 663/* Available with KVM_CAP_VAPIC */
575#define KVM_SET_VAPIC_ADDR _IOW(KVMIO, 0x93, struct kvm_vapic_addr) 664#define KVM_SET_VAPIC_ADDR _IOW(KVMIO, 0x93, struct kvm_vapic_addr)
576/* valid for virtual machine (for floating interrupt)_and_ vcpu */ 665/* valid for virtual machine (for floating interrupt)_and_ vcpu */
@@ -582,66 +671,23 @@ struct kvm_irqfd {
582/* initial ipl psw for s390 */ 671/* initial ipl psw for s390 */
583#define KVM_S390_SET_INITIAL_PSW _IOW(KVMIO, 0x96, struct kvm_s390_psw) 672#define KVM_S390_SET_INITIAL_PSW _IOW(KVMIO, 0x96, struct kvm_s390_psw)
584/* initial reset for s390 */ 673/* initial reset for s390 */
585#define KVM_S390_INITIAL_RESET _IO(KVMIO, 0x97) 674#define KVM_S390_INITIAL_RESET _IO(KVMIO, 0x97)
586#define KVM_GET_MP_STATE _IOR(KVMIO, 0x98, struct kvm_mp_state) 675#define KVM_GET_MP_STATE _IOR(KVMIO, 0x98, struct kvm_mp_state)
587#define KVM_SET_MP_STATE _IOW(KVMIO, 0x99, struct kvm_mp_state) 676#define KVM_SET_MP_STATE _IOW(KVMIO, 0x99, struct kvm_mp_state)
588/* Available with KVM_CAP_NMI */ 677/* Available with KVM_CAP_NMI */
589#define KVM_NMI _IO(KVMIO, 0x9a) 678#define KVM_NMI _IO(KVMIO, 0x9a)
590/* Available with KVM_CAP_SET_GUEST_DEBUG */ 679/* Available with KVM_CAP_SET_GUEST_DEBUG */
591#define KVM_SET_GUEST_DEBUG _IOW(KVMIO, 0x9b, struct kvm_guest_debug) 680#define KVM_SET_GUEST_DEBUG _IOW(KVMIO, 0x9b, struct kvm_guest_debug)
592/* MCE for x86 */ 681/* MCE for x86 */
593#define KVM_X86_SETUP_MCE _IOW(KVMIO, 0x9c, __u64) 682#define KVM_X86_SETUP_MCE _IOW(KVMIO, 0x9c, __u64)
594#define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO, 0x9d, __u64) 683#define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO, 0x9d, __u64)
595#define KVM_X86_SET_MCE _IOW(KVMIO, 0x9e, struct kvm_x86_mce) 684#define KVM_X86_SET_MCE _IOW(KVMIO, 0x9e, struct kvm_x86_mce)
596 685/* IA64 stack access */
597/*
598 * Deprecated interfaces
599 */
600struct kvm_breakpoint {
601 __u32 enabled;
602 __u32 padding;
603 __u64 address;
604};
605
606struct kvm_debug_guest {
607 __u32 enabled;
608 __u32 pad;
609 struct kvm_breakpoint breakpoints[4];
610 __u32 singlestep;
611};
612
613#define __KVM_DEPRECATED_DEBUG_GUEST _IOW(KVMIO, 0x87, struct kvm_debug_guest)
614
615#define KVM_IA64_VCPU_GET_STACK _IOR(KVMIO, 0x9a, void *) 686#define KVM_IA64_VCPU_GET_STACK _IOR(KVMIO, 0x9a, void *)
616#define KVM_IA64_VCPU_SET_STACK _IOW(KVMIO, 0x9b, void *) 687#define KVM_IA64_VCPU_SET_STACK _IOW(KVMIO, 0x9b, void *)
617 688/* Available with KVM_CAP_VCPU_EVENTS */
618#define KVM_GET_PIT2 _IOR(KVMIO, 0x9f, struct kvm_pit_state2) 689#define KVM_GET_VCPU_EVENTS _IOR(KVMIO, 0x9f, struct kvm_vcpu_events)
619#define KVM_SET_PIT2 _IOW(KVMIO, 0xa0, struct kvm_pit_state2) 690#define KVM_SET_VCPU_EVENTS _IOW(KVMIO, 0xa0, struct kvm_vcpu_events)
620
621#define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02)
622#define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03)
623#define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04)
624#define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05)
625#define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06)
626#define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07)
627#define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08)
628#define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09)
629#define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A)
630#define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B)
631#define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C)
632#define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D)
633#define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E)
634#define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F)
635#define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10)
636#define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11)
637#define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12)
638#define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13)
639#define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14)
640#define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15)
641#define KVM_TRC_GTLB_WRITE (KVM_TRC_HANDLER + 0x16)
642#define KVM_TRC_STLB_WRITE (KVM_TRC_HANDLER + 0x17)
643#define KVM_TRC_STLB_INVAL (KVM_TRC_HANDLER + 0x18)
644#define KVM_TRC_PPC_INSTR (KVM_TRC_HANDLER + 0x19)
645 691
646#define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) 692#define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0)
647 693
@@ -650,8 +696,9 @@ struct kvm_assigned_pci_dev {
650 __u32 busnr; 696 __u32 busnr;
651 __u32 devfn; 697 __u32 devfn;
652 __u32 flags; 698 __u32 flags;
699 __u32 segnr;
653 union { 700 union {
654 __u32 reserved[12]; 701 __u32 reserved[11];
655 }; 702 };
656}; 703};
657 704
@@ -696,4 +743,4 @@ struct kvm_assigned_msix_entry {
696 __u16 padding[3]; 743 __u16 padding[3];
697}; 744};
698 745
699#endif 746#endif /* __LINUX_KVM_H */
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index b7bbb5ddd7ae..169d07758ee5 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -38,6 +38,7 @@
38#define KVM_REQ_MMU_SYNC 7 38#define KVM_REQ_MMU_SYNC 7
39#define KVM_REQ_KVMCLOCK_UPDATE 8 39#define KVM_REQ_KVMCLOCK_UPDATE 8
40#define KVM_REQ_KICK 9 40#define KVM_REQ_KICK 9
41#define KVM_REQ_DEACTIVATE_FPU 10
41 42
42#define KVM_USERSPACE_IRQ_SOURCE_ID 0 43#define KVM_USERSPACE_IRQ_SOURCE_ID 0
43 44
@@ -53,24 +54,24 @@ extern struct kmem_cache *kvm_vcpu_cache;
53 */ 54 */
54struct kvm_io_bus { 55struct kvm_io_bus {
55 int dev_count; 56 int dev_count;
56#define NR_IOBUS_DEVS 6 57#define NR_IOBUS_DEVS 200
57 struct kvm_io_device *devs[NR_IOBUS_DEVS]; 58 struct kvm_io_device *devs[NR_IOBUS_DEVS];
58}; 59};
59 60
60void kvm_io_bus_init(struct kvm_io_bus *bus); 61enum kvm_bus {
61void kvm_io_bus_destroy(struct kvm_io_bus *bus); 62 KVM_MMIO_BUS,
62int kvm_io_bus_write(struct kvm_io_bus *bus, gpa_t addr, int len, 63 KVM_PIO_BUS,
63 const void *val); 64 KVM_NR_BUSES
64int kvm_io_bus_read(struct kvm_io_bus *bus, gpa_t addr, int len, 65};
66
67int kvm_io_bus_write(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr,
68 int len, const void *val);
69int kvm_io_bus_read(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr, int len,
65 void *val); 70 void *val);
66int __kvm_io_bus_register_dev(struct kvm_io_bus *bus, 71int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx,
67 struct kvm_io_device *dev);
68int kvm_io_bus_register_dev(struct kvm *kvm, struct kvm_io_bus *bus,
69 struct kvm_io_device *dev); 72 struct kvm_io_device *dev);
70void __kvm_io_bus_unregister_dev(struct kvm_io_bus *bus, 73int kvm_io_bus_unregister_dev(struct kvm *kvm, enum kvm_bus bus_idx,
71 struct kvm_io_device *dev); 74 struct kvm_io_device *dev);
72void kvm_io_bus_unregister_dev(struct kvm *kvm, struct kvm_io_bus *bus,
73 struct kvm_io_device *dev);
74 75
75struct kvm_vcpu { 76struct kvm_vcpu {
76 struct kvm *kvm; 77 struct kvm *kvm;
@@ -83,6 +84,8 @@ struct kvm_vcpu {
83 struct kvm_run *run; 84 struct kvm_run *run;
84 unsigned long requests; 85 unsigned long requests;
85 unsigned long guest_debug; 86 unsigned long guest_debug;
87 int srcu_idx;
88
86 int fpu_active; 89 int fpu_active;
87 int guest_fpu_loaded; 90 int guest_fpu_loaded;
88 wait_queue_head_t wq; 91 wait_queue_head_t wq;
@@ -116,11 +119,16 @@ struct kvm_memory_slot {
116 int user_alloc; 119 int user_alloc;
117}; 120};
118 121
122static inline unsigned long kvm_dirty_bitmap_bytes(struct kvm_memory_slot *memslot)
123{
124 return ALIGN(memslot->npages, BITS_PER_LONG) / 8;
125}
126
119struct kvm_kernel_irq_routing_entry { 127struct kvm_kernel_irq_routing_entry {
120 u32 gsi; 128 u32 gsi;
121 u32 type; 129 u32 type;
122 int (*set)(struct kvm_kernel_irq_routing_entry *e, 130 int (*set)(struct kvm_kernel_irq_routing_entry *e,
123 struct kvm *kvm, int level); 131 struct kvm *kvm, int irq_source_id, int level);
124 union { 132 union {
125 struct { 133 struct {
126 unsigned irqchip; 134 unsigned irqchip;
@@ -128,17 +136,41 @@ struct kvm_kernel_irq_routing_entry {
128 } irqchip; 136 } irqchip;
129 struct msi_msg msi; 137 struct msi_msg msi;
130 }; 138 };
131 struct list_head link; 139 struct hlist_node link;
132}; 140};
133 141
134struct kvm { 142#ifdef __KVM_HAVE_IOAPIC
135 spinlock_t mmu_lock; 143
136 spinlock_t requests_lock; 144struct kvm_irq_routing_table {
137 struct rw_semaphore slots_lock; 145 int chip[KVM_NR_IRQCHIPS][KVM_IOAPIC_NUM_PINS];
138 struct mm_struct *mm; /* userspace tied to this vm */ 146 struct kvm_kernel_irq_routing_entry *rt_entries;
147 u32 nr_rt_entries;
148 /*
149 * Array indexed by gsi. Each entry contains list of irq chips
150 * the gsi is connected to.
151 */
152 struct hlist_head map[0];
153};
154
155#else
156
157struct kvm_irq_routing_table {};
158
159#endif
160
161struct kvm_memslots {
139 int nmemslots; 162 int nmemslots;
140 struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS + 163 struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS +
141 KVM_PRIVATE_MEM_SLOTS]; 164 KVM_PRIVATE_MEM_SLOTS];
165};
166
167struct kvm {
168 spinlock_t mmu_lock;
169 raw_spinlock_t requests_lock;
170 struct mutex slots_lock;
171 struct mm_struct *mm; /* userspace tied to this vm */
172 struct kvm_memslots *memslots;
173 struct srcu_struct srcu;
142#ifdef CONFIG_KVM_APIC_ARCHITECTURE 174#ifdef CONFIG_KVM_APIC_ARCHITECTURE
143 u32 bsp_vcpu_id; 175 u32 bsp_vcpu_id;
144 struct kvm_vcpu *bsp_vcpu; 176 struct kvm_vcpu *bsp_vcpu;
@@ -147,8 +179,7 @@ struct kvm {
147 atomic_t online_vcpus; 179 atomic_t online_vcpus;
148 struct list_head vm_list; 180 struct list_head vm_list;
149 struct mutex lock; 181 struct mutex lock;
150 struct kvm_io_bus mmio_bus; 182 struct kvm_io_bus *buses[KVM_NR_BUSES];
151 struct kvm_io_bus pio_bus;
152#ifdef CONFIG_HAVE_KVM_EVENTFD 183#ifdef CONFIG_HAVE_KVM_EVENTFD
153 struct { 184 struct {
154 spinlock_t lock; 185 spinlock_t lock;
@@ -166,8 +197,9 @@ struct kvm {
166 197
167 struct mutex irq_lock; 198 struct mutex irq_lock;
168#ifdef CONFIG_HAVE_KVM_IRQCHIP 199#ifdef CONFIG_HAVE_KVM_IRQCHIP
169 struct list_head irq_routing; /* of kvm_kernel_irq_routing_entry */ 200 struct kvm_irq_routing_table *irq_routing;
170 struct hlist_head mask_notifier_list; 201 struct hlist_head mask_notifier_list;
202 struct hlist_head irq_ack_notifier_list;
171#endif 203#endif
172 204
173#ifdef KVM_ARCH_WANT_MMU_NOTIFIER 205#ifdef KVM_ARCH_WANT_MMU_NOTIFIER
@@ -229,13 +261,20 @@ int kvm_set_memory_region(struct kvm *kvm,
229int __kvm_set_memory_region(struct kvm *kvm, 261int __kvm_set_memory_region(struct kvm *kvm,
230 struct kvm_userspace_memory_region *mem, 262 struct kvm_userspace_memory_region *mem,
231 int user_alloc); 263 int user_alloc);
232int kvm_arch_set_memory_region(struct kvm *kvm, 264int kvm_arch_prepare_memory_region(struct kvm *kvm,
265 struct kvm_memory_slot *memslot,
266 struct kvm_memory_slot old,
267 struct kvm_userspace_memory_region *mem,
268 int user_alloc);
269void kvm_arch_commit_memory_region(struct kvm *kvm,
233 struct kvm_userspace_memory_region *mem, 270 struct kvm_userspace_memory_region *mem,
234 struct kvm_memory_slot old, 271 struct kvm_memory_slot old,
235 int user_alloc); 272 int user_alloc);
236void kvm_disable_largepages(void); 273void kvm_disable_largepages(void);
237void kvm_arch_flush_shadow(struct kvm *kvm); 274void kvm_arch_flush_shadow(struct kvm *kvm);
238gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn); 275gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn);
276gfn_t unalias_gfn_instantiation(struct kvm *kvm, gfn_t gfn);
277
239struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn); 278struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn);
240unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn); 279unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn);
241void kvm_release_page_clean(struct page *page); 280void kvm_release_page_clean(struct page *page);
@@ -244,6 +283,9 @@ void kvm_set_page_dirty(struct page *page);
244void kvm_set_page_accessed(struct page *page); 283void kvm_set_page_accessed(struct page *page);
245 284
246pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn); 285pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn);
286pfn_t gfn_to_pfn_memslot(struct kvm *kvm,
287 struct kvm_memory_slot *slot, gfn_t gfn);
288int memslot_id(struct kvm *kvm, gfn_t gfn);
247void kvm_release_pfn_dirty(pfn_t); 289void kvm_release_pfn_dirty(pfn_t);
248void kvm_release_pfn_clean(pfn_t pfn); 290void kvm_release_pfn_clean(pfn_t pfn);
249void kvm_set_pfn_dirty(pfn_t pfn); 291void kvm_set_pfn_dirty(pfn_t pfn);
@@ -263,9 +305,11 @@ int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len);
263int kvm_clear_guest(struct kvm *kvm, gpa_t gpa, unsigned long len); 305int kvm_clear_guest(struct kvm *kvm, gpa_t gpa, unsigned long len);
264struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn); 306struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn);
265int kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn); 307int kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn);
308unsigned long kvm_host_page_size(struct kvm *kvm, gfn_t gfn);
266void mark_page_dirty(struct kvm *kvm, gfn_t gfn); 309void mark_page_dirty(struct kvm *kvm, gfn_t gfn);
267 310
268void kvm_vcpu_block(struct kvm_vcpu *vcpu); 311void kvm_vcpu_block(struct kvm_vcpu *vcpu);
312void kvm_vcpu_on_spin(struct kvm_vcpu *vcpu);
269void kvm_resched(struct kvm_vcpu *vcpu); 313void kvm_resched(struct kvm_vcpu *vcpu);
270void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); 314void kvm_load_guest_fpu(struct kvm_vcpu *vcpu);
271void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); 315void kvm_put_guest_fpu(struct kvm_vcpu *vcpu);
@@ -325,7 +369,7 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu);
325void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu); 369void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu);
326 370
327int kvm_arch_vcpu_reset(struct kvm_vcpu *vcpu); 371int kvm_arch_vcpu_reset(struct kvm_vcpu *vcpu);
328void kvm_arch_hardware_enable(void *garbage); 372int kvm_arch_hardware_enable(void *garbage);
329void kvm_arch_hardware_disable(void *garbage); 373void kvm_arch_hardware_disable(void *garbage);
330int kvm_arch_hardware_setup(void); 374int kvm_arch_hardware_setup(void);
331void kvm_arch_hardware_unsetup(void); 375void kvm_arch_hardware_unsetup(void);
@@ -362,6 +406,7 @@ struct kvm_assigned_dev_kernel {
362 struct work_struct interrupt_work; 406 struct work_struct interrupt_work;
363 struct list_head list; 407 struct list_head list;
364 int assigned_dev_id; 408 int assigned_dev_id;
409 int host_segnr;
365 int host_busnr; 410 int host_busnr;
366 int host_devfn; 411 int host_devfn;
367 unsigned int entries_nr; 412 unsigned int entries_nr;
@@ -390,7 +435,12 @@ void kvm_unregister_irq_mask_notifier(struct kvm *kvm, int irq,
390 struct kvm_irq_mask_notifier *kimn); 435 struct kvm_irq_mask_notifier *kimn);
391void kvm_fire_mask_notifiers(struct kvm *kvm, int irq, bool mask); 436void kvm_fire_mask_notifiers(struct kvm *kvm, int irq, bool mask);
392 437
393int kvm_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level); 438#ifdef __KVM_HAVE_IOAPIC
439void kvm_get_intr_delivery_bitmask(struct kvm_ioapic *ioapic,
440 union kvm_ioapic_redirect_entry *entry,
441 unsigned long *deliver_bitmask);
442#endif
443int kvm_set_irq(struct kvm *kvm, int irq_source_id, u32 irq, int level);
394void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin); 444void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin);
395void kvm_register_irq_ack_notifier(struct kvm *kvm, 445void kvm_register_irq_ack_notifier(struct kvm *kvm,
396 struct kvm_irq_ack_notifier *kian); 446 struct kvm_irq_ack_notifier *kian);
@@ -403,8 +453,7 @@ void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id);
403#define KVM_IOMMU_CACHE_COHERENCY 0x1 453#define KVM_IOMMU_CACHE_COHERENCY 0x1
404 454
405#ifdef CONFIG_IOMMU_API 455#ifdef CONFIG_IOMMU_API
406int kvm_iommu_map_pages(struct kvm *kvm, gfn_t base_gfn, 456int kvm_iommu_map_pages(struct kvm *kvm, struct kvm_memory_slot *slot);
407 unsigned long npages);
408int kvm_iommu_map_guest(struct kvm *kvm); 457int kvm_iommu_map_guest(struct kvm *kvm);
409int kvm_iommu_unmap_guest(struct kvm *kvm); 458int kvm_iommu_unmap_guest(struct kvm *kvm);
410int kvm_assign_device(struct kvm *kvm, 459int kvm_assign_device(struct kvm *kvm,
@@ -454,11 +503,6 @@ static inline void kvm_guest_exit(void)
454 current->flags &= ~PF_VCPU; 503 current->flags &= ~PF_VCPU;
455} 504}
456 505
457static inline int memslot_id(struct kvm *kvm, struct kvm_memory_slot *slot)
458{
459 return slot - kvm->memslots;
460}
461
462static inline gpa_t gfn_to_gpa(gfn_t gfn) 506static inline gpa_t gfn_to_gpa(gfn_t gfn)
463{ 507{
464 return (gpa_t)gfn << PAGE_SHIFT; 508 return (gpa_t)gfn << PAGE_SHIFT;
@@ -506,6 +550,10 @@ static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_se
506} 550}
507#endif 551#endif
508 552
553#ifndef KVM_ARCH_HAS_UNALIAS_INSTANTIATION
554#define unalias_gfn_instantiation unalias_gfn
555#endif
556
509#ifdef CONFIG_HAVE_KVM_IRQCHIP 557#ifdef CONFIG_HAVE_KVM_IRQCHIP
510 558
511#define KVM_MAX_IRQ_ROUTES 1024 559#define KVM_MAX_IRQ_ROUTES 1024
@@ -552,4 +600,21 @@ static inline bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu)
552 return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id; 600 return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id;
553} 601}
554#endif 602#endif
603
604#ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
605
606long kvm_vm_ioctl_assigned_device(struct kvm *kvm, unsigned ioctl,
607 unsigned long arg);
608
609#else
610
611static inline long kvm_vm_ioctl_assigned_device(struct kvm *kvm, unsigned ioctl,
612 unsigned long arg)
613{
614 return -ENOTTY;
615}
616
555#endif 617#endif
618
619#endif
620
diff --git a/include/linux/lcm.h b/include/linux/lcm.h
new file mode 100644
index 000000000000..7bf01d779b45
--- /dev/null
+++ b/include/linux/lcm.h
@@ -0,0 +1,8 @@
1#ifndef _LCM_H
2#define _LCM_H
3
4#include <linux/compiler.h>
5
6unsigned long lcm(unsigned long a, unsigned long b) __attribute_const__;
7
8#endif /* _LCM_H */
diff --git a/include/linux/leds-lp3944.h b/include/linux/leds-lp3944.h
index afc9f9fd70f5..2618aa9063bc 100644
--- a/include/linux/leds-lp3944.h
+++ b/include/linux/leds-lp3944.h
@@ -12,9 +12,6 @@
12#ifndef __LINUX_LEDS_LP3944_H 12#ifndef __LINUX_LEDS_LP3944_H
13#define __LINUX_LEDS_LP3944_H 13#define __LINUX_LEDS_LP3944_H
14 14
15#include <linux/leds.h>
16#include <linux/workqueue.h>
17
18#define LP3944_LED0 0 15#define LP3944_LED0 0
19#define LP3944_LED1 1 16#define LP3944_LED1 1
20#define LP3944_LED2 2 17#define LP3944_LED2 2
diff --git a/include/linux/leds-pca9532.h b/include/linux/leds-pca9532.h
index 96eea90f01a8..f158eb1149aa 100644
--- a/include/linux/leds-pca9532.h
+++ b/include/linux/leds-pca9532.h
@@ -32,7 +32,7 @@ struct pca9532_led {
32 struct i2c_client *client; 32 struct i2c_client *client;
33 char *name; 33 char *name;
34 struct led_classdev ldev; 34 struct led_classdev ldev;
35 struct work_struct work; 35 struct work_struct work;
36 enum pca9532_type type; 36 enum pca9532_type type;
37 enum pca9532_state state; 37 enum pca9532_state state;
38}; 38};
diff --git a/include/linux/leds-regulator.h b/include/linux/leds-regulator.h
new file mode 100644
index 000000000000..5a8eb389aab8
--- /dev/null
+++ b/include/linux/leds-regulator.h
@@ -0,0 +1,46 @@
1/*
2 * leds-regulator.h - platform data structure for regulator driven LEDs.
3 *
4 * Copyright (C) 2009 Antonio Ospite <ospite@studenti.unina.it>
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 __LINUX_LEDS_REGULATOR_H
13#define __LINUX_LEDS_REGULATOR_H
14
15/*
16 * Use "vled" as supply id when declaring the regulator consumer:
17 *
18 * static struct regulator_consumer_supply pcap_regulator_VVIB_consumers [] = {
19 * { .dev_name = "leds-regulator.0", supply = "vled" },
20 * };
21 *
22 * If you have several regulator driven LEDs, you can append a numerical id to
23 * .dev_name as done above, and use the same id when declaring the platform
24 * device:
25 *
26 * static struct led_regulator_platform_data a780_vibrator_data = {
27 * .name = "a780::vibrator",
28 * };
29 *
30 * static struct platform_device a780_vibrator = {
31 * .name = "leds-regulator",
32 * .id = 0,
33 * .dev = {
34 * .platform_data = &a780_vibrator_data,
35 * },
36 * };
37 */
38
39#include <linux/leds.h>
40
41struct led_regulator_platform_data {
42 char *name; /* LED name as expected by LED class */
43 enum led_brightness brightness; /* initial brightness value */
44};
45
46#endif /* __LINUX_LEDS_REGULATOR_H */
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 87698640c091..b2f2003b92e5 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -146,6 +146,7 @@ enum {
146 ATA_DFLAG_SLEEPING = (1 << 15), /* device is sleeping */ 146 ATA_DFLAG_SLEEPING = (1 << 15), /* device is sleeping */
147 ATA_DFLAG_DUBIOUS_XFER = (1 << 16), /* data transfer not verified */ 147 ATA_DFLAG_DUBIOUS_XFER = (1 << 16), /* data transfer not verified */
148 ATA_DFLAG_NO_UNLOAD = (1 << 17), /* device doesn't support unload */ 148 ATA_DFLAG_NO_UNLOAD = (1 << 17), /* device doesn't support unload */
149 ATA_DFLAG_UNLOCK_HPA = (1 << 18), /* unlock HPA */
149 ATA_DFLAG_INIT_MASK = (1 << 24) - 1, 150 ATA_DFLAG_INIT_MASK = (1 << 24) - 1,
150 151
151 ATA_DFLAG_DETACH = (1 << 24), 152 ATA_DFLAG_DETACH = (1 << 24),
@@ -354,6 +355,9 @@ enum {
354 /* max tries if error condition is still set after ->error_handler */ 355 /* max tries if error condition is still set after ->error_handler */
355 ATA_EH_MAX_TRIES = 5, 356 ATA_EH_MAX_TRIES = 5,
356 357
358 /* sometimes resuming a link requires several retries */
359 ATA_LINK_RESUME_TRIES = 5,
360
357 /* how hard are we gonna try to probe/recover devices */ 361 /* how hard are we gonna try to probe/recover devices */
358 ATA_PROBE_MAX_TRIES = 3, 362 ATA_PROBE_MAX_TRIES = 3,
359 ATA_EH_DEV_TRIES = 3, 363 ATA_EH_DEV_TRIES = 3,
@@ -365,7 +369,7 @@ enum {
365 /* This should match the actual table size of 369 /* This should match the actual table size of
366 * ata_eh_cmd_timeout_table in libata-eh.c. 370 * ata_eh_cmd_timeout_table in libata-eh.c.
367 */ 371 */
368 ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 5, 372 ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 6,
369 373
370 /* Horkage types. May be set by libata or controller on drives 374 /* Horkage types. May be set by libata or controller on drives
371 (some horkage may be drive/controller pair dependant */ 375 (some horkage may be drive/controller pair dependant */
@@ -595,6 +599,7 @@ struct ata_device {
595 unsigned int horkage; /* List of broken features */ 599 unsigned int horkage; /* List of broken features */
596 unsigned long flags; /* ATA_DFLAG_xxx */ 600 unsigned long flags; /* ATA_DFLAG_xxx */
597 struct scsi_device *sdev; /* attached SCSI device */ 601 struct scsi_device *sdev; /* attached SCSI device */
602 void *private_data;
598#ifdef CONFIG_ATA_ACPI 603#ifdef CONFIG_ATA_ACPI
599 acpi_handle acpi_handle; 604 acpi_handle acpi_handle;
600 union acpi_object *gtf_cache; 605 union acpi_object *gtf_cache;
@@ -853,6 +858,7 @@ struct ata_port_operations {
853 unsigned int (*sff_data_xfer)(struct ata_device *dev, 858 unsigned int (*sff_data_xfer)(struct ata_device *dev,
854 unsigned char *buf, unsigned int buflen, int rw); 859 unsigned char *buf, unsigned int buflen, int rw);
855 u8 (*sff_irq_on)(struct ata_port *); 860 u8 (*sff_irq_on)(struct ata_port *);
861 bool (*sff_irq_check)(struct ata_port *);
856 void (*sff_irq_clear)(struct ata_port *); 862 void (*sff_irq_clear)(struct ata_port *);
857 863
858 void (*bmdma_setup)(struct ata_queued_cmd *qc); 864 void (*bmdma_setup)(struct ata_queued_cmd *qc);
@@ -1023,7 +1029,7 @@ extern int ata_std_bios_param(struct scsi_device *sdev,
1023extern int ata_scsi_slave_config(struct scsi_device *sdev); 1029extern int ata_scsi_slave_config(struct scsi_device *sdev);
1024extern void ata_scsi_slave_destroy(struct scsi_device *sdev); 1030extern void ata_scsi_slave_destroy(struct scsi_device *sdev);
1025extern int ata_scsi_change_queue_depth(struct scsi_device *sdev, 1031extern int ata_scsi_change_queue_depth(struct scsi_device *sdev,
1026 int queue_depth); 1032 int queue_depth, int reason);
1027extern struct ata_device *ata_dev_pair(struct ata_device *adev); 1033extern struct ata_device *ata_dev_pair(struct ata_device *adev);
1028extern int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev); 1034extern int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev);
1029 1035
@@ -1638,8 +1644,8 @@ extern int ata_pci_sff_activate_host(struct ata_host *host,
1638 irq_handler_t irq_handler, 1644 irq_handler_t irq_handler,
1639 struct scsi_host_template *sht); 1645 struct scsi_host_template *sht);
1640extern int ata_pci_sff_init_one(struct pci_dev *pdev, 1646extern int ata_pci_sff_init_one(struct pci_dev *pdev,
1641 const struct ata_port_info * const * ppi, 1647 const struct ata_port_info * const * ppi,
1642 struct scsi_host_template *sht, void *host_priv); 1648 struct scsi_host_template *sht, void *host_priv, int hflags);
1643#endif /* CONFIG_PCI */ 1649#endif /* CONFIG_PCI */
1644 1650
1645/** 1651/**
diff --git a/include/linux/lis3lv02d.h b/include/linux/lis3lv02d.h
index 3cc2f2c53e4c..f1ca0dcc1628 100644
--- a/include/linux/lis3lv02d.h
+++ b/include/linux/lis3lv02d.h
@@ -43,6 +43,21 @@ struct lis3lv02d_platform_data {
43#define LIS3_WAKEUP_Z_HI (1 << 5) 43#define LIS3_WAKEUP_Z_HI (1 << 5)
44 unsigned char wakeup_flags; 44 unsigned char wakeup_flags;
45 unsigned char wakeup_thresh; 45 unsigned char wakeup_thresh;
46#define LIS3_NO_MAP 0
47#define LIS3_DEV_X 1
48#define LIS3_DEV_Y 2
49#define LIS3_DEV_Z 3
50#define LIS3_INV_DEV_X -1
51#define LIS3_INV_DEV_Y -2
52#define LIS3_INV_DEV_Z -3
53 s8 axis_x;
54 s8 axis_y;
55 s8 axis_z;
56 int (*setup_resources)(void);
57 int (*release_resources)(void);
58 /* Limits for selftest are specified in chip data sheet */
59 s16 st_min_limits[3]; /* min pass limit x, y, z */
60 s16 st_max_limits[3]; /* max pass limit x, y, z */
46}; 61};
47 62
48#endif /* __LIS3LV02D_H_ */ 63#endif /* __LIS3LV02D_H_ */
diff --git a/include/linux/list.h b/include/linux/list.h
index 969f6e92d089..8392884a2977 100644
--- a/include/linux/list.h
+++ b/include/linux/list.h
@@ -206,6 +206,20 @@ static inline int list_empty_careful(const struct list_head *head)
206} 206}
207 207
208/** 208/**
209 * list_rotate_left - rotate the list to the left
210 * @head: the head of the list
211 */
212static inline void list_rotate_left(struct list_head *head)
213{
214 struct list_head *first;
215
216 if (!list_empty(head)) {
217 first = head->next;
218 list_move_tail(first, head);
219 }
220}
221
222/**
209 * list_is_singular - tests whether a list has just one entry. 223 * list_is_singular - tests whether a list has just one entry.
210 * @head: the list to test. 224 * @head: the list to test.
211 */ 225 */
@@ -484,7 +498,7 @@ static inline void list_splice_tail_init(struct list_head *list,
484 pos = n, n = list_entry(n->member.next, typeof(*n), member)) 498 pos = n, n = list_entry(n->member.next, typeof(*n), member))
485 499
486/** 500/**
487 * list_for_each_entry_safe_continue 501 * list_for_each_entry_safe_continue - continue list iteration safe against removal
488 * @pos: the type * to use as a loop cursor. 502 * @pos: the type * to use as a loop cursor.
489 * @n: another type * to use as temporary storage 503 * @n: another type * to use as temporary storage
490 * @head: the head for your list. 504 * @head: the head for your list.
@@ -500,7 +514,7 @@ static inline void list_splice_tail_init(struct list_head *list,
500 pos = n, n = list_entry(n->member.next, typeof(*n), member)) 514 pos = n, n = list_entry(n->member.next, typeof(*n), member))
501 515
502/** 516/**
503 * list_for_each_entry_safe_from 517 * list_for_each_entry_safe_from - iterate over list from current point safe against removal
504 * @pos: the type * to use as a loop cursor. 518 * @pos: the type * to use as a loop cursor.
505 * @n: another type * to use as temporary storage 519 * @n: another type * to use as temporary storage
506 * @head: the head for your list. 520 * @head: the head for your list.
@@ -515,7 +529,7 @@ static inline void list_splice_tail_init(struct list_head *list,
515 pos = n, n = list_entry(n->member.next, typeof(*n), member)) 529 pos = n, n = list_entry(n->member.next, typeof(*n), member))
516 530
517/** 531/**
518 * list_for_each_entry_safe_reverse 532 * list_for_each_entry_safe_reverse - iterate backwards over list safe against removal
519 * @pos: the type * to use as a loop cursor. 533 * @pos: the type * to use as a loop cursor.
520 * @n: another type * to use as temporary storage 534 * @n: another type * to use as temporary storage
521 * @head: the head for your list. 535 * @head: the head for your list.
diff --git a/include/linux/list_sort.h b/include/linux/list_sort.h
new file mode 100644
index 000000000000..1a2df2efb771
--- /dev/null
+++ b/include/linux/list_sort.h
@@ -0,0 +1,11 @@
1#ifndef _LINUX_LIST_SORT_H
2#define _LINUX_LIST_SORT_H
3
4#include <linux/types.h>
5
6struct list_head;
7
8void list_sort(void *priv, struct list_head *head,
9 int (*cmp)(void *priv, struct list_head *a,
10 struct list_head *b));
11#endif
diff --git a/include/linux/llc.h b/include/linux/llc.h
index 7733585603f1..ad7074ba81af 100644
--- a/include/linux/llc.h
+++ b/include/linux/llc.h
@@ -36,6 +36,7 @@ enum llc_sockopts {
36 LLC_OPT_BUSY_TMR_EXP, /* busy state expire time (secs). */ 36 LLC_OPT_BUSY_TMR_EXP, /* busy state expire time (secs). */
37 LLC_OPT_TX_WIN, /* tx window size. */ 37 LLC_OPT_TX_WIN, /* tx window size. */
38 LLC_OPT_RX_WIN, /* rx window size. */ 38 LLC_OPT_RX_WIN, /* rx window size. */
39 LLC_OPT_PKTINFO, /* ancillary packet information. */
39 LLC_OPT_MAX 40 LLC_OPT_MAX
40}; 41};
41 42
@@ -70,6 +71,12 @@ enum llc_sockopts {
70#define LLC_SAP_RM 0xD4 /* Resource Management */ 71#define LLC_SAP_RM 0xD4 /* Resource Management */
71#define LLC_SAP_GLOBAL 0xFF /* Global SAP. */ 72#define LLC_SAP_GLOBAL 0xFF /* Global SAP. */
72 73
74struct llc_pktinfo {
75 int lpi_ifindex;
76 unsigned char lpi_sap;
77 unsigned char lpi_mac[IFHWADDRLEN];
78};
79
73#ifdef __KERNEL__ 80#ifdef __KERNEL__
74#define LLC_SAP_DYN_START 0xC0 81#define LLC_SAP_DYN_START 0xC0
75#define LLC_SAP_DYN_STOP 0xDE 82#define LLC_SAP_DYN_STOP 0xDE
diff --git a/include/linux/lmb.h b/include/linux/lmb.h
index 2442e3f3d033..f3d14333ebed 100644
--- a/include/linux/lmb.h
+++ b/include/linux/lmb.h
@@ -42,6 +42,7 @@ extern void __init lmb_init(void);
42extern void __init lmb_analyze(void); 42extern void __init lmb_analyze(void);
43extern long lmb_add(u64 base, u64 size); 43extern long lmb_add(u64 base, u64 size);
44extern long lmb_remove(u64 base, u64 size); 44extern long lmb_remove(u64 base, u64 size);
45extern long __init lmb_free(u64 base, u64 size);
45extern long __init lmb_reserve(u64 base, u64 size); 46extern long __init lmb_reserve(u64 base, u64 size);
46extern u64 __init lmb_alloc_nid(u64 size, u64 align, int nid, 47extern u64 __init lmb_alloc_nid(u64 size, u64 align, int nid,
47 u64 (*nid_range)(u64, u64, int *)); 48 u64 (*nid_range)(u64, u64, int *));
@@ -54,6 +55,7 @@ extern u64 __init lmb_phys_mem_size(void);
54extern u64 lmb_end_of_DRAM(void); 55extern u64 lmb_end_of_DRAM(void);
55extern void __init lmb_enforce_memory_limit(u64 memory_limit); 56extern void __init lmb_enforce_memory_limit(u64 memory_limit);
56extern int __init lmb_is_reserved(u64 addr); 57extern int __init lmb_is_reserved(u64 addr);
58extern int lmb_is_region_reserved(u64 base, u64 size);
57extern int lmb_find(struct lmb_property *res); 59extern int lmb_find(struct lmb_property *res);
58 60
59extern void lmb_dump_all(void); 61extern void lmb_dump_all(void);
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
index 9ccf0e286b2a..a03977a96d7e 100644
--- a/include/linux/lockdep.h
+++ b/include/linux/lockdep.h
@@ -12,6 +12,10 @@
12struct task_struct; 12struct task_struct;
13struct lockdep_map; 13struct lockdep_map;
14 14
15/* for sysctl */
16extern int prove_locking;
17extern int lock_stat;
18
15#ifdef CONFIG_LOCKDEP 19#ifdef CONFIG_LOCKDEP
16 20
17#include <linux/linkage.h> 21#include <linux/linkage.h>
@@ -534,4 +538,8 @@ do { \
534# define might_lock_read(lock) do { } while (0) 538# define might_lock_read(lock) do { } while (0)
535#endif 539#endif
536 540
541#ifdef CONFIG_PROVE_RCU
542extern void lockdep_rcu_dereference(const char *file, const int line);
543#endif
544
537#endif /* __LINUX_LOCKDEP_H */ 545#endif /* __LINUX_LOCKDEP_H */
diff --git a/include/linux/lru_cache.h b/include/linux/lru_cache.h
new file mode 100644
index 000000000000..de48d167568b
--- /dev/null
+++ b/include/linux/lru_cache.h
@@ -0,0 +1,294 @@
1/*
2 lru_cache.c
3
4 This file is part of DRBD by Philipp Reisner and Lars Ellenberg.
5
6 Copyright (C) 2003-2008, LINBIT Information Technologies GmbH.
7 Copyright (C) 2003-2008, Philipp Reisner <philipp.reisner@linbit.com>.
8 Copyright (C) 2003-2008, Lars Ellenberg <lars.ellenberg@linbit.com>.
9
10 drbd 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, or (at your option)
13 any later version.
14
15 drbd 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 drbd; see the file COPYING. If not, write to
22 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
23
24 */
25
26#ifndef LRU_CACHE_H
27#define LRU_CACHE_H
28
29#include <linux/list.h>
30#include <linux/slab.h>
31#include <linux/bitops.h>
32#include <linux/string.h> /* for memset */
33#include <linux/seq_file.h>
34
35/*
36This header file (and its .c file; kernel-doc of functions see there)
37 define a helper framework to easily keep track of index:label associations,
38 and changes to an "active set" of objects, as well as pending transactions,
39 to persistently record those changes.
40
41 We use an LRU policy if it is necessary to "cool down" a region currently in
42 the active set before we can "heat" a previously unused region.
43
44 Because of this later property, it is called "lru_cache".
45 As it actually Tracks Objects in an Active SeT, we could also call it
46 toast (incidentally that is what may happen to the data on the
47 backend storage uppon next resync, if we don't get it right).
48
49What for?
50
51We replicate IO (more or less synchronously) to local and remote disk.
52
53For crash recovery after replication node failure,
54 we need to resync all regions that have been target of in-flight WRITE IO
55 (in use, or "hot", regions), as we don't know wether or not those WRITEs have
56 made it to stable storage.
57
58 To avoid a "full resync", we need to persistently track these regions.
59
60 This is known as "write intent log", and can be implemented as on-disk
61 (coarse or fine grained) bitmap, or other meta data.
62
63 To avoid the overhead of frequent extra writes to this meta data area,
64 usually the condition is softened to regions that _may_ have been target of
65 in-flight WRITE IO, e.g. by only lazily clearing the on-disk write-intent
66 bitmap, trading frequency of meta data transactions against amount of
67 (possibly unnecessary) resync traffic.
68
69 If we set a hard limit on the area that may be "hot" at any given time, we
70 limit the amount of resync traffic needed for crash recovery.
71
72For recovery after replication link failure,
73 we need to resync all blocks that have been changed on the other replica
74 in the mean time, or, if both replica have been changed independently [*],
75 all blocks that have been changed on either replica in the mean time.
76 [*] usually as a result of a cluster split-brain and insufficient protection.
77 but there are valid use cases to do this on purpose.
78
79 Tracking those blocks can be implemented as "dirty bitmap".
80 Having it fine-grained reduces the amount of resync traffic.
81 It should also be persistent, to allow for reboots (or crashes)
82 while the replication link is down.
83
84There are various possible implementations for persistently storing
85write intent log information, three of which are mentioned here.
86
87"Chunk dirtying"
88 The on-disk "dirty bitmap" may be re-used as "write-intent" bitmap as well.
89 To reduce the frequency of bitmap updates for write-intent log purposes,
90 one could dirty "chunks" (of some size) at a time of the (fine grained)
91 on-disk bitmap, while keeping the in-memory "dirty" bitmap as clean as
92 possible, flushing it to disk again when a previously "hot" (and on-disk
93 dirtied as full chunk) area "cools down" again (no IO in flight anymore,
94 and none expected in the near future either).
95
96"Explicit (coarse) write intent bitmap"
97 An other implementation could chose a (probably coarse) explicit bitmap,
98 for write-intent log purposes, additionally to the fine grained dirty bitmap.
99
100"Activity log"
101 Yet an other implementation may keep track of the hot regions, by starting
102 with an empty set, and writing down a journal of region numbers that have
103 become "hot", or have "cooled down" again.
104
105 To be able to use a ring buffer for this journal of changes to the active
106 set, we not only record the actual changes to that set, but also record the
107 not changing members of the set in a round robin fashion. To do so, we use a
108 fixed (but configurable) number of slots which we can identify by index, and
109 associate region numbers (labels) with these indices.
110 For each transaction recording a change to the active set, we record the
111 change itself (index: -old_label, +new_label), and which index is associated
112 with which label (index: current_label) within a certain sliding window that
113 is moved further over the available indices with each such transaction.
114
115 Thus, for crash recovery, if the ringbuffer is sufficiently large, we can
116 accurately reconstruct the active set.
117
118 Sufficiently large depends only on maximum number of active objects, and the
119 size of the sliding window recording "index: current_label" associations within
120 each transaction.
121
122 This is what we call the "activity log".
123
124 Currently we need one activity log transaction per single label change, which
125 does not give much benefit over the "dirty chunks of bitmap" approach, other
126 than potentially less seeks.
127
128 We plan to change the transaction format to support multiple changes per
129 transaction, which then would reduce several (disjoint, "random") updates to
130 the bitmap into one transaction to the activity log ring buffer.
131*/
132
133/* this defines an element in a tracked set
134 * .colision is for hash table lookup.
135 * When we process a new IO request, we know its sector, thus can deduce the
136 * region number (label) easily. To do the label -> object lookup without a
137 * full list walk, we use a simple hash table.
138 *
139 * .list is on one of three lists:
140 * in_use: currently in use (refcnt > 0, lc_number != LC_FREE)
141 * lru: unused but ready to be reused or recycled
142 * (ts_refcnt == 0, lc_number != LC_FREE),
143 * free: unused but ready to be recycled
144 * (ts_refcnt == 0, lc_number == LC_FREE),
145 *
146 * an element is said to be "in the active set",
147 * if either on "in_use" or "lru", i.e. lc_number != LC_FREE.
148 *
149 * DRBD currently (May 2009) only uses 61 elements on the resync lru_cache
150 * (total memory usage 2 pages), and up to 3833 elements on the act_log
151 * lru_cache, totalling ~215 kB for 64bit architechture, ~53 pages.
152 *
153 * We usually do not actually free these objects again, but only "recycle"
154 * them, as the change "index: -old_label, +LC_FREE" would need a transaction
155 * as well. Which also means that using a kmem_cache to allocate the objects
156 * from wastes some resources.
157 * But it avoids high order page allocations in kmalloc.
158 */
159struct lc_element {
160 struct hlist_node colision;
161 struct list_head list; /* LRU list or free list */
162 unsigned refcnt;
163 /* back "pointer" into ts_cache->element[index],
164 * for paranoia, and for "ts_element_to_index" */
165 unsigned lc_index;
166 /* if we want to track a larger set of objects,
167 * it needs to become arch independend u64 */
168 unsigned lc_number;
169
170 /* special label when on free list */
171#define LC_FREE (~0U)
172};
173
174struct lru_cache {
175 /* the least recently used item is kept at lru->prev */
176 struct list_head lru;
177 struct list_head free;
178 struct list_head in_use;
179
180 /* the pre-created kmem cache to allocate the objects from */
181 struct kmem_cache *lc_cache;
182
183 /* size of tracked objects, used to memset(,0,) them in lc_reset */
184 size_t element_size;
185 /* offset of struct lc_element member in the tracked object */
186 size_t element_off;
187
188 /* number of elements (indices) */
189 unsigned int nr_elements;
190 /* Arbitrary limit on maximum tracked objects. Practical limit is much
191 * lower due to allocation failures, probably. For typical use cases,
192 * nr_elements should be a few thousand at most.
193 * This also limits the maximum value of ts_element.ts_index, allowing the
194 * 8 high bits of .ts_index to be overloaded with flags in the future. */
195#define LC_MAX_ACTIVE (1<<24)
196
197 /* statistics */
198 unsigned used; /* number of lelements currently on in_use list */
199 unsigned long hits, misses, starving, dirty, changed;
200
201 /* see below: flag-bits for lru_cache */
202 unsigned long flags;
203
204 /* when changing the label of an index element */
205 unsigned int new_number;
206
207 /* for paranoia when changing the label of an index element */
208 struct lc_element *changing_element;
209
210 void *lc_private;
211 const char *name;
212
213 /* nr_elements there */
214 struct hlist_head *lc_slot;
215 struct lc_element **lc_element;
216};
217
218
219/* flag-bits for lru_cache */
220enum {
221 /* debugging aid, to catch concurrent access early.
222 * user needs to guarantee exclusive access by proper locking! */
223 __LC_PARANOIA,
224 /* if we need to change the set, but currently there is a changing
225 * transaction pending, we are "dirty", and must deferr further
226 * changing requests */
227 __LC_DIRTY,
228 /* if we need to change the set, but currently there is no free nor
229 * unused element available, we are "starving", and must not give out
230 * further references, to guarantee that eventually some refcnt will
231 * drop to zero and we will be able to make progress again, changing
232 * the set, writing the transaction.
233 * if the statistics say we are frequently starving,
234 * nr_elements is too small. */
235 __LC_STARVING,
236};
237#define LC_PARANOIA (1<<__LC_PARANOIA)
238#define LC_DIRTY (1<<__LC_DIRTY)
239#define LC_STARVING (1<<__LC_STARVING)
240
241extern struct lru_cache *lc_create(const char *name, struct kmem_cache *cache,
242 unsigned e_count, size_t e_size, size_t e_off);
243extern void lc_reset(struct lru_cache *lc);
244extern void lc_destroy(struct lru_cache *lc);
245extern void lc_set(struct lru_cache *lc, unsigned int enr, int index);
246extern void lc_del(struct lru_cache *lc, struct lc_element *element);
247
248extern struct lc_element *lc_try_get(struct lru_cache *lc, unsigned int enr);
249extern struct lc_element *lc_find(struct lru_cache *lc, unsigned int enr);
250extern struct lc_element *lc_get(struct lru_cache *lc, unsigned int enr);
251extern unsigned int lc_put(struct lru_cache *lc, struct lc_element *e);
252extern void lc_changed(struct lru_cache *lc, struct lc_element *e);
253
254struct seq_file;
255extern size_t lc_seq_printf_stats(struct seq_file *seq, struct lru_cache *lc);
256
257extern void lc_seq_dump_details(struct seq_file *seq, struct lru_cache *lc, char *utext,
258 void (*detail) (struct seq_file *, struct lc_element *));
259
260/**
261 * lc_try_lock - can be used to stop lc_get() from changing the tracked set
262 * @lc: the lru cache to operate on
263 *
264 * Note that the reference counts and order on the active and lru lists may
265 * still change. Returns true if we aquired the lock.
266 */
267static inline int lc_try_lock(struct lru_cache *lc)
268{
269 return !test_and_set_bit(__LC_DIRTY, &lc->flags);
270}
271
272/**
273 * lc_unlock - unlock @lc, allow lc_get() to change the set again
274 * @lc: the lru cache to operate on
275 */
276static inline void lc_unlock(struct lru_cache *lc)
277{
278 clear_bit(__LC_DIRTY, &lc->flags);
279 smp_mb__after_clear_bit();
280}
281
282static inline int lc_is_used(struct lru_cache *lc, unsigned int enr)
283{
284 struct lc_element *e = lc_find(lc, enr);
285 return e && e->refcnt;
286}
287
288#define lc_entry(ptr, type, member) \
289 container_of(ptr, type, member)
290
291extern struct lc_element *lc_element_by_index(struct lru_cache *lc, unsigned i);
292extern unsigned int lc_index_of(struct lru_cache *lc, struct lc_element *e);
293
294#endif
diff --git a/include/linux/lsm_audit.h b/include/linux/lsm_audit.h
index 190c37854870..f78f83d7663f 100644
--- a/include/linux/lsm_audit.h
+++ b/include/linux/lsm_audit.h
@@ -26,14 +26,15 @@
26 26
27/* Auxiliary data to use in generating the audit record. */ 27/* Auxiliary data to use in generating the audit record. */
28struct common_audit_data { 28struct common_audit_data {
29 char type; 29 char type;
30#define LSM_AUDIT_DATA_FS 1 30#define LSM_AUDIT_DATA_FS 1
31#define LSM_AUDIT_DATA_NET 2 31#define LSM_AUDIT_DATA_NET 2
32#define LSM_AUDIT_DATA_CAP 3 32#define LSM_AUDIT_DATA_CAP 3
33#define LSM_AUDIT_DATA_IPC 4 33#define LSM_AUDIT_DATA_IPC 4
34#define LSM_AUDIT_DATA_TASK 5 34#define LSM_AUDIT_DATA_TASK 5
35#define LSM_AUDIT_DATA_KEY 6 35#define LSM_AUDIT_DATA_KEY 6
36#define LSM_AUDIT_NO_AUDIT 7 36#define LSM_AUDIT_NO_AUDIT 7
37#define LSM_AUDIT_DATA_KMOD 8
37 struct task_struct *tsk; 38 struct task_struct *tsk;
38 union { 39 union {
39 struct { 40 struct {
@@ -66,6 +67,7 @@ struct common_audit_data {
66 char *key_desc; 67 char *key_desc;
67 } key_struct; 68 } key_struct;
68#endif 69#endif
70 char *kmod_name;
69 } u; 71 } u;
70 /* this union contains LSM specific data */ 72 /* this union contains LSM specific data */
71 union { 73 union {
diff --git a/include/linux/magic.h b/include/linux/magic.h
index 76285e01b39e..eb9800f05782 100644
--- a/include/linux/magic.h
+++ b/include/linux/magic.h
@@ -52,7 +52,6 @@
52#define CGROUP_SUPER_MAGIC 0x27e0eb 52#define CGROUP_SUPER_MAGIC 0x27e0eb
53 53
54#define FUTEXFS_SUPER_MAGIC 0xBAD1DEA 54#define FUTEXFS_SUPER_MAGIC 0xBAD1DEA
55#define INOTIFYFS_SUPER_MAGIC 0x2BAD1DEA
56 55
57#define STACK_END_MAGIC 0x57AC6E9D 56#define STACK_END_MAGIC 0x57AC6E9D
58 57
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index bf9213b2db8f..44301c6affa8 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -54,6 +54,11 @@ extern void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru);
54extern void mem_cgroup_del_lru(struct page *page); 54extern void mem_cgroup_del_lru(struct page *page);
55extern void mem_cgroup_move_lists(struct page *page, 55extern void mem_cgroup_move_lists(struct page *page,
56 enum lru_list from, enum lru_list to); 56 enum lru_list from, enum lru_list to);
57
58/* For coalescing uncharge for reducing memcg' overhead*/
59extern void mem_cgroup_uncharge_start(void);
60extern void mem_cgroup_uncharge_end(void);
61
57extern void mem_cgroup_uncharge_page(struct page *page); 62extern void mem_cgroup_uncharge_page(struct page *page);
58extern void mem_cgroup_uncharge_cache_page(struct page *page); 63extern void mem_cgroup_uncharge_cache_page(struct page *page);
59extern int mem_cgroup_shmem_charge_fallback(struct page *page, 64extern int mem_cgroup_shmem_charge_fallback(struct page *page,
@@ -68,6 +73,7 @@ extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan,
68extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask); 73extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask);
69int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem); 74int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem);
70 75
76extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
71extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p); 77extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
72 78
73static inline 79static inline
@@ -80,6 +86,8 @@ int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
80 return cgroup == mem; 86 return cgroup == mem;
81} 87}
82 88
89extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem);
90
83extern int 91extern int
84mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr); 92mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr);
85extern void mem_cgroup_end_migration(struct mem_cgroup *mem, 93extern void mem_cgroup_end_migration(struct mem_cgroup *mem,
@@ -116,8 +124,7 @@ static inline bool mem_cgroup_disabled(void)
116 return false; 124 return false;
117} 125}
118 126
119extern bool mem_cgroup_oom_called(struct task_struct *task); 127void mem_cgroup_update_file_mapped(struct page *page, int val);
120void mem_cgroup_update_mapped_file_stat(struct page *page, int val);
121unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, 128unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
122 gfp_t gfp_mask, int nid, 129 gfp_t gfp_mask, int nid,
123 int zid); 130 int zid);
@@ -151,6 +158,14 @@ static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr)
151{ 158{
152} 159}
153 160
161static inline void mem_cgroup_uncharge_start(void)
162{
163}
164
165static inline void mem_cgroup_uncharge_end(void)
166{
167}
168
154static inline void mem_cgroup_uncharge_page(struct page *page) 169static inline void mem_cgroup_uncharge_page(struct page *page)
155{ 170{
156} 171}
@@ -189,6 +204,11 @@ mem_cgroup_move_lists(struct page *page, enum lru_list from, enum lru_list to)
189{ 204{
190} 205}
191 206
207static inline struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page)
208{
209 return NULL;
210}
211
192static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem) 212static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem)
193{ 213{
194 return 1; 214 return 1;
@@ -200,6 +220,11 @@ static inline int task_in_mem_cgroup(struct task_struct *task,
200 return 1; 220 return 1;
201} 221}
202 222
223static inline struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem)
224{
225 return NULL;
226}
227
203static inline int 228static inline int
204mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr) 229mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr)
205{ 230{
@@ -232,11 +257,6 @@ static inline bool mem_cgroup_disabled(void)
232 return true; 257 return true;
233} 258}
234 259
235static inline bool mem_cgroup_oom_called(struct task_struct *task)
236{
237 return false;
238}
239
240static inline int 260static inline int
241mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg) 261mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg)
242{ 262{
@@ -274,7 +294,7 @@ mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p)
274{ 294{
275} 295}
276 296
277static inline void mem_cgroup_update_mapped_file_stat(struct page *page, 297static inline void mem_cgroup_update_file_mapped(struct page *page,
278 int val) 298 int val)
279{ 299{
280} 300}
diff --git a/include/linux/memory.h b/include/linux/memory.h
index 37fa19b34ef5..85582e1bcee9 100644
--- a/include/linux/memory.h
+++ b/include/linux/memory.h
@@ -36,6 +36,8 @@ struct memory_block {
36 struct sys_device sysdev; 36 struct sys_device sysdev;
37}; 37};
38 38
39int arch_get_memory_phys_device(unsigned long start_pfn);
40
39/* These states are exposed to userspace as text strings in sysfs */ 41/* These states are exposed to userspace as text strings in sysfs */
40#define MEM_ONLINE (1<<0) /* exposed to userspace */ 42#define MEM_ONLINE (1<<0) /* exposed to userspace */
41#define MEM_GOING_OFFLINE (1<<1) /* exposed to userspace */ 43#define MEM_GOING_OFFLINE (1<<1) /* exposed to userspace */
@@ -50,6 +52,19 @@ struct memory_notify {
50 int status_change_nid; 52 int status_change_nid;
51}; 53};
52 54
55/*
56 * During pageblock isolation, count the number of pages within the
57 * range [start_pfn, start_pfn + nr_pages) which are owned by code
58 * in the notifier chain.
59 */
60#define MEM_ISOLATE_COUNT (1<<0)
61
62struct memory_isolate_notify {
63 unsigned long start_pfn; /* Start of range to check */
64 unsigned int nr_pages; /* # pages in range to check */
65 unsigned int pages_found; /* # pages owned found by callbacks */
66};
67
53struct notifier_block; 68struct notifier_block;
54struct mem_section; 69struct mem_section;
55 70
@@ -76,14 +91,28 @@ static inline int memory_notify(unsigned long val, void *v)
76{ 91{
77 return 0; 92 return 0;
78} 93}
94static inline int register_memory_isolate_notifier(struct notifier_block *nb)
95{
96 return 0;
97}
98static inline void unregister_memory_isolate_notifier(struct notifier_block *nb)
99{
100}
101static inline int memory_isolate_notify(unsigned long val, void *v)
102{
103 return 0;
104}
79#else 105#else
80extern int register_memory_notifier(struct notifier_block *nb); 106extern int register_memory_notifier(struct notifier_block *nb);
81extern void unregister_memory_notifier(struct notifier_block *nb); 107extern void unregister_memory_notifier(struct notifier_block *nb);
108extern int register_memory_isolate_notifier(struct notifier_block *nb);
109extern void unregister_memory_isolate_notifier(struct notifier_block *nb);
82extern int register_new_memory(int, struct mem_section *); 110extern int register_new_memory(int, struct mem_section *);
83extern int unregister_memory_section(struct mem_section *); 111extern int unregister_memory_section(struct mem_section *);
84extern int memory_dev_init(void); 112extern int memory_dev_init(void);
85extern int remove_memory_block(unsigned long, struct mem_section *, int); 113extern int remove_memory_block(unsigned long, struct mem_section *, int);
86extern int memory_notify(unsigned long val, void *v); 114extern int memory_notify(unsigned long val, void *v);
115extern int memory_isolate_notify(unsigned long val, void *v);
87extern struct memory_block *find_memory_block(struct mem_section *); 116extern struct memory_block *find_memory_block(struct mem_section *);
88#define CONFIG_MEM_BLOCK_SIZE (PAGES_PER_SECTION<<PAGE_SHIFT) 117#define CONFIG_MEM_BLOCK_SIZE (PAGES_PER_SECTION<<PAGE_SHIFT)
89enum mem_add_context { BOOT, HOTPLUG }; 118enum mem_add_context { BOOT, HOTPLUG };
diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h
index fed969281a41..35b07b773e6c 100644
--- a/include/linux/memory_hotplug.h
+++ b/include/linux/memory_hotplug.h
@@ -69,7 +69,6 @@ extern void online_page(struct page *page);
69/* VM interface that may be used by firmware interface */ 69/* VM interface that may be used by firmware interface */
70extern int online_pages(unsigned long, unsigned long); 70extern int online_pages(unsigned long, unsigned long);
71extern void __offline_isolated_pages(unsigned long, unsigned long); 71extern void __offline_isolated_pages(unsigned long, unsigned long);
72extern int offline_pages(unsigned long, unsigned long, unsigned long);
73 72
74/* reasonably generic interface to expand the physical pages in a zone */ 73/* reasonably generic interface to expand the physical pages in a zone */
75extern int __add_pages(int nid, struct zone *zone, unsigned long start_pfn, 74extern int __add_pages(int nid, struct zone *zone, unsigned long start_pfn,
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h
index 085c903fe0f1..1cc966cd3e5f 100644
--- a/include/linux/mempolicy.h
+++ b/include/linux/mempolicy.h
@@ -201,6 +201,7 @@ extern void mpol_fix_fork_child_flag(struct task_struct *p);
201extern struct zonelist *huge_zonelist(struct vm_area_struct *vma, 201extern struct zonelist *huge_zonelist(struct vm_area_struct *vma,
202 unsigned long addr, gfp_t gfp_flags, 202 unsigned long addr, gfp_t gfp_flags,
203 struct mempolicy **mpol, nodemask_t **nodemask); 203 struct mempolicy **mpol, nodemask_t **nodemask);
204extern bool init_nodemask_of_mempolicy(nodemask_t *mask);
204extern unsigned slab_node(struct mempolicy *policy); 205extern unsigned slab_node(struct mempolicy *policy);
205 206
206extern enum zone_type policy_zone; 207extern enum zone_type policy_zone;
@@ -328,6 +329,8 @@ static inline struct zonelist *huge_zonelist(struct vm_area_struct *vma,
328 return node_zonelist(0, gfp_flags); 329 return node_zonelist(0, gfp_flags);
329} 330}
330 331
332static inline bool init_nodemask_of_mempolicy(nodemask_t *m) { return false; }
333
331static inline int do_migrate_pages(struct mm_struct *mm, 334static inline int do_migrate_pages(struct mm_struct *mm,
332 const nodemask_t *from_nodes, 335 const nodemask_t *from_nodes,
333 const nodemask_t *to_nodes, int flags) 336 const nodemask_t *to_nodes, int flags)
diff --git a/include/linux/mfd/88pm860x.h b/include/linux/mfd/88pm860x.h
new file mode 100644
index 000000000000..73f92c5feea2
--- /dev/null
+++ b/include/linux/mfd/88pm860x.h
@@ -0,0 +1,375 @@
1/*
2 * Marvell 88PM860x Interface
3 *
4 * Copyright (C) 2009 Marvell International Ltd.
5 * Haojian Zhuang <haojian.zhuang@marvell.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#ifndef __LINUX_MFD_88PM860X_H
13#define __LINUX_MFD_88PM860X_H
14
15#include <linux/interrupt.h>
16
17#define MFD_NAME_SIZE (40)
18
19enum {
20 CHIP_INVALID = 0,
21 CHIP_PM8606,
22 CHIP_PM8607,
23 CHIP_MAX,
24};
25
26enum {
27 PM8606_ID_INVALID,
28 PM8606_ID_BACKLIGHT,
29 PM8606_ID_LED,
30 PM8606_ID_VIBRATOR,
31 PM8606_ID_TOUCH,
32 PM8606_ID_SOUND,
33 PM8606_ID_CHARGER,
34 PM8606_ID_MAX,
35};
36
37enum {
38 PM8606_BACKLIGHT1 = 0,
39 PM8606_BACKLIGHT2,
40 PM8606_BACKLIGHT3,
41};
42
43enum {
44 PM8606_LED1_RED = 0,
45 PM8606_LED1_GREEN,
46 PM8606_LED1_BLUE,
47 PM8606_LED2_RED,
48 PM8606_LED2_GREEN,
49 PM8606_LED2_BLUE,
50 PM8607_LED_VIBRATOR,
51};
52
53
54/* 8606 Registers */
55#define PM8606_DCM_BOOST (0x00)
56#define PM8606_PWM (0x01)
57
58/* Backlight Registers */
59#define PM8606_WLED1A (0x02)
60#define PM8606_WLED1B (0x03)
61#define PM8606_WLED2A (0x04)
62#define PM8606_WLED2B (0x05)
63#define PM8606_WLED3A (0x06)
64#define PM8606_WLED3B (0x07)
65
66/* LED Registers */
67#define PM8606_RGB2A (0x08)
68#define PM8606_RGB2B (0x09)
69#define PM8606_RGB2C (0x0A)
70#define PM8606_RGB2D (0x0B)
71#define PM8606_RGB1A (0x0C)
72#define PM8606_RGB1B (0x0D)
73#define PM8606_RGB1C (0x0E)
74#define PM8606_RGB1D (0x0F)
75
76#define PM8606_PREREGULATORA (0x10)
77#define PM8606_PREREGULATORB (0x11)
78#define PM8606_VIBRATORA (0x12)
79#define PM8606_VIBRATORB (0x13)
80#define PM8606_VCHG (0x14)
81#define PM8606_VSYS (0x15)
82#define PM8606_MISC (0x16)
83#define PM8606_CHIP_ID (0x17)
84#define PM8606_STATUS (0x18)
85#define PM8606_FLAGS (0x19)
86#define PM8606_PROTECTA (0x1A)
87#define PM8606_PROTECTB (0x1B)
88#define PM8606_PROTECTC (0x1C)
89
90/* Bit definitions of PM8606 registers */
91#define PM8606_DCM_500MA (0x0) /* current limit */
92#define PM8606_DCM_750MA (0x1)
93#define PM8606_DCM_1000MA (0x2)
94#define PM8606_DCM_1250MA (0x3)
95#define PM8606_DCM_250MV (0x0 << 2)
96#define PM8606_DCM_300MV (0x1 << 2)
97#define PM8606_DCM_350MV (0x2 << 2)
98#define PM8606_DCM_400MV (0x3 << 2)
99
100#define PM8606_PWM_31200HZ (0x0)
101#define PM8606_PWM_15600HZ (0x1)
102#define PM8606_PWM_7800HZ (0x2)
103#define PM8606_PWM_3900HZ (0x3)
104#define PM8606_PWM_1950HZ (0x4)
105#define PM8606_PWM_976HZ (0x5)
106#define PM8606_PWM_488HZ (0x6)
107#define PM8606_PWM_244HZ (0x7)
108#define PM8606_PWM_FREQ_MASK (0x7)
109
110#define PM8606_WLED_ON (1 << 0)
111#define PM8606_WLED_CURRENT(x) ((x & 0x1F) << 1)
112
113#define PM8606_LED_CURRENT(x) (((x >> 2) & 0x07) << 5)
114
115#define PM8606_VSYS_EN (1 << 1)
116
117#define PM8606_MISC_OSC_EN (1 << 4)
118
119enum {
120 PM8607_ID_BUCK1 = 0,
121 PM8607_ID_BUCK2,
122 PM8607_ID_BUCK3,
123
124 PM8607_ID_LDO1,
125 PM8607_ID_LDO2,
126 PM8607_ID_LDO3,
127 PM8607_ID_LDO4,
128 PM8607_ID_LDO5,
129 PM8607_ID_LDO6,
130 PM8607_ID_LDO7,
131 PM8607_ID_LDO8,
132 PM8607_ID_LDO9,
133 PM8607_ID_LDO10,
134 PM8607_ID_LDO12,
135 PM8607_ID_LDO14,
136
137 PM8607_ID_RG_MAX,
138};
139
140#define PM8607_VERSION (0x40) /* 8607 chip ID */
141#define PM8607_VERSION_MASK (0xF0) /* 8607 chip ID mask */
142
143/* Interrupt Registers */
144#define PM8607_STATUS_1 (0x01)
145#define PM8607_STATUS_2 (0x02)
146#define PM8607_INT_STATUS1 (0x03)
147#define PM8607_INT_STATUS2 (0x04)
148#define PM8607_INT_STATUS3 (0x05)
149#define PM8607_INT_MASK_1 (0x06)
150#define PM8607_INT_MASK_2 (0x07)
151#define PM8607_INT_MASK_3 (0x08)
152
153/* Regulator Control Registers */
154#define PM8607_LDO1 (0x10)
155#define PM8607_LDO2 (0x11)
156#define PM8607_LDO3 (0x12)
157#define PM8607_LDO4 (0x13)
158#define PM8607_LDO5 (0x14)
159#define PM8607_LDO6 (0x15)
160#define PM8607_LDO7 (0x16)
161#define PM8607_LDO8 (0x17)
162#define PM8607_LDO9 (0x18)
163#define PM8607_LDO10 (0x19)
164#define PM8607_LDO12 (0x1A)
165#define PM8607_LDO14 (0x1B)
166#define PM8607_SLEEP_MODE1 (0x1C)
167#define PM8607_SLEEP_MODE2 (0x1D)
168#define PM8607_SLEEP_MODE3 (0x1E)
169#define PM8607_SLEEP_MODE4 (0x1F)
170#define PM8607_GO (0x20)
171#define PM8607_SLEEP_BUCK1 (0x21)
172#define PM8607_SLEEP_BUCK2 (0x22)
173#define PM8607_SLEEP_BUCK3 (0x23)
174#define PM8607_BUCK1 (0x24)
175#define PM8607_BUCK2 (0x25)
176#define PM8607_BUCK3 (0x26)
177#define PM8607_BUCK_CONTROLS (0x27)
178#define PM8607_SUPPLIES_EN11 (0x2B)
179#define PM8607_SUPPLIES_EN12 (0x2C)
180#define PM8607_GROUP1 (0x2D)
181#define PM8607_GROUP2 (0x2E)
182#define PM8607_GROUP3 (0x2F)
183#define PM8607_GROUP4 (0x30)
184#define PM8607_GROUP5 (0x31)
185#define PM8607_GROUP6 (0x32)
186#define PM8607_SUPPLIES_EN21 (0x33)
187#define PM8607_SUPPLIES_EN22 (0x34)
188
189/* Vibrator Control Registers */
190#define PM8607_VIBRATOR_SET (0x28)
191#define PM8607_VIBRATOR_PWM (0x29)
192
193/* GPADC Registers */
194#define PM8607_GP_BIAS1 (0x4F)
195#define PM8607_MEAS_EN1 (0x50)
196#define PM8607_MEAS_EN2 (0x51)
197#define PM8607_MEAS_EN3 (0x52)
198#define PM8607_MEAS_OFF_TIME1 (0x53)
199#define PM8607_MEAS_OFF_TIME2 (0x54)
200#define PM8607_TSI_PREBIAS (0x55) /* prebias time */
201#define PM8607_PD_PREBIAS (0x56) /* prebias time */
202#define PM8607_GPADC_MISC1 (0x57)
203
204/* RTC Control Registers */
205#define PM8607_RTC1 (0xA0)
206#define PM8607_RTC_COUNTER1 (0xA1)
207#define PM8607_RTC_COUNTER2 (0xA2)
208#define PM8607_RTC_COUNTER3 (0xA3)
209#define PM8607_RTC_COUNTER4 (0xA4)
210#define PM8607_RTC_EXPIRE1 (0xA5)
211#define PM8607_RTC_EXPIRE2 (0xA6)
212#define PM8607_RTC_EXPIRE3 (0xA7)
213#define PM8607_RTC_EXPIRE4 (0xA8)
214#define PM8607_RTC_TRIM1 (0xA9)
215#define PM8607_RTC_TRIM2 (0xAA)
216#define PM8607_RTC_TRIM3 (0xAB)
217#define PM8607_RTC_TRIM4 (0xAC)
218#define PM8607_RTC_MISC1 (0xAD)
219#define PM8607_RTC_MISC2 (0xAE)
220#define PM8607_RTC_MISC3 (0xAF)
221
222/* Misc Registers */
223#define PM8607_CHIP_ID (0x00)
224#define PM8607_B0_MISC1 (0x0C)
225#define PM8607_LDO1 (0x10)
226#define PM8607_DVC3 (0x26)
227#define PM8607_A1_MISC1 (0x40)
228
229/* bit definitions of Status Query Interface */
230#define PM8607_STATUS_CC (1 << 3)
231#define PM8607_STATUS_PEN (1 << 4)
232#define PM8607_STATUS_HEADSET (1 << 5)
233#define PM8607_STATUS_HOOK (1 << 6)
234#define PM8607_STATUS_MICIN (1 << 7)
235#define PM8607_STATUS_ONKEY (1 << 8)
236#define PM8607_STATUS_EXTON (1 << 9)
237#define PM8607_STATUS_CHG (1 << 10)
238#define PM8607_STATUS_BAT (1 << 11)
239#define PM8607_STATUS_VBUS (1 << 12)
240#define PM8607_STATUS_OV (1 << 13)
241
242/* bit definitions of BUCK3 */
243#define PM8607_BUCK3_DOUBLE (1 << 6)
244
245/* bit definitions of Misc1 */
246#define PM8607_A1_MISC1_PI2C (1 << 0)
247#define PM8607_B0_MISC1_INV_INT (1 << 0)
248#define PM8607_B0_MISC1_INT_CLEAR (1 << 1)
249#define PM8607_B0_MISC1_INT_MASK (1 << 2)
250#define PM8607_B0_MISC1_PI2C (1 << 3)
251#define PM8607_B0_MISC1_RESET (1 << 6)
252
253/* bits definitions of GPADC */
254#define PM8607_GPADC_EN (1 << 0)
255#define PM8607_GPADC_PREBIAS_MASK (3 << 1)
256#define PM8607_GPADC_SLOT_CYCLE_MASK (3 << 3) /* slow mode */
257#define PM8607_GPADC_OFF_SCALE_MASK (3 << 5) /* GP sleep mode */
258#define PM8607_GPADC_SW_CAL_MASK (1 << 7)
259
260#define PM8607_PD_PREBIAS_MASK (0x1F << 0)
261#define PM8607_PD_PRECHG_MASK (7 << 5)
262
263/* Interrupt Number in 88PM8607 */
264enum {
265 PM8607_IRQ_ONKEY,
266 PM8607_IRQ_EXTON,
267 PM8607_IRQ_CHG,
268 PM8607_IRQ_BAT,
269 PM8607_IRQ_RTC,
270 PM8607_IRQ_CC,
271 PM8607_IRQ_VBAT,
272 PM8607_IRQ_VCHG,
273 PM8607_IRQ_VSYS,
274 PM8607_IRQ_TINT,
275 PM8607_IRQ_GPADC0,
276 PM8607_IRQ_GPADC1,
277 PM8607_IRQ_GPADC2,
278 PM8607_IRQ_GPADC3,
279 PM8607_IRQ_AUDIO_SHORT,
280 PM8607_IRQ_PEN,
281 PM8607_IRQ_HEADSET,
282 PM8607_IRQ_HOOK,
283 PM8607_IRQ_MICIN,
284 PM8607_IRQ_CHG_FAIL,
285 PM8607_IRQ_CHG_DONE,
286 PM8607_IRQ_CHG_FAULT,
287};
288
289enum {
290 PM8607_CHIP_A0 = 0x40,
291 PM8607_CHIP_A1 = 0x41,
292 PM8607_CHIP_B0 = 0x48,
293};
294
295struct pm860x_chip {
296 struct device *dev;
297 struct mutex io_lock;
298 struct mutex irq_lock;
299 struct i2c_client *client;
300 struct i2c_client *companion; /* companion chip client */
301
302 int buck3_double; /* DVC ramp slope double */
303 unsigned short companion_addr;
304 int id;
305 int irq_mode;
306 int irq_base;
307 int core_irq;
308 unsigned char chip_version;
309
310};
311
312#define PM8607_MAX_REGULATOR 15 /* 3 Bucks, 12 LDOs */
313
314enum {
315 GI2C_PORT = 0,
316 PI2C_PORT,
317};
318
319struct pm860x_backlight_pdata {
320 int id;
321 int pwm;
322 int iset;
323 unsigned long flags;
324};
325
326struct pm860x_led_pdata {
327 int id;
328 int iset;
329 unsigned long flags;
330};
331
332struct pm860x_touch_pdata {
333 int gpadc_prebias;
334 int slot_cycle;
335 int off_scale;
336 int sw_cal;
337 int tsi_prebias; /* time, slot */
338 int pen_prebias; /* time, slot */
339 int pen_prechg; /* time, slot */
340 int res_x; /* resistor of Xplate */
341 unsigned long flags;
342};
343
344struct pm860x_power_pdata {
345 unsigned fast_charge; /* charge current */
346};
347
348struct pm860x_platform_data {
349 struct pm860x_backlight_pdata *backlight;
350 struct pm860x_led_pdata *led;
351 struct pm860x_touch_pdata *touch;
352 struct pm860x_power_pdata *power;
353
354 unsigned short companion_addr; /* I2C address of companion chip */
355 int i2c_port; /* Controlled by GI2C or PI2C */
356 int irq_mode; /* Clear interrupt by read/write(0/1) */
357 int irq_base; /* IRQ base number of 88pm860x */
358 struct regulator_init_data *regulator[PM8607_MAX_REGULATOR];
359};
360
361extern char pm860x_backlight_name[][MFD_NAME_SIZE];
362extern char pm860x_led_name[][MFD_NAME_SIZE];
363
364extern int pm860x_reg_read(struct i2c_client *, int);
365extern int pm860x_reg_write(struct i2c_client *, int, unsigned char);
366extern int pm860x_bulk_read(struct i2c_client *, int, int, unsigned char *);
367extern int pm860x_bulk_write(struct i2c_client *, int, int, unsigned char *);
368extern int pm860x_set_bits(struct i2c_client *, int, unsigned char,
369 unsigned char);
370
371extern int pm860x_device_init(struct pm860x_chip *chip,
372 struct pm860x_platform_data *pdata);
373extern void pm860x_device_exit(struct pm860x_chip *chip);
374
375#endif /* __LINUX_MFD_88PM860X_H */
diff --git a/include/linux/mfd/ab3100.h b/include/linux/mfd/ab3100.h
index e9aa4c9d749d..9a881c305a50 100644
--- a/include/linux/mfd/ab3100.h
+++ b/include/linux/mfd/ab3100.h
@@ -6,7 +6,6 @@
6 */ 6 */
7 7
8#include <linux/device.h> 8#include <linux/device.h>
9#include <linux/workqueue.h>
10#include <linux/regulator/machine.h> 9#include <linux/regulator/machine.h>
11 10
12#ifndef MFD_AB3100_H 11#ifndef MFD_AB3100_H
@@ -74,7 +73,6 @@
74 * @testreg_client: secondary client for test registers 73 * @testreg_client: secondary client for test registers
75 * @chip_name: name of this chip variant 74 * @chip_name: name of this chip variant
76 * @chip_id: 8 bit chip ID for this chip variant 75 * @chip_id: 8 bit chip ID for this chip variant
77 * @work: an event handling worker
78 * @event_subscribers: event subscribers are listed here 76 * @event_subscribers: event subscribers are listed here
79 * @startup_events: a copy of the first reading of the event registers 77 * @startup_events: a copy of the first reading of the event registers
80 * @startup_events_read: whether the first events have been read 78 * @startup_events_read: whether the first events have been read
@@ -90,7 +88,6 @@ struct ab3100 {
90 struct i2c_client *testreg_client; 88 struct i2c_client *testreg_client;
91 char chip_name[32]; 89 char chip_name[32];
92 u8 chip_id; 90 u8 chip_id;
93 struct work_struct work;
94 struct blocking_notifier_head event_subscribers; 91 struct blocking_notifier_head event_subscribers;
95 u32 startup_events; 92 u32 startup_events;
96 bool startup_events_read; 93 bool startup_events_read;
diff --git a/include/linux/mfd/ab4500.h b/include/linux/mfd/ab4500.h
new file mode 100644
index 000000000000..a42a7033ae53
--- /dev/null
+++ b/include/linux/mfd/ab4500.h
@@ -0,0 +1,262 @@
1/*
2 * Copyright (C) 2009 ST-Ericsson
3 *
4 * Author: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.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 * AB4500 device core funtions, for client access
11 */
12#ifndef MFD_AB4500_H
13#define MFD_AB4500_H
14
15#include <linux/device.h>
16
17/*
18 * AB4500 bank addresses
19 */
20#define AB4500_SYS_CTRL1_BLOCK 0x1
21#define AB4500_SYS_CTRL2_BLOCK 0x2
22#define AB4500_REGU_CTRL1 0x3
23#define AB4500_REGU_CTRL2 0x4
24#define AB4500_USB 0x5
25#define AB4500_TVOUT 0x6
26#define AB4500_DBI 0x7
27#define AB4500_ECI_AV_ACC 0x8
28#define AB4500_RESERVED 0x9
29#define AB4500_GPADC 0xA
30#define AB4500_CHARGER 0xB
31#define AB4500_GAS_GAUGE 0xC
32#define AB4500_AUDIO 0xD
33#define AB4500_INTERRUPT 0xE
34#define AB4500_RTC 0xF
35#define AB4500_MISC 0x10
36#define AB4500_DEBUG 0x12
37#define AB4500_PROD_TEST 0x13
38#define AB4500_OTP_EMUL 0x15
39
40/*
41 * System control 1 register offsets.
42 * Bank = 0x01
43 */
44#define AB4500_TURNON_STAT_REG 0x0100
45#define AB4500_RESET_STAT_REG 0x0101
46#define AB4500_PONKEY1_PRESS_STAT_REG 0x0102
47
48#define AB4500_FSM_STAT1_REG 0x0140
49#define AB4500_FSM_STAT2_REG 0x0141
50#define AB4500_SYSCLK_REQ_STAT_REG 0x0142
51#define AB4500_USB_STAT1_REG 0x0143
52#define AB4500_USB_STAT2_REG 0x0144
53#define AB4500_STATUS_SPARE1_REG 0x0145
54#define AB4500_STATUS_SPARE2_REG 0x0146
55
56#define AB4500_CTRL1_REG 0x0180
57#define AB4500_CTRL2_REG 0x0181
58
59/*
60 * System control 2 register offsets.
61 * bank = 0x02
62 */
63#define AB4500_CTRL3_REG 0x0200
64#define AB4500_MAIN_WDOG_CTRL_REG 0x0201
65#define AB4500_MAIN_WDOG_TIMER_REG 0x0202
66#define AB4500_LOW_BAT_REG 0x0203
67#define AB4500_BATT_OK_REG 0x0204
68#define AB4500_SYSCLK_TIMER_REG 0x0205
69#define AB4500_SMPSCLK_CTRL_REG 0x0206
70#define AB4500_SMPSCLK_SEL1_REG 0x0207
71#define AB4500_SMPSCLK_SEL2_REG 0x0208
72#define AB4500_SMPSCLK_SEL3_REG 0x0209
73#define AB4500_SYSULPCLK_CONF_REG 0x020A
74#define AB4500_SYSULPCLK_CTRL1_REG 0x020B
75#define AB4500_SYSCLK_CTRL_REG 0x020C
76#define AB4500_SYSCLK_REQ1_VALID_REG 0x020D
77#define AB4500_SYSCLK_REQ_VALID_REG 0x020E
78#define AB4500_SYSCTRL_SPARE_REG 0x020F
79#define AB4500_PAD_CONF_REG 0x0210
80
81/*
82 * Regu control1 register offsets
83 * Bank = 0x03
84 */
85#define AB4500_REGU_SERIAL_CTRL1_REG 0x0300
86#define AB4500_REGU_SERIAL_CTRL2_REG 0x0301
87#define AB4500_REGU_SERIAL_CTRL3_REG 0x0302
88#define AB4500_REGU_REQ_CTRL1_REG 0x0303
89#define AB4500_REGU_REQ_CTRL2_REG 0x0304
90#define AB4500_REGU_REQ_CTRL3_REG 0x0305
91#define AB4500_REGU_REQ_CTRL4_REG 0x0306
92#define AB4500_REGU_MISC1_REG 0x0380
93#define AB4500_REGU_OTGSUPPLY_CTRL_REG 0x0381
94#define AB4500_REGU_VUSB_CTRL_REG 0x0382
95#define AB4500_REGU_VAUDIO_SUPPLY_REG 0x0383
96#define AB4500_REGU_CTRL1_SPARE_REG 0x0384
97
98/*
99 * Regu control2 Vmod register offsets
100 */
101#define AB4500_REGU_VMOD_REGU_REG 0x0440
102#define AB4500_REGU_VMOD_SEL1_REG 0x0441
103#define AB4500_REGU_VMOD_SEL2_REG 0x0442
104#define AB4500_REGU_CTRL_DISCH_REG 0x0443
105#define AB4500_REGU_CTRL_DISCH2_REG 0x0444
106
107/*
108 * USB/ULPI register offsets
109 * Bank : 0x5
110 */
111#define AB4500_USB_LINE_STAT_REG 0x0580
112#define AB4500_USB_LINE_CTRL1_REG 0x0581
113#define AB4500_USB_LINE_CTRL2_REG 0x0582
114#define AB4500_USB_LINE_CTRL3_REG 0x0583
115#define AB4500_USB_LINE_CTRL4_REG 0x0584
116#define AB4500_USB_LINE_CTRL5_REG 0x0585
117#define AB4500_USB_OTG_CTRL_REG 0x0587
118#define AB4500_USB_OTG_STAT_REG 0x0588
119#define AB4500_USB_OTG_STAT_REG 0x0588
120#define AB4500_USB_CTRL_SPARE_REG 0x0589
121#define AB4500_USB_PHY_CTRL_REG 0x058A
122
123/*
124 * TVOUT / CTRL register offsets
125 * Bank : 0x06
126 */
127#define AB4500_TVOUT_CTRL_REG 0x0680
128
129/*
130 * DBI register offsets
131 * Bank : 0x07
132 */
133#define AB4500_DBI_REG1_REG 0x0700
134#define AB4500_DBI_REG2_REG 0x0701
135
136/*
137 * ECI regsiter offsets
138 * Bank : 0x08
139 */
140#define AB4500_ECI_CTRL_REG 0x0800
141#define AB4500_ECI_HOOKLEVEL_REG 0x0801
142#define AB4500_ECI_DATAOUT_REG 0x0802
143#define AB4500_ECI_DATAIN_REG 0x0803
144
145/*
146 * AV Connector register offsets
147 * Bank : 0x08
148 */
149#define AB4500_AV_CONN_REG 0x0840
150
151/*
152 * Accessory detection register offsets
153 * Bank : 0x08
154 */
155#define AB4500_ACC_DET_DB1_REG 0x0880
156#define AB4500_ACC_DET_DB2_REG 0x0881
157
158/*
159 * GPADC register offsets
160 * Bank : 0x0A
161 */
162#define AB4500_GPADC_CTRL1_REG 0x0A00
163#define AB4500_GPADC_CTRL2_REG 0x0A01
164#define AB4500_GPADC_CTRL3_REG 0x0A02
165#define AB4500_GPADC_AUTO_TIMER_REG 0x0A03
166#define AB4500_GPADC_STAT_REG 0x0A04
167#define AB4500_GPADC_MANDATAL_REG 0x0A05
168#define AB4500_GPADC_MANDATAH_REG 0x0A06
169#define AB4500_GPADC_AUTODATAL_REG 0x0A07
170#define AB4500_GPADC_AUTODATAH_REG 0x0A08
171#define AB4500_GPADC_MUX_CTRL_REG 0x0A09
172
173/*
174 * Charger / status register offfsets
175 * Bank : 0x0B
176 */
177#define AB4500_CH_STATUS1_REG 0x0B00
178#define AB4500_CH_STATUS2_REG 0x0B01
179#define AB4500_CH_USBCH_STAT1_REG 0x0B02
180#define AB4500_CH_USBCH_STAT2_REG 0x0B03
181#define AB4500_CH_FSM_STAT_REG 0x0B04
182#define AB4500_CH_STAT_REG 0x0B05
183
184/*
185 * Charger / control register offfsets
186 * Bank : 0x0B
187 */
188#define AB4500_CH_VOLT_LVL_REG 0x0B40
189
190/*
191 * Charger / main control register offfsets
192 * Bank : 0x0B
193 */
194#define AB4500_MCH_CTRL1 0x0B80
195#define AB4500_MCH_CTRL2 0x0B81
196#define AB4500_MCH_IPT_CURLVL_REG 0x0B82
197#define AB4500_CH_WD_REG 0x0B83
198
199/*
200 * Charger / USB control register offsets
201 * Bank : 0x0B
202 */
203#define AB4500_USBCH_CTRL1_REG 0x0BC0
204#define AB4500_USBCH_CTRL2_REG 0x0BC1
205#define AB4500_USBCH_IPT_CRNTLVL_REG 0x0BC2
206
207/*
208 * RTC bank register offsets
209 * Bank : 0xF
210 */
211#define AB4500_RTC_SOFF_STAT_REG 0x0F00
212#define AB4500_RTC_CC_CONF_REG 0x0F01
213#define AB4500_RTC_READ_REQ_REG 0x0F02
214#define AB4500_RTC_WATCH_TSECMID_REG 0x0F03
215#define AB4500_RTC_WATCH_TSECHI_REG 0x0F04
216#define AB4500_RTC_WATCH_TMIN_LOW_REG 0x0F05
217#define AB4500_RTC_WATCH_TMIN_MID_REG 0x0F06
218#define AB4500_RTC_WATCH_TMIN_HI_REG 0x0F07
219#define AB4500_RTC_ALRM_MIN_LOW_REG 0x0F08
220#define AB4500_RTC_ALRM_MIN_MID_REG 0x0F09
221#define AB4500_RTC_ALRM_MIN_HI_REG 0x0F0A
222#define AB4500_RTC_STAT_REG 0x0F0B
223#define AB4500_RTC_BKUP_CHG_REG 0x0F0C
224#define AB4500_RTC_FORCE_BKUP_REG 0x0F0D
225#define AB4500_RTC_CALIB_REG 0x0F0E
226#define AB4500_RTC_SWITCH_STAT_REG 0x0F0F
227
228/*
229 * PWM Out generators
230 * Bank: 0x10
231 */
232#define AB4500_PWM_OUT_CTRL1_REG 0x1060
233#define AB4500_PWM_OUT_CTRL2_REG 0x1061
234#define AB4500_PWM_OUT_CTRL3_REG 0x1062
235#define AB4500_PWM_OUT_CTRL4_REG 0x1063
236#define AB4500_PWM_OUT_CTRL5_REG 0x1064
237#define AB4500_PWM_OUT_CTRL6_REG 0x1065
238#define AB4500_PWM_OUT_CTRL7_REG 0x1066
239
240#define AB4500_I2C_PAD_CTRL_REG 0x1067
241#define AB4500_REV_REG 0x1080
242
243/**
244 * struct ab4500
245 * @spi: spi device structure
246 * @tx_buf: transmit buffer
247 * @rx_buf: receive buffer
248 * @lock: sync primitive
249 */
250struct ab4500 {
251 struct spi_device *spi;
252 unsigned long tx_buf[4];
253 unsigned long rx_buf[4];
254 struct mutex lock;
255};
256
257int ab4500_write(struct ab4500 *ab4500, unsigned char block,
258 unsigned long addr, unsigned char data);
259int ab4500_read(struct ab4500 *ab4500, unsigned char block,
260 unsigned long addr);
261
262#endif /* MFD_AB4500_H */
diff --git a/include/linux/mfd/adp5520.h b/include/linux/mfd/adp5520.h
new file mode 100644
index 000000000000..ac37558a4673
--- /dev/null
+++ b/include/linux/mfd/adp5520.h
@@ -0,0 +1,299 @@
1/*
2 * Definitions and platform data for Analog Devices
3 * ADP5520/ADP5501 MFD PMICs (Backlight, LED, GPIO and Keys)
4 *
5 * Copyright 2009 Analog Devices Inc.
6 *
7 * Licensed under the GPL-2 or later.
8 */
9
10
11#ifndef __LINUX_MFD_ADP5520_H
12#define __LINUX_MFD_ADP5520_H
13
14#define ID_ADP5520 5520
15#define ID_ADP5501 5501
16
17/*
18 * ADP5520/ADP5501 Register Map
19 */
20
21#define ADP5520_MODE_STATUS 0x00
22#define ADP5520_INTERRUPT_ENABLE 0x01
23#define ADP5520_BL_CONTROL 0x02
24#define ADP5520_BL_TIME 0x03
25#define ADP5520_BL_FADE 0x04
26#define ADP5520_DAYLIGHT_MAX 0x05
27#define ADP5520_DAYLIGHT_DIM 0x06
28#define ADP5520_OFFICE_MAX 0x07
29#define ADP5520_OFFICE_DIM 0x08
30#define ADP5520_DARK_MAX 0x09
31#define ADP5520_DARK_DIM 0x0A
32#define ADP5520_BL_VALUE 0x0B
33#define ADP5520_ALS_CMPR_CFG 0x0C
34#define ADP5520_L2_TRIP 0x0D
35#define ADP5520_L2_HYS 0x0E
36#define ADP5520_L3_TRIP 0x0F
37#define ADP5520_L3_HYS 0x10
38#define ADP5520_LED_CONTROL 0x11
39#define ADP5520_LED_TIME 0x12
40#define ADP5520_LED_FADE 0x13
41#define ADP5520_LED1_CURRENT 0x14
42#define ADP5520_LED2_CURRENT 0x15
43#define ADP5520_LED3_CURRENT 0x16
44
45/*
46 * ADP5520 Register Map
47 */
48
49#define ADP5520_GPIO_CFG_1 0x17
50#define ADP5520_GPIO_CFG_2 0x18
51#define ADP5520_GPIO_IN 0x19
52#define ADP5520_GPIO_OUT 0x1A
53#define ADP5520_GPIO_INT_EN 0x1B
54#define ADP5520_GPIO_INT_STAT 0x1C
55#define ADP5520_GPIO_INT_LVL 0x1D
56#define ADP5520_GPIO_DEBOUNCE 0x1E
57#define ADP5520_GPIO_PULLUP 0x1F
58#define ADP5520_KP_INT_STAT_1 0x20
59#define ADP5520_KP_INT_STAT_2 0x21
60#define ADP5520_KR_INT_STAT_1 0x22
61#define ADP5520_KR_INT_STAT_2 0x23
62#define ADP5520_KEY_STAT_1 0x24
63#define ADP5520_KEY_STAT_2 0x25
64
65/*
66 * MODE_STATUS bits
67 */
68
69#define ADP5520_nSTNBY (1 << 7)
70#define ADP5520_BL_EN (1 << 6)
71#define ADP5520_DIM_EN (1 << 5)
72#define ADP5520_OVP_INT (1 << 4)
73#define ADP5520_CMPR_INT (1 << 3)
74#define ADP5520_GPI_INT (1 << 2)
75#define ADP5520_KR_INT (1 << 1)
76#define ADP5520_KP_INT (1 << 0)
77
78/*
79 * INTERRUPT_ENABLE bits
80 */
81
82#define ADP5520_AUTO_LD_EN (1 << 4)
83#define ADP5520_CMPR_IEN (1 << 3)
84#define ADP5520_OVP_IEN (1 << 2)
85#define ADP5520_KR_IEN (1 << 1)
86#define ADP5520_KP_IEN (1 << 0)
87
88/*
89 * BL_CONTROL bits
90 */
91
92#define ADP5520_BL_LVL ((x) << 5)
93#define ADP5520_BL_LAW ((x) << 4)
94#define ADP5520_BL_AUTO_ADJ (1 << 3)
95#define ADP5520_OVP_EN (1 << 2)
96#define ADP5520_FOVR (1 << 1)
97#define ADP5520_KP_BL_EN (1 << 0)
98
99/*
100 * ALS_CMPR_CFG bits
101 */
102
103#define ADP5520_L3_OUT (1 << 3)
104#define ADP5520_L2_OUT (1 << 2)
105#define ADP5520_L3_EN (1 << 1)
106
107#define ADP5020_MAX_BRIGHTNESS 0x7F
108
109#define FADE_VAL(in, out) ((0xF & (in)) | ((0xF & (out)) << 4))
110#define BL_CTRL_VAL(law, auto) (((1 & (auto)) << 3) | ((0x3 & (law)) << 4))
111#define ALS_CMPR_CFG_VAL(filt, l3_en) (((0x7 & filt) << 5) | l3_en)
112
113/*
114 * LEDs subdevice bits and masks
115 */
116
117#define ADP5520_01_MAXLEDS 3
118
119#define ADP5520_FLAG_LED_MASK 0x3
120#define ADP5520_FLAG_OFFT_SHIFT 8
121#define ADP5520_FLAG_OFFT_MASK 0x3
122
123#define ADP5520_R3_MODE (1 << 5)
124#define ADP5520_C3_MODE (1 << 4)
125#define ADP5520_LED_LAW (1 << 3)
126#define ADP5520_LED3_EN (1 << 2)
127#define ADP5520_LED2_EN (1 << 1)
128#define ADP5520_LED1_EN (1 << 0)
129
130/*
131 * GPIO subdevice bits and masks
132 */
133
134#define ADP5520_MAXGPIOS 8
135
136#define ADP5520_GPIO_C3 (1 << 7) /* LED2 or GPIO7 aka C3 */
137#define ADP5520_GPIO_C2 (1 << 6)
138#define ADP5520_GPIO_C1 (1 << 5)
139#define ADP5520_GPIO_C0 (1 << 4)
140#define ADP5520_GPIO_R3 (1 << 3) /* LED3 or GPIO3 aka R3 */
141#define ADP5520_GPIO_R2 (1 << 2)
142#define ADP5520_GPIO_R1 (1 << 1)
143#define ADP5520_GPIO_R0 (1 << 0)
144
145struct adp5520_gpio_platform_data {
146 unsigned gpio_start;
147 u8 gpio_en_mask;
148 u8 gpio_pullup_mask;
149};
150
151/*
152 * Keypad subdevice bits and masks
153 */
154
155#define ADP5520_MAXKEYS 16
156
157#define ADP5520_COL_C3 (1 << 7) /* LED2 or GPIO7 aka C3 */
158#define ADP5520_COL_C2 (1 << 6)
159#define ADP5520_COL_C1 (1 << 5)
160#define ADP5520_COL_C0 (1 << 4)
161#define ADP5520_ROW_R3 (1 << 3) /* LED3 or GPIO3 aka R3 */
162#define ADP5520_ROW_R2 (1 << 2)
163#define ADP5520_ROW_R1 (1 << 1)
164#define ADP5520_ROW_R0 (1 << 0)
165
166#define ADP5520_KEY(row, col) (col + row * 4)
167#define ADP5520_KEYMAPSIZE ADP5520_MAXKEYS
168
169struct adp5520_keys_platform_data {
170 int rows_en_mask; /* Number of rows */
171 int cols_en_mask; /* Number of columns */
172 const unsigned short *keymap; /* Pointer to keymap */
173 unsigned short keymapsize; /* Keymap size */
174 unsigned repeat:1; /* Enable key repeat */
175};
176
177
178/*
179 * LEDs subdevice platform data
180 */
181
182#define FLAG_ID_ADP5520_LED1_ADP5501_LED0 1 /* ADP5520 PIN ILED */
183#define FLAG_ID_ADP5520_LED2_ADP5501_LED1 2 /* ADP5520 PIN C3 */
184#define FLAG_ID_ADP5520_LED3_ADP5501_LED2 3 /* ADP5520 PIN R3 */
185
186#define ADP5520_LED_DIS_BLINK (0 << ADP5520_FLAG_OFFT_SHIFT)
187#define ADP5520_LED_OFFT_600ms (1 << ADP5520_FLAG_OFFT_SHIFT)
188#define ADP5520_LED_OFFT_800ms (2 << ADP5520_FLAG_OFFT_SHIFT)
189#define ADP5520_LED_OFFT_1200ms (3 << ADP5520_FLAG_OFFT_SHIFT)
190
191#define ADP5520_LED_ONT_200ms 0
192#define ADP5520_LED_ONT_600ms 1
193#define ADP5520_LED_ONT_800ms 2
194#define ADP5520_LED_ONT_1200ms 3
195
196struct adp5520_leds_platform_data {
197 int num_leds;
198 struct led_info *leds;
199 u8 fade_in; /* Backlight Fade-In Timer */
200 u8 fade_out; /* Backlight Fade-Out Timer */
201 u8 led_on_time;
202};
203
204/*
205 * Backlight subdevice platform data
206 */
207
208#define ADP5520_FADE_T_DIS 0 /* Fade Timer Disabled */
209#define ADP5520_FADE_T_300ms 1 /* 0.3 Sec */
210#define ADP5520_FADE_T_600ms 2
211#define ADP5520_FADE_T_900ms 3
212#define ADP5520_FADE_T_1200ms 4
213#define ADP5520_FADE_T_1500ms 5
214#define ADP5520_FADE_T_1800ms 6
215#define ADP5520_FADE_T_2100ms 7
216#define ADP5520_FADE_T_2400ms 8
217#define ADP5520_FADE_T_2700ms 9
218#define ADP5520_FADE_T_3000ms 10
219#define ADP5520_FADE_T_3500ms 11
220#define ADP5520_FADE_T_4000ms 12
221#define ADP5520_FADE_T_4500ms 13
222#define ADP5520_FADE_T_5000ms 14
223#define ADP5520_FADE_T_5500ms 15 /* 5.5 Sec */
224
225#define ADP5520_BL_LAW_LINEAR 0
226#define ADP5520_BL_LAW_SQUARE 1
227#define ADP5520_BL_LAW_CUBIC1 2
228#define ADP5520_BL_LAW_CUBIC2 3
229
230#define ADP5520_BL_AMBL_FILT_80ms 0 /* Light sensor filter time */
231#define ADP5520_BL_AMBL_FILT_160ms 1
232#define ADP5520_BL_AMBL_FILT_320ms 2
233#define ADP5520_BL_AMBL_FILT_640ms 3
234#define ADP5520_BL_AMBL_FILT_1280ms 4
235#define ADP5520_BL_AMBL_FILT_2560ms 5
236#define ADP5520_BL_AMBL_FILT_5120ms 6
237#define ADP5520_BL_AMBL_FILT_10240ms 7 /* 10.24 sec */
238
239 /*
240 * Blacklight current 0..30mA
241 */
242#define ADP5520_BL_CUR_mA(I) ((I * 127) / 30)
243
244 /*
245 * L2 comparator current 0..1000uA
246 */
247#define ADP5520_L2_COMP_CURR_uA(I) ((I * 255) / 1000)
248
249 /*
250 * L3 comparator current 0..127uA
251 */
252#define ADP5520_L3_COMP_CURR_uA(I) ((I * 255) / 127)
253
254struct adp5520_backlight_platform_data {
255 u8 fade_in; /* Backlight Fade-In Timer */
256 u8 fade_out; /* Backlight Fade-Out Timer */
257 u8 fade_led_law; /* fade-on/fade-off transfer characteristic */
258
259 u8 en_ambl_sens; /* 1 = enable ambient light sensor */
260 u8 abml_filt; /* Light sensor filter time */
261 u8 l1_daylight_max; /* use BL_CUR_mA(I) 0 <= I <= 30 mA */
262 u8 l1_daylight_dim; /* typ = 0, use BL_CUR_mA(I) 0 <= I <= 30 mA */
263 u8 l2_office_max; /* use BL_CUR_mA(I) 0 <= I <= 30 mA */
264 u8 l2_office_dim; /* typ = 0, use BL_CUR_mA(I) 0 <= I <= 30 mA */
265 u8 l3_dark_max; /* use BL_CUR_mA(I) 0 <= I <= 30 mA */
266 u8 l3_dark_dim; /* typ = 0, use BL_CUR_mA(I) 0 <= I <= 30 mA */
267 u8 l2_trip; /* use L2_COMP_CURR_uA(I) 0 <= I <= 1000 uA */
268 u8 l2_hyst; /* use L2_COMP_CURR_uA(I) 0 <= I <= 1000 uA */
269 u8 l3_trip; /* use L3_COMP_CURR_uA(I) 0 <= I <= 127 uA */
270 u8 l3_hyst; /* use L3_COMP_CURR_uA(I) 0 <= I <= 127 uA */
271};
272
273/*
274 * MFD chip platform data
275 */
276
277struct adp5520_platform_data {
278 struct adp5520_keys_platform_data *keys;
279 struct adp5520_gpio_platform_data *gpio;
280 struct adp5520_leds_platform_data *leds;
281 struct adp5520_backlight_platform_data *backlight;
282};
283
284/*
285 * MFD chip functions
286 */
287
288extern int adp5520_read(struct device *dev, int reg, uint8_t *val);
289extern int adp5520_write(struct device *dev, int reg, u8 val);
290extern int adp5520_clr_bits(struct device *dev, int reg, uint8_t bit_mask);
291extern int adp5520_set_bits(struct device *dev, int reg, uint8_t bit_mask);
292
293extern int adp5520_register_notifier(struct device *dev,
294 struct notifier_block *nb, unsigned int events);
295
296extern int adp5520_unregister_notifier(struct device *dev,
297 struct notifier_block *nb, unsigned int events);
298
299#endif /* __LINUX_MFD_ADP5520_H */
diff --git a/include/linux/mfd/da903x.h b/include/linux/mfd/da903x.h
index c63b65c94429..0aa3a1a49ee3 100644
--- a/include/linux/mfd/da903x.h
+++ b/include/linux/mfd/da903x.h
@@ -96,6 +96,10 @@ struct da9034_touch_pdata {
96 int y_inverted; 96 int y_inverted;
97}; 97};
98 98
99struct da9034_backlight_pdata {
100 int output_current; /* output current of WLED, from 0-31 (in mA) */
101};
102
99/* DA9030 battery charger data */ 103/* DA9030 battery charger data */
100struct power_supply_info; 104struct power_supply_info;
101 105
diff --git a/include/linux/mfd/ezx-pcap.h b/include/linux/mfd/ezx-pcap.h
index e5124ceea769..40c372165f3e 100644
--- a/include/linux/mfd/ezx-pcap.h
+++ b/include/linux/mfd/ezx-pcap.h
@@ -45,7 +45,7 @@ void pcap_set_ts_bits(struct pcap_chip *, u32);
45#define PCAP_CLEAR_INTERRUPT_REGISTER 0x01ffffff 45#define PCAP_CLEAR_INTERRUPT_REGISTER 0x01ffffff
46#define PCAP_MASK_ALL_INTERRUPT 0x01ffffff 46#define PCAP_MASK_ALL_INTERRUPT 0x01ffffff
47 47
48/* registers acessible by both pcap ports */ 48/* registers accessible by both pcap ports */
49#define PCAP_REG_ISR 0x0 /* Interrupt Status */ 49#define PCAP_REG_ISR 0x0 /* Interrupt Status */
50#define PCAP_REG_MSR 0x1 /* Interrupt Mask */ 50#define PCAP_REG_MSR 0x1 /* Interrupt Mask */
51#define PCAP_REG_PSTAT 0x2 /* Processor Status */ 51#define PCAP_REG_PSTAT 0x2 /* Processor Status */
@@ -67,7 +67,7 @@ void pcap_set_ts_bits(struct pcap_chip *, u32);
67#define PCAP_REG_VENDOR_TEST1 0x1e 67#define PCAP_REG_VENDOR_TEST1 0x1e
68#define PCAP_REG_VENDOR_TEST2 0x1f 68#define PCAP_REG_VENDOR_TEST2 0x1f
69 69
70/* registers acessible by pcap port 1 only (a1200, e2 & e6) */ 70/* registers accessible by pcap port 1 only (a1200, e2 & e6) */
71#define PCAP_REG_INT_SEL 0x3 /* Interrupt Select */ 71#define PCAP_REG_INT_SEL 0x3 /* Interrupt Select */
72#define PCAP_REG_SWCTRL 0x4 /* Switching Regulator Control */ 72#define PCAP_REG_SWCTRL 0x4 /* Switching Regulator Control */
73#define PCAP_REG_VREG1 0x5 /* Regulator Bank 1 Control */ 73#define PCAP_REG_VREG1 0x5 /* Regulator Bank 1 Control */
@@ -231,9 +231,6 @@ void pcap_set_ts_bits(struct pcap_chip *, u32);
231#define PCAP_LED_4MA 1 231#define PCAP_LED_4MA 1
232#define PCAP_LED_5MA 2 232#define PCAP_LED_5MA 2
233#define PCAP_LED_9MA 3 233#define PCAP_LED_9MA 3
234#define PCAP_LED_GPIO_VAL_MASK 0x00ffffff
235#define PCAP_LED_GPIO_EN 0x01000000
236#define PCAP_LED_GPIO_INVERT 0x02000000
237#define PCAP_LED_T_MASK 0xf 234#define PCAP_LED_T_MASK 0xf
238#define PCAP_LED_C_MASK 0x3 235#define PCAP_LED_C_MASK 0x3
239#define PCAP_BL_MASK 0x1f 236#define PCAP_BL_MASK 0x1f
diff --git a/include/linux/mfd/max8925.h b/include/linux/mfd/max8925.h
new file mode 100644
index 000000000000..5259dfe8c585
--- /dev/null
+++ b/include/linux/mfd/max8925.h
@@ -0,0 +1,253 @@
1/*
2 * Maxim8925 Interface
3 *
4 * Copyright (C) 2009 Marvell International Ltd.
5 * Haojian Zhuang <haojian.zhuang@marvell.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#ifndef __LINUX_MFD_MAX8925_H
13#define __LINUX_MFD_MAX8925_H
14
15#include <linux/mutex.h>
16#include <linux/interrupt.h>
17
18/* Unified sub device IDs for MAX8925 */
19enum {
20 MAX8925_ID_SD1,
21 MAX8925_ID_SD2,
22 MAX8925_ID_SD3,
23 MAX8925_ID_LDO1,
24 MAX8925_ID_LDO2,
25 MAX8925_ID_LDO3,
26 MAX8925_ID_LDO4,
27 MAX8925_ID_LDO5,
28 MAX8925_ID_LDO6,
29 MAX8925_ID_LDO7,
30 MAX8925_ID_LDO8,
31 MAX8925_ID_LDO9,
32 MAX8925_ID_LDO10,
33 MAX8925_ID_LDO11,
34 MAX8925_ID_LDO12,
35 MAX8925_ID_LDO13,
36 MAX8925_ID_LDO14,
37 MAX8925_ID_LDO15,
38 MAX8925_ID_LDO16,
39 MAX8925_ID_LDO17,
40 MAX8925_ID_LDO18,
41 MAX8925_ID_LDO19,
42 MAX8925_ID_LDO20,
43 MAX8925_ID_MAX,
44};
45
46enum {
47 /*
48 * Charging current threshold trigger going from fast charge
49 * to TOPOFF charge. From 5% to 20% of fasting charging current.
50 */
51 MAX8925_TOPOFF_THR_5PER,
52 MAX8925_TOPOFF_THR_10PER,
53 MAX8925_TOPOFF_THR_15PER,
54 MAX8925_TOPOFF_THR_20PER,
55};
56
57enum {
58 /* Fast charging current */
59 MAX8925_FCHG_85MA,
60 MAX8925_FCHG_300MA,
61 MAX8925_FCHG_460MA,
62 MAX8925_FCHG_600MA,
63 MAX8925_FCHG_700MA,
64 MAX8925_FCHG_800MA,
65 MAX8925_FCHG_900MA,
66 MAX8925_FCHG_1000MA,
67};
68
69/* Charger registers */
70#define MAX8925_CHG_IRQ1 (0x7e)
71#define MAX8925_CHG_IRQ2 (0x7f)
72#define MAX8925_CHG_IRQ1_MASK (0x80)
73#define MAX8925_CHG_IRQ2_MASK (0x81)
74#define MAX8925_CHG_STATUS (0x82)
75
76/* GPM registers */
77#define MAX8925_SYSENSEL (0x00)
78#define MAX8925_ON_OFF_IRQ1 (0x01)
79#define MAX8925_ON_OFF_IRQ1_MASK (0x02)
80#define MAX8925_ON_OFF_STATUS (0x03)
81#define MAX8925_ON_OFF_IRQ2 (0x0d)
82#define MAX8925_ON_OFF_IRQ2_MASK (0x0e)
83#define MAX8925_RESET_CNFG (0x0f)
84
85/* Touch registers */
86#define MAX8925_TSC_IRQ (0x00)
87#define MAX8925_TSC_IRQ_MASK (0x01)
88#define MAX8925_TSC_CNFG1 (0x02)
89#define MAX8925_ADC_SCHED (0x10)
90#define MAX8925_ADC_RES_END (0x6f)
91
92#define MAX8925_NREF_OK (1 << 4)
93
94/* RTC registers */
95#define MAX8925_ALARM0_CNTL (0x18)
96#define MAX8925_ALARM1_CNTL (0x19)
97#define MAX8925_RTC_IRQ (0x1c)
98#define MAX8925_RTC_IRQ_MASK (0x1d)
99#define MAX8925_MPL_CNTL (0x1e)
100
101/* WLED registers */
102#define MAX8925_WLED_MODE_CNTL (0x84)
103#define MAX8925_WLED_CNTL (0x85)
104
105/* MAX8925 Registers */
106#define MAX8925_SDCTL1 (0x04)
107#define MAX8925_SDCTL2 (0x07)
108#define MAX8925_SDCTL3 (0x0A)
109#define MAX8925_SDV1 (0x06)
110#define MAX8925_SDV2 (0x09)
111#define MAX8925_SDV3 (0x0C)
112#define MAX8925_LDOCTL1 (0x18)
113#define MAX8925_LDOCTL2 (0x1C)
114#define MAX8925_LDOCTL3 (0x20)
115#define MAX8925_LDOCTL4 (0x24)
116#define MAX8925_LDOCTL5 (0x28)
117#define MAX8925_LDOCTL6 (0x2C)
118#define MAX8925_LDOCTL7 (0x30)
119#define MAX8925_LDOCTL8 (0x34)
120#define MAX8925_LDOCTL9 (0x38)
121#define MAX8925_LDOCTL10 (0x3C)
122#define MAX8925_LDOCTL11 (0x40)
123#define MAX8925_LDOCTL12 (0x44)
124#define MAX8925_LDOCTL13 (0x48)
125#define MAX8925_LDOCTL14 (0x4C)
126#define MAX8925_LDOCTL15 (0x50)
127#define MAX8925_LDOCTL16 (0x10)
128#define MAX8925_LDOCTL17 (0x14)
129#define MAX8925_LDOCTL18 (0x72)
130#define MAX8925_LDOCTL19 (0x5C)
131#define MAX8925_LDOCTL20 (0x9C)
132#define MAX8925_LDOVOUT1 (0x1A)
133#define MAX8925_LDOVOUT2 (0x1E)
134#define MAX8925_LDOVOUT3 (0x22)
135#define MAX8925_LDOVOUT4 (0x26)
136#define MAX8925_LDOVOUT5 (0x2A)
137#define MAX8925_LDOVOUT6 (0x2E)
138#define MAX8925_LDOVOUT7 (0x32)
139#define MAX8925_LDOVOUT8 (0x36)
140#define MAX8925_LDOVOUT9 (0x3A)
141#define MAX8925_LDOVOUT10 (0x3E)
142#define MAX8925_LDOVOUT11 (0x42)
143#define MAX8925_LDOVOUT12 (0x46)
144#define MAX8925_LDOVOUT13 (0x4A)
145#define MAX8925_LDOVOUT14 (0x4E)
146#define MAX8925_LDOVOUT15 (0x52)
147#define MAX8925_LDOVOUT16 (0x12)
148#define MAX8925_LDOVOUT17 (0x16)
149#define MAX8925_LDOVOUT18 (0x74)
150#define MAX8925_LDOVOUT19 (0x5E)
151#define MAX8925_LDOVOUT20 (0x9E)
152
153/* bit definitions */
154#define CHG_IRQ1_MASK (0x07)
155#define CHG_IRQ2_MASK (0xff)
156#define ON_OFF_IRQ1_MASK (0xff)
157#define ON_OFF_IRQ2_MASK (0x03)
158#define TSC_IRQ_MASK (0x03)
159#define RTC_IRQ_MASK (0x0c)
160
161#define MAX8925_MAX_REGULATOR (23)
162
163#define MAX8925_NAME_SIZE (32)
164
165/* IRQ definitions */
166enum {
167 MAX8925_IRQ_VCHG_DC_OVP,
168 MAX8925_IRQ_VCHG_DC_F,
169 MAX8925_IRQ_VCHG_DC_R,
170 MAX8925_IRQ_VCHG_USB_OVP,
171 MAX8925_IRQ_VCHG_USB_F,
172 MAX8925_IRQ_VCHG_USB_R,
173 MAX8925_IRQ_VCHG_THM_OK_R,
174 MAX8925_IRQ_VCHG_THM_OK_F,
175 MAX8925_IRQ_VCHG_SYSLOW_F,
176 MAX8925_IRQ_VCHG_SYSLOW_R,
177 MAX8925_IRQ_VCHG_RST,
178 MAX8925_IRQ_VCHG_DONE,
179 MAX8925_IRQ_VCHG_TOPOFF,
180 MAX8925_IRQ_VCHG_TMR_FAULT,
181 MAX8925_IRQ_GPM_RSTIN,
182 MAX8925_IRQ_GPM_MPL,
183 MAX8925_IRQ_GPM_SW_3SEC,
184 MAX8925_IRQ_GPM_EXTON_F,
185 MAX8925_IRQ_GPM_EXTON_R,
186 MAX8925_IRQ_GPM_SW_1SEC,
187 MAX8925_IRQ_GPM_SW_F,
188 MAX8925_IRQ_GPM_SW_R,
189 MAX8925_IRQ_GPM_SYSCKEN_F,
190 MAX8925_IRQ_GPM_SYSCKEN_R,
191 MAX8925_IRQ_RTC_ALARM1,
192 MAX8925_IRQ_RTC_ALARM0,
193 MAX8925_IRQ_TSC_STICK,
194 MAX8925_IRQ_TSC_NSTICK,
195 MAX8925_NR_IRQS,
196};
197
198struct max8925_chip {
199 struct device *dev;
200 struct i2c_client *i2c;
201 struct i2c_client *adc;
202 struct i2c_client *rtc;
203 struct mutex io_lock;
204 struct mutex irq_lock;
205
206 int irq_base;
207 int core_irq;
208 int tsc_irq;
209};
210
211struct max8925_backlight_pdata {
212 int lxw_scl; /* 0/1 -- 0.8Ohm/0.4Ohm */
213 int lxw_freq; /* 700KHz ~ 1400KHz */
214 int dual_string; /* 0/1 -- single/dual string */
215};
216
217struct max8925_touch_pdata {
218 unsigned int flags;
219};
220
221struct max8925_power_pdata {
222 int (*set_charger)(int);
223 unsigned batt_detect:1;
224 unsigned topoff_threshold:2;
225 unsigned fast_charge:3; /* charge current */
226};
227
228/*
229 * irq_base: stores IRQ base number of MAX8925 in platform
230 * tsc_irq: stores IRQ number of MAX8925 TSC
231 */
232struct max8925_platform_data {
233 struct max8925_backlight_pdata *backlight;
234 struct max8925_touch_pdata *touch;
235 struct max8925_power_pdata *power;
236 struct regulator_init_data *regulator[MAX8925_MAX_REGULATOR];
237
238 int irq_base;
239 int tsc_irq;
240};
241
242extern int max8925_reg_read(struct i2c_client *, int);
243extern int max8925_reg_write(struct i2c_client *, int, unsigned char);
244extern int max8925_bulk_read(struct i2c_client *, int, int, unsigned char *);
245extern int max8925_bulk_write(struct i2c_client *, int, int, unsigned char *);
246extern int max8925_set_bits(struct i2c_client *, int, unsigned char,
247 unsigned char);
248
249extern int max8925_device_init(struct max8925_chip *,
250 struct max8925_platform_data *);
251extern void max8925_device_exit(struct max8925_chip *);
252#endif /* __LINUX_MFD_MAX8925_H */
253
diff --git a/include/linux/mfd/mc13783-private.h b/include/linux/mfd/mc13783-private.h
index 47e698cb0f16..95cf9360553f 100644
--- a/include/linux/mfd/mc13783-private.h
+++ b/include/linux/mfd/mc13783-private.h
@@ -24,52 +24,23 @@
24 24
25#include <linux/platform_device.h> 25#include <linux/platform_device.h>
26#include <linux/mfd/mc13783.h> 26#include <linux/mfd/mc13783.h>
27#include <linux/workqueue.h>
28#include <linux/mutex.h> 27#include <linux/mutex.h>
29 28#include <linux/interrupt.h>
30struct mc13783_irq {
31 void (*handler)(int, void *);
32 void *data;
33};
34
35#define MC13783_NUM_IRQ 2
36#define MC13783_IRQ_TS 0
37#define MC13783_IRQ_REGULATOR 1
38
39#define MC13783_ADC_MODE_TS 1
40#define MC13783_ADC_MODE_SINGLE_CHAN 2
41#define MC13783_ADC_MODE_MULT_CHAN 3
42 29
43struct mc13783 { 30struct mc13783 {
44 int revision; 31 struct spi_device *spidev;
45 struct device *dev; 32 struct mutex lock;
46 struct spi_device *spi_device;
47
48 int (*read_dev)(void *data, char reg, int count, u32 *dst);
49 int (*write_dev)(void *data, char reg, int count, const u32 *src);
50
51 struct mutex io_lock;
52 void *io_data;
53 int irq; 33 int irq;
54 unsigned int flags; 34 int flags;
55 35
56 struct mc13783_irq irq_handler[MC13783_NUM_IRQ]; 36 irq_handler_t irqhandler[MC13783_NUM_IRQ];
57 struct work_struct work; 37 void *irqdata[MC13783_NUM_IRQ];
58 struct completion adc_done;
59 unsigned int ts_active;
60 struct mutex adc_conv_lock;
61 38
39 /* XXX these should go as platformdata to the regulator subdevice */
62 struct mc13783_regulator_init_data *regulators; 40 struct mc13783_regulator_init_data *regulators;
63 int num_regulators; 41 int num_regulators;
64}; 42};
65 43
66int mc13783_reg_read(struct mc13783 *, int reg_num, u32 *);
67int mc13783_reg_write(struct mc13783 *, int, u32);
68int mc13783_set_bits(struct mc13783 *, int, u32, u32);
69int mc13783_free_irq(struct mc13783 *mc13783, int irq);
70int mc13783_register_irq(struct mc13783 *mc13783, int irq,
71 void (*handler) (int, void *), void *data);
72
73#define MC13783_REG_INTERRUPT_STATUS_0 0 44#define MC13783_REG_INTERRUPT_STATUS_0 0
74#define MC13783_REG_INTERRUPT_MASK_0 1 45#define MC13783_REG_INTERRUPT_MASK_0 1
75#define MC13783_REG_INTERRUPT_SENSE_0 2 46#define MC13783_REG_INTERRUPT_SENSE_0 2
@@ -136,55 +107,6 @@ int mc13783_register_irq(struct mc13783 *mc13783, int irq,
136#define MC13783_REG_TEST_3 63 107#define MC13783_REG_TEST_3 63
137#define MC13783_REG_NB 64 108#define MC13783_REG_NB 64
138 109
139
140/*
141 * Interrupt Status
142 */
143#define MC13783_INT_STAT_ADCDONEI (1 << 0)
144#define MC13783_INT_STAT_ADCBISDONEI (1 << 1)
145#define MC13783_INT_STAT_TSI (1 << 2)
146#define MC13783_INT_STAT_WHIGHI (1 << 3)
147#define MC13783_INT_STAT_WLOWI (1 << 4)
148#define MC13783_INT_STAT_CHGDETI (1 << 6)
149#define MC13783_INT_STAT_CHGOVI (1 << 7)
150#define MC13783_INT_STAT_CHGREVI (1 << 8)
151#define MC13783_INT_STAT_CHGSHORTI (1 << 9)
152#define MC13783_INT_STAT_CCCVI (1 << 10)
153#define MC13783_INT_STAT_CHGCURRI (1 << 11)
154#define MC13783_INT_STAT_BPONI (1 << 12)
155#define MC13783_INT_STAT_LOBATLI (1 << 13)
156#define MC13783_INT_STAT_LOBATHI (1 << 14)
157#define MC13783_INT_STAT_UDPI (1 << 15)
158#define MC13783_INT_STAT_USBI (1 << 16)
159#define MC13783_INT_STAT_IDI (1 << 19)
160#define MC13783_INT_STAT_Unused (1 << 20)
161#define MC13783_INT_STAT_SE1I (1 << 21)
162#define MC13783_INT_STAT_CKDETI (1 << 22)
163#define MC13783_INT_STAT_UDMI (1 << 23)
164
165/*
166 * Interrupt Mask
167 */
168#define MC13783_INT_MASK_ADCDONEM (1 << 0)
169#define MC13783_INT_MASK_ADCBISDONEM (1 << 1)
170#define MC13783_INT_MASK_TSM (1 << 2)
171#define MC13783_INT_MASK_WHIGHM (1 << 3)
172#define MC13783_INT_MASK_WLOWM (1 << 4)
173#define MC13783_INT_MASK_CHGDETM (1 << 6)
174#define MC13783_INT_MASK_CHGOVM (1 << 7)
175#define MC13783_INT_MASK_CHGREVM (1 << 8)
176#define MC13783_INT_MASK_CHGSHORTM (1 << 9)
177#define MC13783_INT_MASK_CCCVM (1 << 10)
178#define MC13783_INT_MASK_CHGCURRM (1 << 11)
179#define MC13783_INT_MASK_BPONM (1 << 12)
180#define MC13783_INT_MASK_LOBATLM (1 << 13)
181#define MC13783_INT_MASK_LOBATHM (1 << 14)
182#define MC13783_INT_MASK_UDPM (1 << 15)
183#define MC13783_INT_MASK_USBM (1 << 16)
184#define MC13783_INT_MASK_IDM (1 << 19)
185#define MC13783_INT_MASK_SE1M (1 << 21)
186#define MC13783_INT_MASK_CKDETM (1 << 22)
187
188/* 110/*
189 * Reg Regulator Mode 0 111 * Reg Regulator Mode 0
190 */ 112 */
@@ -284,113 +206,15 @@ int mc13783_register_irq(struct mc13783 *mc13783, int irq,
284#define MC13783_SWCTRL_SW3_STBY (1 << 21) 206#define MC13783_SWCTRL_SW3_STBY (1 << 21)
285#define MC13783_SWCTRL_SW3_MODE (1 << 22) 207#define MC13783_SWCTRL_SW3_MODE (1 << 22)
286 208
287/* 209static inline int mc13783_set_bits(struct mc13783 *mc13783, unsigned int offset,
288 * ADC/Touch 210 u32 mask, u32 val)
289 */ 211{
290#define MC13783_ADC0_LICELLCON (1 << 0) 212 int ret;
291#define MC13783_ADC0_CHRGICON (1 << 1) 213 mc13783_lock(mc13783);
292#define MC13783_ADC0_BATICON (1 << 2) 214 ret = mc13783_reg_rmw(mc13783, offset, mask, val);
293#define MC13783_ADC0_RTHEN (1 << 3) 215 mc13783_unlock(mc13783);
294#define MC13783_ADC0_DTHEN (1 << 4)
295#define MC13783_ADC0_UIDEN (1 << 5)
296#define MC13783_ADC0_ADOUTEN (1 << 6)
297#define MC13783_ADC0_ADOUTPER (1 << 7)
298#define MC13783_ADC0_ADREFEN (1 << 10)
299#define MC13783_ADC0_ADREFMODE (1 << 11)
300#define MC13783_ADC0_TSMOD0 (1 << 12)
301#define MC13783_ADC0_TSMOD1 (1 << 13)
302#define MC13783_ADC0_TSMOD2 (1 << 14)
303#define MC13783_ADC0_CHRGRAWDIV (1 << 15)
304#define MC13783_ADC0_ADINC1 (1 << 16)
305#define MC13783_ADC0_ADINC2 (1 << 17)
306#define MC13783_ADC0_WCOMP (1 << 18)
307#define MC13783_ADC0_ADCBIS0 (1 << 23)
308
309#define MC13783_ADC1_ADEN (1 << 0)
310#define MC13783_ADC1_RAND (1 << 1)
311#define MC13783_ADC1_ADSEL (1 << 3)
312#define MC13783_ADC1_TRIGMASK (1 << 4)
313#define MC13783_ADC1_ADA10 (1 << 5)
314#define MC13783_ADC1_ADA11 (1 << 6)
315#define MC13783_ADC1_ADA12 (1 << 7)
316#define MC13783_ADC1_ADA20 (1 << 8)
317#define MC13783_ADC1_ADA21 (1 << 9)
318#define MC13783_ADC1_ADA22 (1 << 10)
319#define MC13783_ADC1_ATO0 (1 << 11)
320#define MC13783_ADC1_ATO1 (1 << 12)
321#define MC13783_ADC1_ATO2 (1 << 13)
322#define MC13783_ADC1_ATO3 (1 << 14)
323#define MC13783_ADC1_ATO4 (1 << 15)
324#define MC13783_ADC1_ATO5 (1 << 16)
325#define MC13783_ADC1_ATO6 (1 << 17)
326#define MC13783_ADC1_ATO7 (1 << 18)
327#define MC13783_ADC1_ATOX (1 << 19)
328#define MC13783_ADC1_ASC (1 << 20)
329#define MC13783_ADC1_ADTRIGIGN (1 << 21)
330#define MC13783_ADC1_ADONESHOT (1 << 22)
331#define MC13783_ADC1_ADCBIS1 (1 << 23)
332
333#define MC13783_ADC1_CHAN0_SHIFT 5
334#define MC13783_ADC1_CHAN1_SHIFT 8
335
336#define MC13783_ADC2_ADD10 (1 << 2)
337#define MC13783_ADC2_ADD11 (1 << 3)
338#define MC13783_ADC2_ADD12 (1 << 4)
339#define MC13783_ADC2_ADD13 (1 << 5)
340#define MC13783_ADC2_ADD14 (1 << 6)
341#define MC13783_ADC2_ADD15 (1 << 7)
342#define MC13783_ADC2_ADD16 (1 << 8)
343#define MC13783_ADC2_ADD17 (1 << 9)
344#define MC13783_ADC2_ADD18 (1 << 10)
345#define MC13783_ADC2_ADD19 (1 << 11)
346#define MC13783_ADC2_ADD20 (1 << 14)
347#define MC13783_ADC2_ADD21 (1 << 15)
348#define MC13783_ADC2_ADD22 (1 << 16)
349#define MC13783_ADC2_ADD23 (1 << 17)
350#define MC13783_ADC2_ADD24 (1 << 18)
351#define MC13783_ADC2_ADD25 (1 << 19)
352#define MC13783_ADC2_ADD26 (1 << 20)
353#define MC13783_ADC2_ADD27 (1 << 21)
354#define MC13783_ADC2_ADD28 (1 << 22)
355#define MC13783_ADC2_ADD29 (1 << 23)
356 216
357#define MC13783_ADC3_WHIGH0 (1 << 0) 217 return ret;
358#define MC13783_ADC3_WHIGH1 (1 << 1) 218}
359#define MC13783_ADC3_WHIGH2 (1 << 2)
360#define MC13783_ADC3_WHIGH3 (1 << 3)
361#define MC13783_ADC3_WHIGH4 (1 << 4)
362#define MC13783_ADC3_WHIGH5 (1 << 5)
363#define MC13783_ADC3_ICID0 (1 << 6)
364#define MC13783_ADC3_ICID1 (1 << 7)
365#define MC13783_ADC3_ICID2 (1 << 8)
366#define MC13783_ADC3_WLOW0 (1 << 9)
367#define MC13783_ADC3_WLOW1 (1 << 10)
368#define MC13783_ADC3_WLOW2 (1 << 11)
369#define MC13783_ADC3_WLOW3 (1 << 12)
370#define MC13783_ADC3_WLOW4 (1 << 13)
371#define MC13783_ADC3_WLOW5 (1 << 14)
372#define MC13783_ADC3_ADCBIS2 (1 << 23)
373
374#define MC13783_ADC4_ADDBIS10 (1 << 2)
375#define MC13783_ADC4_ADDBIS11 (1 << 3)
376#define MC13783_ADC4_ADDBIS12 (1 << 4)
377#define MC13783_ADC4_ADDBIS13 (1 << 5)
378#define MC13783_ADC4_ADDBIS14 (1 << 6)
379#define MC13783_ADC4_ADDBIS15 (1 << 7)
380#define MC13783_ADC4_ADDBIS16 (1 << 8)
381#define MC13783_ADC4_ADDBIS17 (1 << 9)
382#define MC13783_ADC4_ADDBIS18 (1 << 10)
383#define MC13783_ADC4_ADDBIS19 (1 << 11)
384#define MC13783_ADC4_ADDBIS20 (1 << 14)
385#define MC13783_ADC4_ADDBIS21 (1 << 15)
386#define MC13783_ADC4_ADDBIS22 (1 << 16)
387#define MC13783_ADC4_ADDBIS23 (1 << 17)
388#define MC13783_ADC4_ADDBIS24 (1 << 18)
389#define MC13783_ADC4_ADDBIS25 (1 << 19)
390#define MC13783_ADC4_ADDBIS26 (1 << 20)
391#define MC13783_ADC4_ADDBIS27 (1 << 21)
392#define MC13783_ADC4_ADDBIS28 (1 << 22)
393#define MC13783_ADC4_ADDBIS29 (1 << 23)
394 219
395#endif /* __LINUX_MFD_MC13783_PRIV_H */ 220#endif /* __LINUX_MFD_MC13783_PRIV_H */
396
diff --git a/include/linux/mfd/mc13783.h b/include/linux/mfd/mc13783.h
index b3a2a7243573..8895d9d8879c 100644
--- a/include/linux/mfd/mc13783.h
+++ b/include/linux/mfd/mc13783.h
@@ -1,28 +1,70 @@
1/* 1/*
2 * Copyright 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de> 2 * Copyright 2009 Pengutronix
3 * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
3 * 4 *
4 * Initial development of this code was funded by 5 * This program is free software; you can redistribute it and/or modify it under
5 * Phytec Messtechnik GmbH, http://www.phytec.de 6 * the terms of the GNU General Public License version 2 as published by the
6 * 7 * Free Software Foundation.
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */ 8 */
9#ifndef __LINUX_MFD_MC13783_H
10#define __LINUX_MFD_MC13783_H
21 11
22#ifndef __INCLUDE_LINUX_MFD_MC13783_H 12#include <linux/interrupt.h>
23#define __INCLUDE_LINUX_MFD_MC13783_H
24 13
25struct mc13783; 14struct mc13783;
15
16void mc13783_lock(struct mc13783 *mc13783);
17void mc13783_unlock(struct mc13783 *mc13783);
18
19int mc13783_reg_read(struct mc13783 *mc13783, unsigned int offset, u32 *val);
20int mc13783_reg_write(struct mc13783 *mc13783, unsigned int offset, u32 val);
21int mc13783_reg_rmw(struct mc13783 *mc13783, unsigned int offset,
22 u32 mask, u32 val);
23
24int mc13783_irq_request(struct mc13783 *mc13783, int irq,
25 irq_handler_t handler, const char *name, void *dev);
26int mc13783_irq_request_nounmask(struct mc13783 *mc13783, int irq,
27 irq_handler_t handler, const char *name, void *dev);
28int mc13783_irq_free(struct mc13783 *mc13783, int irq, void *dev);
29
30int mc13783_irq_mask(struct mc13783 *mc13783, int irq);
31int mc13783_irq_unmask(struct mc13783 *mc13783, int irq);
32int mc13783_irq_status(struct mc13783 *mc13783, int irq,
33 int *enabled, int *pending);
34int mc13783_irq_ack(struct mc13783 *mc13783, int irq);
35
36static inline int mc13783_mask(struct mc13783 *mc13783, int irq) __deprecated;
37static inline int mc13783_mask(struct mc13783 *mc13783, int irq)
38{
39 return mc13783_irq_mask(mc13783, irq);
40}
41
42static inline int mc13783_unmask(struct mc13783 *mc13783, int irq) __deprecated;
43static inline int mc13783_unmask(struct mc13783 *mc13783, int irq)
44{
45 return mc13783_irq_unmask(mc13783, irq);
46}
47
48static inline int mc13783_ackirq(struct mc13783 *mc13783, int irq) __deprecated;
49static inline int mc13783_ackirq(struct mc13783 *mc13783, int irq)
50{
51 return mc13783_irq_ack(mc13783, irq);
52}
53
54#define MC13783_ADC0 43
55#define MC13783_ADC0_ADREFEN (1 << 10)
56#define MC13783_ADC0_ADREFMODE (1 << 11)
57#define MC13783_ADC0_TSMOD0 (1 << 12)
58#define MC13783_ADC0_TSMOD1 (1 << 13)
59#define MC13783_ADC0_TSMOD2 (1 << 14)
60#define MC13783_ADC0_ADINC1 (1 << 16)
61#define MC13783_ADC0_ADINC2 (1 << 17)
62
63#define MC13783_ADC0_TSMOD_MASK (MC13783_ADC0_TSMOD0 | \
64 MC13783_ADC0_TSMOD1 | \
65 MC13783_ADC0_TSMOD2)
66
67/* to be cleaned up */
26struct regulator_init_data; 68struct regulator_init_data;
27 69
28struct mc13783_regulator_init_data { 70struct mc13783_regulator_init_data {
@@ -30,23 +72,30 @@ struct mc13783_regulator_init_data {
30 struct regulator_init_data *init_data; 72 struct regulator_init_data *init_data;
31}; 73};
32 74
33struct mc13783_platform_data { 75struct mc13783_regulator_platform_data {
34 struct mc13783_regulator_init_data *regulators;
35 int num_regulators; 76 int num_regulators;
36 unsigned int flags; 77 struct mc13783_regulator_init_data *regulators;
37}; 78};
38 79
39/* mc13783_platform_data flags */ 80struct mc13783_platform_data {
81 int num_regulators;
82 struct mc13783_regulator_init_data *regulators;
83
40#define MC13783_USE_TOUCHSCREEN (1 << 0) 84#define MC13783_USE_TOUCHSCREEN (1 << 0)
41#define MC13783_USE_CODEC (1 << 1) 85#define MC13783_USE_CODEC (1 << 1)
42#define MC13783_USE_ADC (1 << 2) 86#define MC13783_USE_ADC (1 << 2)
43#define MC13783_USE_RTC (1 << 3) 87#define MC13783_USE_RTC (1 << 3)
44#define MC13783_USE_REGULATOR (1 << 4) 88#define MC13783_USE_REGULATOR (1 << 4)
89 unsigned int flags;
90};
91
92#define MC13783_ADC_MODE_TS 1
93#define MC13783_ADC_MODE_SINGLE_CHAN 2
94#define MC13783_ADC_MODE_MULT_CHAN 3
45 95
46int mc13783_adc_do_conversion(struct mc13783 *mc13783, unsigned int mode, 96int mc13783_adc_do_conversion(struct mc13783 *mc13783, unsigned int mode,
47 unsigned int channel, unsigned int *sample); 97 unsigned int channel, unsigned int *sample);
48 98
49void mc13783_adc_set_ts_status(struct mc13783 *mc13783, unsigned int status);
50 99
51#define MC13783_SW_SW1A 0 100#define MC13783_SW_SW1A 0
52#define MC13783_SW_SW1B 1 101#define MC13783_SW_SW1B 1
@@ -79,6 +128,49 @@ void mc13783_adc_set_ts_status(struct mc13783 *mc13783, unsigned int status);
79#define MC13783_REGU_V2 28 128#define MC13783_REGU_V2 28
80#define MC13783_REGU_V3 29 129#define MC13783_REGU_V3 29
81#define MC13783_REGU_V4 30 130#define MC13783_REGU_V4 30
131#define MC13783_REGU_PWGT1SPI 31
132#define MC13783_REGU_PWGT2SPI 32
82 133
83#endif /* __INCLUDE_LINUX_MFD_MC13783_H */ 134#define MC13783_IRQ_ADCDONE 0
135#define MC13783_IRQ_ADCBISDONE 1
136#define MC13783_IRQ_TS 2
137#define MC13783_IRQ_WHIGH 3
138#define MC13783_IRQ_WLOW 4
139#define MC13783_IRQ_CHGDET 6
140#define MC13783_IRQ_CHGOV 7
141#define MC13783_IRQ_CHGREV 8
142#define MC13783_IRQ_CHGSHORT 9
143#define MC13783_IRQ_CCCV 10
144#define MC13783_IRQ_CHGCURR 11
145#define MC13783_IRQ_BPON 12
146#define MC13783_IRQ_LOBATL 13
147#define MC13783_IRQ_LOBATH 14
148#define MC13783_IRQ_UDP 15
149#define MC13783_IRQ_USB 16
150#define MC13783_IRQ_ID 19
151#define MC13783_IRQ_SE1 21
152#define MC13783_IRQ_CKDET 22
153#define MC13783_IRQ_UDM 23
154#define MC13783_IRQ_1HZ 24
155#define MC13783_IRQ_TODA 25
156#define MC13783_IRQ_ONOFD1 27
157#define MC13783_IRQ_ONOFD2 28
158#define MC13783_IRQ_ONOFD3 29
159#define MC13783_IRQ_SYSRST 30
160#define MC13783_IRQ_RTCRST 31
161#define MC13783_IRQ_PC 32
162#define MC13783_IRQ_WARM 33
163#define MC13783_IRQ_MEMHLD 34
164#define MC13783_IRQ_PWRRDY 35
165#define MC13783_IRQ_THWARNL 36
166#define MC13783_IRQ_THWARNH 37
167#define MC13783_IRQ_CLK 38
168#define MC13783_IRQ_SEMAF 39
169#define MC13783_IRQ_MC2B 41
170#define MC13783_IRQ_HSDET 42
171#define MC13783_IRQ_HSL 43
172#define MC13783_IRQ_ALSPTH 44
173#define MC13783_IRQ_AHSSHORT 45
174#define MC13783_NUM_IRQ 46
84 175
176#endif /* __LINUX_MFD_MC13783_H */
diff --git a/include/linux/mfd/mcp.h b/include/linux/mfd/mcp.h
new file mode 100644
index 000000000000..ee496708e38b
--- /dev/null
+++ b/include/linux/mfd/mcp.h
@@ -0,0 +1,69 @@
1/*
2 * linux/drivers/mfd/mcp.h
3 *
4 * Copyright (C) 2001 Russell King, All Rights Reserved.
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.
9 */
10#ifndef MCP_H
11#define MCP_H
12
13#include <mach/dma.h>
14
15struct mcp_ops;
16
17struct mcp {
18 struct module *owner;
19 struct mcp_ops *ops;
20 spinlock_t lock;
21 int use_count;
22 unsigned int sclk_rate;
23 unsigned int rw_timeout;
24 dma_device_t dma_audio_rd;
25 dma_device_t dma_audio_wr;
26 dma_device_t dma_telco_rd;
27 dma_device_t dma_telco_wr;
28 struct device attached_device;
29 int gpio_base;
30};
31
32struct mcp_ops {
33 void (*set_telecom_divisor)(struct mcp *, unsigned int);
34 void (*set_audio_divisor)(struct mcp *, unsigned int);
35 void (*reg_write)(struct mcp *, unsigned int, unsigned int);
36 unsigned int (*reg_read)(struct mcp *, unsigned int);
37 void (*enable)(struct mcp *);
38 void (*disable)(struct mcp *);
39};
40
41void mcp_set_telecom_divisor(struct mcp *, unsigned int);
42void mcp_set_audio_divisor(struct mcp *, unsigned int);
43void mcp_reg_write(struct mcp *, unsigned int, unsigned int);
44unsigned int mcp_reg_read(struct mcp *, unsigned int);
45void mcp_enable(struct mcp *);
46void mcp_disable(struct mcp *);
47#define mcp_get_sclk_rate(mcp) ((mcp)->sclk_rate)
48
49struct mcp *mcp_host_alloc(struct device *, size_t);
50int mcp_host_register(struct mcp *);
51void mcp_host_unregister(struct mcp *);
52
53struct mcp_driver {
54 struct device_driver drv;
55 int (*probe)(struct mcp *);
56 void (*remove)(struct mcp *);
57 int (*suspend)(struct mcp *, pm_message_t);
58 int (*resume)(struct mcp *);
59};
60
61int mcp_driver_register(struct mcp_driver *);
62void mcp_driver_unregister(struct mcp_driver *);
63
64#define mcp_get_drvdata(mcp) dev_get_drvdata(&(mcp)->attached_device)
65#define mcp_set_drvdata(mcp,d) dev_set_drvdata(&(mcp)->attached_device, d)
66
67#define mcp_priv(mcp) ((void *)((mcp)+1))
68
69#endif
diff --git a/include/linux/mfd/pcf50633/core.h b/include/linux/mfd/pcf50633/core.h
index 9aba7b779fbc..3398bd9aab11 100644
--- a/include/linux/mfd/pcf50633/core.h
+++ b/include/linux/mfd/pcf50633/core.h
@@ -29,7 +29,12 @@ struct pcf50633_platform_data {
29 char **batteries; 29 char **batteries;
30 int num_batteries; 30 int num_batteries;
31 31
32 int charging_restart_interval; 32 /*
33 * Should be set accordingly to the reference resistor used, see
34 * I_{ch(ref)} charger reference current in the pcf50633 User
35 * Manual.
36 */
37 int charger_reference_current_ma;
33 38
34 /* Callbacks */ 39 /* Callbacks */
35 void (*probe_done)(struct pcf50633 *); 40 void (*probe_done)(struct pcf50633 *);
@@ -40,10 +45,6 @@ struct pcf50633_platform_data {
40 u8 resumers[5]; 45 u8 resumers[5];
41}; 46};
42 47
43struct pcf50633_subdev_pdata {
44 struct pcf50633 *pcf;
45};
46
47struct pcf50633_irq { 48struct pcf50633_irq {
48 void (*handler) (int, void *); 49 void (*handler) (int, void *);
49 void *data; 50 void *data;
@@ -217,5 +218,9 @@ enum pcf50633_reg_int5 {
217#define PCF50633_REG_LEDCTL 0x2a 218#define PCF50633_REG_LEDCTL 0x2a
218#define PCF50633_REG_LEDDIM 0x2b 219#define PCF50633_REG_LEDDIM 0x2b
219 220
220#endif 221static inline struct pcf50633 *dev_to_pcf50633(struct device *dev)
222{
223 return dev_get_drvdata(dev);
224}
221 225
226#endif
diff --git a/include/linux/mfd/pcf50633/mbc.h b/include/linux/mfd/pcf50633/mbc.h
index 4119579acf2c..df4f5fa88de3 100644
--- a/include/linux/mfd/pcf50633/mbc.h
+++ b/include/linux/mfd/pcf50633/mbc.h
@@ -128,6 +128,7 @@ enum pcf50633_reg_mbcs3 {
128int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma); 128int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma);
129 129
130int pcf50633_mbc_get_status(struct pcf50633 *); 130int pcf50633_mbc_get_status(struct pcf50633 *);
131int pcf50633_mbc_get_usb_online_status(struct pcf50633 *);
131 132
132#endif 133#endif
133 134
diff --git a/include/linux/mfd/sh_mobile_sdhi.h b/include/linux/mfd/sh_mobile_sdhi.h
new file mode 100644
index 000000000000..3bcd7163485c
--- /dev/null
+++ b/include/linux/mfd/sh_mobile_sdhi.h
@@ -0,0 +1,8 @@
1#ifndef __SH_MOBILE_SDHI_H__
2#define __SH_MOBILE_SDHI_H__
3
4struct sh_mobile_sdhi_info {
5 void (*set_pwr)(struct platform_device *pdev, int state);
6};
7
8#endif /* __SH_MOBILE_SDHI_H__ */
diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h
index 6b9c5d06690c..c3f7dff8effc 100644
--- a/include/linux/mfd/tmio.h
+++ b/include/linux/mfd/tmio.h
@@ -2,6 +2,8 @@
2#define MFD_TMIO_H 2#define MFD_TMIO_H
3 3
4#include <linux/fb.h> 4#include <linux/fb.h>
5#include <linux/io.h>
6#include <linux/platform_device.h>
5 7
6#define tmio_ioread8(addr) readb(addr) 8#define tmio_ioread8(addr) readb(addr)
7#define tmio_ioread16(addr) readw(addr) 9#define tmio_ioread16(addr) readw(addr)
@@ -18,11 +20,49 @@
18 writew((val) >> 16, (addr) + 2); \ 20 writew((val) >> 16, (addr) + 2); \
19 } while (0) 21 } while (0)
20 22
23#define CNF_CMD 0x04
24#define CNF_CTL_BASE 0x10
25#define CNF_INT_PIN 0x3d
26#define CNF_STOP_CLK_CTL 0x40
27#define CNF_GCLK_CTL 0x41
28#define CNF_SD_CLK_MODE 0x42
29#define CNF_PIN_STATUS 0x44
30#define CNF_PWR_CTL_1 0x48
31#define CNF_PWR_CTL_2 0x49
32#define CNF_PWR_CTL_3 0x4a
33#define CNF_CARD_DETECT_MODE 0x4c
34#define CNF_SD_SLOT 0x50
35#define CNF_EXT_GCLK_CTL_1 0xf0
36#define CNF_EXT_GCLK_CTL_2 0xf1
37#define CNF_EXT_GCLK_CTL_3 0xf9
38#define CNF_SD_LED_EN_1 0xfa
39#define CNF_SD_LED_EN_2 0xfe
40
41#define SDCREN 0x2 /* Enable access to MMC CTL regs. (flag in COMMAND_REG)*/
42
43#define sd_config_write8(base, shift, reg, val) \
44 tmio_iowrite8((val), (base) + ((reg) << (shift)))
45#define sd_config_write16(base, shift, reg, val) \
46 tmio_iowrite16((val), (base) + ((reg) << (shift)))
47#define sd_config_write32(base, shift, reg, val) \
48 do { \
49 tmio_iowrite16((val), (base) + ((reg) << (shift))); \
50 tmio_iowrite16((val) >> 16, (base) + ((reg + 2) << (shift))); \
51 } while (0)
52
53int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base);
54int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base);
55void tmio_core_mmc_pwr(void __iomem *cnf, int shift, int state);
56void tmio_core_mmc_clk_div(void __iomem *cnf, int shift, int state);
57
21/* 58/*
22 * data for the MMC controller 59 * data for the MMC controller
23 */ 60 */
24struct tmio_mmc_data { 61struct tmio_mmc_data {
25 const unsigned int hclk; 62 unsigned int hclk;
63 unsigned long capabilities;
64 void (*set_pwr)(struct platform_device *host, int state);
65 void (*set_clk_div)(struct platform_device *host, int state);
26}; 66};
27 67
28/* 68/*
diff --git a/include/linux/mfd/twl4030-codec.h b/include/linux/mfd/twl4030-codec.h
new file mode 100644
index 000000000000..2ec317c68e59
--- /dev/null
+++ b/include/linux/mfd/twl4030-codec.h
@@ -0,0 +1,272 @@
1/*
2 * MFD driver for twl4030 codec submodule
3 *
4 * Author: Peter Ujfalusi <peter.ujfalusi@nokia.com>
5 *
6 * Copyright: (C) 2009 Nokia Corporation
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20 * 02110-1301 USA
21 *
22 */
23
24#ifndef __TWL4030_CODEC_H__
25#define __TWL4030_CODEC_H__
26
27/* Codec registers */
28#define TWL4030_REG_CODEC_MODE 0x01
29#define TWL4030_REG_OPTION 0x02
30#define TWL4030_REG_UNKNOWN 0x03
31#define TWL4030_REG_MICBIAS_CTL 0x04
32#define TWL4030_REG_ANAMICL 0x05
33#define TWL4030_REG_ANAMICR 0x06
34#define TWL4030_REG_AVADC_CTL 0x07
35#define TWL4030_REG_ADCMICSEL 0x08
36#define TWL4030_REG_DIGMIXING 0x09
37#define TWL4030_REG_ATXL1PGA 0x0A
38#define TWL4030_REG_ATXR1PGA 0x0B
39#define TWL4030_REG_AVTXL2PGA 0x0C
40#define TWL4030_REG_AVTXR2PGA 0x0D
41#define TWL4030_REG_AUDIO_IF 0x0E
42#define TWL4030_REG_VOICE_IF 0x0F
43#define TWL4030_REG_ARXR1PGA 0x10
44#define TWL4030_REG_ARXL1PGA 0x11
45#define TWL4030_REG_ARXR2PGA 0x12
46#define TWL4030_REG_ARXL2PGA 0x13
47#define TWL4030_REG_VRXPGA 0x14
48#define TWL4030_REG_VSTPGA 0x15
49#define TWL4030_REG_VRX2ARXPGA 0x16
50#define TWL4030_REG_AVDAC_CTL 0x17
51#define TWL4030_REG_ARX2VTXPGA 0x18
52#define TWL4030_REG_ARXL1_APGA_CTL 0x19
53#define TWL4030_REG_ARXR1_APGA_CTL 0x1A
54#define TWL4030_REG_ARXL2_APGA_CTL 0x1B
55#define TWL4030_REG_ARXR2_APGA_CTL 0x1C
56#define TWL4030_REG_ATX2ARXPGA 0x1D
57#define TWL4030_REG_BT_IF 0x1E
58#define TWL4030_REG_BTPGA 0x1F
59#define TWL4030_REG_BTSTPGA 0x20
60#define TWL4030_REG_EAR_CTL 0x21
61#define TWL4030_REG_HS_SEL 0x22
62#define TWL4030_REG_HS_GAIN_SET 0x23
63#define TWL4030_REG_HS_POPN_SET 0x24
64#define TWL4030_REG_PREDL_CTL 0x25
65#define TWL4030_REG_PREDR_CTL 0x26
66#define TWL4030_REG_PRECKL_CTL 0x27
67#define TWL4030_REG_PRECKR_CTL 0x28
68#define TWL4030_REG_HFL_CTL 0x29
69#define TWL4030_REG_HFR_CTL 0x2A
70#define TWL4030_REG_ALC_CTL 0x2B
71#define TWL4030_REG_ALC_SET1 0x2C
72#define TWL4030_REG_ALC_SET2 0x2D
73#define TWL4030_REG_BOOST_CTL 0x2E
74#define TWL4030_REG_SOFTVOL_CTL 0x2F
75#define TWL4030_REG_DTMF_FREQSEL 0x30
76#define TWL4030_REG_DTMF_TONEXT1H 0x31
77#define TWL4030_REG_DTMF_TONEXT1L 0x32
78#define TWL4030_REG_DTMF_TONEXT2H 0x33
79#define TWL4030_REG_DTMF_TONEXT2L 0x34
80#define TWL4030_REG_DTMF_TONOFF 0x35
81#define TWL4030_REG_DTMF_WANONOFF 0x36
82#define TWL4030_REG_I2S_RX_SCRAMBLE_H 0x37
83#define TWL4030_REG_I2S_RX_SCRAMBLE_M 0x38
84#define TWL4030_REG_I2S_RX_SCRAMBLE_L 0x39
85#define TWL4030_REG_APLL_CTL 0x3A
86#define TWL4030_REG_DTMF_CTL 0x3B
87#define TWL4030_REG_DTMF_PGA_CTL2 0x3C
88#define TWL4030_REG_DTMF_PGA_CTL1 0x3D
89#define TWL4030_REG_MISC_SET_1 0x3E
90#define TWL4030_REG_PCMBTMUX 0x3F
91#define TWL4030_REG_RX_PATH_SEL 0x43
92#define TWL4030_REG_VDL_APGA_CTL 0x44
93#define TWL4030_REG_VIBRA_CTL 0x45
94#define TWL4030_REG_VIBRA_SET 0x46
95#define TWL4030_REG_VIBRA_PWM_SET 0x47
96#define TWL4030_REG_ANAMIC_GAIN 0x48
97#define TWL4030_REG_MISC_SET_2 0x49
98
99/* Bitfield Definitions */
100
101/* TWL4030_CODEC_MODE (0x01) Fields */
102#define TWL4030_APLL_RATE 0xF0
103#define TWL4030_APLL_RATE_8000 0x00
104#define TWL4030_APLL_RATE_11025 0x10
105#define TWL4030_APLL_RATE_12000 0x20
106#define TWL4030_APLL_RATE_16000 0x40
107#define TWL4030_APLL_RATE_22050 0x50
108#define TWL4030_APLL_RATE_24000 0x60
109#define TWL4030_APLL_RATE_32000 0x80
110#define TWL4030_APLL_RATE_44100 0x90
111#define TWL4030_APLL_RATE_48000 0xA0
112#define TWL4030_APLL_RATE_96000 0xE0
113#define TWL4030_SEL_16K 0x08
114#define TWL4030_CODECPDZ 0x02
115#define TWL4030_OPT_MODE 0x01
116#define TWL4030_OPTION_1 (1 << 0)
117#define TWL4030_OPTION_2 (0 << 0)
118
119/* TWL4030_OPTION (0x02) Fields */
120#define TWL4030_ATXL1_EN (1 << 0)
121#define TWL4030_ATXR1_EN (1 << 1)
122#define TWL4030_ATXL2_VTXL_EN (1 << 2)
123#define TWL4030_ATXR2_VTXR_EN (1 << 3)
124#define TWL4030_ARXL1_VRX_EN (1 << 4)
125#define TWL4030_ARXR1_EN (1 << 5)
126#define TWL4030_ARXL2_EN (1 << 6)
127#define TWL4030_ARXR2_EN (1 << 7)
128
129/* TWL4030_REG_MICBIAS_CTL (0x04) Fields */
130#define TWL4030_MICBIAS2_CTL 0x40
131#define TWL4030_MICBIAS1_CTL 0x20
132#define TWL4030_HSMICBIAS_EN 0x04
133#define TWL4030_MICBIAS2_EN 0x02
134#define TWL4030_MICBIAS1_EN 0x01
135
136/* ANAMICL (0x05) Fields */
137#define TWL4030_CNCL_OFFSET_START 0x80
138#define TWL4030_OFFSET_CNCL_SEL 0x60
139#define TWL4030_OFFSET_CNCL_SEL_ARX1 0x00
140#define TWL4030_OFFSET_CNCL_SEL_ARX2 0x20
141#define TWL4030_OFFSET_CNCL_SEL_VRX 0x40
142#define TWL4030_OFFSET_CNCL_SEL_ALL 0x60
143#define TWL4030_MICAMPL_EN 0x10
144#define TWL4030_CKMIC_EN 0x08
145#define TWL4030_AUXL_EN 0x04
146#define TWL4030_HSMIC_EN 0x02
147#define TWL4030_MAINMIC_EN 0x01
148
149/* ANAMICR (0x06) Fields */
150#define TWL4030_MICAMPR_EN 0x10
151#define TWL4030_AUXR_EN 0x04
152#define TWL4030_SUBMIC_EN 0x01
153
154/* AVADC_CTL (0x07) Fields */
155#define TWL4030_ADCL_EN 0x08
156#define TWL4030_AVADC_CLK_PRIORITY 0x04
157#define TWL4030_ADCR_EN 0x02
158
159/* TWL4030_REG_ADCMICSEL (0x08) Fields */
160#define TWL4030_DIGMIC1_EN 0x08
161#define TWL4030_TX2IN_SEL 0x04
162#define TWL4030_DIGMIC0_EN 0x02
163#define TWL4030_TX1IN_SEL 0x01
164
165/* AUDIO_IF (0x0E) Fields */
166#define TWL4030_AIF_SLAVE_EN 0x80
167#define TWL4030_DATA_WIDTH 0x60
168#define TWL4030_DATA_WIDTH_16S_16W 0x00
169#define TWL4030_DATA_WIDTH_32S_16W 0x40
170#define TWL4030_DATA_WIDTH_32S_24W 0x60
171#define TWL4030_AIF_FORMAT 0x18
172#define TWL4030_AIF_FORMAT_CODEC 0x00
173#define TWL4030_AIF_FORMAT_LEFT 0x08
174#define TWL4030_AIF_FORMAT_RIGHT 0x10
175#define TWL4030_AIF_FORMAT_TDM 0x18
176#define TWL4030_AIF_TRI_EN 0x04
177#define TWL4030_CLK256FS_EN 0x02
178#define TWL4030_AIF_EN 0x01
179
180/* VOICE_IF (0x0F) Fields */
181#define TWL4030_VIF_SLAVE_EN 0x80
182#define TWL4030_VIF_DIN_EN 0x40
183#define TWL4030_VIF_DOUT_EN 0x20
184#define TWL4030_VIF_SWAP 0x10
185#define TWL4030_VIF_FORMAT 0x08
186#define TWL4030_VIF_TRI_EN 0x04
187#define TWL4030_VIF_SUB_EN 0x02
188#define TWL4030_VIF_EN 0x01
189
190/* EAR_CTL (0x21) */
191#define TWL4030_EAR_GAIN 0x30
192
193/* HS_GAIN_SET (0x23) Fields */
194#define TWL4030_HSR_GAIN 0x0C
195#define TWL4030_HSR_GAIN_PWR_DOWN 0x00
196#define TWL4030_HSR_GAIN_PLUS_6DB 0x04
197#define TWL4030_HSR_GAIN_0DB 0x08
198#define TWL4030_HSR_GAIN_MINUS_6DB 0x0C
199#define TWL4030_HSL_GAIN 0x03
200#define TWL4030_HSL_GAIN_PWR_DOWN 0x00
201#define TWL4030_HSL_GAIN_PLUS_6DB 0x01
202#define TWL4030_HSL_GAIN_0DB 0x02
203#define TWL4030_HSL_GAIN_MINUS_6DB 0x03
204
205/* HS_POPN_SET (0x24) Fields */
206#define TWL4030_VMID_EN 0x40
207#define TWL4030_EXTMUTE 0x20
208#define TWL4030_RAMP_DELAY 0x1C
209#define TWL4030_RAMP_DELAY_20MS 0x00
210#define TWL4030_RAMP_DELAY_40MS 0x04
211#define TWL4030_RAMP_DELAY_81MS 0x08
212#define TWL4030_RAMP_DELAY_161MS 0x0C
213#define TWL4030_RAMP_DELAY_323MS 0x10
214#define TWL4030_RAMP_DELAY_645MS 0x14
215#define TWL4030_RAMP_DELAY_1291MS 0x18
216#define TWL4030_RAMP_DELAY_2581MS 0x1C
217#define TWL4030_RAMP_EN 0x02
218
219/* PREDL_CTL (0x25) */
220#define TWL4030_PREDL_GAIN 0x30
221
222/* PREDR_CTL (0x26) */
223#define TWL4030_PREDR_GAIN 0x30
224
225/* PRECKL_CTL (0x27) */
226#define TWL4030_PRECKL_GAIN 0x30
227
228/* PRECKR_CTL (0x28) */
229#define TWL4030_PRECKR_GAIN 0x30
230
231/* HFL_CTL (0x29, 0x2A) Fields */
232#define TWL4030_HF_CTL_HB_EN 0x04
233#define TWL4030_HF_CTL_LOOP_EN 0x08
234#define TWL4030_HF_CTL_RAMP_EN 0x10
235#define TWL4030_HF_CTL_REF_EN 0x20
236
237/* APLL_CTL (0x3A) Fields */
238#define TWL4030_APLL_EN 0x10
239#define TWL4030_APLL_INFREQ 0x0F
240#define TWL4030_APLL_INFREQ_19200KHZ 0x05
241#define TWL4030_APLL_INFREQ_26000KHZ 0x06
242#define TWL4030_APLL_INFREQ_38400KHZ 0x0F
243
244/* REG_MISC_SET_1 (0x3E) Fields */
245#define TWL4030_CLK64_EN 0x80
246#define TWL4030_SCRAMBLE_EN 0x40
247#define TWL4030_FMLOOP_EN 0x20
248#define TWL4030_SMOOTH_ANAVOL_EN 0x02
249#define TWL4030_DIGMIC_LR_SWAP_EN 0x01
250
251/* VIBRA_CTL (0x45) */
252#define TWL4030_VIBRA_EN 0x01
253#define TWL4030_VIBRA_DIR 0x02
254#define TWL4030_VIBRA_AUDIO_SEL_L1 (0x00 << 2)
255#define TWL4030_VIBRA_AUDIO_SEL_R1 (0x01 << 2)
256#define TWL4030_VIBRA_AUDIO_SEL_L2 (0x02 << 2)
257#define TWL4030_VIBRA_AUDIO_SEL_R2 (0x03 << 2)
258#define TWL4030_VIBRA_SEL 0x10
259#define TWL4030_VIBRA_DIR_SEL 0x20
260
261/* TWL4030 codec resource IDs */
262enum twl4030_codec_res {
263 TWL4030_CODEC_RES_POWER = 0,
264 TWL4030_CODEC_RES_APLL,
265 TWL4030_CODEC_RES_MAX,
266};
267
268int twl4030_codec_disable_resource(enum twl4030_codec_res id);
269int twl4030_codec_enable_resource(enum twl4030_codec_res id);
270unsigned int twl4030_codec_get_mclk(void);
271
272#endif /* End of __TWL4030_CODEC_H__ */
diff --git a/include/linux/mfd/ucb1x00.h b/include/linux/mfd/ucb1x00.h
new file mode 100644
index 000000000000..4321f044d1e4
--- /dev/null
+++ b/include/linux/mfd/ucb1x00.h
@@ -0,0 +1,259 @@
1/*
2 * linux/include/mfd/ucb1x00.h
3 *
4 * Copyright (C) 2001 Russell King, All Rights Reserved.
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.
9 */
10#ifndef UCB1200_H
11#define UCB1200_H
12
13#include <linux/mfd/mcp.h>
14#include <linux/gpio.h>
15#include <linux/semaphore.h>
16
17#define UCB_IO_DATA 0x00
18#define UCB_IO_DIR 0x01
19
20#define UCB_IO_0 (1 << 0)
21#define UCB_IO_1 (1 << 1)
22#define UCB_IO_2 (1 << 2)
23#define UCB_IO_3 (1 << 3)
24#define UCB_IO_4 (1 << 4)
25#define UCB_IO_5 (1 << 5)
26#define UCB_IO_6 (1 << 6)
27#define UCB_IO_7 (1 << 7)
28#define UCB_IO_8 (1 << 8)
29#define UCB_IO_9 (1 << 9)
30
31#define UCB_IE_RIS 0x02
32#define UCB_IE_FAL 0x03
33#define UCB_IE_STATUS 0x04
34#define UCB_IE_CLEAR 0x04
35#define UCB_IE_ADC (1 << 11)
36#define UCB_IE_TSPX (1 << 12)
37#define UCB_IE_TSMX (1 << 13)
38#define UCB_IE_TCLIP (1 << 14)
39#define UCB_IE_ACLIP (1 << 15)
40
41#define UCB_IRQ_TSPX 12
42
43#define UCB_TC_A 0x05
44#define UCB_TC_A_LOOP (1 << 7) /* UCB1200 */
45#define UCB_TC_A_AMPL (1 << 7) /* UCB1300 */
46
47#define UCB_TC_B 0x06
48#define UCB_TC_B_VOICE_ENA (1 << 3)
49#define UCB_TC_B_CLIP (1 << 4)
50#define UCB_TC_B_ATT (1 << 6)
51#define UCB_TC_B_SIDE_ENA (1 << 11)
52#define UCB_TC_B_MUTE (1 << 13)
53#define UCB_TC_B_IN_ENA (1 << 14)
54#define UCB_TC_B_OUT_ENA (1 << 15)
55
56#define UCB_AC_A 0x07
57#define UCB_AC_B 0x08
58#define UCB_AC_B_LOOP (1 << 8)
59#define UCB_AC_B_MUTE (1 << 13)
60#define UCB_AC_B_IN_ENA (1 << 14)
61#define UCB_AC_B_OUT_ENA (1 << 15)
62
63#define UCB_TS_CR 0x09
64#define UCB_TS_CR_TSMX_POW (1 << 0)
65#define UCB_TS_CR_TSPX_POW (1 << 1)
66#define UCB_TS_CR_TSMY_POW (1 << 2)
67#define UCB_TS_CR_TSPY_POW (1 << 3)
68#define UCB_TS_CR_TSMX_GND (1 << 4)
69#define UCB_TS_CR_TSPX_GND (1 << 5)
70#define UCB_TS_CR_TSMY_GND (1 << 6)
71#define UCB_TS_CR_TSPY_GND (1 << 7)
72#define UCB_TS_CR_MODE_INT (0 << 8)
73#define UCB_TS_CR_MODE_PRES (1 << 8)
74#define UCB_TS_CR_MODE_POS (2 << 8)
75#define UCB_TS_CR_BIAS_ENA (1 << 11)
76#define UCB_TS_CR_TSPX_LOW (1 << 12)
77#define UCB_TS_CR_TSMX_LOW (1 << 13)
78
79#define UCB_ADC_CR 0x0a
80#define UCB_ADC_SYNC_ENA (1 << 0)
81#define UCB_ADC_VREFBYP_CON (1 << 1)
82#define UCB_ADC_INP_TSPX (0 << 2)
83#define UCB_ADC_INP_TSMX (1 << 2)
84#define UCB_ADC_INP_TSPY (2 << 2)
85#define UCB_ADC_INP_TSMY (3 << 2)
86#define UCB_ADC_INP_AD0 (4 << 2)
87#define UCB_ADC_INP_AD1 (5 << 2)
88#define UCB_ADC_INP_AD2 (6 << 2)
89#define UCB_ADC_INP_AD3 (7 << 2)
90#define UCB_ADC_EXT_REF (1 << 5)
91#define UCB_ADC_START (1 << 7)
92#define UCB_ADC_ENA (1 << 15)
93
94#define UCB_ADC_DATA 0x0b
95#define UCB_ADC_DAT_VAL (1 << 15)
96#define UCB_ADC_DAT(x) (((x) & 0x7fe0) >> 5)
97
98#define UCB_ID 0x0c
99#define UCB_ID_1200 0x1004
100#define UCB_ID_1300 0x1005
101#define UCB_ID_TC35143 0x9712
102
103#define UCB_MODE 0x0d
104#define UCB_MODE_DYN_VFLAG_ENA (1 << 12)
105#define UCB_MODE_AUD_OFF_CAN (1 << 13)
106
107
108struct ucb1x00_irq {
109 void *devid;
110 void (*fn)(int, void *);
111};
112
113struct ucb1x00 {
114 spinlock_t lock;
115 struct mcp *mcp;
116 unsigned int irq;
117 struct semaphore adc_sem;
118 spinlock_t io_lock;
119 u16 id;
120 u16 io_dir;
121 u16 io_out;
122 u16 adc_cr;
123 u16 irq_fal_enbl;
124 u16 irq_ris_enbl;
125 struct ucb1x00_irq irq_handler[16];
126 struct device dev;
127 struct list_head node;
128 struct list_head devs;
129 struct gpio_chip gpio;
130};
131
132struct ucb1x00_driver;
133
134struct ucb1x00_dev {
135 struct list_head dev_node;
136 struct list_head drv_node;
137 struct ucb1x00 *ucb;
138 struct ucb1x00_driver *drv;
139 void *priv;
140};
141
142struct ucb1x00_driver {
143 struct list_head node;
144 struct list_head devs;
145 int (*add)(struct ucb1x00_dev *dev);
146 void (*remove)(struct ucb1x00_dev *dev);
147 int (*suspend)(struct ucb1x00_dev *dev, pm_message_t state);
148 int (*resume)(struct ucb1x00_dev *dev);
149};
150
151#define classdev_to_ucb1x00(cd) container_of(cd, struct ucb1x00, dev)
152
153int ucb1x00_register_driver(struct ucb1x00_driver *);
154void ucb1x00_unregister_driver(struct ucb1x00_driver *);
155
156/**
157 * ucb1x00_clkrate - return the UCB1x00 SIB clock rate
158 * @ucb: UCB1x00 structure describing chip
159 *
160 * Return the SIB clock rate in Hz.
161 */
162static inline unsigned int ucb1x00_clkrate(struct ucb1x00 *ucb)
163{
164 return mcp_get_sclk_rate(ucb->mcp);
165}
166
167/**
168 * ucb1x00_enable - enable the UCB1x00 SIB clock
169 * @ucb: UCB1x00 structure describing chip
170 *
171 * Enable the SIB clock. This can be called multiple times.
172 */
173static inline void ucb1x00_enable(struct ucb1x00 *ucb)
174{
175 mcp_enable(ucb->mcp);
176}
177
178/**
179 * ucb1x00_disable - disable the UCB1x00 SIB clock
180 * @ucb: UCB1x00 structure describing chip
181 *
182 * Disable the SIB clock. The SIB clock will only be disabled
183 * when the number of ucb1x00_enable calls match the number of
184 * ucb1x00_disable calls.
185 */
186static inline void ucb1x00_disable(struct ucb1x00 *ucb)
187{
188 mcp_disable(ucb->mcp);
189}
190
191/**
192 * ucb1x00_reg_write - write a UCB1x00 register
193 * @ucb: UCB1x00 structure describing chip
194 * @reg: UCB1x00 4-bit register index to write
195 * @val: UCB1x00 16-bit value to write
196 *
197 * Write the UCB1x00 register @reg with value @val. The SIB
198 * clock must be running for this function to return.
199 */
200static inline void ucb1x00_reg_write(struct ucb1x00 *ucb, unsigned int reg, unsigned int val)
201{
202 mcp_reg_write(ucb->mcp, reg, val);
203}
204
205/**
206 * ucb1x00_reg_read - read a UCB1x00 register
207 * @ucb: UCB1x00 structure describing chip
208 * @reg: UCB1x00 4-bit register index to write
209 *
210 * Read the UCB1x00 register @reg and return its value. The SIB
211 * clock must be running for this function to return.
212 */
213static inline unsigned int ucb1x00_reg_read(struct ucb1x00 *ucb, unsigned int reg)
214{
215 return mcp_reg_read(ucb->mcp, reg);
216}
217/**
218 * ucb1x00_set_audio_divisor -
219 * @ucb: UCB1x00 structure describing chip
220 * @div: SIB clock divisor
221 */
222static inline void ucb1x00_set_audio_divisor(struct ucb1x00 *ucb, unsigned int div)
223{
224 mcp_set_audio_divisor(ucb->mcp, div);
225}
226
227/**
228 * ucb1x00_set_telecom_divisor -
229 * @ucb: UCB1x00 structure describing chip
230 * @div: SIB clock divisor
231 */
232static inline void ucb1x00_set_telecom_divisor(struct ucb1x00 *ucb, unsigned int div)
233{
234 mcp_set_telecom_divisor(ucb->mcp, div);
235}
236
237void ucb1x00_io_set_dir(struct ucb1x00 *ucb, unsigned int, unsigned int);
238void ucb1x00_io_write(struct ucb1x00 *ucb, unsigned int, unsigned int);
239unsigned int ucb1x00_io_read(struct ucb1x00 *ucb);
240
241#define UCB_NOSYNC (0)
242#define UCB_SYNC (1)
243
244unsigned int ucb1x00_adc_read(struct ucb1x00 *ucb, int adc_channel, int sync);
245void ucb1x00_adc_enable(struct ucb1x00 *ucb);
246void ucb1x00_adc_disable(struct ucb1x00 *ucb);
247
248/*
249 * Which edges of the IRQ do you want to control today?
250 */
251#define UCB_RISING (1 << 0)
252#define UCB_FALLING (1 << 1)
253
254int ucb1x00_hook_irq(struct ucb1x00 *ucb, unsigned int idx, void (*fn)(int, void *), void *devid);
255void ucb1x00_enable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges);
256void ucb1x00_disable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges);
257int ucb1x00_free_irq(struct ucb1x00 *ucb, unsigned int idx, void *devid);
258
259#endif
diff --git a/include/linux/mfd/wm831x/core.h b/include/linux/mfd/wm831x/core.h
index 91eb493bf14c..5915f6e3d9ab 100644
--- a/include/linux/mfd/wm831x/core.h
+++ b/include/linux/mfd/wm831x/core.h
@@ -15,8 +15,8 @@
15#ifndef __MFD_WM831X_CORE_H__ 15#ifndef __MFD_WM831X_CORE_H__
16#define __MFD_WM831X_CORE_H__ 16#define __MFD_WM831X_CORE_H__
17 17
18#include <linux/completion.h>
18#include <linux/interrupt.h> 19#include <linux/interrupt.h>
19#include <linux/workqueue.h>
20 20
21/* 21/*
22 * Register values. 22 * Register values.
@@ -117,6 +117,7 @@
117#define WM831X_DC3_SLEEP_CONTROL 0x4063 117#define WM831X_DC3_SLEEP_CONTROL 0x4063
118#define WM831X_DC4_CONTROL 0x4064 118#define WM831X_DC4_CONTROL 0x4064
119#define WM831X_DC4_SLEEP_CONTROL 0x4065 119#define WM831X_DC4_SLEEP_CONTROL 0x4065
120#define WM832X_DC4_SLEEP_CONTROL 0x4067
120#define WM831X_EPE1_CONTROL 0x4066 121#define WM831X_EPE1_CONTROL 0x4066
121#define WM831X_EPE2_CONTROL 0x4067 122#define WM831X_EPE2_CONTROL 0x4067
122#define WM831X_LDO1_CONTROL 0x4068 123#define WM831X_LDO1_CONTROL 0x4068
@@ -235,6 +236,8 @@
235 236
236struct regulator_dev; 237struct regulator_dev;
237 238
239#define WM831X_NUM_IRQ_REGS 5
240
238struct wm831x { 241struct wm831x {
239 struct mutex io_lock; 242 struct mutex io_lock;
240 243
@@ -248,12 +251,18 @@ struct wm831x {
248 251
249 int irq; /* Our chip IRQ */ 252 int irq; /* Our chip IRQ */
250 struct mutex irq_lock; 253 struct mutex irq_lock;
251 struct workqueue_struct *irq_wq;
252 struct work_struct irq_work;
253 unsigned int irq_base; 254 unsigned int irq_base;
254 int irq_masks[5]; 255 int irq_masks_cur[WM831X_NUM_IRQ_REGS]; /* Currently active value */
256 int irq_masks_cache[WM831X_NUM_IRQ_REGS]; /* Cached hardware value */
257
258 /* Chip revision based flags */
259 unsigned has_gpio_ena:1; /* Has GPIO enable bit */
260 unsigned has_cs_sts:1; /* Has current sink status bit */
261
262 int num_gpio;
255 263
256 struct mutex auxadc_lock; 264 struct mutex auxadc_lock;
265 struct completion auxadc_done;
257 266
258 /* The WM831x has a security key blocking access to certain 267 /* The WM831x has a security key blocking access to certain
259 * registers. The mutex is taken by the accessors for locking 268 * registers. The mutex is taken by the accessors for locking
@@ -278,12 +287,30 @@ int wm831x_bulk_read(struct wm831x *wm831x, unsigned short reg,
278int wm831x_irq_init(struct wm831x *wm831x, int irq); 287int wm831x_irq_init(struct wm831x *wm831x, int irq);
279void wm831x_irq_exit(struct wm831x *wm831x); 288void wm831x_irq_exit(struct wm831x *wm831x);
280 289
281int __must_check wm831x_request_irq(struct wm831x *wm831x, 290static inline int __must_check wm831x_request_irq(struct wm831x *wm831x,
282 unsigned int irq, irq_handler_t handler, 291 unsigned int irq,
283 unsigned long flags, const char *name, 292 irq_handler_t handler,
284 void *dev); 293 unsigned long flags,
285void wm831x_free_irq(struct wm831x *wm831x, unsigned int, void *); 294 const char *name,
286void wm831x_disable_irq(struct wm831x *wm831x, int irq); 295 void *dev)
287void wm831x_enable_irq(struct wm831x *wm831x, int irq); 296{
297 return request_threaded_irq(irq, NULL, handler, flags, name, dev);
298}
299
300static inline void wm831x_free_irq(struct wm831x *wm831x,
301 unsigned int irq, void *dev)
302{
303 free_irq(irq, dev);
304}
305
306static inline void wm831x_disable_irq(struct wm831x *wm831x, int irq)
307{
308 disable_irq(irq);
309}
310
311static inline void wm831x_enable_irq(struct wm831x *wm831x, int irq)
312{
313 enable_irq(irq);
314}
288 315
289#endif 316#endif
diff --git a/include/linux/mfd/wm831x/gpio.h b/include/linux/mfd/wm831x/gpio.h
index 2835614af0e3..9b163c58865f 100644
--- a/include/linux/mfd/wm831x/gpio.h
+++ b/include/linux/mfd/wm831x/gpio.h
@@ -41,6 +41,10 @@
41#define WM831X_GPN_OD_MASK 0x0200 /* GPN_OD */ 41#define WM831X_GPN_OD_MASK 0x0200 /* GPN_OD */
42#define WM831X_GPN_OD_SHIFT 9 /* GPN_OD */ 42#define WM831X_GPN_OD_SHIFT 9 /* GPN_OD */
43#define WM831X_GPN_OD_WIDTH 1 /* GPN_OD */ 43#define WM831X_GPN_OD_WIDTH 1 /* GPN_OD */
44#define WM831X_GPN_ENA 0x0080 /* GPN_ENA */
45#define WM831X_GPN_ENA_MASK 0x0080 /* GPN_ENA */
46#define WM831X_GPN_ENA_SHIFT 7 /* GPN_ENA */
47#define WM831X_GPN_ENA_WIDTH 1 /* GPN_ENA */
44#define WM831X_GPN_TRI 0x0080 /* GPN_TRI */ 48#define WM831X_GPN_TRI 0x0080 /* GPN_TRI */
45#define WM831X_GPN_TRI_MASK 0x0080 /* GPN_TRI */ 49#define WM831X_GPN_TRI_MASK 0x0080 /* GPN_TRI */
46#define WM831X_GPN_TRI_SHIFT 7 /* GPN_TRI */ 50#define WM831X_GPN_TRI_SHIFT 7 /* GPN_TRI */
diff --git a/include/linux/mfd/wm831x/pdata.h b/include/linux/mfd/wm831x/pdata.h
index 90d820260aad..fd322aca33ba 100644
--- a/include/linux/mfd/wm831x/pdata.h
+++ b/include/linux/mfd/wm831x/pdata.h
@@ -41,6 +41,23 @@ struct wm831x_battery_pdata {
41 int timeout; /** Charge cycle timeout, in minutes */ 41 int timeout; /** Charge cycle timeout, in minutes */
42}; 42};
43 43
44/**
45 * Configuration for the WM831x DC-DC BuckWise convertors. This
46 * should be passed as driver_data in the regulator_init_data.
47 *
48 * Currently all the configuration is for the fast DVS switching
49 * support of the devices. This allows MFPs on the device to be
50 * configured as an input to switch between two output voltages,
51 * allowing voltage transitions without the expense of an access over
52 * I2C or SPI buses.
53 */
54struct wm831x_buckv_pdata {
55 int dvs_gpio; /** CPU GPIO to use for DVS switching */
56 int dvs_control_src; /** Hardware DVS source to use (1 or 2) */
57 int dvs_init_state; /** DVS state to expect on startup */
58 int dvs_state_gpio; /** CPU GPIO to use for monitoring status */
59};
60
44/* Sources for status LED configuration. Values are register values 61/* Sources for status LED configuration. Values are register values
45 * plus 1 to allow for a zero default for preserve. 62 * plus 1 to allow for a zero default for preserve.
46 */ 63 */
@@ -91,6 +108,7 @@ struct wm831x_pdata {
91 /** Called after subdevices are set up */ 108 /** Called after subdevices are set up */
92 int (*post_init)(struct wm831x *wm831x); 109 int (*post_init)(struct wm831x *wm831x);
93 110
111 int irq_base;
94 int gpio_base; 112 int gpio_base;
95 struct wm831x_backlight_pdata *backlight; 113 struct wm831x_backlight_pdata *backlight;
96 struct wm831x_backup_pdata *backup; 114 struct wm831x_backup_pdata *backup;
diff --git a/include/linux/mfd/wm8350/core.h b/include/linux/mfd/wm8350/core.h
index 1d595de6a055..98fcc977e82b 100644
--- a/include/linux/mfd/wm8350/core.h
+++ b/include/linux/mfd/wm8350/core.h
@@ -15,7 +15,8 @@
15 15
16#include <linux/kernel.h> 16#include <linux/kernel.h>
17#include <linux/mutex.h> 17#include <linux/mutex.h>
18#include <linux/workqueue.h> 18#include <linux/interrupt.h>
19#include <linux/completion.h>
19 20
20#include <linux/mfd/wm8350/audio.h> 21#include <linux/mfd/wm8350/audio.h>
21#include <linux/mfd/wm8350/gpio.h> 22#include <linux/mfd/wm8350/gpio.h>
@@ -579,6 +580,8 @@
579 580
580#define WM8350_NUM_IRQ 63 581#define WM8350_NUM_IRQ 63
581 582
583#define WM8350_NUM_IRQ_REGS 7
584
582struct wm8350_reg_access { 585struct wm8350_reg_access {
583 u16 readable; /* Mask of readable bits */ 586 u16 readable; /* Mask of readable bits */
584 u16 writable; /* Mask of writable bits */ 587 u16 writable; /* Mask of writable bits */
@@ -600,11 +603,6 @@ extern const u16 wm8352_mode3_defaults[];
600 603
601struct wm8350; 604struct wm8350;
602 605
603struct wm8350_irq {
604 void (*handler) (struct wm8350 *, int, void *);
605 void *data;
606};
607
608struct wm8350_hwmon { 606struct wm8350_hwmon {
609 struct platform_device *pdev; 607 struct platform_device *pdev;
610 struct device *classdev; 608 struct device *classdev;
@@ -624,11 +622,13 @@ struct wm8350 {
624 u16 *reg_cache; 622 u16 *reg_cache;
625 623
626 struct mutex auxadc_mutex; 624 struct mutex auxadc_mutex;
625 struct completion auxadc_done;
627 626
628 /* Interrupt handling */ 627 /* Interrupt handling */
629 struct mutex irq_mutex; /* IRQ table mutex */ 628 struct mutex irq_lock;
630 struct wm8350_irq irq[WM8350_NUM_IRQ];
631 int chip_irq; 629 int chip_irq;
630 int irq_base;
631 u16 irq_masks[WM8350_NUM_IRQ_REGS];
632 632
633 /* Client devices */ 633 /* Client devices */
634 struct wm8350_codec codec; 634 struct wm8350_codec codec;
@@ -646,10 +646,14 @@ struct wm8350 {
646 * @init: Function called during driver initialisation. Should be 646 * @init: Function called during driver initialisation. Should be
647 * used by the platform to configure GPIO functions and similar. 647 * used by the platform to configure GPIO functions and similar.
648 * @irq_high: Set if WM8350 IRQ is active high. 648 * @irq_high: Set if WM8350 IRQ is active high.
649 * @irq_base: Base IRQ for genirq (not currently used).
650 * @gpio_base: Base for gpiolib.
649 */ 651 */
650struct wm8350_platform_data { 652struct wm8350_platform_data {
651 int (*init)(struct wm8350 *wm8350); 653 int (*init)(struct wm8350 *wm8350);
652 int irq_high; 654 int irq_high;
655 int irq_base;
656 int gpio_base;
653}; 657};
654 658
655 659
@@ -675,12 +679,35 @@ int wm8350_block_write(struct wm8350 *wm8350, int reg, int size, u16 *src);
675/* 679/*
676 * WM8350 internal interrupts 680 * WM8350 internal interrupts
677 */ 681 */
678int wm8350_register_irq(struct wm8350 *wm8350, int irq, 682static inline int wm8350_register_irq(struct wm8350 *wm8350, int irq,
679 void (*handler) (struct wm8350 *, int, void *), 683 irq_handler_t handler,
680 void *data); 684 unsigned long flags,
681int wm8350_free_irq(struct wm8350 *wm8350, int irq); 685 const char *name, void *data)
682int wm8350_mask_irq(struct wm8350 *wm8350, int irq); 686{
683int wm8350_unmask_irq(struct wm8350 *wm8350, int irq); 687 if (!wm8350->irq_base)
684 688 return -ENODEV;
689
690 return request_threaded_irq(irq + wm8350->irq_base, NULL,
691 handler, flags, name, data);
692}
693
694static inline void wm8350_free_irq(struct wm8350 *wm8350, int irq, void *data)
695{
696 free_irq(irq + wm8350->irq_base, data);
697}
698
699static inline void wm8350_mask_irq(struct wm8350 *wm8350, int irq)
700{
701 disable_irq(irq + wm8350->irq_base);
702}
703
704static inline void wm8350_unmask_irq(struct wm8350 *wm8350, int irq)
705{
706 enable_irq(irq + wm8350->irq_base);
707}
708
709int wm8350_irq_init(struct wm8350 *wm8350, int irq,
710 struct wm8350_platform_data *pdata);
711int wm8350_irq_exit(struct wm8350 *wm8350);
685 712
686#endif 713#endif
diff --git a/include/linux/mfd/wm8350/gpio.h b/include/linux/mfd/wm8350/gpio.h
index ed91e8f5d298..d657bcd6d955 100644
--- a/include/linux/mfd/wm8350/gpio.h
+++ b/include/linux/mfd/wm8350/gpio.h
@@ -29,6 +29,7 @@
29#define WM8350_GPIO_FUNCTION_SELECT_2 0x8D 29#define WM8350_GPIO_FUNCTION_SELECT_2 0x8D
30#define WM8350_GPIO_FUNCTION_SELECT_3 0x8E 30#define WM8350_GPIO_FUNCTION_SELECT_3 0x8E
31#define WM8350_GPIO_FUNCTION_SELECT_4 0x8F 31#define WM8350_GPIO_FUNCTION_SELECT_4 0x8F
32#define WM8350_GPIO_LEVEL 0xE6
32 33
33/* 34/*
34 * GPIO Functions 35 * GPIO Functions
@@ -173,6 +174,24 @@
173#define WM8350_GPIO_DEBOUNCE_ON 1 174#define WM8350_GPIO_DEBOUNCE_ON 1
174 175
175/* 176/*
177 * R30 (0x1E) - GPIO Interrupt Status
178 */
179#define WM8350_GP12_EINT 0x1000
180#define WM8350_GP11_EINT 0x0800
181#define WM8350_GP10_EINT 0x0400
182#define WM8350_GP9_EINT 0x0200
183#define WM8350_GP8_EINT 0x0100
184#define WM8350_GP7_EINT 0x0080
185#define WM8350_GP6_EINT 0x0040
186#define WM8350_GP5_EINT 0x0020
187#define WM8350_GP4_EINT 0x0010
188#define WM8350_GP3_EINT 0x0008
189#define WM8350_GP2_EINT 0x0004
190#define WM8350_GP1_EINT 0x0002
191#define WM8350_GP0_EINT 0x0001
192
193
194/*
176 * R128 (0x80) - GPIO Debounce 195 * R128 (0x80) - GPIO Debounce
177 */ 196 */
178#define WM8350_GP12_DB 0x1000 197#define WM8350_GP12_DB 0x1000
diff --git a/include/linux/mfd/wm8350/pmic.h b/include/linux/mfd/wm8350/pmic.h
index be3264e286e0..e786fe9841ef 100644
--- a/include/linux/mfd/wm8350/pmic.h
+++ b/include/linux/mfd/wm8350/pmic.h
@@ -666,20 +666,20 @@
666#define WM8350_ISINK_FLASH_DUR_64MS (1 << 8) 666#define WM8350_ISINK_FLASH_DUR_64MS (1 << 8)
667#define WM8350_ISINK_FLASH_DUR_96MS (2 << 8) 667#define WM8350_ISINK_FLASH_DUR_96MS (2 << 8)
668#define WM8350_ISINK_FLASH_DUR_1024MS (3 << 8) 668#define WM8350_ISINK_FLASH_DUR_1024MS (3 << 8)
669#define WM8350_ISINK_FLASH_ON_INSTANT (0 << 4) 669#define WM8350_ISINK_FLASH_ON_INSTANT (0 << 0)
670#define WM8350_ISINK_FLASH_ON_0_25S (1 << 4) 670#define WM8350_ISINK_FLASH_ON_0_25S (1 << 0)
671#define WM8350_ISINK_FLASH_ON_0_50S (2 << 4) 671#define WM8350_ISINK_FLASH_ON_0_50S (2 << 0)
672#define WM8350_ISINK_FLASH_ON_1_00S (3 << 4) 672#define WM8350_ISINK_FLASH_ON_1_00S (3 << 0)
673#define WM8350_ISINK_FLASH_ON_1_95S (1 << 4) 673#define WM8350_ISINK_FLASH_ON_1_95S (1 << 0)
674#define WM8350_ISINK_FLASH_ON_3_91S (2 << 4) 674#define WM8350_ISINK_FLASH_ON_3_91S (2 << 0)
675#define WM8350_ISINK_FLASH_ON_7_80S (3 << 4) 675#define WM8350_ISINK_FLASH_ON_7_80S (3 << 0)
676#define WM8350_ISINK_FLASH_OFF_INSTANT (0 << 0) 676#define WM8350_ISINK_FLASH_OFF_INSTANT (0 << 4)
677#define WM8350_ISINK_FLASH_OFF_0_25S (1 << 0) 677#define WM8350_ISINK_FLASH_OFF_0_25S (1 << 4)
678#define WM8350_ISINK_FLASH_OFF_0_50S (2 << 0) 678#define WM8350_ISINK_FLASH_OFF_0_50S (2 << 4)
679#define WM8350_ISINK_FLASH_OFF_1_00S (3 << 0) 679#define WM8350_ISINK_FLASH_OFF_1_00S (3 << 4)
680#define WM8350_ISINK_FLASH_OFF_1_95S (1 << 0) 680#define WM8350_ISINK_FLASH_OFF_1_95S (1 << 4)
681#define WM8350_ISINK_FLASH_OFF_3_91S (2 << 0) 681#define WM8350_ISINK_FLASH_OFF_3_91S (2 << 4)
682#define WM8350_ISINK_FLASH_OFF_7_80S (3 << 0) 682#define WM8350_ISINK_FLASH_OFF_7_80S (3 << 4)
683 683
684/* 684/*
685 * Regulator Interrupts. 685 * Regulator Interrupts.
diff --git a/include/linux/mfd/wm8350/rtc.h b/include/linux/mfd/wm8350/rtc.h
index 24add2bef6c9..ebd72ffc62d1 100644
--- a/include/linux/mfd/wm8350/rtc.h
+++ b/include/linux/mfd/wm8350/rtc.h
@@ -263,6 +263,7 @@ struct wm8350_rtc {
263 struct platform_device *pdev; 263 struct platform_device *pdev;
264 struct rtc_device *rtc; 264 struct rtc_device *rtc;
265 int alarm_enabled; /* used over suspend/resume */ 265 int alarm_enabled; /* used over suspend/resume */
266 int update_enabled;
266}; 267};
267 268
268#endif 269#endif
diff --git a/include/linux/mfd/wm8994/core.h b/include/linux/mfd/wm8994/core.h
new file mode 100644
index 000000000000..b06ff2846748
--- /dev/null
+++ b/include/linux/mfd/wm8994/core.h
@@ -0,0 +1,54 @@
1/*
2 * include/linux/mfd/wm8994/core.h -- Core interface for WM8994
3 *
4 * Copyright 2009 Wolfson Microelectronics PLC.
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14
15#ifndef __MFD_WM8994_CORE_H__
16#define __MFD_WM8994_CORE_H__
17
18struct regulator_dev;
19struct regulator_bulk_data;
20
21#define WM8994_NUM_GPIO_REGS 11
22#define WM8994_NUM_LDO_REGS 2
23
24struct wm8994 {
25 struct mutex io_lock;
26
27 struct device *dev;
28 int (*read_dev)(struct wm8994 *wm8994, unsigned short reg,
29 int bytes, void *dest);
30 int (*write_dev)(struct wm8994 *wm8994, unsigned short reg,
31 int bytes, void *src);
32
33 void *control_data;
34
35 int gpio_base;
36
37 /* Used over suspend/resume */
38 u16 ldo_regs[WM8994_NUM_LDO_REGS];
39 u16 gpio_regs[WM8994_NUM_GPIO_REGS];
40
41 struct regulator_dev *dbvdd;
42 struct regulator_bulk_data *supplies;
43};
44
45/* Device I/O API */
46int wm8994_reg_read(struct wm8994 *wm8994, unsigned short reg);
47int wm8994_reg_write(struct wm8994 *wm8994, unsigned short reg,
48 unsigned short val);
49int wm8994_set_bits(struct wm8994 *wm8994, unsigned short reg,
50 unsigned short mask, unsigned short val);
51int wm8994_bulk_read(struct wm8994 *wm8994, unsigned short reg,
52 int count, u16 *buf);
53
54#endif
diff --git a/include/linux/mfd/wm8994/gpio.h b/include/linux/mfd/wm8994/gpio.h
new file mode 100644
index 000000000000..b4d4c22991e8
--- /dev/null
+++ b/include/linux/mfd/wm8994/gpio.h
@@ -0,0 +1,72 @@
1/*
2 * include/linux/mfd/wm8994/gpio.h - GPIO configuration for WM8994
3 *
4 * Copyright 2009 Wolfson Microelectronics PLC.
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14
15#ifndef __MFD_WM8994_GPIO_H__
16#define __MFD_WM8994_GPIO_H__
17
18#define WM8994_GPIO_MAX 11
19
20#define WM8994_GP_FN_PIN_SPECIFIC 0
21#define WM8994_GP_FN_GPIO 1
22#define WM8994_GP_FN_SDOUT 2
23#define WM8994_GP_FN_IRQ 3
24#define WM8994_GP_FN_TEMPERATURE 4
25#define WM8994_GP_FN_MICBIAS1_DET 5
26#define WM8994_GP_FN_MICBIAS1_SHORT 6
27#define WM8994_GP_FN_MICBIAS2_DET 7
28#define WM8994_GP_FN_MICBIAS2_SHORT 8
29#define WM8994_GP_FN_FLL1_LOCK 9
30#define WM8994_GP_FN_FLL2_LOCK 10
31#define WM8994_GP_FN_SRC1_LOCK 11
32#define WM8994_GP_FN_SRC2_LOCK 12
33#define WM8994_GP_FN_DRC1_ACT 13
34#define WM8994_GP_FN_DRC2_ACT 14
35#define WM8994_GP_FN_DRC3_ACT 15
36#define WM8994_GP_FN_WSEQ_STATUS 16
37#define WM8994_GP_FN_FIFO_ERROR 17
38#define WM8994_GP_FN_OPCLK 18
39
40#define WM8994_GPN_DIR 0x8000 /* GPN_DIR */
41#define WM8994_GPN_DIR_MASK 0x8000 /* GPN_DIR */
42#define WM8994_GPN_DIR_SHIFT 15 /* GPN_DIR */
43#define WM8994_GPN_DIR_WIDTH 1 /* GPN_DIR */
44#define WM8994_GPN_PU 0x4000 /* GPN_PU */
45#define WM8994_GPN_PU_MASK 0x4000 /* GPN_PU */
46#define WM8994_GPN_PU_SHIFT 14 /* GPN_PU */
47#define WM8994_GPN_PU_WIDTH 1 /* GPN_PU */
48#define WM8994_GPN_PD 0x2000 /* GPN_PD */
49#define WM8994_GPN_PD_MASK 0x2000 /* GPN_PD */
50#define WM8994_GPN_PD_SHIFT 13 /* GPN_PD */
51#define WM8994_GPN_PD_WIDTH 1 /* GPN_PD */
52#define WM8994_GPN_POL 0x0400 /* GPN_POL */
53#define WM8994_GPN_POL_MASK 0x0400 /* GPN_POL */
54#define WM8994_GPN_POL_SHIFT 10 /* GPN_POL */
55#define WM8994_GPN_POL_WIDTH 1 /* GPN_POL */
56#define WM8994_GPN_OP_CFG 0x0200 /* GPN_OP_CFG */
57#define WM8994_GPN_OP_CFG_MASK 0x0200 /* GPN_OP_CFG */
58#define WM8994_GPN_OP_CFG_SHIFT 9 /* GPN_OP_CFG */
59#define WM8994_GPN_OP_CFG_WIDTH 1 /* GPN_OP_CFG */
60#define WM8994_GPN_DB 0x0100 /* GPN_DB */
61#define WM8994_GPN_DB_MASK 0x0100 /* GPN_DB */
62#define WM8994_GPN_DB_SHIFT 8 /* GPN_DB */
63#define WM8994_GPN_DB_WIDTH 1 /* GPN_DB */
64#define WM8994_GPN_LVL 0x0040 /* GPN_LVL */
65#define WM8994_GPN_LVL_MASK 0x0040 /* GPN_LVL */
66#define WM8994_GPN_LVL_SHIFT 6 /* GPN_LVL */
67#define WM8994_GPN_LVL_WIDTH 1 /* GPN_LVL */
68#define WM8994_GPN_FN_MASK 0x001F /* GPN_FN - [4:0] */
69#define WM8994_GPN_FN_SHIFT 0 /* GPN_FN - [4:0] */
70#define WM8994_GPN_FN_WIDTH 5 /* GPN_FN - [4:0] */
71
72#endif
diff --git a/include/linux/mfd/wm8994/pdata.h b/include/linux/mfd/wm8994/pdata.h
new file mode 100644
index 000000000000..70d6a8687dc5
--- /dev/null
+++ b/include/linux/mfd/wm8994/pdata.h
@@ -0,0 +1,97 @@
1/*
2 * include/linux/mfd/wm8994/pdata.h -- Platform data for WM8994
3 *
4 * Copyright 2009 Wolfson Microelectronics PLC.
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14
15#ifndef __MFD_WM8994_PDATA_H__
16#define __MFD_WM8994_PDATA_H__
17
18#define WM8994_NUM_LDO 2
19#define WM8994_NUM_GPIO 11
20
21struct wm8994_ldo_pdata {
22 /** GPIOs to enable regulator, 0 or less if not available */
23 int enable;
24
25 const char *supply;
26 struct regulator_init_data *init_data;
27};
28
29#define WM8994_CONFIGURE_GPIO 0x8000
30
31#define WM8994_DRC_REGS 5
32#define WM8994_EQ_REGS 19
33
34/**
35 * DRC configurations are specified with a label and a set of register
36 * values to write (the enable bits will be ignored). At runtime an
37 * enumerated control will be presented for each DRC block allowing
38 * the user to choose the configration to use.
39 *
40 * Configurations may be generated by hand or by using the DRC control
41 * panel provided by the WISCE - see http://www.wolfsonmicro.com/wisce/
42 * for details.
43 */
44struct wm8994_drc_cfg {
45 const char *name;
46 u16 regs[WM8994_DRC_REGS];
47};
48
49/**
50 * ReTune Mobile configurations are specified with a label, sample
51 * rate and set of values to write (the enable bits will be ignored).
52 *
53 * Configurations are expected to be generated using the ReTune Mobile
54 * control panel in WISCE - see http://www.wolfsonmicro.com/wisce/
55 */
56struct wm8994_retune_mobile_cfg {
57 const char *name;
58 unsigned int rate;
59 u16 regs[WM8994_EQ_REGS];
60};
61
62struct wm8994_pdata {
63 int gpio_base;
64
65 /**
66 * Default values for GPIOs if non-zero, WM8994_CONFIGURE_GPIO
67 * can be used for all zero values.
68 */
69 int gpio_defaults[WM8994_NUM_GPIO];
70
71 struct wm8994_ldo_pdata ldo[WM8994_NUM_LDO];
72
73
74 int num_drc_cfgs;
75 struct wm8994_drc_cfg *drc_cfgs;
76
77 int num_retune_mobile_cfgs;
78 struct wm8994_retune_mobile_cfg *retune_mobile_cfgs;
79
80 /* LINEOUT can be differential or single ended */
81 unsigned int lineout1_diff:1;
82 unsigned int lineout2_diff:1;
83
84 /* Common mode feedback */
85 unsigned int lineout1fb:1;
86 unsigned int lineout2fb:1;
87
88 /* Microphone biases: 0=0.9*AVDD1 1=0.65*AVVD1 */
89 unsigned int micbias1_lvl:1;
90 unsigned int micbias2_lvl:1;
91
92 /* Jack detect threashold levels, see datasheet for values */
93 unsigned int jd_scthr:2;
94 unsigned int jd_thr:2;
95};
96
97#endif
diff --git a/include/linux/mfd/wm8994/registers.h b/include/linux/mfd/wm8994/registers.h
new file mode 100644
index 000000000000..967f62f54159
--- /dev/null
+++ b/include/linux/mfd/wm8994/registers.h
@@ -0,0 +1,4292 @@
1/*
2 * include/linux/mfd/wm8994/registers.h -- Register definitions for WM8994
3 *
4 * Copyright 2009 Wolfson Microelectronics PLC.
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14
15#ifndef __MFD_WM8994_REGISTERS_H__
16#define __MFD_WM8994_REGISTERS_H__
17
18/*
19 * Register values.
20 */
21#define WM8994_SOFTWARE_RESET 0x00
22#define WM8994_POWER_MANAGEMENT_1 0x01
23#define WM8994_POWER_MANAGEMENT_2 0x02
24#define WM8994_POWER_MANAGEMENT_3 0x03
25#define WM8994_POWER_MANAGEMENT_4 0x04
26#define WM8994_POWER_MANAGEMENT_5 0x05
27#define WM8994_POWER_MANAGEMENT_6 0x06
28#define WM8994_INPUT_MIXER_1 0x15
29#define WM8994_LEFT_LINE_INPUT_1_2_VOLUME 0x18
30#define WM8994_LEFT_LINE_INPUT_3_4_VOLUME 0x19
31#define WM8994_RIGHT_LINE_INPUT_1_2_VOLUME 0x1A
32#define WM8994_RIGHT_LINE_INPUT_3_4_VOLUME 0x1B
33#define WM8994_LEFT_OUTPUT_VOLUME 0x1C
34#define WM8994_RIGHT_OUTPUT_VOLUME 0x1D
35#define WM8994_LINE_OUTPUTS_VOLUME 0x1E
36#define WM8994_HPOUT2_VOLUME 0x1F
37#define WM8994_LEFT_OPGA_VOLUME 0x20
38#define WM8994_RIGHT_OPGA_VOLUME 0x21
39#define WM8994_SPKMIXL_ATTENUATION 0x22
40#define WM8994_SPKMIXR_ATTENUATION 0x23
41#define WM8994_SPKOUT_MIXERS 0x24
42#define WM8994_CLASSD 0x25
43#define WM8994_SPEAKER_VOLUME_LEFT 0x26
44#define WM8994_SPEAKER_VOLUME_RIGHT 0x27
45#define WM8994_INPUT_MIXER_2 0x28
46#define WM8994_INPUT_MIXER_3 0x29
47#define WM8994_INPUT_MIXER_4 0x2A
48#define WM8994_INPUT_MIXER_5 0x2B
49#define WM8994_INPUT_MIXER_6 0x2C
50#define WM8994_OUTPUT_MIXER_1 0x2D
51#define WM8994_OUTPUT_MIXER_2 0x2E
52#define WM8994_OUTPUT_MIXER_3 0x2F
53#define WM8994_OUTPUT_MIXER_4 0x30
54#define WM8994_OUTPUT_MIXER_5 0x31
55#define WM8994_OUTPUT_MIXER_6 0x32
56#define WM8994_HPOUT2_MIXER 0x33
57#define WM8994_LINE_MIXER_1 0x34
58#define WM8994_LINE_MIXER_2 0x35
59#define WM8994_SPEAKER_MIXER 0x36
60#define WM8994_ADDITIONAL_CONTROL 0x37
61#define WM8994_ANTIPOP_1 0x38
62#define WM8994_ANTIPOP_2 0x39
63#define WM8994_MICBIAS 0x3A
64#define WM8994_LDO_1 0x3B
65#define WM8994_LDO_2 0x3C
66#define WM8994_CHARGE_PUMP_1 0x4C
67#define WM8994_CLASS_W_1 0x51
68#define WM8994_DC_SERVO_1 0x54
69#define WM8994_DC_SERVO_2 0x55
70#define WM8994_DC_SERVO_4 0x57
71#define WM8994_DC_SERVO_READBACK 0x58
72#define WM8994_ANALOGUE_HP_1 0x60
73#define WM8994_CHIP_REVISION 0x100
74#define WM8994_CONTROL_INTERFACE 0x101
75#define WM8994_WRITE_SEQUENCER_CTRL_1 0x110
76#define WM8994_WRITE_SEQUENCER_CTRL_2 0x111
77#define WM8994_AIF1_CLOCKING_1 0x200
78#define WM8994_AIF1_CLOCKING_2 0x201
79#define WM8994_AIF2_CLOCKING_1 0x204
80#define WM8994_AIF2_CLOCKING_2 0x205
81#define WM8994_CLOCKING_1 0x208
82#define WM8994_CLOCKING_2 0x209
83#define WM8994_AIF1_RATE 0x210
84#define WM8994_AIF2_RATE 0x211
85#define WM8994_RATE_STATUS 0x212
86#define WM8994_FLL1_CONTROL_1 0x220
87#define WM8994_FLL1_CONTROL_2 0x221
88#define WM8994_FLL1_CONTROL_3 0x222
89#define WM8994_FLL1_CONTROL_4 0x223
90#define WM8994_FLL1_CONTROL_5 0x224
91#define WM8994_FLL2_CONTROL_1 0x240
92#define WM8994_FLL2_CONTROL_2 0x241
93#define WM8994_FLL2_CONTROL_3 0x242
94#define WM8994_FLL2_CONTROL_4 0x243
95#define WM8994_FLL2_CONTROL_5 0x244
96#define WM8994_AIF1_CONTROL_1 0x300
97#define WM8994_AIF1_CONTROL_2 0x301
98#define WM8994_AIF1_MASTER_SLAVE 0x302
99#define WM8994_AIF1_BCLK 0x303
100#define WM8994_AIF1ADC_LRCLK 0x304
101#define WM8994_AIF1DAC_LRCLK 0x305
102#define WM8994_AIF1DAC_DATA 0x306
103#define WM8994_AIF1ADC_DATA 0x307
104#define WM8994_AIF2_CONTROL_1 0x310
105#define WM8994_AIF2_CONTROL_2 0x311
106#define WM8994_AIF2_MASTER_SLAVE 0x312
107#define WM8994_AIF2_BCLK 0x313
108#define WM8994_AIF2ADC_LRCLK 0x314
109#define WM8994_AIF2DAC_LRCLK 0x315
110#define WM8994_AIF2DAC_DATA 0x316
111#define WM8994_AIF2ADC_DATA 0x317
112#define WM8994_AIF1_ADC1_LEFT_VOLUME 0x400
113#define WM8994_AIF1_ADC1_RIGHT_VOLUME 0x401
114#define WM8994_AIF1_DAC1_LEFT_VOLUME 0x402
115#define WM8994_AIF1_DAC1_RIGHT_VOLUME 0x403
116#define WM8994_AIF1_ADC2_LEFT_VOLUME 0x404
117#define WM8994_AIF1_ADC2_RIGHT_VOLUME 0x405
118#define WM8994_AIF1_DAC2_LEFT_VOLUME 0x406
119#define WM8994_AIF1_DAC2_RIGHT_VOLUME 0x407
120#define WM8994_AIF1_ADC1_FILTERS 0x410
121#define WM8994_AIF1_ADC2_FILTERS 0x411
122#define WM8994_AIF1_DAC1_FILTERS_1 0x420
123#define WM8994_AIF1_DAC1_FILTERS_2 0x421
124#define WM8994_AIF1_DAC2_FILTERS_1 0x422
125#define WM8994_AIF1_DAC2_FILTERS_2 0x423
126#define WM8994_AIF1_DRC1_1 0x440
127#define WM8994_AIF1_DRC1_2 0x441
128#define WM8994_AIF1_DRC1_3 0x442
129#define WM8994_AIF1_DRC1_4 0x443
130#define WM8994_AIF1_DRC1_5 0x444
131#define WM8994_AIF1_DRC2_1 0x450
132#define WM8994_AIF1_DRC2_2 0x451
133#define WM8994_AIF1_DRC2_3 0x452
134#define WM8994_AIF1_DRC2_4 0x453
135#define WM8994_AIF1_DRC2_5 0x454
136#define WM8994_AIF1_DAC1_EQ_GAINS_1 0x480
137#define WM8994_AIF1_DAC1_EQ_GAINS_2 0x481
138#define WM8994_AIF1_DAC1_EQ_BAND_1_A 0x482
139#define WM8994_AIF1_DAC1_EQ_BAND_1_B 0x483
140#define WM8994_AIF1_DAC1_EQ_BAND_1_PG 0x484
141#define WM8994_AIF1_DAC1_EQ_BAND_2_A 0x485
142#define WM8994_AIF1_DAC1_EQ_BAND_2_B 0x486
143#define WM8994_AIF1_DAC1_EQ_BAND_2_C 0x487
144#define WM8994_AIF1_DAC1_EQ_BAND_2_PG 0x488
145#define WM8994_AIF1_DAC1_EQ_BAND_3_A 0x489
146#define WM8994_AIF1_DAC1_EQ_BAND_3_B 0x48A
147#define WM8994_AIF1_DAC1_EQ_BAND_3_C 0x48B
148#define WM8994_AIF1_DAC1_EQ_BAND_3_PG 0x48C
149#define WM8994_AIF1_DAC1_EQ_BAND_4_A 0x48D
150#define WM8994_AIF1_DAC1_EQ_BAND_4_B 0x48E
151#define WM8994_AIF1_DAC1_EQ_BAND_4_C 0x48F
152#define WM8994_AIF1_DAC1_EQ_BAND_4_PG 0x490
153#define WM8994_AIF1_DAC1_EQ_BAND_5_A 0x491
154#define WM8994_AIF1_DAC1_EQ_BAND_5_B 0x492
155#define WM8994_AIF1_DAC1_EQ_BAND_5_PG 0x493
156#define WM8994_AIF1_DAC2_EQ_GAINS_1 0x4A0
157#define WM8994_AIF1_DAC2_EQ_GAINS_2 0x4A1
158#define WM8994_AIF1_DAC2_EQ_BAND_1_A 0x4A2
159#define WM8994_AIF1_DAC2_EQ_BAND_1_B 0x4A3
160#define WM8994_AIF1_DAC2_EQ_BAND_1_PG 0x4A4
161#define WM8994_AIF1_DAC2_EQ_BAND_2_A 0x4A5
162#define WM8994_AIF1_DAC2_EQ_BAND_2_B 0x4A6
163#define WM8994_AIF1_DAC2_EQ_BAND_2_C 0x4A7
164#define WM8994_AIF1_DAC2_EQ_BAND_2_PG 0x4A8
165#define WM8994_AIF1_DAC2_EQ_BAND_3_A 0x4A9
166#define WM8994_AIF1_DAC2_EQ_BAND_3_B 0x4AA
167#define WM8994_AIF1_DAC2_EQ_BAND_3_C 0x4AB
168#define WM8994_AIF1_DAC2_EQ_BAND_3_PG 0x4AC
169#define WM8994_AIF1_DAC2_EQ_BAND_4_A 0x4AD
170#define WM8994_AIF1_DAC2_EQ_BAND_4_B 0x4AE
171#define WM8994_AIF1_DAC2_EQ_BAND_4_C 0x4AF
172#define WM8994_AIF1_DAC2_EQ_BAND_4_PG 0x4B0
173#define WM8994_AIF1_DAC2_EQ_BAND_5_A 0x4B1
174#define WM8994_AIF1_DAC2_EQ_BAND_5_B 0x4B2
175#define WM8994_AIF1_DAC2_EQ_BAND_5_PG 0x4B3
176#define WM8994_AIF2_ADC_LEFT_VOLUME 0x500
177#define WM8994_AIF2_ADC_RIGHT_VOLUME 0x501
178#define WM8994_AIF2_DAC_LEFT_VOLUME 0x502
179#define WM8994_AIF2_DAC_RIGHT_VOLUME 0x503
180#define WM8994_AIF2_ADC_FILTERS 0x510
181#define WM8994_AIF2_DAC_FILTERS_1 0x520
182#define WM8994_AIF2_DAC_FILTERS_2 0x521
183#define WM8994_AIF2_DRC_1 0x540
184#define WM8994_AIF2_DRC_2 0x541
185#define WM8994_AIF2_DRC_3 0x542
186#define WM8994_AIF2_DRC_4 0x543
187#define WM8994_AIF2_DRC_5 0x544
188#define WM8994_AIF2_EQ_GAINS_1 0x580
189#define WM8994_AIF2_EQ_GAINS_2 0x581
190#define WM8994_AIF2_EQ_BAND_1_A 0x582
191#define WM8994_AIF2_EQ_BAND_1_B 0x583
192#define WM8994_AIF2_EQ_BAND_1_PG 0x584
193#define WM8994_AIF2_EQ_BAND_2_A 0x585
194#define WM8994_AIF2_EQ_BAND_2_B 0x586
195#define WM8994_AIF2_EQ_BAND_2_C 0x587
196#define WM8994_AIF2_EQ_BAND_2_PG 0x588
197#define WM8994_AIF2_EQ_BAND_3_A 0x589
198#define WM8994_AIF2_EQ_BAND_3_B 0x58A
199#define WM8994_AIF2_EQ_BAND_3_C 0x58B
200#define WM8994_AIF2_EQ_BAND_3_PG 0x58C
201#define WM8994_AIF2_EQ_BAND_4_A 0x58D
202#define WM8994_AIF2_EQ_BAND_4_B 0x58E
203#define WM8994_AIF2_EQ_BAND_4_C 0x58F
204#define WM8994_AIF2_EQ_BAND_4_PG 0x590
205#define WM8994_AIF2_EQ_BAND_5_A 0x591
206#define WM8994_AIF2_EQ_BAND_5_B 0x592
207#define WM8994_AIF2_EQ_BAND_5_PG 0x593
208#define WM8994_DAC1_MIXER_VOLUMES 0x600
209#define WM8994_DAC1_LEFT_MIXER_ROUTING 0x601
210#define WM8994_DAC1_RIGHT_MIXER_ROUTING 0x602
211#define WM8994_DAC2_MIXER_VOLUMES 0x603
212#define WM8994_DAC2_LEFT_MIXER_ROUTING 0x604
213#define WM8994_DAC2_RIGHT_MIXER_ROUTING 0x605
214#define WM8994_AIF1_ADC1_LEFT_MIXER_ROUTING 0x606
215#define WM8994_AIF1_ADC1_RIGHT_MIXER_ROUTING 0x607
216#define WM8994_AIF1_ADC2_LEFT_MIXER_ROUTING 0x608
217#define WM8994_AIF1_ADC2_RIGHT_MIXER_ROUTING 0x609
218#define WM8994_DAC1_LEFT_VOLUME 0x610
219#define WM8994_DAC1_RIGHT_VOLUME 0x611
220#define WM8994_DAC2_LEFT_VOLUME 0x612
221#define WM8994_DAC2_RIGHT_VOLUME 0x613
222#define WM8994_DAC_SOFTMUTE 0x614
223#define WM8994_OVERSAMPLING 0x620
224#define WM8994_SIDETONE 0x621
225#define WM8994_GPIO_1 0x700
226#define WM8994_GPIO_2 0x701
227#define WM8994_GPIO_3 0x702
228#define WM8994_GPIO_4 0x703
229#define WM8994_GPIO_5 0x704
230#define WM8994_GPIO_6 0x705
231#define WM8994_GPIO_7 0x706
232#define WM8994_GPIO_8 0x707
233#define WM8994_GPIO_9 0x708
234#define WM8994_GPIO_10 0x709
235#define WM8994_GPIO_11 0x70A
236#define WM8994_PULL_CONTROL_1 0x720
237#define WM8994_PULL_CONTROL_2 0x721
238#define WM8994_INTERRUPT_STATUS_1 0x730
239#define WM8994_INTERRUPT_STATUS_2 0x731
240#define WM8994_INTERRUPT_RAW_STATUS_2 0x732
241#define WM8994_INTERRUPT_STATUS_1_MASK 0x738
242#define WM8994_INTERRUPT_STATUS_2_MASK 0x739
243#define WM8994_INTERRUPT_CONTROL 0x740
244#define WM8994_IRQ_DEBOUNCE 0x748
245#define WM8994_WRITE_SEQUENCER_0 0x3000
246#define WM8994_WRITE_SEQUENCER_1 0x3001
247#define WM8994_WRITE_SEQUENCER_2 0x3002
248#define WM8994_WRITE_SEQUENCER_3 0x3003
249#define WM8994_WRITE_SEQUENCER_4 0x3004
250#define WM8994_WRITE_SEQUENCER_5 0x3005
251#define WM8994_WRITE_SEQUENCER_6 0x3006
252#define WM8994_WRITE_SEQUENCER_7 0x3007
253#define WM8994_WRITE_SEQUENCER_8 0x3008
254#define WM8994_WRITE_SEQUENCER_9 0x3009
255#define WM8994_WRITE_SEQUENCER_10 0x300A
256#define WM8994_WRITE_SEQUENCER_11 0x300B
257#define WM8994_WRITE_SEQUENCER_12 0x300C
258#define WM8994_WRITE_SEQUENCER_13 0x300D
259#define WM8994_WRITE_SEQUENCER_14 0x300E
260#define WM8994_WRITE_SEQUENCER_15 0x300F
261#define WM8994_WRITE_SEQUENCER_16 0x3010
262#define WM8994_WRITE_SEQUENCER_17 0x3011
263#define WM8994_WRITE_SEQUENCER_18 0x3012
264#define WM8994_WRITE_SEQUENCER_19 0x3013
265#define WM8994_WRITE_SEQUENCER_20 0x3014
266#define WM8994_WRITE_SEQUENCER_21 0x3015
267#define WM8994_WRITE_SEQUENCER_22 0x3016
268#define WM8994_WRITE_SEQUENCER_23 0x3017
269#define WM8994_WRITE_SEQUENCER_24 0x3018
270#define WM8994_WRITE_SEQUENCER_25 0x3019
271#define WM8994_WRITE_SEQUENCER_26 0x301A
272#define WM8994_WRITE_SEQUENCER_27 0x301B
273#define WM8994_WRITE_SEQUENCER_28 0x301C
274#define WM8994_WRITE_SEQUENCER_29 0x301D
275#define WM8994_WRITE_SEQUENCER_30 0x301E
276#define WM8994_WRITE_SEQUENCER_31 0x301F
277#define WM8994_WRITE_SEQUENCER_32 0x3020
278#define WM8994_WRITE_SEQUENCER_33 0x3021
279#define WM8994_WRITE_SEQUENCER_34 0x3022
280#define WM8994_WRITE_SEQUENCER_35 0x3023
281#define WM8994_WRITE_SEQUENCER_36 0x3024
282#define WM8994_WRITE_SEQUENCER_37 0x3025
283#define WM8994_WRITE_SEQUENCER_38 0x3026
284#define WM8994_WRITE_SEQUENCER_39 0x3027
285#define WM8994_WRITE_SEQUENCER_40 0x3028
286#define WM8994_WRITE_SEQUENCER_41 0x3029
287#define WM8994_WRITE_SEQUENCER_42 0x302A
288#define WM8994_WRITE_SEQUENCER_43 0x302B
289#define WM8994_WRITE_SEQUENCER_44 0x302C
290#define WM8994_WRITE_SEQUENCER_45 0x302D
291#define WM8994_WRITE_SEQUENCER_46 0x302E
292#define WM8994_WRITE_SEQUENCER_47 0x302F
293#define WM8994_WRITE_SEQUENCER_48 0x3030
294#define WM8994_WRITE_SEQUENCER_49 0x3031
295#define WM8994_WRITE_SEQUENCER_50 0x3032
296#define WM8994_WRITE_SEQUENCER_51 0x3033
297#define WM8994_WRITE_SEQUENCER_52 0x3034
298#define WM8994_WRITE_SEQUENCER_53 0x3035
299#define WM8994_WRITE_SEQUENCER_54 0x3036
300#define WM8994_WRITE_SEQUENCER_55 0x3037
301#define WM8994_WRITE_SEQUENCER_56 0x3038
302#define WM8994_WRITE_SEQUENCER_57 0x3039
303#define WM8994_WRITE_SEQUENCER_58 0x303A
304#define WM8994_WRITE_SEQUENCER_59 0x303B
305#define WM8994_WRITE_SEQUENCER_60 0x303C
306#define WM8994_WRITE_SEQUENCER_61 0x303D
307#define WM8994_WRITE_SEQUENCER_62 0x303E
308#define WM8994_WRITE_SEQUENCER_63 0x303F
309#define WM8994_WRITE_SEQUENCER_64 0x3040
310#define WM8994_WRITE_SEQUENCER_65 0x3041
311#define WM8994_WRITE_SEQUENCER_66 0x3042
312#define WM8994_WRITE_SEQUENCER_67 0x3043
313#define WM8994_WRITE_SEQUENCER_68 0x3044
314#define WM8994_WRITE_SEQUENCER_69 0x3045
315#define WM8994_WRITE_SEQUENCER_70 0x3046
316#define WM8994_WRITE_SEQUENCER_71 0x3047
317#define WM8994_WRITE_SEQUENCER_72 0x3048
318#define WM8994_WRITE_SEQUENCER_73 0x3049
319#define WM8994_WRITE_SEQUENCER_74 0x304A
320#define WM8994_WRITE_SEQUENCER_75 0x304B
321#define WM8994_WRITE_SEQUENCER_76 0x304C
322#define WM8994_WRITE_SEQUENCER_77 0x304D
323#define WM8994_WRITE_SEQUENCER_78 0x304E
324#define WM8994_WRITE_SEQUENCER_79 0x304F
325#define WM8994_WRITE_SEQUENCER_80 0x3050
326#define WM8994_WRITE_SEQUENCER_81 0x3051
327#define WM8994_WRITE_SEQUENCER_82 0x3052
328#define WM8994_WRITE_SEQUENCER_83 0x3053
329#define WM8994_WRITE_SEQUENCER_84 0x3054
330#define WM8994_WRITE_SEQUENCER_85 0x3055
331#define WM8994_WRITE_SEQUENCER_86 0x3056
332#define WM8994_WRITE_SEQUENCER_87 0x3057
333#define WM8994_WRITE_SEQUENCER_88 0x3058
334#define WM8994_WRITE_SEQUENCER_89 0x3059
335#define WM8994_WRITE_SEQUENCER_90 0x305A
336#define WM8994_WRITE_SEQUENCER_91 0x305B
337#define WM8994_WRITE_SEQUENCER_92 0x305C
338#define WM8994_WRITE_SEQUENCER_93 0x305D
339#define WM8994_WRITE_SEQUENCER_94 0x305E
340#define WM8994_WRITE_SEQUENCER_95 0x305F
341#define WM8994_WRITE_SEQUENCER_96 0x3060
342#define WM8994_WRITE_SEQUENCER_97 0x3061
343#define WM8994_WRITE_SEQUENCER_98 0x3062
344#define WM8994_WRITE_SEQUENCER_99 0x3063
345#define WM8994_WRITE_SEQUENCER_100 0x3064
346#define WM8994_WRITE_SEQUENCER_101 0x3065
347#define WM8994_WRITE_SEQUENCER_102 0x3066
348#define WM8994_WRITE_SEQUENCER_103 0x3067
349#define WM8994_WRITE_SEQUENCER_104 0x3068
350#define WM8994_WRITE_SEQUENCER_105 0x3069
351#define WM8994_WRITE_SEQUENCER_106 0x306A
352#define WM8994_WRITE_SEQUENCER_107 0x306B
353#define WM8994_WRITE_SEQUENCER_108 0x306C
354#define WM8994_WRITE_SEQUENCER_109 0x306D
355#define WM8994_WRITE_SEQUENCER_110 0x306E
356#define WM8994_WRITE_SEQUENCER_111 0x306F
357#define WM8994_WRITE_SEQUENCER_112 0x3070
358#define WM8994_WRITE_SEQUENCER_113 0x3071
359#define WM8994_WRITE_SEQUENCER_114 0x3072
360#define WM8994_WRITE_SEQUENCER_115 0x3073
361#define WM8994_WRITE_SEQUENCER_116 0x3074
362#define WM8994_WRITE_SEQUENCER_117 0x3075
363#define WM8994_WRITE_SEQUENCER_118 0x3076
364#define WM8994_WRITE_SEQUENCER_119 0x3077
365#define WM8994_WRITE_SEQUENCER_120 0x3078
366#define WM8994_WRITE_SEQUENCER_121 0x3079
367#define WM8994_WRITE_SEQUENCER_122 0x307A
368#define WM8994_WRITE_SEQUENCER_123 0x307B
369#define WM8994_WRITE_SEQUENCER_124 0x307C
370#define WM8994_WRITE_SEQUENCER_125 0x307D
371#define WM8994_WRITE_SEQUENCER_126 0x307E
372#define WM8994_WRITE_SEQUENCER_127 0x307F
373#define WM8994_WRITE_SEQUENCER_128 0x3080
374#define WM8994_WRITE_SEQUENCER_129 0x3081
375#define WM8994_WRITE_SEQUENCER_130 0x3082
376#define WM8994_WRITE_SEQUENCER_131 0x3083
377#define WM8994_WRITE_SEQUENCER_132 0x3084
378#define WM8994_WRITE_SEQUENCER_133 0x3085
379#define WM8994_WRITE_SEQUENCER_134 0x3086
380#define WM8994_WRITE_SEQUENCER_135 0x3087
381#define WM8994_WRITE_SEQUENCER_136 0x3088
382#define WM8994_WRITE_SEQUENCER_137 0x3089
383#define WM8994_WRITE_SEQUENCER_138 0x308A
384#define WM8994_WRITE_SEQUENCER_139 0x308B
385#define WM8994_WRITE_SEQUENCER_140 0x308C
386#define WM8994_WRITE_SEQUENCER_141 0x308D
387#define WM8994_WRITE_SEQUENCER_142 0x308E
388#define WM8994_WRITE_SEQUENCER_143 0x308F
389#define WM8994_WRITE_SEQUENCER_144 0x3090
390#define WM8994_WRITE_SEQUENCER_145 0x3091
391#define WM8994_WRITE_SEQUENCER_146 0x3092
392#define WM8994_WRITE_SEQUENCER_147 0x3093
393#define WM8994_WRITE_SEQUENCER_148 0x3094
394#define WM8994_WRITE_SEQUENCER_149 0x3095
395#define WM8994_WRITE_SEQUENCER_150 0x3096
396#define WM8994_WRITE_SEQUENCER_151 0x3097
397#define WM8994_WRITE_SEQUENCER_152 0x3098
398#define WM8994_WRITE_SEQUENCER_153 0x3099
399#define WM8994_WRITE_SEQUENCER_154 0x309A
400#define WM8994_WRITE_SEQUENCER_155 0x309B
401#define WM8994_WRITE_SEQUENCER_156 0x309C
402#define WM8994_WRITE_SEQUENCER_157 0x309D
403#define WM8994_WRITE_SEQUENCER_158 0x309E
404#define WM8994_WRITE_SEQUENCER_159 0x309F
405#define WM8994_WRITE_SEQUENCER_160 0x30A0
406#define WM8994_WRITE_SEQUENCER_161 0x30A1
407#define WM8994_WRITE_SEQUENCER_162 0x30A2
408#define WM8994_WRITE_SEQUENCER_163 0x30A3
409#define WM8994_WRITE_SEQUENCER_164 0x30A4
410#define WM8994_WRITE_SEQUENCER_165 0x30A5
411#define WM8994_WRITE_SEQUENCER_166 0x30A6
412#define WM8994_WRITE_SEQUENCER_167 0x30A7
413#define WM8994_WRITE_SEQUENCER_168 0x30A8
414#define WM8994_WRITE_SEQUENCER_169 0x30A9
415#define WM8994_WRITE_SEQUENCER_170 0x30AA
416#define WM8994_WRITE_SEQUENCER_171 0x30AB
417#define WM8994_WRITE_SEQUENCER_172 0x30AC
418#define WM8994_WRITE_SEQUENCER_173 0x30AD
419#define WM8994_WRITE_SEQUENCER_174 0x30AE
420#define WM8994_WRITE_SEQUENCER_175 0x30AF
421#define WM8994_WRITE_SEQUENCER_176 0x30B0
422#define WM8994_WRITE_SEQUENCER_177 0x30B1
423#define WM8994_WRITE_SEQUENCER_178 0x30B2
424#define WM8994_WRITE_SEQUENCER_179 0x30B3
425#define WM8994_WRITE_SEQUENCER_180 0x30B4
426#define WM8994_WRITE_SEQUENCER_181 0x30B5
427#define WM8994_WRITE_SEQUENCER_182 0x30B6
428#define WM8994_WRITE_SEQUENCER_183 0x30B7
429#define WM8994_WRITE_SEQUENCER_184 0x30B8
430#define WM8994_WRITE_SEQUENCER_185 0x30B9
431#define WM8994_WRITE_SEQUENCER_186 0x30BA
432#define WM8994_WRITE_SEQUENCER_187 0x30BB
433#define WM8994_WRITE_SEQUENCER_188 0x30BC
434#define WM8994_WRITE_SEQUENCER_189 0x30BD
435#define WM8994_WRITE_SEQUENCER_190 0x30BE
436#define WM8994_WRITE_SEQUENCER_191 0x30BF
437#define WM8994_WRITE_SEQUENCER_192 0x30C0
438#define WM8994_WRITE_SEQUENCER_193 0x30C1
439#define WM8994_WRITE_SEQUENCER_194 0x30C2
440#define WM8994_WRITE_SEQUENCER_195 0x30C3
441#define WM8994_WRITE_SEQUENCER_196 0x30C4
442#define WM8994_WRITE_SEQUENCER_197 0x30C5
443#define WM8994_WRITE_SEQUENCER_198 0x30C6
444#define WM8994_WRITE_SEQUENCER_199 0x30C7
445#define WM8994_WRITE_SEQUENCER_200 0x30C8
446#define WM8994_WRITE_SEQUENCER_201 0x30C9
447#define WM8994_WRITE_SEQUENCER_202 0x30CA
448#define WM8994_WRITE_SEQUENCER_203 0x30CB
449#define WM8994_WRITE_SEQUENCER_204 0x30CC
450#define WM8994_WRITE_SEQUENCER_205 0x30CD
451#define WM8994_WRITE_SEQUENCER_206 0x30CE
452#define WM8994_WRITE_SEQUENCER_207 0x30CF
453#define WM8994_WRITE_SEQUENCER_208 0x30D0
454#define WM8994_WRITE_SEQUENCER_209 0x30D1
455#define WM8994_WRITE_SEQUENCER_210 0x30D2
456#define WM8994_WRITE_SEQUENCER_211 0x30D3
457#define WM8994_WRITE_SEQUENCER_212 0x30D4
458#define WM8994_WRITE_SEQUENCER_213 0x30D5
459#define WM8994_WRITE_SEQUENCER_214 0x30D6
460#define WM8994_WRITE_SEQUENCER_215 0x30D7
461#define WM8994_WRITE_SEQUENCER_216 0x30D8
462#define WM8994_WRITE_SEQUENCER_217 0x30D9
463#define WM8994_WRITE_SEQUENCER_218 0x30DA
464#define WM8994_WRITE_SEQUENCER_219 0x30DB
465#define WM8994_WRITE_SEQUENCER_220 0x30DC
466#define WM8994_WRITE_SEQUENCER_221 0x30DD
467#define WM8994_WRITE_SEQUENCER_222 0x30DE
468#define WM8994_WRITE_SEQUENCER_223 0x30DF
469#define WM8994_WRITE_SEQUENCER_224 0x30E0
470#define WM8994_WRITE_SEQUENCER_225 0x30E1
471#define WM8994_WRITE_SEQUENCER_226 0x30E2
472#define WM8994_WRITE_SEQUENCER_227 0x30E3
473#define WM8994_WRITE_SEQUENCER_228 0x30E4
474#define WM8994_WRITE_SEQUENCER_229 0x30E5
475#define WM8994_WRITE_SEQUENCER_230 0x30E6
476#define WM8994_WRITE_SEQUENCER_231 0x30E7
477#define WM8994_WRITE_SEQUENCER_232 0x30E8
478#define WM8994_WRITE_SEQUENCER_233 0x30E9
479#define WM8994_WRITE_SEQUENCER_234 0x30EA
480#define WM8994_WRITE_SEQUENCER_235 0x30EB
481#define WM8994_WRITE_SEQUENCER_236 0x30EC
482#define WM8994_WRITE_SEQUENCER_237 0x30ED
483#define WM8994_WRITE_SEQUENCER_238 0x30EE
484#define WM8994_WRITE_SEQUENCER_239 0x30EF
485#define WM8994_WRITE_SEQUENCER_240 0x30F0
486#define WM8994_WRITE_SEQUENCER_241 0x30F1
487#define WM8994_WRITE_SEQUENCER_242 0x30F2
488#define WM8994_WRITE_SEQUENCER_243 0x30F3
489#define WM8994_WRITE_SEQUENCER_244 0x30F4
490#define WM8994_WRITE_SEQUENCER_245 0x30F5
491#define WM8994_WRITE_SEQUENCER_246 0x30F6
492#define WM8994_WRITE_SEQUENCER_247 0x30F7
493#define WM8994_WRITE_SEQUENCER_248 0x30F8
494#define WM8994_WRITE_SEQUENCER_249 0x30F9
495#define WM8994_WRITE_SEQUENCER_250 0x30FA
496#define WM8994_WRITE_SEQUENCER_251 0x30FB
497#define WM8994_WRITE_SEQUENCER_252 0x30FC
498#define WM8994_WRITE_SEQUENCER_253 0x30FD
499#define WM8994_WRITE_SEQUENCER_254 0x30FE
500#define WM8994_WRITE_SEQUENCER_255 0x30FF
501#define WM8994_WRITE_SEQUENCER_256 0x3100
502#define WM8994_WRITE_SEQUENCER_257 0x3101
503#define WM8994_WRITE_SEQUENCER_258 0x3102
504#define WM8994_WRITE_SEQUENCER_259 0x3103
505#define WM8994_WRITE_SEQUENCER_260 0x3104
506#define WM8994_WRITE_SEQUENCER_261 0x3105
507#define WM8994_WRITE_SEQUENCER_262 0x3106
508#define WM8994_WRITE_SEQUENCER_263 0x3107
509#define WM8994_WRITE_SEQUENCER_264 0x3108
510#define WM8994_WRITE_SEQUENCER_265 0x3109
511#define WM8994_WRITE_SEQUENCER_266 0x310A
512#define WM8994_WRITE_SEQUENCER_267 0x310B
513#define WM8994_WRITE_SEQUENCER_268 0x310C
514#define WM8994_WRITE_SEQUENCER_269 0x310D
515#define WM8994_WRITE_SEQUENCER_270 0x310E
516#define WM8994_WRITE_SEQUENCER_271 0x310F
517#define WM8994_WRITE_SEQUENCER_272 0x3110
518#define WM8994_WRITE_SEQUENCER_273 0x3111
519#define WM8994_WRITE_SEQUENCER_274 0x3112
520#define WM8994_WRITE_SEQUENCER_275 0x3113
521#define WM8994_WRITE_SEQUENCER_276 0x3114
522#define WM8994_WRITE_SEQUENCER_277 0x3115
523#define WM8994_WRITE_SEQUENCER_278 0x3116
524#define WM8994_WRITE_SEQUENCER_279 0x3117
525#define WM8994_WRITE_SEQUENCER_280 0x3118
526#define WM8994_WRITE_SEQUENCER_281 0x3119
527#define WM8994_WRITE_SEQUENCER_282 0x311A
528#define WM8994_WRITE_SEQUENCER_283 0x311B
529#define WM8994_WRITE_SEQUENCER_284 0x311C
530#define WM8994_WRITE_SEQUENCER_285 0x311D
531#define WM8994_WRITE_SEQUENCER_286 0x311E
532#define WM8994_WRITE_SEQUENCER_287 0x311F
533#define WM8994_WRITE_SEQUENCER_288 0x3120
534#define WM8994_WRITE_SEQUENCER_289 0x3121
535#define WM8994_WRITE_SEQUENCER_290 0x3122
536#define WM8994_WRITE_SEQUENCER_291 0x3123
537#define WM8994_WRITE_SEQUENCER_292 0x3124
538#define WM8994_WRITE_SEQUENCER_293 0x3125
539#define WM8994_WRITE_SEQUENCER_294 0x3126
540#define WM8994_WRITE_SEQUENCER_295 0x3127
541#define WM8994_WRITE_SEQUENCER_296 0x3128
542#define WM8994_WRITE_SEQUENCER_297 0x3129
543#define WM8994_WRITE_SEQUENCER_298 0x312A
544#define WM8994_WRITE_SEQUENCER_299 0x312B
545#define WM8994_WRITE_SEQUENCER_300 0x312C
546#define WM8994_WRITE_SEQUENCER_301 0x312D
547#define WM8994_WRITE_SEQUENCER_302 0x312E
548#define WM8994_WRITE_SEQUENCER_303 0x312F
549#define WM8994_WRITE_SEQUENCER_304 0x3130
550#define WM8994_WRITE_SEQUENCER_305 0x3131
551#define WM8994_WRITE_SEQUENCER_306 0x3132
552#define WM8994_WRITE_SEQUENCER_307 0x3133
553#define WM8994_WRITE_SEQUENCER_308 0x3134
554#define WM8994_WRITE_SEQUENCER_309 0x3135
555#define WM8994_WRITE_SEQUENCER_310 0x3136
556#define WM8994_WRITE_SEQUENCER_311 0x3137
557#define WM8994_WRITE_SEQUENCER_312 0x3138
558#define WM8994_WRITE_SEQUENCER_313 0x3139
559#define WM8994_WRITE_SEQUENCER_314 0x313A
560#define WM8994_WRITE_SEQUENCER_315 0x313B
561#define WM8994_WRITE_SEQUENCER_316 0x313C
562#define WM8994_WRITE_SEQUENCER_317 0x313D
563#define WM8994_WRITE_SEQUENCER_318 0x313E
564#define WM8994_WRITE_SEQUENCER_319 0x313F
565#define WM8994_WRITE_SEQUENCER_320 0x3140
566#define WM8994_WRITE_SEQUENCER_321 0x3141
567#define WM8994_WRITE_SEQUENCER_322 0x3142
568#define WM8994_WRITE_SEQUENCER_323 0x3143
569#define WM8994_WRITE_SEQUENCER_324 0x3144
570#define WM8994_WRITE_SEQUENCER_325 0x3145
571#define WM8994_WRITE_SEQUENCER_326 0x3146
572#define WM8994_WRITE_SEQUENCER_327 0x3147
573#define WM8994_WRITE_SEQUENCER_328 0x3148
574#define WM8994_WRITE_SEQUENCER_329 0x3149
575#define WM8994_WRITE_SEQUENCER_330 0x314A
576#define WM8994_WRITE_SEQUENCER_331 0x314B
577#define WM8994_WRITE_SEQUENCER_332 0x314C
578#define WM8994_WRITE_SEQUENCER_333 0x314D
579#define WM8994_WRITE_SEQUENCER_334 0x314E
580#define WM8994_WRITE_SEQUENCER_335 0x314F
581#define WM8994_WRITE_SEQUENCER_336 0x3150
582#define WM8994_WRITE_SEQUENCER_337 0x3151
583#define WM8994_WRITE_SEQUENCER_338 0x3152
584#define WM8994_WRITE_SEQUENCER_339 0x3153
585#define WM8994_WRITE_SEQUENCER_340 0x3154
586#define WM8994_WRITE_SEQUENCER_341 0x3155
587#define WM8994_WRITE_SEQUENCER_342 0x3156
588#define WM8994_WRITE_SEQUENCER_343 0x3157
589#define WM8994_WRITE_SEQUENCER_344 0x3158
590#define WM8994_WRITE_SEQUENCER_345 0x3159
591#define WM8994_WRITE_SEQUENCER_346 0x315A
592#define WM8994_WRITE_SEQUENCER_347 0x315B
593#define WM8994_WRITE_SEQUENCER_348 0x315C
594#define WM8994_WRITE_SEQUENCER_349 0x315D
595#define WM8994_WRITE_SEQUENCER_350 0x315E
596#define WM8994_WRITE_SEQUENCER_351 0x315F
597#define WM8994_WRITE_SEQUENCER_352 0x3160
598#define WM8994_WRITE_SEQUENCER_353 0x3161
599#define WM8994_WRITE_SEQUENCER_354 0x3162
600#define WM8994_WRITE_SEQUENCER_355 0x3163
601#define WM8994_WRITE_SEQUENCER_356 0x3164
602#define WM8994_WRITE_SEQUENCER_357 0x3165
603#define WM8994_WRITE_SEQUENCER_358 0x3166
604#define WM8994_WRITE_SEQUENCER_359 0x3167
605#define WM8994_WRITE_SEQUENCER_360 0x3168
606#define WM8994_WRITE_SEQUENCER_361 0x3169
607#define WM8994_WRITE_SEQUENCER_362 0x316A
608#define WM8994_WRITE_SEQUENCER_363 0x316B
609#define WM8994_WRITE_SEQUENCER_364 0x316C
610#define WM8994_WRITE_SEQUENCER_365 0x316D
611#define WM8994_WRITE_SEQUENCER_366 0x316E
612#define WM8994_WRITE_SEQUENCER_367 0x316F
613#define WM8994_WRITE_SEQUENCER_368 0x3170
614#define WM8994_WRITE_SEQUENCER_369 0x3171
615#define WM8994_WRITE_SEQUENCER_370 0x3172
616#define WM8994_WRITE_SEQUENCER_371 0x3173
617#define WM8994_WRITE_SEQUENCER_372 0x3174
618#define WM8994_WRITE_SEQUENCER_373 0x3175
619#define WM8994_WRITE_SEQUENCER_374 0x3176
620#define WM8994_WRITE_SEQUENCER_375 0x3177
621#define WM8994_WRITE_SEQUENCER_376 0x3178
622#define WM8994_WRITE_SEQUENCER_377 0x3179
623#define WM8994_WRITE_SEQUENCER_378 0x317A
624#define WM8994_WRITE_SEQUENCER_379 0x317B
625#define WM8994_WRITE_SEQUENCER_380 0x317C
626#define WM8994_WRITE_SEQUENCER_381 0x317D
627#define WM8994_WRITE_SEQUENCER_382 0x317E
628#define WM8994_WRITE_SEQUENCER_383 0x317F
629#define WM8994_WRITE_SEQUENCER_384 0x3180
630#define WM8994_WRITE_SEQUENCER_385 0x3181
631#define WM8994_WRITE_SEQUENCER_386 0x3182
632#define WM8994_WRITE_SEQUENCER_387 0x3183
633#define WM8994_WRITE_SEQUENCER_388 0x3184
634#define WM8994_WRITE_SEQUENCER_389 0x3185
635#define WM8994_WRITE_SEQUENCER_390 0x3186
636#define WM8994_WRITE_SEQUENCER_391 0x3187
637#define WM8994_WRITE_SEQUENCER_392 0x3188
638#define WM8994_WRITE_SEQUENCER_393 0x3189
639#define WM8994_WRITE_SEQUENCER_394 0x318A
640#define WM8994_WRITE_SEQUENCER_395 0x318B
641#define WM8994_WRITE_SEQUENCER_396 0x318C
642#define WM8994_WRITE_SEQUENCER_397 0x318D
643#define WM8994_WRITE_SEQUENCER_398 0x318E
644#define WM8994_WRITE_SEQUENCER_399 0x318F
645#define WM8994_WRITE_SEQUENCER_400 0x3190
646#define WM8994_WRITE_SEQUENCER_401 0x3191
647#define WM8994_WRITE_SEQUENCER_402 0x3192
648#define WM8994_WRITE_SEQUENCER_403 0x3193
649#define WM8994_WRITE_SEQUENCER_404 0x3194
650#define WM8994_WRITE_SEQUENCER_405 0x3195
651#define WM8994_WRITE_SEQUENCER_406 0x3196
652#define WM8994_WRITE_SEQUENCER_407 0x3197
653#define WM8994_WRITE_SEQUENCER_408 0x3198
654#define WM8994_WRITE_SEQUENCER_409 0x3199
655#define WM8994_WRITE_SEQUENCER_410 0x319A
656#define WM8994_WRITE_SEQUENCER_411 0x319B
657#define WM8994_WRITE_SEQUENCER_412 0x319C
658#define WM8994_WRITE_SEQUENCER_413 0x319D
659#define WM8994_WRITE_SEQUENCER_414 0x319E
660#define WM8994_WRITE_SEQUENCER_415 0x319F
661#define WM8994_WRITE_SEQUENCER_416 0x31A0
662#define WM8994_WRITE_SEQUENCER_417 0x31A1
663#define WM8994_WRITE_SEQUENCER_418 0x31A2
664#define WM8994_WRITE_SEQUENCER_419 0x31A3
665#define WM8994_WRITE_SEQUENCER_420 0x31A4
666#define WM8994_WRITE_SEQUENCER_421 0x31A5
667#define WM8994_WRITE_SEQUENCER_422 0x31A6
668#define WM8994_WRITE_SEQUENCER_423 0x31A7
669#define WM8994_WRITE_SEQUENCER_424 0x31A8
670#define WM8994_WRITE_SEQUENCER_425 0x31A9
671#define WM8994_WRITE_SEQUENCER_426 0x31AA
672#define WM8994_WRITE_SEQUENCER_427 0x31AB
673#define WM8994_WRITE_SEQUENCER_428 0x31AC
674#define WM8994_WRITE_SEQUENCER_429 0x31AD
675#define WM8994_WRITE_SEQUENCER_430 0x31AE
676#define WM8994_WRITE_SEQUENCER_431 0x31AF
677#define WM8994_WRITE_SEQUENCER_432 0x31B0
678#define WM8994_WRITE_SEQUENCER_433 0x31B1
679#define WM8994_WRITE_SEQUENCER_434 0x31B2
680#define WM8994_WRITE_SEQUENCER_435 0x31B3
681#define WM8994_WRITE_SEQUENCER_436 0x31B4
682#define WM8994_WRITE_SEQUENCER_437 0x31B5
683#define WM8994_WRITE_SEQUENCER_438 0x31B6
684#define WM8994_WRITE_SEQUENCER_439 0x31B7
685#define WM8994_WRITE_SEQUENCER_440 0x31B8
686#define WM8994_WRITE_SEQUENCER_441 0x31B9
687#define WM8994_WRITE_SEQUENCER_442 0x31BA
688#define WM8994_WRITE_SEQUENCER_443 0x31BB
689#define WM8994_WRITE_SEQUENCER_444 0x31BC
690#define WM8994_WRITE_SEQUENCER_445 0x31BD
691#define WM8994_WRITE_SEQUENCER_446 0x31BE
692#define WM8994_WRITE_SEQUENCER_447 0x31BF
693#define WM8994_WRITE_SEQUENCER_448 0x31C0
694#define WM8994_WRITE_SEQUENCER_449 0x31C1
695#define WM8994_WRITE_SEQUENCER_450 0x31C2
696#define WM8994_WRITE_SEQUENCER_451 0x31C3
697#define WM8994_WRITE_SEQUENCER_452 0x31C4
698#define WM8994_WRITE_SEQUENCER_453 0x31C5
699#define WM8994_WRITE_SEQUENCER_454 0x31C6
700#define WM8994_WRITE_SEQUENCER_455 0x31C7
701#define WM8994_WRITE_SEQUENCER_456 0x31C8
702#define WM8994_WRITE_SEQUENCER_457 0x31C9
703#define WM8994_WRITE_SEQUENCER_458 0x31CA
704#define WM8994_WRITE_SEQUENCER_459 0x31CB
705#define WM8994_WRITE_SEQUENCER_460 0x31CC
706#define WM8994_WRITE_SEQUENCER_461 0x31CD
707#define WM8994_WRITE_SEQUENCER_462 0x31CE
708#define WM8994_WRITE_SEQUENCER_463 0x31CF
709#define WM8994_WRITE_SEQUENCER_464 0x31D0
710#define WM8994_WRITE_SEQUENCER_465 0x31D1
711#define WM8994_WRITE_SEQUENCER_466 0x31D2
712#define WM8994_WRITE_SEQUENCER_467 0x31D3
713#define WM8994_WRITE_SEQUENCER_468 0x31D4
714#define WM8994_WRITE_SEQUENCER_469 0x31D5
715#define WM8994_WRITE_SEQUENCER_470 0x31D6
716#define WM8994_WRITE_SEQUENCER_471 0x31D7
717#define WM8994_WRITE_SEQUENCER_472 0x31D8
718#define WM8994_WRITE_SEQUENCER_473 0x31D9
719#define WM8994_WRITE_SEQUENCER_474 0x31DA
720#define WM8994_WRITE_SEQUENCER_475 0x31DB
721#define WM8994_WRITE_SEQUENCER_476 0x31DC
722#define WM8994_WRITE_SEQUENCER_477 0x31DD
723#define WM8994_WRITE_SEQUENCER_478 0x31DE
724#define WM8994_WRITE_SEQUENCER_479 0x31DF
725#define WM8994_WRITE_SEQUENCER_480 0x31E0
726#define WM8994_WRITE_SEQUENCER_481 0x31E1
727#define WM8994_WRITE_SEQUENCER_482 0x31E2
728#define WM8994_WRITE_SEQUENCER_483 0x31E3
729#define WM8994_WRITE_SEQUENCER_484 0x31E4
730#define WM8994_WRITE_SEQUENCER_485 0x31E5
731#define WM8994_WRITE_SEQUENCER_486 0x31E6
732#define WM8994_WRITE_SEQUENCER_487 0x31E7
733#define WM8994_WRITE_SEQUENCER_488 0x31E8
734#define WM8994_WRITE_SEQUENCER_489 0x31E9
735#define WM8994_WRITE_SEQUENCER_490 0x31EA
736#define WM8994_WRITE_SEQUENCER_491 0x31EB
737#define WM8994_WRITE_SEQUENCER_492 0x31EC
738#define WM8994_WRITE_SEQUENCER_493 0x31ED
739#define WM8994_WRITE_SEQUENCER_494 0x31EE
740#define WM8994_WRITE_SEQUENCER_495 0x31EF
741#define WM8994_WRITE_SEQUENCER_496 0x31F0
742#define WM8994_WRITE_SEQUENCER_497 0x31F1
743#define WM8994_WRITE_SEQUENCER_498 0x31F2
744#define WM8994_WRITE_SEQUENCER_499 0x31F3
745#define WM8994_WRITE_SEQUENCER_500 0x31F4
746#define WM8994_WRITE_SEQUENCER_501 0x31F5
747#define WM8994_WRITE_SEQUENCER_502 0x31F6
748#define WM8994_WRITE_SEQUENCER_503 0x31F7
749#define WM8994_WRITE_SEQUENCER_504 0x31F8
750#define WM8994_WRITE_SEQUENCER_505 0x31F9
751#define WM8994_WRITE_SEQUENCER_506 0x31FA
752#define WM8994_WRITE_SEQUENCER_507 0x31FB
753#define WM8994_WRITE_SEQUENCER_508 0x31FC
754#define WM8994_WRITE_SEQUENCER_509 0x31FD
755#define WM8994_WRITE_SEQUENCER_510 0x31FE
756#define WM8994_WRITE_SEQUENCER_511 0x31FF
757
758#define WM8994_REGISTER_COUNT 736
759#define WM8994_MAX_REGISTER 0x31FF
760#define WM8994_MAX_CACHED_REGISTER 0x749
761
762/*
763 * Field Definitions.
764 */
765
766/*
767 * R0 (0x00) - Software Reset
768 */
769#define WM8994_SW_RESET_MASK 0xFFFF /* SW_RESET - [15:0] */
770#define WM8994_SW_RESET_SHIFT 0 /* SW_RESET - [15:0] */
771#define WM8994_SW_RESET_WIDTH 16 /* SW_RESET - [15:0] */
772
773/*
774 * R1 (0x01) - Power Management (1)
775 */
776#define WM8994_SPKOUTR_ENA 0x2000 /* SPKOUTR_ENA */
777#define WM8994_SPKOUTR_ENA_MASK 0x2000 /* SPKOUTR_ENA */
778#define WM8994_SPKOUTR_ENA_SHIFT 13 /* SPKOUTR_ENA */
779#define WM8994_SPKOUTR_ENA_WIDTH 1 /* SPKOUTR_ENA */
780#define WM8994_SPKOUTL_ENA 0x1000 /* SPKOUTL_ENA */
781#define WM8994_SPKOUTL_ENA_MASK 0x1000 /* SPKOUTL_ENA */
782#define WM8994_SPKOUTL_ENA_SHIFT 12 /* SPKOUTL_ENA */
783#define WM8994_SPKOUTL_ENA_WIDTH 1 /* SPKOUTL_ENA */
784#define WM8994_HPOUT2_ENA 0x0800 /* HPOUT2_ENA */
785#define WM8994_HPOUT2_ENA_MASK 0x0800 /* HPOUT2_ENA */
786#define WM8994_HPOUT2_ENA_SHIFT 11 /* HPOUT2_ENA */
787#define WM8994_HPOUT2_ENA_WIDTH 1 /* HPOUT2_ENA */
788#define WM8994_HPOUT1L_ENA 0x0200 /* HPOUT1L_ENA */
789#define WM8994_HPOUT1L_ENA_MASK 0x0200 /* HPOUT1L_ENA */
790#define WM8994_HPOUT1L_ENA_SHIFT 9 /* HPOUT1L_ENA */
791#define WM8994_HPOUT1L_ENA_WIDTH 1 /* HPOUT1L_ENA */
792#define WM8994_HPOUT1R_ENA 0x0100 /* HPOUT1R_ENA */
793#define WM8994_HPOUT1R_ENA_MASK 0x0100 /* HPOUT1R_ENA */
794#define WM8994_HPOUT1R_ENA_SHIFT 8 /* HPOUT1R_ENA */
795#define WM8994_HPOUT1R_ENA_WIDTH 1 /* HPOUT1R_ENA */
796#define WM8994_MICB2_ENA 0x0020 /* MICB2_ENA */
797#define WM8994_MICB2_ENA_MASK 0x0020 /* MICB2_ENA */
798#define WM8994_MICB2_ENA_SHIFT 5 /* MICB2_ENA */
799#define WM8994_MICB2_ENA_WIDTH 1 /* MICB2_ENA */
800#define WM8994_MICB1_ENA 0x0010 /* MICB1_ENA */
801#define WM8994_MICB1_ENA_MASK 0x0010 /* MICB1_ENA */
802#define WM8994_MICB1_ENA_SHIFT 4 /* MICB1_ENA */
803#define WM8994_MICB1_ENA_WIDTH 1 /* MICB1_ENA */
804#define WM8994_VMID_SEL_MASK 0x0006 /* VMID_SEL - [2:1] */
805#define WM8994_VMID_SEL_SHIFT 1 /* VMID_SEL - [2:1] */
806#define WM8994_VMID_SEL_WIDTH 2 /* VMID_SEL - [2:1] */
807#define WM8994_BIAS_ENA 0x0001 /* BIAS_ENA */
808#define WM8994_BIAS_ENA_MASK 0x0001 /* BIAS_ENA */
809#define WM8994_BIAS_ENA_SHIFT 0 /* BIAS_ENA */
810#define WM8994_BIAS_ENA_WIDTH 1 /* BIAS_ENA */
811
812/*
813 * R2 (0x02) - Power Management (2)
814 */
815#define WM8994_TSHUT_ENA 0x4000 /* TSHUT_ENA */
816#define WM8994_TSHUT_ENA_MASK 0x4000 /* TSHUT_ENA */
817#define WM8994_TSHUT_ENA_SHIFT 14 /* TSHUT_ENA */
818#define WM8994_TSHUT_ENA_WIDTH 1 /* TSHUT_ENA */
819#define WM8994_TSHUT_OPDIS 0x2000 /* TSHUT_OPDIS */
820#define WM8994_TSHUT_OPDIS_MASK 0x2000 /* TSHUT_OPDIS */
821#define WM8994_TSHUT_OPDIS_SHIFT 13 /* TSHUT_OPDIS */
822#define WM8994_TSHUT_OPDIS_WIDTH 1 /* TSHUT_OPDIS */
823#define WM8994_OPCLK_ENA 0x0800 /* OPCLK_ENA */
824#define WM8994_OPCLK_ENA_MASK 0x0800 /* OPCLK_ENA */
825#define WM8994_OPCLK_ENA_SHIFT 11 /* OPCLK_ENA */
826#define WM8994_OPCLK_ENA_WIDTH 1 /* OPCLK_ENA */
827#define WM8994_MIXINL_ENA 0x0200 /* MIXINL_ENA */
828#define WM8994_MIXINL_ENA_MASK 0x0200 /* MIXINL_ENA */
829#define WM8994_MIXINL_ENA_SHIFT 9 /* MIXINL_ENA */
830#define WM8994_MIXINL_ENA_WIDTH 1 /* MIXINL_ENA */
831#define WM8994_MIXINR_ENA 0x0100 /* MIXINR_ENA */
832#define WM8994_MIXINR_ENA_MASK 0x0100 /* MIXINR_ENA */
833#define WM8994_MIXINR_ENA_SHIFT 8 /* MIXINR_ENA */
834#define WM8994_MIXINR_ENA_WIDTH 1 /* MIXINR_ENA */
835#define WM8994_IN2L_ENA 0x0080 /* IN2L_ENA */
836#define WM8994_IN2L_ENA_MASK 0x0080 /* IN2L_ENA */
837#define WM8994_IN2L_ENA_SHIFT 7 /* IN2L_ENA */
838#define WM8994_IN2L_ENA_WIDTH 1 /* IN2L_ENA */
839#define WM8994_IN1L_ENA 0x0040 /* IN1L_ENA */
840#define WM8994_IN1L_ENA_MASK 0x0040 /* IN1L_ENA */
841#define WM8994_IN1L_ENA_SHIFT 6 /* IN1L_ENA */
842#define WM8994_IN1L_ENA_WIDTH 1 /* IN1L_ENA */
843#define WM8994_IN2R_ENA 0x0020 /* IN2R_ENA */
844#define WM8994_IN2R_ENA_MASK 0x0020 /* IN2R_ENA */
845#define WM8994_IN2R_ENA_SHIFT 5 /* IN2R_ENA */
846#define WM8994_IN2R_ENA_WIDTH 1 /* IN2R_ENA */
847#define WM8994_IN1R_ENA 0x0010 /* IN1R_ENA */
848#define WM8994_IN1R_ENA_MASK 0x0010 /* IN1R_ENA */
849#define WM8994_IN1R_ENA_SHIFT 4 /* IN1R_ENA */
850#define WM8994_IN1R_ENA_WIDTH 1 /* IN1R_ENA */
851
852/*
853 * R3 (0x03) - Power Management (3)
854 */
855#define WM8994_LINEOUT1N_ENA 0x2000 /* LINEOUT1N_ENA */
856#define WM8994_LINEOUT1N_ENA_MASK 0x2000 /* LINEOUT1N_ENA */
857#define WM8994_LINEOUT1N_ENA_SHIFT 13 /* LINEOUT1N_ENA */
858#define WM8994_LINEOUT1N_ENA_WIDTH 1 /* LINEOUT1N_ENA */
859#define WM8994_LINEOUT1P_ENA 0x1000 /* LINEOUT1P_ENA */
860#define WM8994_LINEOUT1P_ENA_MASK 0x1000 /* LINEOUT1P_ENA */
861#define WM8994_LINEOUT1P_ENA_SHIFT 12 /* LINEOUT1P_ENA */
862#define WM8994_LINEOUT1P_ENA_WIDTH 1 /* LINEOUT1P_ENA */
863#define WM8994_LINEOUT2N_ENA 0x0800 /* LINEOUT2N_ENA */
864#define WM8994_LINEOUT2N_ENA_MASK 0x0800 /* LINEOUT2N_ENA */
865#define WM8994_LINEOUT2N_ENA_SHIFT 11 /* LINEOUT2N_ENA */
866#define WM8994_LINEOUT2N_ENA_WIDTH 1 /* LINEOUT2N_ENA */
867#define WM8994_LINEOUT2P_ENA 0x0400 /* LINEOUT2P_ENA */
868#define WM8994_LINEOUT2P_ENA_MASK 0x0400 /* LINEOUT2P_ENA */
869#define WM8994_LINEOUT2P_ENA_SHIFT 10 /* LINEOUT2P_ENA */
870#define WM8994_LINEOUT2P_ENA_WIDTH 1 /* LINEOUT2P_ENA */
871#define WM8994_SPKRVOL_ENA 0x0200 /* SPKRVOL_ENA */
872#define WM8994_SPKRVOL_ENA_MASK 0x0200 /* SPKRVOL_ENA */
873#define WM8994_SPKRVOL_ENA_SHIFT 9 /* SPKRVOL_ENA */
874#define WM8994_SPKRVOL_ENA_WIDTH 1 /* SPKRVOL_ENA */
875#define WM8994_SPKLVOL_ENA 0x0100 /* SPKLVOL_ENA */
876#define WM8994_SPKLVOL_ENA_MASK 0x0100 /* SPKLVOL_ENA */
877#define WM8994_SPKLVOL_ENA_SHIFT 8 /* SPKLVOL_ENA */
878#define WM8994_SPKLVOL_ENA_WIDTH 1 /* SPKLVOL_ENA */
879#define WM8994_MIXOUTLVOL_ENA 0x0080 /* MIXOUTLVOL_ENA */
880#define WM8994_MIXOUTLVOL_ENA_MASK 0x0080 /* MIXOUTLVOL_ENA */
881#define WM8994_MIXOUTLVOL_ENA_SHIFT 7 /* MIXOUTLVOL_ENA */
882#define WM8994_MIXOUTLVOL_ENA_WIDTH 1 /* MIXOUTLVOL_ENA */
883#define WM8994_MIXOUTRVOL_ENA 0x0040 /* MIXOUTRVOL_ENA */
884#define WM8994_MIXOUTRVOL_ENA_MASK 0x0040 /* MIXOUTRVOL_ENA */
885#define WM8994_MIXOUTRVOL_ENA_SHIFT 6 /* MIXOUTRVOL_ENA */
886#define WM8994_MIXOUTRVOL_ENA_WIDTH 1 /* MIXOUTRVOL_ENA */
887#define WM8994_MIXOUTL_ENA 0x0020 /* MIXOUTL_ENA */
888#define WM8994_MIXOUTL_ENA_MASK 0x0020 /* MIXOUTL_ENA */
889#define WM8994_MIXOUTL_ENA_SHIFT 5 /* MIXOUTL_ENA */
890#define WM8994_MIXOUTL_ENA_WIDTH 1 /* MIXOUTL_ENA */
891#define WM8994_MIXOUTR_ENA 0x0010 /* MIXOUTR_ENA */
892#define WM8994_MIXOUTR_ENA_MASK 0x0010 /* MIXOUTR_ENA */
893#define WM8994_MIXOUTR_ENA_SHIFT 4 /* MIXOUTR_ENA */
894#define WM8994_MIXOUTR_ENA_WIDTH 1 /* MIXOUTR_ENA */
895
896/*
897 * R4 (0x04) - Power Management (4)
898 */
899#define WM8994_AIF2ADCL_ENA 0x2000 /* AIF2ADCL_ENA */
900#define WM8994_AIF2ADCL_ENA_MASK 0x2000 /* AIF2ADCL_ENA */
901#define WM8994_AIF2ADCL_ENA_SHIFT 13 /* AIF2ADCL_ENA */
902#define WM8994_AIF2ADCL_ENA_WIDTH 1 /* AIF2ADCL_ENA */
903#define WM8994_AIF2ADCR_ENA 0x1000 /* AIF2ADCR_ENA */
904#define WM8994_AIF2ADCR_ENA_MASK 0x1000 /* AIF2ADCR_ENA */
905#define WM8994_AIF2ADCR_ENA_SHIFT 12 /* AIF2ADCR_ENA */
906#define WM8994_AIF2ADCR_ENA_WIDTH 1 /* AIF2ADCR_ENA */
907#define WM8994_AIF1ADC2L_ENA 0x0800 /* AIF1ADC2L_ENA */
908#define WM8994_AIF1ADC2L_ENA_MASK 0x0800 /* AIF1ADC2L_ENA */
909#define WM8994_AIF1ADC2L_ENA_SHIFT 11 /* AIF1ADC2L_ENA */
910#define WM8994_AIF1ADC2L_ENA_WIDTH 1 /* AIF1ADC2L_ENA */
911#define WM8994_AIF1ADC2R_ENA 0x0400 /* AIF1ADC2R_ENA */
912#define WM8994_AIF1ADC2R_ENA_MASK 0x0400 /* AIF1ADC2R_ENA */
913#define WM8994_AIF1ADC2R_ENA_SHIFT 10 /* AIF1ADC2R_ENA */
914#define WM8994_AIF1ADC2R_ENA_WIDTH 1 /* AIF1ADC2R_ENA */
915#define WM8994_AIF1ADC1L_ENA 0x0200 /* AIF1ADC1L_ENA */
916#define WM8994_AIF1ADC1L_ENA_MASK 0x0200 /* AIF1ADC1L_ENA */
917#define WM8994_AIF1ADC1L_ENA_SHIFT 9 /* AIF1ADC1L_ENA */
918#define WM8994_AIF1ADC1L_ENA_WIDTH 1 /* AIF1ADC1L_ENA */
919#define WM8994_AIF1ADC1R_ENA 0x0100 /* AIF1ADC1R_ENA */
920#define WM8994_AIF1ADC1R_ENA_MASK 0x0100 /* AIF1ADC1R_ENA */
921#define WM8994_AIF1ADC1R_ENA_SHIFT 8 /* AIF1ADC1R_ENA */
922#define WM8994_AIF1ADC1R_ENA_WIDTH 1 /* AIF1ADC1R_ENA */
923#define WM8994_DMIC2L_ENA 0x0020 /* DMIC2L_ENA */
924#define WM8994_DMIC2L_ENA_MASK 0x0020 /* DMIC2L_ENA */
925#define WM8994_DMIC2L_ENA_SHIFT 5 /* DMIC2L_ENA */
926#define WM8994_DMIC2L_ENA_WIDTH 1 /* DMIC2L_ENA */
927#define WM8994_DMIC2R_ENA 0x0010 /* DMIC2R_ENA */
928#define WM8994_DMIC2R_ENA_MASK 0x0010 /* DMIC2R_ENA */
929#define WM8994_DMIC2R_ENA_SHIFT 4 /* DMIC2R_ENA */
930#define WM8994_DMIC2R_ENA_WIDTH 1 /* DMIC2R_ENA */
931#define WM8994_DMIC1L_ENA 0x0008 /* DMIC1L_ENA */
932#define WM8994_DMIC1L_ENA_MASK 0x0008 /* DMIC1L_ENA */
933#define WM8994_DMIC1L_ENA_SHIFT 3 /* DMIC1L_ENA */
934#define WM8994_DMIC1L_ENA_WIDTH 1 /* DMIC1L_ENA */
935#define WM8994_DMIC1R_ENA 0x0004 /* DMIC1R_ENA */
936#define WM8994_DMIC1R_ENA_MASK 0x0004 /* DMIC1R_ENA */
937#define WM8994_DMIC1R_ENA_SHIFT 2 /* DMIC1R_ENA */
938#define WM8994_DMIC1R_ENA_WIDTH 1 /* DMIC1R_ENA */
939#define WM8994_ADCL_ENA 0x0002 /* ADCL_ENA */
940#define WM8994_ADCL_ENA_MASK 0x0002 /* ADCL_ENA */
941#define WM8994_ADCL_ENA_SHIFT 1 /* ADCL_ENA */
942#define WM8994_ADCL_ENA_WIDTH 1 /* ADCL_ENA */
943#define WM8994_ADCR_ENA 0x0001 /* ADCR_ENA */
944#define WM8994_ADCR_ENA_MASK 0x0001 /* ADCR_ENA */
945#define WM8994_ADCR_ENA_SHIFT 0 /* ADCR_ENA */
946#define WM8994_ADCR_ENA_WIDTH 1 /* ADCR_ENA */
947
948/*
949 * R5 (0x05) - Power Management (5)
950 */
951#define WM8994_AIF2DACL_ENA 0x2000 /* AIF2DACL_ENA */
952#define WM8994_AIF2DACL_ENA_MASK 0x2000 /* AIF2DACL_ENA */
953#define WM8994_AIF2DACL_ENA_SHIFT 13 /* AIF2DACL_ENA */
954#define WM8994_AIF2DACL_ENA_WIDTH 1 /* AIF2DACL_ENA */
955#define WM8994_AIF2DACR_ENA 0x1000 /* AIF2DACR_ENA */
956#define WM8994_AIF2DACR_ENA_MASK 0x1000 /* AIF2DACR_ENA */
957#define WM8994_AIF2DACR_ENA_SHIFT 12 /* AIF2DACR_ENA */
958#define WM8994_AIF2DACR_ENA_WIDTH 1 /* AIF2DACR_ENA */
959#define WM8994_AIF1DAC2L_ENA 0x0800 /* AIF1DAC2L_ENA */
960#define WM8994_AIF1DAC2L_ENA_MASK 0x0800 /* AIF1DAC2L_ENA */
961#define WM8994_AIF1DAC2L_ENA_SHIFT 11 /* AIF1DAC2L_ENA */
962#define WM8994_AIF1DAC2L_ENA_WIDTH 1 /* AIF1DAC2L_ENA */
963#define WM8994_AIF1DAC2R_ENA 0x0400 /* AIF1DAC2R_ENA */
964#define WM8994_AIF1DAC2R_ENA_MASK 0x0400 /* AIF1DAC2R_ENA */
965#define WM8994_AIF1DAC2R_ENA_SHIFT 10 /* AIF1DAC2R_ENA */
966#define WM8994_AIF1DAC2R_ENA_WIDTH 1 /* AIF1DAC2R_ENA */
967#define WM8994_AIF1DAC1L_ENA 0x0200 /* AIF1DAC1L_ENA */
968#define WM8994_AIF1DAC1L_ENA_MASK 0x0200 /* AIF1DAC1L_ENA */
969#define WM8994_AIF1DAC1L_ENA_SHIFT 9 /* AIF1DAC1L_ENA */
970#define WM8994_AIF1DAC1L_ENA_WIDTH 1 /* AIF1DAC1L_ENA */
971#define WM8994_AIF1DAC1R_ENA 0x0100 /* AIF1DAC1R_ENA */
972#define WM8994_AIF1DAC1R_ENA_MASK 0x0100 /* AIF1DAC1R_ENA */
973#define WM8994_AIF1DAC1R_ENA_SHIFT 8 /* AIF1DAC1R_ENA */
974#define WM8994_AIF1DAC1R_ENA_WIDTH 1 /* AIF1DAC1R_ENA */
975#define WM8994_DAC2L_ENA 0x0008 /* DAC2L_ENA */
976#define WM8994_DAC2L_ENA_MASK 0x0008 /* DAC2L_ENA */
977#define WM8994_DAC2L_ENA_SHIFT 3 /* DAC2L_ENA */
978#define WM8994_DAC2L_ENA_WIDTH 1 /* DAC2L_ENA */
979#define WM8994_DAC2R_ENA 0x0004 /* DAC2R_ENA */
980#define WM8994_DAC2R_ENA_MASK 0x0004 /* DAC2R_ENA */
981#define WM8994_DAC2R_ENA_SHIFT 2 /* DAC2R_ENA */
982#define WM8994_DAC2R_ENA_WIDTH 1 /* DAC2R_ENA */
983#define WM8994_DAC1L_ENA 0x0002 /* DAC1L_ENA */
984#define WM8994_DAC1L_ENA_MASK 0x0002 /* DAC1L_ENA */
985#define WM8994_DAC1L_ENA_SHIFT 1 /* DAC1L_ENA */
986#define WM8994_DAC1L_ENA_WIDTH 1 /* DAC1L_ENA */
987#define WM8994_DAC1R_ENA 0x0001 /* DAC1R_ENA */
988#define WM8994_DAC1R_ENA_MASK 0x0001 /* DAC1R_ENA */
989#define WM8994_DAC1R_ENA_SHIFT 0 /* DAC1R_ENA */
990#define WM8994_DAC1R_ENA_WIDTH 1 /* DAC1R_ENA */
991
992/*
993 * R6 (0x06) - Power Management (6)
994 */
995#define WM8994_AIF3_TRI 0x0020 /* AIF3_TRI */
996#define WM8994_AIF3_TRI_MASK 0x0020 /* AIF3_TRI */
997#define WM8994_AIF3_TRI_SHIFT 5 /* AIF3_TRI */
998#define WM8994_AIF3_TRI_WIDTH 1 /* AIF3_TRI */
999#define WM8994_AIF3_ADCDAT_SRC_MASK 0x0018 /* AIF3_ADCDAT_SRC - [4:3] */
1000#define WM8994_AIF3_ADCDAT_SRC_SHIFT 3 /* AIF3_ADCDAT_SRC - [4:3] */
1001#define WM8994_AIF3_ADCDAT_SRC_WIDTH 2 /* AIF3_ADCDAT_SRC - [4:3] */
1002#define WM8994_AIF2_ADCDAT_SRC 0x0004 /* AIF2_ADCDAT_SRC */
1003#define WM8994_AIF2_ADCDAT_SRC_MASK 0x0004 /* AIF2_ADCDAT_SRC */
1004#define WM8994_AIF2_ADCDAT_SRC_SHIFT 2 /* AIF2_ADCDAT_SRC */
1005#define WM8994_AIF2_ADCDAT_SRC_WIDTH 1 /* AIF2_ADCDAT_SRC */
1006#define WM8994_AIF2_DACDAT_SRC 0x0002 /* AIF2_DACDAT_SRC */
1007#define WM8994_AIF2_DACDAT_SRC_MASK 0x0002 /* AIF2_DACDAT_SRC */
1008#define WM8994_AIF2_DACDAT_SRC_SHIFT 1 /* AIF2_DACDAT_SRC */
1009#define WM8994_AIF2_DACDAT_SRC_WIDTH 1 /* AIF2_DACDAT_SRC */
1010#define WM8994_AIF1_DACDAT_SRC 0x0001 /* AIF1_DACDAT_SRC */
1011#define WM8994_AIF1_DACDAT_SRC_MASK 0x0001 /* AIF1_DACDAT_SRC */
1012#define WM8994_AIF1_DACDAT_SRC_SHIFT 0 /* AIF1_DACDAT_SRC */
1013#define WM8994_AIF1_DACDAT_SRC_WIDTH 1 /* AIF1_DACDAT_SRC */
1014
1015/*
1016 * R21 (0x15) - Input Mixer (1)
1017 */
1018#define WM8994_IN1RP_MIXINR_BOOST 0x0100 /* IN1RP_MIXINR_BOOST */
1019#define WM8994_IN1RP_MIXINR_BOOST_MASK 0x0100 /* IN1RP_MIXINR_BOOST */
1020#define WM8994_IN1RP_MIXINR_BOOST_SHIFT 8 /* IN1RP_MIXINR_BOOST */
1021#define WM8994_IN1RP_MIXINR_BOOST_WIDTH 1 /* IN1RP_MIXINR_BOOST */
1022#define WM8994_IN1LP_MIXINL_BOOST 0x0080 /* IN1LP_MIXINL_BOOST */
1023#define WM8994_IN1LP_MIXINL_BOOST_MASK 0x0080 /* IN1LP_MIXINL_BOOST */
1024#define WM8994_IN1LP_MIXINL_BOOST_SHIFT 7 /* IN1LP_MIXINL_BOOST */
1025#define WM8994_IN1LP_MIXINL_BOOST_WIDTH 1 /* IN1LP_MIXINL_BOOST */
1026#define WM8994_INPUTS_CLAMP 0x0040 /* INPUTS_CLAMP */
1027#define WM8994_INPUTS_CLAMP_MASK 0x0040 /* INPUTS_CLAMP */
1028#define WM8994_INPUTS_CLAMP_SHIFT 6 /* INPUTS_CLAMP */
1029#define WM8994_INPUTS_CLAMP_WIDTH 1 /* INPUTS_CLAMP */
1030
1031/*
1032 * R24 (0x18) - Left Line Input 1&2 Volume
1033 */
1034#define WM8994_IN1_VU 0x0100 /* IN1_VU */
1035#define WM8994_IN1_VU_MASK 0x0100 /* IN1_VU */
1036#define WM8994_IN1_VU_SHIFT 8 /* IN1_VU */
1037#define WM8994_IN1_VU_WIDTH 1 /* IN1_VU */
1038#define WM8994_IN1L_MUTE 0x0080 /* IN1L_MUTE */
1039#define WM8994_IN1L_MUTE_MASK 0x0080 /* IN1L_MUTE */
1040#define WM8994_IN1L_MUTE_SHIFT 7 /* IN1L_MUTE */
1041#define WM8994_IN1L_MUTE_WIDTH 1 /* IN1L_MUTE */
1042#define WM8994_IN1L_ZC 0x0040 /* IN1L_ZC */
1043#define WM8994_IN1L_ZC_MASK 0x0040 /* IN1L_ZC */
1044#define WM8994_IN1L_ZC_SHIFT 6 /* IN1L_ZC */
1045#define WM8994_IN1L_ZC_WIDTH 1 /* IN1L_ZC */
1046#define WM8994_IN1L_VOL_MASK 0x001F /* IN1L_VOL - [4:0] */
1047#define WM8994_IN1L_VOL_SHIFT 0 /* IN1L_VOL - [4:0] */
1048#define WM8994_IN1L_VOL_WIDTH 5 /* IN1L_VOL - [4:0] */
1049
1050/*
1051 * R25 (0x19) - Left Line Input 3&4 Volume
1052 */
1053#define WM8994_IN2_VU 0x0100 /* IN2_VU */
1054#define WM8994_IN2_VU_MASK 0x0100 /* IN2_VU */
1055#define WM8994_IN2_VU_SHIFT 8 /* IN2_VU */
1056#define WM8994_IN2_VU_WIDTH 1 /* IN2_VU */
1057#define WM8994_IN2L_MUTE 0x0080 /* IN2L_MUTE */
1058#define WM8994_IN2L_MUTE_MASK 0x0080 /* IN2L_MUTE */
1059#define WM8994_IN2L_MUTE_SHIFT 7 /* IN2L_MUTE */
1060#define WM8994_IN2L_MUTE_WIDTH 1 /* IN2L_MUTE */
1061#define WM8994_IN2L_ZC 0x0040 /* IN2L_ZC */
1062#define WM8994_IN2L_ZC_MASK 0x0040 /* IN2L_ZC */
1063#define WM8994_IN2L_ZC_SHIFT 6 /* IN2L_ZC */
1064#define WM8994_IN2L_ZC_WIDTH 1 /* IN2L_ZC */
1065#define WM8994_IN2L_VOL_MASK 0x001F /* IN2L_VOL - [4:0] */
1066#define WM8994_IN2L_VOL_SHIFT 0 /* IN2L_VOL - [4:0] */
1067#define WM8994_IN2L_VOL_WIDTH 5 /* IN2L_VOL - [4:0] */
1068
1069/*
1070 * R26 (0x1A) - Right Line Input 1&2 Volume
1071 */
1072#define WM8994_IN1_VU 0x0100 /* IN1_VU */
1073#define WM8994_IN1_VU_MASK 0x0100 /* IN1_VU */
1074#define WM8994_IN1_VU_SHIFT 8 /* IN1_VU */
1075#define WM8994_IN1_VU_WIDTH 1 /* IN1_VU */
1076#define WM8994_IN1R_MUTE 0x0080 /* IN1R_MUTE */
1077#define WM8994_IN1R_MUTE_MASK 0x0080 /* IN1R_MUTE */
1078#define WM8994_IN1R_MUTE_SHIFT 7 /* IN1R_MUTE */
1079#define WM8994_IN1R_MUTE_WIDTH 1 /* IN1R_MUTE */
1080#define WM8994_IN1R_ZC 0x0040 /* IN1R_ZC */
1081#define WM8994_IN1R_ZC_MASK 0x0040 /* IN1R_ZC */
1082#define WM8994_IN1R_ZC_SHIFT 6 /* IN1R_ZC */
1083#define WM8994_IN1R_ZC_WIDTH 1 /* IN1R_ZC */
1084#define WM8994_IN1R_VOL_MASK 0x001F /* IN1R_VOL - [4:0] */
1085#define WM8994_IN1R_VOL_SHIFT 0 /* IN1R_VOL - [4:0] */
1086#define WM8994_IN1R_VOL_WIDTH 5 /* IN1R_VOL - [4:0] */
1087
1088/*
1089 * R27 (0x1B) - Right Line Input 3&4 Volume
1090 */
1091#define WM8994_IN2_VU 0x0100 /* IN2_VU */
1092#define WM8994_IN2_VU_MASK 0x0100 /* IN2_VU */
1093#define WM8994_IN2_VU_SHIFT 8 /* IN2_VU */
1094#define WM8994_IN2_VU_WIDTH 1 /* IN2_VU */
1095#define WM8994_IN2R_MUTE 0x0080 /* IN2R_MUTE */
1096#define WM8994_IN2R_MUTE_MASK 0x0080 /* IN2R_MUTE */
1097#define WM8994_IN2R_MUTE_SHIFT 7 /* IN2R_MUTE */
1098#define WM8994_IN2R_MUTE_WIDTH 1 /* IN2R_MUTE */
1099#define WM8994_IN2R_ZC 0x0040 /* IN2R_ZC */
1100#define WM8994_IN2R_ZC_MASK 0x0040 /* IN2R_ZC */
1101#define WM8994_IN2R_ZC_SHIFT 6 /* IN2R_ZC */
1102#define WM8994_IN2R_ZC_WIDTH 1 /* IN2R_ZC */
1103#define WM8994_IN2R_VOL_MASK 0x001F /* IN2R_VOL - [4:0] */
1104#define WM8994_IN2R_VOL_SHIFT 0 /* IN2R_VOL - [4:0] */
1105#define WM8994_IN2R_VOL_WIDTH 5 /* IN2R_VOL - [4:0] */
1106
1107/*
1108 * R28 (0x1C) - Left Output Volume
1109 */
1110#define WM8994_HPOUT1_VU 0x0100 /* HPOUT1_VU */
1111#define WM8994_HPOUT1_VU_MASK 0x0100 /* HPOUT1_VU */
1112#define WM8994_HPOUT1_VU_SHIFT 8 /* HPOUT1_VU */
1113#define WM8994_HPOUT1_VU_WIDTH 1 /* HPOUT1_VU */
1114#define WM8994_HPOUT1L_ZC 0x0080 /* HPOUT1L_ZC */
1115#define WM8994_HPOUT1L_ZC_MASK 0x0080 /* HPOUT1L_ZC */
1116#define WM8994_HPOUT1L_ZC_SHIFT 7 /* HPOUT1L_ZC */
1117#define WM8994_HPOUT1L_ZC_WIDTH 1 /* HPOUT1L_ZC */
1118#define WM8994_HPOUT1L_MUTE_N 0x0040 /* HPOUT1L_MUTE_N */
1119#define WM8994_HPOUT1L_MUTE_N_MASK 0x0040 /* HPOUT1L_MUTE_N */
1120#define WM8994_HPOUT1L_MUTE_N_SHIFT 6 /* HPOUT1L_MUTE_N */
1121#define WM8994_HPOUT1L_MUTE_N_WIDTH 1 /* HPOUT1L_MUTE_N */
1122#define WM8994_HPOUT1L_VOL_MASK 0x003F /* HPOUT1L_VOL - [5:0] */
1123#define WM8994_HPOUT1L_VOL_SHIFT 0 /* HPOUT1L_VOL - [5:0] */
1124#define WM8994_HPOUT1L_VOL_WIDTH 6 /* HPOUT1L_VOL - [5:0] */
1125
1126/*
1127 * R29 (0x1D) - Right Output Volume
1128 */
1129#define WM8994_HPOUT1_VU 0x0100 /* HPOUT1_VU */
1130#define WM8994_HPOUT1_VU_MASK 0x0100 /* HPOUT1_VU */
1131#define WM8994_HPOUT1_VU_SHIFT 8 /* HPOUT1_VU */
1132#define WM8994_HPOUT1_VU_WIDTH 1 /* HPOUT1_VU */
1133#define WM8994_HPOUT1R_ZC 0x0080 /* HPOUT1R_ZC */
1134#define WM8994_HPOUT1R_ZC_MASK 0x0080 /* HPOUT1R_ZC */
1135#define WM8994_HPOUT1R_ZC_SHIFT 7 /* HPOUT1R_ZC */
1136#define WM8994_HPOUT1R_ZC_WIDTH 1 /* HPOUT1R_ZC */
1137#define WM8994_HPOUT1R_MUTE_N 0x0040 /* HPOUT1R_MUTE_N */
1138#define WM8994_HPOUT1R_MUTE_N_MASK 0x0040 /* HPOUT1R_MUTE_N */
1139#define WM8994_HPOUT1R_MUTE_N_SHIFT 6 /* HPOUT1R_MUTE_N */
1140#define WM8994_HPOUT1R_MUTE_N_WIDTH 1 /* HPOUT1R_MUTE_N */
1141#define WM8994_HPOUT1R_VOL_MASK 0x003F /* HPOUT1R_VOL - [5:0] */
1142#define WM8994_HPOUT1R_VOL_SHIFT 0 /* HPOUT1R_VOL - [5:0] */
1143#define WM8994_HPOUT1R_VOL_WIDTH 6 /* HPOUT1R_VOL - [5:0] */
1144
1145/*
1146 * R30 (0x1E) - Line Outputs Volume
1147 */
1148#define WM8994_LINEOUT1N_MUTE 0x0040 /* LINEOUT1N_MUTE */
1149#define WM8994_LINEOUT1N_MUTE_MASK 0x0040 /* LINEOUT1N_MUTE */
1150#define WM8994_LINEOUT1N_MUTE_SHIFT 6 /* LINEOUT1N_MUTE */
1151#define WM8994_LINEOUT1N_MUTE_WIDTH 1 /* LINEOUT1N_MUTE */
1152#define WM8994_LINEOUT1P_MUTE 0x0020 /* LINEOUT1P_MUTE */
1153#define WM8994_LINEOUT1P_MUTE_MASK 0x0020 /* LINEOUT1P_MUTE */
1154#define WM8994_LINEOUT1P_MUTE_SHIFT 5 /* LINEOUT1P_MUTE */
1155#define WM8994_LINEOUT1P_MUTE_WIDTH 1 /* LINEOUT1P_MUTE */
1156#define WM8994_LINEOUT1_VOL 0x0010 /* LINEOUT1_VOL */
1157#define WM8994_LINEOUT1_VOL_MASK 0x0010 /* LINEOUT1_VOL */
1158#define WM8994_LINEOUT1_VOL_SHIFT 4 /* LINEOUT1_VOL */
1159#define WM8994_LINEOUT1_VOL_WIDTH 1 /* LINEOUT1_VOL */
1160#define WM8994_LINEOUT2N_MUTE 0x0004 /* LINEOUT2N_MUTE */
1161#define WM8994_LINEOUT2N_MUTE_MASK 0x0004 /* LINEOUT2N_MUTE */
1162#define WM8994_LINEOUT2N_MUTE_SHIFT 2 /* LINEOUT2N_MUTE */
1163#define WM8994_LINEOUT2N_MUTE_WIDTH 1 /* LINEOUT2N_MUTE */
1164#define WM8994_LINEOUT2P_MUTE 0x0002 /* LINEOUT2P_MUTE */
1165#define WM8994_LINEOUT2P_MUTE_MASK 0x0002 /* LINEOUT2P_MUTE */
1166#define WM8994_LINEOUT2P_MUTE_SHIFT 1 /* LINEOUT2P_MUTE */
1167#define WM8994_LINEOUT2P_MUTE_WIDTH 1 /* LINEOUT2P_MUTE */
1168#define WM8994_LINEOUT2_VOL 0x0001 /* LINEOUT2_VOL */
1169#define WM8994_LINEOUT2_VOL_MASK 0x0001 /* LINEOUT2_VOL */
1170#define WM8994_LINEOUT2_VOL_SHIFT 0 /* LINEOUT2_VOL */
1171#define WM8994_LINEOUT2_VOL_WIDTH 1 /* LINEOUT2_VOL */
1172
1173/*
1174 * R31 (0x1F) - HPOUT2 Volume
1175 */
1176#define WM8994_HPOUT2_MUTE 0x0020 /* HPOUT2_MUTE */
1177#define WM8994_HPOUT2_MUTE_MASK 0x0020 /* HPOUT2_MUTE */
1178#define WM8994_HPOUT2_MUTE_SHIFT 5 /* HPOUT2_MUTE */
1179#define WM8994_HPOUT2_MUTE_WIDTH 1 /* HPOUT2_MUTE */
1180#define WM8994_HPOUT2_VOL 0x0010 /* HPOUT2_VOL */
1181#define WM8994_HPOUT2_VOL_MASK 0x0010 /* HPOUT2_VOL */
1182#define WM8994_HPOUT2_VOL_SHIFT 4 /* HPOUT2_VOL */
1183#define WM8994_HPOUT2_VOL_WIDTH 1 /* HPOUT2_VOL */
1184
1185/*
1186 * R32 (0x20) - Left OPGA Volume
1187 */
1188#define WM8994_MIXOUT_VU 0x0100 /* MIXOUT_VU */
1189#define WM8994_MIXOUT_VU_MASK 0x0100 /* MIXOUT_VU */
1190#define WM8994_MIXOUT_VU_SHIFT 8 /* MIXOUT_VU */
1191#define WM8994_MIXOUT_VU_WIDTH 1 /* MIXOUT_VU */
1192#define WM8994_MIXOUTL_ZC 0x0080 /* MIXOUTL_ZC */
1193#define WM8994_MIXOUTL_ZC_MASK 0x0080 /* MIXOUTL_ZC */
1194#define WM8994_MIXOUTL_ZC_SHIFT 7 /* MIXOUTL_ZC */
1195#define WM8994_MIXOUTL_ZC_WIDTH 1 /* MIXOUTL_ZC */
1196#define WM8994_MIXOUTL_MUTE_N 0x0040 /* MIXOUTL_MUTE_N */
1197#define WM8994_MIXOUTL_MUTE_N_MASK 0x0040 /* MIXOUTL_MUTE_N */
1198#define WM8994_MIXOUTL_MUTE_N_SHIFT 6 /* MIXOUTL_MUTE_N */
1199#define WM8994_MIXOUTL_MUTE_N_WIDTH 1 /* MIXOUTL_MUTE_N */
1200#define WM8994_MIXOUTL_VOL_MASK 0x003F /* MIXOUTL_VOL - [5:0] */
1201#define WM8994_MIXOUTL_VOL_SHIFT 0 /* MIXOUTL_VOL - [5:0] */
1202#define WM8994_MIXOUTL_VOL_WIDTH 6 /* MIXOUTL_VOL - [5:0] */
1203
1204/*
1205 * R33 (0x21) - Right OPGA Volume
1206 */
1207#define WM8994_MIXOUT_VU 0x0100 /* MIXOUT_VU */
1208#define WM8994_MIXOUT_VU_MASK 0x0100 /* MIXOUT_VU */
1209#define WM8994_MIXOUT_VU_SHIFT 8 /* MIXOUT_VU */
1210#define WM8994_MIXOUT_VU_WIDTH 1 /* MIXOUT_VU */
1211#define WM8994_MIXOUTR_ZC 0x0080 /* MIXOUTR_ZC */
1212#define WM8994_MIXOUTR_ZC_MASK 0x0080 /* MIXOUTR_ZC */
1213#define WM8994_MIXOUTR_ZC_SHIFT 7 /* MIXOUTR_ZC */
1214#define WM8994_MIXOUTR_ZC_WIDTH 1 /* MIXOUTR_ZC */
1215#define WM8994_MIXOUTR_MUTE_N 0x0040 /* MIXOUTR_MUTE_N */
1216#define WM8994_MIXOUTR_MUTE_N_MASK 0x0040 /* MIXOUTR_MUTE_N */
1217#define WM8994_MIXOUTR_MUTE_N_SHIFT 6 /* MIXOUTR_MUTE_N */
1218#define WM8994_MIXOUTR_MUTE_N_WIDTH 1 /* MIXOUTR_MUTE_N */
1219#define WM8994_MIXOUTR_VOL_MASK 0x003F /* MIXOUTR_VOL - [5:0] */
1220#define WM8994_MIXOUTR_VOL_SHIFT 0 /* MIXOUTR_VOL - [5:0] */
1221#define WM8994_MIXOUTR_VOL_WIDTH 6 /* MIXOUTR_VOL - [5:0] */
1222
1223/*
1224 * R34 (0x22) - SPKMIXL Attenuation
1225 */
1226#define WM8994_DAC2L_SPKMIXL_VOL 0x0040 /* DAC2L_SPKMIXL_VOL */
1227#define WM8994_DAC2L_SPKMIXL_VOL_MASK 0x0040 /* DAC2L_SPKMIXL_VOL */
1228#define WM8994_DAC2L_SPKMIXL_VOL_SHIFT 6 /* DAC2L_SPKMIXL_VOL */
1229#define WM8994_DAC2L_SPKMIXL_VOL_WIDTH 1 /* DAC2L_SPKMIXL_VOL */
1230#define WM8994_MIXINL_SPKMIXL_VOL 0x0020 /* MIXINL_SPKMIXL_VOL */
1231#define WM8994_MIXINL_SPKMIXL_VOL_MASK 0x0020 /* MIXINL_SPKMIXL_VOL */
1232#define WM8994_MIXINL_SPKMIXL_VOL_SHIFT 5 /* MIXINL_SPKMIXL_VOL */
1233#define WM8994_MIXINL_SPKMIXL_VOL_WIDTH 1 /* MIXINL_SPKMIXL_VOL */
1234#define WM8994_IN1LP_SPKMIXL_VOL 0x0010 /* IN1LP_SPKMIXL_VOL */
1235#define WM8994_IN1LP_SPKMIXL_VOL_MASK 0x0010 /* IN1LP_SPKMIXL_VOL */
1236#define WM8994_IN1LP_SPKMIXL_VOL_SHIFT 4 /* IN1LP_SPKMIXL_VOL */
1237#define WM8994_IN1LP_SPKMIXL_VOL_WIDTH 1 /* IN1LP_SPKMIXL_VOL */
1238#define WM8994_MIXOUTL_SPKMIXL_VOL 0x0008 /* MIXOUTL_SPKMIXL_VOL */
1239#define WM8994_MIXOUTL_SPKMIXL_VOL_MASK 0x0008 /* MIXOUTL_SPKMIXL_VOL */
1240#define WM8994_MIXOUTL_SPKMIXL_VOL_SHIFT 3 /* MIXOUTL_SPKMIXL_VOL */
1241#define WM8994_MIXOUTL_SPKMIXL_VOL_WIDTH 1 /* MIXOUTL_SPKMIXL_VOL */
1242#define WM8994_DAC1L_SPKMIXL_VOL 0x0004 /* DAC1L_SPKMIXL_VOL */
1243#define WM8994_DAC1L_SPKMIXL_VOL_MASK 0x0004 /* DAC1L_SPKMIXL_VOL */
1244#define WM8994_DAC1L_SPKMIXL_VOL_SHIFT 2 /* DAC1L_SPKMIXL_VOL */
1245#define WM8994_DAC1L_SPKMIXL_VOL_WIDTH 1 /* DAC1L_SPKMIXL_VOL */
1246#define WM8994_SPKMIXL_VOL_MASK 0x0003 /* SPKMIXL_VOL - [1:0] */
1247#define WM8994_SPKMIXL_VOL_SHIFT 0 /* SPKMIXL_VOL - [1:0] */
1248#define WM8994_SPKMIXL_VOL_WIDTH 2 /* SPKMIXL_VOL - [1:0] */
1249
1250/*
1251 * R35 (0x23) - SPKMIXR Attenuation
1252 */
1253#define WM8994_SPKOUT_CLASSAB 0x0100 /* SPKOUT_CLASSAB */
1254#define WM8994_SPKOUT_CLASSAB_MASK 0x0100 /* SPKOUT_CLASSAB */
1255#define WM8994_SPKOUT_CLASSAB_SHIFT 8 /* SPKOUT_CLASSAB */
1256#define WM8994_SPKOUT_CLASSAB_WIDTH 1 /* SPKOUT_CLASSAB */
1257#define WM8994_DAC2R_SPKMIXR_VOL 0x0040 /* DAC2R_SPKMIXR_VOL */
1258#define WM8994_DAC2R_SPKMIXR_VOL_MASK 0x0040 /* DAC2R_SPKMIXR_VOL */
1259#define WM8994_DAC2R_SPKMIXR_VOL_SHIFT 6 /* DAC2R_SPKMIXR_VOL */
1260#define WM8994_DAC2R_SPKMIXR_VOL_WIDTH 1 /* DAC2R_SPKMIXR_VOL */
1261#define WM8994_MIXINR_SPKMIXR_VOL 0x0020 /* MIXINR_SPKMIXR_VOL */
1262#define WM8994_MIXINR_SPKMIXR_VOL_MASK 0x0020 /* MIXINR_SPKMIXR_VOL */
1263#define WM8994_MIXINR_SPKMIXR_VOL_SHIFT 5 /* MIXINR_SPKMIXR_VOL */
1264#define WM8994_MIXINR_SPKMIXR_VOL_WIDTH 1 /* MIXINR_SPKMIXR_VOL */
1265#define WM8994_IN1RP_SPKMIXR_VOL 0x0010 /* IN1RP_SPKMIXR_VOL */
1266#define WM8994_IN1RP_SPKMIXR_VOL_MASK 0x0010 /* IN1RP_SPKMIXR_VOL */
1267#define WM8994_IN1RP_SPKMIXR_VOL_SHIFT 4 /* IN1RP_SPKMIXR_VOL */
1268#define WM8994_IN1RP_SPKMIXR_VOL_WIDTH 1 /* IN1RP_SPKMIXR_VOL */
1269#define WM8994_MIXOUTR_SPKMIXR_VOL 0x0008 /* MIXOUTR_SPKMIXR_VOL */
1270#define WM8994_MIXOUTR_SPKMIXR_VOL_MASK 0x0008 /* MIXOUTR_SPKMIXR_VOL */
1271#define WM8994_MIXOUTR_SPKMIXR_VOL_SHIFT 3 /* MIXOUTR_SPKMIXR_VOL */
1272#define WM8994_MIXOUTR_SPKMIXR_VOL_WIDTH 1 /* MIXOUTR_SPKMIXR_VOL */
1273#define WM8994_DAC1R_SPKMIXR_VOL 0x0004 /* DAC1R_SPKMIXR_VOL */
1274#define WM8994_DAC1R_SPKMIXR_VOL_MASK 0x0004 /* DAC1R_SPKMIXR_VOL */
1275#define WM8994_DAC1R_SPKMIXR_VOL_SHIFT 2 /* DAC1R_SPKMIXR_VOL */
1276#define WM8994_DAC1R_SPKMIXR_VOL_WIDTH 1 /* DAC1R_SPKMIXR_VOL */
1277#define WM8994_SPKMIXR_VOL_MASK 0x0003 /* SPKMIXR_VOL - [1:0] */
1278#define WM8994_SPKMIXR_VOL_SHIFT 0 /* SPKMIXR_VOL - [1:0] */
1279#define WM8994_SPKMIXR_VOL_WIDTH 2 /* SPKMIXR_VOL - [1:0] */
1280
1281/*
1282 * R36 (0x24) - SPKOUT Mixers
1283 */
1284#define WM8994_IN2LRP_TO_SPKOUTL 0x0020 /* IN2LRP_TO_SPKOUTL */
1285#define WM8994_IN2LRP_TO_SPKOUTL_MASK 0x0020 /* IN2LRP_TO_SPKOUTL */
1286#define WM8994_IN2LRP_TO_SPKOUTL_SHIFT 5 /* IN2LRP_TO_SPKOUTL */
1287#define WM8994_IN2LRP_TO_SPKOUTL_WIDTH 1 /* IN2LRP_TO_SPKOUTL */
1288#define WM8994_SPKMIXL_TO_SPKOUTL 0x0010 /* SPKMIXL_TO_SPKOUTL */
1289#define WM8994_SPKMIXL_TO_SPKOUTL_MASK 0x0010 /* SPKMIXL_TO_SPKOUTL */
1290#define WM8994_SPKMIXL_TO_SPKOUTL_SHIFT 4 /* SPKMIXL_TO_SPKOUTL */
1291#define WM8994_SPKMIXL_TO_SPKOUTL_WIDTH 1 /* SPKMIXL_TO_SPKOUTL */
1292#define WM8994_SPKMIXR_TO_SPKOUTL 0x0008 /* SPKMIXR_TO_SPKOUTL */
1293#define WM8994_SPKMIXR_TO_SPKOUTL_MASK 0x0008 /* SPKMIXR_TO_SPKOUTL */
1294#define WM8994_SPKMIXR_TO_SPKOUTL_SHIFT 3 /* SPKMIXR_TO_SPKOUTL */
1295#define WM8994_SPKMIXR_TO_SPKOUTL_WIDTH 1 /* SPKMIXR_TO_SPKOUTL */
1296#define WM8994_IN2LRP_TO_SPKOUTR 0x0004 /* IN2LRP_TO_SPKOUTR */
1297#define WM8994_IN2LRP_TO_SPKOUTR_MASK 0x0004 /* IN2LRP_TO_SPKOUTR */
1298#define WM8994_IN2LRP_TO_SPKOUTR_SHIFT 2 /* IN2LRP_TO_SPKOUTR */
1299#define WM8994_IN2LRP_TO_SPKOUTR_WIDTH 1 /* IN2LRP_TO_SPKOUTR */
1300#define WM8994_SPKMIXL_TO_SPKOUTR 0x0002 /* SPKMIXL_TO_SPKOUTR */
1301#define WM8994_SPKMIXL_TO_SPKOUTR_MASK 0x0002 /* SPKMIXL_TO_SPKOUTR */
1302#define WM8994_SPKMIXL_TO_SPKOUTR_SHIFT 1 /* SPKMIXL_TO_SPKOUTR */
1303#define WM8994_SPKMIXL_TO_SPKOUTR_WIDTH 1 /* SPKMIXL_TO_SPKOUTR */
1304#define WM8994_SPKMIXR_TO_SPKOUTR 0x0001 /* SPKMIXR_TO_SPKOUTR */
1305#define WM8994_SPKMIXR_TO_SPKOUTR_MASK 0x0001 /* SPKMIXR_TO_SPKOUTR */
1306#define WM8994_SPKMIXR_TO_SPKOUTR_SHIFT 0 /* SPKMIXR_TO_SPKOUTR */
1307#define WM8994_SPKMIXR_TO_SPKOUTR_WIDTH 1 /* SPKMIXR_TO_SPKOUTR */
1308
1309/*
1310 * R37 (0x25) - ClassD
1311 */
1312#define WM8994_SPKOUTL_BOOST_MASK 0x0038 /* SPKOUTL_BOOST - [5:3] */
1313#define WM8994_SPKOUTL_BOOST_SHIFT 3 /* SPKOUTL_BOOST - [5:3] */
1314#define WM8994_SPKOUTL_BOOST_WIDTH 3 /* SPKOUTL_BOOST - [5:3] */
1315#define WM8994_SPKOUTR_BOOST_MASK 0x0007 /* SPKOUTR_BOOST - [2:0] */
1316#define WM8994_SPKOUTR_BOOST_SHIFT 0 /* SPKOUTR_BOOST - [2:0] */
1317#define WM8994_SPKOUTR_BOOST_WIDTH 3 /* SPKOUTR_BOOST - [2:0] */
1318
1319/*
1320 * R38 (0x26) - Speaker Volume Left
1321 */
1322#define WM8994_SPKOUT_VU 0x0100 /* SPKOUT_VU */
1323#define WM8994_SPKOUT_VU_MASK 0x0100 /* SPKOUT_VU */
1324#define WM8994_SPKOUT_VU_SHIFT 8 /* SPKOUT_VU */
1325#define WM8994_SPKOUT_VU_WIDTH 1 /* SPKOUT_VU */
1326#define WM8994_SPKOUTL_ZC 0x0080 /* SPKOUTL_ZC */
1327#define WM8994_SPKOUTL_ZC_MASK 0x0080 /* SPKOUTL_ZC */
1328#define WM8994_SPKOUTL_ZC_SHIFT 7 /* SPKOUTL_ZC */
1329#define WM8994_SPKOUTL_ZC_WIDTH 1 /* SPKOUTL_ZC */
1330#define WM8994_SPKOUTL_MUTE_N 0x0040 /* SPKOUTL_MUTE_N */
1331#define WM8994_SPKOUTL_MUTE_N_MASK 0x0040 /* SPKOUTL_MUTE_N */
1332#define WM8994_SPKOUTL_MUTE_N_SHIFT 6 /* SPKOUTL_MUTE_N */
1333#define WM8994_SPKOUTL_MUTE_N_WIDTH 1 /* SPKOUTL_MUTE_N */
1334#define WM8994_SPKOUTL_VOL_MASK 0x003F /* SPKOUTL_VOL - [5:0] */
1335#define WM8994_SPKOUTL_VOL_SHIFT 0 /* SPKOUTL_VOL - [5:0] */
1336#define WM8994_SPKOUTL_VOL_WIDTH 6 /* SPKOUTL_VOL - [5:0] */
1337
1338/*
1339 * R39 (0x27) - Speaker Volume Right
1340 */
1341#define WM8994_SPKOUT_VU 0x0100 /* SPKOUT_VU */
1342#define WM8994_SPKOUT_VU_MASK 0x0100 /* SPKOUT_VU */
1343#define WM8994_SPKOUT_VU_SHIFT 8 /* SPKOUT_VU */
1344#define WM8994_SPKOUT_VU_WIDTH 1 /* SPKOUT_VU */
1345#define WM8994_SPKOUTR_ZC 0x0080 /* SPKOUTR_ZC */
1346#define WM8994_SPKOUTR_ZC_MASK 0x0080 /* SPKOUTR_ZC */
1347#define WM8994_SPKOUTR_ZC_SHIFT 7 /* SPKOUTR_ZC */
1348#define WM8994_SPKOUTR_ZC_WIDTH 1 /* SPKOUTR_ZC */
1349#define WM8994_SPKOUTR_MUTE_N 0x0040 /* SPKOUTR_MUTE_N */
1350#define WM8994_SPKOUTR_MUTE_N_MASK 0x0040 /* SPKOUTR_MUTE_N */
1351#define WM8994_SPKOUTR_MUTE_N_SHIFT 6 /* SPKOUTR_MUTE_N */
1352#define WM8994_SPKOUTR_MUTE_N_WIDTH 1 /* SPKOUTR_MUTE_N */
1353#define WM8994_SPKOUTR_VOL_MASK 0x003F /* SPKOUTR_VOL - [5:0] */
1354#define WM8994_SPKOUTR_VOL_SHIFT 0 /* SPKOUTR_VOL - [5:0] */
1355#define WM8994_SPKOUTR_VOL_WIDTH 6 /* SPKOUTR_VOL - [5:0] */
1356
1357/*
1358 * R40 (0x28) - Input Mixer (2)
1359 */
1360#define WM8994_IN2LP_TO_IN2L 0x0080 /* IN2LP_TO_IN2L */
1361#define WM8994_IN2LP_TO_IN2L_MASK 0x0080 /* IN2LP_TO_IN2L */
1362#define WM8994_IN2LP_TO_IN2L_SHIFT 7 /* IN2LP_TO_IN2L */
1363#define WM8994_IN2LP_TO_IN2L_WIDTH 1 /* IN2LP_TO_IN2L */
1364#define WM8994_IN2LN_TO_IN2L 0x0040 /* IN2LN_TO_IN2L */
1365#define WM8994_IN2LN_TO_IN2L_MASK 0x0040 /* IN2LN_TO_IN2L */
1366#define WM8994_IN2LN_TO_IN2L_SHIFT 6 /* IN2LN_TO_IN2L */
1367#define WM8994_IN2LN_TO_IN2L_WIDTH 1 /* IN2LN_TO_IN2L */
1368#define WM8994_IN1LP_TO_IN1L 0x0020 /* IN1LP_TO_IN1L */
1369#define WM8994_IN1LP_TO_IN1L_MASK 0x0020 /* IN1LP_TO_IN1L */
1370#define WM8994_IN1LP_TO_IN1L_SHIFT 5 /* IN1LP_TO_IN1L */
1371#define WM8994_IN1LP_TO_IN1L_WIDTH 1 /* IN1LP_TO_IN1L */
1372#define WM8994_IN1LN_TO_IN1L 0x0010 /* IN1LN_TO_IN1L */
1373#define WM8994_IN1LN_TO_IN1L_MASK 0x0010 /* IN1LN_TO_IN1L */
1374#define WM8994_IN1LN_TO_IN1L_SHIFT 4 /* IN1LN_TO_IN1L */
1375#define WM8994_IN1LN_TO_IN1L_WIDTH 1 /* IN1LN_TO_IN1L */
1376#define WM8994_IN2RP_TO_IN2R 0x0008 /* IN2RP_TO_IN2R */
1377#define WM8994_IN2RP_TO_IN2R_MASK 0x0008 /* IN2RP_TO_IN2R */
1378#define WM8994_IN2RP_TO_IN2R_SHIFT 3 /* IN2RP_TO_IN2R */
1379#define WM8994_IN2RP_TO_IN2R_WIDTH 1 /* IN2RP_TO_IN2R */
1380#define WM8994_IN2RN_TO_IN2R 0x0004 /* IN2RN_TO_IN2R */
1381#define WM8994_IN2RN_TO_IN2R_MASK 0x0004 /* IN2RN_TO_IN2R */
1382#define WM8994_IN2RN_TO_IN2R_SHIFT 2 /* IN2RN_TO_IN2R */
1383#define WM8994_IN2RN_TO_IN2R_WIDTH 1 /* IN2RN_TO_IN2R */
1384#define WM8994_IN1RP_TO_IN1R 0x0002 /* IN1RP_TO_IN1R */
1385#define WM8994_IN1RP_TO_IN1R_MASK 0x0002 /* IN1RP_TO_IN1R */
1386#define WM8994_IN1RP_TO_IN1R_SHIFT 1 /* IN1RP_TO_IN1R */
1387#define WM8994_IN1RP_TO_IN1R_WIDTH 1 /* IN1RP_TO_IN1R */
1388#define WM8994_IN1RN_TO_IN1R 0x0001 /* IN1RN_TO_IN1R */
1389#define WM8994_IN1RN_TO_IN1R_MASK 0x0001 /* IN1RN_TO_IN1R */
1390#define WM8994_IN1RN_TO_IN1R_SHIFT 0 /* IN1RN_TO_IN1R */
1391#define WM8994_IN1RN_TO_IN1R_WIDTH 1 /* IN1RN_TO_IN1R */
1392
1393/*
1394 * R41 (0x29) - Input Mixer (3)
1395 */
1396#define WM8994_IN2L_TO_MIXINL 0x0100 /* IN2L_TO_MIXINL */
1397#define WM8994_IN2L_TO_MIXINL_MASK 0x0100 /* IN2L_TO_MIXINL */
1398#define WM8994_IN2L_TO_MIXINL_SHIFT 8 /* IN2L_TO_MIXINL */
1399#define WM8994_IN2L_TO_MIXINL_WIDTH 1 /* IN2L_TO_MIXINL */
1400#define WM8994_IN2L_MIXINL_VOL 0x0080 /* IN2L_MIXINL_VOL */
1401#define WM8994_IN2L_MIXINL_VOL_MASK 0x0080 /* IN2L_MIXINL_VOL */
1402#define WM8994_IN2L_MIXINL_VOL_SHIFT 7 /* IN2L_MIXINL_VOL */
1403#define WM8994_IN2L_MIXINL_VOL_WIDTH 1 /* IN2L_MIXINL_VOL */
1404#define WM8994_IN1L_TO_MIXINL 0x0020 /* IN1L_TO_MIXINL */
1405#define WM8994_IN1L_TO_MIXINL_MASK 0x0020 /* IN1L_TO_MIXINL */
1406#define WM8994_IN1L_TO_MIXINL_SHIFT 5 /* IN1L_TO_MIXINL */
1407#define WM8994_IN1L_TO_MIXINL_WIDTH 1 /* IN1L_TO_MIXINL */
1408#define WM8994_IN1L_MIXINL_VOL 0x0010 /* IN1L_MIXINL_VOL */
1409#define WM8994_IN1L_MIXINL_VOL_MASK 0x0010 /* IN1L_MIXINL_VOL */
1410#define WM8994_IN1L_MIXINL_VOL_SHIFT 4 /* IN1L_MIXINL_VOL */
1411#define WM8994_IN1L_MIXINL_VOL_WIDTH 1 /* IN1L_MIXINL_VOL */
1412#define WM8994_MIXOUTL_MIXINL_VOL_MASK 0x0007 /* MIXOUTL_MIXINL_VOL - [2:0] */
1413#define WM8994_MIXOUTL_MIXINL_VOL_SHIFT 0 /* MIXOUTL_MIXINL_VOL - [2:0] */
1414#define WM8994_MIXOUTL_MIXINL_VOL_WIDTH 3 /* MIXOUTL_MIXINL_VOL - [2:0] */
1415
1416/*
1417 * R42 (0x2A) - Input Mixer (4)
1418 */
1419#define WM8994_IN2R_TO_MIXINR 0x0100 /* IN2R_TO_MIXINR */
1420#define WM8994_IN2R_TO_MIXINR_MASK 0x0100 /* IN2R_TO_MIXINR */
1421#define WM8994_IN2R_TO_MIXINR_SHIFT 8 /* IN2R_TO_MIXINR */
1422#define WM8994_IN2R_TO_MIXINR_WIDTH 1 /* IN2R_TO_MIXINR */
1423#define WM8994_IN2R_MIXINR_VOL 0x0080 /* IN2R_MIXINR_VOL */
1424#define WM8994_IN2R_MIXINR_VOL_MASK 0x0080 /* IN2R_MIXINR_VOL */
1425#define WM8994_IN2R_MIXINR_VOL_SHIFT 7 /* IN2R_MIXINR_VOL */
1426#define WM8994_IN2R_MIXINR_VOL_WIDTH 1 /* IN2R_MIXINR_VOL */
1427#define WM8994_IN1R_TO_MIXINR 0x0020 /* IN1R_TO_MIXINR */
1428#define WM8994_IN1R_TO_MIXINR_MASK 0x0020 /* IN1R_TO_MIXINR */
1429#define WM8994_IN1R_TO_MIXINR_SHIFT 5 /* IN1R_TO_MIXINR */
1430#define WM8994_IN1R_TO_MIXINR_WIDTH 1 /* IN1R_TO_MIXINR */
1431#define WM8994_IN1R_MIXINR_VOL 0x0010 /* IN1R_MIXINR_VOL */
1432#define WM8994_IN1R_MIXINR_VOL_MASK 0x0010 /* IN1R_MIXINR_VOL */
1433#define WM8994_IN1R_MIXINR_VOL_SHIFT 4 /* IN1R_MIXINR_VOL */
1434#define WM8994_IN1R_MIXINR_VOL_WIDTH 1 /* IN1R_MIXINR_VOL */
1435#define WM8994_MIXOUTR_MIXINR_VOL_MASK 0x0007 /* MIXOUTR_MIXINR_VOL - [2:0] */
1436#define WM8994_MIXOUTR_MIXINR_VOL_SHIFT 0 /* MIXOUTR_MIXINR_VOL - [2:0] */
1437#define WM8994_MIXOUTR_MIXINR_VOL_WIDTH 3 /* MIXOUTR_MIXINR_VOL - [2:0] */
1438
1439/*
1440 * R43 (0x2B) - Input Mixer (5)
1441 */
1442#define WM8994_IN1LP_MIXINL_VOL_MASK 0x01C0 /* IN1LP_MIXINL_VOL - [8:6] */
1443#define WM8994_IN1LP_MIXINL_VOL_SHIFT 6 /* IN1LP_MIXINL_VOL - [8:6] */
1444#define WM8994_IN1LP_MIXINL_VOL_WIDTH 3 /* IN1LP_MIXINL_VOL - [8:6] */
1445#define WM8994_IN2LRP_MIXINL_VOL_MASK 0x0007 /* IN2LRP_MIXINL_VOL - [2:0] */
1446#define WM8994_IN2LRP_MIXINL_VOL_SHIFT 0 /* IN2LRP_MIXINL_VOL - [2:0] */
1447#define WM8994_IN2LRP_MIXINL_VOL_WIDTH 3 /* IN2LRP_MIXINL_VOL - [2:0] */
1448
1449/*
1450 * R44 (0x2C) - Input Mixer (6)
1451 */
1452#define WM8994_IN1RP_MIXINR_VOL_MASK 0x01C0 /* IN1RP_MIXINR_VOL - [8:6] */
1453#define WM8994_IN1RP_MIXINR_VOL_SHIFT 6 /* IN1RP_MIXINR_VOL - [8:6] */
1454#define WM8994_IN1RP_MIXINR_VOL_WIDTH 3 /* IN1RP_MIXINR_VOL - [8:6] */
1455#define WM8994_IN2LRP_MIXINR_VOL_MASK 0x0007 /* IN2LRP_MIXINR_VOL - [2:0] */
1456#define WM8994_IN2LRP_MIXINR_VOL_SHIFT 0 /* IN2LRP_MIXINR_VOL - [2:0] */
1457#define WM8994_IN2LRP_MIXINR_VOL_WIDTH 3 /* IN2LRP_MIXINR_VOL - [2:0] */
1458
1459/*
1460 * R45 (0x2D) - Output Mixer (1)
1461 */
1462#define WM8994_DAC1L_TO_HPOUT1L 0x0100 /* DAC1L_TO_HPOUT1L */
1463#define WM8994_DAC1L_TO_HPOUT1L_MASK 0x0100 /* DAC1L_TO_HPOUT1L */
1464#define WM8994_DAC1L_TO_HPOUT1L_SHIFT 8 /* DAC1L_TO_HPOUT1L */
1465#define WM8994_DAC1L_TO_HPOUT1L_WIDTH 1 /* DAC1L_TO_HPOUT1L */
1466#define WM8994_MIXINR_TO_MIXOUTL 0x0080 /* MIXINR_TO_MIXOUTL */
1467#define WM8994_MIXINR_TO_MIXOUTL_MASK 0x0080 /* MIXINR_TO_MIXOUTL */
1468#define WM8994_MIXINR_TO_MIXOUTL_SHIFT 7 /* MIXINR_TO_MIXOUTL */
1469#define WM8994_MIXINR_TO_MIXOUTL_WIDTH 1 /* MIXINR_TO_MIXOUTL */
1470#define WM8994_MIXINL_TO_MIXOUTL 0x0040 /* MIXINL_TO_MIXOUTL */
1471#define WM8994_MIXINL_TO_MIXOUTL_MASK 0x0040 /* MIXINL_TO_MIXOUTL */
1472#define WM8994_MIXINL_TO_MIXOUTL_SHIFT 6 /* MIXINL_TO_MIXOUTL */
1473#define WM8994_MIXINL_TO_MIXOUTL_WIDTH 1 /* MIXINL_TO_MIXOUTL */
1474#define WM8994_IN2RN_TO_MIXOUTL 0x0020 /* IN2RN_TO_MIXOUTL */
1475#define WM8994_IN2RN_TO_MIXOUTL_MASK 0x0020 /* IN2RN_TO_MIXOUTL */
1476#define WM8994_IN2RN_TO_MIXOUTL_SHIFT 5 /* IN2RN_TO_MIXOUTL */
1477#define WM8994_IN2RN_TO_MIXOUTL_WIDTH 1 /* IN2RN_TO_MIXOUTL */
1478#define WM8994_IN2LN_TO_MIXOUTL 0x0010 /* IN2LN_TO_MIXOUTL */
1479#define WM8994_IN2LN_TO_MIXOUTL_MASK 0x0010 /* IN2LN_TO_MIXOUTL */
1480#define WM8994_IN2LN_TO_MIXOUTL_SHIFT 4 /* IN2LN_TO_MIXOUTL */
1481#define WM8994_IN2LN_TO_MIXOUTL_WIDTH 1 /* IN2LN_TO_MIXOUTL */
1482#define WM8994_IN1R_TO_MIXOUTL 0x0008 /* IN1R_TO_MIXOUTL */
1483#define WM8994_IN1R_TO_MIXOUTL_MASK 0x0008 /* IN1R_TO_MIXOUTL */
1484#define WM8994_IN1R_TO_MIXOUTL_SHIFT 3 /* IN1R_TO_MIXOUTL */
1485#define WM8994_IN1R_TO_MIXOUTL_WIDTH 1 /* IN1R_TO_MIXOUTL */
1486#define WM8994_IN1L_TO_MIXOUTL 0x0004 /* IN1L_TO_MIXOUTL */
1487#define WM8994_IN1L_TO_MIXOUTL_MASK 0x0004 /* IN1L_TO_MIXOUTL */
1488#define WM8994_IN1L_TO_MIXOUTL_SHIFT 2 /* IN1L_TO_MIXOUTL */
1489#define WM8994_IN1L_TO_MIXOUTL_WIDTH 1 /* IN1L_TO_MIXOUTL */
1490#define WM8994_IN2LP_TO_MIXOUTL 0x0002 /* IN2LP_TO_MIXOUTL */
1491#define WM8994_IN2LP_TO_MIXOUTL_MASK 0x0002 /* IN2LP_TO_MIXOUTL */
1492#define WM8994_IN2LP_TO_MIXOUTL_SHIFT 1 /* IN2LP_TO_MIXOUTL */
1493#define WM8994_IN2LP_TO_MIXOUTL_WIDTH 1 /* IN2LP_TO_MIXOUTL */
1494#define WM8994_DAC1L_TO_MIXOUTL 0x0001 /* DAC1L_TO_MIXOUTL */
1495#define WM8994_DAC1L_TO_MIXOUTL_MASK 0x0001 /* DAC1L_TO_MIXOUTL */
1496#define WM8994_DAC1L_TO_MIXOUTL_SHIFT 0 /* DAC1L_TO_MIXOUTL */
1497#define WM8994_DAC1L_TO_MIXOUTL_WIDTH 1 /* DAC1L_TO_MIXOUTL */
1498
1499/*
1500 * R46 (0x2E) - Output Mixer (2)
1501 */
1502#define WM8994_DAC1R_TO_HPOUT1R 0x0100 /* DAC1R_TO_HPOUT1R */
1503#define WM8994_DAC1R_TO_HPOUT1R_MASK 0x0100 /* DAC1R_TO_HPOUT1R */
1504#define WM8994_DAC1R_TO_HPOUT1R_SHIFT 8 /* DAC1R_TO_HPOUT1R */
1505#define WM8994_DAC1R_TO_HPOUT1R_WIDTH 1 /* DAC1R_TO_HPOUT1R */
1506#define WM8994_MIXINL_TO_MIXOUTR 0x0080 /* MIXINL_TO_MIXOUTR */
1507#define WM8994_MIXINL_TO_MIXOUTR_MASK 0x0080 /* MIXINL_TO_MIXOUTR */
1508#define WM8994_MIXINL_TO_MIXOUTR_SHIFT 7 /* MIXINL_TO_MIXOUTR */
1509#define WM8994_MIXINL_TO_MIXOUTR_WIDTH 1 /* MIXINL_TO_MIXOUTR */
1510#define WM8994_MIXINR_TO_MIXOUTR 0x0040 /* MIXINR_TO_MIXOUTR */
1511#define WM8994_MIXINR_TO_MIXOUTR_MASK 0x0040 /* MIXINR_TO_MIXOUTR */
1512#define WM8994_MIXINR_TO_MIXOUTR_SHIFT 6 /* MIXINR_TO_MIXOUTR */
1513#define WM8994_MIXINR_TO_MIXOUTR_WIDTH 1 /* MIXINR_TO_MIXOUTR */
1514#define WM8994_IN2LN_TO_MIXOUTR 0x0020 /* IN2LN_TO_MIXOUTR */
1515#define WM8994_IN2LN_TO_MIXOUTR_MASK 0x0020 /* IN2LN_TO_MIXOUTR */
1516#define WM8994_IN2LN_TO_MIXOUTR_SHIFT 5 /* IN2LN_TO_MIXOUTR */
1517#define WM8994_IN2LN_TO_MIXOUTR_WIDTH 1 /* IN2LN_TO_MIXOUTR */
1518#define WM8994_IN2RN_TO_MIXOUTR 0x0010 /* IN2RN_TO_MIXOUTR */
1519#define WM8994_IN2RN_TO_MIXOUTR_MASK 0x0010 /* IN2RN_TO_MIXOUTR */
1520#define WM8994_IN2RN_TO_MIXOUTR_SHIFT 4 /* IN2RN_TO_MIXOUTR */
1521#define WM8994_IN2RN_TO_MIXOUTR_WIDTH 1 /* IN2RN_TO_MIXOUTR */
1522#define WM8994_IN1L_TO_MIXOUTR 0x0008 /* IN1L_TO_MIXOUTR */
1523#define WM8994_IN1L_TO_MIXOUTR_MASK 0x0008 /* IN1L_TO_MIXOUTR */
1524#define WM8994_IN1L_TO_MIXOUTR_SHIFT 3 /* IN1L_TO_MIXOUTR */
1525#define WM8994_IN1L_TO_MIXOUTR_WIDTH 1 /* IN1L_TO_MIXOUTR */
1526#define WM8994_IN1R_TO_MIXOUTR 0x0004 /* IN1R_TO_MIXOUTR */
1527#define WM8994_IN1R_TO_MIXOUTR_MASK 0x0004 /* IN1R_TO_MIXOUTR */
1528#define WM8994_IN1R_TO_MIXOUTR_SHIFT 2 /* IN1R_TO_MIXOUTR */
1529#define WM8994_IN1R_TO_MIXOUTR_WIDTH 1 /* IN1R_TO_MIXOUTR */
1530#define WM8994_IN2RP_TO_MIXOUTR 0x0002 /* IN2RP_TO_MIXOUTR */
1531#define WM8994_IN2RP_TO_MIXOUTR_MASK 0x0002 /* IN2RP_TO_MIXOUTR */
1532#define WM8994_IN2RP_TO_MIXOUTR_SHIFT 1 /* IN2RP_TO_MIXOUTR */
1533#define WM8994_IN2RP_TO_MIXOUTR_WIDTH 1 /* IN2RP_TO_MIXOUTR */
1534#define WM8994_DAC1R_TO_MIXOUTR 0x0001 /* DAC1R_TO_MIXOUTR */
1535#define WM8994_DAC1R_TO_MIXOUTR_MASK 0x0001 /* DAC1R_TO_MIXOUTR */
1536#define WM8994_DAC1R_TO_MIXOUTR_SHIFT 0 /* DAC1R_TO_MIXOUTR */
1537#define WM8994_DAC1R_TO_MIXOUTR_WIDTH 1 /* DAC1R_TO_MIXOUTR */
1538
1539/*
1540 * R47 (0x2F) - Output Mixer (3)
1541 */
1542#define WM8994_IN2LP_MIXOUTL_VOL_MASK 0x0E00 /* IN2LP_MIXOUTL_VOL - [11:9] */
1543#define WM8994_IN2LP_MIXOUTL_VOL_SHIFT 9 /* IN2LP_MIXOUTL_VOL - [11:9] */
1544#define WM8994_IN2LP_MIXOUTL_VOL_WIDTH 3 /* IN2LP_MIXOUTL_VOL - [11:9] */
1545#define WM8994_IN2LN_MIXOUTL_VOL_MASK 0x01C0 /* IN2LN_MIXOUTL_VOL - [8:6] */
1546#define WM8994_IN2LN_MIXOUTL_VOL_SHIFT 6 /* IN2LN_MIXOUTL_VOL - [8:6] */
1547#define WM8994_IN2LN_MIXOUTL_VOL_WIDTH 3 /* IN2LN_MIXOUTL_VOL - [8:6] */
1548#define WM8994_IN1R_MIXOUTL_VOL_MASK 0x0038 /* IN1R_MIXOUTL_VOL - [5:3] */
1549#define WM8994_IN1R_MIXOUTL_VOL_SHIFT 3 /* IN1R_MIXOUTL_VOL - [5:3] */
1550#define WM8994_IN1R_MIXOUTL_VOL_WIDTH 3 /* IN1R_MIXOUTL_VOL - [5:3] */
1551#define WM8994_IN1L_MIXOUTL_VOL_MASK 0x0007 /* IN1L_MIXOUTL_VOL - [2:0] */
1552#define WM8994_IN1L_MIXOUTL_VOL_SHIFT 0 /* IN1L_MIXOUTL_VOL - [2:0] */
1553#define WM8994_IN1L_MIXOUTL_VOL_WIDTH 3 /* IN1L_MIXOUTL_VOL - [2:0] */
1554
1555/*
1556 * R48 (0x30) - Output Mixer (4)
1557 */
1558#define WM8994_IN2RP_MIXOUTR_VOL_MASK 0x0E00 /* IN2RP_MIXOUTR_VOL - [11:9] */
1559#define WM8994_IN2RP_MIXOUTR_VOL_SHIFT 9 /* IN2RP_MIXOUTR_VOL - [11:9] */
1560#define WM8994_IN2RP_MIXOUTR_VOL_WIDTH 3 /* IN2RP_MIXOUTR_VOL - [11:9] */
1561#define WM8994_IN2RN_MIXOUTR_VOL_MASK 0x01C0 /* IN2RN_MIXOUTR_VOL - [8:6] */
1562#define WM8994_IN2RN_MIXOUTR_VOL_SHIFT 6 /* IN2RN_MIXOUTR_VOL - [8:6] */
1563#define WM8994_IN2RN_MIXOUTR_VOL_WIDTH 3 /* IN2RN_MIXOUTR_VOL - [8:6] */
1564#define WM8994_IN1L_MIXOUTR_VOL_MASK 0x0038 /* IN1L_MIXOUTR_VOL - [5:3] */
1565#define WM8994_IN1L_MIXOUTR_VOL_SHIFT 3 /* IN1L_MIXOUTR_VOL - [5:3] */
1566#define WM8994_IN1L_MIXOUTR_VOL_WIDTH 3 /* IN1L_MIXOUTR_VOL - [5:3] */
1567#define WM8994_IN1R_MIXOUTR_VOL_MASK 0x0007 /* IN1R_MIXOUTR_VOL - [2:0] */
1568#define WM8994_IN1R_MIXOUTR_VOL_SHIFT 0 /* IN1R_MIXOUTR_VOL - [2:0] */
1569#define WM8994_IN1R_MIXOUTR_VOL_WIDTH 3 /* IN1R_MIXOUTR_VOL - [2:0] */
1570
1571/*
1572 * R49 (0x31) - Output Mixer (5)
1573 */
1574#define WM8994_DAC1L_MIXOUTL_VOL_MASK 0x0E00 /* DAC1L_MIXOUTL_VOL - [11:9] */
1575#define WM8994_DAC1L_MIXOUTL_VOL_SHIFT 9 /* DAC1L_MIXOUTL_VOL - [11:9] */
1576#define WM8994_DAC1L_MIXOUTL_VOL_WIDTH 3 /* DAC1L_MIXOUTL_VOL - [11:9] */
1577#define WM8994_IN2RN_MIXOUTL_VOL_MASK 0x01C0 /* IN2RN_MIXOUTL_VOL - [8:6] */
1578#define WM8994_IN2RN_MIXOUTL_VOL_SHIFT 6 /* IN2RN_MIXOUTL_VOL - [8:6] */
1579#define WM8994_IN2RN_MIXOUTL_VOL_WIDTH 3 /* IN2RN_MIXOUTL_VOL - [8:6] */
1580#define WM8994_MIXINR_MIXOUTL_VOL_MASK 0x0038 /* MIXINR_MIXOUTL_VOL - [5:3] */
1581#define WM8994_MIXINR_MIXOUTL_VOL_SHIFT 3 /* MIXINR_MIXOUTL_VOL - [5:3] */
1582#define WM8994_MIXINR_MIXOUTL_VOL_WIDTH 3 /* MIXINR_MIXOUTL_VOL - [5:3] */
1583#define WM8994_MIXINL_MIXOUTL_VOL_MASK 0x0007 /* MIXINL_MIXOUTL_VOL - [2:0] */
1584#define WM8994_MIXINL_MIXOUTL_VOL_SHIFT 0 /* MIXINL_MIXOUTL_VOL - [2:0] */
1585#define WM8994_MIXINL_MIXOUTL_VOL_WIDTH 3 /* MIXINL_MIXOUTL_VOL - [2:0] */
1586
1587/*
1588 * R50 (0x32) - Output Mixer (6)
1589 */
1590#define WM8994_DAC1R_MIXOUTR_VOL_MASK 0x0E00 /* DAC1R_MIXOUTR_VOL - [11:9] */
1591#define WM8994_DAC1R_MIXOUTR_VOL_SHIFT 9 /* DAC1R_MIXOUTR_VOL - [11:9] */
1592#define WM8994_DAC1R_MIXOUTR_VOL_WIDTH 3 /* DAC1R_MIXOUTR_VOL - [11:9] */
1593#define WM8994_IN2LN_MIXOUTR_VOL_MASK 0x01C0 /* IN2LN_MIXOUTR_VOL - [8:6] */
1594#define WM8994_IN2LN_MIXOUTR_VOL_SHIFT 6 /* IN2LN_MIXOUTR_VOL - [8:6] */
1595#define WM8994_IN2LN_MIXOUTR_VOL_WIDTH 3 /* IN2LN_MIXOUTR_VOL - [8:6] */
1596#define WM8994_MIXINL_MIXOUTR_VOL_MASK 0x0038 /* MIXINL_MIXOUTR_VOL - [5:3] */
1597#define WM8994_MIXINL_MIXOUTR_VOL_SHIFT 3 /* MIXINL_MIXOUTR_VOL - [5:3] */
1598#define WM8994_MIXINL_MIXOUTR_VOL_WIDTH 3 /* MIXINL_MIXOUTR_VOL - [5:3] */
1599#define WM8994_MIXINR_MIXOUTR_VOL_MASK 0x0007 /* MIXINR_MIXOUTR_VOL - [2:0] */
1600#define WM8994_MIXINR_MIXOUTR_VOL_SHIFT 0 /* MIXINR_MIXOUTR_VOL - [2:0] */
1601#define WM8994_MIXINR_MIXOUTR_VOL_WIDTH 3 /* MIXINR_MIXOUTR_VOL - [2:0] */
1602
1603/*
1604 * R51 (0x33) - HPOUT2 Mixer
1605 */
1606#define WM8994_IN2LRP_TO_HPOUT2 0x0020 /* IN2LRP_TO_HPOUT2 */
1607#define WM8994_IN2LRP_TO_HPOUT2_MASK 0x0020 /* IN2LRP_TO_HPOUT2 */
1608#define WM8994_IN2LRP_TO_HPOUT2_SHIFT 5 /* IN2LRP_TO_HPOUT2 */
1609#define WM8994_IN2LRP_TO_HPOUT2_WIDTH 1 /* IN2LRP_TO_HPOUT2 */
1610#define WM8994_MIXOUTLVOL_TO_HPOUT2 0x0010 /* MIXOUTLVOL_TO_HPOUT2 */
1611#define WM8994_MIXOUTLVOL_TO_HPOUT2_MASK 0x0010 /* MIXOUTLVOL_TO_HPOUT2 */
1612#define WM8994_MIXOUTLVOL_TO_HPOUT2_SHIFT 4 /* MIXOUTLVOL_TO_HPOUT2 */
1613#define WM8994_MIXOUTLVOL_TO_HPOUT2_WIDTH 1 /* MIXOUTLVOL_TO_HPOUT2 */
1614#define WM8994_MIXOUTRVOL_TO_HPOUT2 0x0008 /* MIXOUTRVOL_TO_HPOUT2 */
1615#define WM8994_MIXOUTRVOL_TO_HPOUT2_MASK 0x0008 /* MIXOUTRVOL_TO_HPOUT2 */
1616#define WM8994_MIXOUTRVOL_TO_HPOUT2_SHIFT 3 /* MIXOUTRVOL_TO_HPOUT2 */
1617#define WM8994_MIXOUTRVOL_TO_HPOUT2_WIDTH 1 /* MIXOUTRVOL_TO_HPOUT2 */
1618
1619/*
1620 * R52 (0x34) - Line Mixer (1)
1621 */
1622#define WM8994_MIXOUTL_TO_LINEOUT1N 0x0040 /* MIXOUTL_TO_LINEOUT1N */
1623#define WM8994_MIXOUTL_TO_LINEOUT1N_MASK 0x0040 /* MIXOUTL_TO_LINEOUT1N */
1624#define WM8994_MIXOUTL_TO_LINEOUT1N_SHIFT 6 /* MIXOUTL_TO_LINEOUT1N */
1625#define WM8994_MIXOUTL_TO_LINEOUT1N_WIDTH 1 /* MIXOUTL_TO_LINEOUT1N */
1626#define WM8994_MIXOUTR_TO_LINEOUT1N 0x0020 /* MIXOUTR_TO_LINEOUT1N */
1627#define WM8994_MIXOUTR_TO_LINEOUT1N_MASK 0x0020 /* MIXOUTR_TO_LINEOUT1N */
1628#define WM8994_MIXOUTR_TO_LINEOUT1N_SHIFT 5 /* MIXOUTR_TO_LINEOUT1N */
1629#define WM8994_MIXOUTR_TO_LINEOUT1N_WIDTH 1 /* MIXOUTR_TO_LINEOUT1N */
1630#define WM8994_LINEOUT1_MODE 0x0010 /* LINEOUT1_MODE */
1631#define WM8994_LINEOUT1_MODE_MASK 0x0010 /* LINEOUT1_MODE */
1632#define WM8994_LINEOUT1_MODE_SHIFT 4 /* LINEOUT1_MODE */
1633#define WM8994_LINEOUT1_MODE_WIDTH 1 /* LINEOUT1_MODE */
1634#define WM8994_IN1R_TO_LINEOUT1P 0x0004 /* IN1R_TO_LINEOUT1P */
1635#define WM8994_IN1R_TO_LINEOUT1P_MASK 0x0004 /* IN1R_TO_LINEOUT1P */
1636#define WM8994_IN1R_TO_LINEOUT1P_SHIFT 2 /* IN1R_TO_LINEOUT1P */
1637#define WM8994_IN1R_TO_LINEOUT1P_WIDTH 1 /* IN1R_TO_LINEOUT1P */
1638#define WM8994_IN1L_TO_LINEOUT1P 0x0002 /* IN1L_TO_LINEOUT1P */
1639#define WM8994_IN1L_TO_LINEOUT1P_MASK 0x0002 /* IN1L_TO_LINEOUT1P */
1640#define WM8994_IN1L_TO_LINEOUT1P_SHIFT 1 /* IN1L_TO_LINEOUT1P */
1641#define WM8994_IN1L_TO_LINEOUT1P_WIDTH 1 /* IN1L_TO_LINEOUT1P */
1642#define WM8994_MIXOUTL_TO_LINEOUT1P 0x0001 /* MIXOUTL_TO_LINEOUT1P */
1643#define WM8994_MIXOUTL_TO_LINEOUT1P_MASK 0x0001 /* MIXOUTL_TO_LINEOUT1P */
1644#define WM8994_MIXOUTL_TO_LINEOUT1P_SHIFT 0 /* MIXOUTL_TO_LINEOUT1P */
1645#define WM8994_MIXOUTL_TO_LINEOUT1P_WIDTH 1 /* MIXOUTL_TO_LINEOUT1P */
1646
1647/*
1648 * R53 (0x35) - Line Mixer (2)
1649 */
1650#define WM8994_MIXOUTR_TO_LINEOUT2N 0x0040 /* MIXOUTR_TO_LINEOUT2N */
1651#define WM8994_MIXOUTR_TO_LINEOUT2N_MASK 0x0040 /* MIXOUTR_TO_LINEOUT2N */
1652#define WM8994_MIXOUTR_TO_LINEOUT2N_SHIFT 6 /* MIXOUTR_TO_LINEOUT2N */
1653#define WM8994_MIXOUTR_TO_LINEOUT2N_WIDTH 1 /* MIXOUTR_TO_LINEOUT2N */
1654#define WM8994_MIXOUTL_TO_LINEOUT2N 0x0020 /* MIXOUTL_TO_LINEOUT2N */
1655#define WM8994_MIXOUTL_TO_LINEOUT2N_MASK 0x0020 /* MIXOUTL_TO_LINEOUT2N */
1656#define WM8994_MIXOUTL_TO_LINEOUT2N_SHIFT 5 /* MIXOUTL_TO_LINEOUT2N */
1657#define WM8994_MIXOUTL_TO_LINEOUT2N_WIDTH 1 /* MIXOUTL_TO_LINEOUT2N */
1658#define WM8994_LINEOUT2_MODE 0x0010 /* LINEOUT2_MODE */
1659#define WM8994_LINEOUT2_MODE_MASK 0x0010 /* LINEOUT2_MODE */
1660#define WM8994_LINEOUT2_MODE_SHIFT 4 /* LINEOUT2_MODE */
1661#define WM8994_LINEOUT2_MODE_WIDTH 1 /* LINEOUT2_MODE */
1662#define WM8994_IN1L_TO_LINEOUT2P 0x0004 /* IN1L_TO_LINEOUT2P */
1663#define WM8994_IN1L_TO_LINEOUT2P_MASK 0x0004 /* IN1L_TO_LINEOUT2P */
1664#define WM8994_IN1L_TO_LINEOUT2P_SHIFT 2 /* IN1L_TO_LINEOUT2P */
1665#define WM8994_IN1L_TO_LINEOUT2P_WIDTH 1 /* IN1L_TO_LINEOUT2P */
1666#define WM8994_IN1R_TO_LINEOUT2P 0x0002 /* IN1R_TO_LINEOUT2P */
1667#define WM8994_IN1R_TO_LINEOUT2P_MASK 0x0002 /* IN1R_TO_LINEOUT2P */
1668#define WM8994_IN1R_TO_LINEOUT2P_SHIFT 1 /* IN1R_TO_LINEOUT2P */
1669#define WM8994_IN1R_TO_LINEOUT2P_WIDTH 1 /* IN1R_TO_LINEOUT2P */
1670#define WM8994_MIXOUTR_TO_LINEOUT2P 0x0001 /* MIXOUTR_TO_LINEOUT2P */
1671#define WM8994_MIXOUTR_TO_LINEOUT2P_MASK 0x0001 /* MIXOUTR_TO_LINEOUT2P */
1672#define WM8994_MIXOUTR_TO_LINEOUT2P_SHIFT 0 /* MIXOUTR_TO_LINEOUT2P */
1673#define WM8994_MIXOUTR_TO_LINEOUT2P_WIDTH 1 /* MIXOUTR_TO_LINEOUT2P */
1674
1675/*
1676 * R54 (0x36) - Speaker Mixer
1677 */
1678#define WM8994_DAC2L_TO_SPKMIXL 0x0200 /* DAC2L_TO_SPKMIXL */
1679#define WM8994_DAC2L_TO_SPKMIXL_MASK 0x0200 /* DAC2L_TO_SPKMIXL */
1680#define WM8994_DAC2L_TO_SPKMIXL_SHIFT 9 /* DAC2L_TO_SPKMIXL */
1681#define WM8994_DAC2L_TO_SPKMIXL_WIDTH 1 /* DAC2L_TO_SPKMIXL */
1682#define WM8994_DAC2R_TO_SPKMIXR 0x0100 /* DAC2R_TO_SPKMIXR */
1683#define WM8994_DAC2R_TO_SPKMIXR_MASK 0x0100 /* DAC2R_TO_SPKMIXR */
1684#define WM8994_DAC2R_TO_SPKMIXR_SHIFT 8 /* DAC2R_TO_SPKMIXR */
1685#define WM8994_DAC2R_TO_SPKMIXR_WIDTH 1 /* DAC2R_TO_SPKMIXR */
1686#define WM8994_MIXINL_TO_SPKMIXL 0x0080 /* MIXINL_TO_SPKMIXL */
1687#define WM8994_MIXINL_TO_SPKMIXL_MASK 0x0080 /* MIXINL_TO_SPKMIXL */
1688#define WM8994_MIXINL_TO_SPKMIXL_SHIFT 7 /* MIXINL_TO_SPKMIXL */
1689#define WM8994_MIXINL_TO_SPKMIXL_WIDTH 1 /* MIXINL_TO_SPKMIXL */
1690#define WM8994_MIXINR_TO_SPKMIXR 0x0040 /* MIXINR_TO_SPKMIXR */
1691#define WM8994_MIXINR_TO_SPKMIXR_MASK 0x0040 /* MIXINR_TO_SPKMIXR */
1692#define WM8994_MIXINR_TO_SPKMIXR_SHIFT 6 /* MIXINR_TO_SPKMIXR */
1693#define WM8994_MIXINR_TO_SPKMIXR_WIDTH 1 /* MIXINR_TO_SPKMIXR */
1694#define WM8994_IN1LP_TO_SPKMIXL 0x0020 /* IN1LP_TO_SPKMIXL */
1695#define WM8994_IN1LP_TO_SPKMIXL_MASK 0x0020 /* IN1LP_TO_SPKMIXL */
1696#define WM8994_IN1LP_TO_SPKMIXL_SHIFT 5 /* IN1LP_TO_SPKMIXL */
1697#define WM8994_IN1LP_TO_SPKMIXL_WIDTH 1 /* IN1LP_TO_SPKMIXL */
1698#define WM8994_IN1RP_TO_SPKMIXR 0x0010 /* IN1RP_TO_SPKMIXR */
1699#define WM8994_IN1RP_TO_SPKMIXR_MASK 0x0010 /* IN1RP_TO_SPKMIXR */
1700#define WM8994_IN1RP_TO_SPKMIXR_SHIFT 4 /* IN1RP_TO_SPKMIXR */
1701#define WM8994_IN1RP_TO_SPKMIXR_WIDTH 1 /* IN1RP_TO_SPKMIXR */
1702#define WM8994_MIXOUTL_TO_SPKMIXL 0x0008 /* MIXOUTL_TO_SPKMIXL */
1703#define WM8994_MIXOUTL_TO_SPKMIXL_MASK 0x0008 /* MIXOUTL_TO_SPKMIXL */
1704#define WM8994_MIXOUTL_TO_SPKMIXL_SHIFT 3 /* MIXOUTL_TO_SPKMIXL */
1705#define WM8994_MIXOUTL_TO_SPKMIXL_WIDTH 1 /* MIXOUTL_TO_SPKMIXL */
1706#define WM8994_MIXOUTR_TO_SPKMIXR 0x0004 /* MIXOUTR_TO_SPKMIXR */
1707#define WM8994_MIXOUTR_TO_SPKMIXR_MASK 0x0004 /* MIXOUTR_TO_SPKMIXR */
1708#define WM8994_MIXOUTR_TO_SPKMIXR_SHIFT 2 /* MIXOUTR_TO_SPKMIXR */
1709#define WM8994_MIXOUTR_TO_SPKMIXR_WIDTH 1 /* MIXOUTR_TO_SPKMIXR */
1710#define WM8994_DAC1L_TO_SPKMIXL 0x0002 /* DAC1L_TO_SPKMIXL */
1711#define WM8994_DAC1L_TO_SPKMIXL_MASK 0x0002 /* DAC1L_TO_SPKMIXL */
1712#define WM8994_DAC1L_TO_SPKMIXL_SHIFT 1 /* DAC1L_TO_SPKMIXL */
1713#define WM8994_DAC1L_TO_SPKMIXL_WIDTH 1 /* DAC1L_TO_SPKMIXL */
1714#define WM8994_DAC1R_TO_SPKMIXR 0x0001 /* DAC1R_TO_SPKMIXR */
1715#define WM8994_DAC1R_TO_SPKMIXR_MASK 0x0001 /* DAC1R_TO_SPKMIXR */
1716#define WM8994_DAC1R_TO_SPKMIXR_SHIFT 0 /* DAC1R_TO_SPKMIXR */
1717#define WM8994_DAC1R_TO_SPKMIXR_WIDTH 1 /* DAC1R_TO_SPKMIXR */
1718
1719/*
1720 * R55 (0x37) - Additional Control
1721 */
1722#define WM8994_LINEOUT1_FB 0x0080 /* LINEOUT1_FB */
1723#define WM8994_LINEOUT1_FB_MASK 0x0080 /* LINEOUT1_FB */
1724#define WM8994_LINEOUT1_FB_SHIFT 7 /* LINEOUT1_FB */
1725#define WM8994_LINEOUT1_FB_WIDTH 1 /* LINEOUT1_FB */
1726#define WM8994_LINEOUT2_FB 0x0040 /* LINEOUT2_FB */
1727#define WM8994_LINEOUT2_FB_MASK 0x0040 /* LINEOUT2_FB */
1728#define WM8994_LINEOUT2_FB_SHIFT 6 /* LINEOUT2_FB */
1729#define WM8994_LINEOUT2_FB_WIDTH 1 /* LINEOUT2_FB */
1730#define WM8994_VROI 0x0001 /* VROI */
1731#define WM8994_VROI_MASK 0x0001 /* VROI */
1732#define WM8994_VROI_SHIFT 0 /* VROI */
1733#define WM8994_VROI_WIDTH 1 /* VROI */
1734
1735/*
1736 * R56 (0x38) - AntiPOP (1)
1737 */
1738#define WM8994_LINEOUT_VMID_BUF_ENA 0x0080 /* LINEOUT_VMID_BUF_ENA */
1739#define WM8994_LINEOUT_VMID_BUF_ENA_MASK 0x0080 /* LINEOUT_VMID_BUF_ENA */
1740#define WM8994_LINEOUT_VMID_BUF_ENA_SHIFT 7 /* LINEOUT_VMID_BUF_ENA */
1741#define WM8994_LINEOUT_VMID_BUF_ENA_WIDTH 1 /* LINEOUT_VMID_BUF_ENA */
1742#define WM8994_HPOUT2_IN_ENA 0x0040 /* HPOUT2_IN_ENA */
1743#define WM8994_HPOUT2_IN_ENA_MASK 0x0040 /* HPOUT2_IN_ENA */
1744#define WM8994_HPOUT2_IN_ENA_SHIFT 6 /* HPOUT2_IN_ENA */
1745#define WM8994_HPOUT2_IN_ENA_WIDTH 1 /* HPOUT2_IN_ENA */
1746#define WM8994_LINEOUT1_DISCH 0x0020 /* LINEOUT1_DISCH */
1747#define WM8994_LINEOUT1_DISCH_MASK 0x0020 /* LINEOUT1_DISCH */
1748#define WM8994_LINEOUT1_DISCH_SHIFT 5 /* LINEOUT1_DISCH */
1749#define WM8994_LINEOUT1_DISCH_WIDTH 1 /* LINEOUT1_DISCH */
1750#define WM8994_LINEOUT2_DISCH 0x0010 /* LINEOUT2_DISCH */
1751#define WM8994_LINEOUT2_DISCH_MASK 0x0010 /* LINEOUT2_DISCH */
1752#define WM8994_LINEOUT2_DISCH_SHIFT 4 /* LINEOUT2_DISCH */
1753#define WM8994_LINEOUT2_DISCH_WIDTH 1 /* LINEOUT2_DISCH */
1754
1755/*
1756 * R57 (0x39) - AntiPOP (2)
1757 */
1758#define WM8994_MICB2_DISCH 0x0100 /* MICB2_DISCH */
1759#define WM8994_MICB2_DISCH_MASK 0x0100 /* MICB2_DISCH */
1760#define WM8994_MICB2_DISCH_SHIFT 8 /* MICB2_DISCH */
1761#define WM8994_MICB2_DISCH_WIDTH 1 /* MICB2_DISCH */
1762#define WM8994_MICB1_DISCH 0x0080 /* MICB1_DISCH */
1763#define WM8994_MICB1_DISCH_MASK 0x0080 /* MICB1_DISCH */
1764#define WM8994_MICB1_DISCH_SHIFT 7 /* MICB1_DISCH */
1765#define WM8994_MICB1_DISCH_WIDTH 1 /* MICB1_DISCH */
1766#define WM8994_VMID_RAMP_MASK 0x0060 /* VMID_RAMP - [6:5] */
1767#define WM8994_VMID_RAMP_SHIFT 5 /* VMID_RAMP - [6:5] */
1768#define WM8994_VMID_RAMP_WIDTH 2 /* VMID_RAMP - [6:5] */
1769#define WM8994_VMID_BUF_ENA 0x0008 /* VMID_BUF_ENA */
1770#define WM8994_VMID_BUF_ENA_MASK 0x0008 /* VMID_BUF_ENA */
1771#define WM8994_VMID_BUF_ENA_SHIFT 3 /* VMID_BUF_ENA */
1772#define WM8994_VMID_BUF_ENA_WIDTH 1 /* VMID_BUF_ENA */
1773#define WM8994_STARTUP_BIAS_ENA 0x0004 /* STARTUP_BIAS_ENA */
1774#define WM8994_STARTUP_BIAS_ENA_MASK 0x0004 /* STARTUP_BIAS_ENA */
1775#define WM8994_STARTUP_BIAS_ENA_SHIFT 2 /* STARTUP_BIAS_ENA */
1776#define WM8994_STARTUP_BIAS_ENA_WIDTH 1 /* STARTUP_BIAS_ENA */
1777#define WM8994_BIAS_SRC 0x0002 /* BIAS_SRC */
1778#define WM8994_BIAS_SRC_MASK 0x0002 /* BIAS_SRC */
1779#define WM8994_BIAS_SRC_SHIFT 1 /* BIAS_SRC */
1780#define WM8994_BIAS_SRC_WIDTH 1 /* BIAS_SRC */
1781#define WM8994_VMID_DISCH 0x0001 /* VMID_DISCH */
1782#define WM8994_VMID_DISCH_MASK 0x0001 /* VMID_DISCH */
1783#define WM8994_VMID_DISCH_SHIFT 0 /* VMID_DISCH */
1784#define WM8994_VMID_DISCH_WIDTH 1 /* VMID_DISCH */
1785
1786/*
1787 * R58 (0x3A) - MICBIAS
1788 */
1789#define WM8994_MICD_SCTHR_MASK 0x00C0 /* MICD_SCTHR - [7:6] */
1790#define WM8994_MICD_SCTHR_SHIFT 6 /* MICD_SCTHR - [7:6] */
1791#define WM8994_MICD_SCTHR_WIDTH 2 /* MICD_SCTHR - [7:6] */
1792#define WM8994_MICD_THR_MASK 0x0038 /* MICD_THR - [5:3] */
1793#define WM8994_MICD_THR_SHIFT 3 /* MICD_THR - [5:3] */
1794#define WM8994_MICD_THR_WIDTH 3 /* MICD_THR - [5:3] */
1795#define WM8994_MICD_ENA 0x0004 /* MICD_ENA */
1796#define WM8994_MICD_ENA_MASK 0x0004 /* MICD_ENA */
1797#define WM8994_MICD_ENA_SHIFT 2 /* MICD_ENA */
1798#define WM8994_MICD_ENA_WIDTH 1 /* MICD_ENA */
1799#define WM8994_MICB2_LVL 0x0002 /* MICB2_LVL */
1800#define WM8994_MICB2_LVL_MASK 0x0002 /* MICB2_LVL */
1801#define WM8994_MICB2_LVL_SHIFT 1 /* MICB2_LVL */
1802#define WM8994_MICB2_LVL_WIDTH 1 /* MICB2_LVL */
1803#define WM8994_MICB1_LVL 0x0001 /* MICB1_LVL */
1804#define WM8994_MICB1_LVL_MASK 0x0001 /* MICB1_LVL */
1805#define WM8994_MICB1_LVL_SHIFT 0 /* MICB1_LVL */
1806#define WM8994_MICB1_LVL_WIDTH 1 /* MICB1_LVL */
1807
1808/*
1809 * R59 (0x3B) - LDO 1
1810 */
1811#define WM8994_LDO1_VSEL_MASK 0x000E /* LDO1_VSEL - [3:1] */
1812#define WM8994_LDO1_VSEL_SHIFT 1 /* LDO1_VSEL - [3:1] */
1813#define WM8994_LDO1_VSEL_WIDTH 3 /* LDO1_VSEL - [3:1] */
1814#define WM8994_LDO1_DISCH 0x0001 /* LDO1_DISCH */
1815#define WM8994_LDO1_DISCH_MASK 0x0001 /* LDO1_DISCH */
1816#define WM8994_LDO1_DISCH_SHIFT 0 /* LDO1_DISCH */
1817#define WM8994_LDO1_DISCH_WIDTH 1 /* LDO1_DISCH */
1818
1819/*
1820 * R60 (0x3C) - LDO 2
1821 */
1822#define WM8994_LDO2_VSEL_MASK 0x0006 /* LDO2_VSEL - [2:1] */
1823#define WM8994_LDO2_VSEL_SHIFT 1 /* LDO2_VSEL - [2:1] */
1824#define WM8994_LDO2_VSEL_WIDTH 2 /* LDO2_VSEL - [2:1] */
1825#define WM8994_LDO2_DISCH 0x0001 /* LDO2_DISCH */
1826#define WM8994_LDO2_DISCH_MASK 0x0001 /* LDO2_DISCH */
1827#define WM8994_LDO2_DISCH_SHIFT 0 /* LDO2_DISCH */
1828#define WM8994_LDO2_DISCH_WIDTH 1 /* LDO2_DISCH */
1829
1830/*
1831 * R76 (0x4C) - Charge Pump (1)
1832 */
1833#define WM8994_CP_ENA 0x8000 /* CP_ENA */
1834#define WM8994_CP_ENA_MASK 0x8000 /* CP_ENA */
1835#define WM8994_CP_ENA_SHIFT 15 /* CP_ENA */
1836#define WM8994_CP_ENA_WIDTH 1 /* CP_ENA */
1837
1838/*
1839 * R81 (0x51) - Class W (1)
1840 */
1841#define WM8994_CP_DYN_SRC_SEL_MASK 0x0300 /* CP_DYN_SRC_SEL - [9:8] */
1842#define WM8994_CP_DYN_SRC_SEL_SHIFT 8 /* CP_DYN_SRC_SEL - [9:8] */
1843#define WM8994_CP_DYN_SRC_SEL_WIDTH 2 /* CP_DYN_SRC_SEL - [9:8] */
1844#define WM8994_CP_DYN_PWR 0x0001 /* CP_DYN_PWR */
1845#define WM8994_CP_DYN_PWR_MASK 0x0001 /* CP_DYN_PWR */
1846#define WM8994_CP_DYN_PWR_SHIFT 0 /* CP_DYN_PWR */
1847#define WM8994_CP_DYN_PWR_WIDTH 1 /* CP_DYN_PWR */
1848
1849/*
1850 * R84 (0x54) - DC Servo (1)
1851 */
1852#define WM8994_DCS_TRIG_SINGLE_1 0x2000 /* DCS_TRIG_SINGLE_1 */
1853#define WM8994_DCS_TRIG_SINGLE_1_MASK 0x2000 /* DCS_TRIG_SINGLE_1 */
1854#define WM8994_DCS_TRIG_SINGLE_1_SHIFT 13 /* DCS_TRIG_SINGLE_1 */
1855#define WM8994_DCS_TRIG_SINGLE_1_WIDTH 1 /* DCS_TRIG_SINGLE_1 */
1856#define WM8994_DCS_TRIG_SINGLE_0 0x1000 /* DCS_TRIG_SINGLE_0 */
1857#define WM8994_DCS_TRIG_SINGLE_0_MASK 0x1000 /* DCS_TRIG_SINGLE_0 */
1858#define WM8994_DCS_TRIG_SINGLE_0_SHIFT 12 /* DCS_TRIG_SINGLE_0 */
1859#define WM8994_DCS_TRIG_SINGLE_0_WIDTH 1 /* DCS_TRIG_SINGLE_0 */
1860#define WM8994_DCS_TRIG_SERIES_1 0x0200 /* DCS_TRIG_SERIES_1 */
1861#define WM8994_DCS_TRIG_SERIES_1_MASK 0x0200 /* DCS_TRIG_SERIES_1 */
1862#define WM8994_DCS_TRIG_SERIES_1_SHIFT 9 /* DCS_TRIG_SERIES_1 */
1863#define WM8994_DCS_TRIG_SERIES_1_WIDTH 1 /* DCS_TRIG_SERIES_1 */
1864#define WM8994_DCS_TRIG_SERIES_0 0x0100 /* DCS_TRIG_SERIES_0 */
1865#define WM8994_DCS_TRIG_SERIES_0_MASK 0x0100 /* DCS_TRIG_SERIES_0 */
1866#define WM8994_DCS_TRIG_SERIES_0_SHIFT 8 /* DCS_TRIG_SERIES_0 */
1867#define WM8994_DCS_TRIG_SERIES_0_WIDTH 1 /* DCS_TRIG_SERIES_0 */
1868#define WM8994_DCS_TRIG_STARTUP_1 0x0020 /* DCS_TRIG_STARTUP_1 */
1869#define WM8994_DCS_TRIG_STARTUP_1_MASK 0x0020 /* DCS_TRIG_STARTUP_1 */
1870#define WM8994_DCS_TRIG_STARTUP_1_SHIFT 5 /* DCS_TRIG_STARTUP_1 */
1871#define WM8994_DCS_TRIG_STARTUP_1_WIDTH 1 /* DCS_TRIG_STARTUP_1 */
1872#define WM8994_DCS_TRIG_STARTUP_0 0x0010 /* DCS_TRIG_STARTUP_0 */
1873#define WM8994_DCS_TRIG_STARTUP_0_MASK 0x0010 /* DCS_TRIG_STARTUP_0 */
1874#define WM8994_DCS_TRIG_STARTUP_0_SHIFT 4 /* DCS_TRIG_STARTUP_0 */
1875#define WM8994_DCS_TRIG_STARTUP_0_WIDTH 1 /* DCS_TRIG_STARTUP_0 */
1876#define WM8994_DCS_TRIG_DAC_WR_1 0x0008 /* DCS_TRIG_DAC_WR_1 */
1877#define WM8994_DCS_TRIG_DAC_WR_1_MASK 0x0008 /* DCS_TRIG_DAC_WR_1 */
1878#define WM8994_DCS_TRIG_DAC_WR_1_SHIFT 3 /* DCS_TRIG_DAC_WR_1 */
1879#define WM8994_DCS_TRIG_DAC_WR_1_WIDTH 1 /* DCS_TRIG_DAC_WR_1 */
1880#define WM8994_DCS_TRIG_DAC_WR_0 0x0004 /* DCS_TRIG_DAC_WR_0 */
1881#define WM8994_DCS_TRIG_DAC_WR_0_MASK 0x0004 /* DCS_TRIG_DAC_WR_0 */
1882#define WM8994_DCS_TRIG_DAC_WR_0_SHIFT 2 /* DCS_TRIG_DAC_WR_0 */
1883#define WM8994_DCS_TRIG_DAC_WR_0_WIDTH 1 /* DCS_TRIG_DAC_WR_0 */
1884#define WM8994_DCS_ENA_CHAN_1 0x0002 /* DCS_ENA_CHAN_1 */
1885#define WM8994_DCS_ENA_CHAN_1_MASK 0x0002 /* DCS_ENA_CHAN_1 */
1886#define WM8994_DCS_ENA_CHAN_1_SHIFT 1 /* DCS_ENA_CHAN_1 */
1887#define WM8994_DCS_ENA_CHAN_1_WIDTH 1 /* DCS_ENA_CHAN_1 */
1888#define WM8994_DCS_ENA_CHAN_0 0x0001 /* DCS_ENA_CHAN_0 */
1889#define WM8994_DCS_ENA_CHAN_0_MASK 0x0001 /* DCS_ENA_CHAN_0 */
1890#define WM8994_DCS_ENA_CHAN_0_SHIFT 0 /* DCS_ENA_CHAN_0 */
1891#define WM8994_DCS_ENA_CHAN_0_WIDTH 1 /* DCS_ENA_CHAN_0 */
1892
1893/*
1894 * R85 (0x55) - DC Servo (2)
1895 */
1896#define WM8994_DCS_SERIES_NO_01_MASK 0x0FE0 /* DCS_SERIES_NO_01 - [11:5] */
1897#define WM8994_DCS_SERIES_NO_01_SHIFT 5 /* DCS_SERIES_NO_01 - [11:5] */
1898#define WM8994_DCS_SERIES_NO_01_WIDTH 7 /* DCS_SERIES_NO_01 - [11:5] */
1899#define WM8994_DCS_TIMER_PERIOD_01_MASK 0x000F /* DCS_TIMER_PERIOD_01 - [3:0] */
1900#define WM8994_DCS_TIMER_PERIOD_01_SHIFT 0 /* DCS_TIMER_PERIOD_01 - [3:0] */
1901#define WM8994_DCS_TIMER_PERIOD_01_WIDTH 4 /* DCS_TIMER_PERIOD_01 - [3:0] */
1902
1903/*
1904 * R87 (0x57) - DC Servo (4)
1905 */
1906#define WM8994_DCS_DAC_WR_VAL_1_MASK 0xFF00 /* DCS_DAC_WR_VAL_1 - [15:8] */
1907#define WM8994_DCS_DAC_WR_VAL_1_SHIFT 8 /* DCS_DAC_WR_VAL_1 - [15:8] */
1908#define WM8994_DCS_DAC_WR_VAL_1_WIDTH 8 /* DCS_DAC_WR_VAL_1 - [15:8] */
1909#define WM8994_DCS_DAC_WR_VAL_0_MASK 0x00FF /* DCS_DAC_WR_VAL_0 - [7:0] */
1910#define WM8994_DCS_DAC_WR_VAL_0_SHIFT 0 /* DCS_DAC_WR_VAL_0 - [7:0] */
1911#define WM8994_DCS_DAC_WR_VAL_0_WIDTH 8 /* DCS_DAC_WR_VAL_0 - [7:0] */
1912
1913/*
1914 * R88 (0x58) - DC Servo Readback
1915 */
1916#define WM8994_DCS_CAL_COMPLETE_MASK 0x0300 /* DCS_CAL_COMPLETE - [9:8] */
1917#define WM8994_DCS_CAL_COMPLETE_SHIFT 8 /* DCS_CAL_COMPLETE - [9:8] */
1918#define WM8994_DCS_CAL_COMPLETE_WIDTH 2 /* DCS_CAL_COMPLETE - [9:8] */
1919#define WM8994_DCS_DAC_WR_COMPLETE_MASK 0x0030 /* DCS_DAC_WR_COMPLETE - [5:4] */
1920#define WM8994_DCS_DAC_WR_COMPLETE_SHIFT 4 /* DCS_DAC_WR_COMPLETE - [5:4] */
1921#define WM8994_DCS_DAC_WR_COMPLETE_WIDTH 2 /* DCS_DAC_WR_COMPLETE - [5:4] */
1922#define WM8994_DCS_STARTUP_COMPLETE_MASK 0x0003 /* DCS_STARTUP_COMPLETE - [1:0] */
1923#define WM8994_DCS_STARTUP_COMPLETE_SHIFT 0 /* DCS_STARTUP_COMPLETE - [1:0] */
1924#define WM8994_DCS_STARTUP_COMPLETE_WIDTH 2 /* DCS_STARTUP_COMPLETE - [1:0] */
1925
1926/*
1927 * R96 (0x60) - Analogue HP (1)
1928 */
1929#define WM8994_HPOUT1L_RMV_SHORT 0x0080 /* HPOUT1L_RMV_SHORT */
1930#define WM8994_HPOUT1L_RMV_SHORT_MASK 0x0080 /* HPOUT1L_RMV_SHORT */
1931#define WM8994_HPOUT1L_RMV_SHORT_SHIFT 7 /* HPOUT1L_RMV_SHORT */
1932#define WM8994_HPOUT1L_RMV_SHORT_WIDTH 1 /* HPOUT1L_RMV_SHORT */
1933#define WM8994_HPOUT1L_OUTP 0x0040 /* HPOUT1L_OUTP */
1934#define WM8994_HPOUT1L_OUTP_MASK 0x0040 /* HPOUT1L_OUTP */
1935#define WM8994_HPOUT1L_OUTP_SHIFT 6 /* HPOUT1L_OUTP */
1936#define WM8994_HPOUT1L_OUTP_WIDTH 1 /* HPOUT1L_OUTP */
1937#define WM8994_HPOUT1L_DLY 0x0020 /* HPOUT1L_DLY */
1938#define WM8994_HPOUT1L_DLY_MASK 0x0020 /* HPOUT1L_DLY */
1939#define WM8994_HPOUT1L_DLY_SHIFT 5 /* HPOUT1L_DLY */
1940#define WM8994_HPOUT1L_DLY_WIDTH 1 /* HPOUT1L_DLY */
1941#define WM8994_HPOUT1R_RMV_SHORT 0x0008 /* HPOUT1R_RMV_SHORT */
1942#define WM8994_HPOUT1R_RMV_SHORT_MASK 0x0008 /* HPOUT1R_RMV_SHORT */
1943#define WM8994_HPOUT1R_RMV_SHORT_SHIFT 3 /* HPOUT1R_RMV_SHORT */
1944#define WM8994_HPOUT1R_RMV_SHORT_WIDTH 1 /* HPOUT1R_RMV_SHORT */
1945#define WM8994_HPOUT1R_OUTP 0x0004 /* HPOUT1R_OUTP */
1946#define WM8994_HPOUT1R_OUTP_MASK 0x0004 /* HPOUT1R_OUTP */
1947#define WM8994_HPOUT1R_OUTP_SHIFT 2 /* HPOUT1R_OUTP */
1948#define WM8994_HPOUT1R_OUTP_WIDTH 1 /* HPOUT1R_OUTP */
1949#define WM8994_HPOUT1R_DLY 0x0002 /* HPOUT1R_DLY */
1950#define WM8994_HPOUT1R_DLY_MASK 0x0002 /* HPOUT1R_DLY */
1951#define WM8994_HPOUT1R_DLY_SHIFT 1 /* HPOUT1R_DLY */
1952#define WM8994_HPOUT1R_DLY_WIDTH 1 /* HPOUT1R_DLY */
1953
1954/*
1955 * R256 (0x100) - Chip Revision
1956 */
1957#define WM8994_CHIP_REV_MASK 0x000F /* CHIP_REV - [3:0] */
1958#define WM8994_CHIP_REV_SHIFT 0 /* CHIP_REV - [3:0] */
1959#define WM8994_CHIP_REV_WIDTH 4 /* CHIP_REV - [3:0] */
1960
1961/*
1962 * R257 (0x101) - Control Interface
1963 */
1964#define WM8994_SPI_CONTRD 0x0040 /* SPI_CONTRD */
1965#define WM8994_SPI_CONTRD_MASK 0x0040 /* SPI_CONTRD */
1966#define WM8994_SPI_CONTRD_SHIFT 6 /* SPI_CONTRD */
1967#define WM8994_SPI_CONTRD_WIDTH 1 /* SPI_CONTRD */
1968#define WM8994_SPI_4WIRE 0x0020 /* SPI_4WIRE */
1969#define WM8994_SPI_4WIRE_MASK 0x0020 /* SPI_4WIRE */
1970#define WM8994_SPI_4WIRE_SHIFT 5 /* SPI_4WIRE */
1971#define WM8994_SPI_4WIRE_WIDTH 1 /* SPI_4WIRE */
1972#define WM8994_SPI_CFG 0x0010 /* SPI_CFG */
1973#define WM8994_SPI_CFG_MASK 0x0010 /* SPI_CFG */
1974#define WM8994_SPI_CFG_SHIFT 4 /* SPI_CFG */
1975#define WM8994_SPI_CFG_WIDTH 1 /* SPI_CFG */
1976#define WM8994_AUTO_INC 0x0004 /* AUTO_INC */
1977#define WM8994_AUTO_INC_MASK 0x0004 /* AUTO_INC */
1978#define WM8994_AUTO_INC_SHIFT 2 /* AUTO_INC */
1979#define WM8994_AUTO_INC_WIDTH 1 /* AUTO_INC */
1980
1981/*
1982 * R272 (0x110) - Write Sequencer Ctrl (1)
1983 */
1984#define WM8994_WSEQ_ENA 0x8000 /* WSEQ_ENA */
1985#define WM8994_WSEQ_ENA_MASK 0x8000 /* WSEQ_ENA */
1986#define WM8994_WSEQ_ENA_SHIFT 15 /* WSEQ_ENA */
1987#define WM8994_WSEQ_ENA_WIDTH 1 /* WSEQ_ENA */
1988#define WM8994_WSEQ_ABORT 0x0200 /* WSEQ_ABORT */
1989#define WM8994_WSEQ_ABORT_MASK 0x0200 /* WSEQ_ABORT */
1990#define WM8994_WSEQ_ABORT_SHIFT 9 /* WSEQ_ABORT */
1991#define WM8994_WSEQ_ABORT_WIDTH 1 /* WSEQ_ABORT */
1992#define WM8994_WSEQ_START 0x0100 /* WSEQ_START */
1993#define WM8994_WSEQ_START_MASK 0x0100 /* WSEQ_START */
1994#define WM8994_WSEQ_START_SHIFT 8 /* WSEQ_START */
1995#define WM8994_WSEQ_START_WIDTH 1 /* WSEQ_START */
1996#define WM8994_WSEQ_START_INDEX_MASK 0x007F /* WSEQ_START_INDEX - [6:0] */
1997#define WM8994_WSEQ_START_INDEX_SHIFT 0 /* WSEQ_START_INDEX - [6:0] */
1998#define WM8994_WSEQ_START_INDEX_WIDTH 7 /* WSEQ_START_INDEX - [6:0] */
1999
2000/*
2001 * R273 (0x111) - Write Sequencer Ctrl (2)
2002 */
2003#define WM8994_WSEQ_BUSY 0x0100 /* WSEQ_BUSY */
2004#define WM8994_WSEQ_BUSY_MASK 0x0100 /* WSEQ_BUSY */
2005#define WM8994_WSEQ_BUSY_SHIFT 8 /* WSEQ_BUSY */
2006#define WM8994_WSEQ_BUSY_WIDTH 1 /* WSEQ_BUSY */
2007#define WM8994_WSEQ_CURRENT_INDEX_MASK 0x007F /* WSEQ_CURRENT_INDEX - [6:0] */
2008#define WM8994_WSEQ_CURRENT_INDEX_SHIFT 0 /* WSEQ_CURRENT_INDEX - [6:0] */
2009#define WM8994_WSEQ_CURRENT_INDEX_WIDTH 7 /* WSEQ_CURRENT_INDEX - [6:0] */
2010
2011/*
2012 * R512 (0x200) - AIF1 Clocking (1)
2013 */
2014#define WM8994_AIF1CLK_SRC_MASK 0x0018 /* AIF1CLK_SRC - [4:3] */
2015#define WM8994_AIF1CLK_SRC_SHIFT 3 /* AIF1CLK_SRC - [4:3] */
2016#define WM8994_AIF1CLK_SRC_WIDTH 2 /* AIF1CLK_SRC - [4:3] */
2017#define WM8994_AIF1CLK_INV 0x0004 /* AIF1CLK_INV */
2018#define WM8994_AIF1CLK_INV_MASK 0x0004 /* AIF1CLK_INV */
2019#define WM8994_AIF1CLK_INV_SHIFT 2 /* AIF1CLK_INV */
2020#define WM8994_AIF1CLK_INV_WIDTH 1 /* AIF1CLK_INV */
2021#define WM8994_AIF1CLK_DIV 0x0002 /* AIF1CLK_DIV */
2022#define WM8994_AIF1CLK_DIV_MASK 0x0002 /* AIF1CLK_DIV */
2023#define WM8994_AIF1CLK_DIV_SHIFT 1 /* AIF1CLK_DIV */
2024#define WM8994_AIF1CLK_DIV_WIDTH 1 /* AIF1CLK_DIV */
2025#define WM8994_AIF1CLK_ENA 0x0001 /* AIF1CLK_ENA */
2026#define WM8994_AIF1CLK_ENA_MASK 0x0001 /* AIF1CLK_ENA */
2027#define WM8994_AIF1CLK_ENA_SHIFT 0 /* AIF1CLK_ENA */
2028#define WM8994_AIF1CLK_ENA_WIDTH 1 /* AIF1CLK_ENA */
2029
2030/*
2031 * R513 (0x201) - AIF1 Clocking (2)
2032 */
2033#define WM8994_AIF1DAC_DIV_MASK 0x0038 /* AIF1DAC_DIV - [5:3] */
2034#define WM8994_AIF1DAC_DIV_SHIFT 3 /* AIF1DAC_DIV - [5:3] */
2035#define WM8994_AIF1DAC_DIV_WIDTH 3 /* AIF1DAC_DIV - [5:3] */
2036#define WM8994_AIF1ADC_DIV_MASK 0x0007 /* AIF1ADC_DIV - [2:0] */
2037#define WM8994_AIF1ADC_DIV_SHIFT 0 /* AIF1ADC_DIV - [2:0] */
2038#define WM8994_AIF1ADC_DIV_WIDTH 3 /* AIF1ADC_DIV - [2:0] */
2039
2040/*
2041 * R516 (0x204) - AIF2 Clocking (1)
2042 */
2043#define WM8994_AIF2CLK_SRC_MASK 0x0018 /* AIF2CLK_SRC - [4:3] */
2044#define WM8994_AIF2CLK_SRC_SHIFT 3 /* AIF2CLK_SRC - [4:3] */
2045#define WM8994_AIF2CLK_SRC_WIDTH 2 /* AIF2CLK_SRC - [4:3] */
2046#define WM8994_AIF2CLK_INV 0x0004 /* AIF2CLK_INV */
2047#define WM8994_AIF2CLK_INV_MASK 0x0004 /* AIF2CLK_INV */
2048#define WM8994_AIF2CLK_INV_SHIFT 2 /* AIF2CLK_INV */
2049#define WM8994_AIF2CLK_INV_WIDTH 1 /* AIF2CLK_INV */
2050#define WM8994_AIF2CLK_DIV 0x0002 /* AIF2CLK_DIV */
2051#define WM8994_AIF2CLK_DIV_MASK 0x0002 /* AIF2CLK_DIV */
2052#define WM8994_AIF2CLK_DIV_SHIFT 1 /* AIF2CLK_DIV */
2053#define WM8994_AIF2CLK_DIV_WIDTH 1 /* AIF2CLK_DIV */
2054#define WM8994_AIF2CLK_ENA 0x0001 /* AIF2CLK_ENA */
2055#define WM8994_AIF2CLK_ENA_MASK 0x0001 /* AIF2CLK_ENA */
2056#define WM8994_AIF2CLK_ENA_SHIFT 0 /* AIF2CLK_ENA */
2057#define WM8994_AIF2CLK_ENA_WIDTH 1 /* AIF2CLK_ENA */
2058
2059/*
2060 * R517 (0x205) - AIF2 Clocking (2)
2061 */
2062#define WM8994_AIF2DAC_DIV_MASK 0x0038 /* AIF2DAC_DIV - [5:3] */
2063#define WM8994_AIF2DAC_DIV_SHIFT 3 /* AIF2DAC_DIV - [5:3] */
2064#define WM8994_AIF2DAC_DIV_WIDTH 3 /* AIF2DAC_DIV - [5:3] */
2065#define WM8994_AIF2ADC_DIV_MASK 0x0007 /* AIF2ADC_DIV - [2:0] */
2066#define WM8994_AIF2ADC_DIV_SHIFT 0 /* AIF2ADC_DIV - [2:0] */
2067#define WM8994_AIF2ADC_DIV_WIDTH 3 /* AIF2ADC_DIV - [2:0] */
2068
2069/*
2070 * R520 (0x208) - Clocking (1)
2071 */
2072#define WM8994_TOCLK_ENA 0x0010 /* TOCLK_ENA */
2073#define WM8994_TOCLK_ENA_MASK 0x0010 /* TOCLK_ENA */
2074#define WM8994_TOCLK_ENA_SHIFT 4 /* TOCLK_ENA */
2075#define WM8994_TOCLK_ENA_WIDTH 1 /* TOCLK_ENA */
2076#define WM8994_AIF1DSPCLK_ENA 0x0008 /* AIF1DSPCLK_ENA */
2077#define WM8994_AIF1DSPCLK_ENA_MASK 0x0008 /* AIF1DSPCLK_ENA */
2078#define WM8994_AIF1DSPCLK_ENA_SHIFT 3 /* AIF1DSPCLK_ENA */
2079#define WM8994_AIF1DSPCLK_ENA_WIDTH 1 /* AIF1DSPCLK_ENA */
2080#define WM8994_AIF2DSPCLK_ENA 0x0004 /* AIF2DSPCLK_ENA */
2081#define WM8994_AIF2DSPCLK_ENA_MASK 0x0004 /* AIF2DSPCLK_ENA */
2082#define WM8994_AIF2DSPCLK_ENA_SHIFT 2 /* AIF2DSPCLK_ENA */
2083#define WM8994_AIF2DSPCLK_ENA_WIDTH 1 /* AIF2DSPCLK_ENA */
2084#define WM8994_SYSDSPCLK_ENA 0x0002 /* SYSDSPCLK_ENA */
2085#define WM8994_SYSDSPCLK_ENA_MASK 0x0002 /* SYSDSPCLK_ENA */
2086#define WM8994_SYSDSPCLK_ENA_SHIFT 1 /* SYSDSPCLK_ENA */
2087#define WM8994_SYSDSPCLK_ENA_WIDTH 1 /* SYSDSPCLK_ENA */
2088#define WM8994_SYSCLK_SRC 0x0001 /* SYSCLK_SRC */
2089#define WM8994_SYSCLK_SRC_MASK 0x0001 /* SYSCLK_SRC */
2090#define WM8994_SYSCLK_SRC_SHIFT 0 /* SYSCLK_SRC */
2091#define WM8994_SYSCLK_SRC_WIDTH 1 /* SYSCLK_SRC */
2092
2093/*
2094 * R521 (0x209) - Clocking (2)
2095 */
2096#define WM8994_TOCLK_DIV_MASK 0x0700 /* TOCLK_DIV - [10:8] */
2097#define WM8994_TOCLK_DIV_SHIFT 8 /* TOCLK_DIV - [10:8] */
2098#define WM8994_TOCLK_DIV_WIDTH 3 /* TOCLK_DIV - [10:8] */
2099#define WM8994_DBCLK_DIV_MASK 0x0070 /* DBCLK_DIV - [6:4] */
2100#define WM8994_DBCLK_DIV_SHIFT 4 /* DBCLK_DIV - [6:4] */
2101#define WM8994_DBCLK_DIV_WIDTH 3 /* DBCLK_DIV - [6:4] */
2102#define WM8994_OPCLK_DIV_MASK 0x0007 /* OPCLK_DIV - [2:0] */
2103#define WM8994_OPCLK_DIV_SHIFT 0 /* OPCLK_DIV - [2:0] */
2104#define WM8994_OPCLK_DIV_WIDTH 3 /* OPCLK_DIV - [2:0] */
2105
2106/*
2107 * R528 (0x210) - AIF1 Rate
2108 */
2109#define WM8994_AIF1_SR_MASK 0x00F0 /* AIF1_SR - [7:4] */
2110#define WM8994_AIF1_SR_SHIFT 4 /* AIF1_SR - [7:4] */
2111#define WM8994_AIF1_SR_WIDTH 4 /* AIF1_SR - [7:4] */
2112#define WM8994_AIF1CLK_RATE_MASK 0x000F /* AIF1CLK_RATE - [3:0] */
2113#define WM8994_AIF1CLK_RATE_SHIFT 0 /* AIF1CLK_RATE - [3:0] */
2114#define WM8994_AIF1CLK_RATE_WIDTH 4 /* AIF1CLK_RATE - [3:0] */
2115
2116/*
2117 * R529 (0x211) - AIF2 Rate
2118 */
2119#define WM8994_AIF2_SR_MASK 0x00F0 /* AIF2_SR - [7:4] */
2120#define WM8994_AIF2_SR_SHIFT 4 /* AIF2_SR - [7:4] */
2121#define WM8994_AIF2_SR_WIDTH 4 /* AIF2_SR - [7:4] */
2122#define WM8994_AIF2CLK_RATE_MASK 0x000F /* AIF2CLK_RATE - [3:0] */
2123#define WM8994_AIF2CLK_RATE_SHIFT 0 /* AIF2CLK_RATE - [3:0] */
2124#define WM8994_AIF2CLK_RATE_WIDTH 4 /* AIF2CLK_RATE - [3:0] */
2125
2126/*
2127 * R530 (0x212) - Rate Status
2128 */
2129#define WM8994_SR_ERROR_MASK 0x000F /* SR_ERROR - [3:0] */
2130#define WM8994_SR_ERROR_SHIFT 0 /* SR_ERROR - [3:0] */
2131#define WM8994_SR_ERROR_WIDTH 4 /* SR_ERROR - [3:0] */
2132
2133/*
2134 * R544 (0x220) - FLL1 Control (1)
2135 */
2136#define WM8994_FLL1_FRAC 0x0004 /* FLL1_FRAC */
2137#define WM8994_FLL1_FRAC_MASK 0x0004 /* FLL1_FRAC */
2138#define WM8994_FLL1_FRAC_SHIFT 2 /* FLL1_FRAC */
2139#define WM8994_FLL1_FRAC_WIDTH 1 /* FLL1_FRAC */
2140#define WM8994_FLL1_OSC_ENA 0x0002 /* FLL1_OSC_ENA */
2141#define WM8994_FLL1_OSC_ENA_MASK 0x0002 /* FLL1_OSC_ENA */
2142#define WM8994_FLL1_OSC_ENA_SHIFT 1 /* FLL1_OSC_ENA */
2143#define WM8994_FLL1_OSC_ENA_WIDTH 1 /* FLL1_OSC_ENA */
2144#define WM8994_FLL1_ENA 0x0001 /* FLL1_ENA */
2145#define WM8994_FLL1_ENA_MASK 0x0001 /* FLL1_ENA */
2146#define WM8994_FLL1_ENA_SHIFT 0 /* FLL1_ENA */
2147#define WM8994_FLL1_ENA_WIDTH 1 /* FLL1_ENA */
2148
2149/*
2150 * R545 (0x221) - FLL1 Control (2)
2151 */
2152#define WM8994_FLL1_OUTDIV_MASK 0x3F00 /* FLL1_OUTDIV - [13:8] */
2153#define WM8994_FLL1_OUTDIV_SHIFT 8 /* FLL1_OUTDIV - [13:8] */
2154#define WM8994_FLL1_OUTDIV_WIDTH 6 /* FLL1_OUTDIV - [13:8] */
2155#define WM8994_FLL1_CTRL_RATE_MASK 0x0070 /* FLL1_CTRL_RATE - [6:4] */
2156#define WM8994_FLL1_CTRL_RATE_SHIFT 4 /* FLL1_CTRL_RATE - [6:4] */
2157#define WM8994_FLL1_CTRL_RATE_WIDTH 3 /* FLL1_CTRL_RATE - [6:4] */
2158#define WM8994_FLL1_FRATIO_MASK 0x0007 /* FLL1_FRATIO - [2:0] */
2159#define WM8994_FLL1_FRATIO_SHIFT 0 /* FLL1_FRATIO - [2:0] */
2160#define WM8994_FLL1_FRATIO_WIDTH 3 /* FLL1_FRATIO - [2:0] */
2161
2162/*
2163 * R546 (0x222) - FLL1 Control (3)
2164 */
2165#define WM8994_FLL1_K_MASK 0xFFFF /* FLL1_K - [15:0] */
2166#define WM8994_FLL1_K_SHIFT 0 /* FLL1_K - [15:0] */
2167#define WM8994_FLL1_K_WIDTH 16 /* FLL1_K - [15:0] */
2168
2169/*
2170 * R547 (0x223) - FLL1 Control (4)
2171 */
2172#define WM8994_FLL1_N_MASK 0x7FE0 /* FLL1_N - [14:5] */
2173#define WM8994_FLL1_N_SHIFT 5 /* FLL1_N - [14:5] */
2174#define WM8994_FLL1_N_WIDTH 10 /* FLL1_N - [14:5] */
2175#define WM8994_FLL1_LOOP_GAIN_MASK 0x000F /* FLL1_LOOP_GAIN - [3:0] */
2176#define WM8994_FLL1_LOOP_GAIN_SHIFT 0 /* FLL1_LOOP_GAIN - [3:0] */
2177#define WM8994_FLL1_LOOP_GAIN_WIDTH 4 /* FLL1_LOOP_GAIN - [3:0] */
2178
2179/*
2180 * R548 (0x224) - FLL1 Control (5)
2181 */
2182#define WM8994_FLL1_FRC_NCO_VAL_MASK 0x1F80 /* FLL1_FRC_NCO_VAL - [12:7] */
2183#define WM8994_FLL1_FRC_NCO_VAL_SHIFT 7 /* FLL1_FRC_NCO_VAL - [12:7] */
2184#define WM8994_FLL1_FRC_NCO_VAL_WIDTH 6 /* FLL1_FRC_NCO_VAL - [12:7] */
2185#define WM8994_FLL1_FRC_NCO 0x0040 /* FLL1_FRC_NCO */
2186#define WM8994_FLL1_FRC_NCO_MASK 0x0040 /* FLL1_FRC_NCO */
2187#define WM8994_FLL1_FRC_NCO_SHIFT 6 /* FLL1_FRC_NCO */
2188#define WM8994_FLL1_FRC_NCO_WIDTH 1 /* FLL1_FRC_NCO */
2189#define WM8994_FLL1_REFCLK_DIV_MASK 0x0018 /* FLL1_REFCLK_DIV - [4:3] */
2190#define WM8994_FLL1_REFCLK_DIV_SHIFT 3 /* FLL1_REFCLK_DIV - [4:3] */
2191#define WM8994_FLL1_REFCLK_DIV_WIDTH 2 /* FLL1_REFCLK_DIV - [4:3] */
2192#define WM8994_FLL1_REFCLK_SRC_MASK 0x0003 /* FLL1_REFCLK_SRC - [1:0] */
2193#define WM8994_FLL1_REFCLK_SRC_SHIFT 0 /* FLL1_REFCLK_SRC - [1:0] */
2194#define WM8994_FLL1_REFCLK_SRC_WIDTH 2 /* FLL1_REFCLK_SRC - [1:0] */
2195
2196/*
2197 * R576 (0x240) - FLL2 Control (1)
2198 */
2199#define WM8994_FLL2_FRAC 0x0004 /* FLL2_FRAC */
2200#define WM8994_FLL2_FRAC_MASK 0x0004 /* FLL2_FRAC */
2201#define WM8994_FLL2_FRAC_SHIFT 2 /* FLL2_FRAC */
2202#define WM8994_FLL2_FRAC_WIDTH 1 /* FLL2_FRAC */
2203#define WM8994_FLL2_OSC_ENA 0x0002 /* FLL2_OSC_ENA */
2204#define WM8994_FLL2_OSC_ENA_MASK 0x0002 /* FLL2_OSC_ENA */
2205#define WM8994_FLL2_OSC_ENA_SHIFT 1 /* FLL2_OSC_ENA */
2206#define WM8994_FLL2_OSC_ENA_WIDTH 1 /* FLL2_OSC_ENA */
2207#define WM8994_FLL2_ENA 0x0001 /* FLL2_ENA */
2208#define WM8994_FLL2_ENA_MASK 0x0001 /* FLL2_ENA */
2209#define WM8994_FLL2_ENA_SHIFT 0 /* FLL2_ENA */
2210#define WM8994_FLL2_ENA_WIDTH 1 /* FLL2_ENA */
2211
2212/*
2213 * R577 (0x241) - FLL2 Control (2)
2214 */
2215#define WM8994_FLL2_OUTDIV_MASK 0x3F00 /* FLL2_OUTDIV - [13:8] */
2216#define WM8994_FLL2_OUTDIV_SHIFT 8 /* FLL2_OUTDIV - [13:8] */
2217#define WM8994_FLL2_OUTDIV_WIDTH 6 /* FLL2_OUTDIV - [13:8] */
2218#define WM8994_FLL2_CTRL_RATE_MASK 0x0070 /* FLL2_CTRL_RATE - [6:4] */
2219#define WM8994_FLL2_CTRL_RATE_SHIFT 4 /* FLL2_CTRL_RATE - [6:4] */
2220#define WM8994_FLL2_CTRL_RATE_WIDTH 3 /* FLL2_CTRL_RATE - [6:4] */
2221#define WM8994_FLL2_FRATIO_MASK 0x0007 /* FLL2_FRATIO - [2:0] */
2222#define WM8994_FLL2_FRATIO_SHIFT 0 /* FLL2_FRATIO - [2:0] */
2223#define WM8994_FLL2_FRATIO_WIDTH 3 /* FLL2_FRATIO - [2:0] */
2224
2225/*
2226 * R578 (0x242) - FLL2 Control (3)
2227 */
2228#define WM8994_FLL2_K_MASK 0xFFFF /* FLL2_K - [15:0] */
2229#define WM8994_FLL2_K_SHIFT 0 /* FLL2_K - [15:0] */
2230#define WM8994_FLL2_K_WIDTH 16 /* FLL2_K - [15:0] */
2231
2232/*
2233 * R579 (0x243) - FLL2 Control (4)
2234 */
2235#define WM8994_FLL2_N_MASK 0x7FE0 /* FLL2_N - [14:5] */
2236#define WM8994_FLL2_N_SHIFT 5 /* FLL2_N - [14:5] */
2237#define WM8994_FLL2_N_WIDTH 10 /* FLL2_N - [14:5] */
2238#define WM8994_FLL2_LOOP_GAIN_MASK 0x000F /* FLL2_LOOP_GAIN - [3:0] */
2239#define WM8994_FLL2_LOOP_GAIN_SHIFT 0 /* FLL2_LOOP_GAIN - [3:0] */
2240#define WM8994_FLL2_LOOP_GAIN_WIDTH 4 /* FLL2_LOOP_GAIN - [3:0] */
2241
2242/*
2243 * R580 (0x244) - FLL2 Control (5)
2244 */
2245#define WM8994_FLL2_FRC_NCO_VAL_MASK 0x1F80 /* FLL2_FRC_NCO_VAL - [12:7] */
2246#define WM8994_FLL2_FRC_NCO_VAL_SHIFT 7 /* FLL2_FRC_NCO_VAL - [12:7] */
2247#define WM8994_FLL2_FRC_NCO_VAL_WIDTH 6 /* FLL2_FRC_NCO_VAL - [12:7] */
2248#define WM8994_FLL2_FRC_NCO 0x0040 /* FLL2_FRC_NCO */
2249#define WM8994_FLL2_FRC_NCO_MASK 0x0040 /* FLL2_FRC_NCO */
2250#define WM8994_FLL2_FRC_NCO_SHIFT 6 /* FLL2_FRC_NCO */
2251#define WM8994_FLL2_FRC_NCO_WIDTH 1 /* FLL2_FRC_NCO */
2252#define WM8994_FLL2_REFCLK_DIV_MASK 0x0018 /* FLL2_REFCLK_DIV - [4:3] */
2253#define WM8994_FLL2_REFCLK_DIV_SHIFT 3 /* FLL2_REFCLK_DIV - [4:3] */
2254#define WM8994_FLL2_REFCLK_DIV_WIDTH 2 /* FLL2_REFCLK_DIV - [4:3] */
2255#define WM8994_FLL2_REFCLK_SRC_MASK 0x0003 /* FLL2_REFCLK_SRC - [1:0] */
2256#define WM8994_FLL2_REFCLK_SRC_SHIFT 0 /* FLL2_REFCLK_SRC - [1:0] */
2257#define WM8994_FLL2_REFCLK_SRC_WIDTH 2 /* FLL2_REFCLK_SRC - [1:0] */
2258
2259/*
2260 * R768 (0x300) - AIF1 Control (1)
2261 */
2262#define WM8994_AIF1ADCL_SRC 0x8000 /* AIF1ADCL_SRC */
2263#define WM8994_AIF1ADCL_SRC_MASK 0x8000 /* AIF1ADCL_SRC */
2264#define WM8994_AIF1ADCL_SRC_SHIFT 15 /* AIF1ADCL_SRC */
2265#define WM8994_AIF1ADCL_SRC_WIDTH 1 /* AIF1ADCL_SRC */
2266#define WM8994_AIF1ADCR_SRC 0x4000 /* AIF1ADCR_SRC */
2267#define WM8994_AIF1ADCR_SRC_MASK 0x4000 /* AIF1ADCR_SRC */
2268#define WM8994_AIF1ADCR_SRC_SHIFT 14 /* AIF1ADCR_SRC */
2269#define WM8994_AIF1ADCR_SRC_WIDTH 1 /* AIF1ADCR_SRC */
2270#define WM8994_AIF1ADC_TDM 0x2000 /* AIF1ADC_TDM */
2271#define WM8994_AIF1ADC_TDM_MASK 0x2000 /* AIF1ADC_TDM */
2272#define WM8994_AIF1ADC_TDM_SHIFT 13 /* AIF1ADC_TDM */
2273#define WM8994_AIF1ADC_TDM_WIDTH 1 /* AIF1ADC_TDM */
2274#define WM8994_AIF1_BCLK_INV 0x0100 /* AIF1_BCLK_INV */
2275#define WM8994_AIF1_BCLK_INV_MASK 0x0100 /* AIF1_BCLK_INV */
2276#define WM8994_AIF1_BCLK_INV_SHIFT 8 /* AIF1_BCLK_INV */
2277#define WM8994_AIF1_BCLK_INV_WIDTH 1 /* AIF1_BCLK_INV */
2278#define WM8994_AIF1_LRCLK_INV 0x0080 /* AIF1_LRCLK_INV */
2279#define WM8994_AIF1_LRCLK_INV_MASK 0x0080 /* AIF1_LRCLK_INV */
2280#define WM8994_AIF1_LRCLK_INV_SHIFT 7 /* AIF1_LRCLK_INV */
2281#define WM8994_AIF1_LRCLK_INV_WIDTH 1 /* AIF1_LRCLK_INV */
2282#define WM8994_AIF1_WL_MASK 0x0060 /* AIF1_WL - [6:5] */
2283#define WM8994_AIF1_WL_SHIFT 5 /* AIF1_WL - [6:5] */
2284#define WM8994_AIF1_WL_WIDTH 2 /* AIF1_WL - [6:5] */
2285#define WM8994_AIF1_FMT_MASK 0x0018 /* AIF1_FMT - [4:3] */
2286#define WM8994_AIF1_FMT_SHIFT 3 /* AIF1_FMT - [4:3] */
2287#define WM8994_AIF1_FMT_WIDTH 2 /* AIF1_FMT - [4:3] */
2288
2289/*
2290 * R769 (0x301) - AIF1 Control (2)
2291 */
2292#define WM8994_AIF1DACL_SRC 0x8000 /* AIF1DACL_SRC */
2293#define WM8994_AIF1DACL_SRC_MASK 0x8000 /* AIF1DACL_SRC */
2294#define WM8994_AIF1DACL_SRC_SHIFT 15 /* AIF1DACL_SRC */
2295#define WM8994_AIF1DACL_SRC_WIDTH 1 /* AIF1DACL_SRC */
2296#define WM8994_AIF1DACR_SRC 0x4000 /* AIF1DACR_SRC */
2297#define WM8994_AIF1DACR_SRC_MASK 0x4000 /* AIF1DACR_SRC */
2298#define WM8994_AIF1DACR_SRC_SHIFT 14 /* AIF1DACR_SRC */
2299#define WM8994_AIF1DACR_SRC_WIDTH 1 /* AIF1DACR_SRC */
2300#define WM8994_AIF1DAC_BOOST_MASK 0x0C00 /* AIF1DAC_BOOST - [11:10] */
2301#define WM8994_AIF1DAC_BOOST_SHIFT 10 /* AIF1DAC_BOOST - [11:10] */
2302#define WM8994_AIF1DAC_BOOST_WIDTH 2 /* AIF1DAC_BOOST - [11:10] */
2303#define WM8994_AIF1_MONO 0x0100 /* AIF1_MONO */
2304#define WM8994_AIF1_MONO_MASK 0x0100 /* AIF1_MONO */
2305#define WM8994_AIF1_MONO_SHIFT 8 /* AIF1_MONO */
2306#define WM8994_AIF1_MONO_WIDTH 1 /* AIF1_MONO */
2307#define WM8994_AIF1DAC_COMP 0x0010 /* AIF1DAC_COMP */
2308#define WM8994_AIF1DAC_COMP_MASK 0x0010 /* AIF1DAC_COMP */
2309#define WM8994_AIF1DAC_COMP_SHIFT 4 /* AIF1DAC_COMP */
2310#define WM8994_AIF1DAC_COMP_WIDTH 1 /* AIF1DAC_COMP */
2311#define WM8994_AIF1DAC_COMPMODE 0x0008 /* AIF1DAC_COMPMODE */
2312#define WM8994_AIF1DAC_COMPMODE_MASK 0x0008 /* AIF1DAC_COMPMODE */
2313#define WM8994_AIF1DAC_COMPMODE_SHIFT 3 /* AIF1DAC_COMPMODE */
2314#define WM8994_AIF1DAC_COMPMODE_WIDTH 1 /* AIF1DAC_COMPMODE */
2315#define WM8994_AIF1ADC_COMP 0x0004 /* AIF1ADC_COMP */
2316#define WM8994_AIF1ADC_COMP_MASK 0x0004 /* AIF1ADC_COMP */
2317#define WM8994_AIF1ADC_COMP_SHIFT 2 /* AIF1ADC_COMP */
2318#define WM8994_AIF1ADC_COMP_WIDTH 1 /* AIF1ADC_COMP */
2319#define WM8994_AIF1ADC_COMPMODE 0x0002 /* AIF1ADC_COMPMODE */
2320#define WM8994_AIF1ADC_COMPMODE_MASK 0x0002 /* AIF1ADC_COMPMODE */
2321#define WM8994_AIF1ADC_COMPMODE_SHIFT 1 /* AIF1ADC_COMPMODE */
2322#define WM8994_AIF1ADC_COMPMODE_WIDTH 1 /* AIF1ADC_COMPMODE */
2323#define WM8994_AIF1_LOOPBACK 0x0001 /* AIF1_LOOPBACK */
2324#define WM8994_AIF1_LOOPBACK_MASK 0x0001 /* AIF1_LOOPBACK */
2325#define WM8994_AIF1_LOOPBACK_SHIFT 0 /* AIF1_LOOPBACK */
2326#define WM8994_AIF1_LOOPBACK_WIDTH 1 /* AIF1_LOOPBACK */
2327
2328/*
2329 * R770 (0x302) - AIF1 Master/Slave
2330 */
2331#define WM8994_AIF1_TRI 0x8000 /* AIF1_TRI */
2332#define WM8994_AIF1_TRI_MASK 0x8000 /* AIF1_TRI */
2333#define WM8994_AIF1_TRI_SHIFT 15 /* AIF1_TRI */
2334#define WM8994_AIF1_TRI_WIDTH 1 /* AIF1_TRI */
2335#define WM8994_AIF1_MSTR 0x4000 /* AIF1_MSTR */
2336#define WM8994_AIF1_MSTR_MASK 0x4000 /* AIF1_MSTR */
2337#define WM8994_AIF1_MSTR_SHIFT 14 /* AIF1_MSTR */
2338#define WM8994_AIF1_MSTR_WIDTH 1 /* AIF1_MSTR */
2339#define WM8994_AIF1_CLK_FRC 0x2000 /* AIF1_CLK_FRC */
2340#define WM8994_AIF1_CLK_FRC_MASK 0x2000 /* AIF1_CLK_FRC */
2341#define WM8994_AIF1_CLK_FRC_SHIFT 13 /* AIF1_CLK_FRC */
2342#define WM8994_AIF1_CLK_FRC_WIDTH 1 /* AIF1_CLK_FRC */
2343#define WM8994_AIF1_LRCLK_FRC 0x1000 /* AIF1_LRCLK_FRC */
2344#define WM8994_AIF1_LRCLK_FRC_MASK 0x1000 /* AIF1_LRCLK_FRC */
2345#define WM8994_AIF1_LRCLK_FRC_SHIFT 12 /* AIF1_LRCLK_FRC */
2346#define WM8994_AIF1_LRCLK_FRC_WIDTH 1 /* AIF1_LRCLK_FRC */
2347
2348/*
2349 * R771 (0x303) - AIF1 BCLK
2350 */
2351#define WM8994_AIF1_BCLK_DIV_MASK 0x01F0 /* AIF1_BCLK_DIV - [8:4] */
2352#define WM8994_AIF1_BCLK_DIV_SHIFT 4 /* AIF1_BCLK_DIV - [8:4] */
2353#define WM8994_AIF1_BCLK_DIV_WIDTH 5 /* AIF1_BCLK_DIV - [8:4] */
2354
2355/*
2356 * R772 (0x304) - AIF1ADC LRCLK
2357 */
2358#define WM8994_AIF1ADC_LRCLK_DIR 0x0800 /* AIF1ADC_LRCLK_DIR */
2359#define WM8994_AIF1ADC_LRCLK_DIR_MASK 0x0800 /* AIF1ADC_LRCLK_DIR */
2360#define WM8994_AIF1ADC_LRCLK_DIR_SHIFT 11 /* AIF1ADC_LRCLK_DIR */
2361#define WM8994_AIF1ADC_LRCLK_DIR_WIDTH 1 /* AIF1ADC_LRCLK_DIR */
2362#define WM8994_AIF1ADC_RATE_MASK 0x07FF /* AIF1ADC_RATE - [10:0] */
2363#define WM8994_AIF1ADC_RATE_SHIFT 0 /* AIF1ADC_RATE - [10:0] */
2364#define WM8994_AIF1ADC_RATE_WIDTH 11 /* AIF1ADC_RATE - [10:0] */
2365
2366/*
2367 * R773 (0x305) - AIF1DAC LRCLK
2368 */
2369#define WM8994_AIF1DAC_LRCLK_DIR 0x0800 /* AIF1DAC_LRCLK_DIR */
2370#define WM8994_AIF1DAC_LRCLK_DIR_MASK 0x0800 /* AIF1DAC_LRCLK_DIR */
2371#define WM8994_AIF1DAC_LRCLK_DIR_SHIFT 11 /* AIF1DAC_LRCLK_DIR */
2372#define WM8994_AIF1DAC_LRCLK_DIR_WIDTH 1 /* AIF1DAC_LRCLK_DIR */
2373#define WM8994_AIF1DAC_RATE_MASK 0x07FF /* AIF1DAC_RATE - [10:0] */
2374#define WM8994_AIF1DAC_RATE_SHIFT 0 /* AIF1DAC_RATE - [10:0] */
2375#define WM8994_AIF1DAC_RATE_WIDTH 11 /* AIF1DAC_RATE - [10:0] */
2376
2377/*
2378 * R774 (0x306) - AIF1DAC Data
2379 */
2380#define WM8994_AIF1DACL_DAT_INV 0x0002 /* AIF1DACL_DAT_INV */
2381#define WM8994_AIF1DACL_DAT_INV_MASK 0x0002 /* AIF1DACL_DAT_INV */
2382#define WM8994_AIF1DACL_DAT_INV_SHIFT 1 /* AIF1DACL_DAT_INV */
2383#define WM8994_AIF1DACL_DAT_INV_WIDTH 1 /* AIF1DACL_DAT_INV */
2384#define WM8994_AIF1DACR_DAT_INV 0x0001 /* AIF1DACR_DAT_INV */
2385#define WM8994_AIF1DACR_DAT_INV_MASK 0x0001 /* AIF1DACR_DAT_INV */
2386#define WM8994_AIF1DACR_DAT_INV_SHIFT 0 /* AIF1DACR_DAT_INV */
2387#define WM8994_AIF1DACR_DAT_INV_WIDTH 1 /* AIF1DACR_DAT_INV */
2388
2389/*
2390 * R775 (0x307) - AIF1ADC Data
2391 */
2392#define WM8994_AIF1ADCL_DAT_INV 0x0002 /* AIF1ADCL_DAT_INV */
2393#define WM8994_AIF1ADCL_DAT_INV_MASK 0x0002 /* AIF1ADCL_DAT_INV */
2394#define WM8994_AIF1ADCL_DAT_INV_SHIFT 1 /* AIF1ADCL_DAT_INV */
2395#define WM8994_AIF1ADCL_DAT_INV_WIDTH 1 /* AIF1ADCL_DAT_INV */
2396#define WM8994_AIF1ADCR_DAT_INV 0x0001 /* AIF1ADCR_DAT_INV */
2397#define WM8994_AIF1ADCR_DAT_INV_MASK 0x0001 /* AIF1ADCR_DAT_INV */
2398#define WM8994_AIF1ADCR_DAT_INV_SHIFT 0 /* AIF1ADCR_DAT_INV */
2399#define WM8994_AIF1ADCR_DAT_INV_WIDTH 1 /* AIF1ADCR_DAT_INV */
2400
2401/*
2402 * R784 (0x310) - AIF2 Control (1)
2403 */
2404#define WM8994_AIF2ADCL_SRC 0x8000 /* AIF2ADCL_SRC */
2405#define WM8994_AIF2ADCL_SRC_MASK 0x8000 /* AIF2ADCL_SRC */
2406#define WM8994_AIF2ADCL_SRC_SHIFT 15 /* AIF2ADCL_SRC */
2407#define WM8994_AIF2ADCL_SRC_WIDTH 1 /* AIF2ADCL_SRC */
2408#define WM8994_AIF2ADCR_SRC 0x4000 /* AIF2ADCR_SRC */
2409#define WM8994_AIF2ADCR_SRC_MASK 0x4000 /* AIF2ADCR_SRC */
2410#define WM8994_AIF2ADCR_SRC_SHIFT 14 /* AIF2ADCR_SRC */
2411#define WM8994_AIF2ADCR_SRC_WIDTH 1 /* AIF2ADCR_SRC */
2412#define WM8994_AIF2ADC_TDM 0x2000 /* AIF2ADC_TDM */
2413#define WM8994_AIF2ADC_TDM_MASK 0x2000 /* AIF2ADC_TDM */
2414#define WM8994_AIF2ADC_TDM_SHIFT 13 /* AIF2ADC_TDM */
2415#define WM8994_AIF2ADC_TDM_WIDTH 1 /* AIF2ADC_TDM */
2416#define WM8994_AIF2ADC_TDM_CHAN 0x1000 /* AIF2ADC_TDM_CHAN */
2417#define WM8994_AIF2ADC_TDM_CHAN_MASK 0x1000 /* AIF2ADC_TDM_CHAN */
2418#define WM8994_AIF2ADC_TDM_CHAN_SHIFT 12 /* AIF2ADC_TDM_CHAN */
2419#define WM8994_AIF2ADC_TDM_CHAN_WIDTH 1 /* AIF2ADC_TDM_CHAN */
2420#define WM8994_AIF2_BCLK_INV 0x0100 /* AIF2_BCLK_INV */
2421#define WM8994_AIF2_BCLK_INV_MASK 0x0100 /* AIF2_BCLK_INV */
2422#define WM8994_AIF2_BCLK_INV_SHIFT 8 /* AIF2_BCLK_INV */
2423#define WM8994_AIF2_BCLK_INV_WIDTH 1 /* AIF2_BCLK_INV */
2424#define WM8994_AIF2_LRCLK_INV 0x0080 /* AIF2_LRCLK_INV */
2425#define WM8994_AIF2_LRCLK_INV_MASK 0x0080 /* AIF2_LRCLK_INV */
2426#define WM8994_AIF2_LRCLK_INV_SHIFT 7 /* AIF2_LRCLK_INV */
2427#define WM8994_AIF2_LRCLK_INV_WIDTH 1 /* AIF2_LRCLK_INV */
2428#define WM8994_AIF2_WL_MASK 0x0060 /* AIF2_WL - [6:5] */
2429#define WM8994_AIF2_WL_SHIFT 5 /* AIF2_WL - [6:5] */
2430#define WM8994_AIF2_WL_WIDTH 2 /* AIF2_WL - [6:5] */
2431#define WM8994_AIF2_FMT_MASK 0x0018 /* AIF2_FMT - [4:3] */
2432#define WM8994_AIF2_FMT_SHIFT 3 /* AIF2_FMT - [4:3] */
2433#define WM8994_AIF2_FMT_WIDTH 2 /* AIF2_FMT - [4:3] */
2434
2435/*
2436 * R785 (0x311) - AIF2 Control (2)
2437 */
2438#define WM8994_AIF2DACL_SRC 0x8000 /* AIF2DACL_SRC */
2439#define WM8994_AIF2DACL_SRC_MASK 0x8000 /* AIF2DACL_SRC */
2440#define WM8994_AIF2DACL_SRC_SHIFT 15 /* AIF2DACL_SRC */
2441#define WM8994_AIF2DACL_SRC_WIDTH 1 /* AIF2DACL_SRC */
2442#define WM8994_AIF2DACR_SRC 0x4000 /* AIF2DACR_SRC */
2443#define WM8994_AIF2DACR_SRC_MASK 0x4000 /* AIF2DACR_SRC */
2444#define WM8994_AIF2DACR_SRC_SHIFT 14 /* AIF2DACR_SRC */
2445#define WM8994_AIF2DACR_SRC_WIDTH 1 /* AIF2DACR_SRC */
2446#define WM8994_AIF2DAC_TDM 0x2000 /* AIF2DAC_TDM */
2447#define WM8994_AIF2DAC_TDM_MASK 0x2000 /* AIF2DAC_TDM */
2448#define WM8994_AIF2DAC_TDM_SHIFT 13 /* AIF2DAC_TDM */
2449#define WM8994_AIF2DAC_TDM_WIDTH 1 /* AIF2DAC_TDM */
2450#define WM8994_AIF2DAC_TDM_CHAN 0x1000 /* AIF2DAC_TDM_CHAN */
2451#define WM8994_AIF2DAC_TDM_CHAN_MASK 0x1000 /* AIF2DAC_TDM_CHAN */
2452#define WM8994_AIF2DAC_TDM_CHAN_SHIFT 12 /* AIF2DAC_TDM_CHAN */
2453#define WM8994_AIF2DAC_TDM_CHAN_WIDTH 1 /* AIF2DAC_TDM_CHAN */
2454#define WM8994_AIF2DAC_BOOST_MASK 0x0C00 /* AIF2DAC_BOOST - [11:10] */
2455#define WM8994_AIF2DAC_BOOST_SHIFT 10 /* AIF2DAC_BOOST - [11:10] */
2456#define WM8994_AIF2DAC_BOOST_WIDTH 2 /* AIF2DAC_BOOST - [11:10] */
2457#define WM8994_AIF2_MONO 0x0100 /* AIF2_MONO */
2458#define WM8994_AIF2_MONO_MASK 0x0100 /* AIF2_MONO */
2459#define WM8994_AIF2_MONO_SHIFT 8 /* AIF2_MONO */
2460#define WM8994_AIF2_MONO_WIDTH 1 /* AIF2_MONO */
2461#define WM8994_AIF2DAC_COMP 0x0010 /* AIF2DAC_COMP */
2462#define WM8994_AIF2DAC_COMP_MASK 0x0010 /* AIF2DAC_COMP */
2463#define WM8994_AIF2DAC_COMP_SHIFT 4 /* AIF2DAC_COMP */
2464#define WM8994_AIF2DAC_COMP_WIDTH 1 /* AIF2DAC_COMP */
2465#define WM8994_AIF2DAC_COMPMODE 0x0008 /* AIF2DAC_COMPMODE */
2466#define WM8994_AIF2DAC_COMPMODE_MASK 0x0008 /* AIF2DAC_COMPMODE */
2467#define WM8994_AIF2DAC_COMPMODE_SHIFT 3 /* AIF2DAC_COMPMODE */
2468#define WM8994_AIF2DAC_COMPMODE_WIDTH 1 /* AIF2DAC_COMPMODE */
2469#define WM8994_AIF2ADC_COMP 0x0004 /* AIF2ADC_COMP */
2470#define WM8994_AIF2ADC_COMP_MASK 0x0004 /* AIF2ADC_COMP */
2471#define WM8994_AIF2ADC_COMP_SHIFT 2 /* AIF2ADC_COMP */
2472#define WM8994_AIF2ADC_COMP_WIDTH 1 /* AIF2ADC_COMP */
2473#define WM8994_AIF2ADC_COMPMODE 0x0002 /* AIF2ADC_COMPMODE */
2474#define WM8994_AIF2ADC_COMPMODE_MASK 0x0002 /* AIF2ADC_COMPMODE */
2475#define WM8994_AIF2ADC_COMPMODE_SHIFT 1 /* AIF2ADC_COMPMODE */
2476#define WM8994_AIF2ADC_COMPMODE_WIDTH 1 /* AIF2ADC_COMPMODE */
2477#define WM8994_AIF2_LOOPBACK 0x0001 /* AIF2_LOOPBACK */
2478#define WM8994_AIF2_LOOPBACK_MASK 0x0001 /* AIF2_LOOPBACK */
2479#define WM8994_AIF2_LOOPBACK_SHIFT 0 /* AIF2_LOOPBACK */
2480#define WM8994_AIF2_LOOPBACK_WIDTH 1 /* AIF2_LOOPBACK */
2481
2482/*
2483 * R786 (0x312) - AIF2 Master/Slave
2484 */
2485#define WM8994_AIF2_TRI 0x8000 /* AIF2_TRI */
2486#define WM8994_AIF2_TRI_MASK 0x8000 /* AIF2_TRI */
2487#define WM8994_AIF2_TRI_SHIFT 15 /* AIF2_TRI */
2488#define WM8994_AIF2_TRI_WIDTH 1 /* AIF2_TRI */
2489#define WM8994_AIF2_MSTR 0x4000 /* AIF2_MSTR */
2490#define WM8994_AIF2_MSTR_MASK 0x4000 /* AIF2_MSTR */
2491#define WM8994_AIF2_MSTR_SHIFT 14 /* AIF2_MSTR */
2492#define WM8994_AIF2_MSTR_WIDTH 1 /* AIF2_MSTR */
2493#define WM8994_AIF2_CLK_FRC 0x2000 /* AIF2_CLK_FRC */
2494#define WM8994_AIF2_CLK_FRC_MASK 0x2000 /* AIF2_CLK_FRC */
2495#define WM8994_AIF2_CLK_FRC_SHIFT 13 /* AIF2_CLK_FRC */
2496#define WM8994_AIF2_CLK_FRC_WIDTH 1 /* AIF2_CLK_FRC */
2497#define WM8994_AIF2_LRCLK_FRC 0x1000 /* AIF2_LRCLK_FRC */
2498#define WM8994_AIF2_LRCLK_FRC_MASK 0x1000 /* AIF2_LRCLK_FRC */
2499#define WM8994_AIF2_LRCLK_FRC_SHIFT 12 /* AIF2_LRCLK_FRC */
2500#define WM8994_AIF2_LRCLK_FRC_WIDTH 1 /* AIF2_LRCLK_FRC */
2501
2502/*
2503 * R787 (0x313) - AIF2 BCLK
2504 */
2505#define WM8994_AIF2_BCLK_DIV_MASK 0x01F0 /* AIF2_BCLK_DIV - [8:4] */
2506#define WM8994_AIF2_BCLK_DIV_SHIFT 4 /* AIF2_BCLK_DIV - [8:4] */
2507#define WM8994_AIF2_BCLK_DIV_WIDTH 5 /* AIF2_BCLK_DIV - [8:4] */
2508
2509/*
2510 * R788 (0x314) - AIF2ADC LRCLK
2511 */
2512#define WM8994_AIF2ADC_LRCLK_DIR 0x0800 /* AIF2ADC_LRCLK_DIR */
2513#define WM8994_AIF2ADC_LRCLK_DIR_MASK 0x0800 /* AIF2ADC_LRCLK_DIR */
2514#define WM8994_AIF2ADC_LRCLK_DIR_SHIFT 11 /* AIF2ADC_LRCLK_DIR */
2515#define WM8994_AIF2ADC_LRCLK_DIR_WIDTH 1 /* AIF2ADC_LRCLK_DIR */
2516#define WM8994_AIF2ADC_RATE_MASK 0x07FF /* AIF2ADC_RATE - [10:0] */
2517#define WM8994_AIF2ADC_RATE_SHIFT 0 /* AIF2ADC_RATE - [10:0] */
2518#define WM8994_AIF2ADC_RATE_WIDTH 11 /* AIF2ADC_RATE - [10:0] */
2519
2520/*
2521 * R789 (0x315) - AIF2DAC LRCLK
2522 */
2523#define WM8994_AIF2DAC_LRCLK_DIR 0x0800 /* AIF2DAC_LRCLK_DIR */
2524#define WM8994_AIF2DAC_LRCLK_DIR_MASK 0x0800 /* AIF2DAC_LRCLK_DIR */
2525#define WM8994_AIF2DAC_LRCLK_DIR_SHIFT 11 /* AIF2DAC_LRCLK_DIR */
2526#define WM8994_AIF2DAC_LRCLK_DIR_WIDTH 1 /* AIF2DAC_LRCLK_DIR */
2527#define WM8994_AIF2DAC_RATE_MASK 0x07FF /* AIF2DAC_RATE - [10:0] */
2528#define WM8994_AIF2DAC_RATE_SHIFT 0 /* AIF2DAC_RATE - [10:0] */
2529#define WM8994_AIF2DAC_RATE_WIDTH 11 /* AIF2DAC_RATE - [10:0] */
2530
2531/*
2532 * R790 (0x316) - AIF2DAC Data
2533 */
2534#define WM8994_AIF2DACL_DAT_INV 0x0002 /* AIF2DACL_DAT_INV */
2535#define WM8994_AIF2DACL_DAT_INV_MASK 0x0002 /* AIF2DACL_DAT_INV */
2536#define WM8994_AIF2DACL_DAT_INV_SHIFT 1 /* AIF2DACL_DAT_INV */
2537#define WM8994_AIF2DACL_DAT_INV_WIDTH 1 /* AIF2DACL_DAT_INV */
2538#define WM8994_AIF2DACR_DAT_INV 0x0001 /* AIF2DACR_DAT_INV */
2539#define WM8994_AIF2DACR_DAT_INV_MASK 0x0001 /* AIF2DACR_DAT_INV */
2540#define WM8994_AIF2DACR_DAT_INV_SHIFT 0 /* AIF2DACR_DAT_INV */
2541#define WM8994_AIF2DACR_DAT_INV_WIDTH 1 /* AIF2DACR_DAT_INV */
2542
2543/*
2544 * R791 (0x317) - AIF2ADC Data
2545 */
2546#define WM8994_AIF2ADCL_DAT_INV 0x0002 /* AIF2ADCL_DAT_INV */
2547#define WM8994_AIF2ADCL_DAT_INV_MASK 0x0002 /* AIF2ADCL_DAT_INV */
2548#define WM8994_AIF2ADCL_DAT_INV_SHIFT 1 /* AIF2ADCL_DAT_INV */
2549#define WM8994_AIF2ADCL_DAT_INV_WIDTH 1 /* AIF2ADCL_DAT_INV */
2550#define WM8994_AIF2ADCR_DAT_INV 0x0001 /* AIF2ADCR_DAT_INV */
2551#define WM8994_AIF2ADCR_DAT_INV_MASK 0x0001 /* AIF2ADCR_DAT_INV */
2552#define WM8994_AIF2ADCR_DAT_INV_SHIFT 0 /* AIF2ADCR_DAT_INV */
2553#define WM8994_AIF2ADCR_DAT_INV_WIDTH 1 /* AIF2ADCR_DAT_INV */
2554
2555/*
2556 * R1024 (0x400) - AIF1 ADC1 Left Volume
2557 */
2558#define WM8994_AIF1ADC1_VU 0x0100 /* AIF1ADC1_VU */
2559#define WM8994_AIF1ADC1_VU_MASK 0x0100 /* AIF1ADC1_VU */
2560#define WM8994_AIF1ADC1_VU_SHIFT 8 /* AIF1ADC1_VU */
2561#define WM8994_AIF1ADC1_VU_WIDTH 1 /* AIF1ADC1_VU */
2562#define WM8994_AIF1ADC1L_VOL_MASK 0x00FF /* AIF1ADC1L_VOL - [7:0] */
2563#define WM8994_AIF1ADC1L_VOL_SHIFT 0 /* AIF1ADC1L_VOL - [7:0] */
2564#define WM8994_AIF1ADC1L_VOL_WIDTH 8 /* AIF1ADC1L_VOL - [7:0] */
2565
2566/*
2567 * R1025 (0x401) - AIF1 ADC1 Right Volume
2568 */
2569#define WM8994_AIF1ADC1_VU 0x0100 /* AIF1ADC1_VU */
2570#define WM8994_AIF1ADC1_VU_MASK 0x0100 /* AIF1ADC1_VU */
2571#define WM8994_AIF1ADC1_VU_SHIFT 8 /* AIF1ADC1_VU */
2572#define WM8994_AIF1ADC1_VU_WIDTH 1 /* AIF1ADC1_VU */
2573#define WM8994_AIF1ADC1R_VOL_MASK 0x00FF /* AIF1ADC1R_VOL - [7:0] */
2574#define WM8994_AIF1ADC1R_VOL_SHIFT 0 /* AIF1ADC1R_VOL - [7:0] */
2575#define WM8994_AIF1ADC1R_VOL_WIDTH 8 /* AIF1ADC1R_VOL - [7:0] */
2576
2577/*
2578 * R1026 (0x402) - AIF1 DAC1 Left Volume
2579 */
2580#define WM8994_AIF1DAC1_VU 0x0100 /* AIF1DAC1_VU */
2581#define WM8994_AIF1DAC1_VU_MASK 0x0100 /* AIF1DAC1_VU */
2582#define WM8994_AIF1DAC1_VU_SHIFT 8 /* AIF1DAC1_VU */
2583#define WM8994_AIF1DAC1_VU_WIDTH 1 /* AIF1DAC1_VU */
2584#define WM8994_AIF1DAC1L_VOL_MASK 0x00FF /* AIF1DAC1L_VOL - [7:0] */
2585#define WM8994_AIF1DAC1L_VOL_SHIFT 0 /* AIF1DAC1L_VOL - [7:0] */
2586#define WM8994_AIF1DAC1L_VOL_WIDTH 8 /* AIF1DAC1L_VOL - [7:0] */
2587
2588/*
2589 * R1027 (0x403) - AIF1 DAC1 Right Volume
2590 */
2591#define WM8994_AIF1DAC1_VU 0x0100 /* AIF1DAC1_VU */
2592#define WM8994_AIF1DAC1_VU_MASK 0x0100 /* AIF1DAC1_VU */
2593#define WM8994_AIF1DAC1_VU_SHIFT 8 /* AIF1DAC1_VU */
2594#define WM8994_AIF1DAC1_VU_WIDTH 1 /* AIF1DAC1_VU */
2595#define WM8994_AIF1DAC1R_VOL_MASK 0x00FF /* AIF1DAC1R_VOL - [7:0] */
2596#define WM8994_AIF1DAC1R_VOL_SHIFT 0 /* AIF1DAC1R_VOL - [7:0] */
2597#define WM8994_AIF1DAC1R_VOL_WIDTH 8 /* AIF1DAC1R_VOL - [7:0] */
2598
2599/*
2600 * R1028 (0x404) - AIF1 ADC2 Left Volume
2601 */
2602#define WM8994_AIF1ADC2_VU 0x0100 /* AIF1ADC2_VU */
2603#define WM8994_AIF1ADC2_VU_MASK 0x0100 /* AIF1ADC2_VU */
2604#define WM8994_AIF1ADC2_VU_SHIFT 8 /* AIF1ADC2_VU */
2605#define WM8994_AIF1ADC2_VU_WIDTH 1 /* AIF1ADC2_VU */
2606#define WM8994_AIF1ADC2L_VOL_MASK 0x00FF /* AIF1ADC2L_VOL - [7:0] */
2607#define WM8994_AIF1ADC2L_VOL_SHIFT 0 /* AIF1ADC2L_VOL - [7:0] */
2608#define WM8994_AIF1ADC2L_VOL_WIDTH 8 /* AIF1ADC2L_VOL - [7:0] */
2609
2610/*
2611 * R1029 (0x405) - AIF1 ADC2 Right Volume
2612 */
2613#define WM8994_AIF1ADC2_VU 0x0100 /* AIF1ADC2_VU */
2614#define WM8994_AIF1ADC2_VU_MASK 0x0100 /* AIF1ADC2_VU */
2615#define WM8994_AIF1ADC2_VU_SHIFT 8 /* AIF1ADC2_VU */
2616#define WM8994_AIF1ADC2_VU_WIDTH 1 /* AIF1ADC2_VU */
2617#define WM8994_AIF1ADC2R_VOL_MASK 0x00FF /* AIF1ADC2R_VOL - [7:0] */
2618#define WM8994_AIF1ADC2R_VOL_SHIFT 0 /* AIF1ADC2R_VOL - [7:0] */
2619#define WM8994_AIF1ADC2R_VOL_WIDTH 8 /* AIF1ADC2R_VOL - [7:0] */
2620
2621/*
2622 * R1030 (0x406) - AIF1 DAC2 Left Volume
2623 */
2624#define WM8994_AIF1DAC2_VU 0x0100 /* AIF1DAC2_VU */
2625#define WM8994_AIF1DAC2_VU_MASK 0x0100 /* AIF1DAC2_VU */
2626#define WM8994_AIF1DAC2_VU_SHIFT 8 /* AIF1DAC2_VU */
2627#define WM8994_AIF1DAC2_VU_WIDTH 1 /* AIF1DAC2_VU */
2628#define WM8994_AIF1DAC2L_VOL_MASK 0x00FF /* AIF1DAC2L_VOL - [7:0] */
2629#define WM8994_AIF1DAC2L_VOL_SHIFT 0 /* AIF1DAC2L_VOL - [7:0] */
2630#define WM8994_AIF1DAC2L_VOL_WIDTH 8 /* AIF1DAC2L_VOL - [7:0] */
2631
2632/*
2633 * R1031 (0x407) - AIF1 DAC2 Right Volume
2634 */
2635#define WM8994_AIF1DAC2_VU 0x0100 /* AIF1DAC2_VU */
2636#define WM8994_AIF1DAC2_VU_MASK 0x0100 /* AIF1DAC2_VU */
2637#define WM8994_AIF1DAC2_VU_SHIFT 8 /* AIF1DAC2_VU */
2638#define WM8994_AIF1DAC2_VU_WIDTH 1 /* AIF1DAC2_VU */
2639#define WM8994_AIF1DAC2R_VOL_MASK 0x00FF /* AIF1DAC2R_VOL - [7:0] */
2640#define WM8994_AIF1DAC2R_VOL_SHIFT 0 /* AIF1DAC2R_VOL - [7:0] */
2641#define WM8994_AIF1DAC2R_VOL_WIDTH 8 /* AIF1DAC2R_VOL - [7:0] */
2642
2643/*
2644 * R1040 (0x410) - AIF1 ADC1 Filters
2645 */
2646#define WM8994_AIF1ADC_4FS 0x8000 /* AIF1ADC_4FS */
2647#define WM8994_AIF1ADC_4FS_MASK 0x8000 /* AIF1ADC_4FS */
2648#define WM8994_AIF1ADC_4FS_SHIFT 15 /* AIF1ADC_4FS */
2649#define WM8994_AIF1ADC_4FS_WIDTH 1 /* AIF1ADC_4FS */
2650#define WM8994_AIF1ADC1_HPF_CUT_MASK 0x6000 /* AIF1ADC1_HPF_CUT - [14:13] */
2651#define WM8994_AIF1ADC1_HPF_CUT_SHIFT 13 /* AIF1ADC1_HPF_CUT - [14:13] */
2652#define WM8994_AIF1ADC1_HPF_CUT_WIDTH 2 /* AIF1ADC1_HPF_CUT - [14:13] */
2653#define WM8994_AIF1ADC1L_HPF 0x1000 /* AIF1ADC1L_HPF */
2654#define WM8994_AIF1ADC1L_HPF_MASK 0x1000 /* AIF1ADC1L_HPF */
2655#define WM8994_AIF1ADC1L_HPF_SHIFT 12 /* AIF1ADC1L_HPF */
2656#define WM8994_AIF1ADC1L_HPF_WIDTH 1 /* AIF1ADC1L_HPF */
2657#define WM8994_AIF1ADC1R_HPF 0x0800 /* AIF1ADC1R_HPF */
2658#define WM8994_AIF1ADC1R_HPF_MASK 0x0800 /* AIF1ADC1R_HPF */
2659#define WM8994_AIF1ADC1R_HPF_SHIFT 11 /* AIF1ADC1R_HPF */
2660#define WM8994_AIF1ADC1R_HPF_WIDTH 1 /* AIF1ADC1R_HPF */
2661
2662/*
2663 * R1041 (0x411) - AIF1 ADC2 Filters
2664 */
2665#define WM8994_AIF1ADC2_HPF_CUT_MASK 0x6000 /* AIF1ADC2_HPF_CUT - [14:13] */
2666#define WM8994_AIF1ADC2_HPF_CUT_SHIFT 13 /* AIF1ADC2_HPF_CUT - [14:13] */
2667#define WM8994_AIF1ADC2_HPF_CUT_WIDTH 2 /* AIF1ADC2_HPF_CUT - [14:13] */
2668#define WM8994_AIF1ADC2L_HPF 0x1000 /* AIF1ADC2L_HPF */
2669#define WM8994_AIF1ADC2L_HPF_MASK 0x1000 /* AIF1ADC2L_HPF */
2670#define WM8994_AIF1ADC2L_HPF_SHIFT 12 /* AIF1ADC2L_HPF */
2671#define WM8994_AIF1ADC2L_HPF_WIDTH 1 /* AIF1ADC2L_HPF */
2672#define WM8994_AIF1ADC2R_HPF 0x0800 /* AIF1ADC2R_HPF */
2673#define WM8994_AIF1ADC2R_HPF_MASK 0x0800 /* AIF1ADC2R_HPF */
2674#define WM8994_AIF1ADC2R_HPF_SHIFT 11 /* AIF1ADC2R_HPF */
2675#define WM8994_AIF1ADC2R_HPF_WIDTH 1 /* AIF1ADC2R_HPF */
2676
2677/*
2678 * R1056 (0x420) - AIF1 DAC1 Filters (1)
2679 */
2680#define WM8994_AIF1DAC1_MUTE 0x0200 /* AIF1DAC1_MUTE */
2681#define WM8994_AIF1DAC1_MUTE_MASK 0x0200 /* AIF1DAC1_MUTE */
2682#define WM8994_AIF1DAC1_MUTE_SHIFT 9 /* AIF1DAC1_MUTE */
2683#define WM8994_AIF1DAC1_MUTE_WIDTH 1 /* AIF1DAC1_MUTE */
2684#define WM8994_AIF1DAC1_MONO 0x0080 /* AIF1DAC1_MONO */
2685#define WM8994_AIF1DAC1_MONO_MASK 0x0080 /* AIF1DAC1_MONO */
2686#define WM8994_AIF1DAC1_MONO_SHIFT 7 /* AIF1DAC1_MONO */
2687#define WM8994_AIF1DAC1_MONO_WIDTH 1 /* AIF1DAC1_MONO */
2688#define WM8994_AIF1DAC1_MUTERATE 0x0020 /* AIF1DAC1_MUTERATE */
2689#define WM8994_AIF1DAC1_MUTERATE_MASK 0x0020 /* AIF1DAC1_MUTERATE */
2690#define WM8994_AIF1DAC1_MUTERATE_SHIFT 5 /* AIF1DAC1_MUTERATE */
2691#define WM8994_AIF1DAC1_MUTERATE_WIDTH 1 /* AIF1DAC1_MUTERATE */
2692#define WM8994_AIF1DAC1_UNMUTE_RAMP 0x0010 /* AIF1DAC1_UNMUTE_RAMP */
2693#define WM8994_AIF1DAC1_UNMUTE_RAMP_MASK 0x0010 /* AIF1DAC1_UNMUTE_RAMP */
2694#define WM8994_AIF1DAC1_UNMUTE_RAMP_SHIFT 4 /* AIF1DAC1_UNMUTE_RAMP */
2695#define WM8994_AIF1DAC1_UNMUTE_RAMP_WIDTH 1 /* AIF1DAC1_UNMUTE_RAMP */
2696#define WM8994_AIF1DAC1_DEEMP_MASK 0x0006 /* AIF1DAC1_DEEMP - [2:1] */
2697#define WM8994_AIF1DAC1_DEEMP_SHIFT 1 /* AIF1DAC1_DEEMP - [2:1] */
2698#define WM8994_AIF1DAC1_DEEMP_WIDTH 2 /* AIF1DAC1_DEEMP - [2:1] */
2699
2700/*
2701 * R1057 (0x421) - AIF1 DAC1 Filters (2)
2702 */
2703#define WM8994_AIF1DAC1_3D_GAIN_MASK 0x3E00 /* AIF1DAC1_3D_GAIN - [13:9] */
2704#define WM8994_AIF1DAC1_3D_GAIN_SHIFT 9 /* AIF1DAC1_3D_GAIN - [13:9] */
2705#define WM8994_AIF1DAC1_3D_GAIN_WIDTH 5 /* AIF1DAC1_3D_GAIN - [13:9] */
2706#define WM8994_AIF1DAC1_3D_ENA 0x0100 /* AIF1DAC1_3D_ENA */
2707#define WM8994_AIF1DAC1_3D_ENA_MASK 0x0100 /* AIF1DAC1_3D_ENA */
2708#define WM8994_AIF1DAC1_3D_ENA_SHIFT 8 /* AIF1DAC1_3D_ENA */
2709#define WM8994_AIF1DAC1_3D_ENA_WIDTH 1 /* AIF1DAC1_3D_ENA */
2710
2711/*
2712 * R1058 (0x422) - AIF1 DAC2 Filters (1)
2713 */
2714#define WM8994_AIF1DAC2_MUTE 0x0200 /* AIF1DAC2_MUTE */
2715#define WM8994_AIF1DAC2_MUTE_MASK 0x0200 /* AIF1DAC2_MUTE */
2716#define WM8994_AIF1DAC2_MUTE_SHIFT 9 /* AIF1DAC2_MUTE */
2717#define WM8994_AIF1DAC2_MUTE_WIDTH 1 /* AIF1DAC2_MUTE */
2718#define WM8994_AIF1DAC2_MONO 0x0080 /* AIF1DAC2_MONO */
2719#define WM8994_AIF1DAC2_MONO_MASK 0x0080 /* AIF1DAC2_MONO */
2720#define WM8994_AIF1DAC2_MONO_SHIFT 7 /* AIF1DAC2_MONO */
2721#define WM8994_AIF1DAC2_MONO_WIDTH 1 /* AIF1DAC2_MONO */
2722#define WM8994_AIF1DAC2_MUTERATE 0x0020 /* AIF1DAC2_MUTERATE */
2723#define WM8994_AIF1DAC2_MUTERATE_MASK 0x0020 /* AIF1DAC2_MUTERATE */
2724#define WM8994_AIF1DAC2_MUTERATE_SHIFT 5 /* AIF1DAC2_MUTERATE */
2725#define WM8994_AIF1DAC2_MUTERATE_WIDTH 1 /* AIF1DAC2_MUTERATE */
2726#define WM8994_AIF1DAC2_UNMUTE_RAMP 0x0010 /* AIF1DAC2_UNMUTE_RAMP */
2727#define WM8994_AIF1DAC2_UNMUTE_RAMP_MASK 0x0010 /* AIF1DAC2_UNMUTE_RAMP */
2728#define WM8994_AIF1DAC2_UNMUTE_RAMP_SHIFT 4 /* AIF1DAC2_UNMUTE_RAMP */
2729#define WM8994_AIF1DAC2_UNMUTE_RAMP_WIDTH 1 /* AIF1DAC2_UNMUTE_RAMP */
2730#define WM8994_AIF1DAC2_DEEMP_MASK 0x0006 /* AIF1DAC2_DEEMP - [2:1] */
2731#define WM8994_AIF1DAC2_DEEMP_SHIFT 1 /* AIF1DAC2_DEEMP - [2:1] */
2732#define WM8994_AIF1DAC2_DEEMP_WIDTH 2 /* AIF1DAC2_DEEMP - [2:1] */
2733
2734/*
2735 * R1059 (0x423) - AIF1 DAC2 Filters (2)
2736 */
2737#define WM8994_AIF1DAC2_3D_GAIN_MASK 0x3E00 /* AIF1DAC2_3D_GAIN - [13:9] */
2738#define WM8994_AIF1DAC2_3D_GAIN_SHIFT 9 /* AIF1DAC2_3D_GAIN - [13:9] */
2739#define WM8994_AIF1DAC2_3D_GAIN_WIDTH 5 /* AIF1DAC2_3D_GAIN - [13:9] */
2740#define WM8994_AIF1DAC2_3D_ENA 0x0100 /* AIF1DAC2_3D_ENA */
2741#define WM8994_AIF1DAC2_3D_ENA_MASK 0x0100 /* AIF1DAC2_3D_ENA */
2742#define WM8994_AIF1DAC2_3D_ENA_SHIFT 8 /* AIF1DAC2_3D_ENA */
2743#define WM8994_AIF1DAC2_3D_ENA_WIDTH 1 /* AIF1DAC2_3D_ENA */
2744
2745/*
2746 * R1088 (0x440) - AIF1 DRC1 (1)
2747 */
2748#define WM8994_AIF1DRC1_SIG_DET_RMS_MASK 0xF800 /* AIF1DRC1_SIG_DET_RMS - [15:11] */
2749#define WM8994_AIF1DRC1_SIG_DET_RMS_SHIFT 11 /* AIF1DRC1_SIG_DET_RMS - [15:11] */
2750#define WM8994_AIF1DRC1_SIG_DET_RMS_WIDTH 5 /* AIF1DRC1_SIG_DET_RMS - [15:11] */
2751#define WM8994_AIF1DRC1_SIG_DET_PK_MASK 0x0600 /* AIF1DRC1_SIG_DET_PK - [10:9] */
2752#define WM8994_AIF1DRC1_SIG_DET_PK_SHIFT 9 /* AIF1DRC1_SIG_DET_PK - [10:9] */
2753#define WM8994_AIF1DRC1_SIG_DET_PK_WIDTH 2 /* AIF1DRC1_SIG_DET_PK - [10:9] */
2754#define WM8994_AIF1DRC1_NG_ENA 0x0100 /* AIF1DRC1_NG_ENA */
2755#define WM8994_AIF1DRC1_NG_ENA_MASK 0x0100 /* AIF1DRC1_NG_ENA */
2756#define WM8994_AIF1DRC1_NG_ENA_SHIFT 8 /* AIF1DRC1_NG_ENA */
2757#define WM8994_AIF1DRC1_NG_ENA_WIDTH 1 /* AIF1DRC1_NG_ENA */
2758#define WM8994_AIF1DRC1_SIG_DET_MODE 0x0080 /* AIF1DRC1_SIG_DET_MODE */
2759#define WM8994_AIF1DRC1_SIG_DET_MODE_MASK 0x0080 /* AIF1DRC1_SIG_DET_MODE */
2760#define WM8994_AIF1DRC1_SIG_DET_MODE_SHIFT 7 /* AIF1DRC1_SIG_DET_MODE */
2761#define WM8994_AIF1DRC1_SIG_DET_MODE_WIDTH 1 /* AIF1DRC1_SIG_DET_MODE */
2762#define WM8994_AIF1DRC1_SIG_DET 0x0040 /* AIF1DRC1_SIG_DET */
2763#define WM8994_AIF1DRC1_SIG_DET_MASK 0x0040 /* AIF1DRC1_SIG_DET */
2764#define WM8994_AIF1DRC1_SIG_DET_SHIFT 6 /* AIF1DRC1_SIG_DET */
2765#define WM8994_AIF1DRC1_SIG_DET_WIDTH 1 /* AIF1DRC1_SIG_DET */
2766#define WM8994_AIF1DRC1_KNEE2_OP_ENA 0x0020 /* AIF1DRC1_KNEE2_OP_ENA */
2767#define WM8994_AIF1DRC1_KNEE2_OP_ENA_MASK 0x0020 /* AIF1DRC1_KNEE2_OP_ENA */
2768#define WM8994_AIF1DRC1_KNEE2_OP_ENA_SHIFT 5 /* AIF1DRC1_KNEE2_OP_ENA */
2769#define WM8994_AIF1DRC1_KNEE2_OP_ENA_WIDTH 1 /* AIF1DRC1_KNEE2_OP_ENA */
2770#define WM8994_AIF1DRC1_QR 0x0010 /* AIF1DRC1_QR */
2771#define WM8994_AIF1DRC1_QR_MASK 0x0010 /* AIF1DRC1_QR */
2772#define WM8994_AIF1DRC1_QR_SHIFT 4 /* AIF1DRC1_QR */
2773#define WM8994_AIF1DRC1_QR_WIDTH 1 /* AIF1DRC1_QR */
2774#define WM8994_AIF1DRC1_ANTICLIP 0x0008 /* AIF1DRC1_ANTICLIP */
2775#define WM8994_AIF1DRC1_ANTICLIP_MASK 0x0008 /* AIF1DRC1_ANTICLIP */
2776#define WM8994_AIF1DRC1_ANTICLIP_SHIFT 3 /* AIF1DRC1_ANTICLIP */
2777#define WM8994_AIF1DRC1_ANTICLIP_WIDTH 1 /* AIF1DRC1_ANTICLIP */
2778#define WM8994_AIF1DAC1_DRC_ENA 0x0004 /* AIF1DAC1_DRC_ENA */
2779#define WM8994_AIF1DAC1_DRC_ENA_MASK 0x0004 /* AIF1DAC1_DRC_ENA */
2780#define WM8994_AIF1DAC1_DRC_ENA_SHIFT 2 /* AIF1DAC1_DRC_ENA */
2781#define WM8994_AIF1DAC1_DRC_ENA_WIDTH 1 /* AIF1DAC1_DRC_ENA */
2782#define WM8994_AIF1ADC1L_DRC_ENA 0x0002 /* AIF1ADC1L_DRC_ENA */
2783#define WM8994_AIF1ADC1L_DRC_ENA_MASK 0x0002 /* AIF1ADC1L_DRC_ENA */
2784#define WM8994_AIF1ADC1L_DRC_ENA_SHIFT 1 /* AIF1ADC1L_DRC_ENA */
2785#define WM8994_AIF1ADC1L_DRC_ENA_WIDTH 1 /* AIF1ADC1L_DRC_ENA */
2786#define WM8994_AIF1ADC1R_DRC_ENA 0x0001 /* AIF1ADC1R_DRC_ENA */
2787#define WM8994_AIF1ADC1R_DRC_ENA_MASK 0x0001 /* AIF1ADC1R_DRC_ENA */
2788#define WM8994_AIF1ADC1R_DRC_ENA_SHIFT 0 /* AIF1ADC1R_DRC_ENA */
2789#define WM8994_AIF1ADC1R_DRC_ENA_WIDTH 1 /* AIF1ADC1R_DRC_ENA */
2790
2791/*
2792 * R1089 (0x441) - AIF1 DRC1 (2)
2793 */
2794#define WM8994_AIF1DRC1_ATK_MASK 0x1E00 /* AIF1DRC1_ATK - [12:9] */
2795#define WM8994_AIF1DRC1_ATK_SHIFT 9 /* AIF1DRC1_ATK - [12:9] */
2796#define WM8994_AIF1DRC1_ATK_WIDTH 4 /* AIF1DRC1_ATK - [12:9] */
2797#define WM8994_AIF1DRC1_DCY_MASK 0x01E0 /* AIF1DRC1_DCY - [8:5] */
2798#define WM8994_AIF1DRC1_DCY_SHIFT 5 /* AIF1DRC1_DCY - [8:5] */
2799#define WM8994_AIF1DRC1_DCY_WIDTH 4 /* AIF1DRC1_DCY - [8:5] */
2800#define WM8994_AIF1DRC1_MINGAIN_MASK 0x001C /* AIF1DRC1_MINGAIN - [4:2] */
2801#define WM8994_AIF1DRC1_MINGAIN_SHIFT 2 /* AIF1DRC1_MINGAIN - [4:2] */
2802#define WM8994_AIF1DRC1_MINGAIN_WIDTH 3 /* AIF1DRC1_MINGAIN - [4:2] */
2803#define WM8994_AIF1DRC1_MAXGAIN_MASK 0x0003 /* AIF1DRC1_MAXGAIN - [1:0] */
2804#define WM8994_AIF1DRC1_MAXGAIN_SHIFT 0 /* AIF1DRC1_MAXGAIN - [1:0] */
2805#define WM8994_AIF1DRC1_MAXGAIN_WIDTH 2 /* AIF1DRC1_MAXGAIN - [1:0] */
2806
2807/*
2808 * R1090 (0x442) - AIF1 DRC1 (3)
2809 */
2810#define WM8994_AIF1DRC1_NG_MINGAIN_MASK 0xF000 /* AIF1DRC1_NG_MINGAIN - [15:12] */
2811#define WM8994_AIF1DRC1_NG_MINGAIN_SHIFT 12 /* AIF1DRC1_NG_MINGAIN - [15:12] */
2812#define WM8994_AIF1DRC1_NG_MINGAIN_WIDTH 4 /* AIF1DRC1_NG_MINGAIN - [15:12] */
2813#define WM8994_AIF1DRC1_NG_EXP_MASK 0x0C00 /* AIF1DRC1_NG_EXP - [11:10] */
2814#define WM8994_AIF1DRC1_NG_EXP_SHIFT 10 /* AIF1DRC1_NG_EXP - [11:10] */
2815#define WM8994_AIF1DRC1_NG_EXP_WIDTH 2 /* AIF1DRC1_NG_EXP - [11:10] */
2816#define WM8994_AIF1DRC1_QR_THR_MASK 0x0300 /* AIF1DRC1_QR_THR - [9:8] */
2817#define WM8994_AIF1DRC1_QR_THR_SHIFT 8 /* AIF1DRC1_QR_THR - [9:8] */
2818#define WM8994_AIF1DRC1_QR_THR_WIDTH 2 /* AIF1DRC1_QR_THR - [9:8] */
2819#define WM8994_AIF1DRC1_QR_DCY_MASK 0x00C0 /* AIF1DRC1_QR_DCY - [7:6] */
2820#define WM8994_AIF1DRC1_QR_DCY_SHIFT 6 /* AIF1DRC1_QR_DCY - [7:6] */
2821#define WM8994_AIF1DRC1_QR_DCY_WIDTH 2 /* AIF1DRC1_QR_DCY - [7:6] */
2822#define WM8994_AIF1DRC1_HI_COMP_MASK 0x0038 /* AIF1DRC1_HI_COMP - [5:3] */
2823#define WM8994_AIF1DRC1_HI_COMP_SHIFT 3 /* AIF1DRC1_HI_COMP - [5:3] */
2824#define WM8994_AIF1DRC1_HI_COMP_WIDTH 3 /* AIF1DRC1_HI_COMP - [5:3] */
2825#define WM8994_AIF1DRC1_LO_COMP_MASK 0x0007 /* AIF1DRC1_LO_COMP - [2:0] */
2826#define WM8994_AIF1DRC1_LO_COMP_SHIFT 0 /* AIF1DRC1_LO_COMP - [2:0] */
2827#define WM8994_AIF1DRC1_LO_COMP_WIDTH 3 /* AIF1DRC1_LO_COMP - [2:0] */
2828
2829/*
2830 * R1091 (0x443) - AIF1 DRC1 (4)
2831 */
2832#define WM8994_AIF1DRC1_KNEE_IP_MASK 0x07E0 /* AIF1DRC1_KNEE_IP - [10:5] */
2833#define WM8994_AIF1DRC1_KNEE_IP_SHIFT 5 /* AIF1DRC1_KNEE_IP - [10:5] */
2834#define WM8994_AIF1DRC1_KNEE_IP_WIDTH 6 /* AIF1DRC1_KNEE_IP - [10:5] */
2835#define WM8994_AIF1DRC1_KNEE_OP_MASK 0x001F /* AIF1DRC1_KNEE_OP - [4:0] */
2836#define WM8994_AIF1DRC1_KNEE_OP_SHIFT 0 /* AIF1DRC1_KNEE_OP - [4:0] */
2837#define WM8994_AIF1DRC1_KNEE_OP_WIDTH 5 /* AIF1DRC1_KNEE_OP - [4:0] */
2838
2839/*
2840 * R1092 (0x444) - AIF1 DRC1 (5)
2841 */
2842#define WM8994_AIF1DRC1_KNEE2_IP_MASK 0x03E0 /* AIF1DRC1_KNEE2_IP - [9:5] */
2843#define WM8994_AIF1DRC1_KNEE2_IP_SHIFT 5 /* AIF1DRC1_KNEE2_IP - [9:5] */
2844#define WM8994_AIF1DRC1_KNEE2_IP_WIDTH 5 /* AIF1DRC1_KNEE2_IP - [9:5] */
2845#define WM8994_AIF1DRC1_KNEE2_OP_MASK 0x001F /* AIF1DRC1_KNEE2_OP - [4:0] */
2846#define WM8994_AIF1DRC1_KNEE2_OP_SHIFT 0 /* AIF1DRC1_KNEE2_OP - [4:0] */
2847#define WM8994_AIF1DRC1_KNEE2_OP_WIDTH 5 /* AIF1DRC1_KNEE2_OP - [4:0] */
2848
2849/*
2850 * R1104 (0x450) - AIF1 DRC2 (1)
2851 */
2852#define WM8994_AIF1DRC2_SIG_DET_RMS_MASK 0xF800 /* AIF1DRC2_SIG_DET_RMS - [15:11] */
2853#define WM8994_AIF1DRC2_SIG_DET_RMS_SHIFT 11 /* AIF1DRC2_SIG_DET_RMS - [15:11] */
2854#define WM8994_AIF1DRC2_SIG_DET_RMS_WIDTH 5 /* AIF1DRC2_SIG_DET_RMS - [15:11] */
2855#define WM8994_AIF1DRC2_SIG_DET_PK_MASK 0x0600 /* AIF1DRC2_SIG_DET_PK - [10:9] */
2856#define WM8994_AIF1DRC2_SIG_DET_PK_SHIFT 9 /* AIF1DRC2_SIG_DET_PK - [10:9] */
2857#define WM8994_AIF1DRC2_SIG_DET_PK_WIDTH 2 /* AIF1DRC2_SIG_DET_PK - [10:9] */
2858#define WM8994_AIF1DRC2_NG_ENA 0x0100 /* AIF1DRC2_NG_ENA */
2859#define WM8994_AIF1DRC2_NG_ENA_MASK 0x0100 /* AIF1DRC2_NG_ENA */
2860#define WM8994_AIF1DRC2_NG_ENA_SHIFT 8 /* AIF1DRC2_NG_ENA */
2861#define WM8994_AIF1DRC2_NG_ENA_WIDTH 1 /* AIF1DRC2_NG_ENA */
2862#define WM8994_AIF1DRC2_SIG_DET_MODE 0x0080 /* AIF1DRC2_SIG_DET_MODE */
2863#define WM8994_AIF1DRC2_SIG_DET_MODE_MASK 0x0080 /* AIF1DRC2_SIG_DET_MODE */
2864#define WM8994_AIF1DRC2_SIG_DET_MODE_SHIFT 7 /* AIF1DRC2_SIG_DET_MODE */
2865#define WM8994_AIF1DRC2_SIG_DET_MODE_WIDTH 1 /* AIF1DRC2_SIG_DET_MODE */
2866#define WM8994_AIF1DRC2_SIG_DET 0x0040 /* AIF1DRC2_SIG_DET */
2867#define WM8994_AIF1DRC2_SIG_DET_MASK 0x0040 /* AIF1DRC2_SIG_DET */
2868#define WM8994_AIF1DRC2_SIG_DET_SHIFT 6 /* AIF1DRC2_SIG_DET */
2869#define WM8994_AIF1DRC2_SIG_DET_WIDTH 1 /* AIF1DRC2_SIG_DET */
2870#define WM8994_AIF1DRC2_KNEE2_OP_ENA 0x0020 /* AIF1DRC2_KNEE2_OP_ENA */
2871#define WM8994_AIF1DRC2_KNEE2_OP_ENA_MASK 0x0020 /* AIF1DRC2_KNEE2_OP_ENA */
2872#define WM8994_AIF1DRC2_KNEE2_OP_ENA_SHIFT 5 /* AIF1DRC2_KNEE2_OP_ENA */
2873#define WM8994_AIF1DRC2_KNEE2_OP_ENA_WIDTH 1 /* AIF1DRC2_KNEE2_OP_ENA */
2874#define WM8994_AIF1DRC2_QR 0x0010 /* AIF1DRC2_QR */
2875#define WM8994_AIF1DRC2_QR_MASK 0x0010 /* AIF1DRC2_QR */
2876#define WM8994_AIF1DRC2_QR_SHIFT 4 /* AIF1DRC2_QR */
2877#define WM8994_AIF1DRC2_QR_WIDTH 1 /* AIF1DRC2_QR */
2878#define WM8994_AIF1DRC2_ANTICLIP 0x0008 /* AIF1DRC2_ANTICLIP */
2879#define WM8994_AIF1DRC2_ANTICLIP_MASK 0x0008 /* AIF1DRC2_ANTICLIP */
2880#define WM8994_AIF1DRC2_ANTICLIP_SHIFT 3 /* AIF1DRC2_ANTICLIP */
2881#define WM8994_AIF1DRC2_ANTICLIP_WIDTH 1 /* AIF1DRC2_ANTICLIP */
2882#define WM8994_AIF1DAC2_DRC_ENA 0x0004 /* AIF1DAC2_DRC_ENA */
2883#define WM8994_AIF1DAC2_DRC_ENA_MASK 0x0004 /* AIF1DAC2_DRC_ENA */
2884#define WM8994_AIF1DAC2_DRC_ENA_SHIFT 2 /* AIF1DAC2_DRC_ENA */
2885#define WM8994_AIF1DAC2_DRC_ENA_WIDTH 1 /* AIF1DAC2_DRC_ENA */
2886#define WM8994_AIF1ADC2L_DRC_ENA 0x0002 /* AIF1ADC2L_DRC_ENA */
2887#define WM8994_AIF1ADC2L_DRC_ENA_MASK 0x0002 /* AIF1ADC2L_DRC_ENA */
2888#define WM8994_AIF1ADC2L_DRC_ENA_SHIFT 1 /* AIF1ADC2L_DRC_ENA */
2889#define WM8994_AIF1ADC2L_DRC_ENA_WIDTH 1 /* AIF1ADC2L_DRC_ENA */
2890#define WM8994_AIF1ADC2R_DRC_ENA 0x0001 /* AIF1ADC2R_DRC_ENA */
2891#define WM8994_AIF1ADC2R_DRC_ENA_MASK 0x0001 /* AIF1ADC2R_DRC_ENA */
2892#define WM8994_AIF1ADC2R_DRC_ENA_SHIFT 0 /* AIF1ADC2R_DRC_ENA */
2893#define WM8994_AIF1ADC2R_DRC_ENA_WIDTH 1 /* AIF1ADC2R_DRC_ENA */
2894
2895/*
2896 * R1105 (0x451) - AIF1 DRC2 (2)
2897 */
2898#define WM8994_AIF1DRC2_ATK_MASK 0x1E00 /* AIF1DRC2_ATK - [12:9] */
2899#define WM8994_AIF1DRC2_ATK_SHIFT 9 /* AIF1DRC2_ATK - [12:9] */
2900#define WM8994_AIF1DRC2_ATK_WIDTH 4 /* AIF1DRC2_ATK - [12:9] */
2901#define WM8994_AIF1DRC2_DCY_MASK 0x01E0 /* AIF1DRC2_DCY - [8:5] */
2902#define WM8994_AIF1DRC2_DCY_SHIFT 5 /* AIF1DRC2_DCY - [8:5] */
2903#define WM8994_AIF1DRC2_DCY_WIDTH 4 /* AIF1DRC2_DCY - [8:5] */
2904#define WM8994_AIF1DRC2_MINGAIN_MASK 0x001C /* AIF1DRC2_MINGAIN - [4:2] */
2905#define WM8994_AIF1DRC2_MINGAIN_SHIFT 2 /* AIF1DRC2_MINGAIN - [4:2] */
2906#define WM8994_AIF1DRC2_MINGAIN_WIDTH 3 /* AIF1DRC2_MINGAIN - [4:2] */
2907#define WM8994_AIF1DRC2_MAXGAIN_MASK 0x0003 /* AIF1DRC2_MAXGAIN - [1:0] */
2908#define WM8994_AIF1DRC2_MAXGAIN_SHIFT 0 /* AIF1DRC2_MAXGAIN - [1:0] */
2909#define WM8994_AIF1DRC2_MAXGAIN_WIDTH 2 /* AIF1DRC2_MAXGAIN - [1:0] */
2910
2911/*
2912 * R1106 (0x452) - AIF1 DRC2 (3)
2913 */
2914#define WM8994_AIF1DRC2_NG_MINGAIN_MASK 0xF000 /* AIF1DRC2_NG_MINGAIN - [15:12] */
2915#define WM8994_AIF1DRC2_NG_MINGAIN_SHIFT 12 /* AIF1DRC2_NG_MINGAIN - [15:12] */
2916#define WM8994_AIF1DRC2_NG_MINGAIN_WIDTH 4 /* AIF1DRC2_NG_MINGAIN - [15:12] */
2917#define WM8994_AIF1DRC2_NG_EXP_MASK 0x0C00 /* AIF1DRC2_NG_EXP - [11:10] */
2918#define WM8994_AIF1DRC2_NG_EXP_SHIFT 10 /* AIF1DRC2_NG_EXP - [11:10] */
2919#define WM8994_AIF1DRC2_NG_EXP_WIDTH 2 /* AIF1DRC2_NG_EXP - [11:10] */
2920#define WM8994_AIF1DRC2_QR_THR_MASK 0x0300 /* AIF1DRC2_QR_THR - [9:8] */
2921#define WM8994_AIF1DRC2_QR_THR_SHIFT 8 /* AIF1DRC2_QR_THR - [9:8] */
2922#define WM8994_AIF1DRC2_QR_THR_WIDTH 2 /* AIF1DRC2_QR_THR - [9:8] */
2923#define WM8994_AIF1DRC2_QR_DCY_MASK 0x00C0 /* AIF1DRC2_QR_DCY - [7:6] */
2924#define WM8994_AIF1DRC2_QR_DCY_SHIFT 6 /* AIF1DRC2_QR_DCY - [7:6] */
2925#define WM8994_AIF1DRC2_QR_DCY_WIDTH 2 /* AIF1DRC2_QR_DCY - [7:6] */
2926#define WM8994_AIF1DRC2_HI_COMP_MASK 0x0038 /* AIF1DRC2_HI_COMP - [5:3] */
2927#define WM8994_AIF1DRC2_HI_COMP_SHIFT 3 /* AIF1DRC2_HI_COMP - [5:3] */
2928#define WM8994_AIF1DRC2_HI_COMP_WIDTH 3 /* AIF1DRC2_HI_COMP - [5:3] */
2929#define WM8994_AIF1DRC2_LO_COMP_MASK 0x0007 /* AIF1DRC2_LO_COMP - [2:0] */
2930#define WM8994_AIF1DRC2_LO_COMP_SHIFT 0 /* AIF1DRC2_LO_COMP - [2:0] */
2931#define WM8994_AIF1DRC2_LO_COMP_WIDTH 3 /* AIF1DRC2_LO_COMP - [2:0] */
2932
2933/*
2934 * R1107 (0x453) - AIF1 DRC2 (4)
2935 */
2936#define WM8994_AIF1DRC2_KNEE_IP_MASK 0x07E0 /* AIF1DRC2_KNEE_IP - [10:5] */
2937#define WM8994_AIF1DRC2_KNEE_IP_SHIFT 5 /* AIF1DRC2_KNEE_IP - [10:5] */
2938#define WM8994_AIF1DRC2_KNEE_IP_WIDTH 6 /* AIF1DRC2_KNEE_IP - [10:5] */
2939#define WM8994_AIF1DRC2_KNEE_OP_MASK 0x001F /* AIF1DRC2_KNEE_OP - [4:0] */
2940#define WM8994_AIF1DRC2_KNEE_OP_SHIFT 0 /* AIF1DRC2_KNEE_OP - [4:0] */
2941#define WM8994_AIF1DRC2_KNEE_OP_WIDTH 5 /* AIF1DRC2_KNEE_OP - [4:0] */
2942
2943/*
2944 * R1108 (0x454) - AIF1 DRC2 (5)
2945 */
2946#define WM8994_AIF1DRC2_KNEE2_IP_MASK 0x03E0 /* AIF1DRC2_KNEE2_IP - [9:5] */
2947#define WM8994_AIF1DRC2_KNEE2_IP_SHIFT 5 /* AIF1DRC2_KNEE2_IP - [9:5] */
2948#define WM8994_AIF1DRC2_KNEE2_IP_WIDTH 5 /* AIF1DRC2_KNEE2_IP - [9:5] */
2949#define WM8994_AIF1DRC2_KNEE2_OP_MASK 0x001F /* AIF1DRC2_KNEE2_OP - [4:0] */
2950#define WM8994_AIF1DRC2_KNEE2_OP_SHIFT 0 /* AIF1DRC2_KNEE2_OP - [4:0] */
2951#define WM8994_AIF1DRC2_KNEE2_OP_WIDTH 5 /* AIF1DRC2_KNEE2_OP - [4:0] */
2952
2953/*
2954 * R1152 (0x480) - AIF1 DAC1 EQ Gains (1)
2955 */
2956#define WM8994_AIF1DAC1_EQ_B1_GAIN_MASK 0xF800 /* AIF1DAC1_EQ_B1_GAIN - [15:11] */
2957#define WM8994_AIF1DAC1_EQ_B1_GAIN_SHIFT 11 /* AIF1DAC1_EQ_B1_GAIN - [15:11] */
2958#define WM8994_AIF1DAC1_EQ_B1_GAIN_WIDTH 5 /* AIF1DAC1_EQ_B1_GAIN - [15:11] */
2959#define WM8994_AIF1DAC1_EQ_B2_GAIN_MASK 0x07C0 /* AIF1DAC1_EQ_B2_GAIN - [10:6] */
2960#define WM8994_AIF1DAC1_EQ_B2_GAIN_SHIFT 6 /* AIF1DAC1_EQ_B2_GAIN - [10:6] */
2961#define WM8994_AIF1DAC1_EQ_B2_GAIN_WIDTH 5 /* AIF1DAC1_EQ_B2_GAIN - [10:6] */
2962#define WM8994_AIF1DAC1_EQ_B3_GAIN_MASK 0x003E /* AIF1DAC1_EQ_B3_GAIN - [5:1] */
2963#define WM8994_AIF1DAC1_EQ_B3_GAIN_SHIFT 1 /* AIF1DAC1_EQ_B3_GAIN - [5:1] */
2964#define WM8994_AIF1DAC1_EQ_B3_GAIN_WIDTH 5 /* AIF1DAC1_EQ_B3_GAIN - [5:1] */
2965#define WM8994_AIF1DAC1_EQ_ENA 0x0001 /* AIF1DAC1_EQ_ENA */
2966#define WM8994_AIF1DAC1_EQ_ENA_MASK 0x0001 /* AIF1DAC1_EQ_ENA */
2967#define WM8994_AIF1DAC1_EQ_ENA_SHIFT 0 /* AIF1DAC1_EQ_ENA */
2968#define WM8994_AIF1DAC1_EQ_ENA_WIDTH 1 /* AIF1DAC1_EQ_ENA */
2969
2970/*
2971 * R1153 (0x481) - AIF1 DAC1 EQ Gains (2)
2972 */
2973#define WM8994_AIF1DAC1_EQ_B4_GAIN_MASK 0xF800 /* AIF1DAC1_EQ_B4_GAIN - [15:11] */
2974#define WM8994_AIF1DAC1_EQ_B4_GAIN_SHIFT 11 /* AIF1DAC1_EQ_B4_GAIN - [15:11] */
2975#define WM8994_AIF1DAC1_EQ_B4_GAIN_WIDTH 5 /* AIF1DAC1_EQ_B4_GAIN - [15:11] */
2976#define WM8994_AIF1DAC1_EQ_B5_GAIN_MASK 0x07C0 /* AIF1DAC1_EQ_B5_GAIN - [10:6] */
2977#define WM8994_AIF1DAC1_EQ_B5_GAIN_SHIFT 6 /* AIF1DAC1_EQ_B5_GAIN - [10:6] */
2978#define WM8994_AIF1DAC1_EQ_B5_GAIN_WIDTH 5 /* AIF1DAC1_EQ_B5_GAIN - [10:6] */
2979
2980/*
2981 * R1154 (0x482) - AIF1 DAC1 EQ Band 1 A
2982 */
2983#define WM8994_AIF1DAC1_EQ_B1_A_MASK 0xFFFF /* AIF1DAC1_EQ_B1_A - [15:0] */
2984#define WM8994_AIF1DAC1_EQ_B1_A_SHIFT 0 /* AIF1DAC1_EQ_B1_A - [15:0] */
2985#define WM8994_AIF1DAC1_EQ_B1_A_WIDTH 16 /* AIF1DAC1_EQ_B1_A - [15:0] */
2986
2987/*
2988 * R1155 (0x483) - AIF1 DAC1 EQ Band 1 B
2989 */
2990#define WM8994_AIF1DAC1_EQ_B1_B_MASK 0xFFFF /* AIF1DAC1_EQ_B1_B - [15:0] */
2991#define WM8994_AIF1DAC1_EQ_B1_B_SHIFT 0 /* AIF1DAC1_EQ_B1_B - [15:0] */
2992#define WM8994_AIF1DAC1_EQ_B1_B_WIDTH 16 /* AIF1DAC1_EQ_B1_B - [15:0] */
2993
2994/*
2995 * R1156 (0x484) - AIF1 DAC1 EQ Band 1 PG
2996 */
2997#define WM8994_AIF1DAC1_EQ_B1_PG_MASK 0xFFFF /* AIF1DAC1_EQ_B1_PG - [15:0] */
2998#define WM8994_AIF1DAC1_EQ_B1_PG_SHIFT 0 /* AIF1DAC1_EQ_B1_PG - [15:0] */
2999#define WM8994_AIF1DAC1_EQ_B1_PG_WIDTH 16 /* AIF1DAC1_EQ_B1_PG - [15:0] */
3000
3001/*
3002 * R1157 (0x485) - AIF1 DAC1 EQ Band 2 A
3003 */
3004#define WM8994_AIF1DAC1_EQ_B2_A_MASK 0xFFFF /* AIF1DAC1_EQ_B2_A - [15:0] */
3005#define WM8994_AIF1DAC1_EQ_B2_A_SHIFT 0 /* AIF1DAC1_EQ_B2_A - [15:0] */
3006#define WM8994_AIF1DAC1_EQ_B2_A_WIDTH 16 /* AIF1DAC1_EQ_B2_A - [15:0] */
3007
3008/*
3009 * R1158 (0x486) - AIF1 DAC1 EQ Band 2 B
3010 */
3011#define WM8994_AIF1DAC1_EQ_B2_B_MASK 0xFFFF /* AIF1DAC1_EQ_B2_B - [15:0] */
3012#define WM8994_AIF1DAC1_EQ_B2_B_SHIFT 0 /* AIF1DAC1_EQ_B2_B - [15:0] */
3013#define WM8994_AIF1DAC1_EQ_B2_B_WIDTH 16 /* AIF1DAC1_EQ_B2_B - [15:0] */
3014
3015/*
3016 * R1159 (0x487) - AIF1 DAC1 EQ Band 2 C
3017 */
3018#define WM8994_AIF1DAC1_EQ_B2_C_MASK 0xFFFF /* AIF1DAC1_EQ_B2_C - [15:0] */
3019#define WM8994_AIF1DAC1_EQ_B2_C_SHIFT 0 /* AIF1DAC1_EQ_B2_C - [15:0] */
3020#define WM8994_AIF1DAC1_EQ_B2_C_WIDTH 16 /* AIF1DAC1_EQ_B2_C - [15:0] */
3021
3022/*
3023 * R1160 (0x488) - AIF1 DAC1 EQ Band 2 PG
3024 */
3025#define WM8994_AIF1DAC1_EQ_B2_PG_MASK 0xFFFF /* AIF1DAC1_EQ_B2_PG - [15:0] */
3026#define WM8994_AIF1DAC1_EQ_B2_PG_SHIFT 0 /* AIF1DAC1_EQ_B2_PG - [15:0] */
3027#define WM8994_AIF1DAC1_EQ_B2_PG_WIDTH 16 /* AIF1DAC1_EQ_B2_PG - [15:0] */
3028
3029/*
3030 * R1161 (0x489) - AIF1 DAC1 EQ Band 3 A
3031 */
3032#define WM8994_AIF1DAC1_EQ_B3_A_MASK 0xFFFF /* AIF1DAC1_EQ_B3_A - [15:0] */
3033#define WM8994_AIF1DAC1_EQ_B3_A_SHIFT 0 /* AIF1DAC1_EQ_B3_A - [15:0] */
3034#define WM8994_AIF1DAC1_EQ_B3_A_WIDTH 16 /* AIF1DAC1_EQ_B3_A - [15:0] */
3035
3036/*
3037 * R1162 (0x48A) - AIF1 DAC1 EQ Band 3 B
3038 */
3039#define WM8994_AIF1DAC1_EQ_B3_B_MASK 0xFFFF /* AIF1DAC1_EQ_B3_B - [15:0] */
3040#define WM8994_AIF1DAC1_EQ_B3_B_SHIFT 0 /* AIF1DAC1_EQ_B3_B - [15:0] */
3041#define WM8994_AIF1DAC1_EQ_B3_B_WIDTH 16 /* AIF1DAC1_EQ_B3_B - [15:0] */
3042
3043/*
3044 * R1163 (0x48B) - AIF1 DAC1 EQ Band 3 C
3045 */
3046#define WM8994_AIF1DAC1_EQ_B3_C_MASK 0xFFFF /* AIF1DAC1_EQ_B3_C - [15:0] */
3047#define WM8994_AIF1DAC1_EQ_B3_C_SHIFT 0 /* AIF1DAC1_EQ_B3_C - [15:0] */
3048#define WM8994_AIF1DAC1_EQ_B3_C_WIDTH 16 /* AIF1DAC1_EQ_B3_C - [15:0] */
3049
3050/*
3051 * R1164 (0x48C) - AIF1 DAC1 EQ Band 3 PG
3052 */
3053#define WM8994_AIF1DAC1_EQ_B3_PG_MASK 0xFFFF /* AIF1DAC1_EQ_B3_PG - [15:0] */
3054#define WM8994_AIF1DAC1_EQ_B3_PG_SHIFT 0 /* AIF1DAC1_EQ_B3_PG - [15:0] */
3055#define WM8994_AIF1DAC1_EQ_B3_PG_WIDTH 16 /* AIF1DAC1_EQ_B3_PG - [15:0] */
3056
3057/*
3058 * R1165 (0x48D) - AIF1 DAC1 EQ Band 4 A
3059 */
3060#define WM8994_AIF1DAC1_EQ_B4_A_MASK 0xFFFF /* AIF1DAC1_EQ_B4_A - [15:0] */
3061#define WM8994_AIF1DAC1_EQ_B4_A_SHIFT 0 /* AIF1DAC1_EQ_B4_A - [15:0] */
3062#define WM8994_AIF1DAC1_EQ_B4_A_WIDTH 16 /* AIF1DAC1_EQ_B4_A - [15:0] */
3063
3064/*
3065 * R1166 (0x48E) - AIF1 DAC1 EQ Band 4 B
3066 */
3067#define WM8994_AIF1DAC1_EQ_B4_B_MASK 0xFFFF /* AIF1DAC1_EQ_B4_B - [15:0] */
3068#define WM8994_AIF1DAC1_EQ_B4_B_SHIFT 0 /* AIF1DAC1_EQ_B4_B - [15:0] */
3069#define WM8994_AIF1DAC1_EQ_B4_B_WIDTH 16 /* AIF1DAC1_EQ_B4_B - [15:0] */
3070
3071/*
3072 * R1167 (0x48F) - AIF1 DAC1 EQ Band 4 C
3073 */
3074#define WM8994_AIF1DAC1_EQ_B4_C_MASK 0xFFFF /* AIF1DAC1_EQ_B4_C - [15:0] */
3075#define WM8994_AIF1DAC1_EQ_B4_C_SHIFT 0 /* AIF1DAC1_EQ_B4_C - [15:0] */
3076#define WM8994_AIF1DAC1_EQ_B4_C_WIDTH 16 /* AIF1DAC1_EQ_B4_C - [15:0] */
3077
3078/*
3079 * R1168 (0x490) - AIF1 DAC1 EQ Band 4 PG
3080 */
3081#define WM8994_AIF1DAC1_EQ_B4_PG_MASK 0xFFFF /* AIF1DAC1_EQ_B4_PG - [15:0] */
3082#define WM8994_AIF1DAC1_EQ_B4_PG_SHIFT 0 /* AIF1DAC1_EQ_B4_PG - [15:0] */
3083#define WM8994_AIF1DAC1_EQ_B4_PG_WIDTH 16 /* AIF1DAC1_EQ_B4_PG - [15:0] */
3084
3085/*
3086 * R1169 (0x491) - AIF1 DAC1 EQ Band 5 A
3087 */
3088#define WM8994_AIF1DAC1_EQ_B5_A_MASK 0xFFFF /* AIF1DAC1_EQ_B5_A - [15:0] */
3089#define WM8994_AIF1DAC1_EQ_B5_A_SHIFT 0 /* AIF1DAC1_EQ_B5_A - [15:0] */
3090#define WM8994_AIF1DAC1_EQ_B5_A_WIDTH 16 /* AIF1DAC1_EQ_B5_A - [15:0] */
3091
3092/*
3093 * R1170 (0x492) - AIF1 DAC1 EQ Band 5 B
3094 */
3095#define WM8994_AIF1DAC1_EQ_B5_B_MASK 0xFFFF /* AIF1DAC1_EQ_B5_B - [15:0] */
3096#define WM8994_AIF1DAC1_EQ_B5_B_SHIFT 0 /* AIF1DAC1_EQ_B5_B - [15:0] */
3097#define WM8994_AIF1DAC1_EQ_B5_B_WIDTH 16 /* AIF1DAC1_EQ_B5_B - [15:0] */
3098
3099/*
3100 * R1171 (0x493) - AIF1 DAC1 EQ Band 5 PG
3101 */
3102#define WM8994_AIF1DAC1_EQ_B5_PG_MASK 0xFFFF /* AIF1DAC1_EQ_B5_PG - [15:0] */
3103#define WM8994_AIF1DAC1_EQ_B5_PG_SHIFT 0 /* AIF1DAC1_EQ_B5_PG - [15:0] */
3104#define WM8994_AIF1DAC1_EQ_B5_PG_WIDTH 16 /* AIF1DAC1_EQ_B5_PG - [15:0] */
3105
3106/*
3107 * R1184 (0x4A0) - AIF1 DAC2 EQ Gains (1)
3108 */
3109#define WM8994_AIF1DAC2_EQ_B1_GAIN_MASK 0xF800 /* AIF1DAC2_EQ_B1_GAIN - [15:11] */
3110#define WM8994_AIF1DAC2_EQ_B1_GAIN_SHIFT 11 /* AIF1DAC2_EQ_B1_GAIN - [15:11] */
3111#define WM8994_AIF1DAC2_EQ_B1_GAIN_WIDTH 5 /* AIF1DAC2_EQ_B1_GAIN - [15:11] */
3112#define WM8994_AIF1DAC2_EQ_B2_GAIN_MASK 0x07C0 /* AIF1DAC2_EQ_B2_GAIN - [10:6] */
3113#define WM8994_AIF1DAC2_EQ_B2_GAIN_SHIFT 6 /* AIF1DAC2_EQ_B2_GAIN - [10:6] */
3114#define WM8994_AIF1DAC2_EQ_B2_GAIN_WIDTH 5 /* AIF1DAC2_EQ_B2_GAIN - [10:6] */
3115#define WM8994_AIF1DAC2_EQ_B3_GAIN_MASK 0x003E /* AIF1DAC2_EQ_B3_GAIN - [5:1] */
3116#define WM8994_AIF1DAC2_EQ_B3_GAIN_SHIFT 1 /* AIF1DAC2_EQ_B3_GAIN - [5:1] */
3117#define WM8994_AIF1DAC2_EQ_B3_GAIN_WIDTH 5 /* AIF1DAC2_EQ_B3_GAIN - [5:1] */
3118#define WM8994_AIF1DAC2_EQ_ENA 0x0001 /* AIF1DAC2_EQ_ENA */
3119#define WM8994_AIF1DAC2_EQ_ENA_MASK 0x0001 /* AIF1DAC2_EQ_ENA */
3120#define WM8994_AIF1DAC2_EQ_ENA_SHIFT 0 /* AIF1DAC2_EQ_ENA */
3121#define WM8994_AIF1DAC2_EQ_ENA_WIDTH 1 /* AIF1DAC2_EQ_ENA */
3122
3123/*
3124 * R1185 (0x4A1) - AIF1 DAC2 EQ Gains (2)
3125 */
3126#define WM8994_AIF1DAC2_EQ_B4_GAIN_MASK 0xF800 /* AIF1DAC2_EQ_B4_GAIN - [15:11] */
3127#define WM8994_AIF1DAC2_EQ_B4_GAIN_SHIFT 11 /* AIF1DAC2_EQ_B4_GAIN - [15:11] */
3128#define WM8994_AIF1DAC2_EQ_B4_GAIN_WIDTH 5 /* AIF1DAC2_EQ_B4_GAIN - [15:11] */
3129#define WM8994_AIF1DAC2_EQ_B5_GAIN_MASK 0x07C0 /* AIF1DAC2_EQ_B5_GAIN - [10:6] */
3130#define WM8994_AIF1DAC2_EQ_B5_GAIN_SHIFT 6 /* AIF1DAC2_EQ_B5_GAIN - [10:6] */
3131#define WM8994_AIF1DAC2_EQ_B5_GAIN_WIDTH 5 /* AIF1DAC2_EQ_B5_GAIN - [10:6] */
3132
3133/*
3134 * R1186 (0x4A2) - AIF1 DAC2 EQ Band 1 A
3135 */
3136#define WM8994_AIF1DAC2_EQ_B1_A_MASK 0xFFFF /* AIF1DAC2_EQ_B1_A - [15:0] */
3137#define WM8994_AIF1DAC2_EQ_B1_A_SHIFT 0 /* AIF1DAC2_EQ_B1_A - [15:0] */
3138#define WM8994_AIF1DAC2_EQ_B1_A_WIDTH 16 /* AIF1DAC2_EQ_B1_A - [15:0] */
3139
3140/*
3141 * R1187 (0x4A3) - AIF1 DAC2 EQ Band 1 B
3142 */
3143#define WM8994_AIF1DAC2_EQ_B1_B_MASK 0xFFFF /* AIF1DAC2_EQ_B1_B - [15:0] */
3144#define WM8994_AIF1DAC2_EQ_B1_B_SHIFT 0 /* AIF1DAC2_EQ_B1_B - [15:0] */
3145#define WM8994_AIF1DAC2_EQ_B1_B_WIDTH 16 /* AIF1DAC2_EQ_B1_B - [15:0] */
3146
3147/*
3148 * R1188 (0x4A4) - AIF1 DAC2 EQ Band 1 PG
3149 */
3150#define WM8994_AIF1DAC2_EQ_B1_PG_MASK 0xFFFF /* AIF1DAC2_EQ_B1_PG - [15:0] */
3151#define WM8994_AIF1DAC2_EQ_B1_PG_SHIFT 0 /* AIF1DAC2_EQ_B1_PG - [15:0] */
3152#define WM8994_AIF1DAC2_EQ_B1_PG_WIDTH 16 /* AIF1DAC2_EQ_B1_PG - [15:0] */
3153
3154/*
3155 * R1189 (0x4A5) - AIF1 DAC2 EQ Band 2 A
3156 */
3157#define WM8994_AIF1DAC2_EQ_B2_A_MASK 0xFFFF /* AIF1DAC2_EQ_B2_A - [15:0] */
3158#define WM8994_AIF1DAC2_EQ_B2_A_SHIFT 0 /* AIF1DAC2_EQ_B2_A - [15:0] */
3159#define WM8994_AIF1DAC2_EQ_B2_A_WIDTH 16 /* AIF1DAC2_EQ_B2_A - [15:0] */
3160
3161/*
3162 * R1190 (0x4A6) - AIF1 DAC2 EQ Band 2 B
3163 */
3164#define WM8994_AIF1DAC2_EQ_B2_B_MASK 0xFFFF /* AIF1DAC2_EQ_B2_B - [15:0] */
3165#define WM8994_AIF1DAC2_EQ_B2_B_SHIFT 0 /* AIF1DAC2_EQ_B2_B - [15:0] */
3166#define WM8994_AIF1DAC2_EQ_B2_B_WIDTH 16 /* AIF1DAC2_EQ_B2_B - [15:0] */
3167
3168/*
3169 * R1191 (0x4A7) - AIF1 DAC2 EQ Band 2 C
3170 */
3171#define WM8994_AIF1DAC2_EQ_B2_C_MASK 0xFFFF /* AIF1DAC2_EQ_B2_C - [15:0] */
3172#define WM8994_AIF1DAC2_EQ_B2_C_SHIFT 0 /* AIF1DAC2_EQ_B2_C - [15:0] */
3173#define WM8994_AIF1DAC2_EQ_B2_C_WIDTH 16 /* AIF1DAC2_EQ_B2_C - [15:0] */
3174
3175/*
3176 * R1192 (0x4A8) - AIF1 DAC2 EQ Band 2 PG
3177 */
3178#define WM8994_AIF1DAC2_EQ_B2_PG_MASK 0xFFFF /* AIF1DAC2_EQ_B2_PG - [15:0] */
3179#define WM8994_AIF1DAC2_EQ_B2_PG_SHIFT 0 /* AIF1DAC2_EQ_B2_PG - [15:0] */
3180#define WM8994_AIF1DAC2_EQ_B2_PG_WIDTH 16 /* AIF1DAC2_EQ_B2_PG - [15:0] */
3181
3182/*
3183 * R1193 (0x4A9) - AIF1 DAC2 EQ Band 3 A
3184 */
3185#define WM8994_AIF1DAC2_EQ_B3_A_MASK 0xFFFF /* AIF1DAC2_EQ_B3_A - [15:0] */
3186#define WM8994_AIF1DAC2_EQ_B3_A_SHIFT 0 /* AIF1DAC2_EQ_B3_A - [15:0] */
3187#define WM8994_AIF1DAC2_EQ_B3_A_WIDTH 16 /* AIF1DAC2_EQ_B3_A - [15:0] */
3188
3189/*
3190 * R1194 (0x4AA) - AIF1 DAC2 EQ Band 3 B
3191 */
3192#define WM8994_AIF1DAC2_EQ_B3_B_MASK 0xFFFF /* AIF1DAC2_EQ_B3_B - [15:0] */
3193#define WM8994_AIF1DAC2_EQ_B3_B_SHIFT 0 /* AIF1DAC2_EQ_B3_B - [15:0] */
3194#define WM8994_AIF1DAC2_EQ_B3_B_WIDTH 16 /* AIF1DAC2_EQ_B3_B - [15:0] */
3195
3196/*
3197 * R1195 (0x4AB) - AIF1 DAC2 EQ Band 3 C
3198 */
3199#define WM8994_AIF1DAC2_EQ_B3_C_MASK 0xFFFF /* AIF1DAC2_EQ_B3_C - [15:0] */
3200#define WM8994_AIF1DAC2_EQ_B3_C_SHIFT 0 /* AIF1DAC2_EQ_B3_C - [15:0] */
3201#define WM8994_AIF1DAC2_EQ_B3_C_WIDTH 16 /* AIF1DAC2_EQ_B3_C - [15:0] */
3202
3203/*
3204 * R1196 (0x4AC) - AIF1 DAC2 EQ Band 3 PG
3205 */
3206#define WM8994_AIF1DAC2_EQ_B3_PG_MASK 0xFFFF /* AIF1DAC2_EQ_B3_PG - [15:0] */
3207#define WM8994_AIF1DAC2_EQ_B3_PG_SHIFT 0 /* AIF1DAC2_EQ_B3_PG - [15:0] */
3208#define WM8994_AIF1DAC2_EQ_B3_PG_WIDTH 16 /* AIF1DAC2_EQ_B3_PG - [15:0] */
3209
3210/*
3211 * R1197 (0x4AD) - AIF1 DAC2 EQ Band 4 A
3212 */
3213#define WM8994_AIF1DAC2_EQ_B4_A_MASK 0xFFFF /* AIF1DAC2_EQ_B4_A - [15:0] */
3214#define WM8994_AIF1DAC2_EQ_B4_A_SHIFT 0 /* AIF1DAC2_EQ_B4_A - [15:0] */
3215#define WM8994_AIF1DAC2_EQ_B4_A_WIDTH 16 /* AIF1DAC2_EQ_B4_A - [15:0] */
3216
3217/*
3218 * R1198 (0x4AE) - AIF1 DAC2 EQ Band 4 B
3219 */
3220#define WM8994_AIF1DAC2_EQ_B4_B_MASK 0xFFFF /* AIF1DAC2_EQ_B4_B - [15:0] */
3221#define WM8994_AIF1DAC2_EQ_B4_B_SHIFT 0 /* AIF1DAC2_EQ_B4_B - [15:0] */
3222#define WM8994_AIF1DAC2_EQ_B4_B_WIDTH 16 /* AIF1DAC2_EQ_B4_B - [15:0] */
3223
3224/*
3225 * R1199 (0x4AF) - AIF1 DAC2 EQ Band 4 C
3226 */
3227#define WM8994_AIF1DAC2_EQ_B4_C_MASK 0xFFFF /* AIF1DAC2_EQ_B4_C - [15:0] */
3228#define WM8994_AIF1DAC2_EQ_B4_C_SHIFT 0 /* AIF1DAC2_EQ_B4_C - [15:0] */
3229#define WM8994_AIF1DAC2_EQ_B4_C_WIDTH 16 /* AIF1DAC2_EQ_B4_C - [15:0] */
3230
3231/*
3232 * R1200 (0x4B0) - AIF1 DAC2 EQ Band 4 PG
3233 */
3234#define WM8994_AIF1DAC2_EQ_B4_PG_MASK 0xFFFF /* AIF1DAC2_EQ_B4_PG - [15:0] */
3235#define WM8994_AIF1DAC2_EQ_B4_PG_SHIFT 0 /* AIF1DAC2_EQ_B4_PG - [15:0] */
3236#define WM8994_AIF1DAC2_EQ_B4_PG_WIDTH 16 /* AIF1DAC2_EQ_B4_PG - [15:0] */
3237
3238/*
3239 * R1201 (0x4B1) - AIF1 DAC2 EQ Band 5 A
3240 */
3241#define WM8994_AIF1DAC2_EQ_B5_A_MASK 0xFFFF /* AIF1DAC2_EQ_B5_A - [15:0] */
3242#define WM8994_AIF1DAC2_EQ_B5_A_SHIFT 0 /* AIF1DAC2_EQ_B5_A - [15:0] */
3243#define WM8994_AIF1DAC2_EQ_B5_A_WIDTH 16 /* AIF1DAC2_EQ_B5_A - [15:0] */
3244
3245/*
3246 * R1202 (0x4B2) - AIF1 DAC2 EQ Band 5 B
3247 */
3248#define WM8994_AIF1DAC2_EQ_B5_B_MASK 0xFFFF /* AIF1DAC2_EQ_B5_B - [15:0] */
3249#define WM8994_AIF1DAC2_EQ_B5_B_SHIFT 0 /* AIF1DAC2_EQ_B5_B - [15:0] */
3250#define WM8994_AIF1DAC2_EQ_B5_B_WIDTH 16 /* AIF1DAC2_EQ_B5_B - [15:0] */
3251
3252/*
3253 * R1203 (0x4B3) - AIF1 DAC2 EQ Band 5 PG
3254 */
3255#define WM8994_AIF1DAC2_EQ_B5_PG_MASK 0xFFFF /* AIF1DAC2_EQ_B5_PG - [15:0] */
3256#define WM8994_AIF1DAC2_EQ_B5_PG_SHIFT 0 /* AIF1DAC2_EQ_B5_PG - [15:0] */
3257#define WM8994_AIF1DAC2_EQ_B5_PG_WIDTH 16 /* AIF1DAC2_EQ_B5_PG - [15:0] */
3258
3259/*
3260 * R1280 (0x500) - AIF2 ADC Left Volume
3261 */
3262#define WM8994_AIF2ADC_VU 0x0100 /* AIF2ADC_VU */
3263#define WM8994_AIF2ADC_VU_MASK 0x0100 /* AIF2ADC_VU */
3264#define WM8994_AIF2ADC_VU_SHIFT 8 /* AIF2ADC_VU */
3265#define WM8994_AIF2ADC_VU_WIDTH 1 /* AIF2ADC_VU */
3266#define WM8994_AIF2ADCL_VOL_MASK 0x00FF /* AIF2ADCL_VOL - [7:0] */
3267#define WM8994_AIF2ADCL_VOL_SHIFT 0 /* AIF2ADCL_VOL - [7:0] */
3268#define WM8994_AIF2ADCL_VOL_WIDTH 8 /* AIF2ADCL_VOL - [7:0] */
3269
3270/*
3271 * R1281 (0x501) - AIF2 ADC Right Volume
3272 */
3273#define WM8994_AIF2ADC_VU 0x0100 /* AIF2ADC_VU */
3274#define WM8994_AIF2ADC_VU_MASK 0x0100 /* AIF2ADC_VU */
3275#define WM8994_AIF2ADC_VU_SHIFT 8 /* AIF2ADC_VU */
3276#define WM8994_AIF2ADC_VU_WIDTH 1 /* AIF2ADC_VU */
3277#define WM8994_AIF2ADCR_VOL_MASK 0x00FF /* AIF2ADCR_VOL - [7:0] */
3278#define WM8994_AIF2ADCR_VOL_SHIFT 0 /* AIF2ADCR_VOL - [7:0] */
3279#define WM8994_AIF2ADCR_VOL_WIDTH 8 /* AIF2ADCR_VOL - [7:0] */
3280
3281/*
3282 * R1282 (0x502) - AIF2 DAC Left Volume
3283 */
3284#define WM8994_AIF2DAC_VU 0x0100 /* AIF2DAC_VU */
3285#define WM8994_AIF2DAC_VU_MASK 0x0100 /* AIF2DAC_VU */
3286#define WM8994_AIF2DAC_VU_SHIFT 8 /* AIF2DAC_VU */
3287#define WM8994_AIF2DAC_VU_WIDTH 1 /* AIF2DAC_VU */
3288#define WM8994_AIF2DACL_VOL_MASK 0x00FF /* AIF2DACL_VOL - [7:0] */
3289#define WM8994_AIF2DACL_VOL_SHIFT 0 /* AIF2DACL_VOL - [7:0] */
3290#define WM8994_AIF2DACL_VOL_WIDTH 8 /* AIF2DACL_VOL - [7:0] */
3291
3292/*
3293 * R1283 (0x503) - AIF2 DAC Right Volume
3294 */
3295#define WM8994_AIF2DAC_VU 0x0100 /* AIF2DAC_VU */
3296#define WM8994_AIF2DAC_VU_MASK 0x0100 /* AIF2DAC_VU */
3297#define WM8994_AIF2DAC_VU_SHIFT 8 /* AIF2DAC_VU */
3298#define WM8994_AIF2DAC_VU_WIDTH 1 /* AIF2DAC_VU */
3299#define WM8994_AIF2DACR_VOL_MASK 0x00FF /* AIF2DACR_VOL - [7:0] */
3300#define WM8994_AIF2DACR_VOL_SHIFT 0 /* AIF2DACR_VOL - [7:0] */
3301#define WM8994_AIF2DACR_VOL_WIDTH 8 /* AIF2DACR_VOL - [7:0] */
3302
3303/*
3304 * R1296 (0x510) - AIF2 ADC Filters
3305 */
3306#define WM8994_AIF2ADC_4FS 0x8000 /* AIF2ADC_4FS */
3307#define WM8994_AIF2ADC_4FS_MASK 0x8000 /* AIF2ADC_4FS */
3308#define WM8994_AIF2ADC_4FS_SHIFT 15 /* AIF2ADC_4FS */
3309#define WM8994_AIF2ADC_4FS_WIDTH 1 /* AIF2ADC_4FS */
3310#define WM8994_AIF2ADC_HPF_CUT_MASK 0x6000 /* AIF2ADC_HPF_CUT - [14:13] */
3311#define WM8994_AIF2ADC_HPF_CUT_SHIFT 13 /* AIF2ADC_HPF_CUT - [14:13] */
3312#define WM8994_AIF2ADC_HPF_CUT_WIDTH 2 /* AIF2ADC_HPF_CUT - [14:13] */
3313#define WM8994_AIF2ADCL_HPF 0x1000 /* AIF2ADCL_HPF */
3314#define WM8994_AIF2ADCL_HPF_MASK 0x1000 /* AIF2ADCL_HPF */
3315#define WM8994_AIF2ADCL_HPF_SHIFT 12 /* AIF2ADCL_HPF */
3316#define WM8994_AIF2ADCL_HPF_WIDTH 1 /* AIF2ADCL_HPF */
3317#define WM8994_AIF2ADCR_HPF 0x0800 /* AIF2ADCR_HPF */
3318#define WM8994_AIF2ADCR_HPF_MASK 0x0800 /* AIF2ADCR_HPF */
3319#define WM8994_AIF2ADCR_HPF_SHIFT 11 /* AIF2ADCR_HPF */
3320#define WM8994_AIF2ADCR_HPF_WIDTH 1 /* AIF2ADCR_HPF */
3321
3322/*
3323 * R1312 (0x520) - AIF2 DAC Filters (1)
3324 */
3325#define WM8994_AIF2DAC_MUTE 0x0200 /* AIF2DAC_MUTE */
3326#define WM8994_AIF2DAC_MUTE_MASK 0x0200 /* AIF2DAC_MUTE */
3327#define WM8994_AIF2DAC_MUTE_SHIFT 9 /* AIF2DAC_MUTE */
3328#define WM8994_AIF2DAC_MUTE_WIDTH 1 /* AIF2DAC_MUTE */
3329#define WM8994_AIF2DAC_MONO 0x0080 /* AIF2DAC_MONO */
3330#define WM8994_AIF2DAC_MONO_MASK 0x0080 /* AIF2DAC_MONO */
3331#define WM8994_AIF2DAC_MONO_SHIFT 7 /* AIF2DAC_MONO */
3332#define WM8994_AIF2DAC_MONO_WIDTH 1 /* AIF2DAC_MONO */
3333#define WM8994_AIF2DAC_MUTERATE 0x0020 /* AIF2DAC_MUTERATE */
3334#define WM8994_AIF2DAC_MUTERATE_MASK 0x0020 /* AIF2DAC_MUTERATE */
3335#define WM8994_AIF2DAC_MUTERATE_SHIFT 5 /* AIF2DAC_MUTERATE */
3336#define WM8994_AIF2DAC_MUTERATE_WIDTH 1 /* AIF2DAC_MUTERATE */
3337#define WM8994_AIF2DAC_UNMUTE_RAMP 0x0010 /* AIF2DAC_UNMUTE_RAMP */
3338#define WM8994_AIF2DAC_UNMUTE_RAMP_MASK 0x0010 /* AIF2DAC_UNMUTE_RAMP */
3339#define WM8994_AIF2DAC_UNMUTE_RAMP_SHIFT 4 /* AIF2DAC_UNMUTE_RAMP */
3340#define WM8994_AIF2DAC_UNMUTE_RAMP_WIDTH 1 /* AIF2DAC_UNMUTE_RAMP */
3341#define WM8994_AIF2DAC_DEEMP_MASK 0x0006 /* AIF2DAC_DEEMP - [2:1] */
3342#define WM8994_AIF2DAC_DEEMP_SHIFT 1 /* AIF2DAC_DEEMP - [2:1] */
3343#define WM8994_AIF2DAC_DEEMP_WIDTH 2 /* AIF2DAC_DEEMP - [2:1] */
3344
3345/*
3346 * R1313 (0x521) - AIF2 DAC Filters (2)
3347 */
3348#define WM8994_AIF2DAC_3D_GAIN_MASK 0x3E00 /* AIF2DAC_3D_GAIN - [13:9] */
3349#define WM8994_AIF2DAC_3D_GAIN_SHIFT 9 /* AIF2DAC_3D_GAIN - [13:9] */
3350#define WM8994_AIF2DAC_3D_GAIN_WIDTH 5 /* AIF2DAC_3D_GAIN - [13:9] */
3351#define WM8994_AIF2DAC_3D_ENA 0x0100 /* AIF2DAC_3D_ENA */
3352#define WM8994_AIF2DAC_3D_ENA_MASK 0x0100 /* AIF2DAC_3D_ENA */
3353#define WM8994_AIF2DAC_3D_ENA_SHIFT 8 /* AIF2DAC_3D_ENA */
3354#define WM8994_AIF2DAC_3D_ENA_WIDTH 1 /* AIF2DAC_3D_ENA */
3355
3356/*
3357 * R1344 (0x540) - AIF2 DRC (1)
3358 */
3359#define WM8994_AIF2DRC_SIG_DET_RMS_MASK 0xF800 /* AIF2DRC_SIG_DET_RMS - [15:11] */
3360#define WM8994_AIF2DRC_SIG_DET_RMS_SHIFT 11 /* AIF2DRC_SIG_DET_RMS - [15:11] */
3361#define WM8994_AIF2DRC_SIG_DET_RMS_WIDTH 5 /* AIF2DRC_SIG_DET_RMS - [15:11] */
3362#define WM8994_AIF2DRC_SIG_DET_PK_MASK 0x0600 /* AIF2DRC_SIG_DET_PK - [10:9] */
3363#define WM8994_AIF2DRC_SIG_DET_PK_SHIFT 9 /* AIF2DRC_SIG_DET_PK - [10:9] */
3364#define WM8994_AIF2DRC_SIG_DET_PK_WIDTH 2 /* AIF2DRC_SIG_DET_PK - [10:9] */
3365#define WM8994_AIF2DRC_NG_ENA 0x0100 /* AIF2DRC_NG_ENA */
3366#define WM8994_AIF2DRC_NG_ENA_MASK 0x0100 /* AIF2DRC_NG_ENA */
3367#define WM8994_AIF2DRC_NG_ENA_SHIFT 8 /* AIF2DRC_NG_ENA */
3368#define WM8994_AIF2DRC_NG_ENA_WIDTH 1 /* AIF2DRC_NG_ENA */
3369#define WM8994_AIF2DRC_SIG_DET_MODE 0x0080 /* AIF2DRC_SIG_DET_MODE */
3370#define WM8994_AIF2DRC_SIG_DET_MODE_MASK 0x0080 /* AIF2DRC_SIG_DET_MODE */
3371#define WM8994_AIF2DRC_SIG_DET_MODE_SHIFT 7 /* AIF2DRC_SIG_DET_MODE */
3372#define WM8994_AIF2DRC_SIG_DET_MODE_WIDTH 1 /* AIF2DRC_SIG_DET_MODE */
3373#define WM8994_AIF2DRC_SIG_DET 0x0040 /* AIF2DRC_SIG_DET */
3374#define WM8994_AIF2DRC_SIG_DET_MASK 0x0040 /* AIF2DRC_SIG_DET */
3375#define WM8994_AIF2DRC_SIG_DET_SHIFT 6 /* AIF2DRC_SIG_DET */
3376#define WM8994_AIF2DRC_SIG_DET_WIDTH 1 /* AIF2DRC_SIG_DET */
3377#define WM8994_AIF2DRC_KNEE2_OP_ENA 0x0020 /* AIF2DRC_KNEE2_OP_ENA */
3378#define WM8994_AIF2DRC_KNEE2_OP_ENA_MASK 0x0020 /* AIF2DRC_KNEE2_OP_ENA */
3379#define WM8994_AIF2DRC_KNEE2_OP_ENA_SHIFT 5 /* AIF2DRC_KNEE2_OP_ENA */
3380#define WM8994_AIF2DRC_KNEE2_OP_ENA_WIDTH 1 /* AIF2DRC_KNEE2_OP_ENA */
3381#define WM8994_AIF2DRC_QR 0x0010 /* AIF2DRC_QR */
3382#define WM8994_AIF2DRC_QR_MASK 0x0010 /* AIF2DRC_QR */
3383#define WM8994_AIF2DRC_QR_SHIFT 4 /* AIF2DRC_QR */
3384#define WM8994_AIF2DRC_QR_WIDTH 1 /* AIF2DRC_QR */
3385#define WM8994_AIF2DRC_ANTICLIP 0x0008 /* AIF2DRC_ANTICLIP */
3386#define WM8994_AIF2DRC_ANTICLIP_MASK 0x0008 /* AIF2DRC_ANTICLIP */
3387#define WM8994_AIF2DRC_ANTICLIP_SHIFT 3 /* AIF2DRC_ANTICLIP */
3388#define WM8994_AIF2DRC_ANTICLIP_WIDTH 1 /* AIF2DRC_ANTICLIP */
3389#define WM8994_AIF2DAC_DRC_ENA 0x0004 /* AIF2DAC_DRC_ENA */
3390#define WM8994_AIF2DAC_DRC_ENA_MASK 0x0004 /* AIF2DAC_DRC_ENA */
3391#define WM8994_AIF2DAC_DRC_ENA_SHIFT 2 /* AIF2DAC_DRC_ENA */
3392#define WM8994_AIF2DAC_DRC_ENA_WIDTH 1 /* AIF2DAC_DRC_ENA */
3393#define WM8994_AIF2ADCL_DRC_ENA 0x0002 /* AIF2ADCL_DRC_ENA */
3394#define WM8994_AIF2ADCL_DRC_ENA_MASK 0x0002 /* AIF2ADCL_DRC_ENA */
3395#define WM8994_AIF2ADCL_DRC_ENA_SHIFT 1 /* AIF2ADCL_DRC_ENA */
3396#define WM8994_AIF2ADCL_DRC_ENA_WIDTH 1 /* AIF2ADCL_DRC_ENA */
3397#define WM8994_AIF2ADCR_DRC_ENA 0x0001 /* AIF2ADCR_DRC_ENA */
3398#define WM8994_AIF2ADCR_DRC_ENA_MASK 0x0001 /* AIF2ADCR_DRC_ENA */
3399#define WM8994_AIF2ADCR_DRC_ENA_SHIFT 0 /* AIF2ADCR_DRC_ENA */
3400#define WM8994_AIF2ADCR_DRC_ENA_WIDTH 1 /* AIF2ADCR_DRC_ENA */
3401
3402/*
3403 * R1345 (0x541) - AIF2 DRC (2)
3404 */
3405#define WM8994_AIF2DRC_ATK_MASK 0x1E00 /* AIF2DRC_ATK - [12:9] */
3406#define WM8994_AIF2DRC_ATK_SHIFT 9 /* AIF2DRC_ATK - [12:9] */
3407#define WM8994_AIF2DRC_ATK_WIDTH 4 /* AIF2DRC_ATK - [12:9] */
3408#define WM8994_AIF2DRC_DCY_MASK 0x01E0 /* AIF2DRC_DCY - [8:5] */
3409#define WM8994_AIF2DRC_DCY_SHIFT 5 /* AIF2DRC_DCY - [8:5] */
3410#define WM8994_AIF2DRC_DCY_WIDTH 4 /* AIF2DRC_DCY - [8:5] */
3411#define WM8994_AIF2DRC_MINGAIN_MASK 0x001C /* AIF2DRC_MINGAIN - [4:2] */
3412#define WM8994_AIF2DRC_MINGAIN_SHIFT 2 /* AIF2DRC_MINGAIN - [4:2] */
3413#define WM8994_AIF2DRC_MINGAIN_WIDTH 3 /* AIF2DRC_MINGAIN - [4:2] */
3414#define WM8994_AIF2DRC_MAXGAIN_MASK 0x0003 /* AIF2DRC_MAXGAIN - [1:0] */
3415#define WM8994_AIF2DRC_MAXGAIN_SHIFT 0 /* AIF2DRC_MAXGAIN - [1:0] */
3416#define WM8994_AIF2DRC_MAXGAIN_WIDTH 2 /* AIF2DRC_MAXGAIN - [1:0] */
3417
3418/*
3419 * R1346 (0x542) - AIF2 DRC (3)
3420 */
3421#define WM8994_AIF2DRC_NG_MINGAIN_MASK 0xF000 /* AIF2DRC_NG_MINGAIN - [15:12] */
3422#define WM8994_AIF2DRC_NG_MINGAIN_SHIFT 12 /* AIF2DRC_NG_MINGAIN - [15:12] */
3423#define WM8994_AIF2DRC_NG_MINGAIN_WIDTH 4 /* AIF2DRC_NG_MINGAIN - [15:12] */
3424#define WM8994_AIF2DRC_NG_EXP_MASK 0x0C00 /* AIF2DRC_NG_EXP - [11:10] */
3425#define WM8994_AIF2DRC_NG_EXP_SHIFT 10 /* AIF2DRC_NG_EXP - [11:10] */
3426#define WM8994_AIF2DRC_NG_EXP_WIDTH 2 /* AIF2DRC_NG_EXP - [11:10] */
3427#define WM8994_AIF2DRC_QR_THR_MASK 0x0300 /* AIF2DRC_QR_THR - [9:8] */
3428#define WM8994_AIF2DRC_QR_THR_SHIFT 8 /* AIF2DRC_QR_THR - [9:8] */
3429#define WM8994_AIF2DRC_QR_THR_WIDTH 2 /* AIF2DRC_QR_THR - [9:8] */
3430#define WM8994_AIF2DRC_QR_DCY_MASK 0x00C0 /* AIF2DRC_QR_DCY - [7:6] */
3431#define WM8994_AIF2DRC_QR_DCY_SHIFT 6 /* AIF2DRC_QR_DCY - [7:6] */
3432#define WM8994_AIF2DRC_QR_DCY_WIDTH 2 /* AIF2DRC_QR_DCY - [7:6] */
3433#define WM8994_AIF2DRC_HI_COMP_MASK 0x0038 /* AIF2DRC_HI_COMP - [5:3] */
3434#define WM8994_AIF2DRC_HI_COMP_SHIFT 3 /* AIF2DRC_HI_COMP - [5:3] */
3435#define WM8994_AIF2DRC_HI_COMP_WIDTH 3 /* AIF2DRC_HI_COMP - [5:3] */
3436#define WM8994_AIF2DRC_LO_COMP_MASK 0x0007 /* AIF2DRC_LO_COMP - [2:0] */
3437#define WM8994_AIF2DRC_LO_COMP_SHIFT 0 /* AIF2DRC_LO_COMP - [2:0] */
3438#define WM8994_AIF2DRC_LO_COMP_WIDTH 3 /* AIF2DRC_LO_COMP - [2:0] */
3439
3440/*
3441 * R1347 (0x543) - AIF2 DRC (4)
3442 */
3443#define WM8994_AIF2DRC_KNEE_IP_MASK 0x07E0 /* AIF2DRC_KNEE_IP - [10:5] */
3444#define WM8994_AIF2DRC_KNEE_IP_SHIFT 5 /* AIF2DRC_KNEE_IP - [10:5] */
3445#define WM8994_AIF2DRC_KNEE_IP_WIDTH 6 /* AIF2DRC_KNEE_IP - [10:5] */
3446#define WM8994_AIF2DRC_KNEE_OP_MASK 0x001F /* AIF2DRC_KNEE_OP - [4:0] */
3447#define WM8994_AIF2DRC_KNEE_OP_SHIFT 0 /* AIF2DRC_KNEE_OP - [4:0] */
3448#define WM8994_AIF2DRC_KNEE_OP_WIDTH 5 /* AIF2DRC_KNEE_OP - [4:0] */
3449
3450/*
3451 * R1348 (0x544) - AIF2 DRC (5)
3452 */
3453#define WM8994_AIF2DRC_KNEE2_IP_MASK 0x03E0 /* AIF2DRC_KNEE2_IP - [9:5] */
3454#define WM8994_AIF2DRC_KNEE2_IP_SHIFT 5 /* AIF2DRC_KNEE2_IP - [9:5] */
3455#define WM8994_AIF2DRC_KNEE2_IP_WIDTH 5 /* AIF2DRC_KNEE2_IP - [9:5] */
3456#define WM8994_AIF2DRC_KNEE2_OP_MASK 0x001F /* AIF2DRC_KNEE2_OP - [4:0] */
3457#define WM8994_AIF2DRC_KNEE2_OP_SHIFT 0 /* AIF2DRC_KNEE2_OP - [4:0] */
3458#define WM8994_AIF2DRC_KNEE2_OP_WIDTH 5 /* AIF2DRC_KNEE2_OP - [4:0] */
3459
3460/*
3461 * R1408 (0x580) - AIF2 EQ Gains (1)
3462 */
3463#define WM8994_AIF2DAC_EQ_B1_GAIN_MASK 0xF800 /* AIF2DAC_EQ_B1_GAIN - [15:11] */
3464#define WM8994_AIF2DAC_EQ_B1_GAIN_SHIFT 11 /* AIF2DAC_EQ_B1_GAIN - [15:11] */
3465#define WM8994_AIF2DAC_EQ_B1_GAIN_WIDTH 5 /* AIF2DAC_EQ_B1_GAIN - [15:11] */
3466#define WM8994_AIF2DAC_EQ_B2_GAIN_MASK 0x07C0 /* AIF2DAC_EQ_B2_GAIN - [10:6] */
3467#define WM8994_AIF2DAC_EQ_B2_GAIN_SHIFT 6 /* AIF2DAC_EQ_B2_GAIN - [10:6] */
3468#define WM8994_AIF2DAC_EQ_B2_GAIN_WIDTH 5 /* AIF2DAC_EQ_B2_GAIN - [10:6] */
3469#define WM8994_AIF2DAC_EQ_B3_GAIN_MASK 0x003E /* AIF2DAC_EQ_B3_GAIN - [5:1] */
3470#define WM8994_AIF2DAC_EQ_B3_GAIN_SHIFT 1 /* AIF2DAC_EQ_B3_GAIN - [5:1] */
3471#define WM8994_AIF2DAC_EQ_B3_GAIN_WIDTH 5 /* AIF2DAC_EQ_B3_GAIN - [5:1] */
3472#define WM8994_AIF2DAC_EQ_ENA 0x0001 /* AIF2DAC_EQ_ENA */
3473#define WM8994_AIF2DAC_EQ_ENA_MASK 0x0001 /* AIF2DAC_EQ_ENA */
3474#define WM8994_AIF2DAC_EQ_ENA_SHIFT 0 /* AIF2DAC_EQ_ENA */
3475#define WM8994_AIF2DAC_EQ_ENA_WIDTH 1 /* AIF2DAC_EQ_ENA */
3476
3477/*
3478 * R1409 (0x581) - AIF2 EQ Gains (2)
3479 */
3480#define WM8994_AIF2DAC_EQ_B4_GAIN_MASK 0xF800 /* AIF2DAC_EQ_B4_GAIN - [15:11] */
3481#define WM8994_AIF2DAC_EQ_B4_GAIN_SHIFT 11 /* AIF2DAC_EQ_B4_GAIN - [15:11] */
3482#define WM8994_AIF2DAC_EQ_B4_GAIN_WIDTH 5 /* AIF2DAC_EQ_B4_GAIN - [15:11] */
3483#define WM8994_AIF2DAC_EQ_B5_GAIN_MASK 0x07C0 /* AIF2DAC_EQ_B5_GAIN - [10:6] */
3484#define WM8994_AIF2DAC_EQ_B5_GAIN_SHIFT 6 /* AIF2DAC_EQ_B5_GAIN - [10:6] */
3485#define WM8994_AIF2DAC_EQ_B5_GAIN_WIDTH 5 /* AIF2DAC_EQ_B5_GAIN - [10:6] */
3486
3487/*
3488 * R1410 (0x582) - AIF2 EQ Band 1 A
3489 */
3490#define WM8994_AIF2DAC_EQ_B1_A_MASK 0xFFFF /* AIF2DAC_EQ_B1_A - [15:0] */
3491#define WM8994_AIF2DAC_EQ_B1_A_SHIFT 0 /* AIF2DAC_EQ_B1_A - [15:0] */
3492#define WM8994_AIF2DAC_EQ_B1_A_WIDTH 16 /* AIF2DAC_EQ_B1_A - [15:0] */
3493
3494/*
3495 * R1411 (0x583) - AIF2 EQ Band 1 B
3496 */
3497#define WM8994_AIF2DAC_EQ_B1_B_MASK 0xFFFF /* AIF2DAC_EQ_B1_B - [15:0] */
3498#define WM8994_AIF2DAC_EQ_B1_B_SHIFT 0 /* AIF2DAC_EQ_B1_B - [15:0] */
3499#define WM8994_AIF2DAC_EQ_B1_B_WIDTH 16 /* AIF2DAC_EQ_B1_B - [15:0] */
3500
3501/*
3502 * R1412 (0x584) - AIF2 EQ Band 1 PG
3503 */
3504#define WM8994_AIF2DAC_EQ_B1_PG_MASK 0xFFFF /* AIF2DAC_EQ_B1_PG - [15:0] */
3505#define WM8994_AIF2DAC_EQ_B1_PG_SHIFT 0 /* AIF2DAC_EQ_B1_PG - [15:0] */
3506#define WM8994_AIF2DAC_EQ_B1_PG_WIDTH 16 /* AIF2DAC_EQ_B1_PG - [15:0] */
3507
3508/*
3509 * R1413 (0x585) - AIF2 EQ Band 2 A
3510 */
3511#define WM8994_AIF2DAC_EQ_B2_A_MASK 0xFFFF /* AIF2DAC_EQ_B2_A - [15:0] */
3512#define WM8994_AIF2DAC_EQ_B2_A_SHIFT 0 /* AIF2DAC_EQ_B2_A - [15:0] */
3513#define WM8994_AIF2DAC_EQ_B2_A_WIDTH 16 /* AIF2DAC_EQ_B2_A - [15:0] */
3514
3515/*
3516 * R1414 (0x586) - AIF2 EQ Band 2 B
3517 */
3518#define WM8994_AIF2DAC_EQ_B2_B_MASK 0xFFFF /* AIF2DAC_EQ_B2_B - [15:0] */
3519#define WM8994_AIF2DAC_EQ_B2_B_SHIFT 0 /* AIF2DAC_EQ_B2_B - [15:0] */
3520#define WM8994_AIF2DAC_EQ_B2_B_WIDTH 16 /* AIF2DAC_EQ_B2_B - [15:0] */
3521
3522/*
3523 * R1415 (0x587) - AIF2 EQ Band 2 C
3524 */
3525#define WM8994_AIF2DAC_EQ_B2_C_MASK 0xFFFF /* AIF2DAC_EQ_B2_C - [15:0] */
3526#define WM8994_AIF2DAC_EQ_B2_C_SHIFT 0 /* AIF2DAC_EQ_B2_C - [15:0] */
3527#define WM8994_AIF2DAC_EQ_B2_C_WIDTH 16 /* AIF2DAC_EQ_B2_C - [15:0] */
3528
3529/*
3530 * R1416 (0x588) - AIF2 EQ Band 2 PG
3531 */
3532#define WM8994_AIF2DAC_EQ_B2_PG_MASK 0xFFFF /* AIF2DAC_EQ_B2_PG - [15:0] */
3533#define WM8994_AIF2DAC_EQ_B2_PG_SHIFT 0 /* AIF2DAC_EQ_B2_PG - [15:0] */
3534#define WM8994_AIF2DAC_EQ_B2_PG_WIDTH 16 /* AIF2DAC_EQ_B2_PG - [15:0] */
3535
3536/*
3537 * R1417 (0x589) - AIF2 EQ Band 3 A
3538 */
3539#define WM8994_AIF2DAC_EQ_B3_A_MASK 0xFFFF /* AIF2DAC_EQ_B3_A - [15:0] */
3540#define WM8994_AIF2DAC_EQ_B3_A_SHIFT 0 /* AIF2DAC_EQ_B3_A - [15:0] */
3541#define WM8994_AIF2DAC_EQ_B3_A_WIDTH 16 /* AIF2DAC_EQ_B3_A - [15:0] */
3542
3543/*
3544 * R1418 (0x58A) - AIF2 EQ Band 3 B
3545 */
3546#define WM8994_AIF2DAC_EQ_B3_B_MASK 0xFFFF /* AIF2DAC_EQ_B3_B - [15:0] */
3547#define WM8994_AIF2DAC_EQ_B3_B_SHIFT 0 /* AIF2DAC_EQ_B3_B - [15:0] */
3548#define WM8994_AIF2DAC_EQ_B3_B_WIDTH 16 /* AIF2DAC_EQ_B3_B - [15:0] */
3549
3550/*
3551 * R1419 (0x58B) - AIF2 EQ Band 3 C
3552 */
3553#define WM8994_AIF2DAC_EQ_B3_C_MASK 0xFFFF /* AIF2DAC_EQ_B3_C - [15:0] */
3554#define WM8994_AIF2DAC_EQ_B3_C_SHIFT 0 /* AIF2DAC_EQ_B3_C - [15:0] */
3555#define WM8994_AIF2DAC_EQ_B3_C_WIDTH 16 /* AIF2DAC_EQ_B3_C - [15:0] */
3556
3557/*
3558 * R1420 (0x58C) - AIF2 EQ Band 3 PG
3559 */
3560#define WM8994_AIF2DAC_EQ_B3_PG_MASK 0xFFFF /* AIF2DAC_EQ_B3_PG - [15:0] */
3561#define WM8994_AIF2DAC_EQ_B3_PG_SHIFT 0 /* AIF2DAC_EQ_B3_PG - [15:0] */
3562#define WM8994_AIF2DAC_EQ_B3_PG_WIDTH 16 /* AIF2DAC_EQ_B3_PG - [15:0] */
3563
3564/*
3565 * R1421 (0x58D) - AIF2 EQ Band 4 A
3566 */
3567#define WM8994_AIF2DAC_EQ_B4_A_MASK 0xFFFF /* AIF2DAC_EQ_B4_A - [15:0] */
3568#define WM8994_AIF2DAC_EQ_B4_A_SHIFT 0 /* AIF2DAC_EQ_B4_A - [15:0] */
3569#define WM8994_AIF2DAC_EQ_B4_A_WIDTH 16 /* AIF2DAC_EQ_B4_A - [15:0] */
3570
3571/*
3572 * R1422 (0x58E) - AIF2 EQ Band 4 B
3573 */
3574#define WM8994_AIF2DAC_EQ_B4_B_MASK 0xFFFF /* AIF2DAC_EQ_B4_B - [15:0] */
3575#define WM8994_AIF2DAC_EQ_B4_B_SHIFT 0 /* AIF2DAC_EQ_B4_B - [15:0] */
3576#define WM8994_AIF2DAC_EQ_B4_B_WIDTH 16 /* AIF2DAC_EQ_B4_B - [15:0] */
3577
3578/*
3579 * R1423 (0x58F) - AIF2 EQ Band 4 C
3580 */
3581#define WM8994_AIF2DAC_EQ_B4_C_MASK 0xFFFF /* AIF2DAC_EQ_B4_C - [15:0] */
3582#define WM8994_AIF2DAC_EQ_B4_C_SHIFT 0 /* AIF2DAC_EQ_B4_C - [15:0] */
3583#define WM8994_AIF2DAC_EQ_B4_C_WIDTH 16 /* AIF2DAC_EQ_B4_C - [15:0] */
3584
3585/*
3586 * R1424 (0x590) - AIF2 EQ Band 4 PG
3587 */
3588#define WM8994_AIF2DAC_EQ_B4_PG_MASK 0xFFFF /* AIF2DAC_EQ_B4_PG - [15:0] */
3589#define WM8994_AIF2DAC_EQ_B4_PG_SHIFT 0 /* AIF2DAC_EQ_B4_PG - [15:0] */
3590#define WM8994_AIF2DAC_EQ_B4_PG_WIDTH 16 /* AIF2DAC_EQ_B4_PG - [15:0] */
3591
3592/*
3593 * R1425 (0x591) - AIF2 EQ Band 5 A
3594 */
3595#define WM8994_AIF2DAC_EQ_B5_A_MASK 0xFFFF /* AIF2DAC_EQ_B5_A - [15:0] */
3596#define WM8994_AIF2DAC_EQ_B5_A_SHIFT 0 /* AIF2DAC_EQ_B5_A - [15:0] */
3597#define WM8994_AIF2DAC_EQ_B5_A_WIDTH 16 /* AIF2DAC_EQ_B5_A - [15:0] */
3598
3599/*
3600 * R1426 (0x592) - AIF2 EQ Band 5 B
3601 */
3602#define WM8994_AIF2DAC_EQ_B5_B_MASK 0xFFFF /* AIF2DAC_EQ_B5_B - [15:0] */
3603#define WM8994_AIF2DAC_EQ_B5_B_SHIFT 0 /* AIF2DAC_EQ_B5_B - [15:0] */
3604#define WM8994_AIF2DAC_EQ_B5_B_WIDTH 16 /* AIF2DAC_EQ_B5_B - [15:0] */
3605
3606/*
3607 * R1427 (0x593) - AIF2 EQ Band 5 PG
3608 */
3609#define WM8994_AIF2DAC_EQ_B5_PG_MASK 0xFFFF /* AIF2DAC_EQ_B5_PG - [15:0] */
3610#define WM8994_AIF2DAC_EQ_B5_PG_SHIFT 0 /* AIF2DAC_EQ_B5_PG - [15:0] */
3611#define WM8994_AIF2DAC_EQ_B5_PG_WIDTH 16 /* AIF2DAC_EQ_B5_PG - [15:0] */
3612
3613/*
3614 * R1536 (0x600) - DAC1 Mixer Volumes
3615 */
3616#define WM8994_ADCR_DAC1_VOL_MASK 0x01E0 /* ADCR_DAC1_VOL - [8:5] */
3617#define WM8994_ADCR_DAC1_VOL_SHIFT 5 /* ADCR_DAC1_VOL - [8:5] */
3618#define WM8994_ADCR_DAC1_VOL_WIDTH 4 /* ADCR_DAC1_VOL - [8:5] */
3619#define WM8994_ADCL_DAC1_VOL_MASK 0x000F /* ADCL_DAC1_VOL - [3:0] */
3620#define WM8994_ADCL_DAC1_VOL_SHIFT 0 /* ADCL_DAC1_VOL - [3:0] */
3621#define WM8994_ADCL_DAC1_VOL_WIDTH 4 /* ADCL_DAC1_VOL - [3:0] */
3622
3623/*
3624 * R1537 (0x601) - DAC1 Left Mixer Routing
3625 */
3626#define WM8994_ADCR_TO_DAC1L 0x0020 /* ADCR_TO_DAC1L */
3627#define WM8994_ADCR_TO_DAC1L_MASK 0x0020 /* ADCR_TO_DAC1L */
3628#define WM8994_ADCR_TO_DAC1L_SHIFT 5 /* ADCR_TO_DAC1L */
3629#define WM8994_ADCR_TO_DAC1L_WIDTH 1 /* ADCR_TO_DAC1L */
3630#define WM8994_ADCL_TO_DAC1L 0x0010 /* ADCL_TO_DAC1L */
3631#define WM8994_ADCL_TO_DAC1L_MASK 0x0010 /* ADCL_TO_DAC1L */
3632#define WM8994_ADCL_TO_DAC1L_SHIFT 4 /* ADCL_TO_DAC1L */
3633#define WM8994_ADCL_TO_DAC1L_WIDTH 1 /* ADCL_TO_DAC1L */
3634#define WM8994_AIF2DACL_TO_DAC1L 0x0004 /* AIF2DACL_TO_DAC1L */
3635#define WM8994_AIF2DACL_TO_DAC1L_MASK 0x0004 /* AIF2DACL_TO_DAC1L */
3636#define WM8994_AIF2DACL_TO_DAC1L_SHIFT 2 /* AIF2DACL_TO_DAC1L */
3637#define WM8994_AIF2DACL_TO_DAC1L_WIDTH 1 /* AIF2DACL_TO_DAC1L */
3638#define WM8994_AIF1DAC2L_TO_DAC1L 0x0002 /* AIF1DAC2L_TO_DAC1L */
3639#define WM8994_AIF1DAC2L_TO_DAC1L_MASK 0x0002 /* AIF1DAC2L_TO_DAC1L */
3640#define WM8994_AIF1DAC2L_TO_DAC1L_SHIFT 1 /* AIF1DAC2L_TO_DAC1L */
3641#define WM8994_AIF1DAC2L_TO_DAC1L_WIDTH 1 /* AIF1DAC2L_TO_DAC1L */
3642#define WM8994_AIF1DAC1L_TO_DAC1L 0x0001 /* AIF1DAC1L_TO_DAC1L */
3643#define WM8994_AIF1DAC1L_TO_DAC1L_MASK 0x0001 /* AIF1DAC1L_TO_DAC1L */
3644#define WM8994_AIF1DAC1L_TO_DAC1L_SHIFT 0 /* AIF1DAC1L_TO_DAC1L */
3645#define WM8994_AIF1DAC1L_TO_DAC1L_WIDTH 1 /* AIF1DAC1L_TO_DAC1L */
3646
3647/*
3648 * R1538 (0x602) - DAC1 Right Mixer Routing
3649 */
3650#define WM8994_ADCR_TO_DAC1R 0x0020 /* ADCR_TO_DAC1R */
3651#define WM8994_ADCR_TO_DAC1R_MASK 0x0020 /* ADCR_TO_DAC1R */
3652#define WM8994_ADCR_TO_DAC1R_SHIFT 5 /* ADCR_TO_DAC1R */
3653#define WM8994_ADCR_TO_DAC1R_WIDTH 1 /* ADCR_TO_DAC1R */
3654#define WM8994_ADCL_TO_DAC1R 0x0010 /* ADCL_TO_DAC1R */
3655#define WM8994_ADCL_TO_DAC1R_MASK 0x0010 /* ADCL_TO_DAC1R */
3656#define WM8994_ADCL_TO_DAC1R_SHIFT 4 /* ADCL_TO_DAC1R */
3657#define WM8994_ADCL_TO_DAC1R_WIDTH 1 /* ADCL_TO_DAC1R */
3658#define WM8994_AIF2DACR_TO_DAC1R 0x0004 /* AIF2DACR_TO_DAC1R */
3659#define WM8994_AIF2DACR_TO_DAC1R_MASK 0x0004 /* AIF2DACR_TO_DAC1R */
3660#define WM8994_AIF2DACR_TO_DAC1R_SHIFT 2 /* AIF2DACR_TO_DAC1R */
3661#define WM8994_AIF2DACR_TO_DAC1R_WIDTH 1 /* AIF2DACR_TO_DAC1R */
3662#define WM8994_AIF1DAC2R_TO_DAC1R 0x0002 /* AIF1DAC2R_TO_DAC1R */
3663#define WM8994_AIF1DAC2R_TO_DAC1R_MASK 0x0002 /* AIF1DAC2R_TO_DAC1R */
3664#define WM8994_AIF1DAC2R_TO_DAC1R_SHIFT 1 /* AIF1DAC2R_TO_DAC1R */
3665#define WM8994_AIF1DAC2R_TO_DAC1R_WIDTH 1 /* AIF1DAC2R_TO_DAC1R */
3666#define WM8994_AIF1DAC1R_TO_DAC1R 0x0001 /* AIF1DAC1R_TO_DAC1R */
3667#define WM8994_AIF1DAC1R_TO_DAC1R_MASK 0x0001 /* AIF1DAC1R_TO_DAC1R */
3668#define WM8994_AIF1DAC1R_TO_DAC1R_SHIFT 0 /* AIF1DAC1R_TO_DAC1R */
3669#define WM8994_AIF1DAC1R_TO_DAC1R_WIDTH 1 /* AIF1DAC1R_TO_DAC1R */
3670
3671/*
3672 * R1539 (0x603) - DAC2 Mixer Volumes
3673 */
3674#define WM8994_ADCR_DAC2_VOL_MASK 0x01E0 /* ADCR_DAC2_VOL - [8:5] */
3675#define WM8994_ADCR_DAC2_VOL_SHIFT 5 /* ADCR_DAC2_VOL - [8:5] */
3676#define WM8994_ADCR_DAC2_VOL_WIDTH 4 /* ADCR_DAC2_VOL - [8:5] */
3677#define WM8994_ADCL_DAC2_VOL_MASK 0x000F /* ADCL_DAC2_VOL - [3:0] */
3678#define WM8994_ADCL_DAC2_VOL_SHIFT 0 /* ADCL_DAC2_VOL - [3:0] */
3679#define WM8994_ADCL_DAC2_VOL_WIDTH 4 /* ADCL_DAC2_VOL - [3:0] */
3680
3681/*
3682 * R1540 (0x604) - DAC2 Left Mixer Routing
3683 */
3684#define WM8994_ADCR_TO_DAC2L 0x0020 /* ADCR_TO_DAC2L */
3685#define WM8994_ADCR_TO_DAC2L_MASK 0x0020 /* ADCR_TO_DAC2L */
3686#define WM8994_ADCR_TO_DAC2L_SHIFT 5 /* ADCR_TO_DAC2L */
3687#define WM8994_ADCR_TO_DAC2L_WIDTH 1 /* ADCR_TO_DAC2L */
3688#define WM8994_ADCL_TO_DAC2L 0x0010 /* ADCL_TO_DAC2L */
3689#define WM8994_ADCL_TO_DAC2L_MASK 0x0010 /* ADCL_TO_DAC2L */
3690#define WM8994_ADCL_TO_DAC2L_SHIFT 4 /* ADCL_TO_DAC2L */
3691#define WM8994_ADCL_TO_DAC2L_WIDTH 1 /* ADCL_TO_DAC2L */
3692#define WM8994_AIF2DACL_TO_DAC2L 0x0004 /* AIF2DACL_TO_DAC2L */
3693#define WM8994_AIF2DACL_TO_DAC2L_MASK 0x0004 /* AIF2DACL_TO_DAC2L */
3694#define WM8994_AIF2DACL_TO_DAC2L_SHIFT 2 /* AIF2DACL_TO_DAC2L */
3695#define WM8994_AIF2DACL_TO_DAC2L_WIDTH 1 /* AIF2DACL_TO_DAC2L */
3696#define WM8994_AIF1DAC2L_TO_DAC2L 0x0002 /* AIF1DAC2L_TO_DAC2L */
3697#define WM8994_AIF1DAC2L_TO_DAC2L_MASK 0x0002 /* AIF1DAC2L_TO_DAC2L */
3698#define WM8994_AIF1DAC2L_TO_DAC2L_SHIFT 1 /* AIF1DAC2L_TO_DAC2L */
3699#define WM8994_AIF1DAC2L_TO_DAC2L_WIDTH 1 /* AIF1DAC2L_TO_DAC2L */
3700#define WM8994_AIF1DAC1L_TO_DAC2L 0x0001 /* AIF1DAC1L_TO_DAC2L */
3701#define WM8994_AIF1DAC1L_TO_DAC2L_MASK 0x0001 /* AIF1DAC1L_TO_DAC2L */
3702#define WM8994_AIF1DAC1L_TO_DAC2L_SHIFT 0 /* AIF1DAC1L_TO_DAC2L */
3703#define WM8994_AIF1DAC1L_TO_DAC2L_WIDTH 1 /* AIF1DAC1L_TO_DAC2L */
3704
3705/*
3706 * R1541 (0x605) - DAC2 Right Mixer Routing
3707 */
3708#define WM8994_ADCR_TO_DAC2R 0x0020 /* ADCR_TO_DAC2R */
3709#define WM8994_ADCR_TO_DAC2R_MASK 0x0020 /* ADCR_TO_DAC2R */
3710#define WM8994_ADCR_TO_DAC2R_SHIFT 5 /* ADCR_TO_DAC2R */
3711#define WM8994_ADCR_TO_DAC2R_WIDTH 1 /* ADCR_TO_DAC2R */
3712#define WM8994_ADCL_TO_DAC2R 0x0010 /* ADCL_TO_DAC2R */
3713#define WM8994_ADCL_TO_DAC2R_MASK 0x0010 /* ADCL_TO_DAC2R */
3714#define WM8994_ADCL_TO_DAC2R_SHIFT 4 /* ADCL_TO_DAC2R */
3715#define WM8994_ADCL_TO_DAC2R_WIDTH 1 /* ADCL_TO_DAC2R */
3716#define WM8994_AIF2DACR_TO_DAC2R 0x0004 /* AIF2DACR_TO_DAC2R */
3717#define WM8994_AIF2DACR_TO_DAC2R_MASK 0x0004 /* AIF2DACR_TO_DAC2R */
3718#define WM8994_AIF2DACR_TO_DAC2R_SHIFT 2 /* AIF2DACR_TO_DAC2R */
3719#define WM8994_AIF2DACR_TO_DAC2R_WIDTH 1 /* AIF2DACR_TO_DAC2R */
3720#define WM8994_AIF1DAC2R_TO_DAC2R 0x0002 /* AIF1DAC2R_TO_DAC2R */
3721#define WM8994_AIF1DAC2R_TO_DAC2R_MASK 0x0002 /* AIF1DAC2R_TO_DAC2R */
3722#define WM8994_AIF1DAC2R_TO_DAC2R_SHIFT 1 /* AIF1DAC2R_TO_DAC2R */
3723#define WM8994_AIF1DAC2R_TO_DAC2R_WIDTH 1 /* AIF1DAC2R_TO_DAC2R */
3724#define WM8994_AIF1DAC1R_TO_DAC2R 0x0001 /* AIF1DAC1R_TO_DAC2R */
3725#define WM8994_AIF1DAC1R_TO_DAC2R_MASK 0x0001 /* AIF1DAC1R_TO_DAC2R */
3726#define WM8994_AIF1DAC1R_TO_DAC2R_SHIFT 0 /* AIF1DAC1R_TO_DAC2R */
3727#define WM8994_AIF1DAC1R_TO_DAC2R_WIDTH 1 /* AIF1DAC1R_TO_DAC2R */
3728
3729/*
3730 * R1542 (0x606) - AIF1 ADC1 Left Mixer Routing
3731 */
3732#define WM8994_ADC1L_TO_AIF1ADC1L 0x0002 /* ADC1L_TO_AIF1ADC1L */
3733#define WM8994_ADC1L_TO_AIF1ADC1L_MASK 0x0002 /* ADC1L_TO_AIF1ADC1L */
3734#define WM8994_ADC1L_TO_AIF1ADC1L_SHIFT 1 /* ADC1L_TO_AIF1ADC1L */
3735#define WM8994_ADC1L_TO_AIF1ADC1L_WIDTH 1 /* ADC1L_TO_AIF1ADC1L */
3736#define WM8994_AIF2DACL_TO_AIF1ADC1L 0x0001 /* AIF2DACL_TO_AIF1ADC1L */
3737#define WM8994_AIF2DACL_TO_AIF1ADC1L_MASK 0x0001 /* AIF2DACL_TO_AIF1ADC1L */
3738#define WM8994_AIF2DACL_TO_AIF1ADC1L_SHIFT 0 /* AIF2DACL_TO_AIF1ADC1L */
3739#define WM8994_AIF2DACL_TO_AIF1ADC1L_WIDTH 1 /* AIF2DACL_TO_AIF1ADC1L */
3740
3741/*
3742 * R1543 (0x607) - AIF1 ADC1 Right Mixer Routing
3743 */
3744#define WM8994_ADC1R_TO_AIF1ADC1R 0x0002 /* ADC1R_TO_AIF1ADC1R */
3745#define WM8994_ADC1R_TO_AIF1ADC1R_MASK 0x0002 /* ADC1R_TO_AIF1ADC1R */
3746#define WM8994_ADC1R_TO_AIF1ADC1R_SHIFT 1 /* ADC1R_TO_AIF1ADC1R */
3747#define WM8994_ADC1R_TO_AIF1ADC1R_WIDTH 1 /* ADC1R_TO_AIF1ADC1R */
3748#define WM8994_AIF2DACR_TO_AIF1ADC1R 0x0001 /* AIF2DACR_TO_AIF1ADC1R */
3749#define WM8994_AIF2DACR_TO_AIF1ADC1R_MASK 0x0001 /* AIF2DACR_TO_AIF1ADC1R */
3750#define WM8994_AIF2DACR_TO_AIF1ADC1R_SHIFT 0 /* AIF2DACR_TO_AIF1ADC1R */
3751#define WM8994_AIF2DACR_TO_AIF1ADC1R_WIDTH 1 /* AIF2DACR_TO_AIF1ADC1R */
3752
3753/*
3754 * R1544 (0x608) - AIF1 ADC2 Left Mixer Routing
3755 */
3756#define WM8994_ADC2L_TO_AIF1ADC2L 0x0002 /* ADC2L_TO_AIF1ADC2L */
3757#define WM8994_ADC2L_TO_AIF1ADC2L_MASK 0x0002 /* ADC2L_TO_AIF1ADC2L */
3758#define WM8994_ADC2L_TO_AIF1ADC2L_SHIFT 1 /* ADC2L_TO_AIF1ADC2L */
3759#define WM8994_ADC2L_TO_AIF1ADC2L_WIDTH 1 /* ADC2L_TO_AIF1ADC2L */
3760#define WM8994_AIF2DACL_TO_AIF1ADC2L 0x0001 /* AIF2DACL_TO_AIF1ADC2L */
3761#define WM8994_AIF2DACL_TO_AIF1ADC2L_MASK 0x0001 /* AIF2DACL_TO_AIF1ADC2L */
3762#define WM8994_AIF2DACL_TO_AIF1ADC2L_SHIFT 0 /* AIF2DACL_TO_AIF1ADC2L */
3763#define WM8994_AIF2DACL_TO_AIF1ADC2L_WIDTH 1 /* AIF2DACL_TO_AIF1ADC2L */
3764
3765/*
3766 * R1545 (0x609) - AIF1 ADC2 Right mixer Routing
3767 */
3768#define WM8994_ADC2R_TO_AIF1ADC2R 0x0002 /* ADC2R_TO_AIF1ADC2R */
3769#define WM8994_ADC2R_TO_AIF1ADC2R_MASK 0x0002 /* ADC2R_TO_AIF1ADC2R */
3770#define WM8994_ADC2R_TO_AIF1ADC2R_SHIFT 1 /* ADC2R_TO_AIF1ADC2R */
3771#define WM8994_ADC2R_TO_AIF1ADC2R_WIDTH 1 /* ADC2R_TO_AIF1ADC2R */
3772#define WM8994_AIF2DACR_TO_AIF1ADC2R 0x0001 /* AIF2DACR_TO_AIF1ADC2R */
3773#define WM8994_AIF2DACR_TO_AIF1ADC2R_MASK 0x0001 /* AIF2DACR_TO_AIF1ADC2R */
3774#define WM8994_AIF2DACR_TO_AIF1ADC2R_SHIFT 0 /* AIF2DACR_TO_AIF1ADC2R */
3775#define WM8994_AIF2DACR_TO_AIF1ADC2R_WIDTH 1 /* AIF2DACR_TO_AIF1ADC2R */
3776
3777/*
3778 * R1552 (0x610) - DAC1 Left Volume
3779 */
3780#define WM8994_DAC1L_MUTE 0x0200 /* DAC1L_MUTE */
3781#define WM8994_DAC1L_MUTE_MASK 0x0200 /* DAC1L_MUTE */
3782#define WM8994_DAC1L_MUTE_SHIFT 9 /* DAC1L_MUTE */
3783#define WM8994_DAC1L_MUTE_WIDTH 1 /* DAC1L_MUTE */
3784#define WM8994_DAC1_VU 0x0100 /* DAC1_VU */
3785#define WM8994_DAC1_VU_MASK 0x0100 /* DAC1_VU */
3786#define WM8994_DAC1_VU_SHIFT 8 /* DAC1_VU */
3787#define WM8994_DAC1_VU_WIDTH 1 /* DAC1_VU */
3788#define WM8994_DAC1L_VOL_MASK 0x00FF /* DAC1L_VOL - [7:0] */
3789#define WM8994_DAC1L_VOL_SHIFT 0 /* DAC1L_VOL - [7:0] */
3790#define WM8994_DAC1L_VOL_WIDTH 8 /* DAC1L_VOL - [7:0] */
3791
3792/*
3793 * R1553 (0x611) - DAC1 Right Volume
3794 */
3795#define WM8994_DAC1R_MUTE 0x0200 /* DAC1R_MUTE */
3796#define WM8994_DAC1R_MUTE_MASK 0x0200 /* DAC1R_MUTE */
3797#define WM8994_DAC1R_MUTE_SHIFT 9 /* DAC1R_MUTE */
3798#define WM8994_DAC1R_MUTE_WIDTH 1 /* DAC1R_MUTE */
3799#define WM8994_DAC1_VU 0x0100 /* DAC1_VU */
3800#define WM8994_DAC1_VU_MASK 0x0100 /* DAC1_VU */
3801#define WM8994_DAC1_VU_SHIFT 8 /* DAC1_VU */
3802#define WM8994_DAC1_VU_WIDTH 1 /* DAC1_VU */
3803#define WM8994_DAC1R_VOL_MASK 0x00FF /* DAC1R_VOL - [7:0] */
3804#define WM8994_DAC1R_VOL_SHIFT 0 /* DAC1R_VOL - [7:0] */
3805#define WM8994_DAC1R_VOL_WIDTH 8 /* DAC1R_VOL - [7:0] */
3806
3807/*
3808 * R1554 (0x612) - DAC2 Left Volume
3809 */
3810#define WM8994_DAC2L_MUTE 0x0200 /* DAC2L_MUTE */
3811#define WM8994_DAC2L_MUTE_MASK 0x0200 /* DAC2L_MUTE */
3812#define WM8994_DAC2L_MUTE_SHIFT 9 /* DAC2L_MUTE */
3813#define WM8994_DAC2L_MUTE_WIDTH 1 /* DAC2L_MUTE */
3814#define WM8994_DAC2_VU 0x0100 /* DAC2_VU */
3815#define WM8994_DAC2_VU_MASK 0x0100 /* DAC2_VU */
3816#define WM8994_DAC2_VU_SHIFT 8 /* DAC2_VU */
3817#define WM8994_DAC2_VU_WIDTH 1 /* DAC2_VU */
3818#define WM8994_DAC2L_VOL_MASK 0x00FF /* DAC2L_VOL - [7:0] */
3819#define WM8994_DAC2L_VOL_SHIFT 0 /* DAC2L_VOL - [7:0] */
3820#define WM8994_DAC2L_VOL_WIDTH 8 /* DAC2L_VOL - [7:0] */
3821
3822/*
3823 * R1555 (0x613) - DAC2 Right Volume
3824 */
3825#define WM8994_DAC2R_MUTE 0x0200 /* DAC2R_MUTE */
3826#define WM8994_DAC2R_MUTE_MASK 0x0200 /* DAC2R_MUTE */
3827#define WM8994_DAC2R_MUTE_SHIFT 9 /* DAC2R_MUTE */
3828#define WM8994_DAC2R_MUTE_WIDTH 1 /* DAC2R_MUTE */
3829#define WM8994_DAC2_VU 0x0100 /* DAC2_VU */
3830#define WM8994_DAC2_VU_MASK 0x0100 /* DAC2_VU */
3831#define WM8994_DAC2_VU_SHIFT 8 /* DAC2_VU */
3832#define WM8994_DAC2_VU_WIDTH 1 /* DAC2_VU */
3833#define WM8994_DAC2R_VOL_MASK 0x00FF /* DAC2R_VOL - [7:0] */
3834#define WM8994_DAC2R_VOL_SHIFT 0 /* DAC2R_VOL - [7:0] */
3835#define WM8994_DAC2R_VOL_WIDTH 8 /* DAC2R_VOL - [7:0] */
3836
3837/*
3838 * R1556 (0x614) - DAC Softmute
3839 */
3840#define WM8994_DAC_SOFTMUTEMODE 0x0002 /* DAC_SOFTMUTEMODE */
3841#define WM8994_DAC_SOFTMUTEMODE_MASK 0x0002 /* DAC_SOFTMUTEMODE */
3842#define WM8994_DAC_SOFTMUTEMODE_SHIFT 1 /* DAC_SOFTMUTEMODE */
3843#define WM8994_DAC_SOFTMUTEMODE_WIDTH 1 /* DAC_SOFTMUTEMODE */
3844#define WM8994_DAC_MUTERATE 0x0001 /* DAC_MUTERATE */
3845#define WM8994_DAC_MUTERATE_MASK 0x0001 /* DAC_MUTERATE */
3846#define WM8994_DAC_MUTERATE_SHIFT 0 /* DAC_MUTERATE */
3847#define WM8994_DAC_MUTERATE_WIDTH 1 /* DAC_MUTERATE */
3848
3849/*
3850 * R1568 (0x620) - Oversampling
3851 */
3852#define WM8994_ADC_OSR128 0x0002 /* ADC_OSR128 */
3853#define WM8994_ADC_OSR128_MASK 0x0002 /* ADC_OSR128 */
3854#define WM8994_ADC_OSR128_SHIFT 1 /* ADC_OSR128 */
3855#define WM8994_ADC_OSR128_WIDTH 1 /* ADC_OSR128 */
3856#define WM8994_DAC_OSR128 0x0001 /* DAC_OSR128 */
3857#define WM8994_DAC_OSR128_MASK 0x0001 /* DAC_OSR128 */
3858#define WM8994_DAC_OSR128_SHIFT 0 /* DAC_OSR128 */
3859#define WM8994_DAC_OSR128_WIDTH 1 /* DAC_OSR128 */
3860
3861/*
3862 * R1569 (0x621) - Sidetone
3863 */
3864#define WM8994_ST_HPF_CUT_MASK 0x0380 /* ST_HPF_CUT - [9:7] */
3865#define WM8994_ST_HPF_CUT_SHIFT 7 /* ST_HPF_CUT - [9:7] */
3866#define WM8994_ST_HPF_CUT_WIDTH 3 /* ST_HPF_CUT - [9:7] */
3867#define WM8994_ST_HPF 0x0040 /* ST_HPF */
3868#define WM8994_ST_HPF_MASK 0x0040 /* ST_HPF */
3869#define WM8994_ST_HPF_SHIFT 6 /* ST_HPF */
3870#define WM8994_ST_HPF_WIDTH 1 /* ST_HPF */
3871#define WM8994_STR_SEL 0x0002 /* STR_SEL */
3872#define WM8994_STR_SEL_MASK 0x0002 /* STR_SEL */
3873#define WM8994_STR_SEL_SHIFT 1 /* STR_SEL */
3874#define WM8994_STR_SEL_WIDTH 1 /* STR_SEL */
3875#define WM8994_STL_SEL 0x0001 /* STL_SEL */
3876#define WM8994_STL_SEL_MASK 0x0001 /* STL_SEL */
3877#define WM8994_STL_SEL_SHIFT 0 /* STL_SEL */
3878#define WM8994_STL_SEL_WIDTH 1 /* STL_SEL */
3879
3880/*
3881 * R1824 (0x720) - Pull Control (1)
3882 */
3883#define WM8994_DMICDAT2_PU 0x0800 /* DMICDAT2_PU */
3884#define WM8994_DMICDAT2_PU_MASK 0x0800 /* DMICDAT2_PU */
3885#define WM8994_DMICDAT2_PU_SHIFT 11 /* DMICDAT2_PU */
3886#define WM8994_DMICDAT2_PU_WIDTH 1 /* DMICDAT2_PU */
3887#define WM8994_DMICDAT2_PD 0x0400 /* DMICDAT2_PD */
3888#define WM8994_DMICDAT2_PD_MASK 0x0400 /* DMICDAT2_PD */
3889#define WM8994_DMICDAT2_PD_SHIFT 10 /* DMICDAT2_PD */
3890#define WM8994_DMICDAT2_PD_WIDTH 1 /* DMICDAT2_PD */
3891#define WM8994_DMICDAT1_PU 0x0200 /* DMICDAT1_PU */
3892#define WM8994_DMICDAT1_PU_MASK 0x0200 /* DMICDAT1_PU */
3893#define WM8994_DMICDAT1_PU_SHIFT 9 /* DMICDAT1_PU */
3894#define WM8994_DMICDAT1_PU_WIDTH 1 /* DMICDAT1_PU */
3895#define WM8994_DMICDAT1_PD 0x0100 /* DMICDAT1_PD */
3896#define WM8994_DMICDAT1_PD_MASK 0x0100 /* DMICDAT1_PD */
3897#define WM8994_DMICDAT1_PD_SHIFT 8 /* DMICDAT1_PD */
3898#define WM8994_DMICDAT1_PD_WIDTH 1 /* DMICDAT1_PD */
3899#define WM8994_MCLK1_PU 0x0080 /* MCLK1_PU */
3900#define WM8994_MCLK1_PU_MASK 0x0080 /* MCLK1_PU */
3901#define WM8994_MCLK1_PU_SHIFT 7 /* MCLK1_PU */
3902#define WM8994_MCLK1_PU_WIDTH 1 /* MCLK1_PU */
3903#define WM8994_MCLK1_PD 0x0040 /* MCLK1_PD */
3904#define WM8994_MCLK1_PD_MASK 0x0040 /* MCLK1_PD */
3905#define WM8994_MCLK1_PD_SHIFT 6 /* MCLK1_PD */
3906#define WM8994_MCLK1_PD_WIDTH 1 /* MCLK1_PD */
3907#define WM8994_DACDAT1_PU 0x0020 /* DACDAT1_PU */
3908#define WM8994_DACDAT1_PU_MASK 0x0020 /* DACDAT1_PU */
3909#define WM8994_DACDAT1_PU_SHIFT 5 /* DACDAT1_PU */
3910#define WM8994_DACDAT1_PU_WIDTH 1 /* DACDAT1_PU */
3911#define WM8994_DACDAT1_PD 0x0010 /* DACDAT1_PD */
3912#define WM8994_DACDAT1_PD_MASK 0x0010 /* DACDAT1_PD */
3913#define WM8994_DACDAT1_PD_SHIFT 4 /* DACDAT1_PD */
3914#define WM8994_DACDAT1_PD_WIDTH 1 /* DACDAT1_PD */
3915#define WM8994_DACLRCLK1_PU 0x0008 /* DACLRCLK1_PU */
3916#define WM8994_DACLRCLK1_PU_MASK 0x0008 /* DACLRCLK1_PU */
3917#define WM8994_DACLRCLK1_PU_SHIFT 3 /* DACLRCLK1_PU */
3918#define WM8994_DACLRCLK1_PU_WIDTH 1 /* DACLRCLK1_PU */
3919#define WM8994_DACLRCLK1_PD 0x0004 /* DACLRCLK1_PD */
3920#define WM8994_DACLRCLK1_PD_MASK 0x0004 /* DACLRCLK1_PD */
3921#define WM8994_DACLRCLK1_PD_SHIFT 2 /* DACLRCLK1_PD */
3922#define WM8994_DACLRCLK1_PD_WIDTH 1 /* DACLRCLK1_PD */
3923#define WM8994_BCLK1_PU 0x0002 /* BCLK1_PU */
3924#define WM8994_BCLK1_PU_MASK 0x0002 /* BCLK1_PU */
3925#define WM8994_BCLK1_PU_SHIFT 1 /* BCLK1_PU */
3926#define WM8994_BCLK1_PU_WIDTH 1 /* BCLK1_PU */
3927#define WM8994_BCLK1_PD 0x0001 /* BCLK1_PD */
3928#define WM8994_BCLK1_PD_MASK 0x0001 /* BCLK1_PD */
3929#define WM8994_BCLK1_PD_SHIFT 0 /* BCLK1_PD */
3930#define WM8994_BCLK1_PD_WIDTH 1 /* BCLK1_PD */
3931
3932/*
3933 * R1825 (0x721) - Pull Control (2)
3934 */
3935#define WM8994_CSNADDR_PD 0x0100 /* CSNADDR_PD */
3936#define WM8994_CSNADDR_PD_MASK 0x0100 /* CSNADDR_PD */
3937#define WM8994_CSNADDR_PD_SHIFT 8 /* CSNADDR_PD */
3938#define WM8994_CSNADDR_PD_WIDTH 1 /* CSNADDR_PD */
3939#define WM8994_LDO2ENA_PD 0x0040 /* LDO2ENA_PD */
3940#define WM8994_LDO2ENA_PD_MASK 0x0040 /* LDO2ENA_PD */
3941#define WM8994_LDO2ENA_PD_SHIFT 6 /* LDO2ENA_PD */
3942#define WM8994_LDO2ENA_PD_WIDTH 1 /* LDO2ENA_PD */
3943#define WM8994_LDO1ENA_PD 0x0010 /* LDO1ENA_PD */
3944#define WM8994_LDO1ENA_PD_MASK 0x0010 /* LDO1ENA_PD */
3945#define WM8994_LDO1ENA_PD_SHIFT 4 /* LDO1ENA_PD */
3946#define WM8994_LDO1ENA_PD_WIDTH 1 /* LDO1ENA_PD */
3947#define WM8994_CIFMODE_PD 0x0004 /* CIFMODE_PD */
3948#define WM8994_CIFMODE_PD_MASK 0x0004 /* CIFMODE_PD */
3949#define WM8994_CIFMODE_PD_SHIFT 2 /* CIFMODE_PD */
3950#define WM8994_CIFMODE_PD_WIDTH 1 /* CIFMODE_PD */
3951#define WM8994_SPKMODE_PU 0x0002 /* SPKMODE_PU */
3952#define WM8994_SPKMODE_PU_MASK 0x0002 /* SPKMODE_PU */
3953#define WM8994_SPKMODE_PU_SHIFT 1 /* SPKMODE_PU */
3954#define WM8994_SPKMODE_PU_WIDTH 1 /* SPKMODE_PU */
3955
3956/*
3957 * R1840 (0x730) - Interrupt Status 1
3958 */
3959#define WM8994_GP11_EINT 0x0400 /* GP11_EINT */
3960#define WM8994_GP11_EINT_MASK 0x0400 /* GP11_EINT */
3961#define WM8994_GP11_EINT_SHIFT 10 /* GP11_EINT */
3962#define WM8994_GP11_EINT_WIDTH 1 /* GP11_EINT */
3963#define WM8994_GP10_EINT 0x0200 /* GP10_EINT */
3964#define WM8994_GP10_EINT_MASK 0x0200 /* GP10_EINT */
3965#define WM8994_GP10_EINT_SHIFT 9 /* GP10_EINT */
3966#define WM8994_GP10_EINT_WIDTH 1 /* GP10_EINT */
3967#define WM8994_GP9_EINT 0x0100 /* GP9_EINT */
3968#define WM8994_GP9_EINT_MASK 0x0100 /* GP9_EINT */
3969#define WM8994_GP9_EINT_SHIFT 8 /* GP9_EINT */
3970#define WM8994_GP9_EINT_WIDTH 1 /* GP9_EINT */
3971#define WM8994_GP8_EINT 0x0080 /* GP8_EINT */
3972#define WM8994_GP8_EINT_MASK 0x0080 /* GP8_EINT */
3973#define WM8994_GP8_EINT_SHIFT 7 /* GP8_EINT */
3974#define WM8994_GP8_EINT_WIDTH 1 /* GP8_EINT */
3975#define WM8994_GP7_EINT 0x0040 /* GP7_EINT */
3976#define WM8994_GP7_EINT_MASK 0x0040 /* GP7_EINT */
3977#define WM8994_GP7_EINT_SHIFT 6 /* GP7_EINT */
3978#define WM8994_GP7_EINT_WIDTH 1 /* GP7_EINT */
3979#define WM8994_GP6_EINT 0x0020 /* GP6_EINT */
3980#define WM8994_GP6_EINT_MASK 0x0020 /* GP6_EINT */
3981#define WM8994_GP6_EINT_SHIFT 5 /* GP6_EINT */
3982#define WM8994_GP6_EINT_WIDTH 1 /* GP6_EINT */
3983#define WM8994_GP5_EINT 0x0010 /* GP5_EINT */
3984#define WM8994_GP5_EINT_MASK 0x0010 /* GP5_EINT */
3985#define WM8994_GP5_EINT_SHIFT 4 /* GP5_EINT */
3986#define WM8994_GP5_EINT_WIDTH 1 /* GP5_EINT */
3987#define WM8994_GP4_EINT 0x0008 /* GP4_EINT */
3988#define WM8994_GP4_EINT_MASK 0x0008 /* GP4_EINT */
3989#define WM8994_GP4_EINT_SHIFT 3 /* GP4_EINT */
3990#define WM8994_GP4_EINT_WIDTH 1 /* GP4_EINT */
3991#define WM8994_GP3_EINT 0x0004 /* GP3_EINT */
3992#define WM8994_GP3_EINT_MASK 0x0004 /* GP3_EINT */
3993#define WM8994_GP3_EINT_SHIFT 2 /* GP3_EINT */
3994#define WM8994_GP3_EINT_WIDTH 1 /* GP3_EINT */
3995#define WM8994_GP2_EINT 0x0002 /* GP2_EINT */
3996#define WM8994_GP2_EINT_MASK 0x0002 /* GP2_EINT */
3997#define WM8994_GP2_EINT_SHIFT 1 /* GP2_EINT */
3998#define WM8994_GP2_EINT_WIDTH 1 /* GP2_EINT */
3999#define WM8994_GP1_EINT 0x0001 /* GP1_EINT */
4000#define WM8994_GP1_EINT_MASK 0x0001 /* GP1_EINT */
4001#define WM8994_GP1_EINT_SHIFT 0 /* GP1_EINT */
4002#define WM8994_GP1_EINT_WIDTH 1 /* GP1_EINT */
4003
4004/*
4005 * R1841 (0x731) - Interrupt Status 2
4006 */
4007#define WM8994_TEMP_WARN_EINT 0x8000 /* TEMP_WARN_EINT */
4008#define WM8994_TEMP_WARN_EINT_MASK 0x8000 /* TEMP_WARN_EINT */
4009#define WM8994_TEMP_WARN_EINT_SHIFT 15 /* TEMP_WARN_EINT */
4010#define WM8994_TEMP_WARN_EINT_WIDTH 1 /* TEMP_WARN_EINT */
4011#define WM8994_DCS_DONE_EINT 0x4000 /* DCS_DONE_EINT */
4012#define WM8994_DCS_DONE_EINT_MASK 0x4000 /* DCS_DONE_EINT */
4013#define WM8994_DCS_DONE_EINT_SHIFT 14 /* DCS_DONE_EINT */
4014#define WM8994_DCS_DONE_EINT_WIDTH 1 /* DCS_DONE_EINT */
4015#define WM8994_WSEQ_DONE_EINT 0x2000 /* WSEQ_DONE_EINT */
4016#define WM8994_WSEQ_DONE_EINT_MASK 0x2000 /* WSEQ_DONE_EINT */
4017#define WM8994_WSEQ_DONE_EINT_SHIFT 13 /* WSEQ_DONE_EINT */
4018#define WM8994_WSEQ_DONE_EINT_WIDTH 1 /* WSEQ_DONE_EINT */
4019#define WM8994_FIFOS_ERR_EINT 0x1000 /* FIFOS_ERR_EINT */
4020#define WM8994_FIFOS_ERR_EINT_MASK 0x1000 /* FIFOS_ERR_EINT */
4021#define WM8994_FIFOS_ERR_EINT_SHIFT 12 /* FIFOS_ERR_EINT */
4022#define WM8994_FIFOS_ERR_EINT_WIDTH 1 /* FIFOS_ERR_EINT */
4023#define WM8994_AIF2DRC_SIG_DET_EINT 0x0800 /* AIF2DRC_SIG_DET_EINT */
4024#define WM8994_AIF2DRC_SIG_DET_EINT_MASK 0x0800 /* AIF2DRC_SIG_DET_EINT */
4025#define WM8994_AIF2DRC_SIG_DET_EINT_SHIFT 11 /* AIF2DRC_SIG_DET_EINT */
4026#define WM8994_AIF2DRC_SIG_DET_EINT_WIDTH 1 /* AIF2DRC_SIG_DET_EINT */
4027#define WM8994_AIF1DRC2_SIG_DET_EINT 0x0400 /* AIF1DRC2_SIG_DET_EINT */
4028#define WM8994_AIF1DRC2_SIG_DET_EINT_MASK 0x0400 /* AIF1DRC2_SIG_DET_EINT */
4029#define WM8994_AIF1DRC2_SIG_DET_EINT_SHIFT 10 /* AIF1DRC2_SIG_DET_EINT */
4030#define WM8994_AIF1DRC2_SIG_DET_EINT_WIDTH 1 /* AIF1DRC2_SIG_DET_EINT */
4031#define WM8994_AIF1DRC1_SIG_DET_EINT 0x0200 /* AIF1DRC1_SIG_DET_EINT */
4032#define WM8994_AIF1DRC1_SIG_DET_EINT_MASK 0x0200 /* AIF1DRC1_SIG_DET_EINT */
4033#define WM8994_AIF1DRC1_SIG_DET_EINT_SHIFT 9 /* AIF1DRC1_SIG_DET_EINT */
4034#define WM8994_AIF1DRC1_SIG_DET_EINT_WIDTH 1 /* AIF1DRC1_SIG_DET_EINT */
4035#define WM8994_SRC2_LOCK_EINT 0x0100 /* SRC2_LOCK_EINT */
4036#define WM8994_SRC2_LOCK_EINT_MASK 0x0100 /* SRC2_LOCK_EINT */
4037#define WM8994_SRC2_LOCK_EINT_SHIFT 8 /* SRC2_LOCK_EINT */
4038#define WM8994_SRC2_LOCK_EINT_WIDTH 1 /* SRC2_LOCK_EINT */
4039#define WM8994_SRC1_LOCK_EINT 0x0080 /* SRC1_LOCK_EINT */
4040#define WM8994_SRC1_LOCK_EINT_MASK 0x0080 /* SRC1_LOCK_EINT */
4041#define WM8994_SRC1_LOCK_EINT_SHIFT 7 /* SRC1_LOCK_EINT */
4042#define WM8994_SRC1_LOCK_EINT_WIDTH 1 /* SRC1_LOCK_EINT */
4043#define WM8994_FLL2_LOCK_EINT 0x0040 /* FLL2_LOCK_EINT */
4044#define WM8994_FLL2_LOCK_EINT_MASK 0x0040 /* FLL2_LOCK_EINT */
4045#define WM8994_FLL2_LOCK_EINT_SHIFT 6 /* FLL2_LOCK_EINT */
4046#define WM8994_FLL2_LOCK_EINT_WIDTH 1 /* FLL2_LOCK_EINT */
4047#define WM8994_FLL1_LOCK_EINT 0x0020 /* FLL1_LOCK_EINT */
4048#define WM8994_FLL1_LOCK_EINT_MASK 0x0020 /* FLL1_LOCK_EINT */
4049#define WM8994_FLL1_LOCK_EINT_SHIFT 5 /* FLL1_LOCK_EINT */
4050#define WM8994_FLL1_LOCK_EINT_WIDTH 1 /* FLL1_LOCK_EINT */
4051#define WM8994_MIC2_SHRT_EINT 0x0010 /* MIC2_SHRT_EINT */
4052#define WM8994_MIC2_SHRT_EINT_MASK 0x0010 /* MIC2_SHRT_EINT */
4053#define WM8994_MIC2_SHRT_EINT_SHIFT 4 /* MIC2_SHRT_EINT */
4054#define WM8994_MIC2_SHRT_EINT_WIDTH 1 /* MIC2_SHRT_EINT */
4055#define WM8994_MIC2_DET_EINT 0x0008 /* MIC2_DET_EINT */
4056#define WM8994_MIC2_DET_EINT_MASK 0x0008 /* MIC2_DET_EINT */
4057#define WM8994_MIC2_DET_EINT_SHIFT 3 /* MIC2_DET_EINT */
4058#define WM8994_MIC2_DET_EINT_WIDTH 1 /* MIC2_DET_EINT */
4059#define WM8994_MIC1_SHRT_EINT 0x0004 /* MIC1_SHRT_EINT */
4060#define WM8994_MIC1_SHRT_EINT_MASK 0x0004 /* MIC1_SHRT_EINT */
4061#define WM8994_MIC1_SHRT_EINT_SHIFT 2 /* MIC1_SHRT_EINT */
4062#define WM8994_MIC1_SHRT_EINT_WIDTH 1 /* MIC1_SHRT_EINT */
4063#define WM8994_MIC1_DET_EINT 0x0002 /* MIC1_DET_EINT */
4064#define WM8994_MIC1_DET_EINT_MASK 0x0002 /* MIC1_DET_EINT */
4065#define WM8994_MIC1_DET_EINT_SHIFT 1 /* MIC1_DET_EINT */
4066#define WM8994_MIC1_DET_EINT_WIDTH 1 /* MIC1_DET_EINT */
4067#define WM8994_TEMP_SHUT_EINT 0x0001 /* TEMP_SHUT_EINT */
4068#define WM8994_TEMP_SHUT_EINT_MASK 0x0001 /* TEMP_SHUT_EINT */
4069#define WM8994_TEMP_SHUT_EINT_SHIFT 0 /* TEMP_SHUT_EINT */
4070#define WM8994_TEMP_SHUT_EINT_WIDTH 1 /* TEMP_SHUT_EINT */
4071
4072/*
4073 * R1842 (0x732) - Interrupt Raw Status 2
4074 */
4075#define WM8994_TEMP_WARN_STS 0x8000 /* TEMP_WARN_STS */
4076#define WM8994_TEMP_WARN_STS_MASK 0x8000 /* TEMP_WARN_STS */
4077#define WM8994_TEMP_WARN_STS_SHIFT 15 /* TEMP_WARN_STS */
4078#define WM8994_TEMP_WARN_STS_WIDTH 1 /* TEMP_WARN_STS */
4079#define WM8994_DCS_DONE_STS 0x4000 /* DCS_DONE_STS */
4080#define WM8994_DCS_DONE_STS_MASK 0x4000 /* DCS_DONE_STS */
4081#define WM8994_DCS_DONE_STS_SHIFT 14 /* DCS_DONE_STS */
4082#define WM8994_DCS_DONE_STS_WIDTH 1 /* DCS_DONE_STS */
4083#define WM8994_WSEQ_DONE_STS 0x2000 /* WSEQ_DONE_STS */
4084#define WM8994_WSEQ_DONE_STS_MASK 0x2000 /* WSEQ_DONE_STS */
4085#define WM8994_WSEQ_DONE_STS_SHIFT 13 /* WSEQ_DONE_STS */
4086#define WM8994_WSEQ_DONE_STS_WIDTH 1 /* WSEQ_DONE_STS */
4087#define WM8994_FIFOS_ERR_STS 0x1000 /* FIFOS_ERR_STS */
4088#define WM8994_FIFOS_ERR_STS_MASK 0x1000 /* FIFOS_ERR_STS */
4089#define WM8994_FIFOS_ERR_STS_SHIFT 12 /* FIFOS_ERR_STS */
4090#define WM8994_FIFOS_ERR_STS_WIDTH 1 /* FIFOS_ERR_STS */
4091#define WM8994_AIF2DRC_SIG_DET_STS 0x0800 /* AIF2DRC_SIG_DET_STS */
4092#define WM8994_AIF2DRC_SIG_DET_STS_MASK 0x0800 /* AIF2DRC_SIG_DET_STS */
4093#define WM8994_AIF2DRC_SIG_DET_STS_SHIFT 11 /* AIF2DRC_SIG_DET_STS */
4094#define WM8994_AIF2DRC_SIG_DET_STS_WIDTH 1 /* AIF2DRC_SIG_DET_STS */
4095#define WM8994_AIF1DRC2_SIG_DET_STS 0x0400 /* AIF1DRC2_SIG_DET_STS */
4096#define WM8994_AIF1DRC2_SIG_DET_STS_MASK 0x0400 /* AIF1DRC2_SIG_DET_STS */
4097#define WM8994_AIF1DRC2_SIG_DET_STS_SHIFT 10 /* AIF1DRC2_SIG_DET_STS */
4098#define WM8994_AIF1DRC2_SIG_DET_STS_WIDTH 1 /* AIF1DRC2_SIG_DET_STS */
4099#define WM8994_AIF1DRC1_SIG_DET_STS 0x0200 /* AIF1DRC1_SIG_DET_STS */
4100#define WM8994_AIF1DRC1_SIG_DET_STS_MASK 0x0200 /* AIF1DRC1_SIG_DET_STS */
4101#define WM8994_AIF1DRC1_SIG_DET_STS_SHIFT 9 /* AIF1DRC1_SIG_DET_STS */
4102#define WM8994_AIF1DRC1_SIG_DET_STS_WIDTH 1 /* AIF1DRC1_SIG_DET_STS */
4103#define WM8994_SRC2_LOCK_STS 0x0100 /* SRC2_LOCK_STS */
4104#define WM8994_SRC2_LOCK_STS_MASK 0x0100 /* SRC2_LOCK_STS */
4105#define WM8994_SRC2_LOCK_STS_SHIFT 8 /* SRC2_LOCK_STS */
4106#define WM8994_SRC2_LOCK_STS_WIDTH 1 /* SRC2_LOCK_STS */
4107#define WM8994_SRC1_LOCK_STS 0x0080 /* SRC1_LOCK_STS */
4108#define WM8994_SRC1_LOCK_STS_MASK 0x0080 /* SRC1_LOCK_STS */
4109#define WM8994_SRC1_LOCK_STS_SHIFT 7 /* SRC1_LOCK_STS */
4110#define WM8994_SRC1_LOCK_STS_WIDTH 1 /* SRC1_LOCK_STS */
4111#define WM8994_FLL2_LOCK_STS 0x0040 /* FLL2_LOCK_STS */
4112#define WM8994_FLL2_LOCK_STS_MASK 0x0040 /* FLL2_LOCK_STS */
4113#define WM8994_FLL2_LOCK_STS_SHIFT 6 /* FLL2_LOCK_STS */
4114#define WM8994_FLL2_LOCK_STS_WIDTH 1 /* FLL2_LOCK_STS */
4115#define WM8994_FLL1_LOCK_STS 0x0020 /* FLL1_LOCK_STS */
4116#define WM8994_FLL1_LOCK_STS_MASK 0x0020 /* FLL1_LOCK_STS */
4117#define WM8994_FLL1_LOCK_STS_SHIFT 5 /* FLL1_LOCK_STS */
4118#define WM8994_FLL1_LOCK_STS_WIDTH 1 /* FLL1_LOCK_STS */
4119#define WM8994_MIC2_SHRT_STS 0x0010 /* MIC2_SHRT_STS */
4120#define WM8994_MIC2_SHRT_STS_MASK 0x0010 /* MIC2_SHRT_STS */
4121#define WM8994_MIC2_SHRT_STS_SHIFT 4 /* MIC2_SHRT_STS */
4122#define WM8994_MIC2_SHRT_STS_WIDTH 1 /* MIC2_SHRT_STS */
4123#define WM8994_MIC2_DET_STS 0x0008 /* MIC2_DET_STS */
4124#define WM8994_MIC2_DET_STS_MASK 0x0008 /* MIC2_DET_STS */
4125#define WM8994_MIC2_DET_STS_SHIFT 3 /* MIC2_DET_STS */
4126#define WM8994_MIC2_DET_STS_WIDTH 1 /* MIC2_DET_STS */
4127#define WM8994_MIC1_SHRT_STS 0x0004 /* MIC1_SHRT_STS */
4128#define WM8994_MIC1_SHRT_STS_MASK 0x0004 /* MIC1_SHRT_STS */
4129#define WM8994_MIC1_SHRT_STS_SHIFT 2 /* MIC1_SHRT_STS */
4130#define WM8994_MIC1_SHRT_STS_WIDTH 1 /* MIC1_SHRT_STS */
4131#define WM8994_MIC1_DET_STS 0x0002 /* MIC1_DET_STS */
4132#define WM8994_MIC1_DET_STS_MASK 0x0002 /* MIC1_DET_STS */
4133#define WM8994_MIC1_DET_STS_SHIFT 1 /* MIC1_DET_STS */
4134#define WM8994_MIC1_DET_STS_WIDTH 1 /* MIC1_DET_STS */
4135#define WM8994_TEMP_SHUT_STS 0x0001 /* TEMP_SHUT_STS */
4136#define WM8994_TEMP_SHUT_STS_MASK 0x0001 /* TEMP_SHUT_STS */
4137#define WM8994_TEMP_SHUT_STS_SHIFT 0 /* TEMP_SHUT_STS */
4138#define WM8994_TEMP_SHUT_STS_WIDTH 1 /* TEMP_SHUT_STS */
4139
4140/*
4141 * R1848 (0x738) - Interrupt Status 1 Mask
4142 */
4143#define WM8994_IM_GP11_EINT 0x0400 /* IM_GP11_EINT */
4144#define WM8994_IM_GP11_EINT_MASK 0x0400 /* IM_GP11_EINT */
4145#define WM8994_IM_GP11_EINT_SHIFT 10 /* IM_GP11_EINT */
4146#define WM8994_IM_GP11_EINT_WIDTH 1 /* IM_GP11_EINT */
4147#define WM8994_IM_GP10_EINT 0x0200 /* IM_GP10_EINT */
4148#define WM8994_IM_GP10_EINT_MASK 0x0200 /* IM_GP10_EINT */
4149#define WM8994_IM_GP10_EINT_SHIFT 9 /* IM_GP10_EINT */
4150#define WM8994_IM_GP10_EINT_WIDTH 1 /* IM_GP10_EINT */
4151#define WM8994_IM_GP9_EINT 0x0100 /* IM_GP9_EINT */
4152#define WM8994_IM_GP9_EINT_MASK 0x0100 /* IM_GP9_EINT */
4153#define WM8994_IM_GP9_EINT_SHIFT 8 /* IM_GP9_EINT */
4154#define WM8994_IM_GP9_EINT_WIDTH 1 /* IM_GP9_EINT */
4155#define WM8994_IM_GP8_EINT 0x0080 /* IM_GP8_EINT */
4156#define WM8994_IM_GP8_EINT_MASK 0x0080 /* IM_GP8_EINT */
4157#define WM8994_IM_GP8_EINT_SHIFT 7 /* IM_GP8_EINT */
4158#define WM8994_IM_GP8_EINT_WIDTH 1 /* IM_GP8_EINT */
4159#define WM8994_IM_GP7_EINT 0x0040 /* IM_GP7_EINT */
4160#define WM8994_IM_GP7_EINT_MASK 0x0040 /* IM_GP7_EINT */
4161#define WM8994_IM_GP7_EINT_SHIFT 6 /* IM_GP7_EINT */
4162#define WM8994_IM_GP7_EINT_WIDTH 1 /* IM_GP7_EINT */
4163#define WM8994_IM_GP6_EINT 0x0020 /* IM_GP6_EINT */
4164#define WM8994_IM_GP6_EINT_MASK 0x0020 /* IM_GP6_EINT */
4165#define WM8994_IM_GP6_EINT_SHIFT 5 /* IM_GP6_EINT */
4166#define WM8994_IM_GP6_EINT_WIDTH 1 /* IM_GP6_EINT */
4167#define WM8994_IM_GP5_EINT 0x0010 /* IM_GP5_EINT */
4168#define WM8994_IM_GP5_EINT_MASK 0x0010 /* IM_GP5_EINT */
4169#define WM8994_IM_GP5_EINT_SHIFT 4 /* IM_GP5_EINT */
4170#define WM8994_IM_GP5_EINT_WIDTH 1 /* IM_GP5_EINT */
4171#define WM8994_IM_GP4_EINT 0x0008 /* IM_GP4_EINT */
4172#define WM8994_IM_GP4_EINT_MASK 0x0008 /* IM_GP4_EINT */
4173#define WM8994_IM_GP4_EINT_SHIFT 3 /* IM_GP4_EINT */
4174#define WM8994_IM_GP4_EINT_WIDTH 1 /* IM_GP4_EINT */
4175#define WM8994_IM_GP3_EINT 0x0004 /* IM_GP3_EINT */
4176#define WM8994_IM_GP3_EINT_MASK 0x0004 /* IM_GP3_EINT */
4177#define WM8994_IM_GP3_EINT_SHIFT 2 /* IM_GP3_EINT */
4178#define WM8994_IM_GP3_EINT_WIDTH 1 /* IM_GP3_EINT */
4179#define WM8994_IM_GP2_EINT 0x0002 /* IM_GP2_EINT */
4180#define WM8994_IM_GP2_EINT_MASK 0x0002 /* IM_GP2_EINT */
4181#define WM8994_IM_GP2_EINT_SHIFT 1 /* IM_GP2_EINT */
4182#define WM8994_IM_GP2_EINT_WIDTH 1 /* IM_GP2_EINT */
4183#define WM8994_IM_GP1_EINT 0x0001 /* IM_GP1_EINT */
4184#define WM8994_IM_GP1_EINT_MASK 0x0001 /* IM_GP1_EINT */
4185#define WM8994_IM_GP1_EINT_SHIFT 0 /* IM_GP1_EINT */
4186#define WM8994_IM_GP1_EINT_WIDTH 1 /* IM_GP1_EINT */
4187
4188/*
4189 * R1849 (0x739) - Interrupt Status 2 Mask
4190 */
4191#define WM8994_IM_TEMP_WARN_EINT 0x8000 /* IM_TEMP_WARN_EINT */
4192#define WM8994_IM_TEMP_WARN_EINT_MASK 0x8000 /* IM_TEMP_WARN_EINT */
4193#define WM8994_IM_TEMP_WARN_EINT_SHIFT 15 /* IM_TEMP_WARN_EINT */
4194#define WM8994_IM_TEMP_WARN_EINT_WIDTH 1 /* IM_TEMP_WARN_EINT */
4195#define WM8994_IM_DCS_DONE_EINT 0x4000 /* IM_DCS_DONE_EINT */
4196#define WM8994_IM_DCS_DONE_EINT_MASK 0x4000 /* IM_DCS_DONE_EINT */
4197#define WM8994_IM_DCS_DONE_EINT_SHIFT 14 /* IM_DCS_DONE_EINT */
4198#define WM8994_IM_DCS_DONE_EINT_WIDTH 1 /* IM_DCS_DONE_EINT */
4199#define WM8994_IM_WSEQ_DONE_EINT 0x2000 /* IM_WSEQ_DONE_EINT */
4200#define WM8994_IM_WSEQ_DONE_EINT_MASK 0x2000 /* IM_WSEQ_DONE_EINT */
4201#define WM8994_IM_WSEQ_DONE_EINT_SHIFT 13 /* IM_WSEQ_DONE_EINT */
4202#define WM8994_IM_WSEQ_DONE_EINT_WIDTH 1 /* IM_WSEQ_DONE_EINT */
4203#define WM8994_IM_FIFOS_ERR_EINT 0x1000 /* IM_FIFOS_ERR_EINT */
4204#define WM8994_IM_FIFOS_ERR_EINT_MASK 0x1000 /* IM_FIFOS_ERR_EINT */
4205#define WM8994_IM_FIFOS_ERR_EINT_SHIFT 12 /* IM_FIFOS_ERR_EINT */
4206#define WM8994_IM_FIFOS_ERR_EINT_WIDTH 1 /* IM_FIFOS_ERR_EINT */
4207#define WM8994_IM_AIF2DRC_SIG_DET_EINT 0x0800 /* IM_AIF2DRC_SIG_DET_EINT */
4208#define WM8994_IM_AIF2DRC_SIG_DET_EINT_MASK 0x0800 /* IM_AIF2DRC_SIG_DET_EINT */
4209#define WM8994_IM_AIF2DRC_SIG_DET_EINT_SHIFT 11 /* IM_AIF2DRC_SIG_DET_EINT */
4210#define WM8994_IM_AIF2DRC_SIG_DET_EINT_WIDTH 1 /* IM_AIF2DRC_SIG_DET_EINT */
4211#define WM8994_IM_AIF1DRC2_SIG_DET_EINT 0x0400 /* IM_AIF1DRC2_SIG_DET_EINT */
4212#define WM8994_IM_AIF1DRC2_SIG_DET_EINT_MASK 0x0400 /* IM_AIF1DRC2_SIG_DET_EINT */
4213#define WM8994_IM_AIF1DRC2_SIG_DET_EINT_SHIFT 10 /* IM_AIF1DRC2_SIG_DET_EINT */
4214#define WM8994_IM_AIF1DRC2_SIG_DET_EINT_WIDTH 1 /* IM_AIF1DRC2_SIG_DET_EINT */
4215#define WM8994_IM_AIF1DRC1_SIG_DET_EINT 0x0200 /* IM_AIF1DRC1_SIG_DET_EINT */
4216#define WM8994_IM_AIF1DRC1_SIG_DET_EINT_MASK 0x0200 /* IM_AIF1DRC1_SIG_DET_EINT */
4217#define WM8994_IM_AIF1DRC1_SIG_DET_EINT_SHIFT 9 /* IM_AIF1DRC1_SIG_DET_EINT */
4218#define WM8994_IM_AIF1DRC1_SIG_DET_EINT_WIDTH 1 /* IM_AIF1DRC1_SIG_DET_EINT */
4219#define WM8994_IM_SRC2_LOCK_EINT 0x0100 /* IM_SRC2_LOCK_EINT */
4220#define WM8994_IM_SRC2_LOCK_EINT_MASK 0x0100 /* IM_SRC2_LOCK_EINT */
4221#define WM8994_IM_SRC2_LOCK_EINT_SHIFT 8 /* IM_SRC2_LOCK_EINT */
4222#define WM8994_IM_SRC2_LOCK_EINT_WIDTH 1 /* IM_SRC2_LOCK_EINT */
4223#define WM8994_IM_SRC1_LOCK_EINT 0x0080 /* IM_SRC1_LOCK_EINT */
4224#define WM8994_IM_SRC1_LOCK_EINT_MASK 0x0080 /* IM_SRC1_LOCK_EINT */
4225#define WM8994_IM_SRC1_LOCK_EINT_SHIFT 7 /* IM_SRC1_LOCK_EINT */
4226#define WM8994_IM_SRC1_LOCK_EINT_WIDTH 1 /* IM_SRC1_LOCK_EINT */
4227#define WM8994_IM_FLL2_LOCK_EINT 0x0040 /* IM_FLL2_LOCK_EINT */
4228#define WM8994_IM_FLL2_LOCK_EINT_MASK 0x0040 /* IM_FLL2_LOCK_EINT */
4229#define WM8994_IM_FLL2_LOCK_EINT_SHIFT 6 /* IM_FLL2_LOCK_EINT */
4230#define WM8994_IM_FLL2_LOCK_EINT_WIDTH 1 /* IM_FLL2_LOCK_EINT */
4231#define WM8994_IM_FLL1_LOCK_EINT 0x0020 /* IM_FLL1_LOCK_EINT */
4232#define WM8994_IM_FLL1_LOCK_EINT_MASK 0x0020 /* IM_FLL1_LOCK_EINT */
4233#define WM8994_IM_FLL1_LOCK_EINT_SHIFT 5 /* IM_FLL1_LOCK_EINT */
4234#define WM8994_IM_FLL1_LOCK_EINT_WIDTH 1 /* IM_FLL1_LOCK_EINT */
4235#define WM8994_IM_MIC2_SHRT_EINT 0x0010 /* IM_MIC2_SHRT_EINT */
4236#define WM8994_IM_MIC2_SHRT_EINT_MASK 0x0010 /* IM_MIC2_SHRT_EINT */
4237#define WM8994_IM_MIC2_SHRT_EINT_SHIFT 4 /* IM_MIC2_SHRT_EINT */
4238#define WM8994_IM_MIC2_SHRT_EINT_WIDTH 1 /* IM_MIC2_SHRT_EINT */
4239#define WM8994_IM_MIC2_DET_EINT 0x0008 /* IM_MIC2_DET_EINT */
4240#define WM8994_IM_MIC2_DET_EINT_MASK 0x0008 /* IM_MIC2_DET_EINT */
4241#define WM8994_IM_MIC2_DET_EINT_SHIFT 3 /* IM_MIC2_DET_EINT */
4242#define WM8994_IM_MIC2_DET_EINT_WIDTH 1 /* IM_MIC2_DET_EINT */
4243#define WM8994_IM_MIC1_SHRT_EINT 0x0004 /* IM_MIC1_SHRT_EINT */
4244#define WM8994_IM_MIC1_SHRT_EINT_MASK 0x0004 /* IM_MIC1_SHRT_EINT */
4245#define WM8994_IM_MIC1_SHRT_EINT_SHIFT 2 /* IM_MIC1_SHRT_EINT */
4246#define WM8994_IM_MIC1_SHRT_EINT_WIDTH 1 /* IM_MIC1_SHRT_EINT */
4247#define WM8994_IM_MIC1_DET_EINT 0x0002 /* IM_MIC1_DET_EINT */
4248#define WM8994_IM_MIC1_DET_EINT_MASK 0x0002 /* IM_MIC1_DET_EINT */
4249#define WM8994_IM_MIC1_DET_EINT_SHIFT 1 /* IM_MIC1_DET_EINT */
4250#define WM8994_IM_MIC1_DET_EINT_WIDTH 1 /* IM_MIC1_DET_EINT */
4251#define WM8994_IM_TEMP_SHUT_EINT 0x0001 /* IM_TEMP_SHUT_EINT */
4252#define WM8994_IM_TEMP_SHUT_EINT_MASK 0x0001 /* IM_TEMP_SHUT_EINT */
4253#define WM8994_IM_TEMP_SHUT_EINT_SHIFT 0 /* IM_TEMP_SHUT_EINT */
4254#define WM8994_IM_TEMP_SHUT_EINT_WIDTH 1 /* IM_TEMP_SHUT_EINT */
4255
4256/*
4257 * R1856 (0x740) - Interrupt Control
4258 */
4259#define WM8994_IM_IRQ 0x0001 /* IM_IRQ */
4260#define WM8994_IM_IRQ_MASK 0x0001 /* IM_IRQ */
4261#define WM8994_IM_IRQ_SHIFT 0 /* IM_IRQ */
4262#define WM8994_IM_IRQ_WIDTH 1 /* IM_IRQ */
4263
4264/*
4265 * R1864 (0x748) - IRQ Debounce
4266 */
4267#define WM8994_TEMP_WARN_DB 0x0020 /* TEMP_WARN_DB */
4268#define WM8994_TEMP_WARN_DB_MASK 0x0020 /* TEMP_WARN_DB */
4269#define WM8994_TEMP_WARN_DB_SHIFT 5 /* TEMP_WARN_DB */
4270#define WM8994_TEMP_WARN_DB_WIDTH 1 /* TEMP_WARN_DB */
4271#define WM8994_MIC2_SHRT_DB 0x0010 /* MIC2_SHRT_DB */
4272#define WM8994_MIC2_SHRT_DB_MASK 0x0010 /* MIC2_SHRT_DB */
4273#define WM8994_MIC2_SHRT_DB_SHIFT 4 /* MIC2_SHRT_DB */
4274#define WM8994_MIC2_SHRT_DB_WIDTH 1 /* MIC2_SHRT_DB */
4275#define WM8994_MIC2_DET_DB 0x0008 /* MIC2_DET_DB */
4276#define WM8994_MIC2_DET_DB_MASK 0x0008 /* MIC2_DET_DB */
4277#define WM8994_MIC2_DET_DB_SHIFT 3 /* MIC2_DET_DB */
4278#define WM8994_MIC2_DET_DB_WIDTH 1 /* MIC2_DET_DB */
4279#define WM8994_MIC1_SHRT_DB 0x0004 /* MIC1_SHRT_DB */
4280#define WM8994_MIC1_SHRT_DB_MASK 0x0004 /* MIC1_SHRT_DB */
4281#define WM8994_MIC1_SHRT_DB_SHIFT 2 /* MIC1_SHRT_DB */
4282#define WM8994_MIC1_SHRT_DB_WIDTH 1 /* MIC1_SHRT_DB */
4283#define WM8994_MIC1_DET_DB 0x0002 /* MIC1_DET_DB */
4284#define WM8994_MIC1_DET_DB_MASK 0x0002 /* MIC1_DET_DB */
4285#define WM8994_MIC1_DET_DB_SHIFT 1 /* MIC1_DET_DB */
4286#define WM8994_MIC1_DET_DB_WIDTH 1 /* MIC1_DET_DB */
4287#define WM8994_TEMP_SHUT_DB 0x0001 /* TEMP_SHUT_DB */
4288#define WM8994_TEMP_SHUT_DB_MASK 0x0001 /* TEMP_SHUT_DB */
4289#define WM8994_TEMP_SHUT_DB_SHIFT 0 /* TEMP_SHUT_DB */
4290#define WM8994_TEMP_SHUT_DB_WIDTH 1 /* TEMP_SHUT_DB */
4291
4292#endif
diff --git a/include/linux/migrate.h b/include/linux/migrate.h
index 527602cdea1c..7f085c97c799 100644
--- a/include/linux/migrate.h
+++ b/include/linux/migrate.h
@@ -12,7 +12,8 @@ typedef struct page *new_page_t(struct page *, unsigned long private, int **);
12extern int putback_lru_pages(struct list_head *l); 12extern int putback_lru_pages(struct list_head *l);
13extern int migrate_page(struct address_space *, 13extern int migrate_page(struct address_space *,
14 struct page *, struct page *); 14 struct page *, struct page *);
15extern int migrate_pages(struct list_head *l, new_page_t x, unsigned long); 15extern int migrate_pages(struct list_head *l, new_page_t x,
16 unsigned long private, int offlining);
16 17
17extern int fail_migrate_page(struct address_space *, 18extern int fail_migrate_page(struct address_space *,
18 struct page *, struct page *); 19 struct page *, struct page *);
@@ -26,10 +27,7 @@ extern int migrate_vmas(struct mm_struct *mm,
26 27
27static inline int putback_lru_pages(struct list_head *l) { return 0; } 28static inline int putback_lru_pages(struct list_head *l) { return 0; }
28static inline int migrate_pages(struct list_head *l, new_page_t x, 29static inline int migrate_pages(struct list_head *l, new_page_t x,
29 unsigned long private) { return -ENOSYS; } 30 unsigned long private, int offlining) { return -ENOSYS; }
30
31static inline int migrate_pages_to(struct list_head *pagelist,
32 struct vm_area_struct *vma, int dest) { return 0; }
33 31
34static inline int migrate_prep(void) { return -ENOSYS; } 32static inline int migrate_prep(void) { return -ENOSYS; }
35 33
diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h
index adaf3c15e449..8b5f7cc0fba6 100644
--- a/include/linux/miscdevice.h
+++ b/include/linux/miscdevice.h
@@ -30,6 +30,7 @@
30#define HPET_MINOR 228 30#define HPET_MINOR 228
31#define FUSE_MINOR 229 31#define FUSE_MINOR 229
32#define KVM_MINOR 232 32#define KVM_MINOR 232
33#define VHOST_NET_MINOR 233
33#define MISC_DYNAMIC_MINOR 255 34#define MISC_DYNAMIC_MINOR 255
34 35
35struct device; 36struct device;
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h
index ce7cc6c7bcbb..e92d1bfdb330 100644
--- a/include/linux/mlx4/device.h
+++ b/include/linux/mlx4/device.h
@@ -61,6 +61,7 @@ enum {
61 MLX4_DEV_CAP_FLAG_BAD_PKEY_CNTR = 1 << 8, 61 MLX4_DEV_CAP_FLAG_BAD_PKEY_CNTR = 1 << 8,
62 MLX4_DEV_CAP_FLAG_BAD_QKEY_CNTR = 1 << 9, 62 MLX4_DEV_CAP_FLAG_BAD_QKEY_CNTR = 1 << 9,
63 MLX4_DEV_CAP_FLAG_DPDP = 1 << 12, 63 MLX4_DEV_CAP_FLAG_DPDP = 1 << 12,
64 MLX4_DEV_CAP_FLAG_BLH = 1 << 15,
64 MLX4_DEV_CAP_FLAG_MEM_WINDOW = 1 << 16, 65 MLX4_DEV_CAP_FLAG_MEM_WINDOW = 1 << 16,
65 MLX4_DEV_CAP_FLAG_APM = 1 << 17, 66 MLX4_DEV_CAP_FLAG_APM = 1 << 17,
66 MLX4_DEV_CAP_FLAG_ATOMIC = 1 << 18, 67 MLX4_DEV_CAP_FLAG_ATOMIC = 1 << 18,
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 24c395694f4d..462acaf36f3a 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -12,6 +12,7 @@
12#include <linux/prio_tree.h> 12#include <linux/prio_tree.h>
13#include <linux/debug_locks.h> 13#include <linux/debug_locks.h>
14#include <linux/mm_types.h> 14#include <linux/mm_types.h>
15#include <linux/range.h>
15 16
16struct mempolicy; 17struct mempolicy;
17struct anon_vma; 18struct anon_vma;
@@ -265,6 +266,8 @@ static inline int get_page_unless_zero(struct page *page)
265 return atomic_inc_not_zero(&page->_count); 266 return atomic_inc_not_zero(&page->_count);
266} 267}
267 268
269extern int page_is_ram(unsigned long pfn);
270
268/* Support for virtually mapped pages */ 271/* Support for virtually mapped pages */
269struct page *vmalloc_to_page(const void *addr); 272struct page *vmalloc_to_page(const void *addr);
270unsigned long vmalloc_to_pfn(const void *addr); 273unsigned long vmalloc_to_pfn(const void *addr);
@@ -620,13 +623,22 @@ void page_address_init(void);
620/* 623/*
621 * On an anonymous page mapped into a user virtual memory area, 624 * On an anonymous page mapped into a user virtual memory area,
622 * page->mapping points to its anon_vma, not to a struct address_space; 625 * page->mapping points to its anon_vma, not to a struct address_space;
623 * with the PAGE_MAPPING_ANON bit set to distinguish it. 626 * with the PAGE_MAPPING_ANON bit set to distinguish it. See rmap.h.
627 *
628 * On an anonymous page in a VM_MERGEABLE area, if CONFIG_KSM is enabled,
629 * the PAGE_MAPPING_KSM bit may be set along with the PAGE_MAPPING_ANON bit;
630 * and then page->mapping points, not to an anon_vma, but to a private
631 * structure which KSM associates with that merged page. See ksm.h.
632 *
633 * PAGE_MAPPING_KSM without PAGE_MAPPING_ANON is currently never used.
624 * 634 *
625 * Please note that, confusingly, "page_mapping" refers to the inode 635 * Please note that, confusingly, "page_mapping" refers to the inode
626 * address_space which maps the page from disk; whereas "page_mapped" 636 * address_space which maps the page from disk; whereas "page_mapped"
627 * refers to user virtual address space into which the page is mapped. 637 * refers to user virtual address space into which the page is mapped.
628 */ 638 */
629#define PAGE_MAPPING_ANON 1 639#define PAGE_MAPPING_ANON 1
640#define PAGE_MAPPING_KSM 2
641#define PAGE_MAPPING_FLAGS (PAGE_MAPPING_ANON | PAGE_MAPPING_KSM)
630 642
631extern struct address_space swapper_space; 643extern struct address_space swapper_space;
632static inline struct address_space *page_mapping(struct page *page) 644static inline struct address_space *page_mapping(struct page *page)
@@ -634,16 +646,19 @@ static inline struct address_space *page_mapping(struct page *page)
634 struct address_space *mapping = page->mapping; 646 struct address_space *mapping = page->mapping;
635 647
636 VM_BUG_ON(PageSlab(page)); 648 VM_BUG_ON(PageSlab(page));
637#ifdef CONFIG_SWAP
638 if (unlikely(PageSwapCache(page))) 649 if (unlikely(PageSwapCache(page)))
639 mapping = &swapper_space; 650 mapping = &swapper_space;
640 else 651 else if (unlikely((unsigned long)mapping & PAGE_MAPPING_ANON))
641#endif
642 if (unlikely((unsigned long)mapping & PAGE_MAPPING_ANON))
643 mapping = NULL; 652 mapping = NULL;
644 return mapping; 653 return mapping;
645} 654}
646 655
656/* Neutral page->mapping pointer to address_space or anon_vma or other */
657static inline void *page_rmapping(struct page *page)
658{
659 return (void *)((unsigned long)page->mapping & ~PAGE_MAPPING_FLAGS);
660}
661
647static inline int PageAnon(struct page *page) 662static inline int PageAnon(struct page *page)
648{ 663{
649 return ((unsigned long)page->mapping & PAGE_MAPPING_ANON) != 0; 664 return ((unsigned long)page->mapping & PAGE_MAPPING_ANON) != 0;
@@ -758,6 +773,7 @@ unsigned long unmap_vmas(struct mmu_gather **tlb,
758 * @pmd_entry: if set, called for each non-empty PMD (3rd-level) entry 773 * @pmd_entry: if set, called for each non-empty PMD (3rd-level) entry
759 * @pte_entry: if set, called for each non-empty PTE (4th-level) entry 774 * @pte_entry: if set, called for each non-empty PTE (4th-level) entry
760 * @pte_hole: if set, called for each hole at all levels 775 * @pte_hole: if set, called for each hole at all levels
776 * @hugetlb_entry: if set, called for each hugetlb entry
761 * 777 *
762 * (see walk_page_range for more details) 778 * (see walk_page_range for more details)
763 */ 779 */
@@ -767,6 +783,8 @@ struct mm_walk {
767 int (*pmd_entry)(pmd_t *, unsigned long, unsigned long, struct mm_walk *); 783 int (*pmd_entry)(pmd_t *, unsigned long, unsigned long, struct mm_walk *);
768 int (*pte_entry)(pte_t *, unsigned long, unsigned long, struct mm_walk *); 784 int (*pte_entry)(pte_t *, unsigned long, unsigned long, struct mm_walk *);
769 int (*pte_hole)(unsigned long, unsigned long, struct mm_walk *); 785 int (*pte_hole)(unsigned long, unsigned long, struct mm_walk *);
786 int (*hugetlb_entry)(pte_t *, unsigned long,
787 unsigned long, unsigned long, struct mm_walk *);
770 struct mm_struct *mm; 788 struct mm_struct *mm;
771 void *private; 789 void *private;
772}; 790};
@@ -852,6 +870,114 @@ extern int mprotect_fixup(struct vm_area_struct *vma,
852 */ 870 */
853int __get_user_pages_fast(unsigned long start, int nr_pages, int write, 871int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
854 struct page **pages); 872 struct page **pages);
873/*
874 * per-process(per-mm_struct) statistics.
875 */
876#if defined(SPLIT_RSS_COUNTING)
877/*
878 * The mm counters are not protected by its page_table_lock,
879 * so must be incremented atomically.
880 */
881static inline void set_mm_counter(struct mm_struct *mm, int member, long value)
882{
883 atomic_long_set(&mm->rss_stat.count[member], value);
884}
885
886unsigned long get_mm_counter(struct mm_struct *mm, int member);
887
888static inline void add_mm_counter(struct mm_struct *mm, int member, long value)
889{
890 atomic_long_add(value, &mm->rss_stat.count[member]);
891}
892
893static inline void inc_mm_counter(struct mm_struct *mm, int member)
894{
895 atomic_long_inc(&mm->rss_stat.count[member]);
896}
897
898static inline void dec_mm_counter(struct mm_struct *mm, int member)
899{
900 atomic_long_dec(&mm->rss_stat.count[member]);
901}
902
903#else /* !USE_SPLIT_PTLOCKS */
904/*
905 * The mm counters are protected by its page_table_lock,
906 * so can be incremented directly.
907 */
908static inline void set_mm_counter(struct mm_struct *mm, int member, long value)
909{
910 mm->rss_stat.count[member] = value;
911}
912
913static inline unsigned long get_mm_counter(struct mm_struct *mm, int member)
914{
915 return mm->rss_stat.count[member];
916}
917
918static inline void add_mm_counter(struct mm_struct *mm, int member, long value)
919{
920 mm->rss_stat.count[member] += value;
921}
922
923static inline void inc_mm_counter(struct mm_struct *mm, int member)
924{
925 mm->rss_stat.count[member]++;
926}
927
928static inline void dec_mm_counter(struct mm_struct *mm, int member)
929{
930 mm->rss_stat.count[member]--;
931}
932
933#endif /* !USE_SPLIT_PTLOCKS */
934
935static inline unsigned long get_mm_rss(struct mm_struct *mm)
936{
937 return get_mm_counter(mm, MM_FILEPAGES) +
938 get_mm_counter(mm, MM_ANONPAGES);
939}
940
941static inline unsigned long get_mm_hiwater_rss(struct mm_struct *mm)
942{
943 return max(mm->hiwater_rss, get_mm_rss(mm));
944}
945
946static inline unsigned long get_mm_hiwater_vm(struct mm_struct *mm)
947{
948 return max(mm->hiwater_vm, mm->total_vm);
949}
950
951static inline void update_hiwater_rss(struct mm_struct *mm)
952{
953 unsigned long _rss = get_mm_rss(mm);
954
955 if ((mm)->hiwater_rss < _rss)
956 (mm)->hiwater_rss = _rss;
957}
958
959static inline void update_hiwater_vm(struct mm_struct *mm)
960{
961 if (mm->hiwater_vm < mm->total_vm)
962 mm->hiwater_vm = mm->total_vm;
963}
964
965static inline void setmax_mm_hiwater_rss(unsigned long *maxrss,
966 struct mm_struct *mm)
967{
968 unsigned long hiwater_rss = get_mm_hiwater_rss(mm);
969
970 if (*maxrss < hiwater_rss)
971 *maxrss = hiwater_rss;
972}
973
974#if defined(SPLIT_RSS_COUNTING)
975void sync_mm_rss(struct task_struct *task, struct mm_struct *mm);
976#else
977static inline void sync_mm_rss(struct task_struct *task, struct mm_struct *mm)
978{
979}
980#endif
855 981
856/* 982/*
857 * A callback you can register to apply pressure to ageable caches. 983 * A callback you can register to apply pressure to ageable caches.
@@ -1022,6 +1148,9 @@ extern void add_active_range(unsigned int nid, unsigned long start_pfn,
1022extern void remove_active_range(unsigned int nid, unsigned long start_pfn, 1148extern void remove_active_range(unsigned int nid, unsigned long start_pfn,
1023 unsigned long end_pfn); 1149 unsigned long end_pfn);
1024extern void remove_all_active_ranges(void); 1150extern void remove_all_active_ranges(void);
1151void sort_node_map(void);
1152unsigned long __absent_pages_in_range(int nid, unsigned long start_pfn,
1153 unsigned long end_pfn);
1025extern unsigned long absent_pages_in_range(unsigned long start_pfn, 1154extern unsigned long absent_pages_in_range(unsigned long start_pfn,
1026 unsigned long end_pfn); 1155 unsigned long end_pfn);
1027extern void get_pfn_range_for_nid(unsigned int nid, 1156extern void get_pfn_range_for_nid(unsigned int nid,
@@ -1029,6 +1158,10 @@ extern void get_pfn_range_for_nid(unsigned int nid,
1029extern unsigned long find_min_pfn_with_active_regions(void); 1158extern unsigned long find_min_pfn_with_active_regions(void);
1030extern void free_bootmem_with_active_regions(int nid, 1159extern void free_bootmem_with_active_regions(int nid,
1031 unsigned long max_low_pfn); 1160 unsigned long max_low_pfn);
1161int add_from_early_node_map(struct range *range, int az,
1162 int nr_range, int nid);
1163void *__alloc_memory_core_early(int nodeid, u64 size, u64 align,
1164 u64 goal, u64 limit);
1032typedef int (*work_fn_t)(unsigned long, unsigned long, void *); 1165typedef int (*work_fn_t)(unsigned long, unsigned long, void *);
1033extern void work_with_active_regions(int nid, work_fn_t work_fn, void *data); 1166extern void work_with_active_regions(int nid, work_fn_t work_fn, void *data);
1034extern void sparse_memory_present_with_active_regions(int nid); 1167extern void sparse_memory_present_with_active_regions(int nid);
@@ -1061,16 +1194,13 @@ extern void si_meminfo(struct sysinfo * val);
1061extern void si_meminfo_node(struct sysinfo *val, int nid); 1194extern void si_meminfo_node(struct sysinfo *val, int nid);
1062extern int after_bootmem; 1195extern int after_bootmem;
1063 1196
1064#ifdef CONFIG_NUMA
1065extern void setup_per_cpu_pageset(void); 1197extern void setup_per_cpu_pageset(void);
1066#else
1067static inline void setup_per_cpu_pageset(void) {}
1068#endif
1069 1198
1070extern void zone_pcp_update(struct zone *zone); 1199extern void zone_pcp_update(struct zone *zone);
1071 1200
1072/* nommu.c */ 1201/* nommu.c */
1073extern atomic_long_t mmap_pages_allocated; 1202extern atomic_long_t mmap_pages_allocated;
1203extern int nommu_shrink_inode_mappings(struct inode *, size_t, size_t);
1074 1204
1075/* prio_tree.c */ 1205/* prio_tree.c */
1076void vma_prio_tree_add(struct vm_area_struct *, struct vm_area_struct *old); 1206void vma_prio_tree_add(struct vm_area_struct *, struct vm_area_struct *old);
@@ -1092,7 +1222,7 @@ static inline void vma_nonlinear_insert(struct vm_area_struct *vma,
1092 1222
1093/* mmap.c */ 1223/* mmap.c */
1094extern int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin); 1224extern int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin);
1095extern void vma_adjust(struct vm_area_struct *vma, unsigned long start, 1225extern int vma_adjust(struct vm_area_struct *vma, unsigned long start,
1096 unsigned long end, pgoff_t pgoff, struct vm_area_struct *insert); 1226 unsigned long end, pgoff_t pgoff, struct vm_area_struct *insert);
1097extern struct vm_area_struct *vma_merge(struct mm_struct *, 1227extern struct vm_area_struct *vma_merge(struct mm_struct *,
1098 struct vm_area_struct *prev, unsigned long addr, unsigned long end, 1228 struct vm_area_struct *prev, unsigned long addr, unsigned long end,
@@ -1300,12 +1430,19 @@ extern int randomize_va_space;
1300const char * arch_vma_name(struct vm_area_struct *vma); 1430const char * arch_vma_name(struct vm_area_struct *vma);
1301void print_vma_addr(char *prefix, unsigned long rip); 1431void print_vma_addr(char *prefix, unsigned long rip);
1302 1432
1433void sparse_mem_maps_populate_node(struct page **map_map,
1434 unsigned long pnum_begin,
1435 unsigned long pnum_end,
1436 unsigned long map_count,
1437 int nodeid);
1438
1303struct page *sparse_mem_map_populate(unsigned long pnum, int nid); 1439struct page *sparse_mem_map_populate(unsigned long pnum, int nid);
1304pgd_t *vmemmap_pgd_populate(unsigned long addr, int node); 1440pgd_t *vmemmap_pgd_populate(unsigned long addr, int node);
1305pud_t *vmemmap_pud_populate(pgd_t *pgd, unsigned long addr, int node); 1441pud_t *vmemmap_pud_populate(pgd_t *pgd, unsigned long addr, int node);
1306pmd_t *vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node); 1442pmd_t *vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node);
1307pte_t *vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node); 1443pte_t *vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node);
1308void *vmemmap_alloc_block(unsigned long size, int node); 1444void *vmemmap_alloc_block(unsigned long size, int node);
1445void *vmemmap_alloc_block_buf(unsigned long size, int node);
1309void vmemmap_verify(pte_t *, int, unsigned long, unsigned long); 1446void vmemmap_verify(pte_t *, int, unsigned long, unsigned long);
1310int vmemmap_populate_basepages(struct page *start_page, 1447int vmemmap_populate_basepages(struct page *start_page,
1311 unsigned long pages, int node); 1448 unsigned long pages, int node);
@@ -1316,11 +1453,19 @@ extern int account_locked_memory(struct mm_struct *mm, struct rlimit *rlim,
1316 size_t size); 1453 size_t size);
1317extern void refund_locked_memory(struct mm_struct *mm, size_t size); 1454extern void refund_locked_memory(struct mm_struct *mm, size_t size);
1318 1455
1456enum mf_flags {
1457 MF_COUNT_INCREASED = 1 << 0,
1458};
1319extern void memory_failure(unsigned long pfn, int trapno); 1459extern void memory_failure(unsigned long pfn, int trapno);
1320extern int __memory_failure(unsigned long pfn, int trapno, int ref); 1460extern int __memory_failure(unsigned long pfn, int trapno, int flags);
1461extern int unpoison_memory(unsigned long pfn);
1321extern int sysctl_memory_failure_early_kill; 1462extern int sysctl_memory_failure_early_kill;
1322extern int sysctl_memory_failure_recovery; 1463extern int sysctl_memory_failure_recovery;
1464extern void shake_page(struct page *p, int access);
1323extern atomic_long_t mce_bad_pages; 1465extern atomic_long_t mce_bad_pages;
1466extern int soft_offline_page(struct page *page, int flags);
1467
1468extern void dump_page(struct page *page);
1324 1469
1325#endif /* __KERNEL__ */ 1470#endif /* __KERNEL__ */
1326#endif /* _LINUX_MM_H */ 1471#endif /* _LINUX_MM_H */
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 84a524afb3dc..b8bb9a6a1f37 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -24,12 +24,6 @@ struct address_space;
24 24
25#define USE_SPLIT_PTLOCKS (NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS) 25#define USE_SPLIT_PTLOCKS (NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS)
26 26
27#if USE_SPLIT_PTLOCKS
28typedef atomic_long_t mm_counter_t;
29#else /* !USE_SPLIT_PTLOCKS */
30typedef unsigned long mm_counter_t;
31#endif /* !USE_SPLIT_PTLOCKS */
32
33/* 27/*
34 * Each physical page in the system has a struct page associated with 28 * Each physical page in the system has a struct page associated with
35 * it to keep track of whatever it is we are using the page for at the 29 * it to keep track of whatever it is we are using the page for at the
@@ -122,7 +116,9 @@ struct vm_region {
122 unsigned long vm_pgoff; /* the offset in vm_file corresponding to vm_start */ 116 unsigned long vm_pgoff; /* the offset in vm_file corresponding to vm_start */
123 struct file *vm_file; /* the backing file or NULL */ 117 struct file *vm_file; /* the backing file or NULL */
124 118
125 atomic_t vm_usage; /* region usage count */ 119 int vm_usage; /* region usage count (access under nommu_region_sem) */
120 bool vm_icache_flushed : 1; /* true if the icache has been flushed for
121 * this region */
126}; 122};
127 123
128/* 124/*
@@ -167,7 +163,8 @@ struct vm_area_struct {
167 * can only be in the i_mmap tree. An anonymous MAP_PRIVATE, stack 163 * can only be in the i_mmap tree. An anonymous MAP_PRIVATE, stack
168 * or brk vma (with NULL file) can only be in an anon_vma list. 164 * or brk vma (with NULL file) can only be in an anon_vma list.
169 */ 165 */
170 struct list_head anon_vma_node; /* Serialized by anon_vma->lock */ 166 struct list_head anon_vma_chain; /* Serialized by mmap_sem &
167 * page_table_lock */
171 struct anon_vma *anon_vma; /* Serialized by page_table_lock */ 168 struct anon_vma *anon_vma; /* Serialized by page_table_lock */
172 169
173 /* Function pointers to deal with this struct. */ 170 /* Function pointers to deal with this struct. */
@@ -199,14 +196,39 @@ struct core_state {
199 struct completion startup; 196 struct completion startup;
200}; 197};
201 198
199enum {
200 MM_FILEPAGES,
201 MM_ANONPAGES,
202 MM_SWAPENTS,
203 NR_MM_COUNTERS
204};
205
206#if USE_SPLIT_PTLOCKS && defined(CONFIG_MMU)
207#define SPLIT_RSS_COUNTING
208struct mm_rss_stat {
209 atomic_long_t count[NR_MM_COUNTERS];
210};
211/* per-thread cached information, */
212struct task_rss_stat {
213 int events; /* for synchronization threshold */
214 int count[NR_MM_COUNTERS];
215};
216#else /* !USE_SPLIT_PTLOCKS */
217struct mm_rss_stat {
218 unsigned long count[NR_MM_COUNTERS];
219};
220#endif /* !USE_SPLIT_PTLOCKS */
221
202struct mm_struct { 222struct mm_struct {
203 struct vm_area_struct * mmap; /* list of VMAs */ 223 struct vm_area_struct * mmap; /* list of VMAs */
204 struct rb_root mm_rb; 224 struct rb_root mm_rb;
205 struct vm_area_struct * mmap_cache; /* last find_vma result */ 225 struct vm_area_struct * mmap_cache; /* last find_vma result */
226#ifdef CONFIG_MMU
206 unsigned long (*get_unmapped_area) (struct file *filp, 227 unsigned long (*get_unmapped_area) (struct file *filp,
207 unsigned long addr, unsigned long len, 228 unsigned long addr, unsigned long len,
208 unsigned long pgoff, unsigned long flags); 229 unsigned long pgoff, unsigned long flags);
209 void (*unmap_area) (struct mm_struct *mm, unsigned long addr); 230 void (*unmap_area) (struct mm_struct *mm, unsigned long addr);
231#endif
210 unsigned long mmap_base; /* base of mmap area */ 232 unsigned long mmap_base; /* base of mmap area */
211 unsigned long task_size; /* size of task vm space */ 233 unsigned long task_size; /* size of task vm space */
212 unsigned long cached_hole_size; /* if non-zero, the largest hole below free_area_cache */ 234 unsigned long cached_hole_size; /* if non-zero, the largest hole below free_area_cache */
@@ -223,11 +245,6 @@ struct mm_struct {
223 * by mmlist_lock 245 * by mmlist_lock
224 */ 246 */
225 247
226 /* Special counters, in some configurations protected by the
227 * page_table_lock, in other configurations by being atomic.
228 */
229 mm_counter_t _file_rss;
230 mm_counter_t _anon_rss;
231 248
232 unsigned long hiwater_rss; /* High-watermark of RSS usage */ 249 unsigned long hiwater_rss; /* High-watermark of RSS usage */
233 unsigned long hiwater_vm; /* High-water virtual memory usage */ 250 unsigned long hiwater_vm; /* High-water virtual memory usage */
@@ -240,6 +257,12 @@ struct mm_struct {
240 257
241 unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */ 258 unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */
242 259
260 /*
261 * Special counters, in some configurations protected by the
262 * page_table_lock, in other configurations by being atomic.
263 */
264 struct mm_rss_stat rss_stat;
265
243 struct linux_binfmt *binfmt; 266 struct linux_binfmt *binfmt;
244 267
245 cpumask_t cpu_vm_mask; 268 cpumask_t cpu_vm_mask;
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
index 2ee22e8af110..d02d2c6e0cfe 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -99,6 +99,8 @@ struct mmc_card {
99#define MMC_STATE_BLOCKADDR (1<<3) /* card uses block-addressing */ 99#define MMC_STATE_BLOCKADDR (1<<3) /* card uses block-addressing */
100 unsigned int quirks; /* card quirks */ 100 unsigned int quirks; /* card quirks */
101#define MMC_QUIRK_LENIENT_FN0 (1<<0) /* allow SDIO FN0 writes outside of the VS CCCR range */ 101#define MMC_QUIRK_LENIENT_FN0 (1<<0) /* allow SDIO FN0 writes outside of the VS CCCR range */
102#define MMC_QUIRK_BLKSZ_FOR_BYTE_MODE (1<<1) /* use func->cur_blksize */
103 /* for byte mode */
102 104
103 u32 raw_cid[4]; /* raw card CID */ 105 u32 raw_cid[4]; /* raw card CID */
104 u32 raw_csd[4]; /* raw card CSD */ 106 u32 raw_csd[4]; /* raw card CSD */
@@ -139,6 +141,11 @@ static inline int mmc_card_lenient_fn0(const struct mmc_card *c)
139 return c->quirks & MMC_QUIRK_LENIENT_FN0; 141 return c->quirks & MMC_QUIRK_LENIENT_FN0;
140} 142}
141 143
144static inline int mmc_blksz_for_byte_mode(const struct mmc_card *c)
145{
146 return c->quirks & MMC_QUIRK_BLKSZ_FOR_BYTE_MODE;
147}
148
142#define mmc_card_name(c) ((c)->cid.prod_name) 149#define mmc_card_name(c) ((c)->cid.prod_name)
143#define mmc_card_id(c) (dev_name(&(c)->dev)) 150#define mmc_card_id(c) (dev_name(&(c)->dev))
144 151
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index eaf36364b7d4..43eaf5ca5848 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -14,6 +14,7 @@
14#include <linux/sched.h> 14#include <linux/sched.h>
15 15
16#include <linux/mmc/core.h> 16#include <linux/mmc/core.h>
17#include <linux/mmc/pm.h>
17 18
18struct mmc_ios { 19struct mmc_ios {
19 unsigned int clock; /* clock rate */ 20 unsigned int clock; /* clock rate */
@@ -152,6 +153,8 @@ struct mmc_host {
152#define MMC_CAP_NONREMOVABLE (1 << 8) /* Nonremovable e.g. eMMC */ 153#define MMC_CAP_NONREMOVABLE (1 << 8) /* Nonremovable e.g. eMMC */
153#define MMC_CAP_WAIT_WHILE_BUSY (1 << 9) /* Waits while card is busy */ 154#define MMC_CAP_WAIT_WHILE_BUSY (1 << 9) /* Waits while card is busy */
154 155
156 mmc_pm_flag_t pm_caps; /* supported pm features */
157
155 /* host specific block data */ 158 /* host specific block data */
156 unsigned int max_seg_size; /* see blk_queue_max_segment_size */ 159 unsigned int max_seg_size; /* see blk_queue_max_segment_size */
157 unsigned short max_hw_segs; /* see blk_queue_max_hw_segments */ 160 unsigned short max_hw_segs; /* see blk_queue_max_hw_segments */
@@ -197,6 +200,8 @@ struct mmc_host {
197 struct task_struct *sdio_irq_thread; 200 struct task_struct *sdio_irq_thread;
198 atomic_t sdio_irq_thread_abort; 201 atomic_t sdio_irq_thread_abort;
199 202
203 mmc_pm_flag_t pm_flags; /* requested pm features */
204
200#ifdef CONFIG_LEDS_TRIGGERS 205#ifdef CONFIG_LEDS_TRIGGERS
201 struct led_trigger *led; /* activity led */ 206 struct led_trigger *led; /* activity led */
202#endif 207#endif
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h
index c02c8db73701..8a49cbf0376d 100644
--- a/include/linux/mmc/mmc.h
+++ b/include/linux/mmc/mmc.h
@@ -268,6 +268,7 @@ struct _mmc_csd {
268 268
269#define EXT_CSD_CARD_TYPE_26 (1<<0) /* Card can run at 26MHz */ 269#define EXT_CSD_CARD_TYPE_26 (1<<0) /* Card can run at 26MHz */
270#define EXT_CSD_CARD_TYPE_52 (1<<1) /* Card can run at 52MHz */ 270#define EXT_CSD_CARD_TYPE_52 (1<<1) /* Card can run at 52MHz */
271#define EXT_CSD_CARD_TYPE_MASK 0x3 /* Mask out reserved and DDR bits */
271 272
272#define EXT_CSD_BUS_WIDTH_1 0 /* Card is in 1 bit mode */ 273#define EXT_CSD_BUS_WIDTH_1 0 /* Card is in 1 bit mode */
273#define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */ 274#define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */
diff --git a/include/linux/mmc/pm.h b/include/linux/mmc/pm.h
new file mode 100644
index 000000000000..d37aac49cf9a
--- /dev/null
+++ b/include/linux/mmc/pm.h
@@ -0,0 +1,30 @@
1/*
2 * linux/include/linux/mmc/pm.h
3 *
4 * Author: Nicolas Pitre
5 * Copyright: (C) 2009 Marvell Technology Group Ltd.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#ifndef LINUX_MMC_PM_H
13#define LINUX_MMC_PM_H
14
15/*
16 * These flags are used to describe power management features that
17 * some cards (typically SDIO cards) might wish to benefit from when
18 * the host system is being suspended. There are several layers of
19 * abstractions involved, from the host controller driver, to the MMC core
20 * code, to the SDIO core code, to finally get to the actual SDIO function
21 * driver. This file is therefore used for common definitions shared across
22 * all those layers.
23 */
24
25typedef unsigned int mmc_pm_flag_t;
26
27#define MMC_PM_KEEP_POWER (1 << 0) /* preserve card power during suspend */
28#define MMC_PM_WAKE_SDIO_IRQ (1 << 1) /* wake up host system on SDIO IRQ assertion */
29
30#endif
diff --git a/include/linux/mmc/sdio.h b/include/linux/mmc/sdio.h
index 47ba464f5170..0ebaef577ff5 100644
--- a/include/linux/mmc/sdio.h
+++ b/include/linux/mmc/sdio.h
@@ -95,6 +95,8 @@
95#define SDIO_BUS_WIDTH_1BIT 0x00 95#define SDIO_BUS_WIDTH_1BIT 0x00
96#define SDIO_BUS_WIDTH_4BIT 0x02 96#define SDIO_BUS_WIDTH_4BIT 0x02
97 97
98#define SDIO_BUS_ASYNC_INT 0x20
99
98#define SDIO_BUS_CD_DISABLE 0x80 /* disable pull-up on DAT3 (pin 1) */ 100#define SDIO_BUS_CD_DISABLE 0x80 /* disable pull-up on DAT3 (pin 1) */
99 101
100#define SDIO_CCCR_CAPS 0x08 102#define SDIO_CCCR_CAPS 0x08
diff --git a/include/linux/mmc/sdio_func.h b/include/linux/mmc/sdio_func.h
index ac3ab683fec6..c6c0cceba5fe 100644
--- a/include/linux/mmc/sdio_func.h
+++ b/include/linux/mmc/sdio_func.h
@@ -15,6 +15,8 @@
15#include <linux/device.h> 15#include <linux/device.h>
16#include <linux/mod_devicetable.h> 16#include <linux/mod_devicetable.h>
17 17
18#include <linux/mmc/pm.h>
19
18struct mmc_card; 20struct mmc_card;
19struct sdio_func; 21struct sdio_func;
20 22
@@ -153,5 +155,8 @@ extern unsigned char sdio_f0_readb(struct sdio_func *func,
153extern void sdio_f0_writeb(struct sdio_func *func, unsigned char b, 155extern void sdio_f0_writeb(struct sdio_func *func, unsigned char b,
154 unsigned int addr, int *err_ret); 156 unsigned int addr, int *err_ret);
155 157
158extern mmc_pm_flag_t sdio_get_host_pm_caps(struct sdio_func *func);
159extern int sdio_set_host_pm_flags(struct sdio_func *func, mmc_pm_flag_t flags);
160
156#endif 161#endif
157 162
diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h
index 2dbfb5a05994..33b2ea09a4ad 100644
--- a/include/linux/mmc/sdio_ids.h
+++ b/include/linux/mmc/sdio_ids.h
@@ -28,6 +28,7 @@
28#define SDIO_DEVICE_ID_INTEL_IWMC3200TOP 0x1404 28#define SDIO_DEVICE_ID_INTEL_IWMC3200TOP 0x1404
29#define SDIO_DEVICE_ID_INTEL_IWMC3200GPS 0x1405 29#define SDIO_DEVICE_ID_INTEL_IWMC3200GPS 0x1405
30#define SDIO_DEVICE_ID_INTEL_IWMC3200BT 0x1406 30#define SDIO_DEVICE_ID_INTEL_IWMC3200BT 0x1406
31#define SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX_2G5 0x1407
31 32
32#define SDIO_VENDOR_ID_MARVELL 0x02df 33#define SDIO_VENDOR_ID_MARVELL 0x02df
33#define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103 34#define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103
diff --git a/include/linux/mmdebug.h b/include/linux/mmdebug.h
index 8a5509877192..ee24ef8ab616 100644
--- a/include/linux/mmdebug.h
+++ b/include/linux/mmdebug.h
@@ -1,8 +1,6 @@
1#ifndef LINUX_MM_DEBUG_H 1#ifndef LINUX_MM_DEBUG_H
2#define LINUX_MM_DEBUG_H 1 2#define LINUX_MM_DEBUG_H 1
3 3
4#include <linux/autoconf.h>
5
6#ifdef CONFIG_DEBUG_VM 4#ifdef CONFIG_DEBUG_VM
7#define VM_BUG_ON(cond) BUG_ON(cond) 5#define VM_BUG_ON(cond) BUG_ON(cond)
8#else 6#else
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 6f7561730d88..cf9e458e96b0 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -15,7 +15,7 @@
15#include <linux/seqlock.h> 15#include <linux/seqlock.h>
16#include <linux/nodemask.h> 16#include <linux/nodemask.h>
17#include <linux/pageblock-flags.h> 17#include <linux/pageblock-flags.h>
18#include <linux/bounds.h> 18#include <generated/bounds.h>
19#include <asm/atomic.h> 19#include <asm/atomic.h>
20#include <asm/page.h> 20#include <asm/page.h>
21 21
@@ -184,13 +184,7 @@ struct per_cpu_pageset {
184 s8 stat_threshold; 184 s8 stat_threshold;
185 s8 vm_stat_diff[NR_VM_ZONE_STAT_ITEMS]; 185 s8 vm_stat_diff[NR_VM_ZONE_STAT_ITEMS];
186#endif 186#endif
187} ____cacheline_aligned_in_smp; 187};
188
189#ifdef CONFIG_NUMA
190#define zone_pcp(__z, __cpu) ((__z)->pageset[(__cpu)])
191#else
192#define zone_pcp(__z, __cpu) (&(__z)->pageset[(__cpu)])
193#endif
194 188
195#endif /* !__GENERATING_BOUNDS.H */ 189#endif /* !__GENERATING_BOUNDS.H */
196 190
@@ -306,14 +300,13 @@ struct zone {
306 */ 300 */
307 unsigned long min_unmapped_pages; 301 unsigned long min_unmapped_pages;
308 unsigned long min_slab_pages; 302 unsigned long min_slab_pages;
309 struct per_cpu_pageset *pageset[NR_CPUS];
310#else
311 struct per_cpu_pageset pageset[NR_CPUS];
312#endif 303#endif
304 struct per_cpu_pageset __percpu *pageset;
313 /* 305 /*
314 * free areas of different sizes 306 * free areas of different sizes
315 */ 307 */
316 spinlock_t lock; 308 spinlock_t lock;
309 int all_unreclaimable; /* All pages pinned */
317#ifdef CONFIG_MEMORY_HOTPLUG 310#ifdef CONFIG_MEMORY_HOTPLUG
318 /* see spanned/present_pages for more description */ 311 /* see spanned/present_pages for more description */
319 seqlock_t span_seqlock; 312 seqlock_t span_seqlock;
@@ -349,7 +342,7 @@ struct zone {
349 * prev_priority holds the scanning priority for this zone. It is 342 * prev_priority holds the scanning priority for this zone. It is
350 * defined as the scanning priority at which we achieved our reclaim 343 * defined as the scanning priority at which we achieved our reclaim
351 * target at the previous try_to_free_pages() or balance_pgdat() 344 * target at the previous try_to_free_pages() or balance_pgdat()
352 * invokation. 345 * invocation.
353 * 346 *
354 * We use prev_priority as a measure of how much stress page reclaim is 347 * We use prev_priority as a measure of how much stress page reclaim is
355 * under - it drives the swappiness decision: whether to unmap mapped 348 * under - it drives the swappiness decision: whether to unmap mapped
@@ -425,7 +418,6 @@ struct zone {
425} ____cacheline_internodealigned_in_smp; 418} ____cacheline_internodealigned_in_smp;
426 419
427typedef enum { 420typedef enum {
428 ZONE_ALL_UNRECLAIMABLE, /* all pages pinned */
429 ZONE_RECLAIM_LOCKED, /* prevents concurrent reclaim */ 421 ZONE_RECLAIM_LOCKED, /* prevents concurrent reclaim */
430 ZONE_OOM_LOCKED, /* zone is in OOM killer zonelist */ 422 ZONE_OOM_LOCKED, /* zone is in OOM killer zonelist */
431} zone_flags_t; 423} zone_flags_t;
@@ -445,11 +437,6 @@ static inline void zone_clear_flag(struct zone *zone, zone_flags_t flag)
445 clear_bit(flag, &zone->flags); 437 clear_bit(flag, &zone->flags);
446} 438}
447 439
448static inline int zone_is_all_unreclaimable(const struct zone *zone)
449{
450 return test_bit(ZONE_ALL_UNRECLAIMABLE, &zone->flags);
451}
452
453static inline int zone_is_reclaim_locked(const struct zone *zone) 440static inline int zone_is_reclaim_locked(const struct zone *zone)
454{ 441{
455 return test_bit(ZONE_RECLAIM_LOCKED, &zone->flags); 442 return test_bit(ZONE_RECLAIM_LOCKED, &zone->flags);
@@ -620,7 +607,9 @@ typedef struct pglist_data {
620 struct page_cgroup *node_page_cgroup; 607 struct page_cgroup *node_page_cgroup;
621#endif 608#endif
622#endif 609#endif
610#ifndef CONFIG_NO_BOOTMEM
623 struct bootmem_data *bdata; 611 struct bootmem_data *bdata;
612#endif
624#ifdef CONFIG_MEMORY_HOTPLUG 613#ifdef CONFIG_MEMORY_HOTPLUG
625 /* 614 /*
626 * Must be held any time you expect node_start_pfn, node_present_pages 615 * Must be held any time you expect node_start_pfn, node_present_pages
diff --git a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h
index d74785c2393a..0b89efc6f215 100644
--- a/include/linux/mnt_namespace.h
+++ b/include/linux/mnt_namespace.h
@@ -35,6 +35,7 @@ static inline void get_mnt_ns(struct mnt_namespace *ns)
35extern const struct seq_operations mounts_op; 35extern const struct seq_operations mounts_op;
36extern const struct seq_operations mountinfo_op; 36extern const struct seq_operations mountinfo_op;
37extern const struct seq_operations mountstats_op; 37extern const struct seq_operations mountstats_op;
38extern int mnt_had_events(struct proc_mounts *);
38 39
39#endif 40#endif
40#endif 41#endif
diff --git a/include/linux/module.h b/include/linux/module.h
index 482efc865acf..515d53ae6a79 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -17,7 +17,7 @@
17#include <linux/moduleparam.h> 17#include <linux/moduleparam.h>
18#include <linux/tracepoint.h> 18#include <linux/tracepoint.h>
19 19
20#include <asm/local.h> 20#include <linux/percpu.h>
21#include <asm/module.h> 21#include <asm/module.h>
22 22
23#include <trace/events/module.h> 23#include <trace/events/module.h>
@@ -25,8 +25,10 @@
25/* Not Yet Implemented */ 25/* Not Yet Implemented */
26#define MODULE_SUPPORTED_DEVICE(name) 26#define MODULE_SUPPORTED_DEVICE(name)
27 27
28/* some toolchains uses a `_' prefix for all user symbols */ 28/* Some toolchains use a `_' prefix for all user symbols. */
29#ifndef MODULE_SYMBOL_PREFIX 29#ifdef CONFIG_SYMBOL_PREFIX
30#define MODULE_SYMBOL_PREFIX CONFIG_SYMBOL_PREFIX
31#else
30#define MODULE_SYMBOL_PREFIX "" 32#define MODULE_SYMBOL_PREFIX ""
31#endif 33#endif
32 34
@@ -173,6 +175,7 @@ struct notifier_block;
173 175
174#ifdef CONFIG_MODULES 176#ifdef CONFIG_MODULES
175 177
178extern int modules_disabled; /* for sysctl */
176/* Get/put a kernel symbol (calls must be symmetric) */ 179/* Get/put a kernel symbol (calls must be symmetric) */
177void *__symbol_get(const char *symbol); 180void *__symbol_get(const char *symbol);
178void *__symbol_get_gpl(const char *symbol); 181void *__symbol_get_gpl(const char *symbol);
@@ -327,8 +330,11 @@ struct module
327 struct module_notes_attrs *notes_attrs; 330 struct module_notes_attrs *notes_attrs;
328#endif 331#endif
329 332
333#ifdef CONFIG_SMP
330 /* Per-cpu data. */ 334 /* Per-cpu data. */
331 void *percpu; 335 void __percpu *percpu;
336 unsigned int percpu_size;
337#endif
332 338
333 /* The command line arguments (may be mangled). People like 339 /* The command line arguments (may be mangled). People like
334 keeping pointers to this stuff */ 340 keeping pointers to this stuff */
@@ -361,11 +367,10 @@ struct module
361 /* Destruction function. */ 367 /* Destruction function. */
362 void (*exit)(void); 368 void (*exit)(void);
363 369
364#ifdef CONFIG_SMP 370 struct module_ref {
365 char *refptr; 371 unsigned int incs;
366#else 372 unsigned int decs;
367 local_t ref; 373 } __percpu *refptr;
368#endif
369#endif 374#endif
370 375
371#ifdef CONFIG_CONSTRUCTORS 376#ifdef CONFIG_CONSTRUCTORS
@@ -391,6 +396,7 @@ static inline int module_is_live(struct module *mod)
391struct module *__module_text_address(unsigned long addr); 396struct module *__module_text_address(unsigned long addr);
392struct module *__module_address(unsigned long addr); 397struct module *__module_address(unsigned long addr);
393bool is_module_address(unsigned long addr); 398bool is_module_address(unsigned long addr);
399bool is_module_percpu_address(unsigned long addr);
394bool is_module_text_address(unsigned long addr); 400bool is_module_text_address(unsigned long addr);
395 401
396static inline int within_module_core(unsigned long addr, struct module *mod) 402static inline int within_module_core(unsigned long addr, struct module *mod)
@@ -452,25 +458,16 @@ void __symbol_put(const char *symbol);
452#define symbol_put(x) __symbol_put(MODULE_SYMBOL_PREFIX #x) 458#define symbol_put(x) __symbol_put(MODULE_SYMBOL_PREFIX #x)
453void symbol_put_addr(void *addr); 459void symbol_put_addr(void *addr);
454 460
455static inline local_t *__module_ref_addr(struct module *mod, int cpu)
456{
457#ifdef CONFIG_SMP
458 return (local_t *) (mod->refptr + per_cpu_offset(cpu));
459#else
460 return &mod->ref;
461#endif
462}
463
464/* Sometimes we know we already have a refcount, and it's easier not 461/* Sometimes we know we already have a refcount, and it's easier not
465 to handle the error case (which only happens with rmmod --wait). */ 462 to handle the error case (which only happens with rmmod --wait). */
466static inline void __module_get(struct module *module) 463static inline void __module_get(struct module *module)
467{ 464{
468 if (module) { 465 if (module) {
469 unsigned int cpu = get_cpu(); 466 preempt_disable();
470 local_inc(__module_ref_addr(module, cpu)); 467 __this_cpu_inc(module->refptr->incs);
471 trace_module_get(module, _THIS_IP_, 468 trace_module_get(module, _THIS_IP_,
472 local_read(__module_ref_addr(module, cpu))); 469 __this_cpu_read(module->refptr->incs));
473 put_cpu(); 470 preempt_enable();
474 } 471 }
475} 472}
476 473
@@ -479,15 +476,16 @@ static inline int try_module_get(struct module *module)
479 int ret = 1; 476 int ret = 1;
480 477
481 if (module) { 478 if (module) {
482 unsigned int cpu = get_cpu(); 479 preempt_disable();
480
483 if (likely(module_is_live(module))) { 481 if (likely(module_is_live(module))) {
484 local_inc(__module_ref_addr(module, cpu)); 482 __this_cpu_inc(module->refptr->incs);
485 trace_module_get(module, _THIS_IP_, 483 trace_module_get(module, _THIS_IP_,
486 local_read(__module_ref_addr(module, cpu))); 484 __this_cpu_read(module->refptr->incs));
487 } 485 } else
488 else
489 ret = 0; 486 ret = 0;
490 put_cpu(); 487
488 preempt_enable();
491 } 489 }
492 return ret; 490 return ret;
493} 491}
@@ -569,6 +567,11 @@ static inline bool is_module_address(unsigned long addr)
569 return false; 567 return false;
570} 568}
571 569
570static inline bool is_module_percpu_address(unsigned long addr)
571{
572 return false;
573}
574
572static inline bool is_module_text_address(unsigned long addr) 575static inline bool is_module_text_address(unsigned long addr)
573{ 576{
574 return false; 577 return false;
diff --git a/include/linux/mount.h b/include/linux/mount.h
index 5d5275364867..4bd05474d11d 100644
--- a/include/linux/mount.h
+++ b/include/linux/mount.h
@@ -34,7 +34,18 @@ struct mnt_namespace;
34 34
35#define MNT_SHARED 0x1000 /* if the vfsmount is a shared mount */ 35#define MNT_SHARED 0x1000 /* if the vfsmount is a shared mount */
36#define MNT_UNBINDABLE 0x2000 /* if the vfsmount is a unbindable mount */ 36#define MNT_UNBINDABLE 0x2000 /* if the vfsmount is a unbindable mount */
37#define MNT_PNODE_MASK 0x3000 /* propagation flag mask */ 37/*
38 * MNT_SHARED_MASK is the set of flags that should be cleared when a
39 * mount becomes shared. Currently, this is only the flag that says a
40 * mount cannot be bind mounted, since this is how we create a mount
41 * that shares events with another mount. If you add a new MNT_*
42 * flag, consider how it interacts with shared mounts.
43 */
44#define MNT_SHARED_MASK (MNT_UNBINDABLE)
45#define MNT_PROPAGATION_MASK (MNT_SHARED | MNT_UNBINDABLE)
46
47
48#define MNT_INTERNAL 0x4000
38 49
39struct vfsmount { 50struct vfsmount {
40 struct list_head mnt_hash; 51 struct list_head mnt_hash;
@@ -66,7 +77,7 @@ struct vfsmount {
66 int mnt_pinned; 77 int mnt_pinned;
67 int mnt_ghosts; 78 int mnt_ghosts;
68#ifdef CONFIG_SMP 79#ifdef CONFIG_SMP
69 int *mnt_writers; 80 int __percpu *mnt_writers;
70#else 81#else
71 int mnt_writers; 82 int mnt_writers;
72#endif 83#endif
@@ -123,7 +134,6 @@ extern int do_add_mount(struct vfsmount *newmnt, struct path *path,
123 134
124extern void mark_mounts_for_expiry(struct list_head *mounts); 135extern void mark_mounts_for_expiry(struct list_head *mounts);
125 136
126extern spinlock_t vfsmount_lock;
127extern dev_t name_to_dev_t(char *name); 137extern dev_t name_to_dev_t(char *name);
128 138
129#endif /* _LINUX_MOUNT_H */ 139#endif /* _LINUX_MOUNT_H */
diff --git a/include/linux/mroute.h b/include/linux/mroute.h
index 08bc776d05e2..c5f3d53548e2 100644
--- a/include/linux/mroute.h
+++ b/include/linux/mroute.h
@@ -59,20 +59,24 @@ struct vifctl {
59 unsigned char vifc_flags; /* VIFF_ flags */ 59 unsigned char vifc_flags; /* VIFF_ flags */
60 unsigned char vifc_threshold; /* ttl limit */ 60 unsigned char vifc_threshold; /* ttl limit */
61 unsigned int vifc_rate_limit; /* Rate limiter values (NI) */ 61 unsigned int vifc_rate_limit; /* Rate limiter values (NI) */
62 struct in_addr vifc_lcl_addr; /* Our address */ 62 union {
63 struct in_addr vifc_lcl_addr; /* Local interface address */
64 int vifc_lcl_ifindex; /* Local interface index */
65 };
63 struct in_addr vifc_rmt_addr; /* IPIP tunnel addr */ 66 struct in_addr vifc_rmt_addr; /* IPIP tunnel addr */
64}; 67};
65 68
66#define VIFF_TUNNEL 0x1 /* IPIP tunnel */ 69#define VIFF_TUNNEL 0x1 /* IPIP tunnel */
67#define VIFF_SRCRT 0x2 /* NI */ 70#define VIFF_SRCRT 0x2 /* NI */
68#define VIFF_REGISTER 0x4 /* register vif */ 71#define VIFF_REGISTER 0x4 /* register vif */
72#define VIFF_USE_IFINDEX 0x8 /* use vifc_lcl_ifindex instead of
73 vifc_lcl_addr to find an interface */
69 74
70/* 75/*
71 * Cache manipulation structures for mrouted and PIMd 76 * Cache manipulation structures for mrouted and PIMd
72 */ 77 */
73 78
74struct mfcctl 79struct mfcctl {
75{
76 struct in_addr mfcc_origin; /* Origin of mcast */ 80 struct in_addr mfcc_origin; /* Origin of mcast */
77 struct in_addr mfcc_mcastgrp; /* Group in question */ 81 struct in_addr mfcc_mcastgrp; /* Group in question */
78 vifi_t mfcc_parent; /* Where it arrived */ 82 vifi_t mfcc_parent; /* Where it arrived */
@@ -87,8 +91,7 @@ struct mfcctl
87 * Group count retrieval for mrouted 91 * Group count retrieval for mrouted
88 */ 92 */
89 93
90struct sioc_sg_req 94struct sioc_sg_req {
91{
92 struct in_addr src; 95 struct in_addr src;
93 struct in_addr grp; 96 struct in_addr grp;
94 unsigned long pktcnt; 97 unsigned long pktcnt;
@@ -100,8 +103,7 @@ struct sioc_sg_req
100 * To get vif packet counts 103 * To get vif packet counts
101 */ 104 */
102 105
103struct sioc_vif_req 106struct sioc_vif_req {
104{
105 vifi_t vifi; /* Which iface */ 107 vifi_t vifi; /* Which iface */
106 unsigned long icount; /* In packets */ 108 unsigned long icount; /* In packets */
107 unsigned long ocount; /* Out packets */ 109 unsigned long ocount; /* Out packets */
@@ -114,8 +116,7 @@ struct sioc_vif_req
114 * data. Magically happens to be like an IP packet as per the original 116 * data. Magically happens to be like an IP packet as per the original
115 */ 117 */
116 118
117struct igmpmsg 119struct igmpmsg {
118{
119 __u32 unused1,unused2; 120 __u32 unused1,unused2;
120 unsigned char im_msgtype; /* What is this */ 121 unsigned char im_msgtype; /* What is this */
121 unsigned char im_mbz; /* Must be zero */ 122 unsigned char im_mbz; /* Must be zero */
@@ -176,8 +177,7 @@ static inline int ip_mr_init(void)
176} 177}
177#endif 178#endif
178 179
179struct vif_device 180struct vif_device {
180{
181 struct net_device *dev; /* Device we are using */ 181 struct net_device *dev; /* Device we are using */
182 unsigned long bytes_in,bytes_out; 182 unsigned long bytes_in,bytes_out;
183 unsigned long pkt_in,pkt_out; /* Statistics */ 183 unsigned long pkt_in,pkt_out; /* Statistics */
@@ -190,8 +190,7 @@ struct vif_device
190 190
191#define VIFF_STATIC 0x8000 191#define VIFF_STATIC 0x8000
192 192
193struct mfc_cache 193struct mfc_cache {
194{
195 struct mfc_cache *next; /* Next entry on cache line */ 194 struct mfc_cache *next; /* Next entry on cache line */
196#ifdef CONFIG_NET_NS 195#ifdef CONFIG_NET_NS
197 struct net *mfc_net; 196 struct net *mfc_net;
diff --git a/include/linux/mroute6.h b/include/linux/mroute6.h
index b191865a6ca3..2caa1a8e525d 100644
--- a/include/linux/mroute6.h
+++ b/include/linux/mroute6.h
@@ -75,8 +75,7 @@ struct mif6ctl {
75 * Cache manipulation structures for mrouted and PIMd 75 * Cache manipulation structures for mrouted and PIMd
76 */ 76 */
77 77
78struct mf6cctl 78struct mf6cctl {
79{
80 struct sockaddr_in6 mf6cc_origin; /* Origin of mcast */ 79 struct sockaddr_in6 mf6cc_origin; /* Origin of mcast */
81 struct sockaddr_in6 mf6cc_mcastgrp; /* Group in question */ 80 struct sockaddr_in6 mf6cc_mcastgrp; /* Group in question */
82 mifi_t mf6cc_parent; /* Where it arrived */ 81 mifi_t mf6cc_parent; /* Where it arrived */
@@ -87,8 +86,7 @@ struct mf6cctl
87 * Group count retrieval for pim6sd 86 * Group count retrieval for pim6sd
88 */ 87 */
89 88
90struct sioc_sg_req6 89struct sioc_sg_req6 {
91{
92 struct sockaddr_in6 src; 90 struct sockaddr_in6 src;
93 struct sockaddr_in6 grp; 91 struct sockaddr_in6 grp;
94 unsigned long pktcnt; 92 unsigned long pktcnt;
@@ -100,8 +98,7 @@ struct sioc_sg_req6
100 * To get vif packet counts 98 * To get vif packet counts
101 */ 99 */
102 100
103struct sioc_mif_req6 101struct sioc_mif_req6 {
104{
105 mifi_t mifi; /* Which iface */ 102 mifi_t mifi; /* Which iface */
106 unsigned long icount; /* In packets */ 103 unsigned long icount; /* In packets */
107 unsigned long ocount; /* Out packets */ 104 unsigned long ocount; /* Out packets */
@@ -172,8 +169,7 @@ static inline void ip6_mr_cleanup(void)
172} 169}
173#endif 170#endif
174 171
175struct mif_device 172struct mif_device {
176{
177 struct net_device *dev; /* Device we are using */ 173 struct net_device *dev; /* Device we are using */
178 unsigned long bytes_in,bytes_out; 174 unsigned long bytes_in,bytes_out;
179 unsigned long pkt_in,pkt_out; /* Statistics */ 175 unsigned long pkt_in,pkt_out; /* Statistics */
@@ -185,8 +181,7 @@ struct mif_device
185 181
186#define VIFF_STATIC 0x8000 182#define VIFF_STATIC 0x8000
187 183
188struct mfc6_cache 184struct mfc6_cache {
189{
190 struct mfc6_cache *next; /* Next entry on cache line */ 185 struct mfc6_cache *next; /* Next entry on cache line */
191#ifdef CONFIG_NET_NS 186#ifdef CONFIG_NET_NS
192 struct net *mfc6_net; 187 struct net *mfc6_net;
diff --git a/include/linux/msdos_fs.h b/include/linux/msdos_fs.h
index ce38f1caa5e1..34066e65fdeb 100644
--- a/include/linux/msdos_fs.h
+++ b/include/linux/msdos_fs.h
@@ -15,6 +15,7 @@
15#define MSDOS_DPB_BITS 4 /* log2(MSDOS_DPB) */ 15#define MSDOS_DPB_BITS 4 /* log2(MSDOS_DPB) */
16#define MSDOS_DPS (SECTOR_SIZE / sizeof(struct msdos_dir_entry)) 16#define MSDOS_DPS (SECTOR_SIZE / sizeof(struct msdos_dir_entry))
17#define MSDOS_DPS_BITS 4 /* log2(MSDOS_DPS) */ 17#define MSDOS_DPS_BITS 4 /* log2(MSDOS_DPS) */
18#define MSDOS_LONGNAME 256 /* maximum name length */
18#define CF_LE_W(v) le16_to_cpu(v) 19#define CF_LE_W(v) le16_to_cpu(v)
19#define CF_LE_L(v) le32_to_cpu(v) 20#define CF_LE_L(v) le32_to_cpu(v)
20#define CT_LE_W(v) cpu_to_le16(v) 21#define CT_LE_W(v) cpu_to_le16(v)
@@ -47,8 +48,8 @@
47#define DELETED_FLAG 0xe5 /* marks file as deleted when in name[0] */ 48#define DELETED_FLAG 0xe5 /* marks file as deleted when in name[0] */
48#define IS_FREE(n) (!*(n) || *(n) == DELETED_FLAG) 49#define IS_FREE(n) (!*(n) || *(n) == DELETED_FLAG)
49 50
51#define FAT_LFN_LEN 255 /* maximum long name length */
50#define MSDOS_NAME 11 /* maximum name length */ 52#define MSDOS_NAME 11 /* maximum name length */
51#define MSDOS_LONGNAME 256 /* maximum name length */
52#define MSDOS_SLOTS 21 /* max # of slots for short and long names */ 53#define MSDOS_SLOTS 21 /* max # of slots for short and long names */
53#define MSDOS_DOT ". " /* ".", padded to MSDOS_NAME chars */ 54#define MSDOS_DOT ". " /* ".", padded to MSDOS_NAME chars */
54#define MSDOS_DOTDOT ".. " /* "..", padded to MSDOS_NAME chars */ 55#define MSDOS_DOTDOT ".. " /* "..", padded to MSDOS_NAME chars */
diff --git a/include/linux/mtd/bbm.h b/include/linux/mtd/bbm.h
index fff8c53e5434..9c3757c5759d 100644
--- a/include/linux/mtd/bbm.h
+++ b/include/linux/mtd/bbm.h
@@ -19,22 +19,21 @@
19 19
20/** 20/**
21 * struct nand_bbt_descr - bad block table descriptor 21 * struct nand_bbt_descr - bad block table descriptor
22 * @options: options for this descriptor 22 * @options: options for this descriptor
23 * @pages: the page(s) where we find the bbt, used with 23 * @pages: the page(s) where we find the bbt, used with option BBT_ABSPAGE
24 * option BBT_ABSPAGE when bbt is searched, 24 * when bbt is searched, then we store the found bbts pages here.
25 * then we store the found bbts pages here. 25 * Its an array and supports up to 8 chips now
26 * Its an array and supports up to 8 chips now 26 * @offs: offset of the pattern in the oob area of the page
27 * @offs: offset of the pattern in the oob area of the page 27 * @veroffs: offset of the bbt version counter in the oob are of the page
28 * @veroffs: offset of the bbt version counter in the oob area of the page 28 * @version: version read from the bbt page during scan
29 * @version: version read from the bbt page during scan 29 * @len: length of the pattern, if 0 no pattern check is performed
30 * @len: length of the pattern, if 0 no pattern check is performed 30 * @maxblocks: maximum number of blocks to search for a bbt. This number of
31 * @maxblocks: maximum number of blocks to search for a bbt. This 31 * blocks is reserved at the end of the device where the tables are
32 * number of blocks is reserved at the end of the device 32 * written.
33 * where the tables are written. 33 * @reserved_block_code: if non-0, this pattern denotes a reserved (rather than
34 * @reserved_block_code: if non-0, this pattern denotes a reserved 34 * bad) block in the stored bbt
35 * (rather than bad) block in the stored bbt 35 * @pattern: pattern to identify bad block table or factory marked good /
36 * @pattern: pattern to identify bad block table or factory marked 36 * bad blocks, can be NULL, if len = 0
37 * good / bad blocks, can be NULL, if len = 0
38 * 37 *
39 * Descriptor for the bad block table marker and the descriptor for the 38 * Descriptor for the bad block table marker and the descriptor for the
40 * pattern which identifies good and bad blocks. The assumption is made 39 * pattern which identifies good and bad blocks. The assumption is made
@@ -90,7 +89,9 @@ struct nand_bbt_descr {
90/* 89/*
91 * Constants for oob configuration 90 * Constants for oob configuration
92 */ 91 */
93#define ONENAND_BADBLOCK_POS 0 92#define NAND_SMALL_BADBLOCK_POS 5
93#define NAND_LARGE_BADBLOCK_POS 0
94#define ONENAND_BADBLOCK_POS 0
94 95
95/* 96/*
96 * Bad block scanning errors 97 * Bad block scanning errors
diff --git a/include/linux/mtd/cfi.h b/include/linux/mtd/cfi.h
index 88d3d8fbf9f2..df89f4275232 100644
--- a/include/linux/mtd/cfi.h
+++ b/include/linux/mtd/cfi.h
@@ -518,10 +518,11 @@ struct cfi_fixup {
518#define CFI_MFR_ANY 0xffff 518#define CFI_MFR_ANY 0xffff
519#define CFI_ID_ANY 0xffff 519#define CFI_ID_ANY 0xffff
520 520
521#define CFI_MFR_AMD 0x0001 521#define CFI_MFR_AMD 0x0001
522#define CFI_MFR_ATMEL 0x001F 522#define CFI_MFR_INTEL 0x0089
523#define CFI_MFR_SAMSUNG 0x00EC 523#define CFI_MFR_ATMEL 0x001F
524#define CFI_MFR_ST 0x0020 /* STMicroelectronics */ 524#define CFI_MFR_SAMSUNG 0x00EC
525#define CFI_MFR_ST 0x0020 /* STMicroelectronics */
525 526
526void cfi_fixup(struct mtd_info *mtd, struct cfi_fixup* fixups); 527void cfi_fixup(struct mtd_info *mtd, struct cfi_fixup* fixups);
527 528
diff --git a/include/linux/mtd/flashchip.h b/include/linux/mtd/flashchip.h
index d4f38c5fd44e..d0bf422ae374 100644
--- a/include/linux/mtd/flashchip.h
+++ b/include/linux/mtd/flashchip.h
@@ -38,6 +38,15 @@ typedef enum {
38 FL_XIP_WHILE_ERASING, 38 FL_XIP_WHILE_ERASING,
39 FL_XIP_WHILE_WRITING, 39 FL_XIP_WHILE_WRITING,
40 FL_SHUTDOWN, 40 FL_SHUTDOWN,
41 /* These 2 come from nand_state_t, which has been unified here */
42 FL_READING,
43 FL_CACHEDPRG,
44 /* These 4 come from onenand_state_t, which has been unified here */
45 FL_RESETING,
46 FL_OTPING,
47 FL_PREPARING_ERASE,
48 FL_VERIFYING_ERASE,
49
41 FL_UNKNOWN 50 FL_UNKNOWN
42} flstate_t; 51} flstate_t;
43 52
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index 7a232a9bdd62..ccab9dfc5217 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -21,6 +21,8 @@
21#include <linux/wait.h> 21#include <linux/wait.h>
22#include <linux/spinlock.h> 22#include <linux/spinlock.h>
23#include <linux/mtd/mtd.h> 23#include <linux/mtd/mtd.h>
24#include <linux/mtd/flashchip.h>
25#include <linux/mtd/bbm.h>
24 26
25struct mtd_info; 27struct mtd_info;
26/* Scan and identify a NAND device */ 28/* Scan and identify a NAND device */
@@ -168,7 +170,6 @@ typedef enum {
168/* Chip does not allow subpage writes */ 170/* Chip does not allow subpage writes */
169#define NAND_NO_SUBPAGE_WRITE 0x00000200 171#define NAND_NO_SUBPAGE_WRITE 0x00000200
170 172
171
172/* Options valid for Samsung large page devices */ 173/* Options valid for Samsung large page devices */
173#define NAND_SAMSUNG_LP_OPTIONS \ 174#define NAND_SAMSUNG_LP_OPTIONS \
174 (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK) 175 (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK)
@@ -194,6 +195,9 @@ typedef enum {
194/* This option is defined if the board driver allocates its own buffers 195/* This option is defined if the board driver allocates its own buffers
195 (e.g. because it needs them DMA-coherent */ 196 (e.g. because it needs them DMA-coherent */
196#define NAND_OWN_BUFFERS 0x00040000 197#define NAND_OWN_BUFFERS 0x00040000
198/* Chip may not exist, so silence any errors in scan */
199#define NAND_SCAN_SILENT_NODEV 0x00080000
200
197/* Options set by nand scan */ 201/* Options set by nand scan */
198/* Nand scan has allocated controller struct */ 202/* Nand scan has allocated controller struct */
199#define NAND_CONTROLLER_ALLOC 0x80000000 203#define NAND_CONTROLLER_ALLOC 0x80000000
@@ -202,20 +206,6 @@ typedef enum {
202#define NAND_CI_CHIPNR_MSK 0x03 206#define NAND_CI_CHIPNR_MSK 0x03
203#define NAND_CI_CELLTYPE_MSK 0x0C 207#define NAND_CI_CELLTYPE_MSK 0x0C
204 208
205/*
206 * nand_state_t - chip states
207 * Enumeration for NAND flash chip state
208 */
209typedef enum {
210 FL_READY,
211 FL_READING,
212 FL_WRITING,
213 FL_ERASING,
214 FL_SYNCING,
215 FL_CACHEDPRG,
216 FL_PM_SUSPENDED,
217} nand_state_t;
218
219/* Keep gcc happy */ 209/* Keep gcc happy */
220struct nand_chip; 210struct nand_chip;
221 211
@@ -402,7 +392,7 @@ struct nand_chip {
402 uint8_t cellinfo; 392 uint8_t cellinfo;
403 int badblockpos; 393 int badblockpos;
404 394
405 nand_state_t state; 395 flstate_t state;
406 396
407 uint8_t *oob_poi; 397 uint8_t *oob_poi;
408 struct nand_hw_control *controller; 398 struct nand_hw_control *controller;
@@ -470,75 +460,6 @@ struct nand_manufacturers {
470extern struct nand_flash_dev nand_flash_ids[]; 460extern struct nand_flash_dev nand_flash_ids[];
471extern struct nand_manufacturers nand_manuf_ids[]; 461extern struct nand_manufacturers nand_manuf_ids[];
472 462
473/**
474 * struct nand_bbt_descr - bad block table descriptor
475 * @options: options for this descriptor
476 * @pages: the page(s) where we find the bbt, used with option BBT_ABSPAGE
477 * when bbt is searched, then we store the found bbts pages here.
478 * Its an array and supports up to 8 chips now
479 * @offs: offset of the pattern in the oob area of the page
480 * @veroffs: offset of the bbt version counter in the oob are of the page
481 * @version: version read from the bbt page during scan
482 * @len: length of the pattern, if 0 no pattern check is performed
483 * @maxblocks: maximum number of blocks to search for a bbt. This number of
484 * blocks is reserved at the end of the device where the tables are
485 * written.
486 * @reserved_block_code: if non-0, this pattern denotes a reserved (rather than
487 * bad) block in the stored bbt
488 * @pattern: pattern to identify bad block table or factory marked good /
489 * bad blocks, can be NULL, if len = 0
490 *
491 * Descriptor for the bad block table marker and the descriptor for the
492 * pattern which identifies good and bad blocks. The assumption is made
493 * that the pattern and the version count are always located in the oob area
494 * of the first block.
495 */
496struct nand_bbt_descr {
497 int options;
498 int pages[NAND_MAX_CHIPS];
499 int offs;
500 int veroffs;
501 uint8_t version[NAND_MAX_CHIPS];
502 int len;
503 int maxblocks;
504 int reserved_block_code;
505 uint8_t *pattern;
506};
507
508/* Options for the bad block table descriptors */
509
510/* The number of bits used per block in the bbt on the device */
511#define NAND_BBT_NRBITS_MSK 0x0000000F
512#define NAND_BBT_1BIT 0x00000001
513#define NAND_BBT_2BIT 0x00000002
514#define NAND_BBT_4BIT 0x00000004
515#define NAND_BBT_8BIT 0x00000008
516/* The bad block table is in the last good block of the device */
517#define NAND_BBT_LASTBLOCK 0x00000010
518/* The bbt is at the given page, else we must scan for the bbt */
519#define NAND_BBT_ABSPAGE 0x00000020
520/* The bbt is at the given page, else we must scan for the bbt */
521#define NAND_BBT_SEARCH 0x00000040
522/* bbt is stored per chip on multichip devices */
523#define NAND_BBT_PERCHIP 0x00000080
524/* bbt has a version counter at offset veroffs */
525#define NAND_BBT_VERSION 0x00000100
526/* Create a bbt if none axists */
527#define NAND_BBT_CREATE 0x00000200
528/* Search good / bad pattern through all pages of a block */
529#define NAND_BBT_SCANALLPAGES 0x00000400
530/* Scan block empty during good / bad block scan */
531#define NAND_BBT_SCANEMPTY 0x00000800
532/* Write bbt if neccecary */
533#define NAND_BBT_WRITE 0x00001000
534/* Read and write back block contents when writing bbt */
535#define NAND_BBT_SAVECONTENT 0x00002000
536/* Search good / bad pattern on the first and the second page */
537#define NAND_BBT_SCAN2NDPAGE 0x00004000
538
539/* The maximum number of blocks to scan for a bbt */
540#define NAND_BBT_SCAN_MAXBLOCKS 4
541
542extern int nand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd); 463extern int nand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd);
543extern int nand_update_bbt(struct mtd_info *mtd, loff_t offs); 464extern int nand_update_bbt(struct mtd_info *mtd, loff_t offs);
544extern int nand_default_bbt(struct mtd_info *mtd); 465extern int nand_default_bbt(struct mtd_info *mtd);
@@ -548,12 +469,6 @@ extern int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
548extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len, 469extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len,
549 size_t * retlen, uint8_t * buf); 470 size_t * retlen, uint8_t * buf);
550 471
551/*
552* Constants for oob configuration
553*/
554#define NAND_SMALL_BADBLOCK_POS 5
555#define NAND_LARGE_BADBLOCK_POS 0
556
557/** 472/**
558 * struct platform_nand_chip - chip level device structure 473 * struct platform_nand_chip - chip level device structure
559 * @nr_chips: max. number of chips to scan for 474 * @nr_chips: max. number of chips to scan for
diff --git a/include/linux/mtd/nand_ecc.h b/include/linux/mtd/nand_ecc.h
index 052ea8ca2434..41bc013571d0 100644
--- a/include/linux/mtd/nand_ecc.h
+++ b/include/linux/mtd/nand_ecc.h
@@ -16,7 +16,13 @@
16struct mtd_info; 16struct mtd_info;
17 17
18/* 18/*
19 * Calculate 3 byte ECC code for 256 byte block 19 * Calculate 3 byte ECC code for eccsize byte block
20 */
21void __nand_calculate_ecc(const u_char *dat, unsigned int eccsize,
22 u_char *ecc_code);
23
24/*
25 * Calculate 3 byte ECC code for 256/512 byte block
20 */ 26 */
21int nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code); 27int nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code);
22 28
@@ -27,7 +33,7 @@ int __nand_correct_data(u_char *dat, u_char *read_ecc, u_char *calc_ecc,
27 unsigned int eccsize); 33 unsigned int eccsize);
28 34
29/* 35/*
30 * Detect and correct a 1 bit error for 256 byte block 36 * Detect and correct a 1 bit error for 256/512 byte block
31 */ 37 */
32int nand_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc); 38int nand_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc);
33 39
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h
index 4e49f3350678..5509eb06b326 100644
--- a/include/linux/mtd/onenand.h
+++ b/include/linux/mtd/onenand.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * linux/include/linux/mtd/onenand.h 2 * linux/include/linux/mtd/onenand.h
3 * 3 *
4 * Copyright (C) 2005-2007 Samsung Electronics 4 * Copyright © 2005-2009 Samsung Electronics
5 * Kyungmin Park <kyungmin.park@samsung.com> 5 * Kyungmin Park <kyungmin.park@samsung.com>
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
@@ -14,6 +14,7 @@
14 14
15#include <linux/spinlock.h> 15#include <linux/spinlock.h>
16#include <linux/completion.h> 16#include <linux/completion.h>
17#include <linux/mtd/flashchip.h>
17#include <linux/mtd/onenand_regs.h> 18#include <linux/mtd/onenand_regs.h>
18#include <linux/mtd/bbm.h> 19#include <linux/mtd/bbm.h>
19 20
@@ -25,22 +26,6 @@ extern int onenand_scan(struct mtd_info *mtd, int max_chips);
25/* Free resources held by the OneNAND device */ 26/* Free resources held by the OneNAND device */
26extern void onenand_release(struct mtd_info *mtd); 27extern void onenand_release(struct mtd_info *mtd);
27 28
28/*
29 * onenand_state_t - chip states
30 * Enumeration for OneNAND flash chip state
31 */
32typedef enum {
33 FL_READY,
34 FL_READING,
35 FL_WRITING,
36 FL_ERASING,
37 FL_SYNCING,
38 FL_LOCKING,
39 FL_RESETING,
40 FL_OTPING,
41 FL_PM_SUSPENDED,
42} onenand_state_t;
43
44/** 29/**
45 * struct onenand_bufferram - OneNAND BufferRAM Data 30 * struct onenand_bufferram - OneNAND BufferRAM Data
46 * @blockpage: block & page address in BufferRAM 31 * @blockpage: block & page address in BufferRAM
@@ -137,7 +122,7 @@ struct onenand_chip {
137 122
138 spinlock_t chip_lock; 123 spinlock_t chip_lock;
139 wait_queue_head_t wq; 124 wait_queue_head_t wq;
140 onenand_state_t state; 125 flstate_t state;
141 unsigned char *page_buf; 126 unsigned char *page_buf;
142 unsigned char *oob_buf; 127 unsigned char *oob_buf;
143 128
@@ -152,6 +137,8 @@ struct onenand_chip {
152/* 137/*
153 * Helper macros 138 * Helper macros
154 */ 139 */
140#define ONENAND_PAGES_PER_BLOCK (1<<6)
141
155#define ONENAND_CURRENT_BUFFERRAM(this) (this->bufferram_index) 142#define ONENAND_CURRENT_BUFFERRAM(this) (this->bufferram_index)
156#define ONENAND_NEXT_BUFFERRAM(this) (this->bufferram_index ^ 1) 143#define ONENAND_NEXT_BUFFERRAM(this) (this->bufferram_index ^ 1)
157#define ONENAND_SET_NEXT_BUFFERRAM(this) (this->bufferram_index ^= 1) 144#define ONENAND_SET_NEXT_BUFFERRAM(this) (this->bufferram_index ^= 1)
diff --git a/include/linux/mtd/onenand_regs.h b/include/linux/mtd/onenand_regs.h
index acadbf53a69f..cd6f3b431195 100644
--- a/include/linux/mtd/onenand_regs.h
+++ b/include/linux/mtd/onenand_regs.h
@@ -131,6 +131,8 @@
131#define ONENAND_CMD_LOCK_TIGHT (0x2C) 131#define ONENAND_CMD_LOCK_TIGHT (0x2C)
132#define ONENAND_CMD_UNLOCK_ALL (0x27) 132#define ONENAND_CMD_UNLOCK_ALL (0x27)
133#define ONENAND_CMD_ERASE (0x94) 133#define ONENAND_CMD_ERASE (0x94)
134#define ONENAND_CMD_MULTIBLOCK_ERASE (0x95)
135#define ONENAND_CMD_ERASE_VERIFY (0x71)
134#define ONENAND_CMD_RESET (0xF0) 136#define ONENAND_CMD_RESET (0xF0)
135#define ONENAND_CMD_OTP_ACCESS (0x65) 137#define ONENAND_CMD_OTP_ACCESS (0x65)
136#define ONENAND_CMD_READID (0x90) 138#define ONENAND_CMD_READID (0x90)
diff --git a/include/linux/mtd/pismo.h b/include/linux/mtd/pismo.h
new file mode 100644
index 000000000000..8dfb7e1421c5
--- /dev/null
+++ b/include/linux/mtd/pismo.h
@@ -0,0 +1,17 @@
1/*
2 * PISMO memory driver - http://www.pismoworld.org/
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.
7 */
8#ifndef __LINUX_MTD_PISMO_H
9#define __LINUX_MTD_PISMO_H
10
11struct pismo_pdata {
12 void (*set_vpp)(void *, int);
13 void *vpp_data;
14 phys_addr_t cs_addrs[5];
15};
16
17#endif
diff --git a/include/linux/mtd/sh_flctl.h b/include/linux/mtd/sh_flctl.h
index e77c1cea404d..ab77609ec337 100644
--- a/include/linux/mtd/sh_flctl.h
+++ b/include/linux/mtd/sh_flctl.h
@@ -51,6 +51,8 @@
51#define _4ECCCNTEN (0x1 << 24) 51#define _4ECCCNTEN (0x1 << 24)
52#define _4ECCEN (0x1 << 23) 52#define _4ECCEN (0x1 << 23)
53#define _4ECCCORRECT (0x1 << 22) 53#define _4ECCCORRECT (0x1 << 22)
54#define SHBUSSEL (0x1 << 20)
55#define SEL_16BIT (0x1 << 19)
54#define SNAND_E (0x1 << 18) /* SNAND (0=512 1=2048)*/ 56#define SNAND_E (0x1 << 18) /* SNAND (0=512 1=2048)*/
55#define QTSEL_E (0x1 << 17) 57#define QTSEL_E (0x1 << 17)
56#define ENDIAN (0x1 << 16) /* 1 = little endian */ 58#define ENDIAN (0x1 << 16) /* 1 = little endian */
@@ -96,6 +98,7 @@
96struct sh_flctl { 98struct sh_flctl {
97 struct mtd_info mtd; 99 struct mtd_info mtd;
98 struct nand_chip chip; 100 struct nand_chip chip;
101 struct platform_device *pdev;
99 void __iomem *reg; 102 void __iomem *reg;
100 103
101 uint8_t done_buff[2048 + 64]; /* max size 2048 + 64 */ 104 uint8_t done_buff[2048 + 64]; /* max size 2048 + 64 */
diff --git a/include/linux/mtd/ubi.h b/include/linux/mtd/ubi.h
index 6913b71d9ab2..b31bd9e9bca3 100644
--- a/include/linux/mtd/ubi.h
+++ b/include/linux/mtd/ubi.h
@@ -174,6 +174,8 @@ void ubi_get_volume_info(struct ubi_volume_desc *desc,
174struct ubi_volume_desc *ubi_open_volume(int ubi_num, int vol_id, int mode); 174struct ubi_volume_desc *ubi_open_volume(int ubi_num, int vol_id, int mode);
175struct ubi_volume_desc *ubi_open_volume_nm(int ubi_num, const char *name, 175struct ubi_volume_desc *ubi_open_volume_nm(int ubi_num, const char *name,
176 int mode); 176 int mode);
177struct ubi_volume_desc *ubi_open_volume_path(const char *pathname, int mode);
178
177int ubi_register_volume_notifier(struct notifier_block *nb, 179int ubi_register_volume_notifier(struct notifier_block *nb,
178 int ignore_existing); 180 int ignore_existing);
179int ubi_unregister_volume_notifier(struct notifier_block *nb); 181int ubi_unregister_volume_notifier(struct notifier_block *nb);
diff --git a/include/linux/namei.h b/include/linux/namei.h
index ec0f607b364a..05b441d93642 100644
--- a/include/linux/namei.h
+++ b/include/linux/namei.h
@@ -72,11 +72,8 @@ extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
72 72
73extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry, 73extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
74 int (*open)(struct inode *, struct file *)); 74 int (*open)(struct inode *, struct file *));
75extern struct file *nameidata_to_filp(struct nameidata *nd, int flags);
76extern void release_open_intent(struct nameidata *);
77 75
78extern struct dentry *lookup_one_len(const char *, struct dentry *, int); 76extern struct dentry *lookup_one_len(const char *, struct dentry *, int);
79extern struct dentry *lookup_one_noperm(const char *, struct dentry *);
80 77
81extern int follow_down(struct path *); 78extern int follow_down(struct path *);
82extern int follow_up(struct path *); 79extern int follow_up(struct path *);
diff --git a/include/linux/ncp_fs_sb.h b/include/linux/ncp_fs_sb.h
index 6330fc76b00f..5ec9ca671687 100644
--- a/include/linux/ncp_fs_sb.h
+++ b/include/linux/ncp_fs_sb.h
@@ -12,6 +12,7 @@
12#include <linux/ncp_mount.h> 12#include <linux/ncp_mount.h>
13#include <linux/net.h> 13#include <linux/net.h>
14#include <linux/mutex.h> 14#include <linux/mutex.h>
15#include <linux/backing-dev.h>
15 16
16#ifdef __KERNEL__ 17#ifdef __KERNEL__
17 18
@@ -127,6 +128,7 @@ struct ncp_server {
127 size_t len; 128 size_t len;
128 __u8 data[128]; 129 __u8 data[128];
129 } unexpected_packet; 130 } unexpected_packet;
131 struct backing_dev_info bdi;
130}; 132};
131 133
132extern void ncp_tcp_rcv_proc(struct work_struct *work); 134extern void ncp_tcp_rcv_proc(struct work_struct *work);
diff --git a/include/linux/neighbour.h b/include/linux/neighbour.h
index 12c9de138451..a7003b7a695d 100644
--- a/include/linux/neighbour.h
+++ b/include/linux/neighbour.h
@@ -4,8 +4,7 @@
4#include <linux/types.h> 4#include <linux/types.h>
5#include <linux/netlink.h> 5#include <linux/netlink.h>
6 6
7struct ndmsg 7struct ndmsg {
8{
9 __u8 ndm_family; 8 __u8 ndm_family;
10 __u8 ndm_pad1; 9 __u8 ndm_pad1;
11 __u16 ndm_pad2; 10 __u16 ndm_pad2;
@@ -15,8 +14,7 @@ struct ndmsg
15 __u8 ndm_type; 14 __u8 ndm_type;
16}; 15};
17 16
18enum 17enum {
19{
20 NDA_UNSPEC, 18 NDA_UNSPEC,
21 NDA_DST, 19 NDA_DST,
22 NDA_LLADDR, 20 NDA_LLADDR,
@@ -56,8 +54,7 @@ enum
56 NUD_PERMANENT is also cannot be deleted by garbage collectors. 54 NUD_PERMANENT is also cannot be deleted by garbage collectors.
57 */ 55 */
58 56
59struct nda_cacheinfo 57struct nda_cacheinfo {
60{
61 __u32 ndm_confirmed; 58 __u32 ndm_confirmed;
62 __u32 ndm_used; 59 __u32 ndm_used;
63 __u32 ndm_updated; 60 __u32 ndm_updated;
@@ -89,8 +86,7 @@ struct nda_cacheinfo
89 * device. 86 * device.
90 ****/ 87 ****/
91 88
92struct ndt_stats 89struct ndt_stats {
93{
94 __u64 ndts_allocs; 90 __u64 ndts_allocs;
95 __u64 ndts_destroys; 91 __u64 ndts_destroys;
96 __u64 ndts_hash_grows; 92 __u64 ndts_hash_grows;
@@ -124,15 +120,13 @@ enum {
124}; 120};
125#define NDTPA_MAX (__NDTPA_MAX - 1) 121#define NDTPA_MAX (__NDTPA_MAX - 1)
126 122
127struct ndtmsg 123struct ndtmsg {
128{
129 __u8 ndtm_family; 124 __u8 ndtm_family;
130 __u8 ndtm_pad1; 125 __u8 ndtm_pad1;
131 __u16 ndtm_pad2; 126 __u16 ndtm_pad2;
132}; 127};
133 128
134struct ndt_config 129struct ndt_config {
135{
136 __u16 ndtc_key_len; 130 __u16 ndtc_key_len;
137 __u16 ndtc_entry_size; 131 __u16 ndtc_entry_size;
138 __u32 ndtc_entries; 132 __u32 ndtc_entries;
diff --git a/include/linux/net.h b/include/linux/net.h
index 529a0931711d..4157b5d42bd6 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
@@ -41,6 +41,7 @@
41#define SYS_SENDMSG 16 /* sys_sendmsg(2) */ 41#define SYS_SENDMSG 16 /* sys_sendmsg(2) */
42#define SYS_RECVMSG 17 /* sys_recvmsg(2) */ 42#define SYS_RECVMSG 17 /* sys_recvmsg(2) */
43#define SYS_ACCEPT4 18 /* sys_accept4(2) */ 43#define SYS_ACCEPT4 18 /* sys_accept4(2) */
44#define SYS_RECVMMSG 19 /* sys_recvmmsg(2) */
44 45
45typedef enum { 46typedef enum {
46 SS_FREE = 0, /* not allocated */ 47 SS_FREE = 0, /* not allocated */
@@ -173,18 +174,22 @@ struct proto_ops {
173 struct poll_table_struct *wait); 174 struct poll_table_struct *wait);
174 int (*ioctl) (struct socket *sock, unsigned int cmd, 175 int (*ioctl) (struct socket *sock, unsigned int cmd,
175 unsigned long arg); 176 unsigned long arg);
177#ifdef CONFIG_COMPAT
176 int (*compat_ioctl) (struct socket *sock, unsigned int cmd, 178 int (*compat_ioctl) (struct socket *sock, unsigned int cmd,
177 unsigned long arg); 179 unsigned long arg);
180#endif
178 int (*listen) (struct socket *sock, int len); 181 int (*listen) (struct socket *sock, int len);
179 int (*shutdown) (struct socket *sock, int flags); 182 int (*shutdown) (struct socket *sock, int flags);
180 int (*setsockopt)(struct socket *sock, int level, 183 int (*setsockopt)(struct socket *sock, int level,
181 int optname, char __user *optval, unsigned int optlen); 184 int optname, char __user *optval, unsigned int optlen);
182 int (*getsockopt)(struct socket *sock, int level, 185 int (*getsockopt)(struct socket *sock, int level,
183 int optname, char __user *optval, int __user *optlen); 186 int optname, char __user *optval, int __user *optlen);
187#ifdef CONFIG_COMPAT
184 int (*compat_setsockopt)(struct socket *sock, int level, 188 int (*compat_setsockopt)(struct socket *sock, int level,
185 int optname, char __user *optval, unsigned int optlen); 189 int optname, char __user *optval, unsigned int optlen);
186 int (*compat_getsockopt)(struct socket *sock, int level, 190 int (*compat_getsockopt)(struct socket *sock, int level,
187 int optname, char __user *optval, int __user *optlen); 191 int optname, char __user *optval, int __user *optlen);
192#endif
188 int (*sendmsg) (struct kiocb *iocb, struct socket *sock, 193 int (*sendmsg) (struct kiocb *iocb, struct socket *sock,
189 struct msghdr *m, size_t total_len); 194 struct msghdr *m, size_t total_len);
190 int (*recvmsg) (struct kiocb *iocb, struct socket *sock, 195 int (*recvmsg) (struct kiocb *iocb, struct socket *sock,
@@ -198,9 +203,13 @@ struct proto_ops {
198 struct pipe_inode_info *pipe, size_t len, unsigned int flags); 203 struct pipe_inode_info *pipe, size_t len, unsigned int flags);
199}; 204};
200 205
206#define DECLARE_SOCKADDR(type, dst, src) \
207 type dst = ({ __sockaddr_check_size(sizeof(*dst)); (type) src; })
208
201struct net_proto_family { 209struct net_proto_family {
202 int family; 210 int family;
203 int (*create)(struct net *net, struct socket *sock, int protocol); 211 int (*create)(struct net *net, struct socket *sock,
212 int protocol, int kern);
204 struct module *owner; 213 struct module *owner;
205}; 214};
206 215
@@ -263,89 +272,6 @@ extern int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg);
263extern int kernel_sock_shutdown(struct socket *sock, 272extern int kernel_sock_shutdown(struct socket *sock,
264 enum sock_shutdown_cmd how); 273 enum sock_shutdown_cmd how);
265 274
266#ifndef CONFIG_SMP
267#define SOCKOPS_WRAPPED(name) name
268#define SOCKOPS_WRAP(name, fam)
269#else
270
271#define SOCKOPS_WRAPPED(name) __unlocked_##name
272
273#define SOCKCALL_WRAP(name, call, parms, args) \
274static int __lock_##name##_##call parms \
275{ \
276 int ret; \
277 lock_kernel(); \
278 ret = __unlocked_##name##_ops.call args ;\
279 unlock_kernel(); \
280 return ret; \
281}
282
283#define SOCKCALL_UWRAP(name, call, parms, args) \
284static unsigned int __lock_##name##_##call parms \
285{ \
286 int ret; \
287 lock_kernel(); \
288 ret = __unlocked_##name##_ops.call args ;\
289 unlock_kernel(); \
290 return ret; \
291}
292
293
294#define SOCKOPS_WRAP(name, fam) \
295SOCKCALL_WRAP(name, release, (struct socket *sock), (sock)) \
296SOCKCALL_WRAP(name, bind, (struct socket *sock, struct sockaddr *uaddr, int addr_len), \
297 (sock, uaddr, addr_len)) \
298SOCKCALL_WRAP(name, connect, (struct socket *sock, struct sockaddr * uaddr, \
299 int addr_len, int flags), \
300 (sock, uaddr, addr_len, flags)) \
301SOCKCALL_WRAP(name, socketpair, (struct socket *sock1, struct socket *sock2), \
302 (sock1, sock2)) \
303SOCKCALL_WRAP(name, accept, (struct socket *sock, struct socket *newsock, \
304 int flags), (sock, newsock, flags)) \
305SOCKCALL_WRAP(name, getname, (struct socket *sock, struct sockaddr *uaddr, \
306 int *addr_len, int peer), (sock, uaddr, addr_len, peer)) \
307SOCKCALL_UWRAP(name, poll, (struct file *file, struct socket *sock, struct poll_table_struct *wait), \
308 (file, sock, wait)) \
309SOCKCALL_WRAP(name, ioctl, (struct socket *sock, unsigned int cmd, \
310 unsigned long arg), (sock, cmd, arg)) \
311SOCKCALL_WRAP(name, compat_ioctl, (struct socket *sock, unsigned int cmd, \
312 unsigned long arg), (sock, cmd, arg)) \
313SOCKCALL_WRAP(name, listen, (struct socket *sock, int len), (sock, len)) \
314SOCKCALL_WRAP(name, shutdown, (struct socket *sock, int flags), (sock, flags)) \
315SOCKCALL_WRAP(name, setsockopt, (struct socket *sock, int level, int optname, \
316 char __user *optval, unsigned int optlen), (sock, level, optname, optval, optlen)) \
317SOCKCALL_WRAP(name, getsockopt, (struct socket *sock, int level, int optname, \
318 char __user *optval, int __user *optlen), (sock, level, optname, optval, optlen)) \
319SOCKCALL_WRAP(name, sendmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len), \
320 (iocb, sock, m, len)) \
321SOCKCALL_WRAP(name, recvmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len, int flags), \
322 (iocb, sock, m, len, flags)) \
323SOCKCALL_WRAP(name, mmap, (struct file *file, struct socket *sock, struct vm_area_struct *vma), \
324 (file, sock, vma)) \
325 \
326static const struct proto_ops name##_ops = { \
327 .family = fam, \
328 .owner = THIS_MODULE, \
329 .release = __lock_##name##_release, \
330 .bind = __lock_##name##_bind, \
331 .connect = __lock_##name##_connect, \
332 .socketpair = __lock_##name##_socketpair, \
333 .accept = __lock_##name##_accept, \
334 .getname = __lock_##name##_getname, \
335 .poll = __lock_##name##_poll, \
336 .ioctl = __lock_##name##_ioctl, \
337 .compat_ioctl = __lock_##name##_compat_ioctl, \
338 .listen = __lock_##name##_listen, \
339 .shutdown = __lock_##name##_shutdown, \
340 .setsockopt = __lock_##name##_setsockopt, \
341 .getsockopt = __lock_##name##_getsockopt, \
342 .sendmsg = __lock_##name##_sendmsg, \
343 .recvmsg = __lock_##name##_recvmsg, \
344 .mmap = __lock_##name##_mmap, \
345};
346
347#endif
348
349#define MODULE_ALIAS_NETPROTO(proto) \ 275#define MODULE_ALIAS_NETPROTO(proto) \
350 MODULE_ALIAS("net-pf-" __stringify(proto)) 276 MODULE_ALIAS("net-pf-" __stringify(proto))
351 277
@@ -358,6 +284,7 @@ static const struct proto_ops name##_ops = { \
358 284
359#ifdef CONFIG_SYSCTL 285#ifdef CONFIG_SYSCTL
360#include <linux/sysctl.h> 286#include <linux/sysctl.h>
287#include <linux/ratelimit.h>
361extern struct ratelimit_state net_ratelimit_state; 288extern struct ratelimit_state net_ratelimit_state;
362#endif 289#endif
363 290
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 812a5f3c2abe..fa8b47637997 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -28,6 +28,7 @@
28#include <linux/if.h> 28#include <linux/if.h>
29#include <linux/if_ether.h> 29#include <linux/if_ether.h>
30#include <linux/if_packet.h> 30#include <linux/if_packet.h>
31#include <linux/if_link.h>
31 32
32#ifdef __KERNEL__ 33#ifdef __KERNEL__
33#include <linux/timer.h> 34#include <linux/timer.h>
@@ -63,30 +64,69 @@ struct wireless_dev;
63#define HAVE_FREE_NETDEV /* free_netdev() */ 64#define HAVE_FREE_NETDEV /* free_netdev() */
64#define HAVE_NETDEV_PRIV /* netdev_priv() */ 65#define HAVE_NETDEV_PRIV /* netdev_priv() */
65 66
66#define NET_XMIT_SUCCESS 0
67#define NET_XMIT_DROP 1 /* skb dropped */
68#define NET_XMIT_CN 2 /* congestion notification */
69#define NET_XMIT_POLICED 3 /* skb is shot by police */
70#define NET_XMIT_MASK 0xFFFF /* qdisc flags in net/sch_generic.h */
71
72/* Backlog congestion levels */ 67/* Backlog congestion levels */
73#define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ 68#define NET_RX_SUCCESS 0 /* keep 'em coming, baby */
74#define NET_RX_DROP 1 /* packet dropped */ 69#define NET_RX_DROP 1 /* packet dropped */
70
71/*
72 * Transmit return codes: transmit return codes originate from three different
73 * namespaces:
74 *
75 * - qdisc return codes
76 * - driver transmit return codes
77 * - errno values
78 *
79 * Drivers are allowed to return any one of those in their hard_start_xmit()
80 * function. Real network devices commonly used with qdiscs should only return
81 * the driver transmit return codes though - when qdiscs are used, the actual
82 * transmission happens asynchronously, so the value is not propagated to
83 * higher layers. Virtual network devices transmit synchronously, in this case
84 * the driver transmit return codes are consumed by dev_queue_xmit(), all
85 * others are propagated to higher layers.
86 */
87
88/* qdisc ->enqueue() return codes. */
89#define NET_XMIT_SUCCESS 0x00
90#define NET_XMIT_DROP 0x01 /* skb dropped */
91#define NET_XMIT_CN 0x02 /* congestion notification */
92#define NET_XMIT_POLICED 0x03 /* skb is shot by police */
93#define NET_XMIT_MASK 0x0f /* qdisc flags in net/sch_generic.h */
75 94
76/* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It 95/* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It
77 * indicates that the device will soon be dropping packets, or already drops 96 * indicates that the device will soon be dropping packets, or already drops
78 * some packets of the same priority; prompting us to send less aggressively. */ 97 * some packets of the same priority; prompting us to send less aggressively. */
79#define net_xmit_eval(e) ((e) == NET_XMIT_CN? 0 : (e)) 98#define net_xmit_eval(e) ((e) == NET_XMIT_CN ? 0 : (e))
80#define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0) 99#define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0)
81 100
82/* Driver transmit return codes */ 101/* Driver transmit return codes */
102#define NETDEV_TX_MASK 0xf0
103
83enum netdev_tx { 104enum netdev_tx {
84 NETDEV_TX_OK = 0, /* driver took care of packet */ 105 __NETDEV_TX_MIN = INT_MIN, /* make sure enum is signed */
85 NETDEV_TX_BUSY, /* driver tx path was busy*/ 106 NETDEV_TX_OK = 0x00, /* driver took care of packet */
86 NETDEV_TX_LOCKED = -1, /* driver tx lock was already taken */ 107 NETDEV_TX_BUSY = 0x10, /* driver tx path was busy*/
108 NETDEV_TX_LOCKED = 0x20, /* driver tx lock was already taken */
87}; 109};
88typedef enum netdev_tx netdev_tx_t; 110typedef enum netdev_tx netdev_tx_t;
89 111
112/*
113 * Current order: NETDEV_TX_MASK > NET_XMIT_MASK >= 0 is significant;
114 * hard_start_xmit() return < NET_XMIT_MASK means skb was consumed.
115 */
116static inline bool dev_xmit_complete(int rc)
117{
118 /*
119 * Positive cases with an skb consumed by a driver:
120 * - successful transmission (rc == NETDEV_TX_OK)
121 * - error while transmitting (rc < 0)
122 * - error while queueing to a different device (rc & NET_XMIT_MASK)
123 */
124 if (likely(rc < NET_XMIT_MASK))
125 return true;
126
127 return false;
128}
129
90#endif 130#endif
91 131
92#define MAX_ADDR_LEN 32 /* Largest hardware address length */ 132#define MAX_ADDR_LEN 32 /* Largest hardware address length */
@@ -97,7 +137,7 @@ typedef enum netdev_tx netdev_tx_t;
97 * used. 137 * used.
98 */ 138 */
99 139
100#if defined(CONFIG_WLAN_80211) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) 140#if defined(CONFIG_WLAN) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
101# if defined(CONFIG_MAC80211_MESH) 141# if defined(CONFIG_MAC80211_MESH)
102# define LL_MAX_HEADER 128 142# define LL_MAX_HEADER 128
103# else 143# else
@@ -125,8 +165,7 @@ typedef enum netdev_tx netdev_tx_t;
125 * with byte counters. 165 * with byte counters.
126 */ 166 */
127 167
128struct net_device_stats 168struct net_device_stats {
129{
130 unsigned long rx_packets; /* total packets received */ 169 unsigned long rx_packets; /* total packets received */
131 unsigned long tx_packets; /* total packets transmitted */ 170 unsigned long tx_packets; /* total packets transmitted */
132 unsigned long rx_bytes; /* total bytes received */ 171 unsigned long rx_bytes; /* total bytes received */
@@ -179,8 +218,7 @@ struct neighbour;
179struct neigh_parms; 218struct neigh_parms;
180struct sk_buff; 219struct sk_buff;
181 220
182struct netif_rx_stats 221struct netif_rx_stats {
183{
184 unsigned total; 222 unsigned total;
185 unsigned dropped; 223 unsigned dropped;
186 unsigned time_squeeze; 224 unsigned time_squeeze;
@@ -189,8 +227,7 @@ struct netif_rx_stats
189 227
190DECLARE_PER_CPU(struct netif_rx_stats, netdev_rx_stat); 228DECLARE_PER_CPU(struct netif_rx_stats, netdev_rx_stat);
191 229
192struct dev_addr_list 230struct dev_addr_list {
193{
194 struct dev_addr_list *next; 231 struct dev_addr_list *next;
195 u8 da_addr[MAX_ADDR_LEN]; 232 u8 da_addr[MAX_ADDR_LEN];
196 u8 da_addrlen; 233 u8 da_addrlen;
@@ -227,8 +264,18 @@ struct netdev_hw_addr_list {
227 int count; 264 int count;
228}; 265};
229 266
230struct hh_cache 267#define netdev_uc_count(dev) ((dev)->uc.count)
231{ 268#define netdev_uc_empty(dev) ((dev)->uc.count == 0)
269#define netdev_for_each_uc_addr(ha, dev) \
270 list_for_each_entry(ha, &dev->uc.list, list)
271
272#define netdev_mc_count(dev) ((dev)->mc_count)
273#define netdev_mc_empty(dev) (netdev_mc_count(dev) == 0)
274
275#define netdev_for_each_mc_addr(mclist, dev) \
276 for (mclist = dev->mc_list; mclist; mclist = mclist->next)
277
278struct hh_cache {
232 struct hh_cache *hh_next; /* Next entry */ 279 struct hh_cache *hh_next; /* Next entry */
233 atomic_t hh_refcnt; /* number of users */ 280 atomic_t hh_refcnt; /* number of users */
234/* 281/*
@@ -291,8 +338,7 @@ struct header_ops {
291 * code. 338 * code.
292 */ 339 */
293 340
294enum netdev_state_t 341enum netdev_state_t {
295{
296 __LINK_STATE_START, 342 __LINK_STATE_START,
297 __LINK_STATE_PRESENT, 343 __LINK_STATE_PRESENT,
298 __LINK_STATE_NOCARRIER, 344 __LINK_STATE_NOCARRIER,
@@ -341,20 +387,20 @@ struct napi_struct {
341 struct sk_buff *skb; 387 struct sk_buff *skb;
342}; 388};
343 389
344enum 390enum {
345{
346 NAPI_STATE_SCHED, /* Poll is scheduled */ 391 NAPI_STATE_SCHED, /* Poll is scheduled */
347 NAPI_STATE_DISABLE, /* Disable pending */ 392 NAPI_STATE_DISABLE, /* Disable pending */
348 NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */ 393 NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */
349}; 394};
350 395
351enum { 396enum gro_result {
352 GRO_MERGED, 397 GRO_MERGED,
353 GRO_MERGED_FREE, 398 GRO_MERGED_FREE,
354 GRO_HELD, 399 GRO_HELD,
355 GRO_NORMAL, 400 GRO_NORMAL,
356 GRO_DROP, 401 GRO_DROP,
357}; 402};
403typedef enum gro_result gro_result_t;
358 404
359extern void __napi_schedule(struct napi_struct *n); 405extern void __napi_schedule(struct napi_struct *n);
360 406
@@ -457,8 +503,7 @@ static inline void napi_synchronize(const struct napi_struct *n)
457# define napi_synchronize(n) barrier() 503# define napi_synchronize(n) barrier()
458#endif 504#endif
459 505
460enum netdev_queue_state_t 506enum netdev_queue_state_t {
461{
462 __QUEUE_STATE_XOFF, 507 __QUEUE_STATE_XOFF,
463 __QUEUE_STATE_FROZEN, 508 __QUEUE_STATE_FROZEN,
464}; 509};
@@ -577,6 +622,13 @@ struct netdev_queue {
577 * this function is called when a VLAN id is unregistered. 622 * this function is called when a VLAN id is unregistered.
578 * 623 *
579 * void (*ndo_poll_controller)(struct net_device *dev); 624 * void (*ndo_poll_controller)(struct net_device *dev);
625 *
626 * SR-IOV management functions.
627 * int (*ndo_set_vf_mac)(struct net_device *dev, int vf, u8* mac);
628 * int (*ndo_set_vf_vlan)(struct net_device *dev, int vf, u16 vlan, u8 qos);
629 * int (*ndo_set_vf_tx_rate)(struct net_device *dev, int vf, int rate);
630 * int (*ndo_get_vf_config)(struct net_device *dev,
631 * int vf, struct ifla_vf_info *ivf);
580 */ 632 */
581#define HAVE_NET_DEVICE_OPS 633#define HAVE_NET_DEVICE_OPS
582struct net_device_ops { 634struct net_device_ops {
@@ -588,30 +640,21 @@ struct net_device_ops {
588 struct net_device *dev); 640 struct net_device *dev);
589 u16 (*ndo_select_queue)(struct net_device *dev, 641 u16 (*ndo_select_queue)(struct net_device *dev,
590 struct sk_buff *skb); 642 struct sk_buff *skb);
591#define HAVE_CHANGE_RX_FLAGS
592 void (*ndo_change_rx_flags)(struct net_device *dev, 643 void (*ndo_change_rx_flags)(struct net_device *dev,
593 int flags); 644 int flags);
594#define HAVE_SET_RX_MODE
595 void (*ndo_set_rx_mode)(struct net_device *dev); 645 void (*ndo_set_rx_mode)(struct net_device *dev);
596#define HAVE_MULTICAST
597 void (*ndo_set_multicast_list)(struct net_device *dev); 646 void (*ndo_set_multicast_list)(struct net_device *dev);
598#define HAVE_SET_MAC_ADDR
599 int (*ndo_set_mac_address)(struct net_device *dev, 647 int (*ndo_set_mac_address)(struct net_device *dev,
600 void *addr); 648 void *addr);
601#define HAVE_VALIDATE_ADDR
602 int (*ndo_validate_addr)(struct net_device *dev); 649 int (*ndo_validate_addr)(struct net_device *dev);
603#define HAVE_PRIVATE_IOCTL
604 int (*ndo_do_ioctl)(struct net_device *dev, 650 int (*ndo_do_ioctl)(struct net_device *dev,
605 struct ifreq *ifr, int cmd); 651 struct ifreq *ifr, int cmd);
606#define HAVE_SET_CONFIG
607 int (*ndo_set_config)(struct net_device *dev, 652 int (*ndo_set_config)(struct net_device *dev,
608 struct ifmap *map); 653 struct ifmap *map);
609#define HAVE_CHANGE_MTU
610 int (*ndo_change_mtu)(struct net_device *dev, 654 int (*ndo_change_mtu)(struct net_device *dev,
611 int new_mtu); 655 int new_mtu);
612 int (*ndo_neigh_setup)(struct net_device *dev, 656 int (*ndo_neigh_setup)(struct net_device *dev,
613 struct neigh_parms *); 657 struct neigh_parms *);
614#define HAVE_TX_TIMEOUT
615 void (*ndo_tx_timeout) (struct net_device *dev); 658 void (*ndo_tx_timeout) (struct net_device *dev);
616 659
617 struct net_device_stats* (*ndo_get_stats)(struct net_device *dev); 660 struct net_device_stats* (*ndo_get_stats)(struct net_device *dev);
@@ -623,9 +666,17 @@ struct net_device_ops {
623 void (*ndo_vlan_rx_kill_vid)(struct net_device *dev, 666 void (*ndo_vlan_rx_kill_vid)(struct net_device *dev,
624 unsigned short vid); 667 unsigned short vid);
625#ifdef CONFIG_NET_POLL_CONTROLLER 668#ifdef CONFIG_NET_POLL_CONTROLLER
626#define HAVE_NETDEV_POLL
627 void (*ndo_poll_controller)(struct net_device *dev); 669 void (*ndo_poll_controller)(struct net_device *dev);
628#endif 670#endif
671 int (*ndo_set_vf_mac)(struct net_device *dev,
672 int queue, u8 *mac);
673 int (*ndo_set_vf_vlan)(struct net_device *dev,
674 int queue, u16 vlan, u8 qos);
675 int (*ndo_set_vf_tx_rate)(struct net_device *dev,
676 int vf, int rate);
677 int (*ndo_get_vf_config)(struct net_device *dev,
678 int vf,
679 struct ifla_vf_info *ivf);
629#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) 680#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
630 int (*ndo_fcoe_enable)(struct net_device *dev); 681 int (*ndo_fcoe_enable)(struct net_device *dev);
631 int (*ndo_fcoe_disable)(struct net_device *dev); 682 int (*ndo_fcoe_disable)(struct net_device *dev);
@@ -635,6 +686,10 @@ struct net_device_ops {
635 unsigned int sgc); 686 unsigned int sgc);
636 int (*ndo_fcoe_ddp_done)(struct net_device *dev, 687 int (*ndo_fcoe_ddp_done)(struct net_device *dev,
637 u16 xid); 688 u16 xid);
689#define NETDEV_FCOE_WWNN 0
690#define NETDEV_FCOE_WWPN 1
691 int (*ndo_fcoe_get_wwn)(struct net_device *dev,
692 u64 *wwn, int type);
638#endif 693#endif
639}; 694};
640 695
@@ -648,8 +703,7 @@ struct net_device_ops {
648 * moves out. 703 * moves out.
649 */ 704 */
650 705
651struct net_device 706struct net_device {
652{
653 707
654 /* 708 /*
655 * This is the first field of the "visible" part of this structure 709 * This is the first field of the "visible" part of this structure
@@ -683,6 +737,7 @@ struct net_device
683 737
684 struct list_head dev_list; 738 struct list_head dev_list;
685 struct list_head napi_list; 739 struct list_head napi_list;
740 struct list_head unreg_list;
686 741
687 /* Net device features */ 742 /* Net device features */
688 unsigned long features; 743 unsigned long features;
@@ -708,6 +763,7 @@ struct net_device
708#define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ 763#define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */
709#define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ 764#define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */
710#define NETIF_F_FCOE_MTU (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/ 765#define NETIF_F_FCOE_MTU (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/
766#define NETIF_F_NTUPLE (1 << 27) /* N-tuple filters supported */
711 767
712 /* Segmentation offload features */ 768 /* Segmentation offload features */
713#define NETIF_F_GSO_SHIFT 16 769#define NETIF_F_GSO_SHIFT 16
@@ -859,7 +915,7 @@ struct net_device
859 /* device index hash chain */ 915 /* device index hash chain */
860 struct hlist_node index_hlist; 916 struct hlist_node index_hlist;
861 917
862 struct net_device *link_watch_next; 918 struct list_head link_watch_list;
863 919
864 /* register/unregister state machine */ 920 /* register/unregister state machine */
865 enum { NETREG_UNINITIALIZED=0, 921 enum { NETREG_UNINITIALIZED=0,
@@ -868,7 +924,12 @@ struct net_device
868 NETREG_UNREGISTERED, /* completed unregister todo */ 924 NETREG_UNREGISTERED, /* completed unregister todo */
869 NETREG_RELEASED, /* called free_netdev */ 925 NETREG_RELEASED, /* called free_netdev */
870 NETREG_DUMMY, /* dummy device for NAPI poll */ 926 NETREG_DUMMY, /* dummy device for NAPI poll */
871 } reg_state; 927 } reg_state:16;
928
929 enum {
930 RTNL_LINK_INITIALIZED,
931 RTNL_LINK_INITIALIZING,
932 } rtnl_link_state:16;
872 933
873 /* Called from unregister, can be used to call free_netdev */ 934 /* Called from unregister, can be used to call free_netdev */
874 void (*destructor)(struct net_device *dev); 935 void (*destructor)(struct net_device *dev);
@@ -894,8 +955,8 @@ struct net_device
894 955
895 /* class/net/name entry */ 956 /* class/net/name entry */
896 struct device dev; 957 struct device dev;
897 /* space for optional statistics and wireless sysfs groups */ 958 /* space for optional device, statistics, and wireless sysfs groups */
898 const struct attribute_group *sysfs_groups[3]; 959 const struct attribute_group *sysfs_groups[4];
899 960
900 /* rtnetlink link ops */ 961 /* rtnetlink link ops */
901 const struct rtnl_link_ops *rtnl_link_ops; 962 const struct rtnl_link_ops *rtnl_link_ops;
@@ -909,13 +970,15 @@ struct net_device
909 970
910#ifdef CONFIG_DCB 971#ifdef CONFIG_DCB
911 /* Data Center Bridging netlink ops */ 972 /* Data Center Bridging netlink ops */
912 struct dcbnl_rtnl_ops *dcbnl_ops; 973 const struct dcbnl_rtnl_ops *dcbnl_ops;
913#endif 974#endif
914 975
915#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) 976#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
916 /* max exchange id for FCoE LRO by ddp */ 977 /* max exchange id for FCoE LRO by ddp */
917 unsigned int fcoe_ddp_xid; 978 unsigned int fcoe_ddp_xid;
918#endif 979#endif
980 /* n-tuple filter list attached to this device */
981 struct ethtool_rx_ntuple_list ethtool_ntuple_list;
919}; 982};
920#define to_net_dev(d) container_of(d, struct net_device, dev) 983#define to_net_dev(d) container_of(d, struct net_device, dev)
921 984
@@ -972,6 +1035,15 @@ static inline bool netdev_uses_dsa_tags(struct net_device *dev)
972 return 0; 1035 return 0;
973} 1036}
974 1037
1038#ifndef CONFIG_NET_NS
1039static inline void skb_set_dev(struct sk_buff *skb, struct net_device *dev)
1040{
1041 skb->dev = dev;
1042}
1043#else /* CONFIG_NET_NS */
1044void skb_set_dev(struct sk_buff *skb, struct net_device *dev);
1045#endif
1046
975static inline bool netdev_uses_trailer_tags(struct net_device *dev) 1047static inline bool netdev_uses_trailer_tags(struct net_device *dev)
976{ 1048{
977#ifdef CONFIG_NET_DSA_TAG_TRAILER 1049#ifdef CONFIG_NET_DSA_TAG_TRAILER
@@ -1075,10 +1147,16 @@ extern rwlock_t dev_base_lock; /* Device list lock */
1075 1147
1076#define for_each_netdev(net, d) \ 1148#define for_each_netdev(net, d) \
1077 list_for_each_entry(d, &(net)->dev_base_head, dev_list) 1149 list_for_each_entry(d, &(net)->dev_base_head, dev_list)
1150#define for_each_netdev_reverse(net, d) \
1151 list_for_each_entry_reverse(d, &(net)->dev_base_head, dev_list)
1152#define for_each_netdev_rcu(net, d) \
1153 list_for_each_entry_rcu(d, &(net)->dev_base_head, dev_list)
1078#define for_each_netdev_safe(net, d, n) \ 1154#define for_each_netdev_safe(net, d, n) \
1079 list_for_each_entry_safe(d, n, &(net)->dev_base_head, dev_list) 1155 list_for_each_entry_safe(d, n, &(net)->dev_base_head, dev_list)
1080#define for_each_netdev_continue(net, d) \ 1156#define for_each_netdev_continue(net, d) \
1081 list_for_each_entry_continue(d, &(net)->dev_base_head, dev_list) 1157 list_for_each_entry_continue(d, &(net)->dev_base_head, dev_list)
1158#define for_each_netdev_continue_rcu(net, d) \
1159 list_for_each_entry_continue_rcu(d, &(net)->dev_base_head, dev_list)
1082#define net_device_entry(lh) list_entry(lh, struct net_device, dev_list) 1160#define net_device_entry(lh) list_entry(lh, struct net_device, dev_list)
1083 1161
1084static inline struct net_device *next_net_device(struct net_device *dev) 1162static inline struct net_device *next_net_device(struct net_device *dev)
@@ -1091,6 +1169,16 @@ static inline struct net_device *next_net_device(struct net_device *dev)
1091 return lh == &net->dev_base_head ? NULL : net_device_entry(lh); 1169 return lh == &net->dev_base_head ? NULL : net_device_entry(lh);
1092} 1170}
1093 1171
1172static inline struct net_device *next_net_device_rcu(struct net_device *dev)
1173{
1174 struct list_head *lh;
1175 struct net *net;
1176
1177 net = dev_net(dev);
1178 lh = rcu_dereference(dev->dev_list.next);
1179 return lh == &net->dev_base_head ? NULL : net_device_entry(lh);
1180}
1181
1094static inline struct net_device *first_net_device(struct net *net) 1182static inline struct net_device *first_net_device(struct net *net)
1095{ 1183{
1096 return list_empty(&net->dev_base_head) ? NULL : 1184 return list_empty(&net->dev_base_head) ? NULL :
@@ -1109,6 +1197,7 @@ extern void __dev_remove_pack(struct packet_type *pt);
1109extern struct net_device *dev_get_by_flags(struct net *net, unsigned short flags, 1197extern struct net_device *dev_get_by_flags(struct net *net, unsigned short flags,
1110 unsigned short mask); 1198 unsigned short mask);
1111extern struct net_device *dev_get_by_name(struct net *net, const char *name); 1199extern struct net_device *dev_get_by_name(struct net *net, const char *name);
1200extern struct net_device *dev_get_by_name_rcu(struct net *net, const char *name);
1112extern struct net_device *__dev_get_by_name(struct net *net, const char *name); 1201extern struct net_device *__dev_get_by_name(struct net *net, const char *name);
1113extern int dev_alloc_name(struct net_device *dev, const char *name); 1202extern int dev_alloc_name(struct net_device *dev, const char *name);
1114extern int dev_open(struct net_device *dev); 1203extern int dev_open(struct net_device *dev);
@@ -1116,7 +1205,14 @@ extern int dev_close(struct net_device *dev);
1116extern void dev_disable_lro(struct net_device *dev); 1205extern void dev_disable_lro(struct net_device *dev);
1117extern int dev_queue_xmit(struct sk_buff *skb); 1206extern int dev_queue_xmit(struct sk_buff *skb);
1118extern int register_netdevice(struct net_device *dev); 1207extern int register_netdevice(struct net_device *dev);
1119extern void unregister_netdevice(struct net_device *dev); 1208extern void unregister_netdevice_queue(struct net_device *dev,
1209 struct list_head *head);
1210extern void unregister_netdevice_many(struct list_head *head);
1211static inline void unregister_netdevice(struct net_device *dev)
1212{
1213 unregister_netdevice_queue(dev, NULL);
1214}
1215
1120extern void free_netdev(struct net_device *dev); 1216extern void free_netdev(struct net_device *dev);
1121extern void synchronize_net(void); 1217extern void synchronize_net(void);
1122extern int register_netdevice_notifier(struct notifier_block *nb); 1218extern int register_netdevice_notifier(struct notifier_block *nb);
@@ -1127,6 +1223,7 @@ extern void netdev_resync_ops(struct net_device *dev);
1127extern int call_netdevice_notifiers(unsigned long val, struct net_device *dev); 1223extern int call_netdevice_notifiers(unsigned long val, struct net_device *dev);
1128extern struct net_device *dev_get_by_index(struct net *net, int ifindex); 1224extern struct net_device *dev_get_by_index(struct net *net, int ifindex);
1129extern struct net_device *__dev_get_by_index(struct net *net, int ifindex); 1225extern struct net_device *__dev_get_by_index(struct net *net, int ifindex);
1226extern struct net_device *dev_get_by_index_rcu(struct net *net, int ifindex);
1130extern int dev_restart(struct net_device *dev); 1227extern int dev_restart(struct net_device *dev);
1131#ifdef CONFIG_NETPOLL_TRAP 1228#ifdef CONFIG_NETPOLL_TRAP
1132extern int netpoll_trap(void); 1229extern int netpoll_trap(void);
@@ -1212,8 +1309,7 @@ static inline int unregister_gifconf(unsigned int family)
1212 * Incoming packets are placed on per-cpu queues so that 1309 * Incoming packets are placed on per-cpu queues so that
1213 * no locking is needed. 1310 * no locking is needed.
1214 */ 1311 */
1215struct softnet_data 1312struct softnet_data {
1216{
1217 struct Qdisc *output_queue; 1313 struct Qdisc *output_queue;
1218 struct sk_buff_head input_pkt_queue; 1314 struct sk_buff_head input_pkt_queue;
1219 struct list_head poll_list; 1315 struct list_head poll_list;
@@ -1466,19 +1562,19 @@ extern int netif_rx(struct sk_buff *skb);
1466extern int netif_rx_ni(struct sk_buff *skb); 1562extern int netif_rx_ni(struct sk_buff *skb);
1467#define HAVE_NETIF_RECEIVE_SKB 1 1563#define HAVE_NETIF_RECEIVE_SKB 1
1468extern int netif_receive_skb(struct sk_buff *skb); 1564extern int netif_receive_skb(struct sk_buff *skb);
1469extern void napi_gro_flush(struct napi_struct *napi); 1565extern gro_result_t dev_gro_receive(struct napi_struct *napi,
1470extern int dev_gro_receive(struct napi_struct *napi,
1471 struct sk_buff *skb); 1566 struct sk_buff *skb);
1472extern int napi_skb_finish(int ret, struct sk_buff *skb); 1567extern gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb);
1473extern int napi_gro_receive(struct napi_struct *napi, 1568extern gro_result_t napi_gro_receive(struct napi_struct *napi,
1474 struct sk_buff *skb); 1569 struct sk_buff *skb);
1475extern void napi_reuse_skb(struct napi_struct *napi, 1570extern void napi_reuse_skb(struct napi_struct *napi,
1476 struct sk_buff *skb); 1571 struct sk_buff *skb);
1477extern struct sk_buff * napi_get_frags(struct napi_struct *napi); 1572extern struct sk_buff * napi_get_frags(struct napi_struct *napi);
1478extern int napi_frags_finish(struct napi_struct *napi, 1573extern gro_result_t napi_frags_finish(struct napi_struct *napi,
1479 struct sk_buff *skb, int ret); 1574 struct sk_buff *skb,
1575 gro_result_t ret);
1480extern struct sk_buff * napi_frags_skb(struct napi_struct *napi); 1576extern struct sk_buff * napi_frags_skb(struct napi_struct *napi);
1481extern int napi_gro_frags(struct napi_struct *napi); 1577extern gro_result_t napi_gro_frags(struct napi_struct *napi);
1482 1578
1483static inline void napi_free_frags(struct napi_struct *napi) 1579static inline void napi_free_frags(struct napi_struct *napi)
1484{ 1580{
@@ -1491,7 +1587,9 @@ extern int dev_valid_name(const char *name);
1491extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *); 1587extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *);
1492extern int dev_ethtool(struct net *net, struct ifreq *); 1588extern int dev_ethtool(struct net *net, struct ifreq *);
1493extern unsigned dev_get_flags(const struct net_device *); 1589extern unsigned dev_get_flags(const struct net_device *);
1590extern int __dev_change_flags(struct net_device *, unsigned int flags);
1494extern int dev_change_flags(struct net_device *, unsigned); 1591extern int dev_change_flags(struct net_device *, unsigned);
1592extern void __dev_notify_flags(struct net_device *, unsigned int old_flags);
1495extern int dev_change_name(struct net_device *, const char *); 1593extern int dev_change_name(struct net_device *, const char *);
1496extern int dev_set_alias(struct net_device *, const char *, size_t); 1594extern int dev_set_alias(struct net_device *, const char *, size_t);
1497extern int dev_change_net_namespace(struct net_device *, 1595extern int dev_change_net_namespace(struct net_device *,
@@ -1502,6 +1600,8 @@ extern int dev_set_mac_address(struct net_device *,
1502extern int dev_hard_start_xmit(struct sk_buff *skb, 1600extern int dev_hard_start_xmit(struct sk_buff *skb,
1503 struct net_device *dev, 1601 struct net_device *dev,
1504 struct netdev_queue *txq); 1602 struct netdev_queue *txq);
1603extern int dev_forward_skb(struct net_device *dev,
1604 struct sk_buff *skb);
1505 1605
1506extern int netdev_budget; 1606extern int netdev_budget;
1507 1607
@@ -1540,6 +1640,7 @@ static inline void dev_hold(struct net_device *dev)
1540 */ 1640 */
1541 1641
1542extern void linkwatch_fire_event(struct net_device *dev); 1642extern void linkwatch_fire_event(struct net_device *dev);
1643extern void linkwatch_forget_dev(struct net_device *dev);
1543 1644
1544/** 1645/**
1545 * netif_carrier_ok - test if carrier present 1646 * netif_carrier_ok - test if carrier present
@@ -1609,7 +1710,8 @@ static inline int netif_dormant(const struct net_device *dev)
1609 * 1710 *
1610 * Check if carrier is operational 1711 * Check if carrier is operational
1611 */ 1712 */
1612static inline int netif_oper_up(const struct net_device *dev) { 1713static inline int netif_oper_up(const struct net_device *dev)
1714{
1613 return (dev->operstate == IF_OPER_UP || 1715 return (dev->operstate == IF_OPER_UP ||
1614 dev->operstate == IF_OPER_UNKNOWN /* backward compat */); 1716 dev->operstate == IF_OPER_UNKNOWN /* backward compat */);
1615} 1717}
@@ -1880,6 +1982,7 @@ extern void netdev_features_change(struct net_device *dev);
1880extern void dev_load(struct net *net, const char *name); 1982extern void dev_load(struct net *net, const char *name);
1881extern void dev_mcast_init(void); 1983extern void dev_mcast_init(void);
1882extern const struct net_device_stats *dev_get_stats(struct net_device *dev); 1984extern const struct net_device_stats *dev_get_stats(struct net_device *dev);
1985extern void dev_txq_stats_fold(const struct net_device *dev, struct net_device_stats *stats);
1883 1986
1884extern int netdev_max_backlog; 1987extern int netdev_max_backlog;
1885extern int weight_p; 1988extern int weight_p;
@@ -1914,6 +2017,9 @@ unsigned long netdev_increment_features(unsigned long all, unsigned long one,
1914 unsigned long mask); 2017 unsigned long mask);
1915unsigned long netdev_fix_features(unsigned long features, const char *name); 2018unsigned long netdev_fix_features(unsigned long features, const char *name);
1916 2019
2020void netif_stacked_transfer_operstate(const struct net_device *rootdev,
2021 struct net_device *dev);
2022
1917static inline int net_gso_ok(int features, int gso_type) 2023static inline int net_gso_ok(int features, int gso_type)
1918{ 2024{
1919 int feature = gso_type << NETIF_F_GSO_SHIFT; 2025 int feature = gso_type << NETIF_F_GSO_SHIFT;
@@ -1953,12 +2059,12 @@ static inline void skb_bond_set_mac_by_master(struct sk_buff *skb,
1953 * duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and 2059 * duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and
1954 * ARP on active-backup slaves with arp_validate enabled. 2060 * ARP on active-backup slaves with arp_validate enabled.
1955 */ 2061 */
1956static inline int skb_bond_should_drop(struct sk_buff *skb) 2062static inline int skb_bond_should_drop(struct sk_buff *skb,
2063 struct net_device *master)
1957{ 2064{
1958 struct net_device *dev = skb->dev;
1959 struct net_device *master = dev->master;
1960
1961 if (master) { 2065 if (master) {
2066 struct net_device *dev = skb->dev;
2067
1962 if (master->priv_flags & IFF_MASTER_ARPMON) 2068 if (master->priv_flags & IFF_MASTER_ARPMON)
1963 dev->last_rx = jiffies; 2069 dev->last_rx = jiffies;
1964 2070
@@ -2013,6 +2119,130 @@ static inline u32 dev_ethtool_get_flags(struct net_device *dev)
2013 return 0; 2119 return 0;
2014 return dev->ethtool_ops->get_flags(dev); 2120 return dev->ethtool_ops->get_flags(dev);
2015} 2121}
2122
2123/* Logging, debugging and troubleshooting/diagnostic helpers. */
2124
2125/* netdev_printk helpers, similar to dev_printk */
2126
2127static inline const char *netdev_name(const struct net_device *dev)
2128{
2129 if (dev->reg_state != NETREG_REGISTERED)
2130 return "(unregistered net_device)";
2131 return dev->name;
2132}
2133
2134#define netdev_printk(level, netdev, format, args...) \
2135 dev_printk(level, (netdev)->dev.parent, \
2136 "%s: " format, \
2137 netdev_name(netdev), ##args)
2138
2139#define netdev_emerg(dev, format, args...) \
2140 netdev_printk(KERN_EMERG, dev, format, ##args)
2141#define netdev_alert(dev, format, args...) \
2142 netdev_printk(KERN_ALERT, dev, format, ##args)
2143#define netdev_crit(dev, format, args...) \
2144 netdev_printk(KERN_CRIT, dev, format, ##args)
2145#define netdev_err(dev, format, args...) \
2146 netdev_printk(KERN_ERR, dev, format, ##args)
2147#define netdev_warn(dev, format, args...) \
2148 netdev_printk(KERN_WARNING, dev, format, ##args)
2149#define netdev_notice(dev, format, args...) \
2150 netdev_printk(KERN_NOTICE, dev, format, ##args)
2151#define netdev_info(dev, format, args...) \
2152 netdev_printk(KERN_INFO, dev, format, ##args)
2153
2154#if defined(DEBUG)
2155#define netdev_dbg(__dev, format, args...) \
2156 netdev_printk(KERN_DEBUG, __dev, format, ##args)
2157#elif defined(CONFIG_DYNAMIC_DEBUG)
2158#define netdev_dbg(__dev, format, args...) \
2159do { \
2160 dynamic_dev_dbg((__dev)->dev.parent, "%s: " format, \
2161 netdev_name(__dev), ##args); \
2162} while (0)
2163#else
2164#define netdev_dbg(__dev, format, args...) \
2165({ \
2166 if (0) \
2167 netdev_printk(KERN_DEBUG, __dev, format, ##args); \
2168 0; \
2169})
2170#endif
2171
2172#if defined(VERBOSE_DEBUG)
2173#define netdev_vdbg netdev_dbg
2174#else
2175
2176#define netdev_vdbg(dev, format, args...) \
2177({ \
2178 if (0) \
2179 netdev_printk(KERN_DEBUG, dev, format, ##args); \
2180 0; \
2181})
2182#endif
2183
2184/*
2185 * netdev_WARN() acts like dev_printk(), but with the key difference
2186 * of using a WARN/WARN_ON to get the message out, including the
2187 * file/line information and a backtrace.
2188 */
2189#define netdev_WARN(dev, format, args...) \
2190 WARN(1, "netdevice: %s\n" format, netdev_name(dev), ##args);
2191
2192/* netif printk helpers, similar to netdev_printk */
2193
2194#define netif_printk(priv, type, level, dev, fmt, args...) \
2195do { \
2196 if (netif_msg_##type(priv)) \
2197 netdev_printk(level, (dev), fmt, ##args); \
2198} while (0)
2199
2200#define netif_emerg(priv, type, dev, fmt, args...) \
2201 netif_printk(priv, type, KERN_EMERG, dev, fmt, ##args)
2202#define netif_alert(priv, type, dev, fmt, args...) \
2203 netif_printk(priv, type, KERN_ALERT, dev, fmt, ##args)
2204#define netif_crit(priv, type, dev, fmt, args...) \
2205 netif_printk(priv, type, KERN_CRIT, dev, fmt, ##args)
2206#define netif_err(priv, type, dev, fmt, args...) \
2207 netif_printk(priv, type, KERN_ERR, dev, fmt, ##args)
2208#define netif_warn(priv, type, dev, fmt, args...) \
2209 netif_printk(priv, type, KERN_WARNING, dev, fmt, ##args)
2210#define netif_notice(priv, type, dev, fmt, args...) \
2211 netif_printk(priv, type, KERN_NOTICE, dev, fmt, ##args)
2212#define netif_info(priv, type, dev, fmt, args...) \
2213 netif_printk(priv, type, KERN_INFO, (dev), fmt, ##args)
2214
2215#if defined(DEBUG)
2216#define netif_dbg(priv, type, dev, format, args...) \
2217 netif_printk(priv, type, KERN_DEBUG, dev, format, ##args)
2218#elif defined(CONFIG_DYNAMIC_DEBUG)
2219#define netif_dbg(priv, type, netdev, format, args...) \
2220do { \
2221 if (netif_msg_##type(priv)) \
2222 dynamic_dev_dbg((netdev)->dev.parent, \
2223 "%s: " format, \
2224 netdev_name(netdev), ##args); \
2225} while (0)
2226#else
2227#define netif_dbg(priv, type, dev, format, args...) \
2228({ \
2229 if (0) \
2230 netif_printk(priv, type, KERN_DEBUG, dev, format, ##args); \
2231 0; \
2232})
2233#endif
2234
2235#if defined(VERBOSE_DEBUG)
2236#define netif_vdbg netdev_dbg
2237#else
2238#define netif_vdbg(priv, type, dev, format, args...) \
2239({ \
2240 if (0) \
2241 netif_printk(KERN_DEBUG, dev, format, ##args); \
2242 0; \
2243})
2244#endif
2245
2016#endif /* __KERNEL__ */ 2246#endif /* __KERNEL__ */
2017 2247
2018#endif /* _LINUX_NETDEVICE_H */ 2248#endif /* _LINUX_NETDEVICE_H */
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
index 6132b5e6d9d3..89341c32631a 100644
--- a/include/linux/netfilter.h
+++ b/include/linux/netfilter.h
@@ -93,8 +93,7 @@ typedef unsigned int nf_hookfn(unsigned int hooknum,
93 const struct net_device *out, 93 const struct net_device *out,
94 int (*okfn)(struct sk_buff *)); 94 int (*okfn)(struct sk_buff *));
95 95
96struct nf_hook_ops 96struct nf_hook_ops {
97{
98 struct list_head list; 97 struct list_head list;
99 98
100 /* User fills in from here down. */ 99 /* User fills in from here down. */
@@ -106,8 +105,7 @@ struct nf_hook_ops
106 int priority; 105 int priority;
107}; 106};
108 107
109struct nf_sockopt_ops 108struct nf_sockopt_ops {
110{
111 struct list_head list; 109 struct list_head list;
112 110
113 u_int8_t pf; 111 u_int8_t pf;
@@ -116,15 +114,17 @@ struct nf_sockopt_ops
116 int set_optmin; 114 int set_optmin;
117 int set_optmax; 115 int set_optmax;
118 int (*set)(struct sock *sk, int optval, void __user *user, unsigned int len); 116 int (*set)(struct sock *sk, int optval, void __user *user, unsigned int len);
117#ifdef CONFIG_COMPAT
119 int (*compat_set)(struct sock *sk, int optval, 118 int (*compat_set)(struct sock *sk, int optval,
120 void __user *user, unsigned int len); 119 void __user *user, unsigned int len);
121 120#endif
122 int get_optmin; 121 int get_optmin;
123 int get_optmax; 122 int get_optmax;
124 int (*get)(struct sock *sk, int optval, void __user *user, int *len); 123 int (*get)(struct sock *sk, int optval, void __user *user, int *len);
124#ifdef CONFIG_COMPAT
125 int (*compat_get)(struct sock *sk, int optval, 125 int (*compat_get)(struct sock *sk, int optval,
126 void __user *user, int *len); 126 void __user *user, int *len);
127 127#endif
128 /* Use the module struct to lock set/get code in place */ 128 /* Use the module struct to lock set/get code in place */
129 struct module *owner; 129 struct module *owner;
130}; 130};
@@ -163,11 +163,8 @@ static inline int nf_hook_thresh(u_int8_t pf, unsigned int hook,
163 struct sk_buff *skb, 163 struct sk_buff *skb,
164 struct net_device *indev, 164 struct net_device *indev,
165 struct net_device *outdev, 165 struct net_device *outdev,
166 int (*okfn)(struct sk_buff *), int thresh, 166 int (*okfn)(struct sk_buff *), int thresh)
167 int cond)
168{ 167{
169 if (!cond)
170 return 1;
171#ifndef CONFIG_NETFILTER_DEBUG 168#ifndef CONFIG_NETFILTER_DEBUG
172 if (list_empty(&nf_hooks[pf][hook])) 169 if (list_empty(&nf_hooks[pf][hook]))
173 return 1; 170 return 1;
@@ -179,7 +176,7 @@ static inline int nf_hook(u_int8_t pf, unsigned int hook, struct sk_buff *skb,
179 struct net_device *indev, struct net_device *outdev, 176 struct net_device *indev, struct net_device *outdev,
180 int (*okfn)(struct sk_buff *)) 177 int (*okfn)(struct sk_buff *))
181{ 178{
182 return nf_hook_thresh(pf, hook, skb, indev, outdev, okfn, INT_MIN, 1); 179 return nf_hook_thresh(pf, hook, skb, indev, outdev, okfn, INT_MIN);
183} 180}
184 181
185/* Activate hook; either okfn or kfree_skb called, unless a hook 182/* Activate hook; either okfn or kfree_skb called, unless a hook
@@ -199,36 +196,49 @@ static inline int nf_hook(u_int8_t pf, unsigned int hook, struct sk_buff *skb,
199 coders :) 196 coders :)
200*/ 197*/
201 198
202/* This is gross, but inline doesn't cut it for avoiding the function 199static inline int
203 call in fast path: gcc doesn't inline (needs value tracking?). --RR */ 200NF_HOOK_THRESH(uint8_t pf, unsigned int hook, struct sk_buff *skb,
204 201 struct net_device *in, struct net_device *out,
205/* HX: It's slightly less gross now. */ 202 int (*okfn)(struct sk_buff *), int thresh)
203{
204 int ret = nf_hook_thresh(pf, hook, skb, in, out, okfn, thresh);
205 if (ret == 1)
206 ret = okfn(skb);
207 return ret;
208}
206 209
207#define NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, thresh) \ 210static inline int
208({int __ret; \ 211NF_HOOK_COND(uint8_t pf, unsigned int hook, struct sk_buff *skb,
209if ((__ret=nf_hook_thresh(pf, hook, (skb), indev, outdev, okfn, thresh, 1)) == 1)\ 212 struct net_device *in, struct net_device *out,
210 __ret = (okfn)(skb); \ 213 int (*okfn)(struct sk_buff *), bool cond)
211__ret;}) 214{
215 int ret;
212 216
213#define NF_HOOK_COND(pf, hook, skb, indev, outdev, okfn, cond) \ 217 if (!cond ||
214({int __ret; \ 218 (ret = nf_hook_thresh(pf, hook, skb, in, out, okfn, INT_MIN) == 1))
215if ((__ret=nf_hook_thresh(pf, hook, (skb), indev, outdev, okfn, INT_MIN, cond)) == 1)\ 219 ret = okfn(skb);
216 __ret = (okfn)(skb); \ 220 return ret;
217__ret;}) 221}
218 222
219#define NF_HOOK(pf, hook, skb, indev, outdev, okfn) \ 223static inline int
220 NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, INT_MIN) 224NF_HOOK(uint8_t pf, unsigned int hook, struct sk_buff *skb,
225 struct net_device *in, struct net_device *out,
226 int (*okfn)(struct sk_buff *))
227{
228 return NF_HOOK_THRESH(pf, hook, skb, in, out, okfn, INT_MIN);
229}
221 230
222/* Call setsockopt() */ 231/* Call setsockopt() */
223int nf_setsockopt(struct sock *sk, u_int8_t pf, int optval, char __user *opt, 232int nf_setsockopt(struct sock *sk, u_int8_t pf, int optval, char __user *opt,
224 unsigned int len); 233 unsigned int len);
225int nf_getsockopt(struct sock *sk, u_int8_t pf, int optval, char __user *opt, 234int nf_getsockopt(struct sock *sk, u_int8_t pf, int optval, char __user *opt,
226 int *len); 235 int *len);
227 236#ifdef CONFIG_COMPAT
228int compat_nf_setsockopt(struct sock *sk, u_int8_t pf, int optval, 237int compat_nf_setsockopt(struct sock *sk, u_int8_t pf, int optval,
229 char __user *opt, unsigned int len); 238 char __user *opt, unsigned int len);
230int compat_nf_getsockopt(struct sock *sk, u_int8_t pf, int optval, 239int compat_nf_getsockopt(struct sock *sk, u_int8_t pf, int optval,
231 char __user *opt, int *len); 240 char __user *opt, int *len);
241#endif
232 242
233/* Call this before modifying an existing packet: ensures it is 243/* Call this before modifying an existing packet: ensures it is
234 modifiable and linear to the point you care about (writable_len). 244 modifiable and linear to the point you care about (writable_len).
@@ -327,8 +337,7 @@ static inline int nf_hook_thresh(u_int8_t pf, unsigned int hook,
327 struct sk_buff *skb, 337 struct sk_buff *skb,
328 struct net_device *indev, 338 struct net_device *indev,
329 struct net_device *outdev, 339 struct net_device *outdev,
330 int (*okfn)(struct sk_buff *), int thresh, 340 int (*okfn)(struct sk_buff *), int thresh)
331 int cond)
332{ 341{
333 return okfn(skb); 342 return okfn(skb);
334} 343}
diff --git a/include/linux/netfilter/Kbuild b/include/linux/netfilter/Kbuild
index 2aea50399c0b..a5a63e41b8af 100644
--- a/include/linux/netfilter/Kbuild
+++ b/include/linux/netfilter/Kbuild
@@ -6,6 +6,7 @@ header-y += nfnetlink_queue.h
6header-y += xt_CLASSIFY.h 6header-y += xt_CLASSIFY.h
7header-y += xt_CONNMARK.h 7header-y += xt_CONNMARK.h
8header-y += xt_CONNSECMARK.h 8header-y += xt_CONNSECMARK.h
9header-y += xt_CT.h
9header-y += xt_DSCP.h 10header-y += xt_DSCP.h
10header-y += xt_LED.h 11header-y += xt_LED.h
11header-y += xt_MARK.h 12header-y += xt_MARK.h
diff --git a/include/linux/netfilter/nf_conntrack_common.h b/include/linux/netfilter/nf_conntrack_common.h
index a8248ee422b7..c608677dda60 100644
--- a/include/linux/netfilter/nf_conntrack_common.h
+++ b/include/linux/netfilter/nf_conntrack_common.h
@@ -3,8 +3,7 @@
3/* Connection state tracking for netfilter. This is separated from, 3/* Connection state tracking for netfilter. This is separated from,
4 but required by, the NAT layer; it can also be used by an iptables 4 but required by, the NAT layer; it can also be used by an iptables
5 extension. */ 5 extension. */
6enum ip_conntrack_info 6enum ip_conntrack_info {
7{
8 /* Part of an established connection (either direction). */ 7 /* Part of an established connection (either direction). */
9 IP_CT_ESTABLISHED, 8 IP_CT_ESTABLISHED,
10 9
@@ -73,11 +72,32 @@ enum ip_conntrack_status {
73 /* Connection has fixed timeout. */ 72 /* Connection has fixed timeout. */
74 IPS_FIXED_TIMEOUT_BIT = 10, 73 IPS_FIXED_TIMEOUT_BIT = 10,
75 IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT), 74 IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT),
75
76 /* Conntrack is a template */
77 IPS_TEMPLATE_BIT = 11,
78 IPS_TEMPLATE = (1 << IPS_TEMPLATE_BIT),
79};
80
81/* Connection tracking event types */
82enum ip_conntrack_events {
83 IPCT_NEW, /* new conntrack */
84 IPCT_RELATED, /* related conntrack */
85 IPCT_DESTROY, /* destroyed conntrack */
86 IPCT_REPLY, /* connection has seen two-way traffic */
87 IPCT_ASSURED, /* connection status has changed to assured */
88 IPCT_PROTOINFO, /* protocol information has changed */
89 IPCT_HELPER, /* new helper has been set */
90 IPCT_MARK, /* new mark has been set */
91 IPCT_NATSEQADJ, /* NAT is doing sequence adjustment */
92 IPCT_SECMARK, /* new security mark has been set */
93};
94
95enum ip_conntrack_expect_events {
96 IPEXP_NEW, /* new expectation */
76}; 97};
77 98
78#ifdef __KERNEL__ 99#ifdef __KERNEL__
79struct ip_conntrack_stat 100struct ip_conntrack_stat {
80{
81 unsigned int searched; 101 unsigned int searched;
82 unsigned int found; 102 unsigned int found;
83 unsigned int new; 103 unsigned int new;
diff --git a/include/linux/netfilter/nf_conntrack_ftp.h b/include/linux/netfilter/nf_conntrack_ftp.h
index 47727d7546ea..3e3aa08980c3 100644
--- a/include/linux/netfilter/nf_conntrack_ftp.h
+++ b/include/linux/netfilter/nf_conntrack_ftp.h
@@ -3,8 +3,7 @@
3/* FTP tracking. */ 3/* FTP tracking. */
4 4
5/* This enum is exposed to userspace */ 5/* This enum is exposed to userspace */
6enum nf_ct_ftp_type 6enum nf_ct_ftp_type {
7{
8 /* PORT command from client */ 7 /* PORT command from client */
9 NF_CT_FTP_PORT, 8 NF_CT_FTP_PORT,
10 /* PASV response from server */ 9 /* PASV response from server */
diff --git a/include/linux/netfilter/nf_conntrack_sctp.h b/include/linux/netfilter/nf_conntrack_sctp.h
index 768f78c4ac53..ceeefe6681b5 100644
--- a/include/linux/netfilter/nf_conntrack_sctp.h
+++ b/include/linux/netfilter/nf_conntrack_sctp.h
@@ -16,8 +16,7 @@ enum sctp_conntrack {
16 SCTP_CONNTRACK_MAX 16 SCTP_CONNTRACK_MAX
17}; 17};
18 18
19struct ip_ct_sctp 19struct ip_ct_sctp {
20{
21 enum sctp_conntrack state; 20 enum sctp_conntrack state;
22 21
23 __be32 vtag[IP_CT_DIR_MAX]; 22 __be32 vtag[IP_CT_DIR_MAX];
diff --git a/include/linux/netfilter/nf_conntrack_sip.h b/include/linux/netfilter/nf_conntrack_sip.h
index 23aa2ec6b7b7..ff8cfbcf3b81 100644
--- a/include/linux/netfilter/nf_conntrack_sip.h
+++ b/include/linux/netfilter/nf_conntrack_sip.h
@@ -14,6 +14,7 @@ enum sip_expectation_classes {
14 SIP_EXPECT_SIGNALLING, 14 SIP_EXPECT_SIGNALLING,
15 SIP_EXPECT_AUDIO, 15 SIP_EXPECT_AUDIO,
16 SIP_EXPECT_VIDEO, 16 SIP_EXPECT_VIDEO,
17 SIP_EXPECT_IMAGE,
17 __SIP_EXPECT_MAX 18 __SIP_EXPECT_MAX
18}; 19};
19#define SIP_EXPECT_MAX (__SIP_EXPECT_MAX - 1) 20#define SIP_EXPECT_MAX (__SIP_EXPECT_MAX - 1)
@@ -34,10 +35,10 @@ struct sdp_media_type {
34struct sip_handler { 35struct sip_handler {
35 const char *method; 36 const char *method;
36 unsigned int len; 37 unsigned int len;
37 int (*request)(struct sk_buff *skb, 38 int (*request)(struct sk_buff *skb, unsigned int dataoff,
38 const char **dptr, unsigned int *datalen, 39 const char **dptr, unsigned int *datalen,
39 unsigned int cseq); 40 unsigned int cseq);
40 int (*response)(struct sk_buff *skb, 41 int (*response)(struct sk_buff *skb, unsigned int dataoff,
41 const char **dptr, unsigned int *datalen, 42 const char **dptr, unsigned int *datalen,
42 unsigned int cseq, unsigned int code); 43 unsigned int cseq, unsigned int code);
43}; 44};
@@ -84,7 +85,8 @@ enum sip_header_types {
84 SIP_HDR_FROM, 85 SIP_HDR_FROM,
85 SIP_HDR_TO, 86 SIP_HDR_TO,
86 SIP_HDR_CONTACT, 87 SIP_HDR_CONTACT,
87 SIP_HDR_VIA, 88 SIP_HDR_VIA_UDP,
89 SIP_HDR_VIA_TCP,
88 SIP_HDR_EXPIRES, 90 SIP_HDR_EXPIRES,
89 SIP_HDR_CONTENT_LENGTH, 91 SIP_HDR_CONTENT_LENGTH,
90}; 92};
@@ -100,33 +102,40 @@ enum sdp_header_types {
100}; 102};
101 103
102extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb, 104extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb,
105 unsigned int dataoff,
103 const char **dptr, 106 const char **dptr,
104 unsigned int *datalen); 107 unsigned int *datalen);
108extern void (*nf_nat_sip_seq_adjust_hook)(struct sk_buff *skb, s16 off);
105extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb, 109extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb,
110 unsigned int dataoff,
106 const char **dptr, 111 const char **dptr,
107 unsigned int *datalen, 112 unsigned int *datalen,
108 struct nf_conntrack_expect *exp, 113 struct nf_conntrack_expect *exp,
109 unsigned int matchoff, 114 unsigned int matchoff,
110 unsigned int matchlen); 115 unsigned int matchlen);
111extern unsigned int (*nf_nat_sdp_addr_hook)(struct sk_buff *skb, 116extern unsigned int (*nf_nat_sdp_addr_hook)(struct sk_buff *skb,
112 const char **dptr,
113 unsigned int dataoff, 117 unsigned int dataoff,
118 const char **dptr,
114 unsigned int *datalen, 119 unsigned int *datalen,
120 unsigned int sdpoff,
115 enum sdp_header_types type, 121 enum sdp_header_types type,
116 enum sdp_header_types term, 122 enum sdp_header_types term,
117 const union nf_inet_addr *addr); 123 const union nf_inet_addr *addr);
118extern unsigned int (*nf_nat_sdp_port_hook)(struct sk_buff *skb, 124extern unsigned int (*nf_nat_sdp_port_hook)(struct sk_buff *skb,
125 unsigned int dataoff,
119 const char **dptr, 126 const char **dptr,
120 unsigned int *datalen, 127 unsigned int *datalen,
121 unsigned int matchoff, 128 unsigned int matchoff,
122 unsigned int matchlen, 129 unsigned int matchlen,
123 u_int16_t port); 130 u_int16_t port);
124extern unsigned int (*nf_nat_sdp_session_hook)(struct sk_buff *skb, 131extern unsigned int (*nf_nat_sdp_session_hook)(struct sk_buff *skb,
125 const char **dptr,
126 unsigned int dataoff, 132 unsigned int dataoff,
133 const char **dptr,
127 unsigned int *datalen, 134 unsigned int *datalen,
135 unsigned int sdpoff,
128 const union nf_inet_addr *addr); 136 const union nf_inet_addr *addr);
129extern unsigned int (*nf_nat_sdp_media_hook)(struct sk_buff *skb, 137extern unsigned int (*nf_nat_sdp_media_hook)(struct sk_buff *skb,
138 unsigned int dataoff,
130 const char **dptr, 139 const char **dptr,
131 unsigned int *datalen, 140 unsigned int *datalen,
132 struct nf_conntrack_expect *rtp_exp, 141 struct nf_conntrack_expect *rtp_exp,
diff --git a/include/linux/netfilter/nf_conntrack_tcp.h b/include/linux/netfilter/nf_conntrack_tcp.h
index 4352feed2377..6e135f97e59a 100644
--- a/include/linux/netfilter/nf_conntrack_tcp.h
+++ b/include/linux/netfilter/nf_conntrack_tcp.h
@@ -55,8 +55,7 @@ struct ip_ct_tcp_state {
55 u_int8_t flags; /* per direction options */ 55 u_int8_t flags; /* per direction options */
56}; 56};
57 57
58struct ip_ct_tcp 58struct ip_ct_tcp {
59{
60 struct ip_ct_tcp_state seen[2]; /* connection parameters per direction */ 59 struct ip_ct_tcp_state seen[2]; /* connection parameters per direction */
61 u_int8_t state; /* state of the connection (enum tcp_conntrack) */ 60 u_int8_t state; /* state of the connection (enum tcp_conntrack) */
62 /* For detecting stale connections */ 61 /* For detecting stale connections */
@@ -67,6 +66,9 @@ struct ip_ct_tcp
67 u_int32_t last_ack; /* Last sequence number seen in opposite dir */ 66 u_int32_t last_ack; /* Last sequence number seen in opposite dir */
68 u_int32_t last_end; /* Last seq + len */ 67 u_int32_t last_end; /* Last seq + len */
69 u_int16_t last_win; /* Last window advertisement seen in dir */ 68 u_int16_t last_win; /* Last window advertisement seen in dir */
69 /* For SYN packets while we may be out-of-sync */
70 u_int8_t last_wscale; /* Last window scaling factor seen */
71 u_int8_t last_flags; /* Last flags set */
70}; 72};
71 73
72#endif /* __KERNEL__ */ 74#endif /* __KERNEL__ */
diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h
index 9f00da287f2c..361d6b5630ee 100644
--- a/include/linux/netfilter/nfnetlink.h
+++ b/include/linux/netfilter/nfnetlink.h
@@ -55,8 +55,7 @@ struct nfgenmsg {
55#include <linux/capability.h> 55#include <linux/capability.h>
56#include <net/netlink.h> 56#include <net/netlink.h>
57 57
58struct nfnl_callback 58struct nfnl_callback {
59{
60 int (*call)(struct sock *nl, struct sk_buff *skb, 59 int (*call)(struct sock *nl, struct sk_buff *skb,
61 const struct nlmsghdr *nlh, 60 const struct nlmsghdr *nlh,
62 const struct nlattr * const cda[]); 61 const struct nlattr * const cda[]);
@@ -64,8 +63,7 @@ struct nfnl_callback
64 const u_int16_t attr_count; /* number of nlattr's */ 63 const u_int16_t attr_count; /* number of nlattr's */
65}; 64};
66 65
67struct nfnetlink_subsystem 66struct nfnetlink_subsystem {
68{
69 const char *name; 67 const char *name;
70 __u8 subsys_id; /* nfnetlink subsystem ID */ 68 __u8 subsys_id; /* nfnetlink subsystem ID */
71 __u8 cb_count; /* number of callbacks */ 69 __u8 cb_count; /* number of callbacks */
@@ -75,11 +73,11 @@ struct nfnetlink_subsystem
75extern int nfnetlink_subsys_register(const struct nfnetlink_subsystem *n); 73extern int nfnetlink_subsys_register(const struct nfnetlink_subsystem *n);
76extern int nfnetlink_subsys_unregister(const struct nfnetlink_subsystem *n); 74extern int nfnetlink_subsys_unregister(const struct nfnetlink_subsystem *n);
77 75
78extern int nfnetlink_has_listeners(unsigned int group); 76extern int nfnetlink_has_listeners(struct net *net, unsigned int group);
79extern int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group, 77extern int nfnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigned group,
80 int echo, gfp_t flags); 78 int echo, gfp_t flags);
81extern void nfnetlink_set_err(u32 pid, u32 group, int error); 79extern int nfnetlink_set_err(struct net *net, u32 pid, u32 group, int error);
82extern int nfnetlink_unicast(struct sk_buff *skb, u_int32_t pid, int flags); 80extern int nfnetlink_unicast(struct sk_buff *skb, struct net *net, u_int32_t pid, int flags);
83 81
84extern void nfnl_lock(void); 82extern void nfnl_lock(void);
85extern void nfnl_unlock(void); 83extern void nfnl_unlock(void);
diff --git a/include/linux/netfilter/nfnetlink_compat.h b/include/linux/netfilter/nfnetlink_compat.h
index eda55cabceec..ffb95036bbd4 100644
--- a/include/linux/netfilter/nfnetlink_compat.h
+++ b/include/linux/netfilter/nfnetlink_compat.h
@@ -21,8 +21,7 @@
21 * ! nfnetlink use the same attributes methods. - J. Schulist. 21 * ! nfnetlink use the same attributes methods. - J. Schulist.
22 */ 22 */
23 23
24struct nfattr 24struct nfattr {
25{
26 __u16 nfa_len; 25 __u16 nfa_len;
27 __u16 nfa_type; /* we use 15 bits for the type, and the highest 26 __u16 nfa_type; /* we use 15 bits for the type, and the highest
28 * bit to indicate whether the payload is nested */ 27 * bit to indicate whether the payload is nested */
diff --git a/include/linux/netfilter/nfnetlink_conntrack.h b/include/linux/netfilter/nfnetlink_conntrack.h
index ed4ef8d0b11b..9ed534c991b9 100644
--- a/include/linux/netfilter/nfnetlink_conntrack.h
+++ b/include/linux/netfilter/nfnetlink_conntrack.h
@@ -40,6 +40,7 @@ enum ctattr_type {
40 CTA_NAT_SEQ_ADJ_ORIG, 40 CTA_NAT_SEQ_ADJ_ORIG,
41 CTA_NAT_SEQ_ADJ_REPLY, 41 CTA_NAT_SEQ_ADJ_REPLY,
42 CTA_SECMARK, 42 CTA_SECMARK,
43 CTA_ZONE,
43 __CTA_MAX 44 __CTA_MAX
44}; 45};
45#define CTA_MAX (__CTA_MAX - 1) 46#define CTA_MAX (__CTA_MAX - 1)
@@ -159,6 +160,7 @@ enum ctattr_expect {
159 CTA_EXPECT_TIMEOUT, 160 CTA_EXPECT_TIMEOUT,
160 CTA_EXPECT_ID, 161 CTA_EXPECT_ID,
161 CTA_EXPECT_HELP_NAME, 162 CTA_EXPECT_HELP_NAME,
163 CTA_EXPECT_ZONE,
162 __CTA_EXPECT_MAX 164 __CTA_EXPECT_MAX
163}; 165};
164#define CTA_EXPECT_MAX (__CTA_EXPECT_MAX - 1) 166#define CTA_EXPECT_MAX (__CTA_EXPECT_MAX - 1)
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h
index 812cb153cabb..84c7c928e9eb 100644
--- a/include/linux/netfilter/x_tables.h
+++ b/include/linux/netfilter/x_tables.h
@@ -6,8 +6,7 @@
6#define XT_FUNCTION_MAXNAMELEN 30 6#define XT_FUNCTION_MAXNAMELEN 30
7#define XT_TABLE_MAXNAMELEN 32 7#define XT_TABLE_MAXNAMELEN 32
8 8
9struct xt_entry_match 9struct xt_entry_match {
10{
11 union { 10 union {
12 struct { 11 struct {
13 __u16 match_size; 12 __u16 match_size;
@@ -31,8 +30,7 @@ struct xt_entry_match
31 unsigned char data[0]; 30 unsigned char data[0];
32}; 31};
33 32
34struct xt_entry_target 33struct xt_entry_target {
35{
36 union { 34 union {
37 struct { 35 struct {
38 __u16 target_size; 36 __u16 target_size;
@@ -64,16 +62,14 @@ struct xt_entry_target
64 }, \ 62 }, \
65} 63}
66 64
67struct xt_standard_target 65struct xt_standard_target {
68{
69 struct xt_entry_target target; 66 struct xt_entry_target target;
70 int verdict; 67 int verdict;
71}; 68};
72 69
73/* The argument to IPT_SO_GET_REVISION_*. Returns highest revision 70/* The argument to IPT_SO_GET_REVISION_*. Returns highest revision
74 * kernel supports, if >= revision. */ 71 * kernel supports, if >= revision. */
75struct xt_get_revision 72struct xt_get_revision {
76{
77 char name[XT_FUNCTION_MAXNAMELEN-1]; 73 char name[XT_FUNCTION_MAXNAMELEN-1];
78 74
79 __u8 revision; 75 __u8 revision;
@@ -90,16 +86,14 @@ struct xt_get_revision
90 * ip6t_entry and arpt_entry. This sucks, and it is a hack. It will be my 86 * ip6t_entry and arpt_entry. This sucks, and it is a hack. It will be my
91 * personal pleasure to remove it -HW 87 * personal pleasure to remove it -HW
92 */ 88 */
93struct _xt_align 89struct _xt_align {
94{
95 __u8 u8; 90 __u8 u8;
96 __u16 u16; 91 __u16 u16;
97 __u32 u32; 92 __u32 u32;
98 __u64 u64; 93 __u64 u64;
99}; 94};
100 95
101#define XT_ALIGN(s) (((s) + (__alignof__(struct _xt_align)-1)) \ 96#define XT_ALIGN(s) ALIGN((s), __alignof__(struct _xt_align))
102 & ~(__alignof__(struct _xt_align)-1))
103 97
104/* Standard return verdict, or do jump. */ 98/* Standard return verdict, or do jump. */
105#define XT_STANDARD_TARGET "" 99#define XT_STANDARD_TARGET ""
@@ -109,14 +103,12 @@ struct _xt_align
109#define SET_COUNTER(c,b,p) do { (c).bcnt = (b); (c).pcnt = (p); } while(0) 103#define SET_COUNTER(c,b,p) do { (c).bcnt = (b); (c).pcnt = (p); } while(0)
110#define ADD_COUNTER(c,b,p) do { (c).bcnt += (b); (c).pcnt += (p); } while(0) 104#define ADD_COUNTER(c,b,p) do { (c).bcnt += (b); (c).pcnt += (p); } while(0)
111 105
112struct xt_counters 106struct xt_counters {
113{
114 __u64 pcnt, bcnt; /* Packet and byte counters */ 107 __u64 pcnt, bcnt; /* Packet and byte counters */
115}; 108};
116 109
117/* The argument to IPT_SO_ADD_COUNTERS. */ 110/* The argument to IPT_SO_ADD_COUNTERS. */
118struct xt_counters_info 111struct xt_counters_info {
119{
120 /* Which table. */ 112 /* Which table. */
121 char name[XT_TABLE_MAXNAMELEN]; 113 char name[XT_TABLE_MAXNAMELEN];
122 114
@@ -128,6 +120,7 @@ struct xt_counters_info
128 120
129#define XT_INV_PROTO 0x40 /* Invert the sense of PROTO. */ 121#define XT_INV_PROTO 0x40 /* Invert the sense of PROTO. */
130 122
123#ifndef __KERNEL__
131/* fn returns 0 to continue iteration */ 124/* fn returns 0 to continue iteration */
132#define XT_MATCH_ITERATE(type, e, fn, args...) \ 125#define XT_MATCH_ITERATE(type, e, fn, args...) \
133({ \ 126({ \
@@ -171,6 +164,22 @@ struct xt_counters_info
171#define XT_ENTRY_ITERATE(type, entries, size, fn, args...) \ 164#define XT_ENTRY_ITERATE(type, entries, size, fn, args...) \
172 XT_ENTRY_ITERATE_CONTINUE(type, entries, size, 0, fn, args) 165 XT_ENTRY_ITERATE_CONTINUE(type, entries, size, 0, fn, args)
173 166
167#endif /* !__KERNEL__ */
168
169/* pos is normally a struct ipt_entry/ip6t_entry/etc. */
170#define xt_entry_foreach(pos, ehead, esize) \
171 for ((pos) = (typeof(pos))(ehead); \
172 (pos) < (typeof(pos))((char *)(ehead) + (esize)); \
173 (pos) = (typeof(pos))((char *)(pos) + (pos)->next_offset))
174
175/* can only be xt_entry_match, so no use of typeof here */
176#define xt_ematch_foreach(pos, entry) \
177 for ((pos) = (struct xt_entry_match *)entry->elems; \
178 (pos) < (struct xt_entry_match *)((char *)(entry) + \
179 (entry)->target_offset); \
180 (pos) = (struct xt_entry_match *)((char *)(pos) + \
181 (pos)->u.match_size))
182
174#ifdef __KERNEL__ 183#ifdef __KERNEL__
175 184
176#include <linux/netdevice.h> 185#include <linux/netdevice.h>
@@ -212,6 +221,7 @@ struct xt_match_param {
212 * @hook_mask: via which hooks the new rule is reachable 221 * @hook_mask: via which hooks the new rule is reachable
213 */ 222 */
214struct xt_mtchk_param { 223struct xt_mtchk_param {
224 struct net *net;
215 const char *table; 225 const char *table;
216 const void *entryinfo; 226 const void *entryinfo;
217 const struct xt_match *match; 227 const struct xt_match *match;
@@ -222,6 +232,7 @@ struct xt_mtchk_param {
222 232
223/* Match destructor parameters */ 233/* Match destructor parameters */
224struct xt_mtdtor_param { 234struct xt_mtdtor_param {
235 struct net *net;
225 const struct xt_match *match; 236 const struct xt_match *match;
226 void *matchinfo; 237 void *matchinfo;
227 u_int8_t family; 238 u_int8_t family;
@@ -254,6 +265,7 @@ struct xt_target_param {
254 * Other fields see above. 265 * Other fields see above.
255 */ 266 */
256struct xt_tgchk_param { 267struct xt_tgchk_param {
268 struct net *net;
257 const char *table; 269 const char *table;
258 const void *entryinfo; 270 const void *entryinfo;
259 const struct xt_target *target; 271 const struct xt_target *target;
@@ -264,13 +276,13 @@ struct xt_tgchk_param {
264 276
265/* Target destructor parameters */ 277/* Target destructor parameters */
266struct xt_tgdtor_param { 278struct xt_tgdtor_param {
279 struct net *net;
267 const struct xt_target *target; 280 const struct xt_target *target;
268 void *targinfo; 281 void *targinfo;
269 u_int8_t family; 282 u_int8_t family;
270}; 283};
271 284
272struct xt_match 285struct xt_match {
273{
274 struct list_head list; 286 struct list_head list;
275 287
276 const char name[XT_FUNCTION_MAXNAMELEN-1]; 288 const char name[XT_FUNCTION_MAXNAMELEN-1];
@@ -289,11 +301,11 @@ struct xt_match
289 301
290 /* Called when entry of this type deleted. */ 302 /* Called when entry of this type deleted. */
291 void (*destroy)(const struct xt_mtdtor_param *); 303 void (*destroy)(const struct xt_mtdtor_param *);
292 304#ifdef CONFIG_COMPAT
293 /* Called when userspace align differs from kernel space one */ 305 /* Called when userspace align differs from kernel space one */
294 void (*compat_from_user)(void *dst, void *src); 306 void (*compat_from_user)(void *dst, const void *src);
295 int (*compat_to_user)(void __user *dst, void *src); 307 int (*compat_to_user)(void __user *dst, const void *src);
296 308#endif
297 /* Set this to THIS_MODULE if you are a module, otherwise NULL */ 309 /* Set this to THIS_MODULE if you are a module, otherwise NULL */
298 struct module *me; 310 struct module *me;
299 311
@@ -302,7 +314,9 @@ struct xt_match
302 314
303 const char *table; 315 const char *table;
304 unsigned int matchsize; 316 unsigned int matchsize;
317#ifdef CONFIG_COMPAT
305 unsigned int compatsize; 318 unsigned int compatsize;
319#endif
306 unsigned int hooks; 320 unsigned int hooks;
307 unsigned short proto; 321 unsigned short proto;
308 322
@@ -310,8 +324,7 @@ struct xt_match
310}; 324};
311 325
312/* Registration hooks for targets. */ 326/* Registration hooks for targets. */
313struct xt_target 327struct xt_target {
314{
315 struct list_head list; 328 struct list_head list;
316 329
317 const char name[XT_FUNCTION_MAXNAMELEN-1]; 330 const char name[XT_FUNCTION_MAXNAMELEN-1];
@@ -330,17 +343,19 @@ struct xt_target
330 343
331 /* Called when entry of this type deleted. */ 344 /* Called when entry of this type deleted. */
332 void (*destroy)(const struct xt_tgdtor_param *); 345 void (*destroy)(const struct xt_tgdtor_param *);
333 346#ifdef CONFIG_COMPAT
334 /* Called when userspace align differs from kernel space one */ 347 /* Called when userspace align differs from kernel space one */
335 void (*compat_from_user)(void *dst, void *src); 348 void (*compat_from_user)(void *dst, const void *src);
336 int (*compat_to_user)(void __user *dst, void *src); 349 int (*compat_to_user)(void __user *dst, const void *src);
337 350#endif
338 /* Set this to THIS_MODULE if you are a module, otherwise NULL */ 351 /* Set this to THIS_MODULE if you are a module, otherwise NULL */
339 struct module *me; 352 struct module *me;
340 353
341 const char *table; 354 const char *table;
342 unsigned int targetsize; 355 unsigned int targetsize;
356#ifdef CONFIG_COMPAT
343 unsigned int compatsize; 357 unsigned int compatsize;
358#endif
344 unsigned int hooks; 359 unsigned int hooks;
345 unsigned short proto; 360 unsigned short proto;
346 361
@@ -349,8 +364,7 @@ struct xt_target
349}; 364};
350 365
351/* Furniture shopping... */ 366/* Furniture shopping... */
352struct xt_table 367struct xt_table {
353{
354 struct list_head list; 368 struct list_head list;
355 369
356 /* What hooks you will enter on */ 370 /* What hooks you will enter on */
@@ -363,6 +377,7 @@ struct xt_table
363 struct module *me; 377 struct module *me;
364 378
365 u_int8_t af; /* address/protocol family */ 379 u_int8_t af; /* address/protocol family */
380 int priority; /* hook order */
366 381
367 /* A unique name... */ 382 /* A unique name... */
368 const char name[XT_TABLE_MAXNAMELEN]; 383 const char name[XT_TABLE_MAXNAMELEN];
@@ -371,8 +386,7 @@ struct xt_table
371#include <linux/netfilter_ipv4.h> 386#include <linux/netfilter_ipv4.h>
372 387
373/* The table itself */ 388/* The table itself */
374struct xt_table_info 389struct xt_table_info {
375{
376 /* Size per table */ 390 /* Size per table */
377 unsigned int size; 391 unsigned int size;
378 /* Number of entries: FIXME. --RR */ 392 /* Number of entries: FIXME. --RR */
@@ -525,11 +539,13 @@ static inline unsigned long ifname_compare_aligned(const char *_a,
525 return ret; 539 return ret;
526} 540}
527 541
542extern struct nf_hook_ops *xt_hook_link(const struct xt_table *, nf_hookfn *);
543extern void xt_hook_unlink(const struct xt_table *, struct nf_hook_ops *);
544
528#ifdef CONFIG_COMPAT 545#ifdef CONFIG_COMPAT
529#include <net/compat.h> 546#include <net/compat.h>
530 547
531struct compat_xt_entry_match 548struct compat_xt_entry_match {
532{
533 union { 549 union {
534 struct { 550 struct {
535 u_int16_t match_size; 551 u_int16_t match_size;
@@ -545,8 +561,7 @@ struct compat_xt_entry_match
545 unsigned char data[0]; 561 unsigned char data[0];
546}; 562};
547 563
548struct compat_xt_entry_target 564struct compat_xt_entry_target {
549{
550 union { 565 union {
551 struct { 566 struct {
552 u_int16_t target_size; 567 u_int16_t target_size;
@@ -566,42 +581,42 @@ struct compat_xt_entry_target
566 * need to change whole approach in order to calculate align as function of 581 * need to change whole approach in order to calculate align as function of
567 * current task alignment */ 582 * current task alignment */
568 583
569struct compat_xt_counters 584struct compat_xt_counters {
570{ 585 compat_u64 pcnt, bcnt; /* Packet and byte counters */
571#if defined(CONFIG_X86_64) || defined(CONFIG_IA64)
572 u_int32_t cnt[4];
573#else
574 u_int64_t cnt[2];
575#endif
576}; 586};
577 587
578struct compat_xt_counters_info 588struct compat_xt_counters_info {
579{
580 char name[XT_TABLE_MAXNAMELEN]; 589 char name[XT_TABLE_MAXNAMELEN];
581 compat_uint_t num_counters; 590 compat_uint_t num_counters;
582 struct compat_xt_counters counters[0]; 591 struct compat_xt_counters counters[0];
583}; 592};
584 593
585#define COMPAT_XT_ALIGN(s) (((s) + (__alignof__(struct compat_xt_counters)-1)) \ 594struct _compat_xt_align {
586 & ~(__alignof__(struct compat_xt_counters)-1)) 595 __u8 u8;
596 __u16 u16;
597 __u32 u32;
598 compat_u64 u64;
599};
600
601#define COMPAT_XT_ALIGN(s) ALIGN((s), __alignof__(struct _compat_xt_align))
587 602
588extern void xt_compat_lock(u_int8_t af); 603extern void xt_compat_lock(u_int8_t af);
589extern void xt_compat_unlock(u_int8_t af); 604extern void xt_compat_unlock(u_int8_t af);
590 605
591extern int xt_compat_add_offset(u_int8_t af, unsigned int offset, short delta); 606extern int xt_compat_add_offset(u_int8_t af, unsigned int offset, short delta);
592extern void xt_compat_flush_offsets(u_int8_t af); 607extern void xt_compat_flush_offsets(u_int8_t af);
593extern short xt_compat_calc_jump(u_int8_t af, unsigned int offset); 608extern int xt_compat_calc_jump(u_int8_t af, unsigned int offset);
594 609
595extern int xt_compat_match_offset(const struct xt_match *match); 610extern int xt_compat_match_offset(const struct xt_match *match);
596extern int xt_compat_match_from_user(struct xt_entry_match *m, 611extern int xt_compat_match_from_user(struct xt_entry_match *m,
597 void **dstptr, unsigned int *size); 612 void **dstptr, unsigned int *size);
598extern int xt_compat_match_to_user(struct xt_entry_match *m, 613extern int xt_compat_match_to_user(const struct xt_entry_match *m,
599 void __user **dstptr, unsigned int *size); 614 void __user **dstptr, unsigned int *size);
600 615
601extern int xt_compat_target_offset(const struct xt_target *target); 616extern int xt_compat_target_offset(const struct xt_target *target);
602extern void xt_compat_target_from_user(struct xt_entry_target *t, 617extern void xt_compat_target_from_user(struct xt_entry_target *t,
603 void **dstptr, unsigned int *size); 618 void **dstptr, unsigned int *size);
604extern int xt_compat_target_to_user(struct xt_entry_target *t, 619extern int xt_compat_target_to_user(const struct xt_entry_target *t,
605 void __user **dstptr, unsigned int *size); 620 void __user **dstptr, unsigned int *size);
606 621
607#endif /* CONFIG_COMPAT */ 622#endif /* CONFIG_COMPAT */
diff --git a/include/linux/netfilter/xt_CT.h b/include/linux/netfilter/xt_CT.h
new file mode 100644
index 000000000000..1b564106891d
--- /dev/null
+++ b/include/linux/netfilter/xt_CT.h
@@ -0,0 +1,17 @@
1#ifndef _XT_CT_H
2#define _XT_CT_H
3
4#define XT_CT_NOTRACK 0x1
5
6struct xt_ct_target_info {
7 u_int16_t flags;
8 u_int16_t zone;
9 u_int32_t ct_events;
10 u_int32_t exp_events;
11 char helper[16];
12
13 /* Used internally by the kernel */
14 struct nf_conn *ct __attribute__((aligned(8)));
15};
16
17#endif /* _XT_CT_H */
diff --git a/include/linux/netfilter/xt_connbytes.h b/include/linux/netfilter/xt_connbytes.h
index 52bd6153b996..92fcbb0d193e 100644
--- a/include/linux/netfilter/xt_connbytes.h
+++ b/include/linux/netfilter/xt_connbytes.h
@@ -15,8 +15,7 @@ enum xt_connbytes_direction {
15 XT_CONNBYTES_DIR_BOTH, 15 XT_CONNBYTES_DIR_BOTH,
16}; 16};
17 17
18struct xt_connbytes_info 18struct xt_connbytes_info {
19{
20 struct { 19 struct {
21 aligned_u64 from; /* count to be matched */ 20 aligned_u64 from; /* count to be matched */
22 aligned_u64 to; /* count to be matched */ 21 aligned_u64 to; /* count to be matched */
diff --git a/include/linux/netfilter/xt_esp.h b/include/linux/netfilter/xt_esp.h
index ef6fa4747d0a..ee6882408000 100644
--- a/include/linux/netfilter/xt_esp.h
+++ b/include/linux/netfilter/xt_esp.h
@@ -3,8 +3,7 @@
3 3
4#include <linux/types.h> 4#include <linux/types.h>
5 5
6struct xt_esp 6struct xt_esp {
7{
8 __u32 spis[2]; /* Security Parameter Index */ 7 __u32 spis[2]; /* Security Parameter Index */
9 __u8 invflags; /* Inverse flags */ 8 __u8 invflags; /* Inverse flags */
10}; 9};
diff --git a/include/linux/netfilter/xt_multiport.h b/include/linux/netfilter/xt_multiport.h
index 185db499fcbc..5b7e72dfffc5 100644
--- a/include/linux/netfilter/xt_multiport.h
+++ b/include/linux/netfilter/xt_multiport.h
@@ -3,8 +3,7 @@
3 3
4#include <linux/types.h> 4#include <linux/types.h>
5 5
6enum xt_multiport_flags 6enum xt_multiport_flags {
7{
8 XT_MULTIPORT_SOURCE, 7 XT_MULTIPORT_SOURCE,
9 XT_MULTIPORT_DESTINATION, 8 XT_MULTIPORT_DESTINATION,
10 XT_MULTIPORT_EITHER 9 XT_MULTIPORT_EITHER
@@ -13,15 +12,13 @@ enum xt_multiport_flags
13#define XT_MULTI_PORTS 15 12#define XT_MULTI_PORTS 15
14 13
15/* Must fit inside union xt_matchinfo: 16 bytes */ 14/* Must fit inside union xt_matchinfo: 16 bytes */
16struct xt_multiport 15struct xt_multiport {
17{
18 __u8 flags; /* Type of comparison */ 16 __u8 flags; /* Type of comparison */
19 __u8 count; /* Number of ports */ 17 __u8 count; /* Number of ports */
20 __u16 ports[XT_MULTI_PORTS]; /* Ports */ 18 __u16 ports[XT_MULTI_PORTS]; /* Ports */
21}; 19};
22 20
23struct xt_multiport_v1 21struct xt_multiport_v1 {
24{
25 __u8 flags; /* Type of comparison */ 22 __u8 flags; /* Type of comparison */
26 __u8 count; /* Number of ports */ 23 __u8 count; /* Number of ports */
27 __u16 ports[XT_MULTI_PORTS]; /* Ports */ 24 __u16 ports[XT_MULTI_PORTS]; /* Ports */
diff --git a/include/linux/netfilter/xt_policy.h b/include/linux/netfilter/xt_policy.h
index 7bb64e7c853d..be8ead05c316 100644
--- a/include/linux/netfilter/xt_policy.h
+++ b/include/linux/netfilter/xt_policy.h
@@ -5,22 +5,19 @@
5 5
6#define XT_POLICY_MAX_ELEM 4 6#define XT_POLICY_MAX_ELEM 4
7 7
8enum xt_policy_flags 8enum xt_policy_flags {
9{
10 XT_POLICY_MATCH_IN = 0x1, 9 XT_POLICY_MATCH_IN = 0x1,
11 XT_POLICY_MATCH_OUT = 0x2, 10 XT_POLICY_MATCH_OUT = 0x2,
12 XT_POLICY_MATCH_NONE = 0x4, 11 XT_POLICY_MATCH_NONE = 0x4,
13 XT_POLICY_MATCH_STRICT = 0x8, 12 XT_POLICY_MATCH_STRICT = 0x8,
14}; 13};
15 14
16enum xt_policy_modes 15enum xt_policy_modes {
17{
18 XT_POLICY_MODE_TRANSPORT, 16 XT_POLICY_MODE_TRANSPORT,
19 XT_POLICY_MODE_TUNNEL 17 XT_POLICY_MODE_TUNNEL
20}; 18};
21 19
22struct xt_policy_spec 20struct xt_policy_spec {
23{
24 __u8 saddr:1, 21 __u8 saddr:1,
25 daddr:1, 22 daddr:1,
26 proto:1, 23 proto:1,
@@ -30,15 +27,13 @@ struct xt_policy_spec
30}; 27};
31 28
32#ifndef __KERNEL__ 29#ifndef __KERNEL__
33union xt_policy_addr 30union xt_policy_addr {
34{
35 struct in_addr a4; 31 struct in_addr a4;
36 struct in6_addr a6; 32 struct in6_addr a6;
37}; 33};
38#endif 34#endif
39 35
40struct xt_policy_elem 36struct xt_policy_elem {
41{
42 union { 37 union {
43#ifdef __KERNEL__ 38#ifdef __KERNEL__
44 struct { 39 struct {
@@ -65,8 +60,7 @@ struct xt_policy_elem
65 struct xt_policy_spec invert; 60 struct xt_policy_spec invert;
66}; 61};
67 62
68struct xt_policy_info 63struct xt_policy_info {
69{
70 struct xt_policy_elem pol[XT_POLICY_MAX_ELEM]; 64 struct xt_policy_elem pol[XT_POLICY_MAX_ELEM];
71 __u16 flags; 65 __u16 flags;
72 __u16 len; 66 __u16 len;
diff --git a/include/linux/netfilter/xt_state.h b/include/linux/netfilter/xt_state.h
index c06f32edee07..7b32de886613 100644
--- a/include/linux/netfilter/xt_state.h
+++ b/include/linux/netfilter/xt_state.h
@@ -6,8 +6,7 @@
6 6
7#define XT_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 1)) 7#define XT_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 1))
8 8
9struct xt_state_info 9struct xt_state_info {
10{
11 unsigned int statemask; 10 unsigned int statemask;
12}; 11};
13#endif /*_XT_STATE_H*/ 12#endif /*_XT_STATE_H*/
diff --git a/include/linux/netfilter/xt_string.h b/include/linux/netfilter/xt_string.h
index ecbb95fc89ed..235347c02eab 100644
--- a/include/linux/netfilter/xt_string.h
+++ b/include/linux/netfilter/xt_string.h
@@ -11,8 +11,7 @@ enum {
11 XT_STRING_FLAG_IGNORECASE = 0x02 11 XT_STRING_FLAG_IGNORECASE = 0x02
12}; 12};
13 13
14struct xt_string_info 14struct xt_string_info {
15{
16 __u16 from_offset; 15 __u16 from_offset;
17 __u16 to_offset; 16 __u16 to_offset;
18 char algo[XT_STRING_MAX_ALGO_NAME_SIZE]; 17 char algo[XT_STRING_MAX_ALGO_NAME_SIZE];
diff --git a/include/linux/netfilter/xt_tcpudp.h b/include/linux/netfilter/xt_tcpudp.h
index a490a0bc1d29..38aa7b399021 100644
--- a/include/linux/netfilter/xt_tcpudp.h
+++ b/include/linux/netfilter/xt_tcpudp.h
@@ -4,8 +4,7 @@
4#include <linux/types.h> 4#include <linux/types.h>
5 5
6/* TCP matching stuff */ 6/* TCP matching stuff */
7struct xt_tcp 7struct xt_tcp {
8{
9 __u16 spts[2]; /* Source port range. */ 8 __u16 spts[2]; /* Source port range. */
10 __u16 dpts[2]; /* Destination port range. */ 9 __u16 dpts[2]; /* Destination port range. */
11 __u8 option; /* TCP Option iff non-zero*/ 10 __u8 option; /* TCP Option iff non-zero*/
@@ -22,8 +21,7 @@ struct xt_tcp
22#define XT_TCP_INV_MASK 0x0F /* All possible flags. */ 21#define XT_TCP_INV_MASK 0x0F /* All possible flags. */
23 22
24/* UDP matching stuff */ 23/* UDP matching stuff */
25struct xt_udp 24struct xt_udp {
26{
27 __u16 spts[2]; /* Source port range. */ 25 __u16 spts[2]; /* Source port range. */
28 __u16 dpts[2]; /* Destination port range. */ 26 __u16 dpts[2]; /* Destination port range. */
29 __u8 invflags; /* Inverse flags */ 27 __u8 invflags; /* Inverse flags */
diff --git a/include/linux/netfilter_arp/arp_tables.h b/include/linux/netfilter_arp/arp_tables.h
index 6fe3e6aa10db..e9948c0560f6 100644
--- a/include/linux/netfilter_arp/arp_tables.h
+++ b/include/linux/netfilter_arp/arp_tables.h
@@ -132,8 +132,7 @@ struct arpt_entry
132#define ARPT_RETURN XT_RETURN 132#define ARPT_RETURN XT_RETURN
133 133
134/* The argument to ARPT_SO_GET_INFO */ 134/* The argument to ARPT_SO_GET_INFO */
135struct arpt_getinfo 135struct arpt_getinfo {
136{
137 /* Which table: caller fills this in. */ 136 /* Which table: caller fills this in. */
138 char name[ARPT_TABLE_MAXNAMELEN]; 137 char name[ARPT_TABLE_MAXNAMELEN];
139 138
@@ -155,8 +154,7 @@ struct arpt_getinfo
155}; 154};
156 155
157/* The argument to ARPT_SO_SET_REPLACE. */ 156/* The argument to ARPT_SO_SET_REPLACE. */
158struct arpt_replace 157struct arpt_replace {
159{
160 /* Which table. */ 158 /* Which table. */
161 char name[ARPT_TABLE_MAXNAMELEN]; 159 char name[ARPT_TABLE_MAXNAMELEN];
162 160
@@ -191,8 +189,7 @@ struct arpt_replace
191#define arpt_counters xt_counters 189#define arpt_counters xt_counters
192 190
193/* The argument to ARPT_SO_GET_ENTRIES. */ 191/* The argument to ARPT_SO_GET_ENTRIES. */
194struct arpt_get_entries 192struct arpt_get_entries {
195{
196 /* Which table: user fills this in. */ 193 /* Which table: user fills this in. */
197 char name[ARPT_TABLE_MAXNAMELEN]; 194 char name[ARPT_TABLE_MAXNAMELEN];
198 195
@@ -214,9 +211,11 @@ static __inline__ struct arpt_entry_target *arpt_get_target(struct arpt_entry *e
214 return (void *)e + e->target_offset; 211 return (void *)e + e->target_offset;
215} 212}
216 213
214#ifndef __KERNEL__
217/* fn returns 0 to continue iteration */ 215/* fn returns 0 to continue iteration */
218#define ARPT_ENTRY_ITERATE(entries, size, fn, args...) \ 216#define ARPT_ENTRY_ITERATE(entries, size, fn, args...) \
219 XT_ENTRY_ITERATE(struct arpt_entry, entries, size, fn, ## args) 217 XT_ENTRY_ITERATE(struct arpt_entry, entries, size, fn, ## args)
218#endif
220 219
221/* 220/*
222 * Main firewall chains definitions and global var's definitions. 221 * Main firewall chains definitions and global var's definitions.
@@ -224,20 +223,17 @@ static __inline__ struct arpt_entry_target *arpt_get_target(struct arpt_entry *e
224#ifdef __KERNEL__ 223#ifdef __KERNEL__
225 224
226/* Standard entry. */ 225/* Standard entry. */
227struct arpt_standard 226struct arpt_standard {
228{
229 struct arpt_entry entry; 227 struct arpt_entry entry;
230 struct arpt_standard_target target; 228 struct arpt_standard_target target;
231}; 229};
232 230
233struct arpt_error_target 231struct arpt_error_target {
234{
235 struct arpt_entry_target target; 232 struct arpt_entry_target target;
236 char errorname[ARPT_FUNCTION_MAXNAMELEN]; 233 char errorname[ARPT_FUNCTION_MAXNAMELEN];
237}; 234};
238 235
239struct arpt_error 236struct arpt_error {
240{
241 struct arpt_entry entry; 237 struct arpt_entry entry;
242 struct arpt_error_target target; 238 struct arpt_error_target target;
243}; 239};
@@ -264,6 +260,7 @@ struct arpt_error
264 .target.errorname = "ERROR", \ 260 .target.errorname = "ERROR", \
265} 261}
266 262
263extern void *arpt_alloc_initial_table(const struct xt_table *);
267extern struct xt_table *arpt_register_table(struct net *net, 264extern struct xt_table *arpt_register_table(struct net *net,
268 const struct xt_table *table, 265 const struct xt_table *table,
269 const struct arpt_replace *repl); 266 const struct arpt_replace *repl);
@@ -279,8 +276,7 @@ extern unsigned int arpt_do_table(struct sk_buff *skb,
279#ifdef CONFIG_COMPAT 276#ifdef CONFIG_COMPAT
280#include <net/compat.h> 277#include <net/compat.h>
281 278
282struct compat_arpt_entry 279struct compat_arpt_entry {
283{
284 struct arpt_arp arp; 280 struct arpt_arp arp;
285 u_int16_t target_offset; 281 u_int16_t target_offset;
286 u_int16_t next_offset; 282 u_int16_t next_offset;
@@ -297,14 +293,6 @@ compat_arpt_get_target(struct compat_arpt_entry *e)
297 293
298#define COMPAT_ARPT_ALIGN(s) COMPAT_XT_ALIGN(s) 294#define COMPAT_ARPT_ALIGN(s) COMPAT_XT_ALIGN(s)
299 295
300/* fn returns 0 to continue iteration */
301#define COMPAT_ARPT_ENTRY_ITERATE(entries, size, fn, args...) \
302 XT_ENTRY_ITERATE(struct compat_arpt_entry, entries, size, fn, ## args)
303
304#define COMPAT_ARPT_ENTRY_ITERATE_CONTINUE(entries, size, n, fn, args...) \
305 XT_ENTRY_ITERATE_CONTINUE(struct compat_arpt_entry, entries, size, n, \
306 fn, ## args)
307
308#endif /* CONFIG_COMPAT */ 296#endif /* CONFIG_COMPAT */
309#endif /*__KERNEL__*/ 297#endif /*__KERNEL__*/
310#endif /* _ARPTABLES_H */ 298#endif /* _ARPTABLES_H */
diff --git a/include/linux/netfilter_bridge/ebt_802_3.h b/include/linux/netfilter_bridge/ebt_802_3.h
index a11b0c2017fd..c73ef0b18bdc 100644
--- a/include/linux/netfilter_bridge/ebt_802_3.h
+++ b/include/linux/netfilter_bridge/ebt_802_3.h
@@ -58,8 +58,7 @@ static inline struct ebt_802_3_hdr *ebt_802_3_hdr(const struct sk_buff *skb)
58} 58}
59#endif 59#endif
60 60
61struct ebt_802_3_info 61struct ebt_802_3_info {
62{
63 uint8_t sap; 62 uint8_t sap;
64 __be16 type; 63 __be16 type;
65 uint8_t bitmask; 64 uint8_t bitmask;
diff --git a/include/linux/netfilter_bridge/ebt_among.h b/include/linux/netfilter_bridge/ebt_among.h
index 7654069233ca..0009558609a7 100644
--- a/include/linux/netfilter_bridge/ebt_among.h
+++ b/include/linux/netfilter_bridge/ebt_among.h
@@ -29,14 +29,12 @@
29 * Yes, it is a memory overhead, but in 2003 AD, who cares? 29 * Yes, it is a memory overhead, but in 2003 AD, who cares?
30 */ 30 */
31 31
32struct ebt_mac_wormhash_tuple 32struct ebt_mac_wormhash_tuple {
33{
34 uint32_t cmp[2]; 33 uint32_t cmp[2];
35 __be32 ip; 34 __be32 ip;
36}; 35};
37 36
38struct ebt_mac_wormhash 37struct ebt_mac_wormhash {
39{
40 int table[257]; 38 int table[257];
41 int poolsize; 39 int poolsize;
42 struct ebt_mac_wormhash_tuple pool[0]; 40 struct ebt_mac_wormhash_tuple pool[0];
@@ -45,8 +43,7 @@ struct ebt_mac_wormhash
45#define ebt_mac_wormhash_size(x) ((x) ? sizeof(struct ebt_mac_wormhash) \ 43#define ebt_mac_wormhash_size(x) ((x) ? sizeof(struct ebt_mac_wormhash) \
46 + (x)->poolsize * sizeof(struct ebt_mac_wormhash_tuple) : 0) 44 + (x)->poolsize * sizeof(struct ebt_mac_wormhash_tuple) : 0)
47 45
48struct ebt_among_info 46struct ebt_among_info {
49{
50 int wh_dst_ofs; 47 int wh_dst_ofs;
51 int wh_src_ofs; 48 int wh_src_ofs;
52 int bitmask; 49 int bitmask;
diff --git a/include/linux/netfilter_bridge/ebt_arpreply.h b/include/linux/netfilter_bridge/ebt_arpreply.h
index 96a8339960e0..7e77896e1fbf 100644
--- a/include/linux/netfilter_bridge/ebt_arpreply.h
+++ b/include/linux/netfilter_bridge/ebt_arpreply.h
@@ -1,8 +1,7 @@
1#ifndef __LINUX_BRIDGE_EBT_ARPREPLY_H 1#ifndef __LINUX_BRIDGE_EBT_ARPREPLY_H
2#define __LINUX_BRIDGE_EBT_ARPREPLY_H 2#define __LINUX_BRIDGE_EBT_ARPREPLY_H
3 3
4struct ebt_arpreply_info 4struct ebt_arpreply_info {
5{
6 unsigned char mac[ETH_ALEN]; 5 unsigned char mac[ETH_ALEN];
7 int target; 6 int target;
8}; 7};
diff --git a/include/linux/netfilter_bridge/ebt_ip.h b/include/linux/netfilter_bridge/ebt_ip.h
index d6847475bf2e..6a708fb92241 100644
--- a/include/linux/netfilter_bridge/ebt_ip.h
+++ b/include/linux/netfilter_bridge/ebt_ip.h
@@ -26,8 +26,7 @@
26#define EBT_IP_MATCH "ip" 26#define EBT_IP_MATCH "ip"
27 27
28/* the same values are used for the invflags */ 28/* the same values are used for the invflags */
29struct ebt_ip_info 29struct ebt_ip_info {
30{
31 __be32 saddr; 30 __be32 saddr;
32 __be32 daddr; 31 __be32 daddr;
33 __be32 smsk; 32 __be32 smsk;
diff --git a/include/linux/netfilter_bridge/ebt_ip6.h b/include/linux/netfilter_bridge/ebt_ip6.h
index 2273c3ae33ca..e5de98701519 100644
--- a/include/linux/netfilter_bridge/ebt_ip6.h
+++ b/include/linux/netfilter_bridge/ebt_ip6.h
@@ -23,8 +23,7 @@
23#define EBT_IP6_MATCH "ip6" 23#define EBT_IP6_MATCH "ip6"
24 24
25/* the same values are used for the invflags */ 25/* the same values are used for the invflags */
26struct ebt_ip6_info 26struct ebt_ip6_info {
27{
28 struct in6_addr saddr; 27 struct in6_addr saddr;
29 struct in6_addr daddr; 28 struct in6_addr daddr;
30 struct in6_addr smsk; 29 struct in6_addr smsk;
diff --git a/include/linux/netfilter_bridge/ebt_limit.h b/include/linux/netfilter_bridge/ebt_limit.h
index d8b65000afe4..4bf76b751676 100644
--- a/include/linux/netfilter_bridge/ebt_limit.h
+++ b/include/linux/netfilter_bridge/ebt_limit.h
@@ -9,8 +9,7 @@
9/* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 9/* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490
10 seconds, or one every 59 hours. */ 10 seconds, or one every 59 hours. */
11 11
12struct ebt_limit_info 12struct ebt_limit_info {
13{
14 u_int32_t avg; /* Average secs between packets * scale */ 13 u_int32_t avg; /* Average secs between packets * scale */
15 u_int32_t burst; /* Period multiplier for upper limit. */ 14 u_int32_t burst; /* Period multiplier for upper limit. */
16 15
diff --git a/include/linux/netfilter_bridge/ebt_log.h b/include/linux/netfilter_bridge/ebt_log.h
index b76e653157e5..cc2cdfb764bc 100644
--- a/include/linux/netfilter_bridge/ebt_log.h
+++ b/include/linux/netfilter_bridge/ebt_log.h
@@ -9,8 +9,7 @@
9#define EBT_LOG_PREFIX_SIZE 30 9#define EBT_LOG_PREFIX_SIZE 30
10#define EBT_LOG_WATCHER "log" 10#define EBT_LOG_WATCHER "log"
11 11
12struct ebt_log_info 12struct ebt_log_info {
13{
14 uint8_t loglevel; 13 uint8_t loglevel;
15 uint8_t prefix[EBT_LOG_PREFIX_SIZE]; 14 uint8_t prefix[EBT_LOG_PREFIX_SIZE];
16 uint32_t bitmask; 15 uint32_t bitmask;
diff --git a/include/linux/netfilter_bridge/ebt_mark_m.h b/include/linux/netfilter_bridge/ebt_mark_m.h
index 301524ff1065..9ceb10ec0ed6 100644
--- a/include/linux/netfilter_bridge/ebt_mark_m.h
+++ b/include/linux/netfilter_bridge/ebt_mark_m.h
@@ -4,8 +4,7 @@
4#define EBT_MARK_AND 0x01 4#define EBT_MARK_AND 0x01
5#define EBT_MARK_OR 0x02 5#define EBT_MARK_OR 0x02
6#define EBT_MARK_MASK (EBT_MARK_AND | EBT_MARK_OR) 6#define EBT_MARK_MASK (EBT_MARK_AND | EBT_MARK_OR)
7struct ebt_mark_m_info 7struct ebt_mark_m_info {
8{
9 unsigned long mark, mask; 8 unsigned long mark, mask;
10 uint8_t invert; 9 uint8_t invert;
11 uint8_t bitmask; 10 uint8_t bitmask;
diff --git a/include/linux/netfilter_bridge/ebt_mark_t.h b/include/linux/netfilter_bridge/ebt_mark_t.h
index 6270f6f33693..7d5a268a4311 100644
--- a/include/linux/netfilter_bridge/ebt_mark_t.h
+++ b/include/linux/netfilter_bridge/ebt_mark_t.h
@@ -13,8 +13,7 @@
13#define MARK_AND_VALUE (0xffffffd0) 13#define MARK_AND_VALUE (0xffffffd0)
14#define MARK_XOR_VALUE (0xffffffc0) 14#define MARK_XOR_VALUE (0xffffffc0)
15 15
16struct ebt_mark_t_info 16struct ebt_mark_t_info {
17{
18 unsigned long mark; 17 unsigned long mark;
19 /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */ 18 /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */
20 int target; 19 int target;
diff --git a/include/linux/netfilter_bridge/ebt_nat.h b/include/linux/netfilter_bridge/ebt_nat.h
index 435b886a51aa..5e74e3b03bd6 100644
--- a/include/linux/netfilter_bridge/ebt_nat.h
+++ b/include/linux/netfilter_bridge/ebt_nat.h
@@ -2,8 +2,7 @@
2#define __LINUX_BRIDGE_EBT_NAT_H 2#define __LINUX_BRIDGE_EBT_NAT_H
3 3
4#define NAT_ARP_BIT (0x00000010) 4#define NAT_ARP_BIT (0x00000010)
5struct ebt_nat_info 5struct ebt_nat_info {
6{
7 unsigned char mac[ETH_ALEN]; 6 unsigned char mac[ETH_ALEN];
8 /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */ 7 /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */
9 int target; 8 int target;
diff --git a/include/linux/netfilter_bridge/ebt_pkttype.h b/include/linux/netfilter_bridge/ebt_pkttype.h
index 0d64bbb29c66..51a799840931 100644
--- a/include/linux/netfilter_bridge/ebt_pkttype.h
+++ b/include/linux/netfilter_bridge/ebt_pkttype.h
@@ -1,8 +1,7 @@
1#ifndef __LINUX_BRIDGE_EBT_PKTTYPE_H 1#ifndef __LINUX_BRIDGE_EBT_PKTTYPE_H
2#define __LINUX_BRIDGE_EBT_PKTTYPE_H 2#define __LINUX_BRIDGE_EBT_PKTTYPE_H
3 3
4struct ebt_pkttype_info 4struct ebt_pkttype_info {
5{
6 uint8_t pkt_type; 5 uint8_t pkt_type;
7 uint8_t invert; 6 uint8_t invert;
8}; 7};
diff --git a/include/linux/netfilter_bridge/ebt_redirect.h b/include/linux/netfilter_bridge/ebt_redirect.h
index 5c67990fce39..dd9622ce8488 100644
--- a/include/linux/netfilter_bridge/ebt_redirect.h
+++ b/include/linux/netfilter_bridge/ebt_redirect.h
@@ -1,8 +1,7 @@
1#ifndef __LINUX_BRIDGE_EBT_REDIRECT_H 1#ifndef __LINUX_BRIDGE_EBT_REDIRECT_H
2#define __LINUX_BRIDGE_EBT_REDIRECT_H 2#define __LINUX_BRIDGE_EBT_REDIRECT_H
3 3
4struct ebt_redirect_info 4struct ebt_redirect_info {
5{
6 /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */ 5 /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */
7 int target; 6 int target;
8}; 7};
diff --git a/include/linux/netfilter_bridge/ebt_stp.h b/include/linux/netfilter_bridge/ebt_stp.h
index e5fd67850f4d..e503a0aa2728 100644
--- a/include/linux/netfilter_bridge/ebt_stp.h
+++ b/include/linux/netfilter_bridge/ebt_stp.h
@@ -20,8 +20,7 @@
20 20
21#define EBT_STP_MATCH "stp" 21#define EBT_STP_MATCH "stp"
22 22
23struct ebt_stp_config_info 23struct ebt_stp_config_info {
24{
25 uint8_t flags; 24 uint8_t flags;
26 uint16_t root_priol, root_priou; 25 uint16_t root_priol, root_priou;
27 char root_addr[6], root_addrmsk[6]; 26 char root_addr[6], root_addrmsk[6];
@@ -35,8 +34,7 @@ struct ebt_stp_config_info
35 uint16_t forward_delayl, forward_delayu; 34 uint16_t forward_delayl, forward_delayu;
36}; 35};
37 36
38struct ebt_stp_info 37struct ebt_stp_info {
39{
40 uint8_t type; 38 uint8_t type;
41 struct ebt_stp_config_info config; 39 struct ebt_stp_config_info config;
42 uint16_t bitmask; 40 uint16_t bitmask;
diff --git a/include/linux/netfilter_bridge/ebtables.h b/include/linux/netfilter_bridge/ebtables.h
index ea281e6a2048..1c6f0c5f530e 100644
--- a/include/linux/netfilter_bridge/ebtables.h
+++ b/include/linux/netfilter_bridge/ebtables.h
@@ -34,14 +34,12 @@
34struct xt_match; 34struct xt_match;
35struct xt_target; 35struct xt_target;
36 36
37struct ebt_counter 37struct ebt_counter {
38{
39 uint64_t pcnt; 38 uint64_t pcnt;
40 uint64_t bcnt; 39 uint64_t bcnt;
41}; 40};
42 41
43struct ebt_replace 42struct ebt_replace {
44{
45 char name[EBT_TABLE_MAXNAMELEN]; 43 char name[EBT_TABLE_MAXNAMELEN];
46 unsigned int valid_hooks; 44 unsigned int valid_hooks;
47 /* nr of rules in the table */ 45 /* nr of rules in the table */
@@ -57,8 +55,7 @@ struct ebt_replace
57 char __user *entries; 55 char __user *entries;
58}; 56};
59 57
60struct ebt_replace_kernel 58struct ebt_replace_kernel {
61{
62 char name[EBT_TABLE_MAXNAMELEN]; 59 char name[EBT_TABLE_MAXNAMELEN];
63 unsigned int valid_hooks; 60 unsigned int valid_hooks;
64 /* nr of rules in the table */ 61 /* nr of rules in the table */
@@ -120,8 +117,7 @@ struct ebt_entries {
120#define EBT_INV_MASK (EBT_IPROTO | EBT_IIN | EBT_IOUT | EBT_ILOGICALIN \ 117#define EBT_INV_MASK (EBT_IPROTO | EBT_IIN | EBT_IOUT | EBT_ILOGICALIN \
121 | EBT_ILOGICALOUT | EBT_ISOURCE | EBT_IDEST) 118 | EBT_ILOGICALOUT | EBT_ISOURCE | EBT_IDEST)
122 119
123struct ebt_entry_match 120struct ebt_entry_match {
124{
125 union { 121 union {
126 char name[EBT_FUNCTION_MAXNAMELEN]; 122 char name[EBT_FUNCTION_MAXNAMELEN];
127 struct xt_match *match; 123 struct xt_match *match;
@@ -131,8 +127,7 @@ struct ebt_entry_match
131 unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace)))); 127 unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
132}; 128};
133 129
134struct ebt_entry_watcher 130struct ebt_entry_watcher {
135{
136 union { 131 union {
137 char name[EBT_FUNCTION_MAXNAMELEN]; 132 char name[EBT_FUNCTION_MAXNAMELEN];
138 struct xt_target *watcher; 133 struct xt_target *watcher;
@@ -142,8 +137,7 @@ struct ebt_entry_watcher
142 unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace)))); 137 unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
143}; 138};
144 139
145struct ebt_entry_target 140struct ebt_entry_target {
146{
147 union { 141 union {
148 char name[EBT_FUNCTION_MAXNAMELEN]; 142 char name[EBT_FUNCTION_MAXNAMELEN];
149 struct xt_target *target; 143 struct xt_target *target;
@@ -154,8 +148,7 @@ struct ebt_entry_target
154}; 148};
155 149
156#define EBT_STANDARD_TARGET "standard" 150#define EBT_STANDARD_TARGET "standard"
157struct ebt_standard_target 151struct ebt_standard_target {
158{
159 struct ebt_entry_target target; 152 struct ebt_entry_target target;
160 int verdict; 153 int verdict;
161}; 154};
@@ -206,8 +199,7 @@ struct ebt_entry {
206#define EBT_MATCH 0 199#define EBT_MATCH 0
207#define EBT_NOMATCH 1 200#define EBT_NOMATCH 1
208 201
209struct ebt_match 202struct ebt_match {
210{
211 struct list_head list; 203 struct list_head list;
212 const char name[EBT_FUNCTION_MAXNAMELEN]; 204 const char name[EBT_FUNCTION_MAXNAMELEN];
213 bool (*match)(const struct sk_buff *skb, const struct net_device *in, 205 bool (*match)(const struct sk_buff *skb, const struct net_device *in,
@@ -224,8 +216,7 @@ struct ebt_match
224 struct module *me; 216 struct module *me;
225}; 217};
226 218
227struct ebt_watcher 219struct ebt_watcher {
228{
229 struct list_head list; 220 struct list_head list;
230 const char name[EBT_FUNCTION_MAXNAMELEN]; 221 const char name[EBT_FUNCTION_MAXNAMELEN];
231 unsigned int (*target)(struct sk_buff *skb, 222 unsigned int (*target)(struct sk_buff *skb,
@@ -242,8 +233,7 @@ struct ebt_watcher
242 struct module *me; 233 struct module *me;
243}; 234};
244 235
245struct ebt_target 236struct ebt_target {
246{
247 struct list_head list; 237 struct list_head list;
248 const char name[EBT_FUNCTION_MAXNAMELEN]; 238 const char name[EBT_FUNCTION_MAXNAMELEN];
249 /* returns one of the standard EBT_* verdicts */ 239 /* returns one of the standard EBT_* verdicts */
@@ -262,15 +252,13 @@ struct ebt_target
262}; 252};
263 253
264/* used for jumping from and into user defined chains (udc) */ 254/* used for jumping from and into user defined chains (udc) */
265struct ebt_chainstack 255struct ebt_chainstack {
266{
267 struct ebt_entries *chaininfo; /* pointer to chain data */ 256 struct ebt_entries *chaininfo; /* pointer to chain data */
268 struct ebt_entry *e; /* pointer to entry data */ 257 struct ebt_entry *e; /* pointer to entry data */
269 unsigned int n; /* n'th entry */ 258 unsigned int n; /* n'th entry */
270}; 259};
271 260
272struct ebt_table_info 261struct ebt_table_info {
273{
274 /* total size of the entries */ 262 /* total size of the entries */
275 unsigned int entries_size; 263 unsigned int entries_size;
276 unsigned int nentries; 264 unsigned int nentries;
@@ -282,8 +270,7 @@ struct ebt_table_info
282 struct ebt_counter counters[0] ____cacheline_aligned; 270 struct ebt_counter counters[0] ____cacheline_aligned;
283}; 271};
284 272
285struct ebt_table 273struct ebt_table {
286{
287 struct list_head list; 274 struct list_head list;
288 char name[EBT_TABLE_MAXNAMELEN]; 275 char name[EBT_TABLE_MAXNAMELEN];
289 struct ebt_replace_kernel *table; 276 struct ebt_replace_kernel *table;
@@ -302,7 +289,7 @@ struct ebt_table
302 ~(__alignof__(struct ebt_replace)-1)) 289 ~(__alignof__(struct ebt_replace)-1))
303extern struct ebt_table *ebt_register_table(struct net *net, 290extern struct ebt_table *ebt_register_table(struct net *net,
304 const struct ebt_table *table); 291 const struct ebt_table *table);
305extern void ebt_unregister_table(struct ebt_table *table); 292extern void ebt_unregister_table(struct net *net, struct ebt_table *table);
306extern unsigned int ebt_do_table(unsigned int hook, struct sk_buff *skb, 293extern unsigned int ebt_do_table(unsigned int hook, struct sk_buff *skb,
307 const struct net_device *in, const struct net_device *out, 294 const struct net_device *in, const struct net_device *out,
308 struct ebt_table *table); 295 struct ebt_table *table);
diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h
index 61fafc868a7b..704a7b6e8169 100644
--- a/include/linux/netfilter_ipv4/ip_tables.h
+++ b/include/linux/netfilter_ipv4/ip_tables.h
@@ -76,8 +76,7 @@ struct ipt_ip {
76/* This structure defines each of the firewall rules. Consists of 3 76/* This structure defines each of the firewall rules. Consists of 3
77 parts which are 1) general IP header stuff 2) match specific 77 parts which are 1) general IP header stuff 2) match specific
78 stuff 3) the target to perform if the rule matches */ 78 stuff 3) the target to perform if the rule matches */
79struct ipt_entry 79struct ipt_entry {
80{
81 struct ipt_ip ip; 80 struct ipt_ip ip;
82 81
83 /* Mark with fields that we care about. */ 82 /* Mark with fields that we care about. */
@@ -135,8 +134,7 @@ struct ipt_entry
135#define IPT_UDP_INV_MASK XT_UDP_INV_MASK 134#define IPT_UDP_INV_MASK XT_UDP_INV_MASK
136 135
137/* ICMP matching stuff */ 136/* ICMP matching stuff */
138struct ipt_icmp 137struct ipt_icmp {
139{
140 u_int8_t type; /* type to match */ 138 u_int8_t type; /* type to match */
141 u_int8_t code[2]; /* range of code */ 139 u_int8_t code[2]; /* range of code */
142 u_int8_t invflags; /* Inverse flags */ 140 u_int8_t invflags; /* Inverse flags */
@@ -146,8 +144,7 @@ struct ipt_icmp
146#define IPT_ICMP_INV 0x01 /* Invert the sense of type/code test */ 144#define IPT_ICMP_INV 0x01 /* Invert the sense of type/code test */
147 145
148/* The argument to IPT_SO_GET_INFO */ 146/* The argument to IPT_SO_GET_INFO */
149struct ipt_getinfo 147struct ipt_getinfo {
150{
151 /* Which table: caller fills this in. */ 148 /* Which table: caller fills this in. */
152 char name[IPT_TABLE_MAXNAMELEN]; 149 char name[IPT_TABLE_MAXNAMELEN];
153 150
@@ -169,8 +166,7 @@ struct ipt_getinfo
169}; 166};
170 167
171/* The argument to IPT_SO_SET_REPLACE. */ 168/* The argument to IPT_SO_SET_REPLACE. */
172struct ipt_replace 169struct ipt_replace {
173{
174 /* Which table. */ 170 /* Which table. */
175 char name[IPT_TABLE_MAXNAMELEN]; 171 char name[IPT_TABLE_MAXNAMELEN];
176 172
@@ -204,8 +200,7 @@ struct ipt_replace
204#define ipt_counters_info xt_counters_info 200#define ipt_counters_info xt_counters_info
205 201
206/* The argument to IPT_SO_GET_ENTRIES. */ 202/* The argument to IPT_SO_GET_ENTRIES. */
207struct ipt_get_entries 203struct ipt_get_entries {
208{
209 /* Which table: user fills this in. */ 204 /* Which table: user fills this in. */
210 char name[IPT_TABLE_MAXNAMELEN]; 205 char name[IPT_TABLE_MAXNAMELEN];
211 206
@@ -228,6 +223,7 @@ ipt_get_target(struct ipt_entry *e)
228 return (void *)e + e->target_offset; 223 return (void *)e + e->target_offset;
229} 224}
230 225
226#ifndef __KERNEL__
231/* fn returns 0 to continue iteration */ 227/* fn returns 0 to continue iteration */
232#define IPT_MATCH_ITERATE(e, fn, args...) \ 228#define IPT_MATCH_ITERATE(e, fn, args...) \
233 XT_MATCH_ITERATE(struct ipt_entry, e, fn, ## args) 229 XT_MATCH_ITERATE(struct ipt_entry, e, fn, ## args)
@@ -235,6 +231,7 @@ ipt_get_target(struct ipt_entry *e)
235/* fn returns 0 to continue iteration */ 231/* fn returns 0 to continue iteration */
236#define IPT_ENTRY_ITERATE(entries, size, fn, args...) \ 232#define IPT_ENTRY_ITERATE(entries, size, fn, args...) \
237 XT_ENTRY_ITERATE(struct ipt_entry, entries, size, fn, ## args) 233 XT_ENTRY_ITERATE(struct ipt_entry, entries, size, fn, ## args)
234#endif
238 235
239/* 236/*
240 * Main firewall chains definitions and global var's definitions. 237 * Main firewall chains definitions and global var's definitions.
@@ -247,23 +244,20 @@ extern void ipt_init(void) __init;
247extern struct xt_table *ipt_register_table(struct net *net, 244extern struct xt_table *ipt_register_table(struct net *net,
248 const struct xt_table *table, 245 const struct xt_table *table,
249 const struct ipt_replace *repl); 246 const struct ipt_replace *repl);
250extern void ipt_unregister_table(struct xt_table *table); 247extern void ipt_unregister_table(struct net *net, struct xt_table *table);
251 248
252/* Standard entry. */ 249/* Standard entry. */
253struct ipt_standard 250struct ipt_standard {
254{
255 struct ipt_entry entry; 251 struct ipt_entry entry;
256 struct ipt_standard_target target; 252 struct ipt_standard_target target;
257}; 253};
258 254
259struct ipt_error_target 255struct ipt_error_target {
260{
261 struct ipt_entry_target target; 256 struct ipt_entry_target target;
262 char errorname[IPT_FUNCTION_MAXNAMELEN]; 257 char errorname[IPT_FUNCTION_MAXNAMELEN];
263}; 258};
264 259
265struct ipt_error 260struct ipt_error {
266{
267 struct ipt_entry entry; 261 struct ipt_entry entry;
268 struct ipt_error_target target; 262 struct ipt_error_target target;
269}; 263};
@@ -290,6 +284,7 @@ struct ipt_error
290 .target.errorname = "ERROR", \ 284 .target.errorname = "ERROR", \
291} 285}
292 286
287extern void *ipt_alloc_initial_table(const struct xt_table *);
293extern unsigned int ipt_do_table(struct sk_buff *skb, 288extern unsigned int ipt_do_table(struct sk_buff *skb,
294 unsigned int hook, 289 unsigned int hook,
295 const struct net_device *in, 290 const struct net_device *in,
@@ -301,8 +296,7 @@ extern unsigned int ipt_do_table(struct sk_buff *skb,
301#ifdef CONFIG_COMPAT 296#ifdef CONFIG_COMPAT
302#include <net/compat.h> 297#include <net/compat.h>
303 298
304struct compat_ipt_entry 299struct compat_ipt_entry {
305{
306 struct ipt_ip ip; 300 struct ipt_ip ip;
307 compat_uint_t nfcache; 301 compat_uint_t nfcache;
308 u_int16_t target_offset; 302 u_int16_t target_offset;
@@ -321,19 +315,6 @@ compat_ipt_get_target(struct compat_ipt_entry *e)
321 315
322#define COMPAT_IPT_ALIGN(s) COMPAT_XT_ALIGN(s) 316#define COMPAT_IPT_ALIGN(s) COMPAT_XT_ALIGN(s)
323 317
324/* fn returns 0 to continue iteration */
325#define COMPAT_IPT_MATCH_ITERATE(e, fn, args...) \
326 XT_MATCH_ITERATE(struct compat_ipt_entry, e, fn, ## args)
327
328/* fn returns 0 to continue iteration */
329#define COMPAT_IPT_ENTRY_ITERATE(entries, size, fn, args...) \
330 XT_ENTRY_ITERATE(struct compat_ipt_entry, entries, size, fn, ## args)
331
332/* fn returns 0 to continue iteration */
333#define COMPAT_IPT_ENTRY_ITERATE_CONTINUE(entries, size, n, fn, args...) \
334 XT_ENTRY_ITERATE_CONTINUE(struct compat_ipt_entry, entries, size, n, \
335 fn, ## args)
336
337#endif /* CONFIG_COMPAT */ 318#endif /* CONFIG_COMPAT */
338#endif /*__KERNEL__*/ 319#endif /*__KERNEL__*/
339#endif /* _IPTABLES_H */ 320#endif /* _IPTABLES_H */
diff --git a/include/linux/netfilter_ipv4/ipt_SAME.h b/include/linux/netfilter_ipv4/ipt_SAME.h
index be6e682a85ec..2529660c5b38 100644
--- a/include/linux/netfilter_ipv4/ipt_SAME.h
+++ b/include/linux/netfilter_ipv4/ipt_SAME.h
@@ -5,8 +5,7 @@
5 5
6#define IPT_SAME_NODST 0x01 6#define IPT_SAME_NODST 0x01
7 7
8struct ipt_same_info 8struct ipt_same_info {
9{
10 unsigned char info; 9 unsigned char info;
11 u_int32_t rangesize; 10 u_int32_t rangesize;
12 u_int32_t ipnum; 11 u_int32_t ipnum;
diff --git a/include/linux/netfilter_ipv4/ipt_ah.h b/include/linux/netfilter_ipv4/ipt_ah.h
index 7b9a2ac7adb9..2e555b4d05e3 100644
--- a/include/linux/netfilter_ipv4/ipt_ah.h
+++ b/include/linux/netfilter_ipv4/ipt_ah.h
@@ -1,8 +1,7 @@
1#ifndef _IPT_AH_H 1#ifndef _IPT_AH_H
2#define _IPT_AH_H 2#define _IPT_AH_H
3 3
4struct ipt_ah 4struct ipt_ah {
5{
6 u_int32_t spis[2]; /* Security Parameter Index */ 5 u_int32_t spis[2]; /* Security Parameter Index */
7 u_int8_t invflags; /* Inverse flags */ 6 u_int8_t invflags; /* Inverse flags */
8}; 7};
diff --git a/include/linux/netfilter_ipv6.h b/include/linux/netfilter_ipv6.h
index d654873aa25a..1f7e300094cd 100644
--- a/include/linux/netfilter_ipv6.h
+++ b/include/linux/netfilter_ipv6.h
@@ -59,6 +59,7 @@
59enum nf_ip6_hook_priorities { 59enum nf_ip6_hook_priorities {
60 NF_IP6_PRI_FIRST = INT_MIN, 60 NF_IP6_PRI_FIRST = INT_MIN,
61 NF_IP6_PRI_CONNTRACK_DEFRAG = -400, 61 NF_IP6_PRI_CONNTRACK_DEFRAG = -400,
62 NF_IP6_PRI_RAW = -300,
62 NF_IP6_PRI_SELINUX_FIRST = -225, 63 NF_IP6_PRI_SELINUX_FIRST = -225,
63 NF_IP6_PRI_CONNTRACK = -200, 64 NF_IP6_PRI_CONNTRACK = -200,
64 NF_IP6_PRI_MANGLE = -150, 65 NF_IP6_PRI_MANGLE = -150,
diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h
index a64e1451ac38..e5ba03d783c6 100644
--- a/include/linux/netfilter_ipv6/ip6_tables.h
+++ b/include/linux/netfilter_ipv6/ip6_tables.h
@@ -88,8 +88,7 @@ struct ip6t_ip6 {
88/* This structure defines each of the firewall rules. Consists of 3 88/* This structure defines each of the firewall rules. Consists of 3
89 parts which are 1) general IP header stuff 2) match specific 89 parts which are 1) general IP header stuff 2) match specific
90 stuff 3) the target to perform if the rule matches */ 90 stuff 3) the target to perform if the rule matches */
91struct ip6t_entry 91struct ip6t_entry {
92{
93 struct ip6t_ip6 ipv6; 92 struct ip6t_ip6 ipv6;
94 93
95 /* Mark with fields that we care about. */ 94 /* Mark with fields that we care about. */
@@ -111,20 +110,17 @@ struct ip6t_entry
111}; 110};
112 111
113/* Standard entry */ 112/* Standard entry */
114struct ip6t_standard 113struct ip6t_standard {
115{
116 struct ip6t_entry entry; 114 struct ip6t_entry entry;
117 struct ip6t_standard_target target; 115 struct ip6t_standard_target target;
118}; 116};
119 117
120struct ip6t_error_target 118struct ip6t_error_target {
121{
122 struct ip6t_entry_target target; 119 struct ip6t_entry_target target;
123 char errorname[IP6T_FUNCTION_MAXNAMELEN]; 120 char errorname[IP6T_FUNCTION_MAXNAMELEN];
124}; 121};
125 122
126struct ip6t_error 123struct ip6t_error {
127{
128 struct ip6t_entry entry; 124 struct ip6t_entry entry;
129 struct ip6t_error_target target; 125 struct ip6t_error_target target;
130}; 126};
@@ -195,8 +191,7 @@ struct ip6t_error
195#define IP6T_UDP_INV_MASK XT_UDP_INV_MASK 191#define IP6T_UDP_INV_MASK XT_UDP_INV_MASK
196 192
197/* ICMP matching stuff */ 193/* ICMP matching stuff */
198struct ip6t_icmp 194struct ip6t_icmp {
199{
200 u_int8_t type; /* type to match */ 195 u_int8_t type; /* type to match */
201 u_int8_t code[2]; /* range of code */ 196 u_int8_t code[2]; /* range of code */
202 u_int8_t invflags; /* Inverse flags */ 197 u_int8_t invflags; /* Inverse flags */
@@ -206,8 +201,7 @@ struct ip6t_icmp
206#define IP6T_ICMP_INV 0x01 /* Invert the sense of type/code test */ 201#define IP6T_ICMP_INV 0x01 /* Invert the sense of type/code test */
207 202
208/* The argument to IP6T_SO_GET_INFO */ 203/* The argument to IP6T_SO_GET_INFO */
209struct ip6t_getinfo 204struct ip6t_getinfo {
210{
211 /* Which table: caller fills this in. */ 205 /* Which table: caller fills this in. */
212 char name[IP6T_TABLE_MAXNAMELEN]; 206 char name[IP6T_TABLE_MAXNAMELEN];
213 207
@@ -229,8 +223,7 @@ struct ip6t_getinfo
229}; 223};
230 224
231/* The argument to IP6T_SO_SET_REPLACE. */ 225/* The argument to IP6T_SO_SET_REPLACE. */
232struct ip6t_replace 226struct ip6t_replace {
233{
234 /* Which table. */ 227 /* Which table. */
235 char name[IP6T_TABLE_MAXNAMELEN]; 228 char name[IP6T_TABLE_MAXNAMELEN];
236 229
@@ -264,8 +257,7 @@ struct ip6t_replace
264#define ip6t_counters_info xt_counters_info 257#define ip6t_counters_info xt_counters_info
265 258
266/* The argument to IP6T_SO_GET_ENTRIES. */ 259/* The argument to IP6T_SO_GET_ENTRIES. */
267struct ip6t_get_entries 260struct ip6t_get_entries {
268{
269 /* Which table: user fills this in. */ 261 /* Which table: user fills this in. */
270 char name[IP6T_TABLE_MAXNAMELEN]; 262 char name[IP6T_TABLE_MAXNAMELEN];
271 263
@@ -288,6 +280,7 @@ ip6t_get_target(struct ip6t_entry *e)
288 return (void *)e + e->target_offset; 280 return (void *)e + e->target_offset;
289} 281}
290 282
283#ifndef __KERNEL__
291/* fn returns 0 to continue iteration */ 284/* fn returns 0 to continue iteration */
292#define IP6T_MATCH_ITERATE(e, fn, args...) \ 285#define IP6T_MATCH_ITERATE(e, fn, args...) \
293 XT_MATCH_ITERATE(struct ip6t_entry, e, fn, ## args) 286 XT_MATCH_ITERATE(struct ip6t_entry, e, fn, ## args)
@@ -295,6 +288,7 @@ ip6t_get_target(struct ip6t_entry *e)
295/* fn returns 0 to continue iteration */ 288/* fn returns 0 to continue iteration */
296#define IP6T_ENTRY_ITERATE(entries, size, fn, args...) \ 289#define IP6T_ENTRY_ITERATE(entries, size, fn, args...) \
297 XT_ENTRY_ITERATE(struct ip6t_entry, entries, size, fn, ## args) 290 XT_ENTRY_ITERATE(struct ip6t_entry, entries, size, fn, ## args)
291#endif
298 292
299/* 293/*
300 * Main firewall chains definitions and global var's definitions. 294 * Main firewall chains definitions and global var's definitions.
@@ -305,10 +299,11 @@ ip6t_get_target(struct ip6t_entry *e)
305#include <linux/init.h> 299#include <linux/init.h>
306extern void ip6t_init(void) __init; 300extern void ip6t_init(void) __init;
307 301
302extern void *ip6t_alloc_initial_table(const struct xt_table *);
308extern struct xt_table *ip6t_register_table(struct net *net, 303extern struct xt_table *ip6t_register_table(struct net *net,
309 const struct xt_table *table, 304 const struct xt_table *table,
310 const struct ip6t_replace *repl); 305 const struct ip6t_replace *repl);
311extern void ip6t_unregister_table(struct xt_table *table); 306extern void ip6t_unregister_table(struct net *net, struct xt_table *table);
312extern unsigned int ip6t_do_table(struct sk_buff *skb, 307extern unsigned int ip6t_do_table(struct sk_buff *skb,
313 unsigned int hook, 308 unsigned int hook,
314 const struct net_device *in, 309 const struct net_device *in,
@@ -330,8 +325,7 @@ extern int ip6_masked_addrcmp(const struct in6_addr *addr1,
330#ifdef CONFIG_COMPAT 325#ifdef CONFIG_COMPAT
331#include <net/compat.h> 326#include <net/compat.h>
332 327
333struct compat_ip6t_entry 328struct compat_ip6t_entry {
334{
335 struct ip6t_ip6 ipv6; 329 struct ip6t_ip6 ipv6;
336 compat_uint_t nfcache; 330 compat_uint_t nfcache;
337 u_int16_t target_offset; 331 u_int16_t target_offset;
@@ -349,18 +343,6 @@ compat_ip6t_get_target(struct compat_ip6t_entry *e)
349 343
350#define COMPAT_IP6T_ALIGN(s) COMPAT_XT_ALIGN(s) 344#define COMPAT_IP6T_ALIGN(s) COMPAT_XT_ALIGN(s)
351 345
352/* fn returns 0 to continue iteration */
353#define COMPAT_IP6T_MATCH_ITERATE(e, fn, args...) \
354 XT_MATCH_ITERATE(struct compat_ip6t_entry, e, fn, ## args)
355
356/* fn returns 0 to continue iteration */
357#define COMPAT_IP6T_ENTRY_ITERATE(entries, size, fn, args...) \
358 XT_ENTRY_ITERATE(struct compat_ip6t_entry, entries, size, fn, ## args)
359
360#define COMPAT_IP6T_ENTRY_ITERATE_CONTINUE(entries, size, n, fn, args...) \
361 XT_ENTRY_ITERATE_CONTINUE(struct compat_ip6t_entry, entries, size, n, \
362 fn, ## args)
363
364#endif /* CONFIG_COMPAT */ 346#endif /* CONFIG_COMPAT */
365#endif /*__KERNEL__*/ 347#endif /*__KERNEL__*/
366#endif /* _IP6_TABLES_H */ 348#endif /* _IP6_TABLES_H */
diff --git a/include/linux/netfilter_ipv6/ip6t_ah.h b/include/linux/netfilter_ipv6/ip6t_ah.h
index 8531879eb464..17a745cfb2c7 100644
--- a/include/linux/netfilter_ipv6/ip6t_ah.h
+++ b/include/linux/netfilter_ipv6/ip6t_ah.h
@@ -1,8 +1,7 @@
1#ifndef _IP6T_AH_H 1#ifndef _IP6T_AH_H
2#define _IP6T_AH_H 2#define _IP6T_AH_H
3 3
4struct ip6t_ah 4struct ip6t_ah {
5{
6 u_int32_t spis[2]; /* Security Parameter Index */ 5 u_int32_t spis[2]; /* Security Parameter Index */
7 u_int32_t hdrlen; /* Header Length */ 6 u_int32_t hdrlen; /* Header Length */
8 u_int8_t hdrres; /* Test of the Reserved Filed */ 7 u_int8_t hdrres; /* Test of the Reserved Filed */
diff --git a/include/linux/netfilter_ipv6/ip6t_frag.h b/include/linux/netfilter_ipv6/ip6t_frag.h
index 66070a0d6dfc..3724d0850920 100644
--- a/include/linux/netfilter_ipv6/ip6t_frag.h
+++ b/include/linux/netfilter_ipv6/ip6t_frag.h
@@ -1,8 +1,7 @@
1#ifndef _IP6T_FRAG_H 1#ifndef _IP6T_FRAG_H
2#define _IP6T_FRAG_H 2#define _IP6T_FRAG_H
3 3
4struct ip6t_frag 4struct ip6t_frag {
5{
6 u_int32_t ids[2]; /* Security Parameter Index */ 5 u_int32_t ids[2]; /* Security Parameter Index */
7 u_int32_t hdrlen; /* Header Length */ 6 u_int32_t hdrlen; /* Header Length */
8 u_int8_t flags; /* */ 7 u_int8_t flags; /* */
diff --git a/include/linux/netfilter_ipv6/ip6t_ipv6header.h b/include/linux/netfilter_ipv6/ip6t_ipv6header.h
index 51c53fc9c44a..01dfd445596a 100644
--- a/include/linux/netfilter_ipv6/ip6t_ipv6header.h
+++ b/include/linux/netfilter_ipv6/ip6t_ipv6header.h
@@ -8,8 +8,7 @@ on whether they contain certain headers */
8#ifndef __IPV6HEADER_H 8#ifndef __IPV6HEADER_H
9#define __IPV6HEADER_H 9#define __IPV6HEADER_H
10 10
11struct ip6t_ipv6header_info 11struct ip6t_ipv6header_info {
12{
13 u_int8_t matchflags; 12 u_int8_t matchflags;
14 u_int8_t invflags; 13 u_int8_t invflags;
15 u_int8_t modeflag; 14 u_int8_t modeflag;
diff --git a/include/linux/netfilter_ipv6/ip6t_mh.h b/include/linux/netfilter_ipv6/ip6t_mh.h
index b9ca9a5f74d0..18549bca2d1f 100644
--- a/include/linux/netfilter_ipv6/ip6t_mh.h
+++ b/include/linux/netfilter_ipv6/ip6t_mh.h
@@ -2,8 +2,7 @@
2#define _IP6T_MH_H 2#define _IP6T_MH_H
3 3
4/* MH matching stuff */ 4/* MH matching stuff */
5struct ip6t_mh 5struct ip6t_mh {
6{
7 u_int8_t types[2]; /* MH type range */ 6 u_int8_t types[2]; /* MH type range */
8 u_int8_t invflags; /* Inverse flags */ 7 u_int8_t invflags; /* Inverse flags */
9}; 8};
diff --git a/include/linux/netfilter_ipv6/ip6t_opts.h b/include/linux/netfilter_ipv6/ip6t_opts.h
index a07e36380ae8..62d89bcd9f9c 100644
--- a/include/linux/netfilter_ipv6/ip6t_opts.h
+++ b/include/linux/netfilter_ipv6/ip6t_opts.h
@@ -3,8 +3,7 @@
3 3
4#define IP6T_OPTS_OPTSNR 16 4#define IP6T_OPTS_OPTSNR 16
5 5
6struct ip6t_opts 6struct ip6t_opts {
7{
8 u_int32_t hdrlen; /* Header Length */ 7 u_int32_t hdrlen; /* Header Length */
9 u_int8_t flags; /* */ 8 u_int8_t flags; /* */
10 u_int8_t invflags; /* Inverse flags */ 9 u_int8_t invflags; /* Inverse flags */
diff --git a/include/linux/netfilter_ipv6/ip6t_rt.h b/include/linux/netfilter_ipv6/ip6t_rt.h
index 52156023e8db..ab91bfd2cd00 100644
--- a/include/linux/netfilter_ipv6/ip6t_rt.h
+++ b/include/linux/netfilter_ipv6/ip6t_rt.h
@@ -5,8 +5,7 @@
5 5
6#define IP6T_RT_HOPS 16 6#define IP6T_RT_HOPS 16
7 7
8struct ip6t_rt 8struct ip6t_rt {
9{
10 u_int32_t rt_type; /* Routing Type */ 9 u_int32_t rt_type; /* Routing Type */
11 u_int32_t segsleft[2]; /* Segments Left */ 10 u_int32_t segsleft[2]; /* Segments Left */
12 u_int32_t hdrlen; /* Header Length */ 11 u_int32_t hdrlen; /* Header Length */
diff --git a/include/linux/netlink.h b/include/linux/netlink.h
index ab5d3126831f..6eaca5e1e8ca 100644
--- a/include/linux/netlink.h
+++ b/include/linux/netlink.h
@@ -29,16 +29,14 @@
29 29
30struct net; 30struct net;
31 31
32struct sockaddr_nl 32struct sockaddr_nl {
33{
34 sa_family_t nl_family; /* AF_NETLINK */ 33 sa_family_t nl_family; /* AF_NETLINK */
35 unsigned short nl_pad; /* zero */ 34 unsigned short nl_pad; /* zero */
36 __u32 nl_pid; /* port ID */ 35 __u32 nl_pid; /* port ID */
37 __u32 nl_groups; /* multicast groups mask */ 36 __u32 nl_groups; /* multicast groups mask */
38}; 37};
39 38
40struct nlmsghdr 39struct nlmsghdr {
41{
42 __u32 nlmsg_len; /* Length of message including header */ 40 __u32 nlmsg_len; /* Length of message including header */
43 __u16 nlmsg_type; /* Message content */ 41 __u16 nlmsg_type; /* Message content */
44 __u16 nlmsg_flags; /* Additional flags */ 42 __u16 nlmsg_flags; /* Additional flags */
@@ -94,8 +92,7 @@ struct nlmsghdr
94 92
95#define NLMSG_MIN_TYPE 0x10 /* < 0x10: reserved control messages */ 93#define NLMSG_MIN_TYPE 0x10 /* < 0x10: reserved control messages */
96 94
97struct nlmsgerr 95struct nlmsgerr {
98{
99 int error; 96 int error;
100 struct nlmsghdr msg; 97 struct nlmsghdr msg;
101}; 98};
@@ -106,8 +103,7 @@ struct nlmsgerr
106#define NETLINK_BROADCAST_ERROR 4 103#define NETLINK_BROADCAST_ERROR 4
107#define NETLINK_NO_ENOBUFS 5 104#define NETLINK_NO_ENOBUFS 5
108 105
109struct nl_pktinfo 106struct nl_pktinfo {
110{
111 __u32 group; 107 __u32 group;
112}; 108};
113 109
@@ -127,8 +123,7 @@ enum {
127 * <-------------- nlattr->nla_len --------------> 123 * <-------------- nlattr->nla_len -------------->
128 */ 124 */
129 125
130struct nlattr 126struct nlattr {
131{
132 __u16 nla_len; 127 __u16 nla_len;
133 __u16 nla_type; 128 __u16 nla_type;
134}; 129};
@@ -161,8 +156,7 @@ static inline struct nlmsghdr *nlmsg_hdr(const struct sk_buff *skb)
161 return (struct nlmsghdr *)skb->data; 156 return (struct nlmsghdr *)skb->data;
162} 157}
163 158
164struct netlink_skb_parms 159struct netlink_skb_parms {
165{
166 struct ucred creds; /* Skb credentials */ 160 struct ucred creds; /* Skb credentials */
167 __u32 pid; 161 __u32 pid;
168 __u32 dst_group; 162 __u32 dst_group;
@@ -194,7 +188,7 @@ extern int netlink_has_listeners(struct sock *sk, unsigned int group);
194extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock); 188extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock);
195extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 pid, 189extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 pid,
196 __u32 group, gfp_t allocation); 190 __u32 group, gfp_t allocation);
197extern void netlink_set_err(struct sock *ssk, __u32 pid, __u32 group, int code); 191extern int netlink_set_err(struct sock *ssk, __u32 pid, __u32 group, int code);
198extern int netlink_register_notifier(struct notifier_block *nb); 192extern int netlink_register_notifier(struct notifier_block *nb);
199extern int netlink_unregister_notifier(struct notifier_block *nb); 193extern int netlink_unregister_notifier(struct notifier_block *nb);
200 194
@@ -220,8 +214,7 @@ int netlink_sendskb(struct sock *sk, struct sk_buff *skb);
220#define NLMSG_DEFAULT_SIZE (NLMSG_GOODSIZE - NLMSG_HDRLEN) 214#define NLMSG_DEFAULT_SIZE (NLMSG_GOODSIZE - NLMSG_HDRLEN)
221 215
222 216
223struct netlink_callback 217struct netlink_callback {
224{
225 struct sk_buff *skb; 218 struct sk_buff *skb;
226 const struct nlmsghdr *nlh; 219 const struct nlmsghdr *nlh;
227 int (*dump)(struct sk_buff * skb, 220 int (*dump)(struct sk_buff * skb,
@@ -231,8 +224,7 @@ struct netlink_callback
231 long args[6]; 224 long args[6];
232}; 225};
233 226
234struct netlink_notify 227struct netlink_notify {
235{
236 struct net *net; 228 struct net *net;
237 int pid; 229 int pid;
238 int protocol; 230 int protocol;
diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h
index 2524267210d3..a765ea898549 100644
--- a/include/linux/netpoll.h
+++ b/include/linux/netpoll.h
@@ -21,15 +21,20 @@ struct netpoll {
21 __be32 local_ip, remote_ip; 21 __be32 local_ip, remote_ip;
22 u16 local_port, remote_port; 22 u16 local_port, remote_port;
23 u8 remote_mac[ETH_ALEN]; 23 u8 remote_mac[ETH_ALEN];
24
25 struct list_head rx; /* rx_np list element */
24}; 26};
25 27
26struct netpoll_info { 28struct netpoll_info {
27 atomic_t refcnt; 29 atomic_t refcnt;
30
28 int rx_flags; 31 int rx_flags;
29 spinlock_t rx_lock; 32 spinlock_t rx_lock;
30 struct netpoll *rx_np; /* netpoll that registered an rx_hook */ 33 struct list_head rx_np; /* netpolls that registered an rx_hook */
34
31 struct sk_buff_head arp_tx; /* list of arp requests to reply to */ 35 struct sk_buff_head arp_tx; /* list of arp requests to reply to */
32 struct sk_buff_head txq; 36 struct sk_buff_head txq;
37
33 struct delayed_work tx_work; 38 struct delayed_work tx_work;
34}; 39};
35 40
@@ -51,7 +56,7 @@ static inline int netpoll_rx(struct sk_buff *skb)
51 unsigned long flags; 56 unsigned long flags;
52 int ret = 0; 57 int ret = 0;
53 58
54 if (!npinfo || (!npinfo->rx_np && !npinfo->rx_flags)) 59 if (!npinfo || (list_empty(&npinfo->rx_np) && !npinfo->rx_flags))
55 return 0; 60 return 0;
56 61
57 spin_lock_irqsave(&npinfo->rx_lock, flags); 62 spin_lock_irqsave(&npinfo->rx_lock, flags);
@@ -67,7 +72,7 @@ static inline int netpoll_rx_on(struct sk_buff *skb)
67{ 72{
68 struct netpoll_info *npinfo = skb->dev->npinfo; 73 struct netpoll_info *npinfo = skb->dev->npinfo;
69 74
70 return npinfo && (npinfo->rx_np || npinfo->rx_flags); 75 return npinfo && (!list_empty(&npinfo->rx_np) || npinfo->rx_flags);
71} 76}
72 77
73static inline int netpoll_receive_skb(struct sk_buff *skb) 78static inline int netpoll_receive_skb(struct sk_buff *skb)
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h
index c4c060208109..9b8299af3741 100644
--- a/include/linux/nfs4.h
+++ b/include/linux/nfs4.h
@@ -128,6 +128,8 @@
128#define SEQ4_STATUS_RECALLABLE_STATE_REVOKED 0x00000040 128#define SEQ4_STATUS_RECALLABLE_STATE_REVOKED 0x00000040
129#define SEQ4_STATUS_LEASE_MOVED 0x00000080 129#define SEQ4_STATUS_LEASE_MOVED 0x00000080
130#define SEQ4_STATUS_RESTART_RECLAIM_NEEDED 0x00000100 130#define SEQ4_STATUS_RESTART_RECLAIM_NEEDED 0x00000100
131#define SEQ4_STATUS_CB_PATH_DOWN_SESSION 0x00000200
132#define SEQ4_STATUS_BACKCHANNEL_FAULT 0x00000400
131 133
132#define NFS4_MAX_UINT64 (~(u64)0) 134#define NFS4_MAX_UINT64 (~(u64)0)
133 135
@@ -528,6 +530,7 @@ enum {
528 NFSPROC4_CLNT_DESTROY_SESSION, 530 NFSPROC4_CLNT_DESTROY_SESSION,
529 NFSPROC4_CLNT_SEQUENCE, 531 NFSPROC4_CLNT_SEQUENCE,
530 NFSPROC4_CLNT_GET_LEASE_TIME, 532 NFSPROC4_CLNT_GET_LEASE_TIME,
533 NFSPROC4_CLNT_RECLAIM_COMPLETE,
531}; 534};
532 535
533/* nfs41 types */ 536/* nfs41 types */
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
index d09db1bc9083..07ce4609fe50 100644
--- a/include/linux/nfs_fs.h
+++ b/include/linux/nfs_fs.h
@@ -33,9 +33,6 @@
33#define FLUSH_STABLE 4 /* commit to stable storage */ 33#define FLUSH_STABLE 4 /* commit to stable storage */
34#define FLUSH_LOWPRI 8 /* low priority background flush */ 34#define FLUSH_LOWPRI 8 /* low priority background flush */
35#define FLUSH_HIGHPRI 16 /* high priority memory reclaim flush */ 35#define FLUSH_HIGHPRI 16 /* high priority memory reclaim flush */
36#define FLUSH_NOCOMMIT 32 /* Don't send the NFSv3/v4 COMMIT */
37#define FLUSH_INVALIDATE 64 /* Invalidate the page cache */
38#define FLUSH_NOWRITEPAGE 128 /* Don't call writepage() */
39 36
40#ifdef __KERNEL__ 37#ifdef __KERNEL__
41 38
@@ -166,6 +163,7 @@ struct nfs_inode {
166 struct radix_tree_root nfs_page_tree; 163 struct radix_tree_root nfs_page_tree;
167 164
168 unsigned long npages; 165 unsigned long npages;
166 unsigned long ncommit;
169 167
170 /* Open contexts for shared mmap writes */ 168 /* Open contexts for shared mmap writes */
171 struct list_head open_files; 169 struct list_head open_files;
@@ -211,6 +209,7 @@ struct nfs_inode {
211#define NFS_INO_FLUSHING (4) /* inode is flushing out data */ 209#define NFS_INO_FLUSHING (4) /* inode is flushing out data */
212#define NFS_INO_FSCACHE (5) /* inode can be cached by FS-Cache */ 210#define NFS_INO_FSCACHE (5) /* inode can be cached by FS-Cache */
213#define NFS_INO_FSCACHE_LOCK (6) /* FS-Cache cookie management lock */ 211#define NFS_INO_FSCACHE_LOCK (6) /* FS-Cache cookie management lock */
212#define NFS_INO_COMMIT (7) /* inode is committing unstable writes */
214 213
215static inline struct nfs_inode *NFS_I(const struct inode *inode) 214static inline struct nfs_inode *NFS_I(const struct inode *inode)
216{ 215{
@@ -349,7 +348,6 @@ extern int nfs_attribute_timeout(struct inode *inode);
349extern int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode); 348extern int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode);
350extern int __nfs_revalidate_inode(struct nfs_server *, struct inode *); 349extern int __nfs_revalidate_inode(struct nfs_server *, struct inode *);
351extern int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping); 350extern int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping);
352extern int nfs_revalidate_mapping_nolock(struct inode *inode, struct address_space *mapping);
353extern int nfs_setattr(struct dentry *, struct iattr *); 351extern int nfs_setattr(struct dentry *, struct iattr *);
354extern void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr); 352extern void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr);
355extern struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx); 353extern struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx);
@@ -477,21 +475,12 @@ extern int nfs_writeback_done(struct rpc_task *, struct nfs_write_data *);
477 * Try to write back everything synchronously (but check the 475 * Try to write back everything synchronously (but check the
478 * return value!) 476 * return value!)
479 */ 477 */
480extern long nfs_sync_mapping_wait(struct address_space *, struct writeback_control *, int);
481extern int nfs_wb_all(struct inode *inode); 478extern int nfs_wb_all(struct inode *inode);
482extern int nfs_wb_nocommit(struct inode *inode);
483extern int nfs_wb_page(struct inode *inode, struct page* page); 479extern int nfs_wb_page(struct inode *inode, struct page* page);
484extern int nfs_wb_page_cancel(struct inode *inode, struct page* page); 480extern int nfs_wb_page_cancel(struct inode *inode, struct page* page);
485#if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) 481#if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4)
486extern int nfs_commit_inode(struct inode *, int);
487extern struct nfs_write_data *nfs_commitdata_alloc(void); 482extern struct nfs_write_data *nfs_commitdata_alloc(void);
488extern void nfs_commit_free(struct nfs_write_data *wdata); 483extern void nfs_commit_free(struct nfs_write_data *wdata);
489#else
490static inline int
491nfs_commit_inode(struct inode *inode, int how)
492{
493 return 0;
494}
495#endif 484#endif
496 485
497static inline int 486static inline int
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h
index 320569eabe3b..e82957acea56 100644
--- a/include/linux/nfs_fs_sb.h
+++ b/include/linux/nfs_fs_sb.h
@@ -105,7 +105,7 @@ struct nfs_server {
105 struct rpc_clnt * client; /* RPC client handle */ 105 struct rpc_clnt * client; /* RPC client handle */
106 struct rpc_clnt * client_acl; /* ACL RPC client handle */ 106 struct rpc_clnt * client_acl; /* ACL RPC client handle */
107 struct nlm_host *nlm_host; /* NLM client handle */ 107 struct nlm_host *nlm_host; /* NLM client handle */
108 struct nfs_iostats * io_stats; /* I/O statistics */ 108 struct nfs_iostats __percpu *io_stats; /* I/O statistics */
109 struct backing_dev_info backing_dev_info; 109 struct backing_dev_info backing_dev_info;
110 atomic_long_t writeback; /* number of writeback pages */ 110 atomic_long_t writeback; /* number of writeback pages */
111 int flags; /* various flags */ 111 int flags; /* various flags */
@@ -176,6 +176,7 @@ struct nfs_server {
176#define NFS_CAP_ATIME (1U << 11) 176#define NFS_CAP_ATIME (1U << 11)
177#define NFS_CAP_CTIME (1U << 12) 177#define NFS_CAP_CTIME (1U << 12)
178#define NFS_CAP_MTIME (1U << 13) 178#define NFS_CAP_MTIME (1U << 13)
179#define NFS_CAP_POSIX_LOCK (1U << 14)
179 180
180 181
181/* maximum number of slots to use */ 182/* maximum number of slots to use */
@@ -193,6 +194,8 @@ struct nfs4_slot_table {
193 int max_slots; /* # slots in table */ 194 int max_slots; /* # slots in table */
194 int highest_used_slotid; /* sent to server on each SEQ. 195 int highest_used_slotid; /* sent to server on each SEQ.
195 * op for dynamic resizing */ 196 * op for dynamic resizing */
197 int target_max_slots; /* Set by CB_RECALL_SLOT as
198 * the new max_slots */
196}; 199};
197 200
198static inline int slot_idx(struct nfs4_slot_table *tbl, struct nfs4_slot *sp) 201static inline int slot_idx(struct nfs4_slot_table *tbl, struct nfs4_slot *sp)
@@ -209,6 +212,7 @@ struct nfs4_session {
209 unsigned long session_state; 212 unsigned long session_state;
210 u32 hash_alg; 213 u32 hash_alg;
211 u32 ssv_len; 214 u32 ssv_len;
215 struct completion complete;
212 216
213 /* The fore and back channel */ 217 /* The fore and back channel */
214 struct nfs4_channel_attrs fc_attrs; 218 struct nfs4_channel_attrs fc_attrs;
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index 62f63fb0c4c8..89b28812ec24 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -2,6 +2,7 @@
2#define _LINUX_NFS_XDR_H 2#define _LINUX_NFS_XDR_H
3 3
4#include <linux/nfsacl.h> 4#include <linux/nfsacl.h>
5#include <linux/nfs3.h>
5 6
6/* 7/*
7 * To change the maximum rsize and wsize supported by the NFS client, adjust 8 * To change the maximum rsize and wsize supported by the NFS client, adjust
@@ -170,8 +171,9 @@ struct nfs4_sequence_args {
170struct nfs4_sequence_res { 171struct nfs4_sequence_res {
171 struct nfs4_session *sr_session; 172 struct nfs4_session *sr_session;
172 u8 sr_slotid; /* slot used to send request */ 173 u8 sr_slotid; /* slot used to send request */
173 unsigned long sr_renewal_time;
174 int sr_status; /* sequence operation status */ 174 int sr_status; /* sequence operation status */
175 unsigned long sr_renewal_time;
176 u32 sr_status_flags;
175}; 177};
176 178
177struct nfs4_get_lease_time_args { 179struct nfs4_get_lease_time_args {
@@ -938,6 +940,16 @@ struct nfs41_create_session_args {
938struct nfs41_create_session_res { 940struct nfs41_create_session_res {
939 struct nfs_client *client; 941 struct nfs_client *client;
940}; 942};
943
944struct nfs41_reclaim_complete_args {
945 /* In the future extend to include curr_fh for use with migration */
946 unsigned char one_fs:1;
947 struct nfs4_sequence_args seq_args;
948};
949
950struct nfs41_reclaim_complete_res {
951 struct nfs4_sequence_res seq_res;
952};
941#endif /* CONFIG_NFS_V4_1 */ 953#endif /* CONFIG_NFS_V4_1 */
942 954
943struct nfs_page; 955struct nfs_page;
diff --git a/include/linux/nfsacl.h b/include/linux/nfsacl.h
index 43011b69297c..f321b578edeb 100644
--- a/include/linux/nfsacl.h
+++ b/include/linux/nfsacl.h
@@ -29,6 +29,7 @@
29#ifdef __KERNEL__ 29#ifdef __KERNEL__
30 30
31#include <linux/posix_acl.h> 31#include <linux/posix_acl.h>
32#include <linux/sunrpc/xdr.h>
32 33
33/* Maximum number of ACL entries over NFS */ 34/* Maximum number of ACL entries over NFS */
34#define NFS_ACL_MAX_ENTRIES 1024 35#define NFS_ACL_MAX_ENTRIES 1024
diff --git a/include/linux/nfsd/cache.h b/include/linux/nfsd/cache.h
deleted file mode 100644
index 3a3f58934f5e..000000000000
--- a/include/linux/nfsd/cache.h
+++ /dev/null
@@ -1,86 +0,0 @@
1/*
2 * include/linux/nfsd/cache.h
3 *
4 * Request reply cache. This was heavily inspired by the
5 * implementation in 4.3BSD/4.4BSD.
6 *
7 * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
8 */
9
10#ifndef NFSCACHE_H
11#define NFSCACHE_H
12
13#include <linux/in.h>
14#include <linux/uio.h>
15
16/*
17 * Representation of a reply cache entry.
18 */
19struct svc_cacherep {
20 struct hlist_node c_hash;
21 struct list_head c_lru;
22
23 unsigned char c_state, /* unused, inprog, done */
24 c_type, /* status, buffer */
25 c_secure : 1; /* req came from port < 1024 */
26 struct sockaddr_in c_addr;
27 __be32 c_xid;
28 u32 c_prot;
29 u32 c_proc;
30 u32 c_vers;
31 unsigned long c_timestamp;
32 union {
33 struct kvec u_vec;
34 __be32 u_status;
35 } c_u;
36};
37
38#define c_replvec c_u.u_vec
39#define c_replstat c_u.u_status
40
41/* cache entry states */
42enum {
43 RC_UNUSED,
44 RC_INPROG,
45 RC_DONE
46};
47
48/* return values */
49enum {
50 RC_DROPIT,
51 RC_REPLY,
52 RC_DOIT,
53 RC_INTR
54};
55
56/*
57 * Cache types.
58 * We may want to add more types one day, e.g. for diropres and
59 * attrstat replies. Using cache entries with fixed length instead
60 * of buffer pointers may be more efficient.
61 */
62enum {
63 RC_NOCACHE,
64 RC_REPLSTAT,
65 RC_REPLBUFF,
66};
67
68/*
69 * If requests are retransmitted within this interval, they're dropped.
70 */
71#define RC_DELAY (HZ/5)
72
73int nfsd_reply_cache_init(void);
74void nfsd_reply_cache_shutdown(void);
75int nfsd_cache_lookup(struct svc_rqst *, int);
76void nfsd_cache_update(struct svc_rqst *, int, __be32 *);
77
78#ifdef CONFIG_NFSD_V4
79void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp);
80#else /* CONFIG_NFSD_V4 */
81static inline void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp)
82{
83}
84#endif /* CONFIG_NFSD_V4 */
85
86#endif /* NFSCACHE_H */
diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h
index a6d9ef2bb34a..8ae78a61eea4 100644
--- a/include/linux/nfsd/export.h
+++ b/include/linux/nfsd/export.h
@@ -12,7 +12,7 @@
12 12
13# include <linux/types.h> 13# include <linux/types.h>
14#ifdef __KERNEL__ 14#ifdef __KERNEL__
15# include <linux/in.h> 15# include <linux/nfsd/nfsfh.h>
16#endif 16#endif
17 17
18/* 18/*
@@ -39,11 +39,23 @@
39#define NFSEXP_FSID 0x2000 39#define NFSEXP_FSID 0x2000
40#define NFSEXP_CROSSMOUNT 0x4000 40#define NFSEXP_CROSSMOUNT 0x4000
41#define NFSEXP_NOACL 0x8000 /* reserved for possible ACL related use */ 41#define NFSEXP_NOACL 0x8000 /* reserved for possible ACL related use */
42#define NFSEXP_ALLFLAGS 0xFE3F 42/*
43 * The NFSEXP_V4ROOT flag causes the kernel to give access only to NFSv4
44 * clients, and only to the single directory that is the root of the
45 * export; further lookup and readdir operations are treated as if every
46 * subdirectory was a mountpoint, and ignored if they are not themselves
47 * exported. This is used by nfsd and mountd to construct the NFSv4
48 * pseudofilesystem, which provides access only to paths leading to each
49 * exported filesystem.
50 */
51#define NFSEXP_V4ROOT 0x10000
52/* All flags that we claim to support. (Note we don't support NOACL.) */
53#define NFSEXP_ALLFLAGS 0x17E3F
43 54
44/* The flags that may vary depending on security flavor: */ 55/* The flags that may vary depending on security flavor: */
45#define NFSEXP_SECINFO_FLAGS (NFSEXP_READONLY | NFSEXP_ROOTSQUASH \ 56#define NFSEXP_SECINFO_FLAGS (NFSEXP_READONLY | NFSEXP_ROOTSQUASH \
46 | NFSEXP_ALLSQUASH) 57 | NFSEXP_ALLSQUASH \
58 | NFSEXP_INSECURE_PORT)
47 59
48#ifdef __KERNEL__ 60#ifdef __KERNEL__
49 61
@@ -108,7 +120,6 @@ struct svc_expkey {
108 struct path ek_path; 120 struct path ek_path;
109}; 121};
110 122
111#define EX_SECURE(exp) (!((exp)->ex_flags & NFSEXP_INSECURE_PORT))
112#define EX_ISSYNC(exp) (!((exp)->ex_flags & NFSEXP_ASYNC)) 123#define EX_ISSYNC(exp) (!((exp)->ex_flags & NFSEXP_ASYNC))
113#define EX_NOHIDE(exp) ((exp)->ex_flags & NFSEXP_NOHIDE) 124#define EX_NOHIDE(exp) ((exp)->ex_flags & NFSEXP_NOHIDE)
114#define EX_WGATHER(exp) ((exp)->ex_flags & NFSEXP_GATHERED_WRITES) 125#define EX_WGATHER(exp) ((exp)->ex_flags & NFSEXP_GATHERED_WRITES)
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h
deleted file mode 100644
index 510ffdd5020e..000000000000
--- a/include/linux/nfsd/nfsd.h
+++ /dev/null
@@ -1,424 +0,0 @@
1/*
2 * linux/include/linux/nfsd/nfsd.h
3 *
4 * Hodge-podge collection of knfsd-related stuff.
5 * I will sort this out later.
6 *
7 * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de>
8 */
9
10#ifndef LINUX_NFSD_NFSD_H
11#define LINUX_NFSD_NFSD_H
12
13#include <linux/types.h>
14#include <linux/unistd.h>
15#include <linux/fs.h>
16#include <linux/posix_acl.h>
17#include <linux/mount.h>
18
19#include <linux/nfsd/debug.h>
20#include <linux/nfsd/nfsfh.h>
21#include <linux/nfsd/export.h>
22#include <linux/nfsd/stats.h>
23/*
24 * nfsd version
25 */
26#define NFSD_SUPPORTED_MINOR_VERSION 1
27
28/*
29 * Flags for nfsd_permission
30 */
31#define NFSD_MAY_NOP 0
32#define NFSD_MAY_EXEC 1 /* == MAY_EXEC */
33#define NFSD_MAY_WRITE 2 /* == MAY_WRITE */
34#define NFSD_MAY_READ 4 /* == MAY_READ */
35#define NFSD_MAY_SATTR 8
36#define NFSD_MAY_TRUNC 16
37#define NFSD_MAY_LOCK 32
38#define NFSD_MAY_OWNER_OVERRIDE 64
39#define NFSD_MAY_LOCAL_ACCESS 128 /* IRIX doing local access check on device special file*/
40#define NFSD_MAY_BYPASS_GSS_ON_ROOT 256
41
42#define NFSD_MAY_CREATE (NFSD_MAY_EXEC|NFSD_MAY_WRITE)
43#define NFSD_MAY_REMOVE (NFSD_MAY_EXEC|NFSD_MAY_WRITE|NFSD_MAY_TRUNC)
44
45/*
46 * Callback function for readdir
47 */
48struct readdir_cd {
49 __be32 err; /* 0, nfserr, or nfserr_eof */
50};
51typedef int (*nfsd_dirop_t)(struct inode *, struct dentry *, int, int);
52
53extern struct svc_program nfsd_program;
54extern struct svc_version nfsd_version2, nfsd_version3,
55 nfsd_version4;
56extern u32 nfsd_supported_minorversion;
57extern struct mutex nfsd_mutex;
58extern struct svc_serv *nfsd_serv;
59extern spinlock_t nfsd_drc_lock;
60extern unsigned int nfsd_drc_max_mem;
61extern unsigned int nfsd_drc_mem_used;
62
63extern const struct seq_operations nfs_exports_op;
64
65/*
66 * Function prototypes.
67 */
68int nfsd_svc(unsigned short port, int nrservs);
69int nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp);
70
71int nfsd_nrthreads(void);
72int nfsd_nrpools(void);
73int nfsd_get_nrthreads(int n, int *);
74int nfsd_set_nrthreads(int n, int *);
75
76/* nfsd/vfs.c */
77int fh_lock_parent(struct svc_fh *, struct dentry *);
78int nfsd_racache_init(int);
79void nfsd_racache_shutdown(void);
80int nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp,
81 struct svc_export **expp);
82__be32 nfsd_lookup(struct svc_rqst *, struct svc_fh *,
83 const char *, unsigned int, struct svc_fh *);
84__be32 nfsd_lookup_dentry(struct svc_rqst *, struct svc_fh *,
85 const char *, unsigned int,
86 struct svc_export **, struct dentry **);
87__be32 nfsd_setattr(struct svc_rqst *, struct svc_fh *,
88 struct iattr *, int, time_t);
89#ifdef CONFIG_NFSD_V4
90__be32 nfsd4_set_nfs4_acl(struct svc_rqst *, struct svc_fh *,
91 struct nfs4_acl *);
92int nfsd4_get_nfs4_acl(struct svc_rqst *, struct dentry *, struct nfs4_acl **);
93#endif /* CONFIG_NFSD_V4 */
94__be32 nfsd_create(struct svc_rqst *, struct svc_fh *,
95 char *name, int len, struct iattr *attrs,
96 int type, dev_t rdev, struct svc_fh *res);
97#ifdef CONFIG_NFSD_V3
98__be32 nfsd_access(struct svc_rqst *, struct svc_fh *, u32 *, u32 *);
99__be32 nfsd_create_v3(struct svc_rqst *, struct svc_fh *,
100 char *name, int len, struct iattr *attrs,
101 struct svc_fh *res, int createmode,
102 u32 *verifier, int *truncp, int *created);
103__be32 nfsd_commit(struct svc_rqst *, struct svc_fh *,
104 loff_t, unsigned long);
105#endif /* CONFIG_NFSD_V3 */
106__be32 nfsd_open(struct svc_rqst *, struct svc_fh *, int,
107 int, struct file **);
108void nfsd_close(struct file *);
109__be32 nfsd_read(struct svc_rqst *, struct svc_fh *, struct file *,
110 loff_t, struct kvec *, int, unsigned long *);
111__be32 nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *,
112 loff_t, struct kvec *,int, unsigned long *, int *);
113__be32 nfsd_readlink(struct svc_rqst *, struct svc_fh *,
114 char *, int *);
115__be32 nfsd_symlink(struct svc_rqst *, struct svc_fh *,
116 char *name, int len, char *path, int plen,
117 struct svc_fh *res, struct iattr *);
118__be32 nfsd_link(struct svc_rqst *, struct svc_fh *,
119 char *, int, struct svc_fh *);
120__be32 nfsd_rename(struct svc_rqst *,
121 struct svc_fh *, char *, int,
122 struct svc_fh *, char *, int);
123__be32 nfsd_remove(struct svc_rqst *,
124 struct svc_fh *, char *, int);
125__be32 nfsd_unlink(struct svc_rqst *, struct svc_fh *, int type,
126 char *name, int len);
127int nfsd_truncate(struct svc_rqst *, struct svc_fh *,
128 unsigned long size);
129__be32 nfsd_readdir(struct svc_rqst *, struct svc_fh *,
130 loff_t *, struct readdir_cd *, filldir_t);
131__be32 nfsd_statfs(struct svc_rqst *, struct svc_fh *,
132 struct kstatfs *, int access);
133
134int nfsd_notify_change(struct inode *, struct iattr *);
135__be32 nfsd_permission(struct svc_rqst *, struct svc_export *,
136 struct dentry *, int);
137int nfsd_sync_dir(struct dentry *dp);
138
139#if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
140#ifdef CONFIG_NFSD_V2_ACL
141extern struct svc_version nfsd_acl_version2;
142#else
143#define nfsd_acl_version2 NULL
144#endif
145#ifdef CONFIG_NFSD_V3_ACL
146extern struct svc_version nfsd_acl_version3;
147#else
148#define nfsd_acl_version3 NULL
149#endif
150struct posix_acl *nfsd_get_posix_acl(struct svc_fh *, int);
151int nfsd_set_posix_acl(struct svc_fh *, int, struct posix_acl *);
152#endif
153
154enum vers_op {NFSD_SET, NFSD_CLEAR, NFSD_TEST, NFSD_AVAIL };
155int nfsd_vers(int vers, enum vers_op change);
156int nfsd_minorversion(u32 minorversion, enum vers_op change);
157void nfsd_reset_versions(void);
158int nfsd_create_serv(void);
159
160extern int nfsd_max_blksize;
161
162/*
163 * NFSv4 State
164 */
165#ifdef CONFIG_NFSD_V4
166extern unsigned int max_delegations;
167int nfs4_state_init(void);
168void nfsd4_free_slabs(void);
169int nfs4_state_start(void);
170void nfs4_state_shutdown(void);
171time_t nfs4_lease_time(void);
172void nfs4_reset_lease(time_t leasetime);
173int nfs4_reset_recoverydir(char *recdir);
174#else
175static inline int nfs4_state_init(void) { return 0; }
176static inline void nfsd4_free_slabs(void) { }
177static inline int nfs4_state_start(void) { return 0; }
178static inline void nfs4_state_shutdown(void) { }
179static inline time_t nfs4_lease_time(void) { return 0; }
180static inline void nfs4_reset_lease(time_t leasetime) { }
181static inline int nfs4_reset_recoverydir(char *recdir) { return 0; }
182#endif
183
184/*
185 * lockd binding
186 */
187void nfsd_lockd_init(void);
188void nfsd_lockd_shutdown(void);
189
190
191/*
192 * These macros provide pre-xdr'ed values for faster operation.
193 */
194#define nfs_ok cpu_to_be32(NFS_OK)
195#define nfserr_perm cpu_to_be32(NFSERR_PERM)
196#define nfserr_noent cpu_to_be32(NFSERR_NOENT)
197#define nfserr_io cpu_to_be32(NFSERR_IO)
198#define nfserr_nxio cpu_to_be32(NFSERR_NXIO)
199#define nfserr_eagain cpu_to_be32(NFSERR_EAGAIN)
200#define nfserr_acces cpu_to_be32(NFSERR_ACCES)
201#define nfserr_exist cpu_to_be32(NFSERR_EXIST)
202#define nfserr_xdev cpu_to_be32(NFSERR_XDEV)
203#define nfserr_nodev cpu_to_be32(NFSERR_NODEV)
204#define nfserr_notdir cpu_to_be32(NFSERR_NOTDIR)
205#define nfserr_isdir cpu_to_be32(NFSERR_ISDIR)
206#define nfserr_inval cpu_to_be32(NFSERR_INVAL)
207#define nfserr_fbig cpu_to_be32(NFSERR_FBIG)
208#define nfserr_nospc cpu_to_be32(NFSERR_NOSPC)
209#define nfserr_rofs cpu_to_be32(NFSERR_ROFS)
210#define nfserr_mlink cpu_to_be32(NFSERR_MLINK)
211#define nfserr_opnotsupp cpu_to_be32(NFSERR_OPNOTSUPP)
212#define nfserr_nametoolong cpu_to_be32(NFSERR_NAMETOOLONG)
213#define nfserr_notempty cpu_to_be32(NFSERR_NOTEMPTY)
214#define nfserr_dquot cpu_to_be32(NFSERR_DQUOT)
215#define nfserr_stale cpu_to_be32(NFSERR_STALE)
216#define nfserr_remote cpu_to_be32(NFSERR_REMOTE)
217#define nfserr_wflush cpu_to_be32(NFSERR_WFLUSH)
218#define nfserr_badhandle cpu_to_be32(NFSERR_BADHANDLE)
219#define nfserr_notsync cpu_to_be32(NFSERR_NOT_SYNC)
220#define nfserr_badcookie cpu_to_be32(NFSERR_BAD_COOKIE)
221#define nfserr_notsupp cpu_to_be32(NFSERR_NOTSUPP)
222#define nfserr_toosmall cpu_to_be32(NFSERR_TOOSMALL)
223#define nfserr_serverfault cpu_to_be32(NFSERR_SERVERFAULT)
224#define nfserr_badtype cpu_to_be32(NFSERR_BADTYPE)
225#define nfserr_jukebox cpu_to_be32(NFSERR_JUKEBOX)
226#define nfserr_denied cpu_to_be32(NFSERR_DENIED)
227#define nfserr_deadlock cpu_to_be32(NFSERR_DEADLOCK)
228#define nfserr_expired cpu_to_be32(NFSERR_EXPIRED)
229#define nfserr_bad_cookie cpu_to_be32(NFSERR_BAD_COOKIE)
230#define nfserr_same cpu_to_be32(NFSERR_SAME)
231#define nfserr_clid_inuse cpu_to_be32(NFSERR_CLID_INUSE)
232#define nfserr_stale_clientid cpu_to_be32(NFSERR_STALE_CLIENTID)
233#define nfserr_resource cpu_to_be32(NFSERR_RESOURCE)
234#define nfserr_moved cpu_to_be32(NFSERR_MOVED)
235#define nfserr_nofilehandle cpu_to_be32(NFSERR_NOFILEHANDLE)
236#define nfserr_minor_vers_mismatch cpu_to_be32(NFSERR_MINOR_VERS_MISMATCH)
237#define nfserr_share_denied cpu_to_be32(NFSERR_SHARE_DENIED)
238#define nfserr_stale_stateid cpu_to_be32(NFSERR_STALE_STATEID)
239#define nfserr_old_stateid cpu_to_be32(NFSERR_OLD_STATEID)
240#define nfserr_bad_stateid cpu_to_be32(NFSERR_BAD_STATEID)
241#define nfserr_bad_seqid cpu_to_be32(NFSERR_BAD_SEQID)
242#define nfserr_symlink cpu_to_be32(NFSERR_SYMLINK)
243#define nfserr_not_same cpu_to_be32(NFSERR_NOT_SAME)
244#define nfserr_restorefh cpu_to_be32(NFSERR_RESTOREFH)
245#define nfserr_attrnotsupp cpu_to_be32(NFSERR_ATTRNOTSUPP)
246#define nfserr_bad_xdr cpu_to_be32(NFSERR_BAD_XDR)
247#define nfserr_openmode cpu_to_be32(NFSERR_OPENMODE)
248#define nfserr_locks_held cpu_to_be32(NFSERR_LOCKS_HELD)
249#define nfserr_op_illegal cpu_to_be32(NFSERR_OP_ILLEGAL)
250#define nfserr_grace cpu_to_be32(NFSERR_GRACE)
251#define nfserr_no_grace cpu_to_be32(NFSERR_NO_GRACE)
252#define nfserr_reclaim_bad cpu_to_be32(NFSERR_RECLAIM_BAD)
253#define nfserr_badname cpu_to_be32(NFSERR_BADNAME)
254#define nfserr_cb_path_down cpu_to_be32(NFSERR_CB_PATH_DOWN)
255#define nfserr_locked cpu_to_be32(NFSERR_LOCKED)
256#define nfserr_wrongsec cpu_to_be32(NFSERR_WRONGSEC)
257#define nfserr_badiomode cpu_to_be32(NFS4ERR_BADIOMODE)
258#define nfserr_badlayout cpu_to_be32(NFS4ERR_BADLAYOUT)
259#define nfserr_bad_session_digest cpu_to_be32(NFS4ERR_BAD_SESSION_DIGEST)
260#define nfserr_badsession cpu_to_be32(NFS4ERR_BADSESSION)
261#define nfserr_badslot cpu_to_be32(NFS4ERR_BADSLOT)
262#define nfserr_complete_already cpu_to_be32(NFS4ERR_COMPLETE_ALREADY)
263#define nfserr_conn_not_bound_to_session cpu_to_be32(NFS4ERR_CONN_NOT_BOUND_TO_SESSION)
264#define nfserr_deleg_already_wanted cpu_to_be32(NFS4ERR_DELEG_ALREADY_WANTED)
265#define nfserr_back_chan_busy cpu_to_be32(NFS4ERR_BACK_CHAN_BUSY)
266#define nfserr_layouttrylater cpu_to_be32(NFS4ERR_LAYOUTTRYLATER)
267#define nfserr_layoutunavailable cpu_to_be32(NFS4ERR_LAYOUTUNAVAILABLE)
268#define nfserr_nomatching_layout cpu_to_be32(NFS4ERR_NOMATCHING_LAYOUT)
269#define nfserr_recallconflict cpu_to_be32(NFS4ERR_RECALLCONFLICT)
270#define nfserr_unknown_layouttype cpu_to_be32(NFS4ERR_UNKNOWN_LAYOUTTYPE)
271#define nfserr_seq_misordered cpu_to_be32(NFS4ERR_SEQ_MISORDERED)
272#define nfserr_sequence_pos cpu_to_be32(NFS4ERR_SEQUENCE_POS)
273#define nfserr_req_too_big cpu_to_be32(NFS4ERR_REQ_TOO_BIG)
274#define nfserr_rep_too_big cpu_to_be32(NFS4ERR_REP_TOO_BIG)
275#define nfserr_rep_too_big_to_cache cpu_to_be32(NFS4ERR_REP_TOO_BIG_TO_CACHE)
276#define nfserr_retry_uncached_rep cpu_to_be32(NFS4ERR_RETRY_UNCACHED_REP)
277#define nfserr_unsafe_compound cpu_to_be32(NFS4ERR_UNSAFE_COMPOUND)
278#define nfserr_too_many_ops cpu_to_be32(NFS4ERR_TOO_MANY_OPS)
279#define nfserr_op_not_in_session cpu_to_be32(NFS4ERR_OP_NOT_IN_SESSION)
280#define nfserr_hash_alg_unsupp cpu_to_be32(NFS4ERR_HASH_ALG_UNSUPP)
281#define nfserr_clientid_busy cpu_to_be32(NFS4ERR_CLIENTID_BUSY)
282#define nfserr_pnfs_io_hole cpu_to_be32(NFS4ERR_PNFS_IO_HOLE)
283#define nfserr_seq_false_retry cpu_to_be32(NFS4ERR_SEQ_FALSE_RETRY)
284#define nfserr_bad_high_slot cpu_to_be32(NFS4ERR_BAD_HIGH_SLOT)
285#define nfserr_deadsession cpu_to_be32(NFS4ERR_DEADSESSION)
286#define nfserr_encr_alg_unsupp cpu_to_be32(NFS4ERR_ENCR_ALG_UNSUPP)
287#define nfserr_pnfs_no_layout cpu_to_be32(NFS4ERR_PNFS_NO_LAYOUT)
288#define nfserr_not_only_op cpu_to_be32(NFS4ERR_NOT_ONLY_OP)
289#define nfserr_wrong_cred cpu_to_be32(NFS4ERR_WRONG_CRED)
290#define nfserr_wrong_type cpu_to_be32(NFS4ERR_WRONG_TYPE)
291#define nfserr_dirdeleg_unavail cpu_to_be32(NFS4ERR_DIRDELEG_UNAVAIL)
292#define nfserr_reject_deleg cpu_to_be32(NFS4ERR_REJECT_DELEG)
293#define nfserr_returnconflict cpu_to_be32(NFS4ERR_RETURNCONFLICT)
294#define nfserr_deleg_revoked cpu_to_be32(NFS4ERR_DELEG_REVOKED)
295
296/* error codes for internal use */
297/* if a request fails due to kmalloc failure, it gets dropped.
298 * Client should resend eventually
299 */
300#define nfserr_dropit cpu_to_be32(30000)
301/* end-of-file indicator in readdir */
302#define nfserr_eof cpu_to_be32(30001)
303/* replay detected */
304#define nfserr_replay_me cpu_to_be32(11001)
305/* nfs41 replay detected */
306#define nfserr_replay_cache cpu_to_be32(11002)
307
308/* Check for dir entries '.' and '..' */
309#define isdotent(n, l) (l < 3 && n[0] == '.' && (l == 1 || n[1] == '.'))
310
311/*
312 * Time of server startup
313 */
314extern struct timeval nfssvc_boot;
315
316#ifdef CONFIG_NFSD_V4
317
318/* before processing a COMPOUND operation, we have to check that there
319 * is enough space in the buffer for XDR encode to succeed. otherwise,
320 * we might process an operation with side effects, and be unable to
321 * tell the client that the operation succeeded.
322 *
323 * COMPOUND_SLACK_SPACE - this is the minimum bytes of buffer space
324 * needed to encode an "ordinary" _successful_ operation. (GETATTR,
325 * READ, READDIR, and READLINK have their own buffer checks.) if we
326 * fall below this level, we fail the next operation with NFS4ERR_RESOURCE.
327 *
328 * COMPOUND_ERR_SLACK_SPACE - this is the minimum bytes of buffer space
329 * needed to encode an operation which has failed with NFS4ERR_RESOURCE.
330 * care is taken to ensure that we never fall below this level for any
331 * reason.
332 */
333#define COMPOUND_SLACK_SPACE 140 /* OP_GETFH */
334#define COMPOUND_ERR_SLACK_SPACE 12 /* OP_SETATTR */
335
336#define NFSD_LEASE_TIME (nfs4_lease_time())
337#define NFSD_LAUNDROMAT_MINTIMEOUT 10 /* seconds */
338
339/*
340 * The following attributes are currently not supported by the NFSv4 server:
341 * ARCHIVE (deprecated anyway)
342 * HIDDEN (unlikely to be supported any time soon)
343 * MIMETYPE (unlikely to be supported any time soon)
344 * QUOTA_* (will be supported in a forthcoming patch)
345 * SYSTEM (unlikely to be supported any time soon)
346 * TIME_BACKUP (unlikely to be supported any time soon)
347 * TIME_CREATE (unlikely to be supported any time soon)
348 */
349#define NFSD4_SUPPORTED_ATTRS_WORD0 \
350(FATTR4_WORD0_SUPPORTED_ATTRS | FATTR4_WORD0_TYPE | FATTR4_WORD0_FH_EXPIRE_TYPE \
351 | FATTR4_WORD0_CHANGE | FATTR4_WORD0_SIZE | FATTR4_WORD0_LINK_SUPPORT \
352 | FATTR4_WORD0_SYMLINK_SUPPORT | FATTR4_WORD0_NAMED_ATTR | FATTR4_WORD0_FSID \
353 | FATTR4_WORD0_UNIQUE_HANDLES | FATTR4_WORD0_LEASE_TIME | FATTR4_WORD0_RDATTR_ERROR \
354 | FATTR4_WORD0_ACLSUPPORT | FATTR4_WORD0_CANSETTIME | FATTR4_WORD0_CASE_INSENSITIVE \
355 | FATTR4_WORD0_CASE_PRESERVING | FATTR4_WORD0_CHOWN_RESTRICTED \
356 | FATTR4_WORD0_FILEHANDLE | FATTR4_WORD0_FILEID | FATTR4_WORD0_FILES_AVAIL \
357 | FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL | FATTR4_WORD0_FS_LOCATIONS | FATTR4_WORD0_HOMOGENEOUS \
358 | FATTR4_WORD0_MAXFILESIZE | FATTR4_WORD0_MAXLINK | FATTR4_WORD0_MAXNAME \
359 | FATTR4_WORD0_MAXREAD | FATTR4_WORD0_MAXWRITE | FATTR4_WORD0_ACL)
360
361#define NFSD4_SUPPORTED_ATTRS_WORD1 \
362(FATTR4_WORD1_MODE | FATTR4_WORD1_NO_TRUNC | FATTR4_WORD1_NUMLINKS \
363 | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP | FATTR4_WORD1_RAWDEV \
364 | FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | FATTR4_WORD1_SPACE_TOTAL \
365 | FATTR4_WORD1_SPACE_USED | FATTR4_WORD1_TIME_ACCESS | FATTR4_WORD1_TIME_ACCESS_SET \
366 | FATTR4_WORD1_TIME_DELTA | FATTR4_WORD1_TIME_METADATA \
367 | FATTR4_WORD1_TIME_MODIFY | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID)
368
369#define NFSD4_SUPPORTED_ATTRS_WORD2 0
370
371#define NFSD4_1_SUPPORTED_ATTRS_WORD0 \
372 NFSD4_SUPPORTED_ATTRS_WORD0
373
374#define NFSD4_1_SUPPORTED_ATTRS_WORD1 \
375 NFSD4_SUPPORTED_ATTRS_WORD1
376
377#define NFSD4_1_SUPPORTED_ATTRS_WORD2 \
378 (NFSD4_SUPPORTED_ATTRS_WORD2 | FATTR4_WORD2_SUPPATTR_EXCLCREAT)
379
380static inline u32 nfsd_suppattrs0(u32 minorversion)
381{
382 return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD0
383 : NFSD4_SUPPORTED_ATTRS_WORD0;
384}
385
386static inline u32 nfsd_suppattrs1(u32 minorversion)
387{
388 return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD1
389 : NFSD4_SUPPORTED_ATTRS_WORD1;
390}
391
392static inline u32 nfsd_suppattrs2(u32 minorversion)
393{
394 return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD2
395 : NFSD4_SUPPORTED_ATTRS_WORD2;
396}
397
398/* These will return ERR_INVAL if specified in GETATTR or READDIR. */
399#define NFSD_WRITEONLY_ATTRS_WORD1 \
400(FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET)
401
402/* These are the only attrs allowed in CREATE/OPEN/SETATTR. */
403#define NFSD_WRITEABLE_ATTRS_WORD0 \
404(FATTR4_WORD0_SIZE | FATTR4_WORD0_ACL )
405#define NFSD_WRITEABLE_ATTRS_WORD1 \
406(FATTR4_WORD1_MODE | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP \
407 | FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET)
408#define NFSD_WRITEABLE_ATTRS_WORD2 0
409
410#define NFSD_SUPPATTR_EXCLCREAT_WORD0 \
411 NFSD_WRITEABLE_ATTRS_WORD0
412/*
413 * we currently store the exclusive create verifier in the v_{a,m}time
414 * attributes so the client can't set these at create time using EXCLUSIVE4_1
415 */
416#define NFSD_SUPPATTR_EXCLCREAT_WORD1 \
417 (NFSD_WRITEABLE_ATTRS_WORD1 & \
418 ~(FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET))
419#define NFSD_SUPPATTR_EXCLCREAT_WORD2 \
420 NFSD_WRITEABLE_ATTRS_WORD2
421
422#endif /* CONFIG_NFSD_V4 */
423
424#endif /* LINUX_NFSD_NFSD_H */
diff --git a/include/linux/nfsd/nfsfh.h b/include/linux/nfsd/nfsfh.h
index 8f641c908450..65e333afaee4 100644
--- a/include/linux/nfsd/nfsfh.h
+++ b/include/linux/nfsd/nfsfh.h
@@ -16,11 +16,9 @@
16 16
17# include <linux/types.h> 17# include <linux/types.h>
18#ifdef __KERNEL__ 18#ifdef __KERNEL__
19# include <linux/string.h> 19# include <linux/sunrpc/svc.h>
20# include <linux/fs.h>
21#endif 20#endif
22#include <linux/nfsd/const.h> 21#include <linux/nfsd/const.h>
23#include <linux/nfsd/debug.h>
24 22
25/* 23/*
26 * This is the old "dentry style" Linux NFSv2 file handle. 24 * This is the old "dentry style" Linux NFSv2 file handle.
@@ -164,208 +162,6 @@ typedef struct svc_fh {
164 162
165} svc_fh; 163} svc_fh;
166 164
167enum nfsd_fsid {
168 FSID_DEV = 0,
169 FSID_NUM,
170 FSID_MAJOR_MINOR,
171 FSID_ENCODE_DEV,
172 FSID_UUID4_INUM,
173 FSID_UUID8,
174 FSID_UUID16,
175 FSID_UUID16_INUM,
176};
177
178enum fsid_source {
179 FSIDSOURCE_DEV,
180 FSIDSOURCE_FSID,
181 FSIDSOURCE_UUID,
182};
183extern enum fsid_source fsid_source(struct svc_fh *fhp);
184
185
186/* This might look a little large to "inline" but in all calls except
187 * one, 'vers' is constant so moste of the function disappears.
188 */
189static inline void mk_fsid(int vers, u32 *fsidv, dev_t dev, ino_t ino,
190 u32 fsid, unsigned char *uuid)
191{
192 u32 *up;
193 switch(vers) {
194 case FSID_DEV:
195 fsidv[0] = htonl((MAJOR(dev)<<16) |
196 MINOR(dev));
197 fsidv[1] = ino_t_to_u32(ino);
198 break;
199 case FSID_NUM:
200 fsidv[0] = fsid;
201 break;
202 case FSID_MAJOR_MINOR:
203 fsidv[0] = htonl(MAJOR(dev));
204 fsidv[1] = htonl(MINOR(dev));
205 fsidv[2] = ino_t_to_u32(ino);
206 break;
207
208 case FSID_ENCODE_DEV:
209 fsidv[0] = new_encode_dev(dev);
210 fsidv[1] = ino_t_to_u32(ino);
211 break;
212
213 case FSID_UUID4_INUM:
214 /* 4 byte fsid and inode number */
215 up = (u32*)uuid;
216 fsidv[0] = ino_t_to_u32(ino);
217 fsidv[1] = up[0] ^ up[1] ^ up[2] ^ up[3];
218 break;
219
220 case FSID_UUID8:
221 /* 8 byte fsid */
222 up = (u32*)uuid;
223 fsidv[0] = up[0] ^ up[2];
224 fsidv[1] = up[1] ^ up[3];
225 break;
226
227 case FSID_UUID16:
228 /* 16 byte fsid - NFSv3+ only */
229 memcpy(fsidv, uuid, 16);
230 break;
231
232 case FSID_UUID16_INUM:
233 /* 8 byte inode and 16 byte fsid */
234 *(u64*)fsidv = (u64)ino;
235 memcpy(fsidv+2, uuid, 16);
236 break;
237 default: BUG();
238 }
239}
240
241static inline int key_len(int type)
242{
243 switch(type) {
244 case FSID_DEV: return 8;
245 case FSID_NUM: return 4;
246 case FSID_MAJOR_MINOR: return 12;
247 case FSID_ENCODE_DEV: return 8;
248 case FSID_UUID4_INUM: return 8;
249 case FSID_UUID8: return 8;
250 case FSID_UUID16: return 16;
251 case FSID_UUID16_INUM: return 24;
252 default: return 0;
253 }
254}
255
256/*
257 * Shorthand for dprintk()'s
258 */
259extern char * SVCFH_fmt(struct svc_fh *fhp);
260
261/*
262 * Function prototypes
263 */
264__be32 fh_verify(struct svc_rqst *, struct svc_fh *, int, int);
265__be32 fh_compose(struct svc_fh *, struct svc_export *, struct dentry *, struct svc_fh *);
266__be32 fh_update(struct svc_fh *);
267void fh_put(struct svc_fh *);
268
269static __inline__ struct svc_fh *
270fh_copy(struct svc_fh *dst, struct svc_fh *src)
271{
272 WARN_ON(src->fh_dentry || src->fh_locked);
273
274 *dst = *src;
275 return dst;
276}
277
278static inline void
279fh_copy_shallow(struct knfsd_fh *dst, struct knfsd_fh *src)
280{
281 dst->fh_size = src->fh_size;
282 memcpy(&dst->fh_base, &src->fh_base, src->fh_size);
283}
284
285static __inline__ struct svc_fh *
286fh_init(struct svc_fh *fhp, int maxsize)
287{
288 memset(fhp, 0, sizeof(*fhp));
289 fhp->fh_maxsize = maxsize;
290 return fhp;
291}
292
293#ifdef CONFIG_NFSD_V3
294/*
295 * Fill in the pre_op attr for the wcc data
296 */
297static inline void
298fill_pre_wcc(struct svc_fh *fhp)
299{
300 struct inode *inode;
301
302 inode = fhp->fh_dentry->d_inode;
303 if (!fhp->fh_pre_saved) {
304 fhp->fh_pre_mtime = inode->i_mtime;
305 fhp->fh_pre_ctime = inode->i_ctime;
306 fhp->fh_pre_size = inode->i_size;
307 fhp->fh_pre_change = inode->i_version;
308 fhp->fh_pre_saved = 1;
309 }
310}
311
312extern void fill_post_wcc(struct svc_fh *);
313#else
314#define fill_pre_wcc(ignored)
315#define fill_post_wcc(notused)
316#endif /* CONFIG_NFSD_V3 */
317
318
319/*
320 * Lock a file handle/inode
321 * NOTE: both fh_lock and fh_unlock are done "by hand" in
322 * vfs.c:nfsd_rename as it needs to grab 2 i_mutex's at once
323 * so, any changes here should be reflected there.
324 */
325
326static inline void
327fh_lock_nested(struct svc_fh *fhp, unsigned int subclass)
328{
329 struct dentry *dentry = fhp->fh_dentry;
330 struct inode *inode;
331
332 dfprintk(FILEOP, "nfsd: fh_lock(%s) locked = %d\n",
333 SVCFH_fmt(fhp), fhp->fh_locked);
334
335 BUG_ON(!dentry);
336
337 if (fhp->fh_locked) {
338 printk(KERN_WARNING "fh_lock: %s/%s already locked!\n",
339 dentry->d_parent->d_name.name, dentry->d_name.name);
340 return;
341 }
342
343 inode = dentry->d_inode;
344 mutex_lock_nested(&inode->i_mutex, subclass);
345 fill_pre_wcc(fhp);
346 fhp->fh_locked = 1;
347}
348
349static inline void
350fh_lock(struct svc_fh *fhp)
351{
352 fh_lock_nested(fhp, I_MUTEX_NORMAL);
353}
354
355/*
356 * Unlock a file handle/inode
357 */
358static inline void
359fh_unlock(struct svc_fh *fhp)
360{
361 BUG_ON(!fhp->fh_dentry);
362
363 if (fhp->fh_locked) {
364 fill_post_wcc(fhp);
365 mutex_unlock(&fhp->fh_dentry->d_inode->i_mutex);
366 fhp->fh_locked = 0;
367 }
368}
369#endif /* __KERNEL__ */ 165#endif /* __KERNEL__ */
370 166
371 167
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h
deleted file mode 100644
index b38d11324189..000000000000
--- a/include/linux/nfsd/state.h
+++ /dev/null
@@ -1,404 +0,0 @@
1/*
2 * linux/include/nfsd/state.h
3 *
4 * Copyright (c) 2001 The Regents of the University of Michigan.
5 * All rights reserved.
6 *
7 * Kendrick Smith <kmsmith@umich.edu>
8 * Andy Adamson <andros@umich.edu>
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 *
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in the
18 * documentation and/or other materials provided with the distribution.
19 * 3. Neither the name of the University nor the names of its
20 * contributors may be used to endorse or promote products derived
21 * from this software without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
24 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 *
35 */
36
37#ifndef _NFSD4_STATE_H
38#define _NFSD4_STATE_H
39
40#include <linux/list.h>
41#include <linux/kref.h>
42#include <linux/sunrpc/clnt.h>
43
44typedef struct {
45 u32 cl_boot;
46 u32 cl_id;
47} clientid_t;
48
49typedef struct {
50 u32 so_boot;
51 u32 so_stateownerid;
52 u32 so_fileid;
53} stateid_opaque_t;
54
55typedef struct {
56 u32 si_generation;
57 stateid_opaque_t si_opaque;
58} stateid_t;
59#define si_boot si_opaque.so_boot
60#define si_stateownerid si_opaque.so_stateownerid
61#define si_fileid si_opaque.so_fileid
62
63struct nfsd4_cb_sequence {
64 /* args/res */
65 u32 cbs_minorversion;
66 struct nfs4_client *cbs_clp;
67};
68
69struct nfs4_delegation {
70 struct list_head dl_perfile;
71 struct list_head dl_perclnt;
72 struct list_head dl_recall_lru; /* delegation recalled */
73 atomic_t dl_count; /* ref count */
74 struct nfs4_client *dl_client;
75 struct nfs4_file *dl_file;
76 struct file_lock *dl_flock;
77 struct file *dl_vfs_file;
78 u32 dl_type;
79 time_t dl_time;
80/* For recall: */
81 u32 dl_ident;
82 stateid_t dl_stateid;
83 struct knfsd_fh dl_fh;
84 int dl_retries;
85};
86
87/* client delegation callback info */
88struct nfs4_cb_conn {
89 /* SETCLIENTID info */
90 struct sockaddr_storage cb_addr;
91 size_t cb_addrlen;
92 u32 cb_prog;
93 u32 cb_minorversion;
94 u32 cb_ident; /* minorversion 0 only */
95 /* RPC client info */
96 atomic_t cb_set; /* successful CB_NULL call */
97 struct rpc_clnt * cb_client;
98};
99
100/* Maximum number of slots per session. 160 is useful for long haul TCP */
101#define NFSD_MAX_SLOTS_PER_SESSION 160
102/* Maximum number of operations per session compound */
103#define NFSD_MAX_OPS_PER_COMPOUND 16
104/* Maximum session per slot cache size */
105#define NFSD_SLOT_CACHE_SIZE 1024
106/* Maximum number of NFSD_SLOT_CACHE_SIZE slots per session */
107#define NFSD_CACHE_SIZE_SLOTS_PER_SESSION 32
108#define NFSD_MAX_MEM_PER_SESSION \
109 (NFSD_CACHE_SIZE_SLOTS_PER_SESSION * NFSD_SLOT_CACHE_SIZE)
110
111struct nfsd4_slot {
112 bool sl_inuse;
113 bool sl_cachethis;
114 u16 sl_opcnt;
115 u32 sl_seqid;
116 __be32 sl_status;
117 u32 sl_datalen;
118 char sl_data[];
119};
120
121struct nfsd4_channel_attrs {
122 u32 headerpadsz;
123 u32 maxreq_sz;
124 u32 maxresp_sz;
125 u32 maxresp_cached;
126 u32 maxops;
127 u32 maxreqs;
128 u32 nr_rdma_attrs;
129 u32 rdma_attrs;
130};
131
132struct nfsd4_create_session {
133 clientid_t clientid;
134 struct nfs4_sessionid sessionid;
135 u32 seqid;
136 u32 flags;
137 struct nfsd4_channel_attrs fore_channel;
138 struct nfsd4_channel_attrs back_channel;
139 u32 callback_prog;
140 u32 uid;
141 u32 gid;
142};
143
144/* The single slot clientid cache structure */
145struct nfsd4_clid_slot {
146 u32 sl_seqid;
147 __be32 sl_status;
148 struct nfsd4_create_session sl_cr_ses;
149};
150
151struct nfsd4_session {
152 struct kref se_ref;
153 struct list_head se_hash; /* hash by sessionid */
154 struct list_head se_perclnt;
155 u32 se_flags;
156 struct nfs4_client *se_client; /* for expire_client */
157 struct nfs4_sessionid se_sessionid;
158 struct nfsd4_channel_attrs se_fchannel;
159 struct nfsd4_channel_attrs se_bchannel;
160 struct nfsd4_slot *se_slots[]; /* forward channel slots */
161};
162
163static inline void
164nfsd4_put_session(struct nfsd4_session *ses)
165{
166 extern void free_session(struct kref *kref);
167 kref_put(&ses->se_ref, free_session);
168}
169
170static inline void
171nfsd4_get_session(struct nfsd4_session *ses)
172{
173 kref_get(&ses->se_ref);
174}
175
176/* formatted contents of nfs4_sessionid */
177struct nfsd4_sessionid {
178 clientid_t clientid;
179 u32 sequence;
180 u32 reserved;
181};
182
183#define HEXDIR_LEN 33 /* hex version of 16 byte md5 of cl_name plus '\0' */
184
185/*
186 * struct nfs4_client - one per client. Clientids live here.
187 * o Each nfs4_client is hashed by clientid.
188 *
189 * o Each nfs4_clients is also hashed by name
190 * (the opaque quantity initially sent by the client to identify itself).
191 *
192 * o cl_perclient list is used to ensure no dangling stateowner references
193 * when we expire the nfs4_client
194 */
195struct nfs4_client {
196 struct list_head cl_idhash; /* hash by cl_clientid.id */
197 struct list_head cl_strhash; /* hash by cl_name */
198 struct list_head cl_openowners;
199 struct list_head cl_delegations;
200 struct list_head cl_lru; /* tail queue */
201 struct xdr_netobj cl_name; /* id generated by client */
202 char cl_recdir[HEXDIR_LEN]; /* recovery dir */
203 nfs4_verifier cl_verifier; /* generated by client */
204 time_t cl_time; /* time of last lease renewal */
205 struct sockaddr_storage cl_addr; /* client ipaddress */
206 u32 cl_flavor; /* setclientid pseudoflavor */
207 char *cl_principal; /* setclientid principal name */
208 struct svc_cred cl_cred; /* setclientid principal */
209 clientid_t cl_clientid; /* generated by server */
210 nfs4_verifier cl_confirm; /* generated by server */
211 struct nfs4_cb_conn cl_cb_conn; /* callback info */
212 atomic_t cl_count; /* ref count */
213 u32 cl_firststate; /* recovery dir creation */
214
215 /* for nfs41 */
216 struct list_head cl_sessions;
217 struct nfsd4_clid_slot cl_cs_slot; /* create_session slot */
218 u32 cl_exchange_flags;
219 struct nfs4_sessionid cl_sessionid;
220
221 /* for nfs41 callbacks */
222 /* We currently support a single back channel with a single slot */
223 unsigned long cl_cb_slot_busy;
224 u32 cl_cb_seq_nr;
225 struct svc_xprt *cl_cb_xprt; /* 4.1 callback transport */
226 struct rpc_wait_queue cl_cb_waitq; /* backchannel callers may */
227 /* wait here for slots */
228};
229
230/* struct nfs4_client_reset
231 * one per old client. Populates reset_str_hashtbl. Filled from conf_id_hashtbl
232 * upon lease reset, or from upcall to state_daemon (to read in state
233 * from non-volitile storage) upon reboot.
234 */
235struct nfs4_client_reclaim {
236 struct list_head cr_strhash; /* hash by cr_name */
237 char cr_recdir[HEXDIR_LEN]; /* recover dir */
238};
239
240static inline void
241update_stateid(stateid_t *stateid)
242{
243 stateid->si_generation++;
244}
245
246/* A reasonable value for REPLAY_ISIZE was estimated as follows:
247 * The OPEN response, typically the largest, requires
248 * 4(status) + 8(stateid) + 20(changeinfo) + 4(rflags) + 8(verifier) +
249 * 4(deleg. type) + 8(deleg. stateid) + 4(deleg. recall flag) +
250 * 20(deleg. space limit) + ~32(deleg. ace) = 112 bytes
251 */
252
253#define NFSD4_REPLAY_ISIZE 112
254
255/*
256 * Replay buffer, where the result of the last seqid-mutating operation
257 * is cached.
258 */
259struct nfs4_replay {
260 __be32 rp_status;
261 unsigned int rp_buflen;
262 char *rp_buf;
263 unsigned intrp_allocated;
264 struct knfsd_fh rp_openfh;
265 char rp_ibuf[NFSD4_REPLAY_ISIZE];
266};
267
268/*
269* nfs4_stateowner can either be an open_owner, or a lock_owner
270*
271* so_idhash: stateid_hashtbl[] for open owner, lockstateid_hashtbl[]
272* for lock_owner
273* so_strhash: ownerstr_hashtbl[] for open_owner, lock_ownerstr_hashtbl[]
274* for lock_owner
275* so_perclient: nfs4_client->cl_perclient entry - used when nfs4_client
276* struct is reaped.
277* so_perfilestate: heads the list of nfs4_stateid (either open or lock)
278* and is used to ensure no dangling nfs4_stateid references when we
279* release a stateowner.
280* so_perlockowner: (open) nfs4_stateid->st_perlockowner entry - used when
281* close is called to reap associated byte-range locks
282* so_close_lru: (open) stateowner is placed on this list instead of being
283* reaped (when so_perfilestate is empty) to hold the last close replay.
284* reaped by laundramat thread after lease period.
285*/
286struct nfs4_stateowner {
287 struct kref so_ref;
288 struct list_head so_idhash; /* hash by so_id */
289 struct list_head so_strhash; /* hash by op_name */
290 struct list_head so_perclient;
291 struct list_head so_stateids;
292 struct list_head so_perstateid; /* for lockowners only */
293 struct list_head so_close_lru; /* tail queue */
294 time_t so_time; /* time of placement on so_close_lru */
295 int so_is_open_owner; /* 1=openowner,0=lockowner */
296 u32 so_id;
297 struct nfs4_client * so_client;
298 /* after increment in ENCODE_SEQID_OP_TAIL, represents the next
299 * sequence id expected from the client: */
300 u32 so_seqid;
301 struct xdr_netobj so_owner; /* open owner name */
302 int so_confirmed; /* successful OPEN_CONFIRM? */
303 struct nfs4_replay so_replay;
304};
305
306/*
307* nfs4_file: a file opened by some number of (open) nfs4_stateowners.
308* o fi_perfile list is used to search for conflicting
309* share_acces, share_deny on the file.
310*/
311struct nfs4_file {
312 atomic_t fi_ref;
313 struct list_head fi_hash; /* hash by "struct inode *" */
314 struct list_head fi_stateids;
315 struct list_head fi_delegations;
316 struct inode *fi_inode;
317 u32 fi_id; /* used with stateowner->so_id
318 * for stateid_hashtbl hash */
319 bool fi_had_conflict;
320};
321
322/*
323* nfs4_stateid can either be an open stateid or (eventually) a lock stateid
324*
325* (open)nfs4_stateid: one per (open)nfs4_stateowner, nfs4_file
326*
327* st_hash: stateid_hashtbl[] entry or lockstateid_hashtbl entry
328* st_perfile: file_hashtbl[] entry.
329* st_perfile_state: nfs4_stateowner->so_perfilestate
330* st_perlockowner: (open stateid) list of lock nfs4_stateowners
331* st_access_bmap: used only for open stateid
332* st_deny_bmap: used only for open stateid
333* st_openstp: open stateid lock stateid was derived from
334*
335* XXX: open stateids and lock stateids have diverged sufficiently that
336* we should consider defining separate structs for the two cases.
337*/
338
339struct nfs4_stateid {
340 struct list_head st_hash;
341 struct list_head st_perfile;
342 struct list_head st_perstateowner;
343 struct list_head st_lockowners;
344 struct nfs4_stateowner * st_stateowner;
345 struct nfs4_file * st_file;
346 stateid_t st_stateid;
347 struct file * st_vfs_file;
348 unsigned long st_access_bmap;
349 unsigned long st_deny_bmap;
350 struct nfs4_stateid * st_openstp;
351};
352
353/* flags for preprocess_seqid_op() */
354#define HAS_SESSION 0x00000001
355#define CONFIRM 0x00000002
356#define OPEN_STATE 0x00000004
357#define LOCK_STATE 0x00000008
358#define RD_STATE 0x00000010
359#define WR_STATE 0x00000020
360#define CLOSE_STATE 0x00000040
361
362#define seqid_mutating_err(err) \
363 (((err) != nfserr_stale_clientid) && \
364 ((err) != nfserr_bad_seqid) && \
365 ((err) != nfserr_stale_stateid) && \
366 ((err) != nfserr_bad_stateid))
367
368struct nfsd4_compound_state;
369
370extern __be32 nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate,
371 stateid_t *stateid, int flags, struct file **filp);
372extern void nfs4_lock_state(void);
373extern void nfs4_unlock_state(void);
374extern int nfs4_in_grace(void);
375extern __be32 nfs4_check_open_reclaim(clientid_t *clid);
376extern void put_nfs4_client(struct nfs4_client *clp);
377extern void nfs4_free_stateowner(struct kref *kref);
378extern int set_callback_cred(void);
379extern void nfsd4_probe_callback(struct nfs4_client *clp);
380extern void nfsd4_cb_recall(struct nfs4_delegation *dp);
381extern void nfs4_put_delegation(struct nfs4_delegation *dp);
382extern __be32 nfs4_make_rec_clidname(char *clidname, struct xdr_netobj *clname);
383extern void nfsd4_init_recdir(char *recdir_name);
384extern int nfsd4_recdir_load(void);
385extern void nfsd4_shutdown_recdir(void);
386extern int nfs4_client_to_reclaim(const char *name);
387extern int nfs4_has_reclaimed_state(const char *name, bool use_exchange_id);
388extern void nfsd4_recdir_purge_old(void);
389extern int nfsd4_create_clid_dir(struct nfs4_client *clp);
390extern void nfsd4_remove_clid_dir(struct nfs4_client *clp);
391
392static inline void
393nfs4_put_stateowner(struct nfs4_stateowner *so)
394{
395 kref_put(&so->so_ref, nfs4_free_stateowner);
396}
397
398static inline void
399nfs4_get_stateowner(struct nfs4_stateowner *so)
400{
401 kref_get(&so->so_ref);
402}
403
404#endif /* NFSD4_STATE_H */
diff --git a/include/linux/nfsd/syscall.h b/include/linux/nfsd/syscall.h
index 7a3b565b898f..812bc1e160dc 100644
--- a/include/linux/nfsd/syscall.h
+++ b/include/linux/nfsd/syscall.h
@@ -9,14 +9,8 @@
9#ifndef NFSD_SYSCALL_H 9#ifndef NFSD_SYSCALL_H
10#define NFSD_SYSCALL_H 10#define NFSD_SYSCALL_H
11 11
12# include <linux/types.h> 12#include <linux/types.h>
13#ifdef __KERNEL__
14# include <linux/in.h>
15#endif
16#include <linux/posix_types.h>
17#include <linux/nfsd/const.h>
18#include <linux/nfsd/export.h> 13#include <linux/nfsd/export.h>
19#include <linux/nfsd/nfsfh.h>
20 14
21/* 15/*
22 * Version of the syscall interface 16 * Version of the syscall interface
diff --git a/include/linux/nfsd/xdr.h b/include/linux/nfsd/xdr.h
deleted file mode 100644
index a0132ef58f21..000000000000
--- a/include/linux/nfsd/xdr.h
+++ /dev/null
@@ -1,177 +0,0 @@
1/*
2 * linux/include/linux/nfsd/xdr.h
3 *
4 * XDR types for nfsd. This is mainly a typing exercise.
5 */
6
7#ifndef LINUX_NFSD_H
8#define LINUX_NFSD_H
9
10#include <linux/fs.h>
11#include <linux/vfs.h>
12#include <linux/nfs.h>
13
14struct nfsd_fhandle {
15 struct svc_fh fh;
16};
17
18struct nfsd_sattrargs {
19 struct svc_fh fh;
20 struct iattr attrs;
21};
22
23struct nfsd_diropargs {
24 struct svc_fh fh;
25 char * name;
26 unsigned int len;
27};
28
29struct nfsd_readargs {
30 struct svc_fh fh;
31 __u32 offset;
32 __u32 count;
33 int vlen;
34};
35
36struct nfsd_writeargs {
37 svc_fh fh;
38 __u32 offset;
39 int len;
40 int vlen;
41};
42
43struct nfsd_createargs {
44 struct svc_fh fh;
45 char * name;
46 unsigned int len;
47 struct iattr attrs;
48};
49
50struct nfsd_renameargs {
51 struct svc_fh ffh;
52 char * fname;
53 unsigned int flen;
54 struct svc_fh tfh;
55 char * tname;
56 unsigned int tlen;
57};
58
59struct nfsd_readlinkargs {
60 struct svc_fh fh;
61 char * buffer;
62};
63
64struct nfsd_linkargs {
65 struct svc_fh ffh;
66 struct svc_fh tfh;
67 char * tname;
68 unsigned int tlen;
69};
70
71struct nfsd_symlinkargs {
72 struct svc_fh ffh;
73 char * fname;
74 unsigned int flen;
75 char * tname;
76 unsigned int tlen;
77 struct iattr attrs;
78};
79
80struct nfsd_readdirargs {
81 struct svc_fh fh;
82 __u32 cookie;
83 __u32 count;
84 __be32 * buffer;
85};
86
87struct nfsd_attrstat {
88 struct svc_fh fh;
89 struct kstat stat;
90};
91
92struct nfsd_diropres {
93 struct svc_fh fh;
94 struct kstat stat;
95};
96
97struct nfsd_readlinkres {
98 int len;
99};
100
101struct nfsd_readres {
102 struct svc_fh fh;
103 unsigned long count;
104 struct kstat stat;
105};
106
107struct nfsd_readdirres {
108 int count;
109
110 struct readdir_cd common;
111 __be32 * buffer;
112 int buflen;
113 __be32 * offset;
114};
115
116struct nfsd_statfsres {
117 struct kstatfs stats;
118};
119
120/*
121 * Storage requirements for XDR arguments and results.
122 */
123union nfsd_xdrstore {
124 struct nfsd_sattrargs sattr;
125 struct nfsd_diropargs dirop;
126 struct nfsd_readargs read;
127 struct nfsd_writeargs write;
128 struct nfsd_createargs create;
129 struct nfsd_renameargs rename;
130 struct nfsd_linkargs link;
131 struct nfsd_symlinkargs symlink;
132 struct nfsd_readdirargs readdir;
133};
134
135#define NFS2_SVC_XDRSIZE sizeof(union nfsd_xdrstore)
136
137
138int nfssvc_decode_void(struct svc_rqst *, __be32 *, void *);
139int nfssvc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
140int nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *,
141 struct nfsd_sattrargs *);
142int nfssvc_decode_diropargs(struct svc_rqst *, __be32 *,
143 struct nfsd_diropargs *);
144int nfssvc_decode_readargs(struct svc_rqst *, __be32 *,
145 struct nfsd_readargs *);
146int nfssvc_decode_writeargs(struct svc_rqst *, __be32 *,
147 struct nfsd_writeargs *);
148int nfssvc_decode_createargs(struct svc_rqst *, __be32 *,
149 struct nfsd_createargs *);
150int nfssvc_decode_renameargs(struct svc_rqst *, __be32 *,
151 struct nfsd_renameargs *);
152int nfssvc_decode_readlinkargs(struct svc_rqst *, __be32 *,
153 struct nfsd_readlinkargs *);
154int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *,
155 struct nfsd_linkargs *);
156int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *,
157 struct nfsd_symlinkargs *);
158int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *,
159 struct nfsd_readdirargs *);
160int nfssvc_encode_void(struct svc_rqst *, __be32 *, void *);
161int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *, struct nfsd_attrstat *);
162int nfssvc_encode_diropres(struct svc_rqst *, __be32 *, struct nfsd_diropres *);
163int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *, struct nfsd_readlinkres *);
164int nfssvc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd_readres *);
165int nfssvc_encode_statfsres(struct svc_rqst *, __be32 *, struct nfsd_statfsres *);
166int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirres *);
167
168int nfssvc_encode_entry(void *, const char *name,
169 int namlen, loff_t offset, u64 ino, unsigned int);
170
171int nfssvc_release_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
172
173/* Helper functions for NFSv2 ACL code */
174__be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp);
175__be32 *nfs2svc_decode_fh(__be32 *p, struct svc_fh *fhp);
176
177#endif /* LINUX_NFSD_H */
diff --git a/include/linux/nfsd/xdr3.h b/include/linux/nfsd/xdr3.h
deleted file mode 100644
index 421eddd65a25..000000000000
--- a/include/linux/nfsd/xdr3.h
+++ /dev/null
@@ -1,346 +0,0 @@
1/*
2 * linux/include/linux/nfsd/xdr3.h
3 *
4 * XDR types for NFSv3 in nfsd.
5 *
6 * Copyright (C) 1996-1998, Olaf Kirch <okir@monad.swb.de>
7 */
8
9#ifndef _LINUX_NFSD_XDR3_H
10#define _LINUX_NFSD_XDR3_H
11
12#include <linux/nfsd/xdr.h>
13
14struct nfsd3_sattrargs {
15 struct svc_fh fh;
16 struct iattr attrs;
17 int check_guard;
18 time_t guardtime;
19};
20
21struct nfsd3_diropargs {
22 struct svc_fh fh;
23 char * name;
24 unsigned int len;
25};
26
27struct nfsd3_accessargs {
28 struct svc_fh fh;
29 unsigned int access;
30};
31
32struct nfsd3_readargs {
33 struct svc_fh fh;
34 __u64 offset;
35 __u32 count;
36 int vlen;
37};
38
39struct nfsd3_writeargs {
40 svc_fh fh;
41 __u64 offset;
42 __u32 count;
43 int stable;
44 __u32 len;
45 int vlen;
46};
47
48struct nfsd3_createargs {
49 struct svc_fh fh;
50 char * name;
51 unsigned int len;
52 int createmode;
53 struct iattr attrs;
54 __be32 * verf;
55};
56
57struct nfsd3_mknodargs {
58 struct svc_fh fh;
59 char * name;
60 unsigned int len;
61 __u32 ftype;
62 __u32 major, minor;
63 struct iattr attrs;
64};
65
66struct nfsd3_renameargs {
67 struct svc_fh ffh;
68 char * fname;
69 unsigned int flen;
70 struct svc_fh tfh;
71 char * tname;
72 unsigned int tlen;
73};
74
75struct nfsd3_readlinkargs {
76 struct svc_fh fh;
77 char * buffer;
78};
79
80struct nfsd3_linkargs {
81 struct svc_fh ffh;
82 struct svc_fh tfh;
83 char * tname;
84 unsigned int tlen;
85};
86
87struct nfsd3_symlinkargs {
88 struct svc_fh ffh;
89 char * fname;
90 unsigned int flen;
91 char * tname;
92 unsigned int tlen;
93 struct iattr attrs;
94};
95
96struct nfsd3_readdirargs {
97 struct svc_fh fh;
98 __u64 cookie;
99 __u32 dircount;
100 __u32 count;
101 __be32 * verf;
102 __be32 * buffer;
103};
104
105struct nfsd3_commitargs {
106 struct svc_fh fh;
107 __u64 offset;
108 __u32 count;
109};
110
111struct nfsd3_getaclargs {
112 struct svc_fh fh;
113 int mask;
114};
115
116struct posix_acl;
117struct nfsd3_setaclargs {
118 struct svc_fh fh;
119 int mask;
120 struct posix_acl *acl_access;
121 struct posix_acl *acl_default;
122};
123
124struct nfsd3_attrstat {
125 __be32 status;
126 struct svc_fh fh;
127 struct kstat stat;
128};
129
130/* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */
131struct nfsd3_diropres {
132 __be32 status;
133 struct svc_fh dirfh;
134 struct svc_fh fh;
135};
136
137struct nfsd3_accessres {
138 __be32 status;
139 struct svc_fh fh;
140 __u32 access;
141};
142
143struct nfsd3_readlinkres {
144 __be32 status;
145 struct svc_fh fh;
146 __u32 len;
147};
148
149struct nfsd3_readres {
150 __be32 status;
151 struct svc_fh fh;
152 unsigned long count;
153 int eof;
154};
155
156struct nfsd3_writeres {
157 __be32 status;
158 struct svc_fh fh;
159 unsigned long count;
160 int committed;
161};
162
163struct nfsd3_renameres {
164 __be32 status;
165 struct svc_fh ffh;
166 struct svc_fh tfh;
167};
168
169struct nfsd3_linkres {
170 __be32 status;
171 struct svc_fh tfh;
172 struct svc_fh fh;
173};
174
175struct nfsd3_readdirres {
176 __be32 status;
177 struct svc_fh fh;
178 int count;
179 __be32 verf[2];
180
181 struct readdir_cd common;
182 __be32 * buffer;
183 int buflen;
184 __be32 * offset;
185 __be32 * offset1;
186 struct svc_rqst * rqstp;
187
188};
189
190struct nfsd3_fsstatres {
191 __be32 status;
192 struct kstatfs stats;
193 __u32 invarsec;
194};
195
196struct nfsd3_fsinfores {
197 __be32 status;
198 __u32 f_rtmax;
199 __u32 f_rtpref;
200 __u32 f_rtmult;
201 __u32 f_wtmax;
202 __u32 f_wtpref;
203 __u32 f_wtmult;
204 __u32 f_dtpref;
205 __u64 f_maxfilesize;
206 __u32 f_properties;
207};
208
209struct nfsd3_pathconfres {
210 __be32 status;
211 __u32 p_link_max;
212 __u32 p_name_max;
213 __u32 p_no_trunc;
214 __u32 p_chown_restricted;
215 __u32 p_case_insensitive;
216 __u32 p_case_preserving;
217};
218
219struct nfsd3_commitres {
220 __be32 status;
221 struct svc_fh fh;
222};
223
224struct nfsd3_getaclres {
225 __be32 status;
226 struct svc_fh fh;
227 int mask;
228 struct posix_acl *acl_access;
229 struct posix_acl *acl_default;
230};
231
232/* dummy type for release */
233struct nfsd3_fhandle_pair {
234 __u32 dummy;
235 struct svc_fh fh1;
236 struct svc_fh fh2;
237};
238
239/*
240 * Storage requirements for XDR arguments and results.
241 */
242union nfsd3_xdrstore {
243 struct nfsd3_sattrargs sattrargs;
244 struct nfsd3_diropargs diropargs;
245 struct nfsd3_readargs readargs;
246 struct nfsd3_writeargs writeargs;
247 struct nfsd3_createargs createargs;
248 struct nfsd3_renameargs renameargs;
249 struct nfsd3_linkargs linkargs;
250 struct nfsd3_symlinkargs symlinkargs;
251 struct nfsd3_readdirargs readdirargs;
252 struct nfsd3_diropres diropres;
253 struct nfsd3_accessres accessres;
254 struct nfsd3_readlinkres readlinkres;
255 struct nfsd3_readres readres;
256 struct nfsd3_writeres writeres;
257 struct nfsd3_renameres renameres;
258 struct nfsd3_linkres linkres;
259 struct nfsd3_readdirres readdirres;
260 struct nfsd3_fsstatres fsstatres;
261 struct nfsd3_fsinfores fsinfores;
262 struct nfsd3_pathconfres pathconfres;
263 struct nfsd3_commitres commitres;
264 struct nfsd3_getaclres getaclres;
265};
266
267#define NFS3_SVC_XDRSIZE sizeof(union nfsd3_xdrstore)
268
269int nfs3svc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
270int nfs3svc_decode_sattrargs(struct svc_rqst *, __be32 *,
271 struct nfsd3_sattrargs *);
272int nfs3svc_decode_diropargs(struct svc_rqst *, __be32 *,
273 struct nfsd3_diropargs *);
274int nfs3svc_decode_accessargs(struct svc_rqst *, __be32 *,
275 struct nfsd3_accessargs *);
276int nfs3svc_decode_readargs(struct svc_rqst *, __be32 *,
277 struct nfsd3_readargs *);
278int nfs3svc_decode_writeargs(struct svc_rqst *, __be32 *,
279 struct nfsd3_writeargs *);
280int nfs3svc_decode_createargs(struct svc_rqst *, __be32 *,
281 struct nfsd3_createargs *);
282int nfs3svc_decode_mkdirargs(struct svc_rqst *, __be32 *,
283 struct nfsd3_createargs *);
284int nfs3svc_decode_mknodargs(struct svc_rqst *, __be32 *,
285 struct nfsd3_mknodargs *);
286int nfs3svc_decode_renameargs(struct svc_rqst *, __be32 *,
287 struct nfsd3_renameargs *);
288int nfs3svc_decode_readlinkargs(struct svc_rqst *, __be32 *,
289 struct nfsd3_readlinkargs *);
290int nfs3svc_decode_linkargs(struct svc_rqst *, __be32 *,
291 struct nfsd3_linkargs *);
292int nfs3svc_decode_symlinkargs(struct svc_rqst *, __be32 *,
293 struct nfsd3_symlinkargs *);
294int nfs3svc_decode_readdirargs(struct svc_rqst *, __be32 *,
295 struct nfsd3_readdirargs *);
296int nfs3svc_decode_readdirplusargs(struct svc_rqst *, __be32 *,
297 struct nfsd3_readdirargs *);
298int nfs3svc_decode_commitargs(struct svc_rqst *, __be32 *,
299 struct nfsd3_commitargs *);
300int nfs3svc_encode_voidres(struct svc_rqst *, __be32 *, void *);
301int nfs3svc_encode_attrstat(struct svc_rqst *, __be32 *,
302 struct nfsd3_attrstat *);
303int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *,
304 struct nfsd3_attrstat *);
305int nfs3svc_encode_diropres(struct svc_rqst *, __be32 *,
306 struct nfsd3_diropres *);
307int nfs3svc_encode_accessres(struct svc_rqst *, __be32 *,
308 struct nfsd3_accessres *);
309int nfs3svc_encode_readlinkres(struct svc_rqst *, __be32 *,
310 struct nfsd3_readlinkres *);
311int nfs3svc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd3_readres *);
312int nfs3svc_encode_writeres(struct svc_rqst *, __be32 *, struct nfsd3_writeres *);
313int nfs3svc_encode_createres(struct svc_rqst *, __be32 *,
314 struct nfsd3_diropres *);
315int nfs3svc_encode_renameres(struct svc_rqst *, __be32 *,
316 struct nfsd3_renameres *);
317int nfs3svc_encode_linkres(struct svc_rqst *, __be32 *,
318 struct nfsd3_linkres *);
319int nfs3svc_encode_readdirres(struct svc_rqst *, __be32 *,
320 struct nfsd3_readdirres *);
321int nfs3svc_encode_fsstatres(struct svc_rqst *, __be32 *,
322 struct nfsd3_fsstatres *);
323int nfs3svc_encode_fsinfores(struct svc_rqst *, __be32 *,
324 struct nfsd3_fsinfores *);
325int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *,
326 struct nfsd3_pathconfres *);
327int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *,
328 struct nfsd3_commitres *);
329
330int nfs3svc_release_fhandle(struct svc_rqst *, __be32 *,
331 struct nfsd3_attrstat *);
332int nfs3svc_release_fhandle2(struct svc_rqst *, __be32 *,
333 struct nfsd3_fhandle_pair *);
334int nfs3svc_encode_entry(void *, const char *name,
335 int namlen, loff_t offset, u64 ino,
336 unsigned int);
337int nfs3svc_encode_entry_plus(void *, const char *name,
338 int namlen, loff_t offset, u64 ino,
339 unsigned int);
340/* Helper functions for NFSv3 ACL code */
341__be32 *nfs3svc_encode_post_op_attr(struct svc_rqst *rqstp, __be32 *p,
342 struct svc_fh *fhp);
343__be32 *nfs3svc_decode_fh(__be32 *p, struct svc_fh *fhp);
344
345
346#endif /* _LINUX_NFSD_XDR3_H */
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h
deleted file mode 100644
index 73164c2b3d29..000000000000
--- a/include/linux/nfsd/xdr4.h
+++ /dev/null
@@ -1,563 +0,0 @@
1/*
2 * include/linux/nfsd/xdr4.h
3 *
4 * Server-side types for NFSv4.
5 *
6 * Copyright (c) 2002 The Regents of the University of Michigan.
7 * All rights reserved.
8 *
9 * Kendrick Smith <kmsmith@umich.edu>
10 * Andy Adamson <andros@umich.edu>
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 *
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution.
21 * 3. Neither the name of the University nor the names of its
22 * contributors may be used to endorse or promote products derived
23 * from this software without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
26 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
27 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
32 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 *
37 */
38
39#ifndef _LINUX_NFSD_XDR4_H
40#define _LINUX_NFSD_XDR4_H
41
42#include <linux/nfs4.h>
43
44#define NFSD4_MAX_TAGLEN 128
45#define XDR_LEN(n) (((n) + 3) & ~3)
46
47struct nfsd4_compound_state {
48 struct svc_fh current_fh;
49 struct svc_fh save_fh;
50 struct nfs4_stateowner *replay_owner;
51 /* For sessions DRC */
52 struct nfsd4_session *session;
53 struct nfsd4_slot *slot;
54 __be32 *datap;
55 size_t iovlen;
56 u32 minorversion;
57 u32 status;
58};
59
60static inline bool nfsd4_has_session(struct nfsd4_compound_state *cs)
61{
62 return cs->slot != NULL;
63}
64
65struct nfsd4_change_info {
66 u32 atomic;
67 bool change_supported;
68 u32 before_ctime_sec;
69 u32 before_ctime_nsec;
70 u64 before_change;
71 u32 after_ctime_sec;
72 u32 after_ctime_nsec;
73 u64 after_change;
74};
75
76struct nfsd4_access {
77 u32 ac_req_access; /* request */
78 u32 ac_supported; /* response */
79 u32 ac_resp_access; /* response */
80};
81
82struct nfsd4_close {
83 u32 cl_seqid; /* request */
84 stateid_t cl_stateid; /* request+response */
85 struct nfs4_stateowner * cl_stateowner; /* response */
86};
87
88struct nfsd4_commit {
89 u64 co_offset; /* request */
90 u32 co_count; /* request */
91 nfs4_verifier co_verf; /* response */
92};
93
94struct nfsd4_create {
95 u32 cr_namelen; /* request */
96 char * cr_name; /* request */
97 u32 cr_type; /* request */
98 union { /* request */
99 struct {
100 u32 namelen;
101 char *name;
102 } link; /* NF4LNK */
103 struct {
104 u32 specdata1;
105 u32 specdata2;
106 } dev; /* NF4BLK, NF4CHR */
107 } u;
108 u32 cr_bmval[3]; /* request */
109 struct iattr cr_iattr; /* request */
110 struct nfsd4_change_info cr_cinfo; /* response */
111 struct nfs4_acl *cr_acl;
112};
113#define cr_linklen u.link.namelen
114#define cr_linkname u.link.name
115#define cr_specdata1 u.dev.specdata1
116#define cr_specdata2 u.dev.specdata2
117
118struct nfsd4_delegreturn {
119 stateid_t dr_stateid;
120};
121
122struct nfsd4_getattr {
123 u32 ga_bmval[3]; /* request */
124 struct svc_fh *ga_fhp; /* response */
125};
126
127struct nfsd4_link {
128 u32 li_namelen; /* request */
129 char * li_name; /* request */
130 struct nfsd4_change_info li_cinfo; /* response */
131};
132
133struct nfsd4_lock_denied {
134 clientid_t ld_clientid;
135 struct nfs4_stateowner *ld_sop;
136 u64 ld_start;
137 u64 ld_length;
138 u32 ld_type;
139};
140
141struct nfsd4_lock {
142 /* request */
143 u32 lk_type;
144 u32 lk_reclaim; /* boolean */
145 u64 lk_offset;
146 u64 lk_length;
147 u32 lk_is_new;
148 union {
149 struct {
150 u32 open_seqid;
151 stateid_t open_stateid;
152 u32 lock_seqid;
153 clientid_t clientid;
154 struct xdr_netobj owner;
155 } new;
156 struct {
157 stateid_t lock_stateid;
158 u32 lock_seqid;
159 } old;
160 } v;
161
162 /* response */
163 union {
164 struct {
165 stateid_t stateid;
166 } ok;
167 struct nfsd4_lock_denied denied;
168 } u;
169 /* The lk_replay_owner is the open owner in the open_to_lock_owner
170 * case and the lock owner otherwise: */
171 struct nfs4_stateowner *lk_replay_owner;
172};
173#define lk_new_open_seqid v.new.open_seqid
174#define lk_new_open_stateid v.new.open_stateid
175#define lk_new_lock_seqid v.new.lock_seqid
176#define lk_new_clientid v.new.clientid
177#define lk_new_owner v.new.owner
178#define lk_old_lock_stateid v.old.lock_stateid
179#define lk_old_lock_seqid v.old.lock_seqid
180
181#define lk_rflags u.ok.rflags
182#define lk_resp_stateid u.ok.stateid
183#define lk_denied u.denied
184
185
186struct nfsd4_lockt {
187 u32 lt_type;
188 clientid_t lt_clientid;
189 struct xdr_netobj lt_owner;
190 u64 lt_offset;
191 u64 lt_length;
192 struct nfs4_stateowner * lt_stateowner;
193 struct nfsd4_lock_denied lt_denied;
194};
195
196
197struct nfsd4_locku {
198 u32 lu_type;
199 u32 lu_seqid;
200 stateid_t lu_stateid;
201 u64 lu_offset;
202 u64 lu_length;
203 struct nfs4_stateowner *lu_stateowner;
204};
205
206
207struct nfsd4_lookup {
208 u32 lo_len; /* request */
209 char * lo_name; /* request */
210};
211
212struct nfsd4_putfh {
213 u32 pf_fhlen; /* request */
214 char *pf_fhval; /* request */
215};
216
217struct nfsd4_open {
218 u32 op_claim_type; /* request */
219 struct xdr_netobj op_fname; /* request - everything but CLAIM_PREV */
220 u32 op_delegate_type; /* request - CLAIM_PREV only */
221 stateid_t op_delegate_stateid; /* request - response */
222 u32 op_create; /* request */
223 u32 op_createmode; /* request */
224 u32 op_bmval[3]; /* request */
225 struct iattr iattr; /* UNCHECKED4, GUARDED4, EXCLUSIVE4_1 */
226 nfs4_verifier verf; /* EXCLUSIVE4 */
227 clientid_t op_clientid; /* request */
228 struct xdr_netobj op_owner; /* request */
229 u32 op_seqid; /* request */
230 u32 op_share_access; /* request */
231 u32 op_share_deny; /* request */
232 stateid_t op_stateid; /* response */
233 u32 op_recall; /* recall */
234 struct nfsd4_change_info op_cinfo; /* response */
235 u32 op_rflags; /* response */
236 int op_truncate; /* used during processing */
237 struct nfs4_stateowner *op_stateowner; /* used during processing */
238 struct nfs4_acl *op_acl;
239};
240#define op_iattr iattr
241#define op_verf verf
242
243struct nfsd4_open_confirm {
244 stateid_t oc_req_stateid /* request */;
245 u32 oc_seqid /* request */;
246 stateid_t oc_resp_stateid /* response */;
247 struct nfs4_stateowner * oc_stateowner; /* response */
248};
249
250struct nfsd4_open_downgrade {
251 stateid_t od_stateid;
252 u32 od_seqid;
253 u32 od_share_access;
254 u32 od_share_deny;
255 struct nfs4_stateowner *od_stateowner;
256};
257
258
259struct nfsd4_read {
260 stateid_t rd_stateid; /* request */
261 u64 rd_offset; /* request */
262 u32 rd_length; /* request */
263 int rd_vlen;
264 struct file *rd_filp;
265
266 struct svc_rqst *rd_rqstp; /* response */
267 struct svc_fh * rd_fhp; /* response */
268};
269
270struct nfsd4_readdir {
271 u64 rd_cookie; /* request */
272 nfs4_verifier rd_verf; /* request */
273 u32 rd_dircount; /* request */
274 u32 rd_maxcount; /* request */
275 u32 rd_bmval[3]; /* request */
276 struct svc_rqst *rd_rqstp; /* response */
277 struct svc_fh * rd_fhp; /* response */
278
279 struct readdir_cd common;
280 __be32 * buffer;
281 int buflen;
282 __be32 * offset;
283};
284
285struct nfsd4_release_lockowner {
286 clientid_t rl_clientid;
287 struct xdr_netobj rl_owner;
288};
289struct nfsd4_readlink {
290 struct svc_rqst *rl_rqstp; /* request */
291 struct svc_fh * rl_fhp; /* request */
292};
293
294struct nfsd4_remove {
295 u32 rm_namelen; /* request */
296 char * rm_name; /* request */
297 struct nfsd4_change_info rm_cinfo; /* response */
298};
299
300struct nfsd4_rename {
301 u32 rn_snamelen; /* request */
302 char * rn_sname; /* request */
303 u32 rn_tnamelen; /* request */
304 char * rn_tname; /* request */
305 struct nfsd4_change_info rn_sinfo; /* response */
306 struct nfsd4_change_info rn_tinfo; /* response */
307};
308
309struct nfsd4_secinfo {
310 u32 si_namelen; /* request */
311 char *si_name; /* request */
312 struct svc_export *si_exp; /* response */
313};
314
315struct nfsd4_setattr {
316 stateid_t sa_stateid; /* request */
317 u32 sa_bmval[3]; /* request */
318 struct iattr sa_iattr; /* request */
319 struct nfs4_acl *sa_acl;
320};
321
322struct nfsd4_setclientid {
323 nfs4_verifier se_verf; /* request */
324 u32 se_namelen; /* request */
325 char * se_name; /* request */
326 u32 se_callback_prog; /* request */
327 u32 se_callback_netid_len; /* request */
328 char * se_callback_netid_val; /* request */
329 u32 se_callback_addr_len; /* request */
330 char * se_callback_addr_val; /* request */
331 u32 se_callback_ident; /* request */
332 clientid_t se_clientid; /* response */
333 nfs4_verifier se_confirm; /* response */
334};
335
336struct nfsd4_setclientid_confirm {
337 clientid_t sc_clientid;
338 nfs4_verifier sc_confirm;
339};
340
341/* also used for NVERIFY */
342struct nfsd4_verify {
343 u32 ve_bmval[3]; /* request */
344 u32 ve_attrlen; /* request */
345 char * ve_attrval; /* request */
346};
347
348struct nfsd4_write {
349 stateid_t wr_stateid; /* request */
350 u64 wr_offset; /* request */
351 u32 wr_stable_how; /* request */
352 u32 wr_buflen; /* request */
353 int wr_vlen;
354
355 u32 wr_bytes_written; /* response */
356 u32 wr_how_written; /* response */
357 nfs4_verifier wr_verifier; /* response */
358};
359
360struct nfsd4_exchange_id {
361 nfs4_verifier verifier;
362 struct xdr_netobj clname;
363 u32 flags;
364 clientid_t clientid;
365 u32 seqid;
366 int spa_how;
367};
368
369struct nfsd4_sequence {
370 struct nfs4_sessionid sessionid; /* request/response */
371 u32 seqid; /* request/response */
372 u32 slotid; /* request/response */
373 u32 maxslots; /* request/response */
374 u32 cachethis; /* request */
375#if 0
376 u32 target_maxslots; /* response */
377 u32 status_flags; /* response */
378#endif /* not yet */
379};
380
381struct nfsd4_destroy_session {
382 struct nfs4_sessionid sessionid;
383};
384
385struct nfsd4_op {
386 int opnum;
387 __be32 status;
388 union {
389 struct nfsd4_access access;
390 struct nfsd4_close close;
391 struct nfsd4_commit commit;
392 struct nfsd4_create create;
393 struct nfsd4_delegreturn delegreturn;
394 struct nfsd4_getattr getattr;
395 struct svc_fh * getfh;
396 struct nfsd4_link link;
397 struct nfsd4_lock lock;
398 struct nfsd4_lockt lockt;
399 struct nfsd4_locku locku;
400 struct nfsd4_lookup lookup;
401 struct nfsd4_verify nverify;
402 struct nfsd4_open open;
403 struct nfsd4_open_confirm open_confirm;
404 struct nfsd4_open_downgrade open_downgrade;
405 struct nfsd4_putfh putfh;
406 struct nfsd4_read read;
407 struct nfsd4_readdir readdir;
408 struct nfsd4_readlink readlink;
409 struct nfsd4_remove remove;
410 struct nfsd4_rename rename;
411 clientid_t renew;
412 struct nfsd4_secinfo secinfo;
413 struct nfsd4_setattr setattr;
414 struct nfsd4_setclientid setclientid;
415 struct nfsd4_setclientid_confirm setclientid_confirm;
416 struct nfsd4_verify verify;
417 struct nfsd4_write write;
418 struct nfsd4_release_lockowner release_lockowner;
419
420 /* NFSv4.1 */
421 struct nfsd4_exchange_id exchange_id;
422 struct nfsd4_create_session create_session;
423 struct nfsd4_destroy_session destroy_session;
424 struct nfsd4_sequence sequence;
425 } u;
426 struct nfs4_replay * replay;
427};
428
429struct nfsd4_compoundargs {
430 /* scratch variables for XDR decode */
431 __be32 * p;
432 __be32 * end;
433 struct page ** pagelist;
434 int pagelen;
435 __be32 tmp[8];
436 __be32 * tmpp;
437 struct tmpbuf {
438 struct tmpbuf *next;
439 void (*release)(const void *);
440 void *buf;
441 } *to_free;
442
443 struct svc_rqst *rqstp;
444
445 u32 taglen;
446 char * tag;
447 u32 minorversion;
448 u32 opcnt;
449 struct nfsd4_op *ops;
450 struct nfsd4_op iops[8];
451};
452
453struct nfsd4_compoundres {
454 /* scratch variables for XDR encode */
455 __be32 * p;
456 __be32 * end;
457 struct xdr_buf * xbuf;
458 struct svc_rqst * rqstp;
459
460 u32 taglen;
461 char * tag;
462 u32 opcnt;
463 __be32 * tagp; /* tag, opcount encode location */
464 struct nfsd4_compound_state cstate;
465};
466
467static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp)
468{
469 struct nfsd4_compoundargs *args = resp->rqstp->rq_argp;
470 return resp->opcnt == 1 && args->ops[0].opnum == OP_SEQUENCE;
471}
472
473static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp)
474{
475 return !resp->cstate.slot->sl_cachethis || nfsd4_is_solo_sequence(resp);
476}
477
478#define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs)
479
480static inline void
481set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp)
482{
483 BUG_ON(!fhp->fh_pre_saved || !fhp->fh_post_saved);
484 cinfo->atomic = 1;
485 cinfo->change_supported = IS_I_VERSION(fhp->fh_dentry->d_inode);
486 if (cinfo->change_supported) {
487 cinfo->before_change = fhp->fh_pre_change;
488 cinfo->after_change = fhp->fh_post_change;
489 } else {
490 cinfo->before_ctime_sec = fhp->fh_pre_ctime.tv_sec;
491 cinfo->before_ctime_nsec = fhp->fh_pre_ctime.tv_nsec;
492 cinfo->after_ctime_sec = fhp->fh_post_attr.ctime.tv_sec;
493 cinfo->after_ctime_nsec = fhp->fh_post_attr.ctime.tv_nsec;
494 }
495}
496
497int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *, void *);
498int nfs4svc_decode_compoundargs(struct svc_rqst *, __be32 *,
499 struct nfsd4_compoundargs *);
500int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *,
501 struct nfsd4_compoundres *);
502void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *);
503void nfsd4_encode_replay(struct nfsd4_compoundres *resp, struct nfsd4_op *op);
504__be32 nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
505 struct dentry *dentry, __be32 *buffer, int *countp,
506 u32 *bmval, struct svc_rqst *, int ignore_crossmnt);
507extern __be32 nfsd4_setclientid(struct svc_rqst *rqstp,
508 struct nfsd4_compound_state *,
509 struct nfsd4_setclientid *setclid);
510extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
511 struct nfsd4_compound_state *,
512 struct nfsd4_setclientid_confirm *setclientid_confirm);
513extern void nfsd4_store_cache_entry(struct nfsd4_compoundres *resp);
514extern __be32 nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp,
515 struct nfsd4_sequence *seq);
516extern __be32 nfsd4_exchange_id(struct svc_rqst *rqstp,
517 struct nfsd4_compound_state *,
518struct nfsd4_exchange_id *);
519 extern __be32 nfsd4_create_session(struct svc_rqst *,
520 struct nfsd4_compound_state *,
521 struct nfsd4_create_session *);
522extern __be32 nfsd4_sequence(struct svc_rqst *,
523 struct nfsd4_compound_state *,
524 struct nfsd4_sequence *);
525extern __be32 nfsd4_destroy_session(struct svc_rqst *,
526 struct nfsd4_compound_state *,
527 struct nfsd4_destroy_session *);
528extern __be32 nfsd4_process_open1(struct nfsd4_compound_state *,
529 struct nfsd4_open *open);
530extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp,
531 struct svc_fh *current_fh, struct nfsd4_open *open);
532extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp,
533 struct nfsd4_compound_state *, struct nfsd4_open_confirm *oc);
534extern __be32 nfsd4_close(struct svc_rqst *rqstp,
535 struct nfsd4_compound_state *,
536 struct nfsd4_close *close);
537extern __be32 nfsd4_open_downgrade(struct svc_rqst *rqstp,
538 struct nfsd4_compound_state *,
539 struct nfsd4_open_downgrade *od);
540extern __be32 nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *,
541 struct nfsd4_lock *lock);
542extern __be32 nfsd4_lockt(struct svc_rqst *rqstp,
543 struct nfsd4_compound_state *,
544 struct nfsd4_lockt *lockt);
545extern __be32 nfsd4_locku(struct svc_rqst *rqstp,
546 struct nfsd4_compound_state *,
547 struct nfsd4_locku *locku);
548extern __be32
549nfsd4_release_lockowner(struct svc_rqst *rqstp,
550 struct nfsd4_compound_state *,
551 struct nfsd4_release_lockowner *rlockowner);
552extern void nfsd4_release_compoundargs(struct nfsd4_compoundargs *);
553extern __be32 nfsd4_delegreturn(struct svc_rqst *rqstp,
554 struct nfsd4_compound_state *, struct nfsd4_delegreturn *dr);
555extern __be32 nfsd4_renew(struct svc_rqst *rqstp,
556 struct nfsd4_compound_state *, clientid_t *clid);
557#endif
558
559/*
560 * Local variables:
561 * c-basic-offset: 8
562 * End:
563 */
diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h
index ce520402e840..640702e97457 100644
--- a/include/linux/nilfs2_fs.h
+++ b/include/linux/nilfs2_fs.h
@@ -151,6 +151,9 @@ struct nilfs_super_root {
151#define NILFS_MOUNT_BARRIER 0x1000 /* Use block barriers */ 151#define NILFS_MOUNT_BARRIER 0x1000 /* Use block barriers */
152#define NILFS_MOUNT_STRICT_ORDER 0x2000 /* Apply strict in-order 152#define NILFS_MOUNT_STRICT_ORDER 0x2000 /* Apply strict in-order
153 semantics also for data */ 153 semantics also for data */
154#define NILFS_MOUNT_NORECOVERY 0x4000 /* Disable write access during
155 mount-time recovery */
156#define NILFS_MOUNT_DISCARD 0x8000 /* Issue DISCARD requests */
154 157
155 158
156/** 159/**
@@ -403,6 +406,28 @@ struct nilfs_segment_summary {
403#define NILFS_SS_GC 0x0010 /* segment written for cleaner operation */ 406#define NILFS_SS_GC 0x0010 /* segment written for cleaner operation */
404 407
405/** 408/**
409 * struct nilfs_btree_node - B-tree node
410 * @bn_flags: flags
411 * @bn_level: level
412 * @bn_nchildren: number of children
413 * @bn_pad: padding
414 */
415struct nilfs_btree_node {
416 __u8 bn_flags;
417 __u8 bn_level;
418 __le16 bn_nchildren;
419 __le32 bn_pad;
420};
421
422/* flags */
423#define NILFS_BTREE_NODE_ROOT 0x01
424
425/* level */
426#define NILFS_BTREE_LEVEL_DATA 0
427#define NILFS_BTREE_LEVEL_NODE_MIN (NILFS_BTREE_LEVEL_DATA + 1)
428#define NILFS_BTREE_LEVEL_MAX 14
429
430/**
406 * struct nilfs_palloc_group_desc - block group descriptor 431 * struct nilfs_palloc_group_desc - block group descriptor
407 * @pg_nfrees: number of free entries in block group 432 * @pg_nfrees: number of free entries in block group
408 */ 433 */
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h
index a8d71ed43a0e..28ba20fda3e2 100644
--- a/include/linux/nl80211.h
+++ b/include/linux/nl80211.h
@@ -3,7 +3,7 @@
3/* 3/*
4 * 802.11 netlink interface public header 4 * 802.11 netlink interface public header
5 * 5 *
6 * Copyright 2006, 2007, 2008 Johannes Berg <johannes@sipsolutions.net> 6 * Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
7 * Copyright 2008 Michael Wu <flamingice@sourmilk.net> 7 * Copyright 2008 Michael Wu <flamingice@sourmilk.net>
8 * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com> 8 * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com>
9 * Copyright 2008 Michael Buesch <mb@bu3sch.de> 9 * Copyright 2008 Michael Buesch <mb@bu3sch.de>
@@ -160,6 +160,11 @@
160 * @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons, 160 * @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons,
161 * partial scan results may be available 161 * partial scan results may be available
162 * 162 *
163 * @NL80211_CMD_GET_SURVEY: get survey resuls, e.g. channel occupation
164 * or noise level
165 * @NL80211_CMD_NEW_SURVEY_RESULTS: survey data notification (as a reply to
166 * NL80211_CMD_GET_SURVEY and on the "scan" multicast group)
167 *
163 * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain 168 * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain
164 * has been changed and provides details of the request information 169 * has been changed and provides details of the request information
165 * that caused the change such as who initiated the regulatory request 170 * that caused the change such as who initiated the regulatory request
@@ -265,6 +270,60 @@
265 * @NL80211_CMD_SET_WIPHY_NETNS: Set a wiphy's netns. Note that all devices 270 * @NL80211_CMD_SET_WIPHY_NETNS: Set a wiphy's netns. Note that all devices
266 * associated with this wiphy must be down and will follow. 271 * associated with this wiphy must be down and will follow.
267 * 272 *
273 * @NL80211_CMD_REMAIN_ON_CHANNEL: Request to remain awake on the specified
274 * channel for the specified amount of time. This can be used to do
275 * off-channel operations like transmit a Public Action frame and wait for
276 * a response while being associated to an AP on another channel.
277 * %NL80211_ATTR_WIPHY or %NL80211_ATTR_IFINDEX is used to specify which
278 * radio is used. %NL80211_ATTR_WIPHY_FREQ is used to specify the
279 * frequency for the operation and %NL80211_ATTR_WIPHY_CHANNEL_TYPE may be
280 * optionally used to specify additional channel parameters.
281 * %NL80211_ATTR_DURATION is used to specify the duration in milliseconds
282 * to remain on the channel. This command is also used as an event to
283 * notify when the requested duration starts (it may take a while for the
284 * driver to schedule this time due to other concurrent needs for the
285 * radio).
286 * When called, this operation returns a cookie (%NL80211_ATTR_COOKIE)
287 * that will be included with any events pertaining to this request;
288 * the cookie is also used to cancel the request.
289 * @NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL: This command can be used to cancel a
290 * pending remain-on-channel duration if the desired operation has been
291 * completed prior to expiration of the originally requested duration.
292 * %NL80211_ATTR_WIPHY or %NL80211_ATTR_IFINDEX is used to specify the
293 * radio. The %NL80211_ATTR_COOKIE attribute must be given as well to
294 * uniquely identify the request.
295 * This command is also used as an event to notify when a requested
296 * remain-on-channel duration has expired.
297 *
298 * @NL80211_CMD_SET_TX_BITRATE_MASK: Set the mask of rates to be used in TX
299 * rate selection. %NL80211_ATTR_IFINDEX is used to specify the interface
300 * and @NL80211_ATTR_TX_RATES the set of allowed rates.
301 *
302 * @NL80211_CMD_REGISTER_ACTION: Register for receiving certain action frames
303 * (via @NL80211_CMD_ACTION) for processing in userspace. This command
304 * requires an interface index and a match attribute containing the first
305 * few bytes of the frame that should match, e.g. a single byte for only
306 * a category match or four bytes for vendor frames including the OUI.
307 * The registration cannot be dropped, but is removed automatically
308 * when the netlink socket is closed. Multiple registrations can be made.
309 * @NL80211_CMD_ACTION: Action frame TX request and RX notification. This
310 * command is used both as a request to transmit an Action frame and as an
311 * event indicating reception of an Action frame that was not processed in
312 * kernel code, but is for us (i.e., which may need to be processed in a
313 * user space application). %NL80211_ATTR_FRAME is used to specify the
314 * frame contents (including header). %NL80211_ATTR_WIPHY_FREQ (and
315 * optionally %NL80211_ATTR_WIPHY_CHANNEL_TYPE) is used to indicate on
316 * which channel the frame is to be transmitted or was received. This
317 * channel has to be the current channel (remain-on-channel or the
318 * operational channel). When called, this operation returns a cookie
319 * (%NL80211_ATTR_COOKIE) that will be included with the TX status event
320 * pertaining to the TX request.
321 * @NL80211_CMD_ACTION_TX_STATUS: Report TX status of an Action frame
322 * transmitted with %NL80211_CMD_ACTION. %NL80211_ATTR_COOKIE identifies
323 * the TX command and %NL80211_ATTR_FRAME includes the contents of the
324 * frame. %NL80211_ATTR_ACK flag is included if the recipient acknowledged
325 * the frame.
326 *
268 * @NL80211_CMD_MAX: highest used command number 327 * @NL80211_CMD_MAX: highest used command number
269 * @__NL80211_CMD_AFTER_LAST: internal use 328 * @__NL80211_CMD_AFTER_LAST: internal use
270 */ 329 */
@@ -341,6 +400,25 @@ enum nl80211_commands {
341 400
342 NL80211_CMD_SET_WIPHY_NETNS, 401 NL80211_CMD_SET_WIPHY_NETNS,
343 402
403 NL80211_CMD_GET_SURVEY,
404 NL80211_CMD_NEW_SURVEY_RESULTS,
405
406 NL80211_CMD_SET_PMKSA,
407 NL80211_CMD_DEL_PMKSA,
408 NL80211_CMD_FLUSH_PMKSA,
409
410 NL80211_CMD_REMAIN_ON_CHANNEL,
411 NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL,
412
413 NL80211_CMD_SET_TX_BITRATE_MASK,
414
415 NL80211_CMD_REGISTER_ACTION,
416 NL80211_CMD_ACTION,
417 NL80211_CMD_ACTION_TX_STATUS,
418
419 NL80211_CMD_SET_POWER_SAVE,
420 NL80211_CMD_GET_POWER_SAVE,
421
344 /* add new commands above here */ 422 /* add new commands above here */
345 423
346 /* used to define NL80211_CMD_MAX below */ 424 /* used to define NL80211_CMD_MAX below */
@@ -390,6 +468,8 @@ enum nl80211_commands {
390 * @NL80211_ATTR_WIPHY_RTS_THRESHOLD: RTS threshold (TX frames with length 468 * @NL80211_ATTR_WIPHY_RTS_THRESHOLD: RTS threshold (TX frames with length
391 * larger than or equal to this use RTS/CTS handshake); allowed range: 469 * larger than or equal to this use RTS/CTS handshake); allowed range:
392 * 0..65536, disable with (u32)-1; dot11RTSThreshold; u32 470 * 0..65536, disable with (u32)-1; dot11RTSThreshold; u32
471 * @NL80211_ATTR_WIPHY_COVERAGE_CLASS: Coverage Class as defined by IEEE 802.11
472 * section 7.3.2.9; dot11CoverageClass; u8
393 * 473 *
394 * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on 474 * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on
395 * @NL80211_ATTR_IFNAME: network interface name 475 * @NL80211_ATTR_IFNAME: network interface name
@@ -584,6 +664,33 @@ enum nl80211_commands {
584 * changed then the list changed and the dump should be repeated 664 * changed then the list changed and the dump should be repeated
585 * completely from scratch. 665 * completely from scratch.
586 * 666 *
667 * @NL80211_ATTR_4ADDR: Use 4-address frames on a virtual interface
668 *
669 * @NL80211_ATTR_SURVEY_INFO: survey information about a channel, part of
670 * the survey response for %NL80211_CMD_GET_SURVEY, nested attribute
671 * containing info as possible, see &enum survey_info.
672 *
673 * @NL80211_ATTR_PMKID: PMK material for PMKSA caching.
674 * @NL80211_ATTR_MAX_NUM_PMKIDS: maximum number of PMKIDs a firmware can
675 * cache, a wiphy attribute.
676 *
677 * @NL80211_ATTR_DURATION: Duration of an operation in milliseconds, u32.
678 *
679 * @NL80211_ATTR_COOKIE: Generic 64-bit cookie to identify objects.
680 *
681 * @NL80211_ATTR_TX_RATES: Nested set of attributes
682 * (enum nl80211_tx_rate_attributes) describing TX rates per band. The
683 * enum nl80211_band value is used as the index (nla_type() of the nested
684 * data. If a band is not included, it will be configured to allow all
685 * rates based on negotiated supported rates information. This attribute
686 * is used with %NL80211_CMD_SET_TX_BITRATE_MASK.
687 *
688 * @NL80211_ATTR_FRAME_MATCH: A binary attribute which typically must contain
689 * at least one byte, currently used with @NL80211_CMD_REGISTER_ACTION.
690 *
691 * @NL80211_ATTR_ACK: Flag attribute indicating that the frame was
692 * acknowledged by the recipient.
693 *
587 * @NL80211_ATTR_MAX: highest attribute number currently defined 694 * @NL80211_ATTR_MAX: highest attribute number currently defined
588 * @__NL80211_ATTR_AFTER_LAST: internal use 695 * @__NL80211_ATTR_AFTER_LAST: internal use
589 */ 696 */
@@ -714,6 +821,27 @@ enum nl80211_attrs {
714 821
715 NL80211_ATTR_PID, 822 NL80211_ATTR_PID,
716 823
824 NL80211_ATTR_4ADDR,
825
826 NL80211_ATTR_SURVEY_INFO,
827
828 NL80211_ATTR_PMKID,
829 NL80211_ATTR_MAX_NUM_PMKIDS,
830
831 NL80211_ATTR_DURATION,
832
833 NL80211_ATTR_COOKIE,
834
835 NL80211_ATTR_WIPHY_COVERAGE_CLASS,
836
837 NL80211_ATTR_TX_RATES,
838
839 NL80211_ATTR_FRAME_MATCH,
840
841 NL80211_ATTR_ACK,
842
843 NL80211_ATTR_PS_STATE,
844
717 /* add attributes here, update the policy in nl80211.c */ 845 /* add attributes here, update the policy in nl80211.c */
718 846
719 __NL80211_ATTR_AFTER_LAST, 847 __NL80211_ATTR_AFTER_LAST,
@@ -895,14 +1023,14 @@ enum nl80211_sta_info {
895 * 1023 *
896 * @NL80211_MPATH_FLAG_ACTIVE: the mesh path is active 1024 * @NL80211_MPATH_FLAG_ACTIVE: the mesh path is active
897 * @NL80211_MPATH_FLAG_RESOLVING: the mesh path discovery process is running 1025 * @NL80211_MPATH_FLAG_RESOLVING: the mesh path discovery process is running
898 * @NL80211_MPATH_FLAG_DSN_VALID: the mesh path contains a valid DSN 1026 * @NL80211_MPATH_FLAG_SN_VALID: the mesh path contains a valid SN
899 * @NL80211_MPATH_FLAG_FIXED: the mesh path has been manually set 1027 * @NL80211_MPATH_FLAG_FIXED: the mesh path has been manually set
900 * @NL80211_MPATH_FLAG_RESOLVED: the mesh path discovery process succeeded 1028 * @NL80211_MPATH_FLAG_RESOLVED: the mesh path discovery process succeeded
901 */ 1029 */
902enum nl80211_mpath_flags { 1030enum nl80211_mpath_flags {
903 NL80211_MPATH_FLAG_ACTIVE = 1<<0, 1031 NL80211_MPATH_FLAG_ACTIVE = 1<<0,
904 NL80211_MPATH_FLAG_RESOLVING = 1<<1, 1032 NL80211_MPATH_FLAG_RESOLVING = 1<<1,
905 NL80211_MPATH_FLAG_DSN_VALID = 1<<2, 1033 NL80211_MPATH_FLAG_SN_VALID = 1<<2,
906 NL80211_MPATH_FLAG_FIXED = 1<<3, 1034 NL80211_MPATH_FLAG_FIXED = 1<<3,
907 NL80211_MPATH_FLAG_RESOLVED = 1<<4, 1035 NL80211_MPATH_FLAG_RESOLVED = 1<<4,
908}; 1036};
@@ -915,7 +1043,7 @@ enum nl80211_mpath_flags {
915 * 1043 *
916 * @__NL80211_MPATH_INFO_INVALID: attribute number 0 is reserved 1044 * @__NL80211_MPATH_INFO_INVALID: attribute number 0 is reserved
917 * @NL80211_ATTR_MPATH_FRAME_QLEN: number of queued frames for this destination 1045 * @NL80211_ATTR_MPATH_FRAME_QLEN: number of queued frames for this destination
918 * @NL80211_ATTR_MPATH_DSN: destination sequence number 1046 * @NL80211_ATTR_MPATH_SN: destination sequence number
919 * @NL80211_ATTR_MPATH_METRIC: metric (cost) of this mesh path 1047 * @NL80211_ATTR_MPATH_METRIC: metric (cost) of this mesh path
920 * @NL80211_ATTR_MPATH_EXPTIME: expiration time for the path, in msec from now 1048 * @NL80211_ATTR_MPATH_EXPTIME: expiration time for the path, in msec from now
921 * @NL80211_ATTR_MPATH_FLAGS: mesh path flags, enumerated in 1049 * @NL80211_ATTR_MPATH_FLAGS: mesh path flags, enumerated in
@@ -926,7 +1054,7 @@ enum nl80211_mpath_flags {
926enum nl80211_mpath_info { 1054enum nl80211_mpath_info {
927 __NL80211_MPATH_INFO_INVALID, 1055 __NL80211_MPATH_INFO_INVALID,
928 NL80211_MPATH_INFO_FRAME_QLEN, 1056 NL80211_MPATH_INFO_FRAME_QLEN,
929 NL80211_MPATH_INFO_DSN, 1057 NL80211_MPATH_INFO_SN,
930 NL80211_MPATH_INFO_METRIC, 1058 NL80211_MPATH_INFO_METRIC,
931 NL80211_MPATH_INFO_EXPTIME, 1059 NL80211_MPATH_INFO_EXPTIME,
932 NL80211_MPATH_INFO_FLAGS, 1060 NL80211_MPATH_INFO_FLAGS,
@@ -1117,6 +1245,26 @@ enum nl80211_reg_rule_flags {
1117}; 1245};
1118 1246
1119/** 1247/**
1248 * enum nl80211_survey_info - survey information
1249 *
1250 * These attribute types are used with %NL80211_ATTR_SURVEY_INFO
1251 * when getting information about a survey.
1252 *
1253 * @__NL80211_SURVEY_INFO_INVALID: attribute number 0 is reserved
1254 * @NL80211_SURVEY_INFO_FREQUENCY: center frequency of channel
1255 * @NL80211_SURVEY_INFO_NOISE: noise level of channel (u8, dBm)
1256 */
1257enum nl80211_survey_info {
1258 __NL80211_SURVEY_INFO_INVALID,
1259 NL80211_SURVEY_INFO_FREQUENCY,
1260 NL80211_SURVEY_INFO_NOISE,
1261
1262 /* keep last */
1263 __NL80211_SURVEY_INFO_AFTER_LAST,
1264 NL80211_SURVEY_INFO_MAX = __NL80211_SURVEY_INFO_AFTER_LAST - 1
1265};
1266
1267/**
1120 * enum nl80211_mntr_flags - monitor configuration flags 1268 * enum nl80211_mntr_flags - monitor configuration flags
1121 * 1269 *
1122 * Monitor configuration flags. 1270 * Monitor configuration flags.
@@ -1196,6 +1344,8 @@ enum nl80211_mntr_flags {
1196 * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs) 1344 * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs)
1197 * that it takes for an HWMP information element to propagate across the mesh 1345 * that it takes for an HWMP information element to propagate across the mesh
1198 * 1346 *
1347 * @NL80211_MESHCONF_ROOTMODE: whether root mode is enabled or not
1348 *
1199 * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute 1349 * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute
1200 * 1350 *
1201 * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use 1351 * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use
@@ -1215,6 +1365,7 @@ enum nl80211_meshconf_params {
1215 NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, 1365 NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT,
1216 NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, 1366 NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL,
1217 NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME, 1367 NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME,
1368 NL80211_MESHCONF_HWMP_ROOTMODE,
1218 1369
1219 /* keep last */ 1370 /* keep last */
1220 __NL80211_MESHCONF_ATTR_AFTER_LAST, 1371 __NL80211_MESHCONF_ATTR_AFTER_LAST,
@@ -1271,12 +1422,20 @@ enum nl80211_channel_type {
1271 * @NL80211_BSS_BEACON_INTERVAL: beacon interval of the (I)BSS (u16) 1422 * @NL80211_BSS_BEACON_INTERVAL: beacon interval of the (I)BSS (u16)
1272 * @NL80211_BSS_CAPABILITY: capability field (CPU order, u16) 1423 * @NL80211_BSS_CAPABILITY: capability field (CPU order, u16)
1273 * @NL80211_BSS_INFORMATION_ELEMENTS: binary attribute containing the 1424 * @NL80211_BSS_INFORMATION_ELEMENTS: binary attribute containing the
1274 * raw information elements from the probe response/beacon (bin) 1425 * raw information elements from the probe response/beacon (bin);
1426 * if the %NL80211_BSS_BEACON_IES attribute is present, the IEs here are
1427 * from a Probe Response frame; otherwise they are from a Beacon frame.
1428 * However, if the driver does not indicate the source of the IEs, these
1429 * IEs may be from either frame subtype.
1275 * @NL80211_BSS_SIGNAL_MBM: signal strength of probe response/beacon 1430 * @NL80211_BSS_SIGNAL_MBM: signal strength of probe response/beacon
1276 * in mBm (100 * dBm) (s32) 1431 * in mBm (100 * dBm) (s32)
1277 * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon 1432 * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon
1278 * in unspecified units, scaled to 0..100 (u8) 1433 * in unspecified units, scaled to 0..100 (u8)
1279 * @NL80211_BSS_STATUS: status, if this BSS is "used" 1434 * @NL80211_BSS_STATUS: status, if this BSS is "used"
1435 * @NL80211_BSS_SEEN_MS_AGO: age of this BSS entry in ms
1436 * @NL80211_BSS_BEACON_IES: binary attribute containing the raw information
1437 * elements from a Beacon frame (bin); not present if no Beacon frame has
1438 * yet been received
1280 * @__NL80211_BSS_AFTER_LAST: internal 1439 * @__NL80211_BSS_AFTER_LAST: internal
1281 * @NL80211_BSS_MAX: highest BSS attribute 1440 * @NL80211_BSS_MAX: highest BSS attribute
1282 */ 1441 */
@@ -1291,6 +1450,8 @@ enum nl80211_bss {
1291 NL80211_BSS_SIGNAL_MBM, 1450 NL80211_BSS_SIGNAL_MBM,
1292 NL80211_BSS_SIGNAL_UNSPEC, 1451 NL80211_BSS_SIGNAL_UNSPEC,
1293 NL80211_BSS_STATUS, 1452 NL80211_BSS_STATUS,
1453 NL80211_BSS_SEEN_MS_AGO,
1454 NL80211_BSS_BEACON_IES,
1294 1455
1295 /* keep last */ 1456 /* keep last */
1296 __NL80211_BSS_AFTER_LAST, 1457 __NL80211_BSS_AFTER_LAST,
@@ -1388,4 +1549,38 @@ enum nl80211_key_attributes {
1388 NL80211_KEY_MAX = __NL80211_KEY_AFTER_LAST - 1 1549 NL80211_KEY_MAX = __NL80211_KEY_AFTER_LAST - 1
1389}; 1550};
1390 1551
1552/**
1553 * enum nl80211_tx_rate_attributes - TX rate set attributes
1554 * @__NL80211_TXRATE_INVALID: invalid
1555 * @NL80211_TXRATE_LEGACY: Legacy (non-MCS) rates allowed for TX rate selection
1556 * in an array of rates as defined in IEEE 802.11 7.3.2.2 (u8 values with
1557 * 1 = 500 kbps) but without the IE length restriction (at most
1558 * %NL80211_MAX_SUPP_RATES in a single array).
1559 * @__NL80211_TXRATE_AFTER_LAST: internal
1560 * @NL80211_TXRATE_MAX: highest TX rate attribute
1561 */
1562enum nl80211_tx_rate_attributes {
1563 __NL80211_TXRATE_INVALID,
1564 NL80211_TXRATE_LEGACY,
1565
1566 /* keep last */
1567 __NL80211_TXRATE_AFTER_LAST,
1568 NL80211_TXRATE_MAX = __NL80211_TXRATE_AFTER_LAST - 1
1569};
1570
1571/**
1572 * enum nl80211_band - Frequency band
1573 * @NL80211_BAND_2GHZ - 2.4 GHz ISM band
1574 * @NL80211_BAND_5GHZ - around 5 GHz band (4.9 - 5.7 GHz)
1575 */
1576enum nl80211_band {
1577 NL80211_BAND_2GHZ,
1578 NL80211_BAND_5GHZ,
1579};
1580
1581enum nl80211_ps_state {
1582 NL80211_PS_DISABLED,
1583 NL80211_PS_ENABLED,
1584};
1585
1391#endif /* __LINUX_NL80211_H */ 1586#endif /* __LINUX_NL80211_H */
diff --git a/include/linux/nl802154.h b/include/linux/nl802154.h
index b7d9435d5a9f..33d9f5175109 100644
--- a/include/linux/nl802154.h
+++ b/include/linux/nl802154.h
@@ -65,6 +65,9 @@ enum {
65 IEEE802154_ATTR_SEC, 65 IEEE802154_ATTR_SEC,
66 66
67 IEEE802154_ATTR_PAGE, 67 IEEE802154_ATTR_PAGE,
68 IEEE802154_ATTR_CHANNEL_PAGE_LIST,
69
70 IEEE802154_ATTR_PHY_NAME,
68 71
69 __IEEE802154_ATTR_MAX, 72 __IEEE802154_ATTR_MAX,
70}; 73};
@@ -114,6 +117,9 @@ enum {
114 IEEE802154_RX_ENABLE_CONF, /* Not supported yet */ 117 IEEE802154_RX_ENABLE_CONF, /* Not supported yet */
115 118
116 IEEE802154_LIST_IFACE, 119 IEEE802154_LIST_IFACE,
120 IEEE802154_LIST_PHY,
121 IEEE802154_ADD_IFACE,
122 IEEE802154_DEL_IFACE,
117 123
118 __IEEE802154_CMD_MAX, 124 __IEEE802154_CMD_MAX,
119}; 125};
diff --git a/include/linux/node.h b/include/linux/node.h
index 681a697b9a86..06292dac3eab 100644
--- a/include/linux/node.h
+++ b/include/linux/node.h
@@ -21,13 +21,19 @@
21 21
22#include <linux/sysdev.h> 22#include <linux/sysdev.h>
23#include <linux/cpumask.h> 23#include <linux/cpumask.h>
24#include <linux/workqueue.h>
24 25
25struct node { 26struct node {
26 struct sys_device sysdev; 27 struct sys_device sysdev;
28
29#if defined(CONFIG_MEMORY_HOTPLUG_SPARSE) && defined(CONFIG_HUGETLBFS)
30 struct work_struct node_work;
31#endif
27}; 32};
28 33
29struct memory_block; 34struct memory_block;
30extern struct node node_devices[]; 35extern struct node node_devices[];
36typedef void (*node_registration_func_t)(struct node *);
31 37
32extern int register_node(struct node *, int, struct node *); 38extern int register_node(struct node *, int, struct node *);
33extern void unregister_node(struct node *node); 39extern void unregister_node(struct node *node);
@@ -39,6 +45,11 @@ extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid);
39extern int register_mem_sect_under_node(struct memory_block *mem_blk, 45extern int register_mem_sect_under_node(struct memory_block *mem_blk,
40 int nid); 46 int nid);
41extern int unregister_mem_sect_under_nodes(struct memory_block *mem_blk); 47extern int unregister_mem_sect_under_nodes(struct memory_block *mem_blk);
48
49#ifdef CONFIG_HUGETLBFS
50extern void register_hugetlbfs_with_node(node_registration_func_t doregister,
51 node_registration_func_t unregister);
52#endif
42#else 53#else
43static inline int register_one_node(int nid) 54static inline int register_one_node(int nid)
44{ 55{
@@ -65,6 +76,11 @@ static inline int unregister_mem_sect_under_nodes(struct memory_block *mem_blk)
65{ 76{
66 return 0; 77 return 0;
67} 78}
79
80static inline void register_hugetlbfs_with_node(node_registration_func_t reg,
81 node_registration_func_t unreg)
82{
83}
68#endif 84#endif
69 85
70#define to_node(sys_device) container_of(sys_device, struct node, sysdev) 86#define to_node(sys_device) container_of(sys_device, struct node, sysdev)
diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h
index b359c4a9ec9e..dba35e413371 100644
--- a/include/linux/nodemask.h
+++ b/include/linux/nodemask.h
@@ -69,8 +69,6 @@
69 * int node_online(node) Is some node online? 69 * int node_online(node) Is some node online?
70 * int node_possible(node) Is some node possible? 70 * int node_possible(node) Is some node possible?
71 * 71 *
72 * int any_online_node(mask) First online node in mask
73 *
74 * node_set_online(node) set bit 'node' in node_online_map 72 * node_set_online(node) set bit 'node' in node_online_map
75 * node_set_offline(node) clear bit 'node' in node_online_map 73 * node_set_offline(node) clear bit 'node' in node_online_map
76 * 74 *
@@ -245,14 +243,19 @@ static inline int __next_node(int n, const nodemask_t *srcp)
245 return min_t(int,MAX_NUMNODES,find_next_bit(srcp->bits, MAX_NUMNODES, n+1)); 243 return min_t(int,MAX_NUMNODES,find_next_bit(srcp->bits, MAX_NUMNODES, n+1));
246} 244}
247 245
246static inline void init_nodemask_of_node(nodemask_t *mask, int node)
247{
248 nodes_clear(*mask);
249 node_set(node, *mask);
250}
251
248#define nodemask_of_node(node) \ 252#define nodemask_of_node(node) \
249({ \ 253({ \
250 typeof(_unused_nodemask_arg_) m; \ 254 typeof(_unused_nodemask_arg_) m; \
251 if (sizeof(m) == sizeof(unsigned long)) { \ 255 if (sizeof(m) == sizeof(unsigned long)) { \
252 m.bits[0] = 1UL<<(node); \ 256 m.bits[0] = 1UL << (node); \
253 } else { \ 257 } else { \
254 nodes_clear(m); \ 258 init_nodemask_of_node(&m, (node)); \
255 node_set((node), m); \
256 } \ 259 } \
257 m; \ 260 m; \
258}) 261})
@@ -462,15 +465,6 @@ static inline int num_node_state(enum node_states state)
462#define node_online_map node_states[N_ONLINE] 465#define node_online_map node_states[N_ONLINE]
463#define node_possible_map node_states[N_POSSIBLE] 466#define node_possible_map node_states[N_POSSIBLE]
464 467
465#define any_online_node(mask) \
466({ \
467 int node; \
468 for_each_node_mask(node, (mask)) \
469 if (node_online(node)) \
470 break; \
471 node; \
472})
473
474#define num_online_nodes() num_node_state(N_ONLINE) 468#define num_online_nodes() num_node_state(N_ONLINE)
475#define num_possible_nodes() num_node_state(N_POSSIBLE) 469#define num_possible_nodes() num_node_state(N_POSSIBLE)
476#define node_online(node) node_state((node), N_ONLINE) 470#define node_online(node) node_state((node), N_ONLINE)
@@ -480,15 +474,17 @@ static inline int num_node_state(enum node_states state)
480#define for_each_online_node(node) for_each_node_state(node, N_ONLINE) 474#define for_each_online_node(node) for_each_node_state(node, N_ONLINE)
481 475
482/* 476/*
483 * For nodemask scrach area.(See CPUMASK_ALLOC() in cpumask.h) 477 * For nodemask scrach area.
478 * NODEMASK_ALLOC(type, name) allocates an object with a specified type and
479 * name.
484 */ 480 */
485 481#if NODES_SHIFT > 8 /* nodemask_t > 256 bytes */
486#if NODES_SHIFT > 8 /* nodemask_t > 64 bytes */ 482#define NODEMASK_ALLOC(type, name, gfp_flags) \
487#define NODEMASK_ALLOC(x, m) struct x *m = kmalloc(sizeof(*m), GFP_KERNEL) 483 type *name = kmalloc(sizeof(*name), gfp_flags)
488#define NODEMASK_FREE(m) kfree(m) 484#define NODEMASK_FREE(m) kfree(m)
489#else 485#else
490#define NODEMASK_ALLOC(x, m) struct x _m, *m = &_m 486#define NODEMASK_ALLOC(type, name, gfp_flags) type _##name, *name = &_##name
491#define NODEMASK_FREE(m) 487#define NODEMASK_FREE(m) do {} while (0)
492#endif 488#endif
493 489
494/* A example struture for using NODEMASK_ALLOC, used in mempolicy. */ 490/* A example struture for using NODEMASK_ALLOC, used in mempolicy. */
@@ -497,8 +493,10 @@ struct nodemask_scratch {
497 nodemask_t mask2; 493 nodemask_t mask2;
498}; 494};
499 495
500#define NODEMASK_SCRATCH(x) NODEMASK_ALLOC(nodemask_scratch, x) 496#define NODEMASK_SCRATCH(x) \
501#define NODEMASK_SCRATCH_FREE(x) NODEMASK_FREE(x) 497 NODEMASK_ALLOC(struct nodemask_scratch, x, \
498 GFP_KERNEL | __GFP_NORETRY)
499#define NODEMASK_SCRATCH_FREE(x) NODEMASK_FREE(x)
502 500
503 501
504#endif /* __LINUX_NODEMASK_H */ 502#endif /* __LINUX_NODEMASK_H */
diff --git a/include/linux/notifier.h b/include/linux/notifier.h
index 44428d247dbe..fee6c2f68075 100644
--- a/include/linux/notifier.h
+++ b/include/linux/notifier.h
@@ -201,6 +201,8 @@ static inline int notifier_to_errno(int ret)
201#define NETDEV_PRE_UP 0x000D 201#define NETDEV_PRE_UP 0x000D
202#define NETDEV_BONDING_OLDTYPE 0x000E 202#define NETDEV_BONDING_OLDTYPE 0x000E
203#define NETDEV_BONDING_NEWTYPE 0x000F 203#define NETDEV_BONDING_NEWTYPE 0x000F
204#define NETDEV_POST_INIT 0x0010
205#define NETDEV_UNREGISTER_BATCH 0x0011
204 206
205#define SYS_DOWN 0x0001 /* Notify of system down */ 207#define SYS_DOWN 0x0001 /* Notify of system down */
206#define SYS_RESTART SYS_DOWN 208#define SYS_RESTART SYS_DOWN
diff --git a/include/linux/numa.h b/include/linux/numa.h
index a31a7301b159..3aaa31603a86 100644
--- a/include/linux/numa.h
+++ b/include/linux/numa.h
@@ -10,4 +10,6 @@
10 10
11#define MAX_NUMNODES (1 << NODES_SHIFT) 11#define MAX_NUMNODES (1 << NODES_SHIFT)
12 12
13#define NUMA_NO_NODE (-1)
14
13#endif /* _LINUX_NUMA_H */ 15#endif /* _LINUX_NUMA_H */
diff --git a/include/linux/of.h b/include/linux/of.h
index 7be2d1043c16..a367e19bb3af 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -17,14 +17,128 @@
17 */ 17 */
18#include <linux/types.h> 18#include <linux/types.h>
19#include <linux/bitops.h> 19#include <linux/bitops.h>
20#include <linux/kref.h>
20#include <linux/mod_devicetable.h> 21#include <linux/mod_devicetable.h>
22#include <linux/spinlock.h>
23
24#include <asm/byteorder.h>
25
26#ifdef CONFIG_OF
27
28typedef u32 phandle;
29typedef u32 ihandle;
30
31struct property {
32 char *name;
33 int length;
34 void *value;
35 struct property *next;
36 unsigned long _flags;
37 unsigned int unique_id;
38};
39
40#if defined(CONFIG_SPARC)
41struct of_irq_controller;
42#endif
43
44struct device_node {
45 const char *name;
46 const char *type;
47 phandle phandle;
48 char *full_name;
49
50 struct property *properties;
51 struct property *deadprops; /* removed properties */
52 struct device_node *parent;
53 struct device_node *child;
54 struct device_node *sibling;
55 struct device_node *next; /* next device of same type */
56 struct device_node *allnext; /* next in list of all nodes */
57 struct proc_dir_entry *pde; /* this node's proc directory */
58 struct kref kref;
59 unsigned long _flags;
60 void *data;
61#if defined(CONFIG_SPARC)
62 char *path_component_name;
63 unsigned int unique_id;
64 struct of_irq_controller *irq_trans;
65#endif
66};
67
68/* Pointer for first entry in chain of all nodes. */
69extern struct device_node *allnodes;
70extern struct device_node *of_chosen;
71extern rwlock_t devtree_lock;
72
73static inline int of_node_check_flag(struct device_node *n, unsigned long flag)
74{
75 return test_bit(flag, &n->_flags);
76}
77
78static inline void of_node_set_flag(struct device_node *n, unsigned long flag)
79{
80 set_bit(flag, &n->_flags);
81}
82
83extern struct device_node *of_find_all_nodes(struct device_node *prev);
84
85#if defined(CONFIG_SPARC)
86/* Dummy ref counting routines - to be implemented later */
87static inline struct device_node *of_node_get(struct device_node *node)
88{
89 return node;
90}
91static inline void of_node_put(struct device_node *node)
92{
93}
94
95#else
96extern struct device_node *of_node_get(struct device_node *node);
97extern void of_node_put(struct device_node *node);
98#endif
99
100/*
101 * OF address retreival & translation
102 */
103
104/* Helper to read a big number; size is in cells (not bytes) */
105static inline u64 of_read_number(const __be32 *cell, int size)
106{
107 u64 r = 0;
108 while (size--)
109 r = (r << 32) | be32_to_cpu(*(cell++));
110 return r;
111}
112
113/* Like of_read_number, but we want an unsigned long result */
114static inline unsigned long of_read_ulong(const __be32 *cell, int size)
115{
116 /* toss away upper bits if unsigned long is smaller than u64 */
117 return of_read_number(cell, size);
118}
21 119
22#include <asm/prom.h> 120#include <asm/prom.h>
23 121
122/* Default #address and #size cells. Allow arch asm/prom.h to override */
123#if !defined(OF_ROOT_NODE_ADDR_CELLS_DEFAULT)
124#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 1
125#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1
126#endif
127
128/* Default string compare functions, Allow arch asm/prom.h to override */
129#if !defined(of_compat_cmp)
130#define of_compat_cmp(s1, s2, l) strcasecmp((s1), (s2))
131#define of_prop_cmp(s1, s2) strcmp((s1), (s2))
132#define of_node_cmp(s1, s2) strcasecmp((s1), (s2))
133#endif
134
24/* flag descriptions */ 135/* flag descriptions */
25#define OF_DYNAMIC 1 /* node and properties were allocated via kmalloc */ 136#define OF_DYNAMIC 1 /* node and properties were allocated via kmalloc */
26#define OF_DETACHED 2 /* node has been detached from the device tree */ 137#define OF_DETACHED 2 /* node has been detached from the device tree */
27 138
139#define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags)
140#define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags)
141
28#define OF_BAD_ADDR ((u64)-1) 142#define OF_BAD_ADDR ((u64)-1)
29 143
30extern struct device_node *of_find_node_by_name(struct device_node *from, 144extern struct device_node *of_find_node_by_name(struct device_node *from,
@@ -84,4 +198,19 @@ extern int of_parse_phandles_with_args(struct device_node *np,
84 const char *list_name, const char *cells_name, int index, 198 const char *list_name, const char *cells_name, int index,
85 struct device_node **out_node, const void **out_args); 199 struct device_node **out_node, const void **out_args);
86 200
201extern int of_machine_is_compatible(const char *compat);
202
203extern int prom_add_property(struct device_node* np, struct property* prop);
204extern int prom_remove_property(struct device_node *np, struct property *prop);
205extern int prom_update_property(struct device_node *np,
206 struct property *newprop,
207 struct property *oldprop);
208
209#if defined(CONFIG_OF_DYNAMIC)
210/* For updating the device tree at runtime */
211extern void of_attach_node(struct device_node *);
212extern void of_detach_node(struct device_node *);
213#endif
214
215#endif /* CONFIG_OF */
87#endif /* _LINUX_OF_H */ 216#endif /* _LINUX_OF_H */
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h
new file mode 100644
index 000000000000..a1ca92ccb0ff
--- /dev/null
+++ b/include/linux/of_fdt.h
@@ -0,0 +1,103 @@
1/*
2 * Definitions for working with the Flattened Device Tree data format
3 *
4 * Copyright 2009 Benjamin Herrenschmidt, IBM Corp
5 * benh@kernel.crashing.org
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * version 2 as published by the Free Software Foundation.
10 */
11
12#ifndef _LINUX_OF_FDT_H
13#define _LINUX_OF_FDT_H
14
15#include <linux/types.h>
16#include <linux/init.h>
17
18/* Definitions used by the flattened device tree */
19#define OF_DT_HEADER 0xd00dfeed /* marker */
20#define OF_DT_BEGIN_NODE 0x1 /* Start of node, full name */
21#define OF_DT_END_NODE 0x2 /* End node */
22#define OF_DT_PROP 0x3 /* Property: name off, size,
23 * content */
24#define OF_DT_NOP 0x4 /* nop */
25#define OF_DT_END 0x9
26
27#define OF_DT_VERSION 0x10
28
29#ifndef __ASSEMBLY__
30/*
31 * This is what gets passed to the kernel by prom_init or kexec
32 *
33 * The dt struct contains the device tree structure, full pathes and
34 * property contents. The dt strings contain a separate block with just
35 * the strings for the property names, and is fully page aligned and
36 * self contained in a page, so that it can be kept around by the kernel,
37 * each property name appears only once in this page (cheap compression)
38 *
39 * the mem_rsvmap contains a map of reserved ranges of physical memory,
40 * passing it here instead of in the device-tree itself greatly simplifies
41 * the job of everybody. It's just a list of u64 pairs (base/size) that
42 * ends when size is 0
43 */
44struct boot_param_header {
45 __be32 magic; /* magic word OF_DT_HEADER */
46 __be32 totalsize; /* total size of DT block */
47 __be32 off_dt_struct; /* offset to structure */
48 __be32 off_dt_strings; /* offset to strings */
49 __be32 off_mem_rsvmap; /* offset to memory reserve map */
50 __be32 version; /* format version */
51 __be32 last_comp_version; /* last compatible version */
52 /* version 2 fields below */
53 __be32 boot_cpuid_phys; /* Physical CPU id we're booting on */
54 /* version 3 fields below */
55 __be32 dt_strings_size; /* size of the DT strings block */
56 /* version 17 fields below */
57 __be32 dt_struct_size; /* size of the DT structure block */
58};
59
60/* TBD: Temporary export of fdt globals - remove when code fully merged */
61extern int __initdata dt_root_addr_cells;
62extern int __initdata dt_root_size_cells;
63extern struct boot_param_header *initial_boot_params;
64
65/* For scanning the flat device-tree at boot time */
66extern char *find_flat_dt_string(u32 offset);
67extern int of_scan_flat_dt(int (*it)(unsigned long node, const char *uname,
68 int depth, void *data),
69 void *data);
70extern void *of_get_flat_dt_prop(unsigned long node, const char *name,
71 unsigned long *size);
72extern int of_flat_dt_is_compatible(unsigned long node, const char *name);
73extern unsigned long of_get_flat_dt_root(void);
74extern void early_init_dt_scan_chosen_arch(unsigned long node);
75extern int early_init_dt_scan_chosen(unsigned long node, const char *uname,
76 int depth, void *data);
77extern void early_init_dt_check_for_initrd(unsigned long node);
78extern int early_init_dt_scan_memory(unsigned long node, const char *uname,
79 int depth, void *data);
80extern void early_init_dt_add_memory_arch(u64 base, u64 size);
81extern u64 early_init_dt_alloc_memory_arch(u64 size, u64 align);
82extern u64 dt_mem_next_cell(int s, __be32 **cellp);
83
84/*
85 * If BLK_DEV_INITRD, the fdt early init code will call this function,
86 * to be provided by the arch code. start and end are specified as
87 * physical addresses.
88 */
89#ifdef CONFIG_BLK_DEV_INITRD
90extern void early_init_dt_setup_initrd_arch(unsigned long start,
91 unsigned long end);
92#endif
93
94/* Early flat tree scan hooks */
95extern int early_init_dt_scan_root(unsigned long node, const char *uname,
96 int depth, void *data);
97
98/* Other Prototypes */
99extern void unflatten_device_tree(void);
100extern void early_init_devtree(void *);
101
102#endif /* __ASSEMBLY__ */
103#endif /* _LINUX_OF_FDT_H */
diff --git a/include/linux/omapfb.h b/include/linux/omapfb.h
new file mode 100644
index 000000000000..9bdd91486b49
--- /dev/null
+++ b/include/linux/omapfb.h
@@ -0,0 +1,260 @@
1/*
2 * File: include/linux/omapfb.h
3 *
4 * Framebuffer driver for TI OMAP boards
5 *
6 * Copyright (C) 2004 Nokia Corporation
7 * Author: Imre Deak <imre.deak@nokia.com>
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 as published by the
11 * Free Software Foundation; either version 2 of the License, or (at your
12 * option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License along
20 * with this program; if not, write to the Free Software Foundation, Inc.,
21 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 */
23
24#ifndef __LINUX_OMAPFB_H__
25#define __LINUX_OMAPFB_H__
26
27#include <linux/fb.h>
28#include <linux/ioctl.h>
29#include <linux/types.h>
30
31/* IOCTL commands. */
32
33#define OMAP_IOW(num, dtype) _IOW('O', num, dtype)
34#define OMAP_IOR(num, dtype) _IOR('O', num, dtype)
35#define OMAP_IOWR(num, dtype) _IOWR('O', num, dtype)
36#define OMAP_IO(num) _IO('O', num)
37
38#define OMAPFB_MIRROR OMAP_IOW(31, int)
39#define OMAPFB_SYNC_GFX OMAP_IO(37)
40#define OMAPFB_VSYNC OMAP_IO(38)
41#define OMAPFB_SET_UPDATE_MODE OMAP_IOW(40, int)
42#define OMAPFB_GET_CAPS OMAP_IOR(42, struct omapfb_caps)
43#define OMAPFB_GET_UPDATE_MODE OMAP_IOW(43, int)
44#define OMAPFB_LCD_TEST OMAP_IOW(45, int)
45#define OMAPFB_CTRL_TEST OMAP_IOW(46, int)
46#define OMAPFB_UPDATE_WINDOW_OLD OMAP_IOW(47, struct omapfb_update_window_old)
47#define OMAPFB_SET_COLOR_KEY OMAP_IOW(50, struct omapfb_color_key)
48#define OMAPFB_GET_COLOR_KEY OMAP_IOW(51, struct omapfb_color_key)
49#define OMAPFB_SETUP_PLANE OMAP_IOW(52, struct omapfb_plane_info)
50#define OMAPFB_QUERY_PLANE OMAP_IOW(53, struct omapfb_plane_info)
51#define OMAPFB_UPDATE_WINDOW OMAP_IOW(54, struct omapfb_update_window)
52#define OMAPFB_SETUP_MEM OMAP_IOW(55, struct omapfb_mem_info)
53#define OMAPFB_QUERY_MEM OMAP_IOW(56, struct omapfb_mem_info)
54#define OMAPFB_WAITFORVSYNC OMAP_IO(57)
55#define OMAPFB_MEMORY_READ OMAP_IOR(58, struct omapfb_memory_read)
56#define OMAPFB_GET_OVERLAY_COLORMODE OMAP_IOR(59, struct omapfb_ovl_colormode)
57#define OMAPFB_WAITFORGO OMAP_IO(60)
58#define OMAPFB_GET_VRAM_INFO OMAP_IOR(61, struct omapfb_vram_info)
59#define OMAPFB_SET_TEARSYNC OMAP_IOW(62, struct omapfb_tearsync_info)
60#define OMAPFB_GET_DISPLAY_INFO OMAP_IOR(63, struct omapfb_display_info)
61
62#define OMAPFB_CAPS_GENERIC_MASK 0x00000fff
63#define OMAPFB_CAPS_LCDC_MASK 0x00fff000
64#define OMAPFB_CAPS_PANEL_MASK 0xff000000
65
66#define OMAPFB_CAPS_MANUAL_UPDATE 0x00001000
67#define OMAPFB_CAPS_TEARSYNC 0x00002000
68#define OMAPFB_CAPS_PLANE_RELOCATE_MEM 0x00004000
69#define OMAPFB_CAPS_PLANE_SCALE 0x00008000
70#define OMAPFB_CAPS_WINDOW_PIXEL_DOUBLE 0x00010000
71#define OMAPFB_CAPS_WINDOW_SCALE 0x00020000
72#define OMAPFB_CAPS_WINDOW_OVERLAY 0x00040000
73#define OMAPFB_CAPS_WINDOW_ROTATE 0x00080000
74#define OMAPFB_CAPS_SET_BACKLIGHT 0x01000000
75
76/* Values from DSP must map to lower 16-bits */
77#define OMAPFB_FORMAT_MASK 0x00ff
78#define OMAPFB_FORMAT_FLAG_DOUBLE 0x0100
79#define OMAPFB_FORMAT_FLAG_TEARSYNC 0x0200
80#define OMAPFB_FORMAT_FLAG_FORCE_VSYNC 0x0400
81#define OMAPFB_FORMAT_FLAG_ENABLE_OVERLAY 0x0800
82#define OMAPFB_FORMAT_FLAG_DISABLE_OVERLAY 0x1000
83
84#define OMAPFB_MEMTYPE_SDRAM 0
85#define OMAPFB_MEMTYPE_SRAM 1
86#define OMAPFB_MEMTYPE_MAX 1
87
88enum omapfb_color_format {
89 OMAPFB_COLOR_RGB565 = 0,
90 OMAPFB_COLOR_YUV422,
91 OMAPFB_COLOR_YUV420,
92 OMAPFB_COLOR_CLUT_8BPP,
93 OMAPFB_COLOR_CLUT_4BPP,
94 OMAPFB_COLOR_CLUT_2BPP,
95 OMAPFB_COLOR_CLUT_1BPP,
96 OMAPFB_COLOR_RGB444,
97 OMAPFB_COLOR_YUY422,
98
99 OMAPFB_COLOR_ARGB16,
100 OMAPFB_COLOR_RGB24U, /* RGB24, 32-bit container */
101 OMAPFB_COLOR_RGB24P, /* RGB24, 24-bit container */
102 OMAPFB_COLOR_ARGB32,
103 OMAPFB_COLOR_RGBA32,
104 OMAPFB_COLOR_RGBX32,
105};
106
107struct omapfb_update_window {
108 __u32 x, y;
109 __u32 width, height;
110 __u32 format;
111 __u32 out_x, out_y;
112 __u32 out_width, out_height;
113 __u32 reserved[8];
114};
115
116struct omapfb_update_window_old {
117 __u32 x, y;
118 __u32 width, height;
119 __u32 format;
120};
121
122enum omapfb_plane {
123 OMAPFB_PLANE_GFX = 0,
124 OMAPFB_PLANE_VID1,
125 OMAPFB_PLANE_VID2,
126};
127
128enum omapfb_channel_out {
129 OMAPFB_CHANNEL_OUT_LCD = 0,
130 OMAPFB_CHANNEL_OUT_DIGIT,
131};
132
133struct omapfb_plane_info {
134 __u32 pos_x;
135 __u32 pos_y;
136 __u8 enabled;
137 __u8 channel_out;
138 __u8 mirror;
139 __u8 reserved1;
140 __u32 out_width;
141 __u32 out_height;
142 __u32 reserved2[12];
143};
144
145struct omapfb_mem_info {
146 __u32 size;
147 __u8 type;
148 __u8 reserved[3];
149};
150
151struct omapfb_caps {
152 __u32 ctrl;
153 __u32 plane_color;
154 __u32 wnd_color;
155};
156
157enum omapfb_color_key_type {
158 OMAPFB_COLOR_KEY_DISABLED = 0,
159 OMAPFB_COLOR_KEY_GFX_DST,
160 OMAPFB_COLOR_KEY_VID_SRC,
161};
162
163struct omapfb_color_key {
164 __u8 channel_out;
165 __u32 background;
166 __u32 trans_key;
167 __u8 key_type;
168};
169
170enum omapfb_update_mode {
171 OMAPFB_UPDATE_DISABLED = 0,
172 OMAPFB_AUTO_UPDATE,
173 OMAPFB_MANUAL_UPDATE
174};
175
176struct omapfb_memory_read {
177 __u16 x;
178 __u16 y;
179 __u16 w;
180 __u16 h;
181 size_t buffer_size;
182 void __user *buffer;
183};
184
185struct omapfb_ovl_colormode {
186 __u8 overlay_idx;
187 __u8 mode_idx;
188 __u32 bits_per_pixel;
189 __u32 nonstd;
190 struct fb_bitfield red;
191 struct fb_bitfield green;
192 struct fb_bitfield blue;
193 struct fb_bitfield transp;
194};
195
196struct omapfb_vram_info {
197 __u32 total;
198 __u32 free;
199 __u32 largest_free_block;
200 __u32 reserved[5];
201};
202
203struct omapfb_tearsync_info {
204 __u8 enabled;
205 __u8 reserved1[3];
206 __u16 line;
207 __u16 reserved2;
208};
209
210struct omapfb_display_info {
211 __u16 xres;
212 __u16 yres;
213 __u32 width; /* phys width of the display in micrometers */
214 __u32 height; /* phys height of the display in micrometers */
215 __u32 reserved[5];
216};
217
218#ifdef __KERNEL__
219
220#include <plat/board.h>
221
222#ifdef CONFIG_ARCH_OMAP1
223#define OMAPFB_PLANE_NUM 1
224#else
225#define OMAPFB_PLANE_NUM 3
226#endif
227
228struct omapfb_mem_region {
229 u32 paddr;
230 void __iomem *vaddr;
231 unsigned long size;
232 u8 type; /* OMAPFB_PLANE_MEM_* */
233 enum omapfb_color_format format;/* OMAPFB_COLOR_* */
234 unsigned format_used:1; /* Must be set when format is set.
235 * Needed b/c of the badly chosen 0
236 * base for OMAPFB_COLOR_* values
237 */
238 unsigned alloc:1; /* allocated by the driver */
239 unsigned map:1; /* kernel mapped by the driver */
240};
241
242struct omapfb_mem_desc {
243 int region_cnt;
244 struct omapfb_mem_region region[OMAPFB_PLANE_NUM];
245};
246
247struct omapfb_platform_data {
248 struct omap_lcd_config lcd;
249 struct omapfb_mem_desc mem_desc;
250 void *ctrl_platform_data;
251};
252
253/* in arch/arm/plat-omap/fb.c */
254extern void omapfb_set_platform_data(struct omapfb_platform_data *data);
255extern void omapfb_set_ctrl_platform_data(void *pdata);
256extern void omapfb_reserve_sdram(void);
257
258#endif
259
260#endif /* __OMAPFB_H */
diff --git a/include/linux/oom.h b/include/linux/oom.h
index 6aac5fe4f6f1..537662315627 100644
--- a/include/linux/oom.h
+++ b/include/linux/oom.h
@@ -10,6 +10,7 @@
10#ifdef __KERNEL__ 10#ifdef __KERNEL__
11 11
12#include <linux/types.h> 12#include <linux/types.h>
13#include <linux/nodemask.h>
13 14
14struct zonelist; 15struct zonelist;
15struct notifier_block; 16struct notifier_block;
@@ -26,7 +27,8 @@ enum oom_constraint {
26extern int try_set_zone_oom(struct zonelist *zonelist, gfp_t gfp_flags); 27extern int try_set_zone_oom(struct zonelist *zonelist, gfp_t gfp_flags);
27extern void clear_zonelist_oom(struct zonelist *zonelist, gfp_t gfp_flags); 28extern void clear_zonelist_oom(struct zonelist *zonelist, gfp_t gfp_flags);
28 29
29extern void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order); 30extern void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask,
31 int order, nodemask_t *mask);
30extern int register_oom_notifier(struct notifier_block *nb); 32extern int register_oom_notifier(struct notifier_block *nb);
31extern int unregister_oom_notifier(struct notifier_block *nb); 33extern int unregister_oom_notifier(struct notifier_block *nb);
32 34
diff --git a/include/linux/padata.h b/include/linux/padata.h
new file mode 100644
index 000000000000..51611da9c498
--- /dev/null
+++ b/include/linux/padata.h
@@ -0,0 +1,88 @@
1/*
2 * padata.h - header for the padata parallelization interface
3 *
4 * Copyright (C) 2008, 2009 secunet Security Networks AG
5 * Copyright (C) 2008, 2009 Steffen Klassert <steffen.klassert@secunet.com>
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms and conditions of the GNU General Public License,
9 * version 2, as published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope 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, write to the Free Software Foundation, Inc.,
18 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
19 */
20
21#ifndef PADATA_H
22#define PADATA_H
23
24#include <linux/workqueue.h>
25#include <linux/spinlock.h>
26#include <linux/list.h>
27
28struct padata_priv {
29 struct list_head list;
30 struct parallel_data *pd;
31 int cb_cpu;
32 int seq_nr;
33 int info;
34 void (*parallel)(struct padata_priv *padata);
35 void (*serial)(struct padata_priv *padata);
36};
37
38struct padata_list {
39 struct list_head list;
40 spinlock_t lock;
41};
42
43struct padata_queue {
44 struct padata_list parallel;
45 struct padata_list reorder;
46 struct padata_list serial;
47 struct work_struct pwork;
48 struct work_struct swork;
49 struct parallel_data *pd;
50 atomic_t num_obj;
51 int cpu_index;
52};
53
54struct parallel_data {
55 struct padata_instance *pinst;
56 struct padata_queue *queue;
57 atomic_t seq_nr;
58 atomic_t reorder_objects;
59 atomic_t refcnt;
60 unsigned int max_seq_nr;
61 cpumask_var_t cpumask;
62 spinlock_t lock;
63};
64
65struct padata_instance {
66 struct notifier_block cpu_notifier;
67 struct workqueue_struct *wq;
68 struct parallel_data *pd;
69 cpumask_var_t cpumask;
70 struct mutex lock;
71 u8 flags;
72#define PADATA_INIT 1
73#define PADATA_RESET 2
74};
75
76extern struct padata_instance *padata_alloc(const struct cpumask *cpumask,
77 struct workqueue_struct *wq);
78extern void padata_free(struct padata_instance *pinst);
79extern int padata_do_parallel(struct padata_instance *pinst,
80 struct padata_priv *padata, int cb_cpu);
81extern void padata_do_serial(struct padata_priv *padata);
82extern int padata_set_cpumask(struct padata_instance *pinst,
83 cpumask_var_t cpumask);
84extern int padata_add_cpu(struct padata_instance *pinst, int cpu);
85extern int padata_remove_cpu(struct padata_instance *pinst, int cpu);
86extern void padata_start(struct padata_instance *pinst);
87extern void padata_stop(struct padata_instance *pinst);
88#endif
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
index 6b202b173955..5b59f35dcb8f 100644
--- a/include/linux/page-flags.h
+++ b/include/linux/page-flags.h
@@ -8,7 +8,7 @@
8#include <linux/types.h> 8#include <linux/types.h>
9#ifndef __GENERATING_BOUNDS_H 9#ifndef __GENERATING_BOUNDS_H
10#include <linux/mm_types.h> 10#include <linux/mm_types.h>
11#include <linux/bounds.h> 11#include <generated/bounds.h>
12#endif /* !__GENERATING_BOUNDS_H */ 12#endif /* !__GENERATING_BOUNDS_H */
13 13
14/* 14/*
@@ -99,7 +99,7 @@ enum pageflags {
99 PG_buddy, /* Page is free, on buddy lists */ 99 PG_buddy, /* Page is free, on buddy lists */
100 PG_swapbacked, /* Page is backed by RAM/swap */ 100 PG_swapbacked, /* Page is backed by RAM/swap */
101 PG_unevictable, /* Page is "unevictable" */ 101 PG_unevictable, /* Page is "unevictable" */
102#ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT 102#ifdef CONFIG_MMU
103 PG_mlocked, /* Page is vma mlocked */ 103 PG_mlocked, /* Page is vma mlocked */
104#endif 104#endif
105#ifdef CONFIG_ARCH_USES_PG_UNCACHED 105#ifdef CONFIG_ARCH_USES_PG_UNCACHED
@@ -259,12 +259,10 @@ PAGEFLAG_FALSE(SwapCache)
259PAGEFLAG(Unevictable, unevictable) __CLEARPAGEFLAG(Unevictable, unevictable) 259PAGEFLAG(Unevictable, unevictable) __CLEARPAGEFLAG(Unevictable, unevictable)
260 TESTCLEARFLAG(Unevictable, unevictable) 260 TESTCLEARFLAG(Unevictable, unevictable)
261 261
262#ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT 262#ifdef CONFIG_MMU
263#define MLOCK_PAGES 1
264PAGEFLAG(Mlocked, mlocked) __CLEARPAGEFLAG(Mlocked, mlocked) 263PAGEFLAG(Mlocked, mlocked) __CLEARPAGEFLAG(Mlocked, mlocked)
265 TESTSCFLAG(Mlocked, mlocked) __TESTCLEARFLAG(Mlocked, mlocked) 264 TESTSCFLAG(Mlocked, mlocked) __TESTCLEARFLAG(Mlocked, mlocked)
266#else 265#else
267#define MLOCK_PAGES 0
268PAGEFLAG_FALSE(Mlocked) SETPAGEFLAG_NOOP(Mlocked) 266PAGEFLAG_FALSE(Mlocked) SETPAGEFLAG_NOOP(Mlocked)
269 TESTCLEARFLAG_FALSE(Mlocked) __TESTCLEARFLAG_FALSE(Mlocked) 267 TESTCLEARFLAG_FALSE(Mlocked) __TESTCLEARFLAG_FALSE(Mlocked)
270#endif 268#endif
@@ -277,13 +275,15 @@ PAGEFLAG_FALSE(Uncached)
277 275
278#ifdef CONFIG_MEMORY_FAILURE 276#ifdef CONFIG_MEMORY_FAILURE
279PAGEFLAG(HWPoison, hwpoison) 277PAGEFLAG(HWPoison, hwpoison)
280TESTSETFLAG(HWPoison, hwpoison) 278TESTSCFLAG(HWPoison, hwpoison)
281#define __PG_HWPOISON (1UL << PG_hwpoison) 279#define __PG_HWPOISON (1UL << PG_hwpoison)
282#else 280#else
283PAGEFLAG_FALSE(HWPoison) 281PAGEFLAG_FALSE(HWPoison)
284#define __PG_HWPOISON 0 282#define __PG_HWPOISON 0
285#endif 283#endif
286 284
285u64 stable_page_flags(struct page *page);
286
287static inline int PageUptodate(struct page *page) 287static inline int PageUptodate(struct page *page)
288{ 288{
289 int ret = test_bit(PG_uptodate, &(page)->flags); 289 int ret = test_bit(PG_uptodate, &(page)->flags);
@@ -393,7 +393,7 @@ static inline void __ClearPageTail(struct page *page)
393 393
394#endif /* !PAGEFLAGS_EXTENDED */ 394#endif /* !PAGEFLAGS_EXTENDED */
395 395
396#ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT 396#ifdef CONFIG_MMU
397#define __PG_MLOCKED (1 << PG_mlocked) 397#define __PG_MLOCKED (1 << PG_mlocked)
398#else 398#else
399#define __PG_MLOCKED 0 399#define __PG_MLOCKED 0
diff --git a/include/linux/page_cgroup.h b/include/linux/page_cgroup.h
index 4b938d4f3ac2..aef22ae2af47 100644
--- a/include/linux/page_cgroup.h
+++ b/include/linux/page_cgroup.h
@@ -39,6 +39,7 @@ enum {
39 PCG_CACHE, /* charged as cache */ 39 PCG_CACHE, /* charged as cache */
40 PCG_USED, /* this object is in use. */ 40 PCG_USED, /* this object is in use. */
41 PCG_ACCT_LRU, /* page has been accounted for */ 41 PCG_ACCT_LRU, /* page has been accounted for */
42 PCG_FILE_MAPPED, /* page is accounted as "mapped" */
42}; 43};
43 44
44#define TESTPCGFLAG(uname, lname) \ 45#define TESTPCGFLAG(uname, lname) \
@@ -57,6 +58,8 @@ static inline void ClearPageCgroup##uname(struct page_cgroup *pc) \
57static inline int TestClearPageCgroup##uname(struct page_cgroup *pc) \ 58static inline int TestClearPageCgroup##uname(struct page_cgroup *pc) \
58 { return test_and_clear_bit(PCG_##lname, &pc->flags); } 59 { return test_and_clear_bit(PCG_##lname, &pc->flags); }
59 60
61TESTPCGFLAG(Locked, LOCK)
62
60/* Cache flag is set only once (at allocation) */ 63/* Cache flag is set only once (at allocation) */
61TESTPCGFLAG(Cache, CACHE) 64TESTPCGFLAG(Cache, CACHE)
62CLEARPCGFLAG(Cache, CACHE) 65CLEARPCGFLAG(Cache, CACHE)
@@ -71,6 +74,11 @@ CLEARPCGFLAG(AcctLRU, ACCT_LRU)
71TESTPCGFLAG(AcctLRU, ACCT_LRU) 74TESTPCGFLAG(AcctLRU, ACCT_LRU)
72TESTCLEARPCGFLAG(AcctLRU, ACCT_LRU) 75TESTCLEARPCGFLAG(AcctLRU, ACCT_LRU)
73 76
77
78SETPCGFLAG(FileMapped, FILE_MAPPED)
79CLEARPCGFLAG(FileMapped, FILE_MAPPED)
80TESTPCGFLAG(FileMapped, FILE_MAPPED)
81
74static inline int page_cgroup_nid(struct page_cgroup *pc) 82static inline int page_cgroup_nid(struct page_cgroup *pc)
75{ 83{
76 return page_to_nid(pc->page); 84 return page_to_nid(pc->page);
@@ -86,11 +94,6 @@ static inline void lock_page_cgroup(struct page_cgroup *pc)
86 bit_spin_lock(PCG_LOCK, &pc->flags); 94 bit_spin_lock(PCG_LOCK, &pc->flags);
87} 95}
88 96
89static inline int trylock_page_cgroup(struct page_cgroup *pc)
90{
91 return bit_spin_trylock(PCG_LOCK, &pc->flags);
92}
93
94static inline void unlock_page_cgroup(struct page_cgroup *pc) 97static inline void unlock_page_cgroup(struct page_cgroup *pc)
95{ 98{
96 bit_spin_unlock(PCG_LOCK, &pc->flags); 99 bit_spin_unlock(PCG_LOCK, &pc->flags);
@@ -121,6 +124,8 @@ static inline void __init page_cgroup_init_flatmem(void)
121#include <linux/swap.h> 124#include <linux/swap.h>
122 125
123#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP 126#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
127extern unsigned short swap_cgroup_cmpxchg(swp_entry_t ent,
128 unsigned short old, unsigned short new);
124extern unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id); 129extern unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id);
125extern unsigned short lookup_swap_cgroup(swp_entry_t ent); 130extern unsigned short lookup_swap_cgroup(swp_entry_t ent);
126extern int swap_cgroup_swapon(int type, unsigned long max_pages); 131extern int swap_cgroup_swapon(int type, unsigned long max_pages);
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index ed5d7501e181..3c62ed408492 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -253,6 +253,8 @@ extern struct page * read_cache_page_async(struct address_space *mapping,
253extern struct page * read_cache_page(struct address_space *mapping, 253extern struct page * read_cache_page(struct address_space *mapping,
254 pgoff_t index, filler_t *filler, 254 pgoff_t index, filler_t *filler,
255 void *data); 255 void *data);
256extern struct page * read_cache_page_gfp(struct address_space *mapping,
257 pgoff_t index, gfp_t gfp_mask);
256extern int read_cache_pages(struct address_space *mapping, 258extern int read_cache_pages(struct address_space *mapping,
257 struct list_head *pages, filler_t *filler, void *data); 259 struct list_head *pages, filler_t *filler, void *data);
258 260
diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h
index 93a7c08f869d..c8b6473c5f42 100644
--- a/include/linux/pci-acpi.h
+++ b/include/linux/pci-acpi.h
@@ -11,6 +11,13 @@
11#include <linux/acpi.h> 11#include <linux/acpi.h>
12 12
13#ifdef CONFIG_ACPI 13#ifdef CONFIG_ACPI
14extern acpi_status pci_acpi_add_bus_pm_notifier(struct acpi_device *dev,
15 struct pci_bus *pci_bus);
16extern acpi_status pci_acpi_remove_bus_pm_notifier(struct acpi_device *dev);
17extern acpi_status pci_acpi_add_pm_notifier(struct acpi_device *dev,
18 struct pci_dev *pci_dev);
19extern acpi_status pci_acpi_remove_pm_notifier(struct acpi_device *dev);
20
14static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev) 21static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev)
15{ 22{
16 struct pci_bus *pbus = pdev->bus; 23 struct pci_bus *pbus = pdev->bus;
diff --git a/include/linux/pci-dma.h b/include/linux/pci-dma.h
new file mode 100644
index 000000000000..549a041f9c08
--- /dev/null
+++ b/include/linux/pci-dma.h
@@ -0,0 +1,11 @@
1#ifndef _LINUX_PCI_DMA_H
2#define _LINUX_PCI_DMA_H
3
4#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) DEFINE_DMA_UNMAP_ADDR(ADDR_NAME);
5#define DECLARE_PCI_UNMAP_LEN(LEN_NAME) DEFINE_DMA_UNMAP_LEN(LEN_NAME);
6#define pci_unmap_addr dma_unmap_addr
7#define pci_unmap_addr_set dma_unmap_addr_set
8#define pci_unmap_len dma_unmap_len
9#define pci_unmap_len_set dma_unmap_len_set
10
11#endif
diff --git a/include/linux/pci.h b/include/linux/pci.h
index f5c7cd343e56..a788fa12ff31 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -187,6 +187,33 @@ enum pci_bus_flags {
187 PCI_BUS_FLAGS_NO_MMRBC = (__force pci_bus_flags_t) 2, 187 PCI_BUS_FLAGS_NO_MMRBC = (__force pci_bus_flags_t) 2,
188}; 188};
189 189
190/* Based on the PCI Hotplug Spec, but some values are made up by us */
191enum pci_bus_speed {
192 PCI_SPEED_33MHz = 0x00,
193 PCI_SPEED_66MHz = 0x01,
194 PCI_SPEED_66MHz_PCIX = 0x02,
195 PCI_SPEED_100MHz_PCIX = 0x03,
196 PCI_SPEED_133MHz_PCIX = 0x04,
197 PCI_SPEED_66MHz_PCIX_ECC = 0x05,
198 PCI_SPEED_100MHz_PCIX_ECC = 0x06,
199 PCI_SPEED_133MHz_PCIX_ECC = 0x07,
200 PCI_SPEED_66MHz_PCIX_266 = 0x09,
201 PCI_SPEED_100MHz_PCIX_266 = 0x0a,
202 PCI_SPEED_133MHz_PCIX_266 = 0x0b,
203 AGP_UNKNOWN = 0x0c,
204 AGP_1X = 0x0d,
205 AGP_2X = 0x0e,
206 AGP_4X = 0x0f,
207 AGP_8X = 0x10,
208 PCI_SPEED_66MHz_PCIX_533 = 0x11,
209 PCI_SPEED_100MHz_PCIX_533 = 0x12,
210 PCI_SPEED_133MHz_PCIX_533 = 0x13,
211 PCIE_SPEED_2_5GT = 0x14,
212 PCIE_SPEED_5_0GT = 0x15,
213 PCIE_SPEED_8_0GT = 0x16,
214 PCI_SPEED_UNKNOWN = 0xff,
215};
216
190struct pci_cap_saved_state { 217struct pci_cap_saved_state {
191 struct hlist_node next; 218 struct hlist_node next;
192 char cap_nr; 219 char cap_nr;
@@ -218,6 +245,7 @@ struct pci_dev {
218 unsigned int class; /* 3 bytes: (base,sub,prog-if) */ 245 unsigned int class; /* 3 bytes: (base,sub,prog-if) */
219 u8 revision; /* PCI revision, low byte of class word */ 246 u8 revision; /* PCI revision, low byte of class word */
220 u8 hdr_type; /* PCI header type (`multi' flag masked out) */ 247 u8 hdr_type; /* PCI header type (`multi' flag masked out) */
248 u8 pcie_cap; /* PCI-E capability offset */
221 u8 pcie_type; /* PCI-E device/port type */ 249 u8 pcie_type; /* PCI-E device/port type */
222 u8 rom_base_reg; /* which config register controls the ROM */ 250 u8 rom_base_reg; /* which config register controls the ROM */
223 u8 pin; /* which interrupt pin this device uses */ 251 u8 pin; /* which interrupt pin this device uses */
@@ -238,10 +266,12 @@ struct pci_dev {
238 configuration space */ 266 configuration space */
239 unsigned int pme_support:5; /* Bitmask of states from which PME# 267 unsigned int pme_support:5; /* Bitmask of states from which PME#
240 can be generated */ 268 can be generated */
269 unsigned int pme_interrupt:1;
241 unsigned int d1_support:1; /* Low power state D1 is supported */ 270 unsigned int d1_support:1; /* Low power state D1 is supported */
242 unsigned int d2_support:1; /* Low power state D2 is supported */ 271 unsigned int d2_support:1; /* Low power state D2 is supported */
243 unsigned int no_d1d2:1; /* Only allow D0 and D3 */ 272 unsigned int no_d1d2:1; /* Only allow D0 and D3 */
244 unsigned int wakeup_prepared:1; 273 unsigned int wakeup_prepared:1;
274 unsigned int d3_delay; /* D3->D0 transition time in ms */
245 275
246#ifdef CONFIG_PCIEASPM 276#ifdef CONFIG_PCIEASPM
247 struct pcie_link_state *link_state; /* ASPM link state. */ 277 struct pcie_link_state *link_state; /* ASPM link state. */
@@ -273,13 +303,15 @@ struct pci_dev {
273 unsigned int msix_enabled:1; 303 unsigned int msix_enabled:1;
274 unsigned int ari_enabled:1; /* ARI forwarding */ 304 unsigned int ari_enabled:1; /* ARI forwarding */
275 unsigned int is_managed:1; 305 unsigned int is_managed:1;
276 unsigned int is_pcie:1; 306 unsigned int is_pcie:1; /* Obsolete. Will be removed.
307 Use pci_is_pcie() instead */
277 unsigned int needs_freset:1; /* Dev requires fundamental reset */ 308 unsigned int needs_freset:1; /* Dev requires fundamental reset */
278 unsigned int state_saved:1; 309 unsigned int state_saved:1;
279 unsigned int is_physfn:1; 310 unsigned int is_physfn:1;
280 unsigned int is_virtfn:1; 311 unsigned int is_virtfn:1;
281 unsigned int reset_fn:1; 312 unsigned int reset_fn:1;
282 unsigned int is_hotplug_bridge:1; 313 unsigned int is_hotplug_bridge:1;
314 unsigned int aer_firmware_first:1;
283 pci_dev_flags_t dev_flags; 315 pci_dev_flags_t dev_flags;
284 atomic_t enable_cnt; /* pci_enable_device has been called */ 316 atomic_t enable_cnt; /* pci_enable_device has been called */
285 317
@@ -332,9 +364,26 @@ static inline void pci_add_saved_cap(struct pci_dev *pci_dev,
332 hlist_add_head(&new_cap->next, &pci_dev->saved_cap_space); 364 hlist_add_head(&new_cap->next, &pci_dev->saved_cap_space);
333} 365}
334 366
335#ifndef PCI_BUS_NUM_RESOURCES 367/*
336#define PCI_BUS_NUM_RESOURCES 16 368 * The first PCI_BRIDGE_RESOURCE_NUM PCI bus resources (those that correspond
337#endif 369 * to P2P or CardBus bridge windows) go in a table. Additional ones (for
370 * buses below host bridges or subtractive decode bridges) go in the list.
371 * Use pci_bus_for_each_resource() to iterate through all the resources.
372 */
373
374/*
375 * PCI_SUBTRACTIVE_DECODE means the bridge forwards the window implicitly
376 * and there's no way to program the bridge with the details of the window.
377 * This does not apply to ACPI _CRS windows, even with the _DEC subtractive-
378 * decode bit set, because they are explicit and can be programmed with _SRS.
379 */
380#define PCI_SUBTRACTIVE_DECODE 0x1
381
382struct pci_bus_resource {
383 struct list_head list;
384 struct resource *res;
385 unsigned int flags;
386};
338 387
339#define PCI_REGION_FLAG_MASK 0x0fU /* These bits of resource flags tell us the PCI region flags */ 388#define PCI_REGION_FLAG_MASK 0x0fU /* These bits of resource flags tell us the PCI region flags */
340 389
@@ -345,8 +394,8 @@ struct pci_bus {
345 struct list_head devices; /* list of devices on this bus */ 394 struct list_head devices; /* list of devices on this bus */
346 struct pci_dev *self; /* bridge device as seen by parent */ 395 struct pci_dev *self; /* bridge device as seen by parent */
347 struct list_head slots; /* list of slots on this bus */ 396 struct list_head slots; /* list of slots on this bus */
348 struct resource *resource[PCI_BUS_NUM_RESOURCES]; 397 struct resource *resource[PCI_BRIDGE_RESOURCE_NUM];
349 /* address space routed to this bus */ 398 struct list_head resources; /* address space routed to this bus */
350 399
351 struct pci_ops *ops; /* configuration access functions */ 400 struct pci_ops *ops; /* configuration access functions */
352 void *sysdata; /* hook for sys-specific extension */ 401 void *sysdata; /* hook for sys-specific extension */
@@ -356,6 +405,8 @@ struct pci_bus {
356 unsigned char primary; /* number of primary bridge */ 405 unsigned char primary; /* number of primary bridge */
357 unsigned char secondary; /* number of secondary bridge */ 406 unsigned char secondary; /* number of secondary bridge */
358 unsigned char subordinate; /* max number of subordinate buses */ 407 unsigned char subordinate; /* max number of subordinate buses */
408 unsigned char max_bus_speed; /* enum pci_bus_speed */
409 unsigned char cur_bus_speed; /* enum pci_bus_speed */
359 410
360 char name[48]; 411 char name[48];
361 412
@@ -560,10 +611,14 @@ int __must_check pcibios_enable_device(struct pci_dev *, int mask);
560char *pcibios_setup(char *str); 611char *pcibios_setup(char *str);
561 612
562/* Used only when drivers/pci/setup.c is used */ 613/* Used only when drivers/pci/setup.c is used */
563void pcibios_align_resource(void *, struct resource *, resource_size_t, 614resource_size_t pcibios_align_resource(void *, const struct resource *,
615 resource_size_t,
564 resource_size_t); 616 resource_size_t);
565void pcibios_update_irq(struct pci_dev *, int irq); 617void pcibios_update_irq(struct pci_dev *, int irq);
566 618
619/* Weak but can be overriden by arch */
620void pci_fixup_cardbus(struct pci_bus *);
621
567/* Generic PCI functions used internally */ 622/* Generic PCI functions used internally */
568 623
569extern struct pci_bus *pci_find_bus(int domain, int busnr); 624extern struct pci_bus *pci_find_bus(int domain, int busnr);
@@ -583,6 +638,7 @@ struct pci_bus *pci_create_bus(struct device *parent, int bus,
583 struct pci_ops *ops, void *sysdata); 638 struct pci_ops *ops, void *sysdata);
584struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, 639struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
585 int busnr); 640 int busnr);
641void pcie_update_link_speed(struct pci_bus *bus, u16 link_status);
586struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr, 642struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr,
587 const char *name, 643 const char *name,
588 struct hotplug_slot *hotplug); 644 struct hotplug_slot *hotplug);
@@ -606,15 +662,12 @@ extern void pci_remove_bus_device(struct pci_dev *dev);
606extern void pci_stop_bus_device(struct pci_dev *dev); 662extern void pci_stop_bus_device(struct pci_dev *dev);
607void pci_setup_cardbus(struct pci_bus *bus); 663void pci_setup_cardbus(struct pci_bus *bus);
608extern void pci_sort_breadthfirst(void); 664extern void pci_sort_breadthfirst(void);
665#define dev_is_pci(d) ((d)->bus == &pci_bus_type)
666#define dev_is_pf(d) ((dev_is_pci(d) ? to_pci_dev(d)->is_physfn : false))
667#define dev_num_vf(d) ((dev_is_pci(d) ? pci_num_vf(to_pci_dev(d)) : 0))
609 668
610/* Generic PCI functions exported to card drivers */ 669/* Generic PCI functions exported to card drivers */
611 670
612#ifdef CONFIG_PCI_LEGACY
613struct pci_dev __deprecated *pci_find_device(unsigned int vendor,
614 unsigned int device,
615 struct pci_dev *from);
616#endif /* CONFIG_PCI_LEGACY */
617
618enum pci_lost_interrupt_reason { 671enum pci_lost_interrupt_reason {
619 PCI_LOST_IRQ_NO_INFORMATION = 0, 672 PCI_LOST_IRQ_NO_INFORMATION = 0,
620 PCI_LOST_IRQ_DISABLE_MSI, 673 PCI_LOST_IRQ_DISABLE_MSI,
@@ -625,6 +678,8 @@ enum pci_lost_interrupt_reason pci_lost_interrupt(struct pci_dev *dev);
625int pci_find_capability(struct pci_dev *dev, int cap); 678int pci_find_capability(struct pci_dev *dev, int cap);
626int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap); 679int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap);
627int pci_find_ext_capability(struct pci_dev *dev, int cap); 680int pci_find_ext_capability(struct pci_dev *dev, int cap);
681int pci_bus_find_ext_capability(struct pci_bus *bus, unsigned int devfn,
682 int cap);
628int pci_find_ht_capability(struct pci_dev *dev, int ht_cap); 683int pci_find_ht_capability(struct pci_dev *dev, int ht_cap);
629int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap); 684int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap);
630struct pci_bus *pci_find_next_bus(const struct pci_bus *from); 685struct pci_bus *pci_find_next_bus(const struct pci_bus *from);
@@ -635,7 +690,13 @@ struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device,
635 unsigned int ss_vendor, unsigned int ss_device, 690 unsigned int ss_vendor, unsigned int ss_device,
636 struct pci_dev *from); 691 struct pci_dev *from);
637struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn); 692struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn);
638struct pci_dev *pci_get_bus_and_slot(unsigned int bus, unsigned int devfn); 693struct pci_dev *pci_get_domain_bus_and_slot(int domain, unsigned int bus,
694 unsigned int devfn);
695static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
696 unsigned int devfn)
697{
698 return pci_get_domain_bus_and_slot(0, bus, devfn);
699}
639struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from); 700struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from);
640int pci_dev_present(const struct pci_device_id *ids); 701int pci_dev_present(const struct pci_device_id *ids);
641 702
@@ -701,14 +762,13 @@ void pci_disable_device(struct pci_dev *dev);
701void pci_set_master(struct pci_dev *dev); 762void pci_set_master(struct pci_dev *dev);
702void pci_clear_master(struct pci_dev *dev); 763void pci_clear_master(struct pci_dev *dev);
703int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state); 764int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state);
765int pci_set_cacheline_size(struct pci_dev *dev);
704#define HAVE_PCI_SET_MWI 766#define HAVE_PCI_SET_MWI
705int __must_check pci_set_mwi(struct pci_dev *dev); 767int __must_check pci_set_mwi(struct pci_dev *dev);
706int pci_try_set_mwi(struct pci_dev *dev); 768int pci_try_set_mwi(struct pci_dev *dev);
707void pci_clear_mwi(struct pci_dev *dev); 769void pci_clear_mwi(struct pci_dev *dev);
708void pci_intx(struct pci_dev *dev, int enable); 770void pci_intx(struct pci_dev *dev, int enable);
709void pci_msi_off(struct pci_dev *dev); 771void pci_msi_off(struct pci_dev *dev);
710int pci_set_dma_mask(struct pci_dev *dev, u64 mask);
711int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask);
712int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size); 772int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size);
713int pci_set_dma_seg_boundary(struct pci_dev *dev, unsigned long mask); 773int pci_set_dma_seg_boundary(struct pci_dev *dev, unsigned long mask);
714int pcix_get_max_mmrbc(struct pci_dev *dev); 774int pcix_get_max_mmrbc(struct pci_dev *dev);
@@ -737,11 +797,23 @@ int pci_set_power_state(struct pci_dev *dev, pci_power_t state);
737pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state); 797pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state);
738bool pci_pme_capable(struct pci_dev *dev, pci_power_t state); 798bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
739void pci_pme_active(struct pci_dev *dev, bool enable); 799void pci_pme_active(struct pci_dev *dev, bool enable);
740int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable); 800int __pci_enable_wake(struct pci_dev *dev, pci_power_t state,
801 bool runtime, bool enable);
741int pci_wake_from_d3(struct pci_dev *dev, bool enable); 802int pci_wake_from_d3(struct pci_dev *dev, bool enable);
742pci_power_t pci_target_state(struct pci_dev *dev); 803pci_power_t pci_target_state(struct pci_dev *dev);
743int pci_prepare_to_sleep(struct pci_dev *dev); 804int pci_prepare_to_sleep(struct pci_dev *dev);
744int pci_back_from_sleep(struct pci_dev *dev); 805int pci_back_from_sleep(struct pci_dev *dev);
806bool pci_dev_run_wake(struct pci_dev *dev);
807
808static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state,
809 bool enable)
810{
811 return __pci_enable_wake(dev, state, false, enable);
812}
813
814/* For use by arch with custom probe code */
815void set_pcie_port_type(struct pci_dev *pdev);
816void set_pcie_hotplug_bridge(struct pci_dev *pdev);
745 817
746/* Functions for PCI Hotplug drivers to use */ 818/* Functions for PCI Hotplug drivers to use */
747int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap); 819int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap);
@@ -759,6 +831,7 @@ void pci_bus_assign_resources(const struct pci_bus *bus);
759void pci_bus_size_bridges(struct pci_bus *bus); 831void pci_bus_size_bridges(struct pci_bus *bus);
760int pci_claim_resource(struct pci_dev *, int); 832int pci_claim_resource(struct pci_dev *, int);
761void pci_assign_unassigned_resources(void); 833void pci_assign_unassigned_resources(void);
834void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge);
762void pdev_enable_device(struct pci_dev *); 835void pdev_enable_device(struct pci_dev *);
763void pdev_sort_resources(struct pci_dev *, struct resource_list *); 836void pdev_sort_resources(struct pci_dev *, struct resource_list *);
764int pci_enable_resources(struct pci_dev *, int mask); 837int pci_enable_resources(struct pci_dev *, int mask);
@@ -776,12 +849,23 @@ int pci_request_selected_regions_exclusive(struct pci_dev *, int, const char *);
776void pci_release_selected_regions(struct pci_dev *, int); 849void pci_release_selected_regions(struct pci_dev *, int);
777 850
778/* drivers/pci/bus.c */ 851/* drivers/pci/bus.c */
852void pci_bus_add_resource(struct pci_bus *bus, struct resource *res, unsigned int flags);
853struct resource *pci_bus_resource_n(const struct pci_bus *bus, int n);
854void pci_bus_remove_resources(struct pci_bus *bus);
855
856#define pci_bus_for_each_resource(bus, res, i) \
857 for (i = 0; \
858 (res = pci_bus_resource_n(bus, i)) || i < PCI_BRIDGE_RESOURCE_NUM; \
859 i++)
860
779int __must_check pci_bus_alloc_resource(struct pci_bus *bus, 861int __must_check pci_bus_alloc_resource(struct pci_bus *bus,
780 struct resource *res, resource_size_t size, 862 struct resource *res, resource_size_t size,
781 resource_size_t align, resource_size_t min, 863 resource_size_t align, resource_size_t min,
782 unsigned int type_mask, 864 unsigned int type_mask,
783 void (*alignf)(void *, struct resource *, 865 resource_size_t (*alignf)(void *,
784 resource_size_t, resource_size_t), 866 const struct resource *,
867 resource_size_t,
868 resource_size_t),
785 void *alignf_data); 869 void *alignf_data);
786void pci_enable_bridges(struct pci_bus *bus); 870void pci_enable_bridges(struct pci_bus *bus);
787 871
@@ -818,6 +902,7 @@ int pci_set_vga_state(struct pci_dev *pdev, bool decode,
818 unsigned int command_bits, bool change_bridge); 902 unsigned int command_bits, bool change_bridge);
819/* kmem_cache style wrapper around pci_alloc_consistent() */ 903/* kmem_cache style wrapper around pci_alloc_consistent() */
820 904
905#include <linux/pci-dma.h>
821#include <linux/dmapool.h> 906#include <linux/dmapool.h>
822 907
823#define pci_pool dma_pool 908#define pci_pool dma_pool
@@ -942,6 +1027,11 @@ static inline int pci_proc_domain(struct pci_bus *bus)
942} 1027}
943#endif /* CONFIG_PCI_DOMAINS */ 1028#endif /* CONFIG_PCI_DOMAINS */
944 1029
1030/* some architectures require additional setup to direct VGA traffic */
1031typedef int (*arch_set_vga_state_t)(struct pci_dev *pdev, bool decode,
1032 unsigned int command_bits, bool change_bridge);
1033extern void pci_register_set_vga_state(arch_set_vga_state_t func);
1034
945#else /* CONFIG_PCI is not enabled */ 1035#else /* CONFIG_PCI is not enabled */
946 1036
947/* 1037/*
@@ -960,13 +1050,6 @@ static inline int pci_proc_domain(struct pci_bus *bus)
960_PCI_NOP_ALL(read, *) 1050_PCI_NOP_ALL(read, *)
961_PCI_NOP_ALL(write,) 1051_PCI_NOP_ALL(write,)
962 1052
963static inline struct pci_dev *pci_find_device(unsigned int vendor,
964 unsigned int device,
965 struct pci_dev *from)
966{
967 return NULL;
968}
969
970static inline struct pci_dev *pci_get_device(unsigned int vendor, 1053static inline struct pci_dev *pci_get_device(unsigned int vendor,
971 unsigned int device, 1054 unsigned int device,
972 struct pci_dev *from) 1055 struct pci_dev *from)
@@ -1116,6 +1199,9 @@ static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
1116 unsigned int devfn) 1199 unsigned int devfn)
1117{ return NULL; } 1200{ return NULL; }
1118 1201
1202#define dev_is_pci(d) (false)
1203#define dev_is_pf(d) (false)
1204#define dev_num_vf(d) (0)
1119#endif /* CONFIG_PCI */ 1205#endif /* CONFIG_PCI */
1120 1206
1121/* Include architecture-dependent settings and functions */ 1207/* Include architecture-dependent settings and functions */
@@ -1224,8 +1310,12 @@ enum pci_fixup_pass {
1224 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \ 1310 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \
1225 suspend##vendor##device##hook, vendor, device, hook) 1311 suspend##vendor##device##hook, vendor, device, hook)
1226 1312
1227 1313#ifdef CONFIG_PCI_QUIRKS
1228void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); 1314void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev);
1315#else
1316static inline void pci_fixup_device(enum pci_fixup_pass pass,
1317 struct pci_dev *dev) {}
1318#endif
1229 1319
1230void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen); 1320void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
1231void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr); 1321void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr);
@@ -1246,6 +1336,8 @@ extern int pci_pci_problems;
1246 1336
1247extern unsigned long pci_cardbus_io_size; 1337extern unsigned long pci_cardbus_io_size;
1248extern unsigned long pci_cardbus_mem_size; 1338extern unsigned long pci_cardbus_mem_size;
1339extern u8 __devinitdata pci_dfl_cache_line_size;
1340extern u8 pci_cache_line_size;
1249 1341
1250extern unsigned long pci_hotplug_io_size; 1342extern unsigned long pci_hotplug_io_size;
1251extern unsigned long pci_hotplug_mem_size; 1343extern unsigned long pci_hotplug_mem_size;
@@ -1271,6 +1363,7 @@ void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar);
1271extern int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn); 1363extern int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn);
1272extern void pci_disable_sriov(struct pci_dev *dev); 1364extern void pci_disable_sriov(struct pci_dev *dev);
1273extern irqreturn_t pci_sriov_migration(struct pci_dev *dev); 1365extern irqreturn_t pci_sriov_migration(struct pci_dev *dev);
1366extern int pci_num_vf(struct pci_dev *dev);
1274#else 1367#else
1275static inline int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn) 1368static inline int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn)
1276{ 1369{
@@ -1283,6 +1376,10 @@ static inline irqreturn_t pci_sriov_migration(struct pci_dev *dev)
1283{ 1376{
1284 return IRQ_NONE; 1377 return IRQ_NONE;
1285} 1378}
1379static inline int pci_num_vf(struct pci_dev *dev)
1380{
1381 return 0;
1382}
1286#endif 1383#endif
1287 1384
1288#if defined(CONFIG_HOTPLUG_PCI) || defined(CONFIG_HOTPLUG_PCI_MODULE) 1385#if defined(CONFIG_HOTPLUG_PCI) || defined(CONFIG_HOTPLUG_PCI_MODULE)
@@ -1290,5 +1387,122 @@ extern void pci_hp_create_module_link(struct pci_slot *pci_slot);
1290extern void pci_hp_remove_module_link(struct pci_slot *pci_slot); 1387extern void pci_hp_remove_module_link(struct pci_slot *pci_slot);
1291#endif 1388#endif
1292 1389
1390/**
1391 * pci_pcie_cap - get the saved PCIe capability offset
1392 * @dev: PCI device
1393 *
1394 * PCIe capability offset is calculated at PCI device initialization
1395 * time and saved in the data structure. This function returns saved
1396 * PCIe capability offset. Using this instead of pci_find_capability()
1397 * reduces unnecessary search in the PCI configuration space. If you
1398 * need to calculate PCIe capability offset from raw device for some
1399 * reasons, please use pci_find_capability() instead.
1400 */
1401static inline int pci_pcie_cap(struct pci_dev *dev)
1402{
1403 return dev->pcie_cap;
1404}
1405
1406/**
1407 * pci_is_pcie - check if the PCI device is PCI Express capable
1408 * @dev: PCI device
1409 *
1410 * Retrun true if the PCI device is PCI Express capable, false otherwise.
1411 */
1412static inline bool pci_is_pcie(struct pci_dev *dev)
1413{
1414 return !!pci_pcie_cap(dev);
1415}
1416
1417void pci_request_acs(void);
1418
1419
1420#define PCI_VPD_LRDT 0x80 /* Large Resource Data Type */
1421#define PCI_VPD_LRDT_ID(x) (x | PCI_VPD_LRDT)
1422
1423/* Large Resource Data Type Tag Item Names */
1424#define PCI_VPD_LTIN_ID_STRING 0x02 /* Identifier String */
1425#define PCI_VPD_LTIN_RO_DATA 0x10 /* Read-Only Data */
1426#define PCI_VPD_LTIN_RW_DATA 0x11 /* Read-Write Data */
1427
1428#define PCI_VPD_LRDT_ID_STRING PCI_VPD_LRDT_ID(PCI_VPD_LTIN_ID_STRING)
1429#define PCI_VPD_LRDT_RO_DATA PCI_VPD_LRDT_ID(PCI_VPD_LTIN_RO_DATA)
1430#define PCI_VPD_LRDT_RW_DATA PCI_VPD_LRDT_ID(PCI_VPD_LTIN_RW_DATA)
1431
1432/* Small Resource Data Type Tag Item Names */
1433#define PCI_VPD_STIN_END 0x78 /* End */
1434
1435#define PCI_VPD_SRDT_END PCI_VPD_STIN_END
1436
1437#define PCI_VPD_SRDT_TIN_MASK 0x78
1438#define PCI_VPD_SRDT_LEN_MASK 0x07
1439
1440#define PCI_VPD_LRDT_TAG_SIZE 3
1441#define PCI_VPD_SRDT_TAG_SIZE 1
1442
1443#define PCI_VPD_INFO_FLD_HDR_SIZE 3
1444
1445#define PCI_VPD_RO_KEYWORD_PARTNO "PN"
1446#define PCI_VPD_RO_KEYWORD_MFR_ID "MN"
1447#define PCI_VPD_RO_KEYWORD_VENDOR0 "V0"
1448
1449/**
1450 * pci_vpd_lrdt_size - Extracts the Large Resource Data Type length
1451 * @lrdt: Pointer to the beginning of the Large Resource Data Type tag
1452 *
1453 * Returns the extracted Large Resource Data Type length.
1454 */
1455static inline u16 pci_vpd_lrdt_size(const u8 *lrdt)
1456{
1457 return (u16)lrdt[1] + ((u16)lrdt[2] << 8);
1458}
1459
1460/**
1461 * pci_vpd_srdt_size - Extracts the Small Resource Data Type length
1462 * @lrdt: Pointer to the beginning of the Small Resource Data Type tag
1463 *
1464 * Returns the extracted Small Resource Data Type length.
1465 */
1466static inline u8 pci_vpd_srdt_size(const u8 *srdt)
1467{
1468 return (*srdt) & PCI_VPD_SRDT_LEN_MASK;
1469}
1470
1471/**
1472 * pci_vpd_info_field_size - Extracts the information field length
1473 * @lrdt: Pointer to the beginning of an information field header
1474 *
1475 * Returns the extracted information field length.
1476 */
1477static inline u8 pci_vpd_info_field_size(const u8 *info_field)
1478{
1479 return info_field[2];
1480}
1481
1482/**
1483 * pci_vpd_find_tag - Locates the Resource Data Type tag provided
1484 * @buf: Pointer to buffered vpd data
1485 * @off: The offset into the buffer at which to begin the search
1486 * @len: The length of the vpd buffer
1487 * @rdt: The Resource Data Type to search for
1488 *
1489 * Returns the index where the Resource Data Type was found or
1490 * -ENOENT otherwise.
1491 */
1492int pci_vpd_find_tag(const u8 *buf, unsigned int off, unsigned int len, u8 rdt);
1493
1494/**
1495 * pci_vpd_find_info_keyword - Locates an information field keyword in the VPD
1496 * @buf: Pointer to buffered vpd data
1497 * @off: The offset into the buffer at which to begin the search
1498 * @len: The length of the buffer area, relative to off, in which to search
1499 * @kw: The keyword to search for
1500 *
1501 * Returns the index where the information field keyword was found or
1502 * -ENOENT otherwise.
1503 */
1504int pci_vpd_find_info_keyword(const u8 *buf, unsigned int off,
1505 unsigned int len, const char *kw);
1506
1293#endif /* __KERNEL__ */ 1507#endif /* __KERNEL__ */
1294#endif /* LINUX_PCI_H */ 1508#endif /* LINUX_PCI_H */
diff --git a/include/linux/pci_hotplug.h b/include/linux/pci_hotplug.h
index 652ba797696d..5d09cbafa7db 100644
--- a/include/linux/pci_hotplug.h
+++ b/include/linux/pci_hotplug.h
@@ -28,26 +28,6 @@
28#ifndef _PCI_HOTPLUG_H 28#ifndef _PCI_HOTPLUG_H
29#define _PCI_HOTPLUG_H 29#define _PCI_HOTPLUG_H
30 30
31
32/* These values come from the PCI Hotplug Spec */
33enum pci_bus_speed {
34 PCI_SPEED_33MHz = 0x00,
35 PCI_SPEED_66MHz = 0x01,
36 PCI_SPEED_66MHz_PCIX = 0x02,
37 PCI_SPEED_100MHz_PCIX = 0x03,
38 PCI_SPEED_133MHz_PCIX = 0x04,
39 PCI_SPEED_66MHz_PCIX_ECC = 0x05,
40 PCI_SPEED_100MHz_PCIX_ECC = 0x06,
41 PCI_SPEED_133MHz_PCIX_ECC = 0x07,
42 PCI_SPEED_66MHz_PCIX_266 = 0x09,
43 PCI_SPEED_100MHz_PCIX_266 = 0x0a,
44 PCI_SPEED_133MHz_PCIX_266 = 0x0b,
45 PCI_SPEED_66MHz_PCIX_533 = 0x11,
46 PCI_SPEED_100MHz_PCIX_533 = 0x12,
47 PCI_SPEED_133MHz_PCIX_533 = 0x13,
48 PCI_SPEED_UNKNOWN = 0xff,
49};
50
51/* These values come from the PCI Express Spec */ 31/* These values come from the PCI Express Spec */
52enum pcie_link_width { 32enum pcie_link_width {
53 PCIE_LNK_WIDTH_RESRV = 0x00, 33 PCIE_LNK_WIDTH_RESRV = 0x00,
@@ -61,12 +41,6 @@ enum pcie_link_width {
61 PCIE_LNK_WIDTH_UNKNOWN = 0xFF, 41 PCIE_LNK_WIDTH_UNKNOWN = 0xFF,
62}; 42};
63 43
64enum pcie_link_speed {
65 PCIE_2_5GB = 0x14,
66 PCIE_5_0GB = 0x15,
67 PCIE_LNK_SPEED_UNKNOWN = 0xFF,
68};
69
70/** 44/**
71 * struct hotplug_slot_ops -the callbacks that the hotplug pci core can use 45 * struct hotplug_slot_ops -the callbacks that the hotplug pci core can use
72 * @owner: The module owner of this structure 46 * @owner: The module owner of this structure
@@ -89,12 +63,6 @@ enum pcie_link_speed {
89 * @get_adapter_status: Called to get see if an adapter is present in the slot or not. 63 * @get_adapter_status: Called to get see if an adapter is present in the slot or not.
90 * If this field is NULL, the value passed in the struct hotplug_slot_info 64 * If this field is NULL, the value passed in the struct hotplug_slot_info
91 * will be used when this value is requested by a user. 65 * will be used when this value is requested by a user.
92 * @get_max_bus_speed: Called to get the max bus speed for a slot.
93 * If this field is NULL, the value passed in the struct hotplug_slot_info
94 * will be used when this value is requested by a user.
95 * @get_cur_bus_speed: Called to get the current bus speed for a slot.
96 * If this field is NULL, the value passed in the struct hotplug_slot_info
97 * will be used when this value is requested by a user.
98 * 66 *
99 * The table of function pointers that is passed to the hotplug pci core by a 67 * The table of function pointers that is passed to the hotplug pci core by a
100 * hotplug pci driver. These functions are called by the hotplug pci core when 68 * hotplug pci driver. These functions are called by the hotplug pci core when
@@ -112,17 +80,14 @@ struct hotplug_slot_ops {
112 int (*get_attention_status) (struct hotplug_slot *slot, u8 *value); 80 int (*get_attention_status) (struct hotplug_slot *slot, u8 *value);
113 int (*get_latch_status) (struct hotplug_slot *slot, u8 *value); 81 int (*get_latch_status) (struct hotplug_slot *slot, u8 *value);
114 int (*get_adapter_status) (struct hotplug_slot *slot, u8 *value); 82 int (*get_adapter_status) (struct hotplug_slot *slot, u8 *value);
115 int (*get_max_bus_speed) (struct hotplug_slot *slot, enum pci_bus_speed *value);
116 int (*get_cur_bus_speed) (struct hotplug_slot *slot, enum pci_bus_speed *value);
117}; 83};
118 84
119/** 85/**
120 * struct hotplug_slot_info - used to notify the hotplug pci core of the state of the slot 86 * struct hotplug_slot_info - used to notify the hotplug pci core of the state of the slot
121 * @power: if power is enabled or not (1/0) 87 * @power_status: if power is enabled or not (1/0)
122 * @attention_status: if the attention light is enabled or not (1/0) 88 * @attention_status: if the attention light is enabled or not (1/0)
123 * @latch_status: if the latch (if any) is open or closed (1/0) 89 * @latch_status: if the latch (if any) is open or closed (1/0)
124 * @adapter_present: if there is a pci board present in the slot or not (1/0) 90 * @adapter_status: if there is a pci board present in the slot or not (1/0)
125 * @address: (domain << 16 | bus << 8 | dev)
126 * 91 *
127 * Used to notify the hotplug pci core of the status of a specific slot. 92 * Used to notify the hotplug pci core of the status of a specific slot.
128 */ 93 */
@@ -131,8 +96,6 @@ struct hotplug_slot_info {
131 u8 attention_status; 96 u8 attention_status;
132 u8 latch_status; 97 u8 latch_status;
133 u8 adapter_status; 98 u8 adapter_status;
134 enum pci_bus_speed max_bus_speed;
135 enum pci_bus_speed cur_bus_speed;
136}; 99};
137 100
138/** 101/**
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 84cf1f3b7838..9f688d243b86 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -770,7 +770,6 @@
770#define PCI_VENDOR_ID_TI 0x104c 770#define PCI_VENDOR_ID_TI 0x104c
771#define PCI_DEVICE_ID_TI_TVP4020 0x3d07 771#define PCI_DEVICE_ID_TI_TVP4020 0x3d07
772#define PCI_DEVICE_ID_TI_4450 0x8011 772#define PCI_DEVICE_ID_TI_4450 0x8011
773#define PCI_DEVICE_ID_TI_TSB43AB22 0x8023
774#define PCI_DEVICE_ID_TI_XX21_XX11 0x8031 773#define PCI_DEVICE_ID_TI_XX21_XX11 0x8031
775#define PCI_DEVICE_ID_TI_XX21_XX11_FM 0x8033 774#define PCI_DEVICE_ID_TI_XX21_XX11_FM 0x8033
776#define PCI_DEVICE_ID_TI_XX21_XX11_SD 0x8034 775#define PCI_DEVICE_ID_TI_XX21_XX11_SD 0x8034
@@ -1496,9 +1495,10 @@
1496#define PCI_DEVICE_ID_SBE_WANXL400 0x0104 1495#define PCI_DEVICE_ID_SBE_WANXL400 0x0104
1497 1496
1498#define PCI_VENDOR_ID_TOSHIBA 0x1179 1497#define PCI_VENDOR_ID_TOSHIBA 0x1179
1499#define PCI_DEVICE_ID_TOSHIBA_PICCOLO 0x0102 1498#define PCI_DEVICE_ID_TOSHIBA_PICCOLO_1 0x0101
1500#define PCI_DEVICE_ID_TOSHIBA_PICCOLO_1 0x0103 1499#define PCI_DEVICE_ID_TOSHIBA_PICCOLO_2 0x0102
1501#define PCI_DEVICE_ID_TOSHIBA_PICCOLO_2 0x0105 1500#define PCI_DEVICE_ID_TOSHIBA_PICCOLO_3 0x0103
1501#define PCI_DEVICE_ID_TOSHIBA_PICCOLO_5 0x0105
1502#define PCI_DEVICE_ID_TOSHIBA_TOPIC95 0x060a 1502#define PCI_DEVICE_ID_TOSHIBA_TOPIC95 0x060a
1503#define PCI_DEVICE_ID_TOSHIBA_TOPIC97 0x060f 1503#define PCI_DEVICE_ID_TOSHIBA_TOPIC97 0x060f
1504#define PCI_DEVICE_ID_TOSHIBA_TOPIC100 0x0617 1504#define PCI_DEVICE_ID_TOSHIBA_TOPIC100 0x0617
@@ -1586,6 +1586,8 @@
1586#define PCI_VENDOR_ID_COMPEX 0x11f6 1586#define PCI_VENDOR_ID_COMPEX 0x11f6
1587#define PCI_DEVICE_ID_COMPEX_ENET100VG4 0x0112 1587#define PCI_DEVICE_ID_COMPEX_ENET100VG4 0x0112
1588 1588
1589#define PCI_VENDOR_ID_PMC_Sierra 0x11f8
1590
1589#define PCI_VENDOR_ID_RP 0x11fe 1591#define PCI_VENDOR_ID_RP 0x11fe
1590#define PCI_DEVICE_ID_RP32INTF 0x0001 1592#define PCI_DEVICE_ID_RP32INTF 0x0001
1591#define PCI_DEVICE_ID_RP8INTF 0x0002 1593#define PCI_DEVICE_ID_RP8INTF 0x0002
@@ -1633,6 +1635,8 @@
1633#define PCI_DEVICE_ID_O2_6730 0x673a 1635#define PCI_DEVICE_ID_O2_6730 0x673a
1634#define PCI_DEVICE_ID_O2_6832 0x6832 1636#define PCI_DEVICE_ID_O2_6832 0x6832
1635#define PCI_DEVICE_ID_O2_6836 0x6836 1637#define PCI_DEVICE_ID_O2_6836 0x6836
1638#define PCI_DEVICE_ID_O2_6812 0x6872
1639#define PCI_DEVICE_ID_O2_6933 0x6933
1636 1640
1637#define PCI_VENDOR_ID_3DFX 0x121a 1641#define PCI_VENDOR_ID_3DFX 0x121a
1638#define PCI_DEVICE_ID_3DFX_VOODOO 0x0001 1642#define PCI_DEVICE_ID_3DFX_VOODOO 0x0001
@@ -2290,6 +2294,20 @@
2290#define PCI_DEVICE_ID_MPC8536 0x0051 2294#define PCI_DEVICE_ID_MPC8536 0x0051
2291#define PCI_DEVICE_ID_P2020E 0x0070 2295#define PCI_DEVICE_ID_P2020E 0x0070
2292#define PCI_DEVICE_ID_P2020 0x0071 2296#define PCI_DEVICE_ID_P2020 0x0071
2297#define PCI_DEVICE_ID_P2010E 0x0078
2298#define PCI_DEVICE_ID_P2010 0x0079
2299#define PCI_DEVICE_ID_P1020E 0x0100
2300#define PCI_DEVICE_ID_P1020 0x0101
2301#define PCI_DEVICE_ID_P1011E 0x0108
2302#define PCI_DEVICE_ID_P1011 0x0109
2303#define PCI_DEVICE_ID_P1022E 0x0110
2304#define PCI_DEVICE_ID_P1022 0x0111
2305#define PCI_DEVICE_ID_P1013E 0x0118
2306#define PCI_DEVICE_ID_P1013 0x0119
2307#define PCI_DEVICE_ID_P4080E 0x0400
2308#define PCI_DEVICE_ID_P4080 0x0401
2309#define PCI_DEVICE_ID_P4040E 0x0408
2310#define PCI_DEVICE_ID_P4040 0x0409
2293#define PCI_DEVICE_ID_MPC8641 0x7010 2311#define PCI_DEVICE_ID_MPC8641 0x7010
2294#define PCI_DEVICE_ID_MPC8641D 0x7011 2312#define PCI_DEVICE_ID_MPC8641D 0x7011
2295#define PCI_DEVICE_ID_MPC8610 0x7018 2313#define PCI_DEVICE_ID_MPC8610 0x7018
@@ -2314,6 +2332,8 @@
2314#define PCI_VENDOR_ID_KORENIX 0x1982 2332#define PCI_VENDOR_ID_KORENIX 0x1982
2315#define PCI_DEVICE_ID_KORENIX_JETCARDF0 0x1600 2333#define PCI_DEVICE_ID_KORENIX_JETCARDF0 0x1600
2316#define PCI_DEVICE_ID_KORENIX_JETCARDF1 0x16ff 2334#define PCI_DEVICE_ID_KORENIX_JETCARDF1 0x16ff
2335#define PCI_DEVICE_ID_KORENIX_JETCARDF2 0x1700
2336#define PCI_DEVICE_ID_KORENIX_JETCARDF3 0x17ff
2317 2337
2318#define PCI_VENDOR_ID_QMI 0x1a32 2338#define PCI_VENDOR_ID_QMI 0x1a32
2319 2339
@@ -2398,6 +2418,9 @@
2398#define PCI_DEVICE_ID_INTEL_82840_HB 0x1a21 2418#define PCI_DEVICE_ID_INTEL_82840_HB 0x1a21
2399#define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30 2419#define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30
2400#define PCI_DEVICE_ID_INTEL_IOAT 0x1a38 2420#define PCI_DEVICE_ID_INTEL_IOAT 0x1a38
2421#define PCI_DEVICE_ID_INTEL_CPT_SMBUS 0x1c22
2422#define PCI_DEVICE_ID_INTEL_CPT_LPC1 0x1c42
2423#define PCI_DEVICE_ID_INTEL_CPT_LPC2 0x1c43
2401#define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410 2424#define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410
2402#define PCI_DEVICE_ID_INTEL_82801AA_1 0x2411 2425#define PCI_DEVICE_ID_INTEL_82801AA_1 0x2411
2403#define PCI_DEVICE_ID_INTEL_82801AA_3 0x2413 2426#define PCI_DEVICE_ID_INTEL_82801AA_3 0x2413
@@ -2675,6 +2698,7 @@
2675#define PCI_DEVICE_ID_NETMOS_9835 0x9835 2698#define PCI_DEVICE_ID_NETMOS_9835 0x9835
2676#define PCI_DEVICE_ID_NETMOS_9845 0x9845 2699#define PCI_DEVICE_ID_NETMOS_9845 0x9845
2677#define PCI_DEVICE_ID_NETMOS_9855 0x9855 2700#define PCI_DEVICE_ID_NETMOS_9855 0x9855
2701#define PCI_DEVICE_ID_NETMOS_9865 0x9865
2678#define PCI_DEVICE_ID_NETMOS_9901 0x9901 2702#define PCI_DEVICE_ID_NETMOS_9901 0x9901
2679 2703
2680#define PCI_VENDOR_ID_3COM_2 0xa727 2704#define PCI_VENDOR_ID_3COM_2 0xa727
diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h
index dd0bed4f1cf0..c8f302991b66 100644
--- a/include/linux/pci_regs.h
+++ b/include/linux/pci_regs.h
@@ -365,6 +365,11 @@
365#define PCI_X_STATUS_266MHZ 0x40000000 /* 266 MHz capable */ 365#define PCI_X_STATUS_266MHZ 0x40000000 /* 266 MHz capable */
366#define PCI_X_STATUS_533MHZ 0x80000000 /* 533 MHz capable */ 366#define PCI_X_STATUS_533MHZ 0x80000000 /* 533 MHz capable */
367 367
368/* PCI Bridge Subsystem ID registers */
369
370#define PCI_SSVID_VENDOR_ID 4 /* PCI-Bridge subsystem vendor id register */
371#define PCI_SSVID_DEVICE_ID 6 /* PCI-Bridge subsystem device id register */
372
368/* PCI Express capability registers */ 373/* PCI Express capability registers */
369 374
370#define PCI_EXP_FLAGS 2 /* Capabilities register */ 375#define PCI_EXP_FLAGS 2 /* Capabilities register */
@@ -502,6 +507,8 @@
502#define PCI_EXT_CAP_ID_VC 2 507#define PCI_EXT_CAP_ID_VC 2
503#define PCI_EXT_CAP_ID_DSN 3 508#define PCI_EXT_CAP_ID_DSN 3
504#define PCI_EXT_CAP_ID_PWR 4 509#define PCI_EXT_CAP_ID_PWR 4
510#define PCI_EXT_CAP_ID_VNDR 11
511#define PCI_EXT_CAP_ID_ACS 13
505#define PCI_EXT_CAP_ID_ARI 14 512#define PCI_EXT_CAP_ID_ARI 14
506#define PCI_EXT_CAP_ID_ATS 15 513#define PCI_EXT_CAP_ID_ATS 15
507#define PCI_EXT_CAP_ID_SRIOV 16 514#define PCI_EXT_CAP_ID_SRIOV 16
@@ -662,4 +669,16 @@
662#define PCI_SRIOV_VFM_MO 0x2 /* Active.MigrateOut */ 669#define PCI_SRIOV_VFM_MO 0x2 /* Active.MigrateOut */
663#define PCI_SRIOV_VFM_AV 0x3 /* Active.Available */ 670#define PCI_SRIOV_VFM_AV 0x3 /* Active.Available */
664 671
672/* Access Control Service */
673#define PCI_ACS_CAP 0x04 /* ACS Capability Register */
674#define PCI_ACS_SV 0x01 /* Source Validation */
675#define PCI_ACS_TB 0x02 /* Translation Blocking */
676#define PCI_ACS_RR 0x04 /* P2P Request Redirect */
677#define PCI_ACS_CR 0x08 /* P2P Completion Redirect */
678#define PCI_ACS_UF 0x10 /* Upstream Forwarding */
679#define PCI_ACS_EC 0x20 /* P2P Egress Control */
680#define PCI_ACS_DT 0x40 /* Direct Translated P2P */
681#define PCI_ACS_CTRL 0x06 /* ACS Control Register */
682#define PCI_ACS_EGRESS_CTL_V 0x08 /* ACS Egress Control Vector */
683
665#endif /* LINUX_PCI_REGS_H */ 684#endif /* LINUX_PCI_REGS_H */
diff --git a/include/linux/pcieport_if.h b/include/linux/pcieport_if.h
index b4c79545330b..6775532b92a9 100644
--- a/include/linux/pcieport_if.h
+++ b/include/linux/pcieport_if.h
@@ -10,10 +10,7 @@
10#define _PCIEPORT_IF_H_ 10#define _PCIEPORT_IF_H_
11 11
12/* Port Type */ 12/* Port Type */
13#define PCIE_RC_PORT 4 /* Root port of RC */ 13#define PCIE_ANY_PORT (~0)
14#define PCIE_SW_UPSTREAM_PORT 5 /* Upstream port of Switch */
15#define PCIE_SW_DOWNSTREAM_PORT 6 /* Downstream port of Switch */
16#define PCIE_ANY_PORT 7
17 14
18/* Service Type */ 15/* Service Type */
19#define PCIE_PORT_SERVICE_PME_SHIFT 0 /* Power Management Event */ 16#define PCIE_PORT_SERVICE_PME_SHIFT 0 /* Power Management Event */
@@ -25,17 +22,6 @@
25#define PCIE_PORT_SERVICE_VC_SHIFT 3 /* Virtual Channel */ 22#define PCIE_PORT_SERVICE_VC_SHIFT 3 /* Virtual Channel */
26#define PCIE_PORT_SERVICE_VC (1 << PCIE_PORT_SERVICE_VC_SHIFT) 23#define PCIE_PORT_SERVICE_VC (1 << PCIE_PORT_SERVICE_VC_SHIFT)
27 24
28/* Root/Upstream/Downstream Port's Interrupt Mode */
29#define PCIE_PORT_NO_IRQ (-1)
30#define PCIE_PORT_INTx_MODE 0
31#define PCIE_PORT_MSI_MODE 1
32#define PCIE_PORT_MSIX_MODE 2
33
34struct pcie_port_data {
35 int port_type; /* Type of the port */
36 int port_irq_mode; /* [0:INTx | 1:MSI | 2:MSI-X] */
37};
38
39struct pcie_device { 25struct pcie_device {
40 int irq; /* Service IRQ/MSI/MSI-X Vector */ 26 int irq; /* Service IRQ/MSI/MSI-X Vector */
41 struct pci_dev *port; /* Root/Upstream/Downstream Port */ 27 struct pci_dev *port; /* Root/Upstream/Downstream Port */
diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h
index 9bd03193ecd4..68567c0b3a5d 100644
--- a/include/linux/percpu-defs.h
+++ b/include/linux/percpu-defs.h
@@ -2,12 +2,6 @@
2#define _LINUX_PERCPU_DEFS_H 2#define _LINUX_PERCPU_DEFS_H
3 3
4/* 4/*
5 * Determine the real variable name from the name visible in the
6 * kernel sources.
7 */
8#define per_cpu_var(var) per_cpu__##var
9
10/*
11 * Base implementations of per-CPU variable declarations and definitions, where 5 * Base implementations of per-CPU variable declarations and definitions, where
12 * the section in which the variable is to be placed is provided by the 6 * the section in which the variable is to be placed is provided by the
13 * 'sec' argument. This may be used to affect the parameters governing the 7 * 'sec' argument. This may be used to affect the parameters governing the
@@ -18,13 +12,23 @@
18 * that section. 12 * that section.
19 */ 13 */
20#define __PCPU_ATTRS(sec) \ 14#define __PCPU_ATTRS(sec) \
21 __attribute__((section(PER_CPU_BASE_SECTION sec))) \ 15 __percpu __attribute__((section(PER_CPU_BASE_SECTION sec))) \
22 PER_CPU_ATTRIBUTES 16 PER_CPU_ATTRIBUTES
23 17
24#define __PCPU_DUMMY_ATTRS \ 18#define __PCPU_DUMMY_ATTRS \
25 __attribute__((section(".discard"), unused)) 19 __attribute__((section(".discard"), unused))
26 20
27/* 21/*
22 * Macro which verifies @ptr is a percpu pointer without evaluating
23 * @ptr. This is to be used in percpu accessors to verify that the
24 * input parameter is a percpu pointer.
25 */
26#define __verify_pcpu_ptr(ptr) do { \
27 const void __percpu *__vpp_verify = (typeof(ptr))NULL; \
28 (void)__vpp_verify; \
29} while (0)
30
31/*
28 * s390 and alpha modules require percpu variables to be defined as 32 * s390 and alpha modules require percpu variables to be defined as
29 * weak to force the compiler to generate GOT based external 33 * weak to force the compiler to generate GOT based external
30 * references for them. This is necessary because percpu sections 34 * references for them. This is necessary because percpu sections
@@ -56,23 +60,24 @@
56 */ 60 */
57#define DECLARE_PER_CPU_SECTION(type, name, sec) \ 61#define DECLARE_PER_CPU_SECTION(type, name, sec) \
58 extern __PCPU_DUMMY_ATTRS char __pcpu_scope_##name; \ 62 extern __PCPU_DUMMY_ATTRS char __pcpu_scope_##name; \
59 extern __PCPU_ATTRS(sec) __typeof__(type) per_cpu__##name 63 extern __PCPU_ATTRS(sec) __typeof__(type) name
60 64
61#define DEFINE_PER_CPU_SECTION(type, name, sec) \ 65#define DEFINE_PER_CPU_SECTION(type, name, sec) \
62 __PCPU_DUMMY_ATTRS char __pcpu_scope_##name; \ 66 __PCPU_DUMMY_ATTRS char __pcpu_scope_##name; \
67 extern __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
63 __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \ 68 __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
64 __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES __weak \ 69 __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES __weak \
65 __typeof__(type) per_cpu__##name 70 __typeof__(type) name
66#else 71#else
67/* 72/*
68 * Normal declaration and definition macros. 73 * Normal declaration and definition macros.
69 */ 74 */
70#define DECLARE_PER_CPU_SECTION(type, name, sec) \ 75#define DECLARE_PER_CPU_SECTION(type, name, sec) \
71 extern __PCPU_ATTRS(sec) __typeof__(type) per_cpu__##name 76 extern __PCPU_ATTRS(sec) __typeof__(type) name
72 77
73#define DEFINE_PER_CPU_SECTION(type, name, sec) \ 78#define DEFINE_PER_CPU_SECTION(type, name, sec) \
74 __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES \ 79 __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES \
75 __typeof__(type) per_cpu__##name 80 __typeof__(type) name
76#endif 81#endif
77 82
78/* 83/*
@@ -134,10 +139,16 @@
134 __aligned(PAGE_SIZE) 139 __aligned(PAGE_SIZE)
135 140
136/* 141/*
137 * Intermodule exports for per-CPU variables. 142 * Intermodule exports for per-CPU variables. sparse forgets about
143 * address space across EXPORT_SYMBOL(), change EXPORT_SYMBOL() to
144 * noop if __CHECKER__.
138 */ 145 */
139#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var) 146#ifndef __CHECKER__
140#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var) 147#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(var)
141 148#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(var)
149#else
150#define EXPORT_PER_CPU_SYMBOL(var)
151#define EXPORT_PER_CPU_SYMBOL_GPL(var)
152#endif
142 153
143#endif /* _LINUX_PERCPU_DEFS_H */ 154#endif /* _LINUX_PERCPU_DEFS_H */
diff --git a/include/linux/percpu.h b/include/linux/percpu.h
index 878836ca999c..d3a38d687104 100644
--- a/include/linux/percpu.h
+++ b/include/linux/percpu.h
@@ -2,10 +2,10 @@
2#define __LINUX_PERCPU_H 2#define __LINUX_PERCPU_H
3 3
4#include <linux/preempt.h> 4#include <linux/preempt.h>
5#include <linux/slab.h> /* For kmalloc() */
6#include <linux/smp.h> 5#include <linux/smp.h>
7#include <linux/cpumask.h> 6#include <linux/cpumask.h>
8#include <linux/pfn.h> 7#include <linux/pfn.h>
8#include <linux/init.h>
9 9
10#include <asm/percpu.h> 10#include <asm/percpu.h>
11 11
@@ -27,14 +27,19 @@
27 * we force a syntax error here if it isn't. 27 * we force a syntax error here if it isn't.
28 */ 28 */
29#define get_cpu_var(var) (*({ \ 29#define get_cpu_var(var) (*({ \
30 extern int simple_identifier_##var(void); \
31 preempt_disable(); \ 30 preempt_disable(); \
32 &__get_cpu_var(var); })) 31 &__get_cpu_var(var); }))
33#define put_cpu_var(var) preempt_enable()
34 32
35#ifdef CONFIG_SMP 33/*
34 * The weird & is necessary because sparse considers (void)(var) to be
35 * a direct dereference of percpu variable (var).
36 */
37#define put_cpu_var(var) do { \
38 (void)&(var); \
39 preempt_enable(); \
40} while (0)
36 41
37#ifndef CONFIG_HAVE_LEGACY_PER_CPU_AREA 42#ifdef CONFIG_SMP
38 43
39/* minimum unit size, also is the maximum supported allocation size */ 44/* minimum unit size, also is the maximum supported allocation size */
40#define PCPU_MIN_UNIT_SIZE PFN_ALIGN(64 << 10) 45#define PCPU_MIN_UNIT_SIZE PFN_ALIGN(64 << 10)
@@ -129,31 +134,8 @@ extern int __init pcpu_page_first_chunk(size_t reserved_size,
129 */ 134 */
130#define per_cpu_ptr(ptr, cpu) SHIFT_PERCPU_PTR((ptr), per_cpu_offset((cpu))) 135#define per_cpu_ptr(ptr, cpu) SHIFT_PERCPU_PTR((ptr), per_cpu_offset((cpu)))
131 136
132extern void *__alloc_reserved_percpu(size_t size, size_t align); 137extern void __percpu *__alloc_reserved_percpu(size_t size, size_t align);
133 138extern bool is_kernel_percpu_address(unsigned long addr);
134#else /* CONFIG_HAVE_LEGACY_PER_CPU_AREA */
135
136struct percpu_data {
137 void *ptrs[1];
138};
139
140/* pointer disguising messes up the kmemleak objects tracking */
141#ifndef CONFIG_DEBUG_KMEMLEAK
142#define __percpu_disguise(pdata) (struct percpu_data *)~(unsigned long)(pdata)
143#else
144#define __percpu_disguise(pdata) (struct percpu_data *)(pdata)
145#endif
146
147#define per_cpu_ptr(ptr, cpu) \
148({ \
149 struct percpu_data *__p = __percpu_disguise(ptr); \
150 (__typeof__(ptr))__p->ptrs[(cpu)]; \
151})
152
153#endif /* CONFIG_HAVE_LEGACY_PER_CPU_AREA */
154
155extern void *__alloc_percpu(size_t size, size_t align);
156extern void free_percpu(void *__pdata);
157 139
158#ifndef CONFIG_HAVE_SETUP_PER_CPU_AREA 140#ifndef CONFIG_HAVE_SETUP_PER_CPU_AREA
159extern void __init setup_per_cpu_areas(void); 141extern void __init setup_per_cpu_areas(void);
@@ -163,20 +145,10 @@ extern void __init setup_per_cpu_areas(void);
163 145
164#define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); }) 146#define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); })
165 147
166static inline void *__alloc_percpu(size_t size, size_t align) 148/* can't distinguish from other static vars, always false */
149static inline bool is_kernel_percpu_address(unsigned long addr)
167{ 150{
168 /* 151 return false;
169 * Can't easily make larger alignment work with kmalloc. WARN
170 * on it. Larger alignment should only be used for module
171 * percpu sections on SMP for which this path isn't used.
172 */
173 WARN_ON_ONCE(align > SMP_CACHE_BYTES);
174 return kzalloc(size, GFP_KERNEL);
175}
176
177static inline void free_percpu(void *p)
178{
179 kfree(p);
180} 152}
181 153
182static inline void __init setup_per_cpu_areas(void) { } 154static inline void __init setup_per_cpu_areas(void) { }
@@ -188,8 +160,12 @@ static inline void *pcpu_lpage_remapped(void *kaddr)
188 160
189#endif /* CONFIG_SMP */ 161#endif /* CONFIG_SMP */
190 162
191#define alloc_percpu(type) (type *)__alloc_percpu(sizeof(type), \ 163extern void __percpu *__alloc_percpu(size_t size, size_t align);
192 __alignof__(type)) 164extern void free_percpu(void __percpu *__pdata);
165extern phys_addr_t per_cpu_ptr_to_phys(void *addr);
166
167#define alloc_percpu(type) \
168 (typeof(type) __percpu *)__alloc_percpu(sizeof(type), __alignof__(type))
193 169
194/* 170/*
195 * Optional methods for optimized non-lvalue per-cpu variable access. 171 * Optional methods for optimized non-lvalue per-cpu variable access.
@@ -206,17 +182,19 @@ static inline void *pcpu_lpage_remapped(void *kaddr)
206#ifndef percpu_read 182#ifndef percpu_read
207# define percpu_read(var) \ 183# define percpu_read(var) \
208 ({ \ 184 ({ \
209 typeof(per_cpu_var(var)) __tmp_var__; \ 185 typeof(var) *pr_ptr__ = &(var); \
210 __tmp_var__ = get_cpu_var(var); \ 186 typeof(var) pr_ret__; \
211 put_cpu_var(var); \ 187 pr_ret__ = get_cpu_var(*pr_ptr__); \
212 __tmp_var__; \ 188 put_cpu_var(*pr_ptr__); \
189 pr_ret__; \
213 }) 190 })
214#endif 191#endif
215 192
216#define __percpu_generic_to_op(var, val, op) \ 193#define __percpu_generic_to_op(var, val, op) \
217do { \ 194do { \
218 get_cpu_var(var) op val; \ 195 typeof(var) *pgto_ptr__ = &(var); \
219 put_cpu_var(var); \ 196 get_cpu_var(*pgto_ptr__) op val; \
197 put_cpu_var(*pgto_ptr__); \
220} while (0) 198} while (0)
221 199
222#ifndef percpu_write 200#ifndef percpu_write
@@ -243,4 +221,405 @@ do { \
243# define percpu_xor(var, val) __percpu_generic_to_op(var, (val), ^=) 221# define percpu_xor(var, val) __percpu_generic_to_op(var, (val), ^=)
244#endif 222#endif
245 223
224/*
225 * Branching function to split up a function into a set of functions that
226 * are called for different scalar sizes of the objects handled.
227 */
228
229extern void __bad_size_call_parameter(void);
230
231#define __pcpu_size_call_return(stem, variable) \
232({ typeof(variable) pscr_ret__; \
233 __verify_pcpu_ptr(&(variable)); \
234 switch(sizeof(variable)) { \
235 case 1: pscr_ret__ = stem##1(variable);break; \
236 case 2: pscr_ret__ = stem##2(variable);break; \
237 case 4: pscr_ret__ = stem##4(variable);break; \
238 case 8: pscr_ret__ = stem##8(variable);break; \
239 default: \
240 __bad_size_call_parameter();break; \
241 } \
242 pscr_ret__; \
243})
244
245#define __pcpu_size_call(stem, variable, ...) \
246do { \
247 __verify_pcpu_ptr(&(variable)); \
248 switch(sizeof(variable)) { \
249 case 1: stem##1(variable, __VA_ARGS__);break; \
250 case 2: stem##2(variable, __VA_ARGS__);break; \
251 case 4: stem##4(variable, __VA_ARGS__);break; \
252 case 8: stem##8(variable, __VA_ARGS__);break; \
253 default: \
254 __bad_size_call_parameter();break; \
255 } \
256} while (0)
257
258/*
259 * Optimized manipulation for memory allocated through the per cpu
260 * allocator or for addresses of per cpu variables.
261 *
262 * These operation guarantee exclusivity of access for other operations
263 * on the *same* processor. The assumption is that per cpu data is only
264 * accessed by a single processor instance (the current one).
265 *
266 * The first group is used for accesses that must be done in a
267 * preemption safe way since we know that the context is not preempt
268 * safe. Interrupts may occur. If the interrupt modifies the variable
269 * too then RMW actions will not be reliable.
270 *
271 * The arch code can provide optimized functions in two ways:
272 *
273 * 1. Override the function completely. F.e. define this_cpu_add().
274 * The arch must then ensure that the various scalar format passed
275 * are handled correctly.
276 *
277 * 2. Provide functions for certain scalar sizes. F.e. provide
278 * this_cpu_add_2() to provide per cpu atomic operations for 2 byte
279 * sized RMW actions. If arch code does not provide operations for
280 * a scalar size then the fallback in the generic code will be
281 * used.
282 */
283
284#define _this_cpu_generic_read(pcp) \
285({ typeof(pcp) ret__; \
286 preempt_disable(); \
287 ret__ = *this_cpu_ptr(&(pcp)); \
288 preempt_enable(); \
289 ret__; \
290})
291
292#ifndef this_cpu_read
293# ifndef this_cpu_read_1
294# define this_cpu_read_1(pcp) _this_cpu_generic_read(pcp)
295# endif
296# ifndef this_cpu_read_2
297# define this_cpu_read_2(pcp) _this_cpu_generic_read(pcp)
298# endif
299# ifndef this_cpu_read_4
300# define this_cpu_read_4(pcp) _this_cpu_generic_read(pcp)
301# endif
302# ifndef this_cpu_read_8
303# define this_cpu_read_8(pcp) _this_cpu_generic_read(pcp)
304# endif
305# define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, (pcp))
306#endif
307
308#define _this_cpu_generic_to_op(pcp, val, op) \
309do { \
310 preempt_disable(); \
311 *__this_cpu_ptr(&(pcp)) op val; \
312 preempt_enable(); \
313} while (0)
314
315#ifndef this_cpu_write
316# ifndef this_cpu_write_1
317# define this_cpu_write_1(pcp, val) _this_cpu_generic_to_op((pcp), (val), =)
318# endif
319# ifndef this_cpu_write_2
320# define this_cpu_write_2(pcp, val) _this_cpu_generic_to_op((pcp), (val), =)
321# endif
322# ifndef this_cpu_write_4
323# define this_cpu_write_4(pcp, val) _this_cpu_generic_to_op((pcp), (val), =)
324# endif
325# ifndef this_cpu_write_8
326# define this_cpu_write_8(pcp, val) _this_cpu_generic_to_op((pcp), (val), =)
327# endif
328# define this_cpu_write(pcp, val) __pcpu_size_call(this_cpu_write_, (pcp), (val))
329#endif
330
331#ifndef this_cpu_add
332# ifndef this_cpu_add_1
333# define this_cpu_add_1(pcp, val) _this_cpu_generic_to_op((pcp), (val), +=)
334# endif
335# ifndef this_cpu_add_2
336# define this_cpu_add_2(pcp, val) _this_cpu_generic_to_op((pcp), (val), +=)
337# endif
338# ifndef this_cpu_add_4
339# define this_cpu_add_4(pcp, val) _this_cpu_generic_to_op((pcp), (val), +=)
340# endif
341# ifndef this_cpu_add_8
342# define this_cpu_add_8(pcp, val) _this_cpu_generic_to_op((pcp), (val), +=)
343# endif
344# define this_cpu_add(pcp, val) __pcpu_size_call(this_cpu_add_, (pcp), (val))
345#endif
346
347#ifndef this_cpu_sub
348# define this_cpu_sub(pcp, val) this_cpu_add((pcp), -(val))
349#endif
350
351#ifndef this_cpu_inc
352# define this_cpu_inc(pcp) this_cpu_add((pcp), 1)
353#endif
354
355#ifndef this_cpu_dec
356# define this_cpu_dec(pcp) this_cpu_sub((pcp), 1)
357#endif
358
359#ifndef this_cpu_and
360# ifndef this_cpu_and_1
361# define this_cpu_and_1(pcp, val) _this_cpu_generic_to_op((pcp), (val), &=)
362# endif
363# ifndef this_cpu_and_2
364# define this_cpu_and_2(pcp, val) _this_cpu_generic_to_op((pcp), (val), &=)
365# endif
366# ifndef this_cpu_and_4
367# define this_cpu_and_4(pcp, val) _this_cpu_generic_to_op((pcp), (val), &=)
368# endif
369# ifndef this_cpu_and_8
370# define this_cpu_and_8(pcp, val) _this_cpu_generic_to_op((pcp), (val), &=)
371# endif
372# define this_cpu_and(pcp, val) __pcpu_size_call(this_cpu_and_, (pcp), (val))
373#endif
374
375#ifndef this_cpu_or
376# ifndef this_cpu_or_1
377# define this_cpu_or_1(pcp, val) _this_cpu_generic_to_op((pcp), (val), |=)
378# endif
379# ifndef this_cpu_or_2
380# define this_cpu_or_2(pcp, val) _this_cpu_generic_to_op((pcp), (val), |=)
381# endif
382# ifndef this_cpu_or_4
383# define this_cpu_or_4(pcp, val) _this_cpu_generic_to_op((pcp), (val), |=)
384# endif
385# ifndef this_cpu_or_8
386# define this_cpu_or_8(pcp, val) _this_cpu_generic_to_op((pcp), (val), |=)
387# endif
388# define this_cpu_or(pcp, val) __pcpu_size_call(this_cpu_or_, (pcp), (val))
389#endif
390
391#ifndef this_cpu_xor
392# ifndef this_cpu_xor_1
393# define this_cpu_xor_1(pcp, val) _this_cpu_generic_to_op((pcp), (val), ^=)
394# endif
395# ifndef this_cpu_xor_2
396# define this_cpu_xor_2(pcp, val) _this_cpu_generic_to_op((pcp), (val), ^=)
397# endif
398# ifndef this_cpu_xor_4
399# define this_cpu_xor_4(pcp, val) _this_cpu_generic_to_op((pcp), (val), ^=)
400# endif
401# ifndef this_cpu_xor_8
402# define this_cpu_xor_8(pcp, val) _this_cpu_generic_to_op((pcp), (val), ^=)
403# endif
404# define this_cpu_xor(pcp, val) __pcpu_size_call(this_cpu_or_, (pcp), (val))
405#endif
406
407/*
408 * Generic percpu operations that do not require preemption handling.
409 * Either we do not care about races or the caller has the
410 * responsibility of handling preemptions issues. Arch code can still
411 * override these instructions since the arch per cpu code may be more
412 * efficient and may actually get race freeness for free (that is the
413 * case for x86 for example).
414 *
415 * If there is no other protection through preempt disable and/or
416 * disabling interupts then one of these RMW operations can show unexpected
417 * behavior because the execution thread was rescheduled on another processor
418 * or an interrupt occurred and the same percpu variable was modified from
419 * the interrupt context.
420 */
421#ifndef __this_cpu_read
422# ifndef __this_cpu_read_1
423# define __this_cpu_read_1(pcp) (*__this_cpu_ptr(&(pcp)))
424# endif
425# ifndef __this_cpu_read_2
426# define __this_cpu_read_2(pcp) (*__this_cpu_ptr(&(pcp)))
427# endif
428# ifndef __this_cpu_read_4
429# define __this_cpu_read_4(pcp) (*__this_cpu_ptr(&(pcp)))
430# endif
431# ifndef __this_cpu_read_8
432# define __this_cpu_read_8(pcp) (*__this_cpu_ptr(&(pcp)))
433# endif
434# define __this_cpu_read(pcp) __pcpu_size_call_return(__this_cpu_read_, (pcp))
435#endif
436
437#define __this_cpu_generic_to_op(pcp, val, op) \
438do { \
439 *__this_cpu_ptr(&(pcp)) op val; \
440} while (0)
441
442#ifndef __this_cpu_write
443# ifndef __this_cpu_write_1
444# define __this_cpu_write_1(pcp, val) __this_cpu_generic_to_op((pcp), (val), =)
445# endif
446# ifndef __this_cpu_write_2
447# define __this_cpu_write_2(pcp, val) __this_cpu_generic_to_op((pcp), (val), =)
448# endif
449# ifndef __this_cpu_write_4
450# define __this_cpu_write_4(pcp, val) __this_cpu_generic_to_op((pcp), (val), =)
451# endif
452# ifndef __this_cpu_write_8
453# define __this_cpu_write_8(pcp, val) __this_cpu_generic_to_op((pcp), (val), =)
454# endif
455# define __this_cpu_write(pcp, val) __pcpu_size_call(__this_cpu_write_, (pcp), (val))
456#endif
457
458#ifndef __this_cpu_add
459# ifndef __this_cpu_add_1
460# define __this_cpu_add_1(pcp, val) __this_cpu_generic_to_op((pcp), (val), +=)
461# endif
462# ifndef __this_cpu_add_2
463# define __this_cpu_add_2(pcp, val) __this_cpu_generic_to_op((pcp), (val), +=)
464# endif
465# ifndef __this_cpu_add_4
466# define __this_cpu_add_4(pcp, val) __this_cpu_generic_to_op((pcp), (val), +=)
467# endif
468# ifndef __this_cpu_add_8
469# define __this_cpu_add_8(pcp, val) __this_cpu_generic_to_op((pcp), (val), +=)
470# endif
471# define __this_cpu_add(pcp, val) __pcpu_size_call(__this_cpu_add_, (pcp), (val))
472#endif
473
474#ifndef __this_cpu_sub
475# define __this_cpu_sub(pcp, val) __this_cpu_add((pcp), -(val))
476#endif
477
478#ifndef __this_cpu_inc
479# define __this_cpu_inc(pcp) __this_cpu_add((pcp), 1)
480#endif
481
482#ifndef __this_cpu_dec
483# define __this_cpu_dec(pcp) __this_cpu_sub((pcp), 1)
484#endif
485
486#ifndef __this_cpu_and
487# ifndef __this_cpu_and_1
488# define __this_cpu_and_1(pcp, val) __this_cpu_generic_to_op((pcp), (val), &=)
489# endif
490# ifndef __this_cpu_and_2
491# define __this_cpu_and_2(pcp, val) __this_cpu_generic_to_op((pcp), (val), &=)
492# endif
493# ifndef __this_cpu_and_4
494# define __this_cpu_and_4(pcp, val) __this_cpu_generic_to_op((pcp), (val), &=)
495# endif
496# ifndef __this_cpu_and_8
497# define __this_cpu_and_8(pcp, val) __this_cpu_generic_to_op((pcp), (val), &=)
498# endif
499# define __this_cpu_and(pcp, val) __pcpu_size_call(__this_cpu_and_, (pcp), (val))
500#endif
501
502#ifndef __this_cpu_or
503# ifndef __this_cpu_or_1
504# define __this_cpu_or_1(pcp, val) __this_cpu_generic_to_op((pcp), (val), |=)
505# endif
506# ifndef __this_cpu_or_2
507# define __this_cpu_or_2(pcp, val) __this_cpu_generic_to_op((pcp), (val), |=)
508# endif
509# ifndef __this_cpu_or_4
510# define __this_cpu_or_4(pcp, val) __this_cpu_generic_to_op((pcp), (val), |=)
511# endif
512# ifndef __this_cpu_or_8
513# define __this_cpu_or_8(pcp, val) __this_cpu_generic_to_op((pcp), (val), |=)
514# endif
515# define __this_cpu_or(pcp, val) __pcpu_size_call(__this_cpu_or_, (pcp), (val))
516#endif
517
518#ifndef __this_cpu_xor
519# ifndef __this_cpu_xor_1
520# define __this_cpu_xor_1(pcp, val) __this_cpu_generic_to_op((pcp), (val), ^=)
521# endif
522# ifndef __this_cpu_xor_2
523# define __this_cpu_xor_2(pcp, val) __this_cpu_generic_to_op((pcp), (val), ^=)
524# endif
525# ifndef __this_cpu_xor_4
526# define __this_cpu_xor_4(pcp, val) __this_cpu_generic_to_op((pcp), (val), ^=)
527# endif
528# ifndef __this_cpu_xor_8
529# define __this_cpu_xor_8(pcp, val) __this_cpu_generic_to_op((pcp), (val), ^=)
530# endif
531# define __this_cpu_xor(pcp, val) __pcpu_size_call(__this_cpu_xor_, (pcp), (val))
532#endif
533
534/*
535 * IRQ safe versions of the per cpu RMW operations. Note that these operations
536 * are *not* safe against modification of the same variable from another
537 * processors (which one gets when using regular atomic operations)
538 . They are guaranteed to be atomic vs. local interrupts and
539 * preemption only.
540 */
541#define irqsafe_cpu_generic_to_op(pcp, val, op) \
542do { \
543 unsigned long flags; \
544 local_irq_save(flags); \
545 *__this_cpu_ptr(&(pcp)) op val; \
546 local_irq_restore(flags); \
547} while (0)
548
549#ifndef irqsafe_cpu_add
550# ifndef irqsafe_cpu_add_1
551# define irqsafe_cpu_add_1(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), +=)
552# endif
553# ifndef irqsafe_cpu_add_2
554# define irqsafe_cpu_add_2(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), +=)
555# endif
556# ifndef irqsafe_cpu_add_4
557# define irqsafe_cpu_add_4(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), +=)
558# endif
559# ifndef irqsafe_cpu_add_8
560# define irqsafe_cpu_add_8(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), +=)
561# endif
562# define irqsafe_cpu_add(pcp, val) __pcpu_size_call(irqsafe_cpu_add_, (pcp), (val))
563#endif
564
565#ifndef irqsafe_cpu_sub
566# define irqsafe_cpu_sub(pcp, val) irqsafe_cpu_add((pcp), -(val))
567#endif
568
569#ifndef irqsafe_cpu_inc
570# define irqsafe_cpu_inc(pcp) irqsafe_cpu_add((pcp), 1)
571#endif
572
573#ifndef irqsafe_cpu_dec
574# define irqsafe_cpu_dec(pcp) irqsafe_cpu_sub((pcp), 1)
575#endif
576
577#ifndef irqsafe_cpu_and
578# ifndef irqsafe_cpu_and_1
579# define irqsafe_cpu_and_1(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), &=)
580# endif
581# ifndef irqsafe_cpu_and_2
582# define irqsafe_cpu_and_2(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), &=)
583# endif
584# ifndef irqsafe_cpu_and_4
585# define irqsafe_cpu_and_4(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), &=)
586# endif
587# ifndef irqsafe_cpu_and_8
588# define irqsafe_cpu_and_8(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), &=)
589# endif
590# define irqsafe_cpu_and(pcp, val) __pcpu_size_call(irqsafe_cpu_and_, (val))
591#endif
592
593#ifndef irqsafe_cpu_or
594# ifndef irqsafe_cpu_or_1
595# define irqsafe_cpu_or_1(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), |=)
596# endif
597# ifndef irqsafe_cpu_or_2
598# define irqsafe_cpu_or_2(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), |=)
599# endif
600# ifndef irqsafe_cpu_or_4
601# define irqsafe_cpu_or_4(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), |=)
602# endif
603# ifndef irqsafe_cpu_or_8
604# define irqsafe_cpu_or_8(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), |=)
605# endif
606# define irqsafe_cpu_or(pcp, val) __pcpu_size_call(irqsafe_cpu_or_, (val))
607#endif
608
609#ifndef irqsafe_cpu_xor
610# ifndef irqsafe_cpu_xor_1
611# define irqsafe_cpu_xor_1(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), ^=)
612# endif
613# ifndef irqsafe_cpu_xor_2
614# define irqsafe_cpu_xor_2(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), ^=)
615# endif
616# ifndef irqsafe_cpu_xor_4
617# define irqsafe_cpu_xor_4(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), ^=)
618# endif
619# ifndef irqsafe_cpu_xor_8
620# define irqsafe_cpu_xor_8(pcp, val) irqsafe_cpu_generic_to_op((pcp), (val), ^=)
621# endif
622# define irqsafe_cpu_xor(pcp, val) __pcpu_size_call(irqsafe_cpu_xor_, (val))
623#endif
624
246#endif /* __LINUX_PERCPU_H */ 625#endif /* __LINUX_PERCPU_H */
diff --git a/include/linux/percpu_counter.h b/include/linux/percpu_counter.h
index a7684a513994..c88d67b59394 100644
--- a/include/linux/percpu_counter.h
+++ b/include/linux/percpu_counter.h
@@ -21,7 +21,7 @@ struct percpu_counter {
21#ifdef CONFIG_HOTPLUG_CPU 21#ifdef CONFIG_HOTPLUG_CPU
22 struct list_head list; /* All percpu_counters are on a list */ 22 struct list_head list; /* All percpu_counters are on a list */
23#endif 23#endif
24 s32 *counters; 24 s32 __percpu *counters;
25}; 25};
26 26
27extern int percpu_counter_batch; 27extern int percpu_counter_batch;
@@ -98,9 +98,6 @@ static inline void percpu_counter_set(struct percpu_counter *fbc, s64 amount)
98 fbc->count = amount; 98 fbc->count = amount;
99} 99}
100 100
101#define __percpu_counter_add(fbc, amount, batch) \
102 percpu_counter_add(fbc, amount)
103
104static inline void 101static inline void
105percpu_counter_add(struct percpu_counter *fbc, s64 amount) 102percpu_counter_add(struct percpu_counter *fbc, s64 amount)
106{ 103{
@@ -109,6 +106,12 @@ percpu_counter_add(struct percpu_counter *fbc, s64 amount)
109 preempt_enable(); 106 preempt_enable();
110} 107}
111 108
109static inline void
110__percpu_counter_add(struct percpu_counter *fbc, s64 amount, s32 batch)
111{
112 percpu_counter_add(fbc, amount);
113}
114
112static inline s64 percpu_counter_read(struct percpu_counter *fbc) 115static inline s64 percpu_counter_read(struct percpu_counter *fbc)
113{ 116{
114 return fbc->count; 117 return fbc->count;
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h
deleted file mode 100644
index 7b7fbf433cff..000000000000
--- a/include/linux/perf_counter.h
+++ /dev/null
@@ -1,441 +0,0 @@
1/*
2 * NOTE: this file will be removed in a future kernel release, it is
3 * provided as a courtesy copy of user-space code that relies on the
4 * old (pre-rename) symbols and constants.
5 *
6 * Performance events:
7 *
8 * Copyright (C) 2008-2009, Thomas Gleixner <tglx@linutronix.de>
9 * Copyright (C) 2008-2009, Red Hat, Inc., Ingo Molnar
10 * Copyright (C) 2008-2009, Red Hat, Inc., Peter Zijlstra
11 *
12 * Data type definitions, declarations, prototypes.
13 *
14 * Started by: Thomas Gleixner and Ingo Molnar
15 *
16 * For licencing details see kernel-base/COPYING
17 */
18#ifndef _LINUX_PERF_COUNTER_H
19#define _LINUX_PERF_COUNTER_H
20
21#include <linux/types.h>
22#include <linux/ioctl.h>
23#include <asm/byteorder.h>
24
25/*
26 * User-space ABI bits:
27 */
28
29/*
30 * attr.type
31 */
32enum perf_type_id {
33 PERF_TYPE_HARDWARE = 0,
34 PERF_TYPE_SOFTWARE = 1,
35 PERF_TYPE_TRACEPOINT = 2,
36 PERF_TYPE_HW_CACHE = 3,
37 PERF_TYPE_RAW = 4,
38
39 PERF_TYPE_MAX, /* non-ABI */
40};
41
42/*
43 * Generalized performance counter event types, used by the
44 * attr.event_id parameter of the sys_perf_counter_open()
45 * syscall:
46 */
47enum perf_hw_id {
48 /*
49 * Common hardware events, generalized by the kernel:
50 */
51 PERF_COUNT_HW_CPU_CYCLES = 0,
52 PERF_COUNT_HW_INSTRUCTIONS = 1,
53 PERF_COUNT_HW_CACHE_REFERENCES = 2,
54 PERF_COUNT_HW_CACHE_MISSES = 3,
55 PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
56 PERF_COUNT_HW_BRANCH_MISSES = 5,
57 PERF_COUNT_HW_BUS_CYCLES = 6,
58
59 PERF_COUNT_HW_MAX, /* non-ABI */
60};
61
62/*
63 * Generalized hardware cache counters:
64 *
65 * { L1-D, L1-I, LLC, ITLB, DTLB, BPU } x
66 * { read, write, prefetch } x
67 * { accesses, misses }
68 */
69enum perf_hw_cache_id {
70 PERF_COUNT_HW_CACHE_L1D = 0,
71 PERF_COUNT_HW_CACHE_L1I = 1,
72 PERF_COUNT_HW_CACHE_LL = 2,
73 PERF_COUNT_HW_CACHE_DTLB = 3,
74 PERF_COUNT_HW_CACHE_ITLB = 4,
75 PERF_COUNT_HW_CACHE_BPU = 5,
76
77 PERF_COUNT_HW_CACHE_MAX, /* non-ABI */
78};
79
80enum perf_hw_cache_op_id {
81 PERF_COUNT_HW_CACHE_OP_READ = 0,
82 PERF_COUNT_HW_CACHE_OP_WRITE = 1,
83 PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
84
85 PERF_COUNT_HW_CACHE_OP_MAX, /* non-ABI */
86};
87
88enum perf_hw_cache_op_result_id {
89 PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
90 PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
91
92 PERF_COUNT_HW_CACHE_RESULT_MAX, /* non-ABI */
93};
94
95/*
96 * Special "software" counters provided by the kernel, even if the hardware
97 * does not support performance counters. These counters measure various
98 * physical and sw events of the kernel (and allow the profiling of them as
99 * well):
100 */
101enum perf_sw_ids {
102 PERF_COUNT_SW_CPU_CLOCK = 0,
103 PERF_COUNT_SW_TASK_CLOCK = 1,
104 PERF_COUNT_SW_PAGE_FAULTS = 2,
105 PERF_COUNT_SW_CONTEXT_SWITCHES = 3,
106 PERF_COUNT_SW_CPU_MIGRATIONS = 4,
107 PERF_COUNT_SW_PAGE_FAULTS_MIN = 5,
108 PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6,
109
110 PERF_COUNT_SW_MAX, /* non-ABI */
111};
112
113/*
114 * Bits that can be set in attr.sample_type to request information
115 * in the overflow packets.
116 */
117enum perf_counter_sample_format {
118 PERF_SAMPLE_IP = 1U << 0,
119 PERF_SAMPLE_TID = 1U << 1,
120 PERF_SAMPLE_TIME = 1U << 2,
121 PERF_SAMPLE_ADDR = 1U << 3,
122 PERF_SAMPLE_READ = 1U << 4,
123 PERF_SAMPLE_CALLCHAIN = 1U << 5,
124 PERF_SAMPLE_ID = 1U << 6,
125 PERF_SAMPLE_CPU = 1U << 7,
126 PERF_SAMPLE_PERIOD = 1U << 8,
127 PERF_SAMPLE_STREAM_ID = 1U << 9,
128 PERF_SAMPLE_RAW = 1U << 10,
129
130 PERF_SAMPLE_MAX = 1U << 11, /* non-ABI */
131};
132
133/*
134 * The format of the data returned by read() on a perf counter fd,
135 * as specified by attr.read_format:
136 *
137 * struct read_format {
138 * { u64 value;
139 * { u64 time_enabled; } && PERF_FORMAT_ENABLED
140 * { u64 time_running; } && PERF_FORMAT_RUNNING
141 * { u64 id; } && PERF_FORMAT_ID
142 * } && !PERF_FORMAT_GROUP
143 *
144 * { u64 nr;
145 * { u64 time_enabled; } && PERF_FORMAT_ENABLED
146 * { u64 time_running; } && PERF_FORMAT_RUNNING
147 * { u64 value;
148 * { u64 id; } && PERF_FORMAT_ID
149 * } cntr[nr];
150 * } && PERF_FORMAT_GROUP
151 * };
152 */
153enum perf_counter_read_format {
154 PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0,
155 PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1,
156 PERF_FORMAT_ID = 1U << 2,
157 PERF_FORMAT_GROUP = 1U << 3,
158
159 PERF_FORMAT_MAX = 1U << 4, /* non-ABI */
160};
161
162#define PERF_ATTR_SIZE_VER0 64 /* sizeof first published struct */
163
164/*
165 * Hardware event to monitor via a performance monitoring counter:
166 */
167struct perf_counter_attr {
168
169 /*
170 * Major type: hardware/software/tracepoint/etc.
171 */
172 __u32 type;
173
174 /*
175 * Size of the attr structure, for fwd/bwd compat.
176 */
177 __u32 size;
178
179 /*
180 * Type specific configuration information.
181 */
182 __u64 config;
183
184 union {
185 __u64 sample_period;
186 __u64 sample_freq;
187 };
188
189 __u64 sample_type;
190 __u64 read_format;
191
192 __u64 disabled : 1, /* off by default */
193 inherit : 1, /* children inherit it */
194 pinned : 1, /* must always be on PMU */
195 exclusive : 1, /* only group on PMU */
196 exclude_user : 1, /* don't count user */
197 exclude_kernel : 1, /* ditto kernel */
198 exclude_hv : 1, /* ditto hypervisor */
199 exclude_idle : 1, /* don't count when idle */
200 mmap : 1, /* include mmap data */
201 comm : 1, /* include comm data */
202 freq : 1, /* use freq, not period */
203 inherit_stat : 1, /* per task counts */
204 enable_on_exec : 1, /* next exec enables */
205 task : 1, /* trace fork/exit */
206 watermark : 1, /* wakeup_watermark */
207
208 __reserved_1 : 49;
209
210 union {
211 __u32 wakeup_events; /* wakeup every n events */
212 __u32 wakeup_watermark; /* bytes before wakeup */
213 };
214 __u32 __reserved_2;
215
216 __u64 __reserved_3;
217};
218
219/*
220 * Ioctls that can be done on a perf counter fd:
221 */
222#define PERF_COUNTER_IOC_ENABLE _IO ('$', 0)
223#define PERF_COUNTER_IOC_DISABLE _IO ('$', 1)
224#define PERF_COUNTER_IOC_REFRESH _IO ('$', 2)
225#define PERF_COUNTER_IOC_RESET _IO ('$', 3)
226#define PERF_COUNTER_IOC_PERIOD _IOW('$', 4, u64)
227#define PERF_COUNTER_IOC_SET_OUTPUT _IO ('$', 5)
228
229enum perf_counter_ioc_flags {
230 PERF_IOC_FLAG_GROUP = 1U << 0,
231};
232
233/*
234 * Structure of the page that can be mapped via mmap
235 */
236struct perf_counter_mmap_page {
237 __u32 version; /* version number of this structure */
238 __u32 compat_version; /* lowest version this is compat with */
239
240 /*
241 * Bits needed to read the hw counters in user-space.
242 *
243 * u32 seq;
244 * s64 count;
245 *
246 * do {
247 * seq = pc->lock;
248 *
249 * barrier()
250 * if (pc->index) {
251 * count = pmc_read(pc->index - 1);
252 * count += pc->offset;
253 * } else
254 * goto regular_read;
255 *
256 * barrier();
257 * } while (pc->lock != seq);
258 *
259 * NOTE: for obvious reason this only works on self-monitoring
260 * processes.
261 */
262 __u32 lock; /* seqlock for synchronization */
263 __u32 index; /* hardware counter identifier */
264 __s64 offset; /* add to hardware counter value */
265 __u64 time_enabled; /* time counter active */
266 __u64 time_running; /* time counter on cpu */
267
268 /*
269 * Hole for extension of the self monitor capabilities
270 */
271
272 __u64 __reserved[123]; /* align to 1k */
273
274 /*
275 * Control data for the mmap() data buffer.
276 *
277 * User-space reading the @data_head value should issue an rmb(), on
278 * SMP capable platforms, after reading this value -- see
279 * perf_counter_wakeup().
280 *
281 * When the mapping is PROT_WRITE the @data_tail value should be
282 * written by userspace to reflect the last read data. In this case
283 * the kernel will not over-write unread data.
284 */
285 __u64 data_head; /* head in the data section */
286 __u64 data_tail; /* user-space written tail */
287};
288
289#define PERF_EVENT_MISC_CPUMODE_MASK (3 << 0)
290#define PERF_EVENT_MISC_CPUMODE_UNKNOWN (0 << 0)
291#define PERF_EVENT_MISC_KERNEL (1 << 0)
292#define PERF_EVENT_MISC_USER (2 << 0)
293#define PERF_EVENT_MISC_HYPERVISOR (3 << 0)
294
295struct perf_event_header {
296 __u32 type;
297 __u16 misc;
298 __u16 size;
299};
300
301enum perf_event_type {
302
303 /*
304 * The MMAP events record the PROT_EXEC mappings so that we can
305 * correlate userspace IPs to code. They have the following structure:
306 *
307 * struct {
308 * struct perf_event_header header;
309 *
310 * u32 pid, tid;
311 * u64 addr;
312 * u64 len;
313 * u64 pgoff;
314 * char filename[];
315 * };
316 */
317 PERF_EVENT_MMAP = 1,
318
319 /*
320 * struct {
321 * struct perf_event_header header;
322 * u64 id;
323 * u64 lost;
324 * };
325 */
326 PERF_EVENT_LOST = 2,
327
328 /*
329 * struct {
330 * struct perf_event_header header;
331 *
332 * u32 pid, tid;
333 * char comm[];
334 * };
335 */
336 PERF_EVENT_COMM = 3,
337
338 /*
339 * struct {
340 * struct perf_event_header header;
341 * u32 pid, ppid;
342 * u32 tid, ptid;
343 * u64 time;
344 * };
345 */
346 PERF_EVENT_EXIT = 4,
347
348 /*
349 * struct {
350 * struct perf_event_header header;
351 * u64 time;
352 * u64 id;
353 * u64 stream_id;
354 * };
355 */
356 PERF_EVENT_THROTTLE = 5,
357 PERF_EVENT_UNTHROTTLE = 6,
358
359 /*
360 * struct {
361 * struct perf_event_header header;
362 * u32 pid, ppid;
363 * u32 tid, ptid;
364 * u64 time;
365 * };
366 */
367 PERF_EVENT_FORK = 7,
368
369 /*
370 * struct {
371 * struct perf_event_header header;
372 * u32 pid, tid;
373 *
374 * struct read_format values;
375 * };
376 */
377 PERF_EVENT_READ = 8,
378
379 /*
380 * struct {
381 * struct perf_event_header header;
382 *
383 * { u64 ip; } && PERF_SAMPLE_IP
384 * { u32 pid, tid; } && PERF_SAMPLE_TID
385 * { u64 time; } && PERF_SAMPLE_TIME
386 * { u64 addr; } && PERF_SAMPLE_ADDR
387 * { u64 id; } && PERF_SAMPLE_ID
388 * { u64 stream_id;} && PERF_SAMPLE_STREAM_ID
389 * { u32 cpu, res; } && PERF_SAMPLE_CPU
390 * { u64 period; } && PERF_SAMPLE_PERIOD
391 *
392 * { struct read_format values; } && PERF_SAMPLE_READ
393 *
394 * { u64 nr,
395 * u64 ips[nr]; } && PERF_SAMPLE_CALLCHAIN
396 *
397 * #
398 * # The RAW record below is opaque data wrt the ABI
399 * #
400 * # That is, the ABI doesn't make any promises wrt to
401 * # the stability of its content, it may vary depending
402 * # on event, hardware, kernel version and phase of
403 * # the moon.
404 * #
405 * # In other words, PERF_SAMPLE_RAW contents are not an ABI.
406 * #
407 *
408 * { u32 size;
409 * char data[size];}&& PERF_SAMPLE_RAW
410 * };
411 */
412 PERF_EVENT_SAMPLE = 9,
413
414 PERF_EVENT_MAX, /* non-ABI */
415};
416
417enum perf_callchain_context {
418 PERF_CONTEXT_HV = (__u64)-32,
419 PERF_CONTEXT_KERNEL = (__u64)-128,
420 PERF_CONTEXT_USER = (__u64)-512,
421
422 PERF_CONTEXT_GUEST = (__u64)-2048,
423 PERF_CONTEXT_GUEST_KERNEL = (__u64)-2176,
424 PERF_CONTEXT_GUEST_USER = (__u64)-2560,
425
426 PERF_CONTEXT_MAX = (__u64)-4095,
427};
428
429#define PERF_FLAG_FD_NO_GROUP (1U << 0)
430#define PERF_FLAG_FD_OUTPUT (1U << 1)
431
432/*
433 * In case some app still references the old symbols:
434 */
435
436#define __NR_perf_counter_open __NR_perf_event_open
437
438#define PR_TASK_PERF_COUNTERS_DISABLE PR_TASK_PERF_EVENTS_DISABLE
439#define PR_TASK_PERF_COUNTERS_ENABLE PR_TASK_PERF_EVENTS_ENABLE
440
441#endif /* _LINUX_PERF_COUNTER_H */
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 9e7012689a84..c8e375440403 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -31,6 +31,7 @@ enum perf_type_id {
31 PERF_TYPE_TRACEPOINT = 2, 31 PERF_TYPE_TRACEPOINT = 2,
32 PERF_TYPE_HW_CACHE = 3, 32 PERF_TYPE_HW_CACHE = 3,
33 PERF_TYPE_RAW = 4, 33 PERF_TYPE_RAW = 4,
34 PERF_TYPE_BREAKPOINT = 5,
34 35
35 PERF_TYPE_MAX, /* non-ABI */ 36 PERF_TYPE_MAX, /* non-ABI */
36}; 37};
@@ -102,6 +103,8 @@ enum perf_sw_ids {
102 PERF_COUNT_SW_CPU_MIGRATIONS = 4, 103 PERF_COUNT_SW_CPU_MIGRATIONS = 4,
103 PERF_COUNT_SW_PAGE_FAULTS_MIN = 5, 104 PERF_COUNT_SW_PAGE_FAULTS_MIN = 5,
104 PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6, 105 PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6,
106 PERF_COUNT_SW_ALIGNMENT_FAULTS = 7,
107 PERF_COUNT_SW_EMULATION_FAULTS = 8,
105 108
106 PERF_COUNT_SW_MAX, /* non-ABI */ 109 PERF_COUNT_SW_MAX, /* non-ABI */
107}; 110};
@@ -207,9 +210,10 @@ struct perf_event_attr {
207 __u32 wakeup_events; /* wakeup every n events */ 210 __u32 wakeup_events; /* wakeup every n events */
208 __u32 wakeup_watermark; /* bytes before wakeup */ 211 __u32 wakeup_watermark; /* bytes before wakeup */
209 }; 212 };
210 __u32 __reserved_2;
211 213
212 __u64 __reserved_3; 214 __u32 bp_type;
215 __u64 bp_addr;
216 __u64 bp_len;
213}; 217};
214 218
215/* 219/*
@@ -219,8 +223,9 @@ struct perf_event_attr {
219#define PERF_EVENT_IOC_DISABLE _IO ('$', 1) 223#define PERF_EVENT_IOC_DISABLE _IO ('$', 1)
220#define PERF_EVENT_IOC_REFRESH _IO ('$', 2) 224#define PERF_EVENT_IOC_REFRESH _IO ('$', 2)
221#define PERF_EVENT_IOC_RESET _IO ('$', 3) 225#define PERF_EVENT_IOC_RESET _IO ('$', 3)
222#define PERF_EVENT_IOC_PERIOD _IOW('$', 4, u64) 226#define PERF_EVENT_IOC_PERIOD _IOW('$', 4, __u64)
223#define PERF_EVENT_IOC_SET_OUTPUT _IO ('$', 5) 227#define PERF_EVENT_IOC_SET_OUTPUT _IO ('$', 5)
228#define PERF_EVENT_IOC_SET_FILTER _IOW('$', 6, char *)
224 229
225enum perf_event_ioc_flags { 230enum perf_event_ioc_flags {
226 PERF_IOC_FLAG_GROUP = 1U << 0, 231 PERF_IOC_FLAG_GROUP = 1U << 0,
@@ -283,7 +288,7 @@ struct perf_event_mmap_page {
283}; 288};
284 289
285#define PERF_RECORD_MISC_CPUMODE_MASK (3 << 0) 290#define PERF_RECORD_MISC_CPUMODE_MASK (3 << 0)
286#define PERF_RECORD_MISC_CPUMODE_UNKNOWN (0 << 0) 291#define PERF_RECORD_MISC_CPUMODE_UNKNOWN (0 << 0)
287#define PERF_RECORD_MISC_KERNEL (1 << 0) 292#define PERF_RECORD_MISC_KERNEL (1 << 0)
288#define PERF_RECORD_MISC_USER (2 << 0) 293#define PERF_RECORD_MISC_USER (2 << 0)
289#define PERF_RECORD_MISC_HYPERVISOR (3 << 0) 294#define PERF_RECORD_MISC_HYPERVISOR (3 << 0)
@@ -349,8 +354,8 @@ enum perf_event_type {
349 * u64 stream_id; 354 * u64 stream_id;
350 * }; 355 * };
351 */ 356 */
352 PERF_RECORD_THROTTLE = 5, 357 PERF_RECORD_THROTTLE = 5,
353 PERF_RECORD_UNTHROTTLE = 6, 358 PERF_RECORD_UNTHROTTLE = 6,
354 359
355 /* 360 /*
356 * struct { 361 * struct {
@@ -364,10 +369,10 @@ enum perf_event_type {
364 369
365 /* 370 /*
366 * struct { 371 * struct {
367 * struct perf_event_header header; 372 * struct perf_event_header header;
368 * u32 pid, tid; 373 * u32 pid, tid;
369 * 374 *
370 * struct read_format values; 375 * struct read_format values;
371 * }; 376 * };
372 */ 377 */
373 PERF_RECORD_READ = 8, 378 PERF_RECORD_READ = 8,
@@ -405,7 +410,7 @@ enum perf_event_type {
405 * char data[size];}&& PERF_SAMPLE_RAW 410 * char data[size];}&& PERF_SAMPLE_RAW
406 * }; 411 * };
407 */ 412 */
408 PERF_RECORD_SAMPLE = 9, 413 PERF_RECORD_SAMPLE = 9,
409 414
410 PERF_RECORD_MAX, /* non-ABI */ 415 PERF_RECORD_MAX, /* non-ABI */
411}; 416};
@@ -434,6 +439,10 @@ enum perf_callchain_context {
434# include <asm/perf_event.h> 439# include <asm/perf_event.h>
435#endif 440#endif
436 441
442#ifdef CONFIG_HAVE_HW_BREAKPOINT
443#include <asm/hw_breakpoint.h>
444#endif
445
437#include <linux/list.h> 446#include <linux/list.h>
438#include <linux/mutex.h> 447#include <linux/mutex.h>
439#include <linux/rculist.h> 448#include <linux/rculist.h>
@@ -443,6 +452,8 @@ enum perf_callchain_context {
443#include <linux/fs.h> 452#include <linux/fs.h>
444#include <linux/pid_namespace.h> 453#include <linux/pid_namespace.h>
445#include <linux/workqueue.h> 454#include <linux/workqueue.h>
455#include <linux/ftrace.h>
456#include <linux/cpu.h>
446#include <asm/atomic.h> 457#include <asm/atomic.h>
447 458
448#define PERF_MAX_STACK_DEPTH 255 459#define PERF_MAX_STACK_DEPTH 255
@@ -467,14 +478,20 @@ struct hw_perf_event {
467 union { 478 union {
468 struct { /* hardware */ 479 struct { /* hardware */
469 u64 config; 480 u64 config;
481 u64 last_tag;
470 unsigned long config_base; 482 unsigned long config_base;
471 unsigned long event_base; 483 unsigned long event_base;
472 int idx; 484 int idx;
485 int last_cpu;
473 }; 486 };
474 struct { /* software */ 487 struct { /* software */
475 s64 remaining; 488 s64 remaining;
476 struct hrtimer hrtimer; 489 struct hrtimer hrtimer;
477 }; 490 };
491#ifdef CONFIG_HAVE_HW_BREAKPOINT
492 /* breakpoint */
493 struct arch_hw_breakpoint info;
494#endif
478 }; 495 };
479 atomic64_t prev_count; 496 atomic64_t prev_count;
480 u64 sample_period; 497 u64 sample_period;
@@ -482,9 +499,8 @@ struct hw_perf_event {
482 atomic64_t period_left; 499 atomic64_t period_left;
483 u64 interrupts; 500 u64 interrupts;
484 501
485 u64 freq_count; 502 u64 freq_time_stamp;
486 u64 freq_interrupts; 503 u64 freq_count_stamp;
487 u64 freq_stamp;
488#endif 504#endif
489}; 505};
490 506
@@ -496,6 +512,8 @@ struct perf_event;
496struct pmu { 512struct pmu {
497 int (*enable) (struct perf_event *event); 513 int (*enable) (struct perf_event *event);
498 void (*disable) (struct perf_event *event); 514 void (*disable) (struct perf_event *event);
515 int (*start) (struct perf_event *event);
516 void (*stop) (struct perf_event *event);
499 void (*read) (struct perf_event *event); 517 void (*read) (struct perf_event *event);
500 void (*unthrottle) (struct perf_event *event); 518 void (*unthrottle) (struct perf_event *event);
501}; 519};
@@ -543,6 +561,16 @@ struct perf_pending_entry {
543 void (*func)(struct perf_pending_entry *); 561 void (*func)(struct perf_pending_entry *);
544}; 562};
545 563
564struct perf_sample_data;
565
566typedef void (*perf_overflow_handler_t)(struct perf_event *, int,
567 struct perf_sample_data *,
568 struct pt_regs *regs);
569
570enum perf_group_flag {
571 PERF_GROUP_SOFTWARE = 0x1,
572};
573
546/** 574/**
547 * struct perf_event - performance event kernel representation: 575 * struct perf_event - performance event kernel representation:
548 */ 576 */
@@ -552,6 +580,7 @@ struct perf_event {
552 struct list_head event_entry; 580 struct list_head event_entry;
553 struct list_head sibling_list; 581 struct list_head sibling_list;
554 int nr_siblings; 582 int nr_siblings;
583 int group_flags;
555 struct perf_event *group_leader; 584 struct perf_event *group_leader;
556 struct perf_event *output; 585 struct perf_event *output;
557 const struct pmu *pmu; 586 const struct pmu *pmu;
@@ -585,7 +614,7 @@ struct perf_event {
585 u64 tstamp_running; 614 u64 tstamp_running;
586 u64 tstamp_stopped; 615 u64 tstamp_stopped;
587 616
588 struct perf_event_attr attr; 617 struct perf_event_attr attr;
589 struct hw_perf_event hw; 618 struct hw_perf_event hw;
590 619
591 struct perf_event_context *ctx; 620 struct perf_event_context *ctx;
@@ -633,7 +662,14 @@ struct perf_event {
633 662
634 struct pid_namespace *ns; 663 struct pid_namespace *ns;
635 u64 id; 664 u64 id;
665
666 perf_overflow_handler_t overflow_handler;
667
668#ifdef CONFIG_EVENT_TRACING
669 struct event_filter *filter;
636#endif 670#endif
671
672#endif /* CONFIG_PERF_EVENTS */
637}; 673};
638 674
639/** 675/**
@@ -646,7 +682,7 @@ struct perf_event_context {
646 * Protect the states of the events in the list, 682 * Protect the states of the events in the list,
647 * nr_active, and the list: 683 * nr_active, and the list:
648 */ 684 */
649 spinlock_t lock; 685 raw_spinlock_t lock;
650 /* 686 /*
651 * Protect the list of events. Locking either mutex or lock 687 * Protect the list of events. Locking either mutex or lock
652 * is sufficient to ensure the list doesn't change; to change 688 * is sufficient to ensure the list doesn't change; to change
@@ -654,7 +690,8 @@ struct perf_event_context {
654 */ 690 */
655 struct mutex mutex; 691 struct mutex mutex;
656 692
657 struct list_head group_list; 693 struct list_head pinned_groups;
694 struct list_head flexible_groups;
658 struct list_head event_list; 695 struct list_head event_list;
659 int nr_events; 696 int nr_events;
660 int nr_active; 697 int nr_active;
@@ -706,7 +743,6 @@ struct perf_output_handle {
706 int nmi; 743 int nmi;
707 int sample; 744 int sample;
708 int locked; 745 int locked;
709 unsigned long flags;
710}; 746};
711 747
712#ifdef CONFIG_PERF_EVENTS 748#ifdef CONFIG_PERF_EVENTS
@@ -718,10 +754,9 @@ extern int perf_max_events;
718 754
719extern const struct pmu *hw_perf_event_init(struct perf_event *event); 755extern const struct pmu *hw_perf_event_init(struct perf_event *event);
720 756
721extern void perf_event_task_sched_in(struct task_struct *task, int cpu); 757extern void perf_event_task_sched_in(struct task_struct *task);
722extern void perf_event_task_sched_out(struct task_struct *task, 758extern void perf_event_task_sched_out(struct task_struct *task, struct task_struct *next);
723 struct task_struct *next, int cpu); 759extern void perf_event_task_tick(struct task_struct *task);
724extern void perf_event_task_tick(struct task_struct *task, int cpu);
725extern int perf_event_init_task(struct task_struct *child); 760extern int perf_event_init_task(struct task_struct *child);
726extern void perf_event_exit_task(struct task_struct *child); 761extern void perf_event_exit_task(struct task_struct *child);
727extern void perf_event_free_task(struct task_struct *task); 762extern void perf_event_free_task(struct task_struct *task);
@@ -736,8 +771,16 @@ extern int perf_event_task_disable(void);
736extern int perf_event_task_enable(void); 771extern int perf_event_task_enable(void);
737extern int hw_perf_group_sched_in(struct perf_event *group_leader, 772extern int hw_perf_group_sched_in(struct perf_event *group_leader,
738 struct perf_cpu_context *cpuctx, 773 struct perf_cpu_context *cpuctx,
739 struct perf_event_context *ctx, int cpu); 774 struct perf_event_context *ctx);
740extern void perf_event_update_userpage(struct perf_event *event); 775extern void perf_event_update_userpage(struct perf_event *event);
776extern int perf_event_release_kernel(struct perf_event *event);
777extern struct perf_event *
778perf_event_create_kernel_counter(struct perf_event_attr *attr,
779 int cpu,
780 pid_t pid,
781 perf_overflow_handler_t callback);
782extern u64 perf_event_read_value(struct perf_event *event,
783 u64 *enabled, u64 *running);
741 784
742struct perf_sample_data { 785struct perf_sample_data {
743 u64 type; 786 u64 type;
@@ -760,6 +803,13 @@ struct perf_sample_data {
760 struct perf_raw_record *raw; 803 struct perf_raw_record *raw;
761}; 804};
762 805
806static inline
807void perf_sample_data_init(struct perf_sample_data *data, u64 addr)
808{
809 data->addr = addr;
810 data->raw = NULL;
811}
812
763extern void perf_output_sample(struct perf_output_handle *handle, 813extern void perf_output_sample(struct perf_output_handle *handle,
764 struct perf_event_header *header, 814 struct perf_event_header *header,
765 struct perf_sample_data *data, 815 struct perf_sample_data *data,
@@ -778,20 +828,70 @@ extern int perf_event_overflow(struct perf_event *event, int nmi,
778 */ 828 */
779static inline int is_software_event(struct perf_event *event) 829static inline int is_software_event(struct perf_event *event)
780{ 830{
781 return (event->attr.type != PERF_TYPE_RAW) && 831 switch (event->attr.type) {
782 (event->attr.type != PERF_TYPE_HARDWARE) && 832 case PERF_TYPE_SOFTWARE:
783 (event->attr.type != PERF_TYPE_HW_CACHE); 833 case PERF_TYPE_TRACEPOINT:
834 /* for now the breakpoint stuff also works as software event */
835 case PERF_TYPE_BREAKPOINT:
836 return 1;
837 }
838 return 0;
784} 839}
785 840
786extern atomic_t perf_swevent_enabled[PERF_COUNT_SW_MAX]; 841extern atomic_t perf_swevent_enabled[PERF_COUNT_SW_MAX];
787 842
788extern void __perf_sw_event(u32, u64, int, struct pt_regs *, u64); 843extern void __perf_sw_event(u32, u64, int, struct pt_regs *, u64);
789 844
845extern void
846perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip, int skip);
847
848/*
849 * Take a snapshot of the regs. Skip ip and frame pointer to
850 * the nth caller. We only need a few of the regs:
851 * - ip for PERF_SAMPLE_IP
852 * - cs for user_mode() tests
853 * - bp for callchains
854 * - eflags, for future purposes, just in case
855 */
856static inline void perf_fetch_caller_regs(struct pt_regs *regs, int skip)
857{
858 unsigned long ip;
859
860 memset(regs, 0, sizeof(*regs));
861
862 switch (skip) {
863 case 1 :
864 ip = CALLER_ADDR0;
865 break;
866 case 2 :
867 ip = CALLER_ADDR1;
868 break;
869 case 3 :
870 ip = CALLER_ADDR2;
871 break;
872 case 4:
873 ip = CALLER_ADDR3;
874 break;
875 /* No need to support further for now */
876 default:
877 ip = 0;
878 }
879
880 return perf_arch_fetch_caller_regs(regs, ip, skip);
881}
882
790static inline void 883static inline void
791perf_sw_event(u32 event_id, u64 nr, int nmi, struct pt_regs *regs, u64 addr) 884perf_sw_event(u32 event_id, u64 nr, int nmi, struct pt_regs *regs, u64 addr)
792{ 885{
793 if (atomic_read(&perf_swevent_enabled[event_id])) 886 if (atomic_read(&perf_swevent_enabled[event_id])) {
887 struct pt_regs hot_regs;
888
889 if (!regs) {
890 perf_fetch_caller_regs(&hot_regs, 1);
891 regs = &hot_regs;
892 }
794 __perf_sw_event(event_id, nr, nmi, regs, addr); 893 __perf_sw_event(event_id, nr, nmi, regs, addr);
894 }
795} 895}
796 896
797extern void __perf_event_mmap(struct vm_area_struct *vma); 897extern void __perf_event_mmap(struct vm_area_struct *vma);
@@ -811,9 +911,25 @@ extern int sysctl_perf_event_paranoid;
811extern int sysctl_perf_event_mlock; 911extern int sysctl_perf_event_mlock;
812extern int sysctl_perf_event_sample_rate; 912extern int sysctl_perf_event_sample_rate;
813 913
914static inline bool perf_paranoid_tracepoint_raw(void)
915{
916 return sysctl_perf_event_paranoid > -1;
917}
918
919static inline bool perf_paranoid_cpu(void)
920{
921 return sysctl_perf_event_paranoid > 0;
922}
923
924static inline bool perf_paranoid_kernel(void)
925{
926 return sysctl_perf_event_paranoid > 1;
927}
928
814extern void perf_event_init(void); 929extern void perf_event_init(void);
815extern void perf_tp_event(int event_id, u64 addr, u64 count, 930extern void perf_tp_event(int event_id, u64 addr, u64 count, void *record,
816 void *record, int entry_size); 931 int entry_size, struct pt_regs *regs);
932extern void perf_bp_event(struct perf_event *event, void *data);
817 933
818#ifndef perf_misc_flags 934#ifndef perf_misc_flags
819#define perf_misc_flags(regs) (user_mode(regs) ? PERF_RECORD_MISC_USER : \ 935#define perf_misc_flags(regs) (user_mode(regs) ? PERF_RECORD_MISC_USER : \
@@ -827,14 +943,18 @@ extern int perf_output_begin(struct perf_output_handle *handle,
827extern void perf_output_end(struct perf_output_handle *handle); 943extern void perf_output_end(struct perf_output_handle *handle);
828extern void perf_output_copy(struct perf_output_handle *handle, 944extern void perf_output_copy(struct perf_output_handle *handle,
829 const void *buf, unsigned int len); 945 const void *buf, unsigned int len);
946extern int perf_swevent_get_recursion_context(void);
947extern void perf_swevent_put_recursion_context(int rctx);
948extern void perf_event_enable(struct perf_event *event);
949extern void perf_event_disable(struct perf_event *event);
830#else 950#else
831static inline void 951static inline void
832perf_event_task_sched_in(struct task_struct *task, int cpu) { } 952perf_event_task_sched_in(struct task_struct *task) { }
833static inline void 953static inline void
834perf_event_task_sched_out(struct task_struct *task, 954perf_event_task_sched_out(struct task_struct *task,
835 struct task_struct *next, int cpu) { } 955 struct task_struct *next) { }
836static inline void 956static inline void
837perf_event_task_tick(struct task_struct *task, int cpu) { } 957perf_event_task_tick(struct task_struct *task) { }
838static inline int perf_event_init_task(struct task_struct *child) { return 0; } 958static inline int perf_event_init_task(struct task_struct *child) { return 0; }
839static inline void perf_event_exit_task(struct task_struct *child) { } 959static inline void perf_event_exit_task(struct task_struct *child) { }
840static inline void perf_event_free_task(struct task_struct *task) { } 960static inline void perf_event_free_task(struct task_struct *task) { }
@@ -848,16 +968,37 @@ static inline int perf_event_task_enable(void) { return -EINVAL; }
848static inline void 968static inline void
849perf_sw_event(u32 event_id, u64 nr, int nmi, 969perf_sw_event(u32 event_id, u64 nr, int nmi,
850 struct pt_regs *regs, u64 addr) { } 970 struct pt_regs *regs, u64 addr) { }
971static inline void
972perf_bp_event(struct perf_event *event, void *data) { }
851 973
852static inline void perf_event_mmap(struct vm_area_struct *vma) { } 974static inline void perf_event_mmap(struct vm_area_struct *vma) { }
853static inline void perf_event_comm(struct task_struct *tsk) { } 975static inline void perf_event_comm(struct task_struct *tsk) { }
854static inline void perf_event_fork(struct task_struct *tsk) { } 976static inline void perf_event_fork(struct task_struct *tsk) { }
855static inline void perf_event_init(void) { } 977static inline void perf_event_init(void) { }
856 978static inline int perf_swevent_get_recursion_context(void) { return -1; }
979static inline void perf_swevent_put_recursion_context(int rctx) { }
980static inline void perf_event_enable(struct perf_event *event) { }
981static inline void perf_event_disable(struct perf_event *event) { }
857#endif 982#endif
858 983
859#define perf_output_put(handle, x) \ 984#define perf_output_put(handle, x) \
860 perf_output_copy((handle), &(x), sizeof(x)) 985 perf_output_copy((handle), &(x), sizeof(x))
861 986
987/*
988 * This has to have a higher priority than migration_notifier in sched.c.
989 */
990#define perf_cpu_notifier(fn) \
991do { \
992 static struct notifier_block fn##_nb __cpuinitdata = \
993 { .notifier_call = fn, .priority = 20 }; \
994 fn(&fn##_nb, (unsigned long)CPU_UP_PREPARE, \
995 (void *)(unsigned long)smp_processor_id()); \
996 fn(&fn##_nb, (unsigned long)CPU_STARTING, \
997 (void *)(unsigned long)smp_processor_id()); \
998 fn(&fn##_nb, (unsigned long)CPU_ONLINE, \
999 (void *)(unsigned long)smp_processor_id()); \
1000 register_cpu_notifier(&fn##_nb); \
1001} while (0)
1002
862#endif /* __KERNEL__ */ 1003#endif /* __KERNEL__ */
863#endif /* _LINUX_PERF_EVENT_H */ 1004#endif /* _LINUX_PERF_EVENT_H */
diff --git a/include/linux/pfkeyv2.h b/include/linux/pfkeyv2.h
index 228b0b6306b0..0b80c806631f 100644
--- a/include/linux/pfkeyv2.h
+++ b/include/linux/pfkeyv2.h
@@ -315,6 +315,7 @@ struct sadb_x_kmaddress {
315#define SADB_X_EALG_AES_GCM_ICV12 19 315#define SADB_X_EALG_AES_GCM_ICV12 19
316#define SADB_X_EALG_AES_GCM_ICV16 20 316#define SADB_X_EALG_AES_GCM_ICV16 20
317#define SADB_X_EALG_CAMELLIACBC 22 317#define SADB_X_EALG_CAMELLIACBC 22
318#define SADB_X_EALG_NULL_AES_GMAC 23
318#define SADB_EALG_MAX 253 /* last EALG */ 319#define SADB_EALG_MAX 253 /* last EALG */
319/* private allocations should use 249-255 (RFC2407) */ 320/* private allocations should use 249-255 (RFC2407) */
320#define SADB_X_EALG_SERPENTCBC 252 /* draft-ietf-ipsec-ciph-aes-cbc-00 */ 321#define SADB_X_EALG_SERPENTCBC 252 /* draft-ietf-ipsec-ciph-aes-cbc-00 */
diff --git a/include/linux/phy.h b/include/linux/phy.h
index b1368b8f6572..14d7fdf6a90a 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -447,10 +447,12 @@ struct phy_device* get_phy_device(struct mii_bus *bus, int addr);
447int phy_device_register(struct phy_device *phy); 447int phy_device_register(struct phy_device *phy);
448int phy_clear_interrupt(struct phy_device *phydev); 448int phy_clear_interrupt(struct phy_device *phydev);
449int phy_config_interrupt(struct phy_device *phydev, u32 interrupts); 449int phy_config_interrupt(struct phy_device *phydev, u32 interrupts);
450int phy_init_hw(struct phy_device *phydev);
450int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, 451int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
451 u32 flags, phy_interface_t interface); 452 u32 flags, phy_interface_t interface);
452struct phy_device * phy_attach(struct net_device *dev, 453struct phy_device * phy_attach(struct net_device *dev,
453 const char *bus_id, u32 flags, phy_interface_t interface); 454 const char *bus_id, u32 flags, phy_interface_t interface);
455struct phy_device *phy_find_first(struct mii_bus *bus);
454int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, 456int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
455 void (*handler)(struct net_device *), u32 flags, 457 void (*handler)(struct net_device *), u32 flags,
456 phy_interface_t interface); 458 phy_interface_t interface);
@@ -484,6 +486,7 @@ void phy_driver_unregister(struct phy_driver *drv);
484int phy_driver_register(struct phy_driver *new_driver); 486int phy_driver_register(struct phy_driver *new_driver);
485void phy_prepare_link(struct phy_device *phydev, 487void phy_prepare_link(struct phy_device *phydev,
486 void (*adjust_link)(struct net_device *)); 488 void (*adjust_link)(struct net_device *));
489void phy_state_machine(struct work_struct *work);
487void phy_start_machine(struct phy_device *phydev, 490void phy_start_machine(struct phy_device *phydev,
488 void (*handler)(struct net_device *)); 491 void (*handler)(struct net_device *));
489void phy_stop_machine(struct phy_device *phydev); 492void phy_stop_machine(struct phy_device *phydev);
diff --git a/include/linux/pkt_cls.h b/include/linux/pkt_cls.h
index 3c842edff388..7f6ba8658abe 100644
--- a/include/linux/pkt_cls.h
+++ b/include/linux/pkt_cls.h
@@ -75,8 +75,7 @@ bits 9,10,11: redirect counter - redirect TTL. Loop avoidance
75#define SET_TC_AT(v,n) ((V_TC_AT(n)) | (v & ~M_TC_AT)) 75#define SET_TC_AT(v,n) ((V_TC_AT(n)) | (v & ~M_TC_AT))
76 76
77/* Action attributes */ 77/* Action attributes */
78enum 78enum {
79{
80 TCA_ACT_UNSPEC, 79 TCA_ACT_UNSPEC,
81 TCA_ACT_KIND, 80 TCA_ACT_KIND,
82 TCA_ACT_OPTIONS, 81 TCA_ACT_OPTIONS,
@@ -108,8 +107,7 @@ enum
108#define TC_ACT_JUMP 0x10000000 107#define TC_ACT_JUMP 0x10000000
109 108
110/* Action type identifiers*/ 109/* Action type identifiers*/
111enum 110enum {
112{
113 TCA_ID_UNSPEC=0, 111 TCA_ID_UNSPEC=0,
114 TCA_ID_POLICE=1, 112 TCA_ID_POLICE=1,
115 /* other actions go here */ 113 /* other actions go here */
@@ -118,8 +116,7 @@ enum
118 116
119#define TCA_ID_MAX __TCA_ID_MAX 117#define TCA_ID_MAX __TCA_ID_MAX
120 118
121struct tc_police 119struct tc_police {
122{
123 __u32 index; 120 __u32 index;
124 int action; 121 int action;
125#define TC_POLICE_UNSPEC TC_ACT_UNSPEC 122#define TC_POLICE_UNSPEC TC_ACT_UNSPEC
@@ -138,15 +135,13 @@ struct tc_police
138 __u32 capab; 135 __u32 capab;
139}; 136};
140 137
141struct tcf_t 138struct tcf_t {
142{
143 __u64 install; 139 __u64 install;
144 __u64 lastuse; 140 __u64 lastuse;
145 __u64 expires; 141 __u64 expires;
146}; 142};
147 143
148struct tc_cnt 144struct tc_cnt {
149{
150 int refcnt; 145 int refcnt;
151 int bindcnt; 146 int bindcnt;
152}; 147};
@@ -158,8 +153,7 @@ struct tc_cnt
158 int refcnt; \ 153 int refcnt; \
159 int bindcnt 154 int bindcnt
160 155
161enum 156enum {
162{
163 TCA_POLICE_UNSPEC, 157 TCA_POLICE_UNSPEC,
164 TCA_POLICE_TBF, 158 TCA_POLICE_TBF,
165 TCA_POLICE_RATE, 159 TCA_POLICE_RATE,
@@ -182,8 +176,7 @@ enum
182#define TC_U32_UNSPEC 0 176#define TC_U32_UNSPEC 0
183#define TC_U32_ROOT (0xFFF00000) 177#define TC_U32_ROOT (0xFFF00000)
184 178
185enum 179enum {
186{
187 TCA_U32_UNSPEC, 180 TCA_U32_UNSPEC,
188 TCA_U32_CLASSID, 181 TCA_U32_CLASSID,
189 TCA_U32_HASH, 182 TCA_U32_HASH,
@@ -200,16 +193,14 @@ enum
200 193
201#define TCA_U32_MAX (__TCA_U32_MAX - 1) 194#define TCA_U32_MAX (__TCA_U32_MAX - 1)
202 195
203struct tc_u32_key 196struct tc_u32_key {
204{
205 __be32 mask; 197 __be32 mask;
206 __be32 val; 198 __be32 val;
207 int off; 199 int off;
208 int offmask; 200 int offmask;
209}; 201};
210 202
211struct tc_u32_sel 203struct tc_u32_sel {
212{
213 unsigned char flags; 204 unsigned char flags;
214 unsigned char offshift; 205 unsigned char offshift;
215 unsigned char nkeys; 206 unsigned char nkeys;
@@ -223,15 +214,13 @@ struct tc_u32_sel
223 struct tc_u32_key keys[0]; 214 struct tc_u32_key keys[0];
224}; 215};
225 216
226struct tc_u32_mark 217struct tc_u32_mark {
227{
228 __u32 val; 218 __u32 val;
229 __u32 mask; 219 __u32 mask;
230 __u32 success; 220 __u32 success;
231}; 221};
232 222
233struct tc_u32_pcnt 223struct tc_u32_pcnt {
234{
235 __u64 rcnt; 224 __u64 rcnt;
236 __u64 rhit; 225 __u64 rhit;
237 __u64 kcnts[0]; 226 __u64 kcnts[0];
@@ -249,8 +238,7 @@ struct tc_u32_pcnt
249 238
250/* RSVP filter */ 239/* RSVP filter */
251 240
252enum 241enum {
253{
254 TCA_RSVP_UNSPEC, 242 TCA_RSVP_UNSPEC,
255 TCA_RSVP_CLASSID, 243 TCA_RSVP_CLASSID,
256 TCA_RSVP_DST, 244 TCA_RSVP_DST,
@@ -263,15 +251,13 @@ enum
263 251
264#define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 ) 252#define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 )
265 253
266struct tc_rsvp_gpi 254struct tc_rsvp_gpi {
267{
268 __u32 key; 255 __u32 key;
269 __u32 mask; 256 __u32 mask;
270 int offset; 257 int offset;
271}; 258};
272 259
273struct tc_rsvp_pinfo 260struct tc_rsvp_pinfo {
274{
275 struct tc_rsvp_gpi dpi; 261 struct tc_rsvp_gpi dpi;
276 struct tc_rsvp_gpi spi; 262 struct tc_rsvp_gpi spi;
277 __u8 protocol; 263 __u8 protocol;
@@ -282,8 +268,7 @@ struct tc_rsvp_pinfo
282 268
283/* ROUTE filter */ 269/* ROUTE filter */
284 270
285enum 271enum {
286{
287 TCA_ROUTE4_UNSPEC, 272 TCA_ROUTE4_UNSPEC,
288 TCA_ROUTE4_CLASSID, 273 TCA_ROUTE4_CLASSID,
289 TCA_ROUTE4_TO, 274 TCA_ROUTE4_TO,
@@ -299,8 +284,7 @@ enum
299 284
300/* FW filter */ 285/* FW filter */
301 286
302enum 287enum {
303{
304 TCA_FW_UNSPEC, 288 TCA_FW_UNSPEC,
305 TCA_FW_CLASSID, 289 TCA_FW_CLASSID,
306 TCA_FW_POLICE, 290 TCA_FW_POLICE,
@@ -314,8 +298,7 @@ enum
314 298
315/* TC index filter */ 299/* TC index filter */
316 300
317enum 301enum {
318{
319 TCA_TCINDEX_UNSPEC, 302 TCA_TCINDEX_UNSPEC,
320 TCA_TCINDEX_HASH, 303 TCA_TCINDEX_HASH,
321 TCA_TCINDEX_MASK, 304 TCA_TCINDEX_MASK,
@@ -331,8 +314,7 @@ enum
331 314
332/* Flow filter */ 315/* Flow filter */
333 316
334enum 317enum {
335{
336 FLOW_KEY_SRC, 318 FLOW_KEY_SRC,
337 FLOW_KEY_DST, 319 FLOW_KEY_DST,
338 FLOW_KEY_PROTO, 320 FLOW_KEY_PROTO,
@@ -355,14 +337,12 @@ enum
355 337
356#define FLOW_KEY_MAX (__FLOW_KEY_MAX - 1) 338#define FLOW_KEY_MAX (__FLOW_KEY_MAX - 1)
357 339
358enum 340enum {
359{
360 FLOW_MODE_MAP, 341 FLOW_MODE_MAP,
361 FLOW_MODE_HASH, 342 FLOW_MODE_HASH,
362}; 343};
363 344
364enum 345enum {
365{
366 TCA_FLOW_UNSPEC, 346 TCA_FLOW_UNSPEC,
367 TCA_FLOW_KEYS, 347 TCA_FLOW_KEYS,
368 TCA_FLOW_MODE, 348 TCA_FLOW_MODE,
@@ -383,8 +363,7 @@ enum
383 363
384/* Basic filter */ 364/* Basic filter */
385 365
386enum 366enum {
387{
388 TCA_BASIC_UNSPEC, 367 TCA_BASIC_UNSPEC,
389 TCA_BASIC_CLASSID, 368 TCA_BASIC_CLASSID,
390 TCA_BASIC_EMATCHES, 369 TCA_BASIC_EMATCHES,
@@ -398,8 +377,7 @@ enum
398 377
399/* Cgroup classifier */ 378/* Cgroup classifier */
400 379
401enum 380enum {
402{
403 TCA_CGROUP_UNSPEC, 381 TCA_CGROUP_UNSPEC,
404 TCA_CGROUP_ACT, 382 TCA_CGROUP_ACT,
405 TCA_CGROUP_POLICE, 383 TCA_CGROUP_POLICE,
@@ -411,14 +389,12 @@ enum
411 389
412/* Extended Matches */ 390/* Extended Matches */
413 391
414struct tcf_ematch_tree_hdr 392struct tcf_ematch_tree_hdr {
415{
416 __u16 nmatches; 393 __u16 nmatches;
417 __u16 progid; 394 __u16 progid;
418}; 395};
419 396
420enum 397enum {
421{
422 TCA_EMATCH_TREE_UNSPEC, 398 TCA_EMATCH_TREE_UNSPEC,
423 TCA_EMATCH_TREE_HDR, 399 TCA_EMATCH_TREE_HDR,
424 TCA_EMATCH_TREE_LIST, 400 TCA_EMATCH_TREE_LIST,
@@ -426,8 +402,7 @@ enum
426}; 402};
427#define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1) 403#define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1)
428 404
429struct tcf_ematch_hdr 405struct tcf_ematch_hdr {
430{
431 __u16 matchid; 406 __u16 matchid;
432 __u16 kind; 407 __u16 kind;
433 __u16 flags; 408 __u16 flags;
@@ -457,8 +432,7 @@ struct tcf_ematch_hdr
457#define TCF_EM_REL_MASK 3 432#define TCF_EM_REL_MASK 3
458#define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK) 433#define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK)
459 434
460enum 435enum {
461{
462 TCF_LAYER_LINK, 436 TCF_LAYER_LINK,
463 TCF_LAYER_NETWORK, 437 TCF_LAYER_NETWORK,
464 TCF_LAYER_TRANSPORT, 438 TCF_LAYER_TRANSPORT,
@@ -479,13 +453,11 @@ enum
479#define TCF_EM_VLAN 6 453#define TCF_EM_VLAN 6
480#define TCF_EM_MAX 6 454#define TCF_EM_MAX 6
481 455
482enum 456enum {
483{
484 TCF_EM_PROG_TC 457 TCF_EM_PROG_TC
485}; 458};
486 459
487enum 460enum {
488{
489 TCF_EM_OPND_EQ, 461 TCF_EM_OPND_EQ,
490 TCF_EM_OPND_GT, 462 TCF_EM_OPND_GT,
491 TCF_EM_OPND_LT 463 TCF_EM_OPND_LT
diff --git a/include/linux/pkt_sched.h b/include/linux/pkt_sched.h
index d51a2b3e221e..2cfa4bc8dea6 100644
--- a/include/linux/pkt_sched.h
+++ b/include/linux/pkt_sched.h
@@ -29,8 +29,7 @@
29 Particular schedulers may have also their private records. 29 Particular schedulers may have also their private records.
30 */ 30 */
31 31
32struct tc_stats 32struct tc_stats {
33{
34 __u64 bytes; /* NUmber of enqueues bytes */ 33 __u64 bytes; /* NUmber of enqueues bytes */
35 __u32 packets; /* Number of enqueued packets */ 34 __u32 packets; /* Number of enqueued packets */
36 __u32 drops; /* Packets dropped because of lack of resources */ 35 __u32 drops; /* Packets dropped because of lack of resources */
@@ -42,8 +41,7 @@ struct tc_stats
42 __u32 backlog; 41 __u32 backlog;
43}; 42};
44 43
45struct tc_estimator 44struct tc_estimator {
46{
47 signed char interval; 45 signed char interval;
48 unsigned char ewma_log; 46 unsigned char ewma_log;
49}; 47};
@@ -75,8 +73,7 @@ struct tc_estimator
75#define TC_H_ROOT (0xFFFFFFFFU) 73#define TC_H_ROOT (0xFFFFFFFFU)
76#define TC_H_INGRESS (0xFFFFFFF1U) 74#define TC_H_INGRESS (0xFFFFFFF1U)
77 75
78struct tc_ratespec 76struct tc_ratespec {
79{
80 unsigned char cell_log; 77 unsigned char cell_log;
81 unsigned char __reserved; 78 unsigned char __reserved;
82 unsigned short overhead; 79 unsigned short overhead;
@@ -109,8 +106,7 @@ enum {
109 106
110/* FIFO section */ 107/* FIFO section */
111 108
112struct tc_fifo_qopt 109struct tc_fifo_qopt {
113{
114 __u32 limit; /* Queue length: bytes for bfifo, packets for pfifo */ 110 __u32 limit; /* Queue length: bytes for bfifo, packets for pfifo */
115}; 111};
116 112
@@ -119,8 +115,7 @@ struct tc_fifo_qopt
119#define TCQ_PRIO_BANDS 16 115#define TCQ_PRIO_BANDS 16
120#define TCQ_MIN_PRIO_BANDS 2 116#define TCQ_MIN_PRIO_BANDS 2
121 117
122struct tc_prio_qopt 118struct tc_prio_qopt {
123{
124 int bands; /* Number of bands */ 119 int bands; /* Number of bands */
125 __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */ 120 __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */
126}; 121};
@@ -134,8 +129,7 @@ struct tc_multiq_qopt {
134 129
135/* TBF section */ 130/* TBF section */
136 131
137struct tc_tbf_qopt 132struct tc_tbf_qopt {
138{
139 struct tc_ratespec rate; 133 struct tc_ratespec rate;
140 struct tc_ratespec peakrate; 134 struct tc_ratespec peakrate;
141 __u32 limit; 135 __u32 limit;
@@ -143,8 +137,7 @@ struct tc_tbf_qopt
143 __u32 mtu; 137 __u32 mtu;
144}; 138};
145 139
146enum 140enum {
147{
148 TCA_TBF_UNSPEC, 141 TCA_TBF_UNSPEC,
149 TCA_TBF_PARMS, 142 TCA_TBF_PARMS,
150 TCA_TBF_RTAB, 143 TCA_TBF_RTAB,
@@ -161,8 +154,7 @@ enum
161 154
162/* SFQ section */ 155/* SFQ section */
163 156
164struct tc_sfq_qopt 157struct tc_sfq_qopt {
165{
166 unsigned quantum; /* Bytes per round allocated to flow */ 158 unsigned quantum; /* Bytes per round allocated to flow */
167 int perturb_period; /* Period of hash perturbation */ 159 int perturb_period; /* Period of hash perturbation */
168 __u32 limit; /* Maximal packets in queue */ 160 __u32 limit; /* Maximal packets in queue */
@@ -170,8 +162,7 @@ struct tc_sfq_qopt
170 unsigned flows; /* Maximal number of flows */ 162 unsigned flows; /* Maximal number of flows */
171}; 163};
172 164
173struct tc_sfq_xstats 165struct tc_sfq_xstats {
174{
175 __s32 allot; 166 __s32 allot;
176}; 167};
177 168
@@ -186,8 +177,7 @@ struct tc_sfq_xstats
186 177
187/* RED section */ 178/* RED section */
188 179
189enum 180enum {
190{
191 TCA_RED_UNSPEC, 181 TCA_RED_UNSPEC,
192 TCA_RED_PARMS, 182 TCA_RED_PARMS,
193 TCA_RED_STAB, 183 TCA_RED_STAB,
@@ -196,8 +186,7 @@ enum
196 186
197#define TCA_RED_MAX (__TCA_RED_MAX - 1) 187#define TCA_RED_MAX (__TCA_RED_MAX - 1)
198 188
199struct tc_red_qopt 189struct tc_red_qopt {
200{
201 __u32 limit; /* HARD maximal queue length (bytes) */ 190 __u32 limit; /* HARD maximal queue length (bytes) */
202 __u32 qth_min; /* Min average length threshold (bytes) */ 191 __u32 qth_min; /* Min average length threshold (bytes) */
203 __u32 qth_max; /* Max average length threshold (bytes) */ 192 __u32 qth_max; /* Max average length threshold (bytes) */
@@ -209,8 +198,7 @@ struct tc_red_qopt
209#define TC_RED_HARDDROP 2 198#define TC_RED_HARDDROP 2
210}; 199};
211 200
212struct tc_red_xstats 201struct tc_red_xstats {
213{
214 __u32 early; /* Early drops */ 202 __u32 early; /* Early drops */
215 __u32 pdrop; /* Drops due to queue limits */ 203 __u32 pdrop; /* Drops due to queue limits */
216 __u32 other; /* Drops due to drop() calls */ 204 __u32 other; /* Drops due to drop() calls */
@@ -221,8 +209,7 @@ struct tc_red_xstats
221 209
222#define MAX_DPs 16 210#define MAX_DPs 16
223 211
224enum 212enum {
225{
226 TCA_GRED_UNSPEC, 213 TCA_GRED_UNSPEC,
227 TCA_GRED_PARMS, 214 TCA_GRED_PARMS,
228 TCA_GRED_STAB, 215 TCA_GRED_STAB,
@@ -232,8 +219,7 @@ enum
232 219
233#define TCA_GRED_MAX (__TCA_GRED_MAX - 1) 220#define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
234 221
235struct tc_gred_qopt 222struct tc_gred_qopt {
236{
237 __u32 limit; /* HARD maximal queue length (bytes) */ 223 __u32 limit; /* HARD maximal queue length (bytes) */
238 __u32 qth_min; /* Min average length threshold (bytes) */ 224 __u32 qth_min; /* Min average length threshold (bytes) */
239 __u32 qth_max; /* Max average length threshold (bytes) */ 225 __u32 qth_max; /* Max average length threshold (bytes) */
@@ -253,8 +239,7 @@ struct tc_gred_qopt
253}; 239};
254 240
255/* gred setup */ 241/* gred setup */
256struct tc_gred_sopt 242struct tc_gred_sopt {
257{
258 __u32 DPs; 243 __u32 DPs;
259 __u32 def_DP; 244 __u32 def_DP;
260 __u8 grio; 245 __u8 grio;
@@ -267,8 +252,7 @@ struct tc_gred_sopt
267#define TC_HTB_MAXDEPTH 8 252#define TC_HTB_MAXDEPTH 8
268#define TC_HTB_PROTOVER 3 /* the same as HTB and TC's major */ 253#define TC_HTB_PROTOVER 3 /* the same as HTB and TC's major */
269 254
270struct tc_htb_opt 255struct tc_htb_opt {
271{
272 struct tc_ratespec rate; 256 struct tc_ratespec rate;
273 struct tc_ratespec ceil; 257 struct tc_ratespec ceil;
274 __u32 buffer; 258 __u32 buffer;
@@ -277,8 +261,7 @@ struct tc_htb_opt
277 __u32 level; /* out only */ 261 __u32 level; /* out only */
278 __u32 prio; 262 __u32 prio;
279}; 263};
280struct tc_htb_glob 264struct tc_htb_glob {
281{
282 __u32 version; /* to match HTB/TC */ 265 __u32 version; /* to match HTB/TC */
283 __u32 rate2quantum; /* bps->quantum divisor */ 266 __u32 rate2quantum; /* bps->quantum divisor */
284 __u32 defcls; /* default class number */ 267 __u32 defcls; /* default class number */
@@ -287,8 +270,7 @@ struct tc_htb_glob
287 /* stats */ 270 /* stats */
288 __u32 direct_pkts; /* count of non shapped packets */ 271 __u32 direct_pkts; /* count of non shapped packets */
289}; 272};
290enum 273enum {
291{
292 TCA_HTB_UNSPEC, 274 TCA_HTB_UNSPEC,
293 TCA_HTB_PARMS, 275 TCA_HTB_PARMS,
294 TCA_HTB_INIT, 276 TCA_HTB_INIT,
@@ -299,8 +281,7 @@ enum
299 281
300#define TCA_HTB_MAX (__TCA_HTB_MAX - 1) 282#define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
301 283
302struct tc_htb_xstats 284struct tc_htb_xstats {
303{
304 __u32 lends; 285 __u32 lends;
305 __u32 borrows; 286 __u32 borrows;
306 __u32 giants; /* too big packets (rate will not be accurate) */ 287 __u32 giants; /* too big packets (rate will not be accurate) */
@@ -310,28 +291,24 @@ struct tc_htb_xstats
310 291
311/* HFSC section */ 292/* HFSC section */
312 293
313struct tc_hfsc_qopt 294struct tc_hfsc_qopt {
314{
315 __u16 defcls; /* default class */ 295 __u16 defcls; /* default class */
316}; 296};
317 297
318struct tc_service_curve 298struct tc_service_curve {
319{
320 __u32 m1; /* slope of the first segment in bps */ 299 __u32 m1; /* slope of the first segment in bps */
321 __u32 d; /* x-projection of the first segment in us */ 300 __u32 d; /* x-projection of the first segment in us */
322 __u32 m2; /* slope of the second segment in bps */ 301 __u32 m2; /* slope of the second segment in bps */
323}; 302};
324 303
325struct tc_hfsc_stats 304struct tc_hfsc_stats {
326{
327 __u64 work; /* total work done */ 305 __u64 work; /* total work done */
328 __u64 rtwork; /* work done by real-time criteria */ 306 __u64 rtwork; /* work done by real-time criteria */
329 __u32 period; /* current period */ 307 __u32 period; /* current period */
330 __u32 level; /* class level in hierarchy */ 308 __u32 level; /* class level in hierarchy */
331}; 309};
332 310
333enum 311enum {
334{
335 TCA_HFSC_UNSPEC, 312 TCA_HFSC_UNSPEC,
336 TCA_HFSC_RSC, 313 TCA_HFSC_RSC,
337 TCA_HFSC_FSC, 314 TCA_HFSC_FSC,
@@ -348,8 +325,7 @@ enum
348#define TC_CBQ_MAXLEVEL 8 325#define TC_CBQ_MAXLEVEL 8
349#define TC_CBQ_DEF_EWMA 5 326#define TC_CBQ_DEF_EWMA 5
350 327
351struct tc_cbq_lssopt 328struct tc_cbq_lssopt {
352{
353 unsigned char change; 329 unsigned char change;
354 unsigned char flags; 330 unsigned char flags;
355#define TCF_CBQ_LSS_BOUNDED 1 331#define TCF_CBQ_LSS_BOUNDED 1
@@ -368,8 +344,7 @@ struct tc_cbq_lssopt
368 __u32 avpkt; 344 __u32 avpkt;
369}; 345};
370 346
371struct tc_cbq_wrropt 347struct tc_cbq_wrropt {
372{
373 unsigned char flags; 348 unsigned char flags;
374 unsigned char priority; 349 unsigned char priority;
375 unsigned char cpriority; 350 unsigned char cpriority;
@@ -378,8 +353,7 @@ struct tc_cbq_wrropt
378 __u32 weight; 353 __u32 weight;
379}; 354};
380 355
381struct tc_cbq_ovl 356struct tc_cbq_ovl {
382{
383 unsigned char strategy; 357 unsigned char strategy;
384#define TC_CBQ_OVL_CLASSIC 0 358#define TC_CBQ_OVL_CLASSIC 0
385#define TC_CBQ_OVL_DELAY 1 359#define TC_CBQ_OVL_DELAY 1
@@ -391,30 +365,26 @@ struct tc_cbq_ovl
391 __u32 penalty; 365 __u32 penalty;
392}; 366};
393 367
394struct tc_cbq_police 368struct tc_cbq_police {
395{
396 unsigned char police; 369 unsigned char police;
397 unsigned char __res1; 370 unsigned char __res1;
398 unsigned short __res2; 371 unsigned short __res2;
399}; 372};
400 373
401struct tc_cbq_fopt 374struct tc_cbq_fopt {
402{
403 __u32 split; 375 __u32 split;
404 __u32 defmap; 376 __u32 defmap;
405 __u32 defchange; 377 __u32 defchange;
406}; 378};
407 379
408struct tc_cbq_xstats 380struct tc_cbq_xstats {
409{
410 __u32 borrows; 381 __u32 borrows;
411 __u32 overactions; 382 __u32 overactions;
412 __s32 avgidle; 383 __s32 avgidle;
413 __s32 undertime; 384 __s32 undertime;
414}; 385};
415 386
416enum 387enum {
417{
418 TCA_CBQ_UNSPEC, 388 TCA_CBQ_UNSPEC,
419 TCA_CBQ_LSSOPT, 389 TCA_CBQ_LSSOPT,
420 TCA_CBQ_WRROPT, 390 TCA_CBQ_WRROPT,
@@ -459,8 +429,7 @@ enum {
459 429
460/* Network emulator */ 430/* Network emulator */
461 431
462enum 432enum {
463{
464 TCA_NETEM_UNSPEC, 433 TCA_NETEM_UNSPEC,
465 TCA_NETEM_CORR, 434 TCA_NETEM_CORR,
466 TCA_NETEM_DELAY_DIST, 435 TCA_NETEM_DELAY_DIST,
@@ -471,8 +440,7 @@ enum
471 440
472#define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1) 441#define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
473 442
474struct tc_netem_qopt 443struct tc_netem_qopt {
475{
476 __u32 latency; /* added delay (us) */ 444 __u32 latency; /* added delay (us) */
477 __u32 limit; /* fifo limit (packets) */ 445 __u32 limit; /* fifo limit (packets) */
478 __u32 loss; /* random packet loss (0=none ~0=100%) */ 446 __u32 loss; /* random packet loss (0=none ~0=100%) */
@@ -481,21 +449,18 @@ struct tc_netem_qopt
481 __u32 jitter; /* random jitter in latency (us) */ 449 __u32 jitter; /* random jitter in latency (us) */
482}; 450};
483 451
484struct tc_netem_corr 452struct tc_netem_corr {
485{
486 __u32 delay_corr; /* delay correlation */ 453 __u32 delay_corr; /* delay correlation */
487 __u32 loss_corr; /* packet loss correlation */ 454 __u32 loss_corr; /* packet loss correlation */
488 __u32 dup_corr; /* duplicate correlation */ 455 __u32 dup_corr; /* duplicate correlation */
489}; 456};
490 457
491struct tc_netem_reorder 458struct tc_netem_reorder {
492{
493 __u32 probability; 459 __u32 probability;
494 __u32 correlation; 460 __u32 correlation;
495}; 461};
496 462
497struct tc_netem_corrupt 463struct tc_netem_corrupt {
498{
499 __u32 probability; 464 __u32 probability;
500 __u32 correlation; 465 __u32 correlation;
501}; 466};
@@ -504,8 +469,7 @@ struct tc_netem_corrupt
504 469
505/* DRR */ 470/* DRR */
506 471
507enum 472enum {
508{
509 TCA_DRR_UNSPEC, 473 TCA_DRR_UNSPEC,
510 TCA_DRR_QUANTUM, 474 TCA_DRR_QUANTUM,
511 __TCA_DRR_MAX 475 __TCA_DRR_MAX
@@ -513,8 +477,7 @@ enum
513 477
514#define TCA_DRR_MAX (__TCA_DRR_MAX - 1) 478#define TCA_DRR_MAX (__TCA_DRR_MAX - 1)
515 479
516struct tc_drr_stats 480struct tc_drr_stats {
517{
518 __u32 deficit; 481 __u32 deficit;
519}; 482};
520 483
diff --git a/include/linux/pktcdvd.h b/include/linux/pktcdvd.h
index d745f5b6c7b0..721301b0a908 100644
--- a/include/linux/pktcdvd.h
+++ b/include/linux/pktcdvd.h
@@ -30,7 +30,7 @@
30 30
31/* 31/*
32 * use drive write caching -- we need deferred error handling to be 32 * use drive write caching -- we need deferred error handling to be
33 * able to sucessfully recover with this option (drive will return good 33 * able to successfully recover with this option (drive will return good
34 * status as soon as the cdb is validated). 34 * status as soon as the cdb is validated).
35 */ 35 */
36#if defined(CONFIG_CDROM_PKTCDVD_WCACHE) 36#if defined(CONFIG_CDROM_PKTCDVD_WCACHE)
@@ -163,10 +163,8 @@ struct packet_iosched
163 atomic_t attention; /* Set to non-zero when queue processing is needed */ 163 atomic_t attention; /* Set to non-zero when queue processing is needed */
164 int writing; /* Non-zero when writing, zero when reading */ 164 int writing; /* Non-zero when writing, zero when reading */
165 spinlock_t lock; /* Protecting read/write queue manipulations */ 165 spinlock_t lock; /* Protecting read/write queue manipulations */
166 struct bio *read_queue; 166 struct bio_list read_queue;
167 struct bio *read_queue_tail; 167 struct bio_list write_queue;
168 struct bio *write_queue;
169 struct bio *write_queue_tail;
170 sector_t last_write; /* The sector where the last write ended */ 168 sector_t last_write; /* The sector where the last write ended */
171 int successive_reads; 169 int successive_reads;
172}; 170};
@@ -206,8 +204,8 @@ struct packet_data
206 spinlock_t lock; /* Lock protecting state transitions and */ 204 spinlock_t lock; /* Lock protecting state transitions and */
207 /* orig_bios list */ 205 /* orig_bios list */
208 206
209 struct bio *orig_bios; /* Original bios passed to pkt_make_request */ 207 struct bio_list orig_bios; /* Original bios passed to pkt_make_request */
210 struct bio *orig_bios_tail;/* that will be handled by this packet */ 208 /* that will be handled by this packet */
211 int write_size; /* Total size of all bios in the orig_bios */ 209 int write_size; /* Total size of all bios in the orig_bios */
212 /* list, measured in number of frames */ 210 /* list, measured in number of frames */
213 211
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
index 3c6675c2444b..212da17d06af 100644
--- a/include/linux/platform_device.h
+++ b/include/linux/platform_device.h
@@ -21,7 +21,7 @@ struct platform_device {
21 u32 num_resources; 21 u32 num_resources;
22 struct resource * resource; 22 struct resource * resource;
23 23
24 struct platform_device_id *id_entry; 24 const struct platform_device_id *id_entry;
25 25
26 /* arch specific additions */ 26 /* arch specific additions */
27 struct pdev_archdata archdata; 27 struct pdev_archdata archdata;
@@ -62,7 +62,7 @@ struct platform_driver {
62 int (*suspend)(struct platform_device *, pm_message_t state); 62 int (*suspend)(struct platform_device *, pm_message_t state);
63 int (*resume)(struct platform_device *); 63 int (*resume)(struct platform_device *);
64 struct device_driver driver; 64 struct device_driver driver;
65 struct platform_device_id *id_table; 65 const struct platform_device_id *id_table;
66}; 66};
67 67
68extern int platform_driver_register(struct platform_driver *); 68extern int platform_driver_register(struct platform_driver *);
@@ -77,12 +77,19 @@ extern int platform_driver_probe(struct platform_driver *driver,
77#define platform_get_drvdata(_dev) dev_get_drvdata(&(_dev)->dev) 77#define platform_get_drvdata(_dev) dev_get_drvdata(&(_dev)->dev)
78#define platform_set_drvdata(_dev,data) dev_set_drvdata(&(_dev)->dev, (data)) 78#define platform_set_drvdata(_dev,data) dev_set_drvdata(&(_dev)->dev, (data))
79 79
80extern struct platform_device *platform_create_bundle(struct platform_driver *driver,
81 int (*probe)(struct platform_device *),
82 struct resource *res, unsigned int n_res,
83 const void *data, size_t size);
84
80/* early platform driver interface */ 85/* early platform driver interface */
81struct early_platform_driver { 86struct early_platform_driver {
82 const char *class_str; 87 const char *class_str;
83 struct platform_driver *pdrv; 88 struct platform_driver *pdrv;
84 struct list_head list; 89 struct list_head list;
85 int requested_id; 90 int requested_id;
91 char *buffer;
92 int bufsize;
86}; 93};
87 94
88#define EARLY_PLATFORM_ID_UNSET -2 95#define EARLY_PLATFORM_ID_UNSET -2
@@ -102,21 +109,29 @@ extern int early_platform_driver_probe(char *class_str,
102 int nr_probe, int user_only); 109 int nr_probe, int user_only);
103extern void early_platform_cleanup(void); 110extern void early_platform_cleanup(void);
104 111
112#define early_platform_init(class_string, platdrv) \
113 early_platform_init_buffer(class_string, platdrv, NULL, 0)
105 114
106#ifndef MODULE 115#ifndef MODULE
107#define early_platform_init(class_string, platform_driver) \ 116#define early_platform_init_buffer(class_string, platdrv, buf, bufsiz) \
108static __initdata struct early_platform_driver early_driver = { \ 117static __initdata struct early_platform_driver early_driver = { \
109 .class_str = class_string, \ 118 .class_str = class_string, \
110 .pdrv = platform_driver, \ 119 .buffer = buf, \
120 .bufsize = bufsiz, \
121 .pdrv = platdrv, \
111 .requested_id = EARLY_PLATFORM_ID_UNSET, \ 122 .requested_id = EARLY_PLATFORM_ID_UNSET, \
112}; \ 123}; \
113static int __init early_platform_driver_setup_func(char *buf) \ 124static int __init early_platform_driver_setup_func(char *buffer) \
114{ \ 125{ \
115 return early_platform_driver_register(&early_driver, buf); \ 126 return early_platform_driver_register(&early_driver, buffer); \
116} \ 127} \
117early_param(class_string, early_platform_driver_setup_func) 128early_param(class_string, early_platform_driver_setup_func)
118#else /* MODULE */ 129#else /* MODULE */
119#define early_platform_init(class_string, platform_driver) 130#define early_platform_init_buffer(class_string, platdrv, buf, bufsiz) \
131static inline char *early_platform_driver_setup_func(void) \
132{ \
133 return bufsiz ? buf : NULL; \
134}
120#endif /* MODULE */ 135#endif /* MODULE */
121 136
122#endif /* _PLATFORM_DEVICE_H_ */ 137#endif /* _PLATFORM_DEVICE_H_ */
diff --git a/include/linux/plist.h b/include/linux/plist.h
index 45926d77d6ac..6898985e7b38 100644
--- a/include/linux/plist.h
+++ b/include/linux/plist.h
@@ -45,7 +45,7 @@
45 * the insertion of new nodes. There are no nodes with duplicate 45 * the insertion of new nodes. There are no nodes with duplicate
46 * priorites on the list. 46 * priorites on the list.
47 * 47 *
48 * The nodes on the node_list is ordered by priority and can contain 48 * The nodes on the node_list are ordered by priority and can contain
49 * entries which have the same priority. Those entries are ordered 49 * entries which have the same priority. Those entries are ordered
50 * FIFO 50 * FIFO
51 * 51 *
@@ -81,7 +81,8 @@ struct plist_head {
81 struct list_head prio_list; 81 struct list_head prio_list;
82 struct list_head node_list; 82 struct list_head node_list;
83#ifdef CONFIG_DEBUG_PI_LIST 83#ifdef CONFIG_DEBUG_PI_LIST
84 spinlock_t *lock; 84 raw_spinlock_t *rawlock;
85 spinlock_t *spinlock;
85#endif 86#endif
86}; 87};
87 88
@@ -91,9 +92,11 @@ struct plist_node {
91}; 92};
92 93
93#ifdef CONFIG_DEBUG_PI_LIST 94#ifdef CONFIG_DEBUG_PI_LIST
94# define PLIST_HEAD_LOCK_INIT(_lock) .lock = _lock 95# define PLIST_HEAD_LOCK_INIT(_lock) .spinlock = _lock
96# define PLIST_HEAD_LOCK_INIT_RAW(_lock) .rawlock = _lock
95#else 97#else
96# define PLIST_HEAD_LOCK_INIT(_lock) 98# define PLIST_HEAD_LOCK_INIT(_lock)
99# define PLIST_HEAD_LOCK_INIT_RAW(_lock)
97#endif 100#endif
98 101
99#define _PLIST_HEAD_INIT(head) \ 102#define _PLIST_HEAD_INIT(head) \
@@ -107,11 +110,22 @@ struct plist_node {
107 */ 110 */
108#define PLIST_HEAD_INIT(head, _lock) \ 111#define PLIST_HEAD_INIT(head, _lock) \
109{ \ 112{ \
110 _PLIST_HEAD_INIT(head), \ 113 _PLIST_HEAD_INIT(head), \
111 PLIST_HEAD_LOCK_INIT(&(_lock)) \ 114 PLIST_HEAD_LOCK_INIT(&(_lock)) \
112} 115}
113 116
114/** 117/**
118 * PLIST_HEAD_INIT_RAW - static struct plist_head initializer
119 * @head: struct plist_head variable name
120 * @_lock: lock to initialize for this list
121 */
122#define PLIST_HEAD_INIT_RAW(head, _lock) \
123{ \
124 _PLIST_HEAD_INIT(head), \
125 PLIST_HEAD_LOCK_INIT_RAW(&(_lock)) \
126}
127
128/**
115 * PLIST_NODE_INIT - static struct plist_node initializer 129 * PLIST_NODE_INIT - static struct plist_node initializer
116 * @node: struct plist_node variable name 130 * @node: struct plist_node variable name
117 * @__prio: initial node priority 131 * @__prio: initial node priority
@@ -119,13 +133,13 @@ struct plist_node {
119#define PLIST_NODE_INIT(node, __prio) \ 133#define PLIST_NODE_INIT(node, __prio) \
120{ \ 134{ \
121 .prio = (__prio), \ 135 .prio = (__prio), \
122 .plist = { _PLIST_HEAD_INIT((node).plist) }, \ 136 .plist = { _PLIST_HEAD_INIT((node).plist) }, \
123} 137}
124 138
125/** 139/**
126 * plist_head_init - dynamic struct plist_head initializer 140 * plist_head_init - dynamic struct plist_head initializer
127 * @head: &struct plist_head pointer 141 * @head: &struct plist_head pointer
128 * @lock: list spinlock, remembered for debugging 142 * @lock: spinlock protecting the list (debugging)
129 */ 143 */
130static inline void 144static inline void
131plist_head_init(struct plist_head *head, spinlock_t *lock) 145plist_head_init(struct plist_head *head, spinlock_t *lock)
@@ -133,7 +147,24 @@ plist_head_init(struct plist_head *head, spinlock_t *lock)
133 INIT_LIST_HEAD(&head->prio_list); 147 INIT_LIST_HEAD(&head->prio_list);
134 INIT_LIST_HEAD(&head->node_list); 148 INIT_LIST_HEAD(&head->node_list);
135#ifdef CONFIG_DEBUG_PI_LIST 149#ifdef CONFIG_DEBUG_PI_LIST
136 head->lock = lock; 150 head->spinlock = lock;
151 head->rawlock = NULL;
152#endif
153}
154
155/**
156 * plist_head_init_raw - dynamic struct plist_head initializer
157 * @head: &struct plist_head pointer
158 * @lock: raw_spinlock protecting the list (debugging)
159 */
160static inline void
161plist_head_init_raw(struct plist_head *head, raw_spinlock_t *lock)
162{
163 INIT_LIST_HEAD(&head->prio_list);
164 INIT_LIST_HEAD(&head->node_list);
165#ifdef CONFIG_DEBUG_PI_LIST
166 head->rawlock = lock;
167 head->spinlock = NULL;
137#endif 168#endif
138} 169}
139 170
@@ -234,7 +265,7 @@ static inline int plist_node_empty(const struct plist_node *node)
234 * 265 *
235 * Assumes the plist is _not_ empty. 266 * Assumes the plist is _not_ empty.
236 */ 267 */
237static inline struct plist_node* plist_first(const struct plist_head *head) 268static inline struct plist_node *plist_first(const struct plist_head *head)
238{ 269{
239 return list_entry(head->node_list.next, 270 return list_entry(head->node_list.next,
240 struct plist_node, plist.node_list); 271 struct plist_node, plist.node_list);
diff --git a/include/linux/pm.h b/include/linux/pm.h
index 3b7e04b95bd2..8e258c727971 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -26,6 +26,7 @@
26#include <linux/spinlock.h> 26#include <linux/spinlock.h>
27#include <linux/wait.h> 27#include <linux/wait.h>
28#include <linux/timer.h> 28#include <linux/timer.h>
29#include <linux/completion.h>
29 30
30/* 31/*
31 * Callbacks for platform drivers to implement. 32 * Callbacks for platform drivers to implement.
@@ -178,9 +179,10 @@ typedef struct pm_message {
178 * This need not mean that the device should be put into a low power state. 179 * This need not mean that the device should be put into a low power state.
179 * For example, if the device is behind a link which is about to be turned 180 * For example, if the device is behind a link which is about to be turned
180 * off, the device may remain at full power. If the device does go to low 181 * off, the device may remain at full power. If the device does go to low
181 * power and if device_may_wakeup(dev) is true, remote wake-up (i.e., a 182 * power and is capable of generating run-time wake-up events, remote
182 * hardware mechanism allowing the device to request a change of its power 183 * wake-up (i.e., a hardware mechanism allowing the device to request a
183 * state, such as PCI PME) should be enabled for it. 184 * change of its power state via a wake-up event, such as PCI PME) should
185 * be enabled for it.
184 * 186 *
185 * @runtime_resume: Put the device into the fully active state in response to a 187 * @runtime_resume: Put the device into the fully active state in response to a
186 * wake-up event generated by hardware or at the request of software. If 188 * wake-up event generated by hardware or at the request of software. If
@@ -213,20 +215,59 @@ struct dev_pm_ops {
213 int (*runtime_idle)(struct device *dev); 215 int (*runtime_idle)(struct device *dev);
214}; 216};
215 217
216/* 218#ifdef CONFIG_PM_SLEEP
217 * Use this if you want to use the same suspend and resume callbacks for suspend 219#define SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
218 * to RAM and hibernation.
219 */
220#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
221struct dev_pm_ops name = { \
222 .suspend = suspend_fn, \ 220 .suspend = suspend_fn, \
223 .resume = resume_fn, \ 221 .resume = resume_fn, \
224 .freeze = suspend_fn, \ 222 .freeze = suspend_fn, \
225 .thaw = resume_fn, \ 223 .thaw = resume_fn, \
226 .poweroff = suspend_fn, \ 224 .poweroff = suspend_fn, \
227 .restore = resume_fn, \ 225 .restore = resume_fn,
226#else
227#define SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn)
228#endif
229
230#ifdef CONFIG_PM_RUNTIME
231#define SET_RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
232 .runtime_suspend = suspend_fn, \
233 .runtime_resume = resume_fn, \
234 .runtime_idle = idle_fn,
235#else
236#define SET_RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn)
237#endif
238
239/*
240 * Use this if you want to use the same suspend and resume callbacks for suspend
241 * to RAM and hibernation.
242 */
243#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
244const struct dev_pm_ops name = { \
245 SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
246}
247
248/*
249 * Use this for defining a set of PM operations to be used in all situations
250 * (sustem suspend, hibernation or runtime PM).
251 */
252#define UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
253const struct dev_pm_ops name = { \
254 SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
255 SET_RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
228} 256}
229 257
258/*
259 * Use this for subsystems (bus types, device types, device classes) that don't
260 * need any special suspend/resume handling in addition to invoking the PM
261 * callbacks provided by device drivers supporting both the system sleep PM and
262 * runtime PM, make the pm member point to generic_subsys_pm_ops.
263 */
264#ifdef CONFIG_PM_OPS
265extern struct dev_pm_ops generic_subsys_pm_ops;
266#define GENERIC_SUBSYS_PM_OPS (&generic_subsys_pm_ops)
267#else
268#define GENERIC_SUBSYS_PM_OPS NULL
269#endif
270
230/** 271/**
231 * PM_EVENT_ messages 272 * PM_EVENT_ messages
232 * 273 *
@@ -411,9 +452,11 @@ struct dev_pm_info {
411 pm_message_t power_state; 452 pm_message_t power_state;
412 unsigned int can_wakeup:1; 453 unsigned int can_wakeup:1;
413 unsigned int should_wakeup:1; 454 unsigned int should_wakeup:1;
455 unsigned async_suspend:1;
414 enum dpm_state status; /* Owned by the PM core */ 456 enum dpm_state status; /* Owned by the PM core */
415#ifdef CONFIG_PM_SLEEP 457#ifdef CONFIG_PM_SLEEP
416 struct list_head entry; 458 struct list_head entry;
459 struct completion completion;
417#endif 460#endif
418#ifdef CONFIG_PM_RUNTIME 461#ifdef CONFIG_PM_RUNTIME
419 struct timer_list suspend_timer; 462 struct timer_list suspend_timer;
@@ -428,6 +471,8 @@ struct dev_pm_info {
428 unsigned int idle_notification:1; 471 unsigned int idle_notification:1;
429 unsigned int request_pending:1; 472 unsigned int request_pending:1;
430 unsigned int deferred_resume:1; 473 unsigned int deferred_resume:1;
474 unsigned int run_wake:1;
475 unsigned int runtime_auto:1;
431 enum rpm_request request; 476 enum rpm_request request;
432 enum rpm_status runtime_status; 477 enum rpm_status runtime_status;
433 int runtime_error; 478 int runtime_error;
@@ -506,6 +551,7 @@ extern void __suspend_report_result(const char *function, void *fn, int ret);
506 __suspend_report_result(__func__, fn, ret); \ 551 __suspend_report_result(__func__, fn, ret); \
507 } while (0) 552 } while (0)
508 553
554extern void device_pm_wait_for_dev(struct device *sub, struct device *dev);
509#else /* !CONFIG_PM_SLEEP */ 555#else /* !CONFIG_PM_SLEEP */
510 556
511#define device_pm_lock() do {} while (0) 557#define device_pm_lock() do {} while (0)
@@ -518,6 +564,7 @@ static inline int dpm_suspend_start(pm_message_t state)
518 564
519#define suspend_report_result(fn, ret) do {} while (0) 565#define suspend_report_result(fn, ret) do {} while (0)
520 566
567static inline void device_pm_wait_for_dev(struct device *a, struct device *b) {}
521#endif /* !CONFIG_PM_SLEEP */ 568#endif /* !CONFIG_PM_SLEEP */
522 569
523/* How to reorder dpm_list after device_move() */ 570/* How to reorder dpm_list after device_move() */
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
index 44087044910f..b776db737244 100644
--- a/include/linux/pm_runtime.h
+++ b/include/linux/pm_runtime.h
@@ -28,6 +28,8 @@ extern int __pm_runtime_set_status(struct device *dev, unsigned int status);
28extern int pm_runtime_barrier(struct device *dev); 28extern int pm_runtime_barrier(struct device *dev);
29extern void pm_runtime_enable(struct device *dev); 29extern void pm_runtime_enable(struct device *dev);
30extern void __pm_runtime_disable(struct device *dev, bool check_resume); 30extern void __pm_runtime_disable(struct device *dev, bool check_resume);
31extern void pm_runtime_allow(struct device *dev);
32extern void pm_runtime_forbid(struct device *dev);
31 33
32static inline bool pm_children_suspended(struct device *dev) 34static inline bool pm_children_suspended(struct device *dev)
33{ 35{
@@ -50,6 +52,21 @@ static inline void pm_runtime_put_noidle(struct device *dev)
50 atomic_add_unless(&dev->power.usage_count, -1, 0); 52 atomic_add_unless(&dev->power.usage_count, -1, 0);
51} 53}
52 54
55static inline bool device_run_wake(struct device *dev)
56{
57 return dev->power.run_wake;
58}
59
60static inline void device_set_run_wake(struct device *dev, bool enable)
61{
62 dev->power.run_wake = enable;
63}
64
65static inline bool pm_runtime_suspended(struct device *dev)
66{
67 return dev->power.runtime_status == RPM_SUSPENDED;
68}
69
53#else /* !CONFIG_PM_RUNTIME */ 70#else /* !CONFIG_PM_RUNTIME */
54 71
55static inline int pm_runtime_idle(struct device *dev) { return -ENOSYS; } 72static inline int pm_runtime_idle(struct device *dev) { return -ENOSYS; }
@@ -68,11 +85,16 @@ static inline int __pm_runtime_set_status(struct device *dev,
68static inline int pm_runtime_barrier(struct device *dev) { return 0; } 85static inline int pm_runtime_barrier(struct device *dev) { return 0; }
69static inline void pm_runtime_enable(struct device *dev) {} 86static inline void pm_runtime_enable(struct device *dev) {}
70static inline void __pm_runtime_disable(struct device *dev, bool c) {} 87static inline void __pm_runtime_disable(struct device *dev, bool c) {}
88static inline void pm_runtime_allow(struct device *dev) {}
89static inline void pm_runtime_forbid(struct device *dev) {}
71 90
72static inline bool pm_children_suspended(struct device *dev) { return false; } 91static inline bool pm_children_suspended(struct device *dev) { return false; }
73static inline void pm_suspend_ignore_children(struct device *dev, bool en) {} 92static inline void pm_suspend_ignore_children(struct device *dev, bool en) {}
74static inline void pm_runtime_get_noresume(struct device *dev) {} 93static inline void pm_runtime_get_noresume(struct device *dev) {}
75static inline void pm_runtime_put_noidle(struct device *dev) {} 94static inline void pm_runtime_put_noidle(struct device *dev) {}
95static inline bool device_run_wake(struct device *dev) { return false; }
96static inline void device_set_run_wake(struct device *dev, bool enable) {}
97static inline bool pm_runtime_suspended(struct device *dev) { return false; }
76 98
77#endif /* !CONFIG_PM_RUNTIME */ 99#endif /* !CONFIG_PM_RUNTIME */
78 100
diff --git a/include/linux/pnp.h b/include/linux/pnp.h
index fddfafaed024..7c4193eb0072 100644
--- a/include/linux/pnp.h
+++ b/include/linux/pnp.h
@@ -334,6 +334,19 @@ extern struct pnp_protocol pnpbios_protocol;
334#define pnp_device_is_pnpbios(dev) 0 334#define pnp_device_is_pnpbios(dev) 0
335#endif 335#endif
336 336
337#ifdef CONFIG_PNPACPI
338extern struct pnp_protocol pnpacpi_protocol;
339
340static inline struct acpi_device *pnp_acpi_device(struct pnp_dev *dev)
341{
342 if (dev->protocol == &pnpacpi_protocol)
343 return dev->data;
344 return NULL;
345}
346#else
347#define pnp_acpi_device(dev) 0
348#endif
349
337/* status */ 350/* status */
338#define PNP_READY 0x0000 351#define PNP_READY 0x0000
339#define PNP_ATTACHED 0x0001 352#define PNP_ATTACHED 0x0001
diff --git a/include/linux/poison.h b/include/linux/poison.h
index 7fc194aef8c2..34066ffd893d 100644
--- a/include/linux/poison.h
+++ b/include/linux/poison.h
@@ -2,13 +2,25 @@
2#define _LINUX_POISON_H 2#define _LINUX_POISON_H
3 3
4/********** include/linux/list.h **********/ 4/********** include/linux/list.h **********/
5
6/*
7 * Architectures might want to move the poison pointer offset
8 * into some well-recognized area such as 0xdead000000000000,
9 * that is also not mappable by user-space exploits:
10 */
11#ifdef CONFIG_ILLEGAL_POINTER_VALUE
12# define POISON_POINTER_DELTA _AC(CONFIG_ILLEGAL_POINTER_VALUE, UL)
13#else
14# define POISON_POINTER_DELTA 0
15#endif
16
5/* 17/*
6 * These are non-NULL pointers that will result in page faults 18 * These are non-NULL pointers that will result in page faults
7 * under normal circumstances, used to verify that nobody uses 19 * under normal circumstances, used to verify that nobody uses
8 * non-initialized list entries. 20 * non-initialized list entries.
9 */ 21 */
10#define LIST_POISON1 ((void *) 0x00100100) 22#define LIST_POISON1 ((void *) 0x00100100 + POISON_POINTER_DELTA)
11#define LIST_POISON2 ((void *) 0x00200200) 23#define LIST_POISON2 ((void *) 0x00200200 + POISON_POINTER_DELTA)
12 24
13/********** include/linux/timer.h **********/ 25/********** include/linux/timer.h **********/
14/* 26/*
@@ -36,6 +48,15 @@
36#define POISON_FREE 0x6b /* for use-after-free poisoning */ 48#define POISON_FREE 0x6b /* for use-after-free poisoning */
37#define POISON_END 0xa5 /* end-byte of poisoning */ 49#define POISON_END 0xa5 /* end-byte of poisoning */
38 50
51/********** mm/hugetlb.c **********/
52/*
53 * Private mappings of hugetlb pages use this poisoned value for
54 * page->mapping. The core VM should not be doing anything with this mapping
55 * but futex requires the existence of some page->mapping value even though it
56 * is unused if PAGE_MAPPING_ANON is set.
57 */
58#define HUGETLB_POISON ((void *)(0x00300300 + POISON_POINTER_DELTA + PAGE_MAPPING_ANON))
59
39/********** arch/$ARCH/mm/init.c **********/ 60/********** arch/$ARCH/mm/init.c **********/
40#define POISON_FREE_INITMEM 0xcc 61#define POISON_FREE_INITMEM 0xcc
41 62
diff --git a/include/linux/poll.h b/include/linux/poll.h
index 6673743946f7..600cc1fde64d 100644
--- a/include/linux/poll.h
+++ b/include/linux/poll.h
@@ -10,8 +10,10 @@
10#include <linux/wait.h> 10#include <linux/wait.h>
11#include <linux/string.h> 11#include <linux/string.h>
12#include <linux/fs.h> 12#include <linux/fs.h>
13#include <linux/sysctl.h>
13#include <asm/uaccess.h> 14#include <asm/uaccess.h>
14 15
16extern struct ctl_table epoll_table[]; /* for sysctl */
15/* ~832 bytes of stack space used max in sys_select/sys_poll before allocating 17/* ~832 bytes of stack space used max in sys_select/sys_poll before allocating
16 additional memory. */ 18 additional memory. */
17#define MAX_STACK_ALLOC 832 19#define MAX_STACK_ALLOC 832
diff --git a/include/linux/posix_acl.h b/include/linux/posix_acl.h
index 065a3652a3ea..67608161df6b 100644
--- a/include/linux/posix_acl.h
+++ b/include/linux/posix_acl.h
@@ -147,6 +147,20 @@ static inline void forget_cached_acl(struct inode *inode, int type)
147 if (old != ACL_NOT_CACHED) 147 if (old != ACL_NOT_CACHED)
148 posix_acl_release(old); 148 posix_acl_release(old);
149} 149}
150
151static inline void forget_all_cached_acls(struct inode *inode)
152{
153 struct posix_acl *old_access, *old_default;
154 spin_lock(&inode->i_lock);
155 old_access = inode->i_acl;
156 old_default = inode->i_default_acl;
157 inode->i_acl = inode->i_default_acl = ACL_NOT_CACHED;
158 spin_unlock(&inode->i_lock);
159 if (old_access != ACL_NOT_CACHED)
160 posix_acl_release(old_access);
161 if (old_default != ACL_NOT_CACHED)
162 posix_acl_release(old_default);
163}
150#endif 164#endif
151 165
152static inline void cache_no_acl(struct inode *inode) 166static inline void cache_no_acl(struct inode *inode)
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index b5d096d3a9be..ebd2b8fb00d0 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -82,6 +82,7 @@ enum power_supply_property {
82 POWER_SUPPLY_PROP_PRESENT, 82 POWER_SUPPLY_PROP_PRESENT,
83 POWER_SUPPLY_PROP_ONLINE, 83 POWER_SUPPLY_PROP_ONLINE,
84 POWER_SUPPLY_PROP_TECHNOLOGY, 84 POWER_SUPPLY_PROP_TECHNOLOGY,
85 POWER_SUPPLY_PROP_CYCLE_COUNT,
85 POWER_SUPPLY_PROP_VOLTAGE_MAX, 86 POWER_SUPPLY_PROP_VOLTAGE_MAX,
86 POWER_SUPPLY_PROP_VOLTAGE_MIN, 87 POWER_SUPPLY_PROP_VOLTAGE_MIN,
87 POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, 88 POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
diff --git a/include/linux/preempt.h b/include/linux/preempt.h
index 72b1a10a59b6..2e681d9555bd 100644
--- a/include/linux/preempt.h
+++ b/include/linux/preempt.h
@@ -105,6 +105,11 @@ struct preempt_notifier;
105 * @sched_out: we've just been preempted 105 * @sched_out: we've just been preempted
106 * notifier: struct preempt_notifier for the task being preempted 106 * notifier: struct preempt_notifier for the task being preempted
107 * next: the task that's kicking us out 107 * next: the task that's kicking us out
108 *
109 * Please note that sched_in and out are called under different
110 * contexts. sched_out is called with rq lock held and irq disabled
111 * while sched_in is called without rq lock and irq enabled. This
112 * difference is intentional and depended upon by its users.
108 */ 113 */
109struct preempt_ops { 114struct preempt_ops {
110 void (*sched_in)(struct preempt_notifier *notifier, int cpu); 115 void (*sched_in)(struct preempt_notifier *notifier, int cpu);
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
index 7456d7d87a19..e1fb60729979 100644
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
@@ -27,6 +27,26 @@
27#define PTRACE_GETSIGINFO 0x4202 27#define PTRACE_GETSIGINFO 0x4202
28#define PTRACE_SETSIGINFO 0x4203 28#define PTRACE_SETSIGINFO 0x4203
29 29
30/*
31 * Generic ptrace interface that exports the architecture specific regsets
32 * using the corresponding NT_* types (which are also used in the core dump).
33 * Please note that the NT_PRSTATUS note type in a core dump contains a full
34 * 'struct elf_prstatus'. But the user_regset for NT_PRSTATUS contains just the
35 * elf_gregset_t that is the pr_reg field of 'struct elf_prstatus'. For all the
36 * other user_regset flavors, the user_regset layout and the ELF core dump note
37 * payload are exactly the same layout.
38 *
39 * This interface usage is as follows:
40 * struct iovec iov = { buf, len};
41 *
42 * ret = ptrace(PTRACE_GETREGSET/PTRACE_SETREGSET, pid, NT_XXX_TYPE, &iov);
43 *
44 * On the successful completion, iov.len will be updated by the kernel,
45 * specifying how much the kernel has written/read to/from the user's iov.buf.
46 */
47#define PTRACE_GETREGSET 0x4204
48#define PTRACE_SETREGSET 0x4205
49
30/* options set using PTRACE_SETOPTIONS */ 50/* options set using PTRACE_SETOPTIONS */
31#define PTRACE_O_TRACESYSGOOD 0x00000001 51#define PTRACE_O_TRACESYSGOOD 0x00000001
32#define PTRACE_O_TRACEFORK 0x00000002 52#define PTRACE_O_TRACEFORK 0x00000002
@@ -105,12 +125,7 @@ static inline int ptrace_reparented(struct task_struct *child)
105{ 125{
106 return child->real_parent != child->parent; 126 return child->real_parent != child->parent;
107} 127}
108static inline void ptrace_link(struct task_struct *child, 128
109 struct task_struct *new_parent)
110{
111 if (unlikely(child->ptrace))
112 __ptrace_link(child, new_parent);
113}
114static inline void ptrace_unlink(struct task_struct *child) 129static inline void ptrace_unlink(struct task_struct *child)
115{ 130{
116 if (unlikely(child->ptrace)) 131 if (unlikely(child->ptrace))
@@ -169,9 +184,9 @@ static inline void ptrace_init_task(struct task_struct *child, bool ptrace)
169 INIT_LIST_HEAD(&child->ptraced); 184 INIT_LIST_HEAD(&child->ptraced);
170 child->parent = child->real_parent; 185 child->parent = child->real_parent;
171 child->ptrace = 0; 186 child->ptrace = 0;
172 if (unlikely(ptrace)) { 187 if (unlikely(ptrace) && (current->ptrace & PT_PTRACED)) {
173 child->ptrace = current->ptrace; 188 child->ptrace = current->ptrace;
174 ptrace_link(child, current->parent); 189 __ptrace_link(child, current->parent);
175 } 190 }
176} 191}
177 192
@@ -249,6 +264,9 @@ static inline void user_enable_single_step(struct task_struct *task)
249static inline void user_disable_single_step(struct task_struct *task) 264static inline void user_disable_single_step(struct task_struct *task)
250{ 265{
251} 266}
267#else
268extern void user_enable_single_step(struct task_struct *);
269extern void user_disable_single_step(struct task_struct *);
252#endif /* arch_has_single_step */ 270#endif /* arch_has_single_step */
253 271
254#ifndef arch_has_block_step 272#ifndef arch_has_block_step
@@ -276,8 +294,22 @@ static inline void user_enable_block_step(struct task_struct *task)
276{ 294{
277 BUG(); /* This can never be called. */ 295 BUG(); /* This can never be called. */
278} 296}
297#else
298extern void user_enable_block_step(struct task_struct *);
279#endif /* arch_has_block_step */ 299#endif /* arch_has_block_step */
280 300
301#ifdef ARCH_HAS_USER_SINGLE_STEP_INFO
302extern void user_single_step_siginfo(struct task_struct *tsk,
303 struct pt_regs *regs, siginfo_t *info);
304#else
305static inline void user_single_step_siginfo(struct task_struct *tsk,
306 struct pt_regs *regs, siginfo_t *info)
307{
308 memset(info, 0, sizeof(*info));
309 info->si_signo = SIGTRAP;
310}
311#endif
312
281#ifndef arch_ptrace_stop_needed 313#ifndef arch_ptrace_stop_needed
282/** 314/**
283 * arch_ptrace_stop_needed - Decide whether arch_ptrace_stop() should be called 315 * arch_ptrace_stop_needed - Decide whether arch_ptrace_stop() should be called
diff --git a/include/linux/pwm_backlight.h b/include/linux/pwm_backlight.h
index 7a9754c96775..01b3d759f1fc 100644
--- a/include/linux/pwm_backlight.h
+++ b/include/linux/pwm_backlight.h
@@ -10,7 +10,7 @@ struct platform_pwm_backlight_data {
10 unsigned int dft_brightness; 10 unsigned int dft_brightness;
11 unsigned int pwm_period_ns; 11 unsigned int pwm_period_ns;
12 int (*init)(struct device *dev); 12 int (*init)(struct device *dev);
13 int (*notify)(int brightness); 13 int (*notify)(struct device *dev, int brightness);
14 void (*exit)(struct device *dev); 14 void (*exit)(struct device *dev);
15}; 15};
16 16
diff --git a/include/linux/quota.h b/include/linux/quota.h
index 78c48895b12a..b462916b2a0a 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
@@ -73,6 +73,8 @@
73/* Quota format type IDs */ 73/* Quota format type IDs */
74#define QFMT_VFS_OLD 1 74#define QFMT_VFS_OLD 1
75#define QFMT_VFS_V0 2 75#define QFMT_VFS_V0 2
76#define QFMT_OCFS2 3
77#define QFMT_VFS_V1 4
76 78
77/* Size of block in which space limits are passed through the quota 79/* Size of block in which space limits are passed through the quota
78 * interface */ 80 * interface */
@@ -277,9 +279,6 @@ struct dquot {
277 struct mem_dqblk dq_dqb; /* Diskquota usage */ 279 struct mem_dqblk dq_dqb; /* Diskquota usage */
278}; 280};
279 281
280#define QUOTA_OK 0
281#define NO_QUOTA 1
282
283/* Operations which must be implemented by each quota format */ 282/* Operations which must be implemented by each quota format */
284struct quota_format_ops { 283struct quota_format_ops {
285 int (*check_quota_file)(struct super_block *sb, int type); /* Detect whether file is in our format */ 284 int (*check_quota_file)(struct super_block *sb, int type); /* Detect whether file is in our format */
@@ -293,13 +292,6 @@ struct quota_format_ops {
293 292
294/* Operations working with dquots */ 293/* Operations working with dquots */
295struct dquot_operations { 294struct dquot_operations {
296 int (*initialize) (struct inode *, int);
297 int (*drop) (struct inode *);
298 int (*alloc_space) (struct inode *, qsize_t, int);
299 int (*alloc_inode) (const struct inode *, qsize_t);
300 int (*free_space) (struct inode *, qsize_t);
301 int (*free_inode) (const struct inode *, qsize_t);
302 int (*transfer) (struct inode *, struct iattr *);
303 int (*write_dquot) (struct dquot *); /* Ordinary dquot write */ 295 int (*write_dquot) (struct dquot *); /* Ordinary dquot write */
304 struct dquot *(*alloc_dquot)(struct super_block *, int); /* Allocate memory for new dquot */ 296 struct dquot *(*alloc_dquot)(struct super_block *, int); /* Allocate memory for new dquot */
305 void (*destroy_dquot)(struct dquot *); /* Free memory for dquot */ 297 void (*destroy_dquot)(struct dquot *); /* Free memory for dquot */
@@ -307,21 +299,16 @@ struct dquot_operations {
307 int (*release_dquot) (struct dquot *); /* Quota is going to be deleted from disk */ 299 int (*release_dquot) (struct dquot *); /* Quota is going to be deleted from disk */
308 int (*mark_dirty) (struct dquot *); /* Dquot is marked dirty */ 300 int (*mark_dirty) (struct dquot *); /* Dquot is marked dirty */
309 int (*write_info) (struct super_block *, int); /* Write of quota "superblock" */ 301 int (*write_info) (struct super_block *, int); /* Write of quota "superblock" */
310 /* reserve quota for delayed block allocation */ 302 /* get reserved quota for delayed alloc, value returned is managed by
311 int (*reserve_space) (struct inode *, qsize_t, int); 303 * quota code only */
312 /* claim reserved quota for delayed alloc */ 304 qsize_t *(*get_reserved_space) (struct inode *);
313 int (*claim_space) (struct inode *, qsize_t);
314 /* release rsved quota for delayed alloc */
315 void (*release_rsv) (struct inode *, qsize_t);
316 /* get reserved quota for delayed alloc */
317 qsize_t (*get_reserved_space) (struct inode *);
318}; 305};
319 306
320/* Operations handling requests from userspace */ 307/* Operations handling requests from userspace */
321struct quotactl_ops { 308struct quotactl_ops {
322 int (*quota_on)(struct super_block *, int, int, char *, int); 309 int (*quota_on)(struct super_block *, int, int, char *, int);
323 int (*quota_off)(struct super_block *, int, int); 310 int (*quota_off)(struct super_block *, int, int);
324 int (*quota_sync)(struct super_block *, int); 311 int (*quota_sync)(struct super_block *, int, int);
325 int (*get_info)(struct super_block *, int, struct if_dqinfo *); 312 int (*get_info)(struct super_block *, int, struct if_dqinfo *);
326 int (*set_info)(struct super_block *, int, struct if_dqinfo *); 313 int (*set_info)(struct super_block *, int, struct if_dqinfo *);
327 int (*get_dqblk)(struct super_block *, int, qid_t, struct if_dqblk *); 314 int (*get_dqblk)(struct super_block *, int, qid_t, struct if_dqblk *);
@@ -334,7 +321,7 @@ struct quotactl_ops {
334 321
335struct quota_format_type { 322struct quota_format_type {
336 int qf_fmt_id; /* Quota format id */ 323 int qf_fmt_id; /* Quota format id */
337 struct quota_format_ops *qf_ops; /* Operations of format */ 324 const struct quota_format_ops *qf_ops; /* Operations of format */
338 struct module *qf_owner; /* Module implementing quota format */ 325 struct module *qf_owner; /* Module implementing quota format */
339 struct quota_format_type *qf_next; 326 struct quota_format_type *qf_next;
340}; 327};
@@ -354,27 +341,37 @@ enum {
354#define DQUOT_STATE_FLAGS (DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED | \ 341#define DQUOT_STATE_FLAGS (DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED | \
355 DQUOT_SUSPENDED) 342 DQUOT_SUSPENDED)
356/* Other quota flags */ 343/* Other quota flags */
357#define DQUOT_QUOTA_SYS_FILE (1 << 6) /* Quota file is a special 344#define DQUOT_STATE_LAST (_DQUOT_STATE_FLAGS * MAXQUOTAS)
345#define DQUOT_QUOTA_SYS_FILE (1 << DQUOT_STATE_LAST)
346 /* Quota file is a special
358 * system file and user cannot 347 * system file and user cannot
359 * touch it. Filesystem is 348 * touch it. Filesystem is
360 * responsible for setting 349 * responsible for setting
361 * S_NOQUOTA, S_NOATIME flags 350 * S_NOQUOTA, S_NOATIME flags
362 */ 351 */
363#define DQUOT_NEGATIVE_USAGE (1 << 7) /* Allow negative quota usage */ 352#define DQUOT_NEGATIVE_USAGE (1 << (DQUOT_STATE_LAST + 1))
353 /* Allow negative quota usage */
364 354
365static inline unsigned int dquot_state_flag(unsigned int flags, int type) 355static inline unsigned int dquot_state_flag(unsigned int flags, int type)
366{ 356{
367 if (type == USRQUOTA) 357 return flags << _DQUOT_STATE_FLAGS * type;
368 return flags;
369 return flags << _DQUOT_STATE_FLAGS;
370} 358}
371 359
372static inline unsigned int dquot_generic_flag(unsigned int flags, int type) 360static inline unsigned int dquot_generic_flag(unsigned int flags, int type)
373{ 361{
374 if (type == USRQUOTA) 362 return (flags >> _DQUOT_STATE_FLAGS * type) & DQUOT_STATE_FLAGS;
375 return flags; 363}
376 return flags >> _DQUOT_STATE_FLAGS; 364
365#ifdef CONFIG_QUOTA_NETLINK_INTERFACE
366extern void quota_send_warning(short type, unsigned int id, dev_t dev,
367 const char warntype);
368#else
369static inline void quota_send_warning(short type, unsigned int id, dev_t dev,
370 const char warntype)
371{
372 return;
377} 373}
374#endif /* CONFIG_QUOTA_NETLINK_INTERFACE */
378 375
379struct quota_info { 376struct quota_info {
380 unsigned int flags; /* Flags for diskquotas on this device */ 377 unsigned int flags; /* Flags for diskquotas on this device */
@@ -383,7 +380,7 @@ struct quota_info {
383 struct rw_semaphore dqptr_sem; /* serialize ops using quota_info struct, pointers from inode to dquots */ 380 struct rw_semaphore dqptr_sem; /* serialize ops using quota_info struct, pointers from inode to dquots */
384 struct inode *files[MAXQUOTAS]; /* inodes of quotafiles */ 381 struct inode *files[MAXQUOTAS]; /* inodes of quotafiles */
385 struct mem_dqinfo info[MAXQUOTAS]; /* Information for each quota type */ 382 struct mem_dqinfo info[MAXQUOTAS]; /* Information for each quota type */
386 struct quota_format_ops *ops[MAXQUOTAS]; /* Operations for each type */ 383 const struct quota_format_ops *ops[MAXQUOTAS]; /* Operations for each type */
387}; 384};
388 385
389int register_quota_format(struct quota_format_type *fmt); 386int register_quota_format(struct quota_format_type *fmt);
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h
index 3ebb23153640..e6fa7acce290 100644
--- a/include/linux/quotaops.h
+++ b/include/linux/quotaops.h
@@ -19,15 +19,12 @@ static inline struct quota_info *sb_dqopt(struct super_block *sb)
19/* 19/*
20 * declaration of quota_function calls in kernel. 20 * declaration of quota_function calls in kernel.
21 */ 21 */
22void sync_quota_sb(struct super_block *sb, int type); 22void inode_add_rsv_space(struct inode *inode, qsize_t number);
23static inline void writeout_quota_sb(struct super_block *sb, int type) 23void inode_claim_rsv_space(struct inode *inode, qsize_t number);
24{ 24void inode_sub_rsv_space(struct inode *inode, qsize_t number);
25 if (sb->s_qcop->quota_sync)
26 sb->s_qcop->quota_sync(sb, type);
27}
28 25
29int dquot_initialize(struct inode *inode, int type); 26void dquot_initialize(struct inode *inode);
30int dquot_drop(struct inode *inode); 27void dquot_drop(struct inode *inode);
31struct dquot *dqget(struct super_block *sb, unsigned int id, int type); 28struct dquot *dqget(struct super_block *sb, unsigned int id, int type);
32void dqput(struct dquot *dquot); 29void dqput(struct dquot *dquot);
33int dquot_scan_active(struct super_block *sb, 30int dquot_scan_active(struct super_block *sb,
@@ -36,24 +33,23 @@ int dquot_scan_active(struct super_block *sb,
36struct dquot *dquot_alloc(struct super_block *sb, int type); 33struct dquot *dquot_alloc(struct super_block *sb, int type);
37void dquot_destroy(struct dquot *dquot); 34void dquot_destroy(struct dquot *dquot);
38 35
39int dquot_alloc_space(struct inode *inode, qsize_t number, int prealloc); 36int __dquot_alloc_space(struct inode *inode, qsize_t number,
40int dquot_alloc_inode(const struct inode *inode, qsize_t number); 37 int warn, int reserve);
38void __dquot_free_space(struct inode *inode, qsize_t number, int reserve);
41 39
42int dquot_reserve_space(struct inode *inode, qsize_t number, int prealloc); 40int dquot_alloc_inode(const struct inode *inode);
43int dquot_claim_space(struct inode *inode, qsize_t number);
44void dquot_release_reserved_space(struct inode *inode, qsize_t number);
45qsize_t dquot_get_reserved_space(struct inode *inode);
46 41
47int dquot_free_space(struct inode *inode, qsize_t number); 42int dquot_claim_space_nodirty(struct inode *inode, qsize_t number);
48int dquot_free_inode(const struct inode *inode, qsize_t number); 43void dquot_free_inode(const struct inode *inode);
49 44
50int dquot_transfer(struct inode *inode, struct iattr *iattr);
51int dquot_commit(struct dquot *dquot); 45int dquot_commit(struct dquot *dquot);
52int dquot_acquire(struct dquot *dquot); 46int dquot_acquire(struct dquot *dquot);
53int dquot_release(struct dquot *dquot); 47int dquot_release(struct dquot *dquot);
54int dquot_commit_info(struct super_block *sb, int type); 48int dquot_commit_info(struct super_block *sb, int type);
55int dquot_mark_dquot_dirty(struct dquot *dquot); 49int dquot_mark_dquot_dirty(struct dquot *dquot);
56 50
51int dquot_file_open(struct inode *inode, struct file *file);
52
57int vfs_quota_on(struct super_block *sb, int type, int format_id, 53int vfs_quota_on(struct super_block *sb, int type, int format_id,
58 char *path, int remount); 54 char *path, int remount);
59int vfs_quota_enable(struct inode *inode, int type, int format_id, 55int vfs_quota_enable(struct inode *inode, int type, int format_id,
@@ -64,14 +60,13 @@ int vfs_quota_on_mount(struct super_block *sb, char *qf_name,
64 int format_id, int type); 60 int format_id, int type);
65int vfs_quota_off(struct super_block *sb, int type, int remount); 61int vfs_quota_off(struct super_block *sb, int type, int remount);
66int vfs_quota_disable(struct super_block *sb, int type, unsigned int flags); 62int vfs_quota_disable(struct super_block *sb, int type, unsigned int flags);
67int vfs_quota_sync(struct super_block *sb, int type); 63int vfs_quota_sync(struct super_block *sb, int type, int wait);
68int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); 64int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
69int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); 65int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
70int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di); 66int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di);
71int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di); 67int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di);
72 68
73void vfs_dq_drop(struct inode *inode); 69int dquot_transfer(struct inode *inode, struct iattr *iattr);
74int vfs_dq_transfer(struct inode *inode, struct iattr *iattr);
75int vfs_dq_quota_on_remount(struct super_block *sb); 70int vfs_dq_quota_on_remount(struct super_block *sb);
76 71
77static inline struct mem_dqinfo *sb_dqinfo(struct super_block *sb, int type) 72static inline struct mem_dqinfo *sb_dqinfo(struct super_block *sb, int type)
@@ -83,53 +78,56 @@ static inline struct mem_dqinfo *sb_dqinfo(struct super_block *sb, int type)
83 * Functions for checking status of quota 78 * Functions for checking status of quota
84 */ 79 */
85 80
86static inline int sb_has_quota_usage_enabled(struct super_block *sb, int type) 81static inline bool sb_has_quota_usage_enabled(struct super_block *sb, int type)
87{ 82{
88 return sb_dqopt(sb)->flags & 83 return sb_dqopt(sb)->flags &
89 dquot_state_flag(DQUOT_USAGE_ENABLED, type); 84 dquot_state_flag(DQUOT_USAGE_ENABLED, type);
90} 85}
91 86
92static inline int sb_has_quota_limits_enabled(struct super_block *sb, int type) 87static inline bool sb_has_quota_limits_enabled(struct super_block *sb, int type)
93{ 88{
94 return sb_dqopt(sb)->flags & 89 return sb_dqopt(sb)->flags &
95 dquot_state_flag(DQUOT_LIMITS_ENABLED, type); 90 dquot_state_flag(DQUOT_LIMITS_ENABLED, type);
96} 91}
97 92
98static inline int sb_has_quota_suspended(struct super_block *sb, int type) 93static inline bool sb_has_quota_suspended(struct super_block *sb, int type)
99{ 94{
100 return sb_dqopt(sb)->flags & 95 return sb_dqopt(sb)->flags &
101 dquot_state_flag(DQUOT_SUSPENDED, type); 96 dquot_state_flag(DQUOT_SUSPENDED, type);
102} 97}
103 98
104static inline int sb_any_quota_suspended(struct super_block *sb) 99static inline unsigned sb_any_quota_suspended(struct super_block *sb)
105{ 100{
106 return sb_has_quota_suspended(sb, USRQUOTA) || 101 unsigned type, tmsk = 0;
107 sb_has_quota_suspended(sb, GRPQUOTA); 102 for (type = 0; type < MAXQUOTAS; type++)
103 tmsk |= sb_has_quota_suspended(sb, type) << type;
104 return tmsk;
108} 105}
109 106
110/* Does kernel know about any quota information for given sb + type? */ 107/* Does kernel know about any quota information for given sb + type? */
111static inline int sb_has_quota_loaded(struct super_block *sb, int type) 108static inline bool sb_has_quota_loaded(struct super_block *sb, int type)
112{ 109{
113 /* Currently if anything is on, then quota usage is on as well */ 110 /* Currently if anything is on, then quota usage is on as well */
114 return sb_has_quota_usage_enabled(sb, type); 111 return sb_has_quota_usage_enabled(sb, type);
115} 112}
116 113
117static inline int sb_any_quota_loaded(struct super_block *sb) 114static inline unsigned sb_any_quota_loaded(struct super_block *sb)
118{ 115{
119 return sb_has_quota_loaded(sb, USRQUOTA) || 116 unsigned type, tmsk = 0;
120 sb_has_quota_loaded(sb, GRPQUOTA); 117 for (type = 0; type < MAXQUOTAS; type++)
118 tmsk |= sb_has_quota_loaded(sb, type) << type;
119 return tmsk;
121} 120}
122 121
123static inline int sb_has_quota_active(struct super_block *sb, int type) 122static inline bool sb_has_quota_active(struct super_block *sb, int type)
124{ 123{
125 return sb_has_quota_loaded(sb, type) && 124 return sb_has_quota_loaded(sb, type) &&
126 !sb_has_quota_suspended(sb, type); 125 !sb_has_quota_suspended(sb, type);
127} 126}
128 127
129static inline int sb_any_quota_active(struct super_block *sb) 128static inline unsigned sb_any_quota_active(struct super_block *sb)
130{ 129{
131 return sb_has_quota_active(sb, USRQUOTA) || 130 return sb_any_quota_loaded(sb) & ~sb_any_quota_suspended(sb);
132 sb_has_quota_active(sb, GRPQUOTA);
133} 131}
134 132
135/* 133/*
@@ -141,122 +139,6 @@ extern const struct quotactl_ops vfs_quotactl_ops;
141#define sb_dquot_ops (&dquot_operations) 139#define sb_dquot_ops (&dquot_operations)
142#define sb_quotactl_ops (&vfs_quotactl_ops) 140#define sb_quotactl_ops (&vfs_quotactl_ops)
143 141
144/* It is better to call this function outside of any transaction as it might
145 * need a lot of space in journal for dquot structure allocation. */
146static inline void vfs_dq_init(struct inode *inode)
147{
148 BUG_ON(!inode->i_sb);
149 if (sb_any_quota_active(inode->i_sb) && !IS_NOQUOTA(inode))
150 inode->i_sb->dq_op->initialize(inode, -1);
151}
152
153/* The following allocation/freeing/transfer functions *must* be called inside
154 * a transaction (deadlocks possible otherwise) */
155static inline int vfs_dq_prealloc_space_nodirty(struct inode *inode, qsize_t nr)
156{
157 if (sb_any_quota_active(inode->i_sb)) {
158 /* Used space is updated in alloc_space() */
159 if (inode->i_sb->dq_op->alloc_space(inode, nr, 1) == NO_QUOTA)
160 return 1;
161 }
162 else
163 inode_add_bytes(inode, nr);
164 return 0;
165}
166
167static inline int vfs_dq_prealloc_space(struct inode *inode, qsize_t nr)
168{
169 int ret;
170 if (!(ret = vfs_dq_prealloc_space_nodirty(inode, nr)))
171 mark_inode_dirty(inode);
172 return ret;
173}
174
175static inline int vfs_dq_alloc_space_nodirty(struct inode *inode, qsize_t nr)
176{
177 if (sb_any_quota_active(inode->i_sb)) {
178 /* Used space is updated in alloc_space() */
179 if (inode->i_sb->dq_op->alloc_space(inode, nr, 0) == NO_QUOTA)
180 return 1;
181 }
182 else
183 inode_add_bytes(inode, nr);
184 return 0;
185}
186
187static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr)
188{
189 int ret;
190 if (!(ret = vfs_dq_alloc_space_nodirty(inode, nr)))
191 mark_inode_dirty(inode);
192 return ret;
193}
194
195static inline int vfs_dq_reserve_space(struct inode *inode, qsize_t nr)
196{
197 if (sb_any_quota_active(inode->i_sb)) {
198 /* Used space is updated in alloc_space() */
199 if (inode->i_sb->dq_op->reserve_space(inode, nr, 0) == NO_QUOTA)
200 return 1;
201 }
202 return 0;
203}
204
205static inline int vfs_dq_alloc_inode(struct inode *inode)
206{
207 if (sb_any_quota_active(inode->i_sb)) {
208 vfs_dq_init(inode);
209 if (inode->i_sb->dq_op->alloc_inode(inode, 1) == NO_QUOTA)
210 return 1;
211 }
212 return 0;
213}
214
215/*
216 * Convert in-memory reserved quotas to real consumed quotas
217 */
218static inline int vfs_dq_claim_space(struct inode *inode, qsize_t nr)
219{
220 if (sb_any_quota_active(inode->i_sb)) {
221 if (inode->i_sb->dq_op->claim_space(inode, nr) == NO_QUOTA)
222 return 1;
223 } else
224 inode_add_bytes(inode, nr);
225
226 mark_inode_dirty(inode);
227 return 0;
228}
229
230/*
231 * Release reserved (in-memory) quotas
232 */
233static inline
234void vfs_dq_release_reservation_space(struct inode *inode, qsize_t nr)
235{
236 if (sb_any_quota_active(inode->i_sb))
237 inode->i_sb->dq_op->release_rsv(inode, nr);
238}
239
240static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr)
241{
242 if (sb_any_quota_active(inode->i_sb))
243 inode->i_sb->dq_op->free_space(inode, nr);
244 else
245 inode_sub_bytes(inode, nr);
246}
247
248static inline void vfs_dq_free_space(struct inode *inode, qsize_t nr)
249{
250 vfs_dq_free_space_nodirty(inode, nr);
251 mark_inode_dirty(inode);
252}
253
254static inline void vfs_dq_free_inode(struct inode *inode)
255{
256 if (sb_any_quota_active(inode->i_sb))
257 inode->i_sb->dq_op->free_inode(inode, 1);
258}
259
260/* Cannot be called inside a transaction */ 142/* Cannot be called inside a transaction */
261static inline int vfs_dq_off(struct super_block *sb, int remount) 143static inline int vfs_dq_off(struct super_block *sb, int remount)
262{ 144{
@@ -316,28 +198,20 @@ static inline int sb_any_quota_active(struct super_block *sb)
316#define sb_dquot_ops (NULL) 198#define sb_dquot_ops (NULL)
317#define sb_quotactl_ops (NULL) 199#define sb_quotactl_ops (NULL)
318 200
319static inline void vfs_dq_init(struct inode *inode) 201static inline void dquot_initialize(struct inode *inode)
320{ 202{
321} 203}
322 204
323static inline void vfs_dq_drop(struct inode *inode) 205static inline void dquot_drop(struct inode *inode)
324{ 206{
325} 207}
326 208
327static inline int vfs_dq_alloc_inode(struct inode *inode) 209static inline int dquot_alloc_inode(const struct inode *inode)
328{ 210{
329 return 0; 211 return 0;
330} 212}
331 213
332static inline void vfs_dq_free_inode(struct inode *inode) 214static inline void dquot_free_inode(const struct inode *inode)
333{
334}
335
336static inline void sync_quota_sb(struct super_block *sb, int type)
337{
338}
339
340static inline void writeout_quota_sb(struct super_block *sb, int type)
341{ 215{
342} 216}
343 217
@@ -351,110 +225,116 @@ static inline int vfs_dq_quota_on_remount(struct super_block *sb)
351 return 0; 225 return 0;
352} 226}
353 227
354static inline int vfs_dq_transfer(struct inode *inode, struct iattr *iattr) 228static inline int dquot_transfer(struct inode *inode, struct iattr *iattr)
355{ 229{
356 return 0; 230 return 0;
357} 231}
358 232
359static inline int vfs_dq_prealloc_space_nodirty(struct inode *inode, qsize_t nr) 233static inline int __dquot_alloc_space(struct inode *inode, qsize_t number,
234 int warn, int reserve)
360{ 235{
361 inode_add_bytes(inode, nr); 236 if (!reserve)
237 inode_add_bytes(inode, number);
362 return 0; 238 return 0;
363} 239}
364 240
365static inline int vfs_dq_prealloc_space(struct inode *inode, qsize_t nr) 241static inline void __dquot_free_space(struct inode *inode, qsize_t number,
242 int reserve)
366{ 243{
367 vfs_dq_prealloc_space_nodirty(inode, nr); 244 if (!reserve)
368 mark_inode_dirty(inode); 245 inode_sub_bytes(inode, number);
369 return 0;
370} 246}
371 247
372static inline int vfs_dq_alloc_space_nodirty(struct inode *inode, qsize_t nr) 248static inline int dquot_claim_space_nodirty(struct inode *inode, qsize_t number)
373{ 249{
374 inode_add_bytes(inode, nr); 250 inode_add_bytes(inode, number);
375 return 0; 251 return 0;
376} 252}
377 253
378static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr) 254#define dquot_file_open generic_file_open
255
256#endif /* CONFIG_QUOTA */
257
258static inline int dquot_alloc_space_nodirty(struct inode *inode, qsize_t nr)
379{ 259{
380 vfs_dq_alloc_space_nodirty(inode, nr); 260 return __dquot_alloc_space(inode, nr, 1, 0);
381 mark_inode_dirty(inode);
382 return 0;
383} 261}
384 262
385static inline int vfs_dq_reserve_space(struct inode *inode, qsize_t nr) 263static inline int dquot_alloc_space(struct inode *inode, qsize_t nr)
386{ 264{
387 return 0; 265 int ret;
266
267 ret = dquot_alloc_space_nodirty(inode, nr);
268 if (!ret)
269 mark_inode_dirty(inode);
270 return ret;
388} 271}
389 272
390static inline int vfs_dq_claim_space(struct inode *inode, qsize_t nr) 273static inline int dquot_alloc_block_nodirty(struct inode *inode, qsize_t nr)
391{ 274{
392 return vfs_dq_alloc_space(inode, nr); 275 return dquot_alloc_space_nodirty(inode, nr << inode->i_blkbits);
393} 276}
394 277
395static inline 278static inline int dquot_alloc_block(struct inode *inode, qsize_t nr)
396int vfs_dq_release_reservation_space(struct inode *inode, qsize_t nr)
397{ 279{
398 return 0; 280 return dquot_alloc_space(inode, nr << inode->i_blkbits);
399} 281}
400 282
401static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr) 283static inline int dquot_prealloc_block_nodirty(struct inode *inode, qsize_t nr)
402{ 284{
403 inode_sub_bytes(inode, nr); 285 return __dquot_alloc_space(inode, nr << inode->i_blkbits, 0, 0);
404} 286}
405 287
406static inline void vfs_dq_free_space(struct inode *inode, qsize_t nr) 288static inline int dquot_prealloc_block(struct inode *inode, qsize_t nr)
407{ 289{
408 vfs_dq_free_space_nodirty(inode, nr); 290 int ret;
409 mark_inode_dirty(inode);
410}
411
412#endif /* CONFIG_QUOTA */
413 291
414static inline int vfs_dq_prealloc_block_nodirty(struct inode *inode, qsize_t nr) 292 ret = dquot_prealloc_block_nodirty(inode, nr);
415{ 293 if (!ret)
416 return vfs_dq_prealloc_space_nodirty(inode, nr << inode->i_blkbits); 294 mark_inode_dirty(inode);
295 return ret;
417} 296}
418 297
419static inline int vfs_dq_prealloc_block(struct inode *inode, qsize_t nr) 298static inline int dquot_reserve_block(struct inode *inode, qsize_t nr)
420{ 299{
421 return vfs_dq_prealloc_space(inode, nr << inode->i_blkbits); 300 return __dquot_alloc_space(inode, nr << inode->i_blkbits, 1, 1);
422} 301}
423 302
424static inline int vfs_dq_alloc_block_nodirty(struct inode *inode, qsize_t nr) 303static inline int dquot_claim_block(struct inode *inode, qsize_t nr)
425{ 304{
426 return vfs_dq_alloc_space_nodirty(inode, nr << inode->i_blkbits); 305 int ret;
427}
428 306
429static inline int vfs_dq_alloc_block(struct inode *inode, qsize_t nr) 307 ret = dquot_claim_space_nodirty(inode, nr << inode->i_blkbits);
430{ 308 if (!ret)
431 return vfs_dq_alloc_space(inode, nr << inode->i_blkbits); 309 mark_inode_dirty(inode);
310 return ret;
432} 311}
433 312
434static inline int vfs_dq_reserve_block(struct inode *inode, qsize_t nr) 313static inline void dquot_free_space_nodirty(struct inode *inode, qsize_t nr)
435{ 314{
436 return vfs_dq_reserve_space(inode, nr << inode->i_blkbits); 315 __dquot_free_space(inode, nr, 0);
437} 316}
438 317
439static inline int vfs_dq_claim_block(struct inode *inode, qsize_t nr) 318static inline void dquot_free_space(struct inode *inode, qsize_t nr)
440{ 319{
441 return vfs_dq_claim_space(inode, nr << inode->i_blkbits); 320 dquot_free_space_nodirty(inode, nr);
321 mark_inode_dirty(inode);
442} 322}
443 323
444static inline 324static inline void dquot_free_block_nodirty(struct inode *inode, qsize_t nr)
445void vfs_dq_release_reservation_block(struct inode *inode, qsize_t nr)
446{ 325{
447 vfs_dq_release_reservation_space(inode, nr << inode->i_blkbits); 326 dquot_free_space_nodirty(inode, nr << inode->i_blkbits);
448} 327}
449 328
450static inline void vfs_dq_free_block_nodirty(struct inode *inode, qsize_t nr) 329static inline void dquot_free_block(struct inode *inode, qsize_t nr)
451{ 330{
452 vfs_dq_free_space_nodirty(inode, nr << inode->i_blkbits); 331 dquot_free_space(inode, nr << inode->i_blkbits);
453} 332}
454 333
455static inline void vfs_dq_free_block(struct inode *inode, qsize_t nr) 334static inline void dquot_release_reservation_block(struct inode *inode,
335 qsize_t nr)
456{ 336{
457 vfs_dq_free_space(inode, nr << inode->i_blkbits); 337 __dquot_free_space(inode, nr << inode->i_blkbits, 1);
458} 338}
459 339
460#endif /* _LINUX_QUOTAOPS_ */ 340#endif /* _LINUX_QUOTAOPS_ */
diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h
index c5da74918096..55ca73cf25e5 100644
--- a/include/linux/radix-tree.h
+++ b/include/linux/radix-tree.h
@@ -121,6 +121,13 @@ do { \
121 * (Note, rcu_assign_pointer and rcu_dereference are not needed to control 121 * (Note, rcu_assign_pointer and rcu_dereference are not needed to control
122 * access to data items when inserting into or looking up from the radix tree) 122 * access to data items when inserting into or looking up from the radix tree)
123 * 123 *
124 * Note that the value returned by radix_tree_tag_get() may not be relied upon
125 * if only the RCU read lock is held. Functions to set/clear tags and to
126 * delete nodes running concurrently with it may affect its result such that
127 * two consecutive reads in the same locked section may return different
128 * values. If reliability is required, modification functions must also be
129 * excluded from concurrency.
130 *
124 * radix_tree_tagged is able to be called without locking or RCU. 131 * radix_tree_tagged is able to be called without locking or RCU.
125 */ 132 */
126 133
diff --git a/include/linux/raid/pq.h b/include/linux/raid/pq.h
index d92480f8285c..1cbbd2c11aa9 100644
--- a/include/linux/raid/pq.h
+++ b/include/linux/raid/pq.h
@@ -78,6 +78,25 @@ struct raid6_calls {
78/* Selected algorithm */ 78/* Selected algorithm */
79extern struct raid6_calls raid6_call; 79extern struct raid6_calls raid6_call;
80 80
81/* Various routine sets */
82extern const struct raid6_calls raid6_intx1;
83extern const struct raid6_calls raid6_intx2;
84extern const struct raid6_calls raid6_intx4;
85extern const struct raid6_calls raid6_intx8;
86extern const struct raid6_calls raid6_intx16;
87extern const struct raid6_calls raid6_intx32;
88extern const struct raid6_calls raid6_mmxx1;
89extern const struct raid6_calls raid6_mmxx2;
90extern const struct raid6_calls raid6_sse1x1;
91extern const struct raid6_calls raid6_sse1x2;
92extern const struct raid6_calls raid6_sse2x1;
93extern const struct raid6_calls raid6_sse2x2;
94extern const struct raid6_calls raid6_sse2x4;
95extern const struct raid6_calls raid6_altivec1;
96extern const struct raid6_calls raid6_altivec2;
97extern const struct raid6_calls raid6_altivec4;
98extern const struct raid6_calls raid6_altivec8;
99
81/* Algorithm list */ 100/* Algorithm list */
82extern const struct raid6_calls * const raid6_algos[]; 101extern const struct raid6_calls * const raid6_algos[];
83int raid6_select_algo(void); 102int raid6_select_algo(void);
diff --git a/include/linux/raid_class.h b/include/linux/raid_class.h
index 6b537f1ac96c..31e1ff69efc8 100644
--- a/include/linux/raid_class.h
+++ b/include/linux/raid_class.h
@@ -32,6 +32,7 @@ enum raid_level {
32 RAID_LEVEL_0, 32 RAID_LEVEL_0,
33 RAID_LEVEL_1, 33 RAID_LEVEL_1,
34 RAID_LEVEL_10, 34 RAID_LEVEL_10,
35 RAID_LEVEL_1E,
35 RAID_LEVEL_3, 36 RAID_LEVEL_3,
36 RAID_LEVEL_4, 37 RAID_LEVEL_4,
37 RAID_LEVEL_5, 38 RAID_LEVEL_5,
diff --git a/include/linux/range.h b/include/linux/range.h
new file mode 100644
index 000000000000..bd184a5db791
--- /dev/null
+++ b/include/linux/range.h
@@ -0,0 +1,30 @@
1#ifndef _LINUX_RANGE_H
2#define _LINUX_RANGE_H
3
4struct range {
5 u64 start;
6 u64 end;
7};
8
9int add_range(struct range *range, int az, int nr_range,
10 u64 start, u64 end);
11
12
13int add_range_with_merge(struct range *range, int az, int nr_range,
14 u64 start, u64 end);
15
16void subtract_range(struct range *range, int az, u64 start, u64 end);
17
18int clean_sort_range(struct range *range, int az);
19
20void sort_range(struct range *range, int nr_range);
21
22#define MAX_RESOURCE ((resource_size_t)~0)
23static inline resource_size_t cap_resource(u64 val)
24{
25 if (val > MAX_RESOURCE)
26 return MAX_RESOURCE;
27
28 return val;
29}
30#endif
diff --git a/include/linux/ratelimit.h b/include/linux/ratelimit.h
index 00044b856453..668cf1bef030 100644
--- a/include/linux/ratelimit.h
+++ b/include/linux/ratelimit.h
@@ -1,20 +1,31 @@
1#ifndef _LINUX_RATELIMIT_H 1#ifndef _LINUX_RATELIMIT_H
2#define _LINUX_RATELIMIT_H 2#define _LINUX_RATELIMIT_H
3
3#include <linux/param.h> 4#include <linux/param.h>
5#include <linux/spinlock_types.h>
4 6
5#define DEFAULT_RATELIMIT_INTERVAL (5 * HZ) 7#define DEFAULT_RATELIMIT_INTERVAL (5 * HZ)
6#define DEFAULT_RATELIMIT_BURST 10 8#define DEFAULT_RATELIMIT_BURST 10
7 9
8struct ratelimit_state { 10struct ratelimit_state {
9 int interval; 11 spinlock_t lock; /* protect the state */
10 int burst; 12
11 int printed; 13 int interval;
12 int missed; 14 int burst;
13 unsigned long begin; 15 int printed;
16 int missed;
17 unsigned long begin;
14}; 18};
15 19
16#define DEFINE_RATELIMIT_STATE(name, interval, burst) \ 20#define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) \
17 struct ratelimit_state name = {interval, burst,} 21 \
22 struct ratelimit_state name = { \
23 .lock = __SPIN_LOCK_UNLOCKED(name.lock), \
24 .interval = interval_init, \
25 .burst = burst_init, \
26 }
27
28extern int ___ratelimit(struct ratelimit_state *rs, const char *func);
29#define __ratelimit(state) ___ratelimit(state, __func__)
18 30
19extern int __ratelimit(struct ratelimit_state *rs); 31#endif /* _LINUX_RATELIMIT_H */
20#endif
diff --git a/include/linux/rbtree.h b/include/linux/rbtree.h
index 9c295411d01f..5210a5c60877 100644
--- a/include/linux/rbtree.h
+++ b/include/linux/rbtree.h
@@ -25,10 +25,10 @@
25 25
26 Some example of insert and search follows here. The search is a plain 26 Some example of insert and search follows here. The search is a plain
27 normal search over an ordered tree. The insert instead must be implemented 27 normal search over an ordered tree. The insert instead must be implemented
28 int two steps: as first thing the code must insert the element in 28 in two steps: First, the code must insert the element in order as a red leaf
29 order as a red leaf in the tree, then the support library function 29 in the tree, and then the support library function rb_insert_color() must
30 rb_insert_color() must be called. Such function will do the 30 be called. Such function will do the not trivial work to rebalance the
31 not trivial work to rebalance the rbtree if necessary. 31 rbtree, if necessary.
32 32
33----------------------------------------------------------------------- 33-----------------------------------------------------------------------
34static inline struct page * rb_search_page_cache(struct inode * inode, 34static inline struct page * rb_search_page_cache(struct inode * inode,
diff --git a/include/linux/rculist.h b/include/linux/rculist.h
index 5710f43bbc9e..2c9b46cff3d7 100644
--- a/include/linux/rculist.h
+++ b/include/linux/rculist.h
@@ -208,7 +208,7 @@ static inline void list_splice_init_rcu(struct list_head *list,
208 * primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock(). 208 * primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock().
209 */ 209 */
210#define list_entry_rcu(ptr, type, member) \ 210#define list_entry_rcu(ptr, type, member) \
211 container_of(rcu_dereference(ptr), type, member) 211 container_of(rcu_dereference_raw(ptr), type, member)
212 212
213/** 213/**
214 * list_first_entry_rcu - get the first element from a list 214 * list_first_entry_rcu - get the first element from a list
@@ -225,9 +225,9 @@ static inline void list_splice_init_rcu(struct list_head *list,
225 list_entry_rcu((ptr)->next, type, member) 225 list_entry_rcu((ptr)->next, type, member)
226 226
227#define __list_for_each_rcu(pos, head) \ 227#define __list_for_each_rcu(pos, head) \
228 for (pos = rcu_dereference((head)->next); \ 228 for (pos = rcu_dereference_raw((head)->next); \
229 pos != (head); \ 229 pos != (head); \
230 pos = rcu_dereference(pos->next)) 230 pos = rcu_dereference_raw(pos->next))
231 231
232/** 232/**
233 * list_for_each_entry_rcu - iterate over rcu list of given type 233 * list_for_each_entry_rcu - iterate over rcu list of given type
@@ -257,9 +257,23 @@ static inline void list_splice_init_rcu(struct list_head *list,
257 * as long as the traversal is guarded by rcu_read_lock(). 257 * as long as the traversal is guarded by rcu_read_lock().
258 */ 258 */
259#define list_for_each_continue_rcu(pos, head) \ 259#define list_for_each_continue_rcu(pos, head) \
260 for ((pos) = rcu_dereference((pos)->next); \ 260 for ((pos) = rcu_dereference_raw((pos)->next); \
261 prefetch((pos)->next), (pos) != (head); \ 261 prefetch((pos)->next), (pos) != (head); \
262 (pos) = rcu_dereference((pos)->next)) 262 (pos) = rcu_dereference_raw((pos)->next))
263
264/**
265 * list_for_each_entry_continue_rcu - continue iteration over list of given type
266 * @pos: the type * to use as a loop cursor.
267 * @head: the head for your list.
268 * @member: the name of the list_struct within the struct.
269 *
270 * Continue to iterate over list of given type, continuing after
271 * the current position.
272 */
273#define list_for_each_entry_continue_rcu(pos, head, member) \
274 for (pos = list_entry_rcu(pos->member.next, typeof(*pos), member); \
275 prefetch(pos->member.next), &pos->member != (head); \
276 pos = list_entry_rcu(pos->member.next, typeof(*pos), member))
263 277
264/** 278/**
265 * hlist_del_rcu - deletes entry from hash list without re-initialization 279 * hlist_del_rcu - deletes entry from hash list without re-initialization
@@ -392,6 +406,11 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev,
392 n->next->pprev = &n->next; 406 n->next->pprev = &n->next;
393} 407}
394 408
409#define __hlist_for_each_rcu(pos, head) \
410 for (pos = rcu_dereference((head)->first); \
411 pos && ({ prefetch(pos->next); 1; }); \
412 pos = rcu_dereference(pos->next))
413
395/** 414/**
396 * hlist_for_each_entry_rcu - iterate over rcu list of given type 415 * hlist_for_each_entry_rcu - iterate over rcu list of given type
397 * @tpos: the type * to use as a loop cursor. 416 * @tpos: the type * to use as a loop cursor.
@@ -404,10 +423,10 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev,
404 * as long as the traversal is guarded by rcu_read_lock(). 423 * as long as the traversal is guarded by rcu_read_lock().
405 */ 424 */
406#define hlist_for_each_entry_rcu(tpos, pos, head, member) \ 425#define hlist_for_each_entry_rcu(tpos, pos, head, member) \
407 for (pos = rcu_dereference((head)->first); \ 426 for (pos = rcu_dereference_raw((head)->first); \
408 pos && ({ prefetch(pos->next); 1; }) && \ 427 pos && ({ prefetch(pos->next); 1; }) && \
409 ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \ 428 ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \
410 pos = rcu_dereference(pos->next)) 429 pos = rcu_dereference_raw(pos->next))
411 430
412#endif /* __KERNEL__ */ 431#endif /* __KERNEL__ */
413#endif 432#endif
diff --git a/include/linux/rculist_nulls.h b/include/linux/rculist_nulls.h
index 589a40919f01..b70ffe53cb9f 100644
--- a/include/linux/rculist_nulls.h
+++ b/include/linux/rculist_nulls.h
@@ -101,10 +101,10 @@ static inline void hlist_nulls_add_head_rcu(struct hlist_nulls_node *n,
101 * 101 *
102 */ 102 */
103#define hlist_nulls_for_each_entry_rcu(tpos, pos, head, member) \ 103#define hlist_nulls_for_each_entry_rcu(tpos, pos, head, member) \
104 for (pos = rcu_dereference((head)->first); \ 104 for (pos = rcu_dereference_raw((head)->first); \
105 (!is_a_nulls(pos)) && \ 105 (!is_a_nulls(pos)) && \
106 ({ tpos = hlist_nulls_entry(pos, typeof(*tpos), member); 1; }); \ 106 ({ tpos = hlist_nulls_entry(pos, typeof(*tpos), member); 1; }); \
107 pos = rcu_dereference(pos->next)) 107 pos = rcu_dereference_raw(pos->next))
108 108
109#endif 109#endif
110#endif 110#endif
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index 3ebd0b7bcb08..db266bbed23f 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -41,6 +41,10 @@
41#include <linux/lockdep.h> 41#include <linux/lockdep.h>
42#include <linux/completion.h> 42#include <linux/completion.h>
43 43
44#ifdef CONFIG_RCU_TORTURE_TEST
45extern int rcutorture_runnable; /* for sysctl */
46#endif /* #ifdef CONFIG_RCU_TORTURE_TEST */
47
44/** 48/**
45 * struct rcu_head - callback structure for use with RCU 49 * struct rcu_head - callback structure for use with RCU
46 * @next: next update requests in a list 50 * @next: next update requests in a list
@@ -52,11 +56,6 @@ struct rcu_head {
52}; 56};
53 57
54/* Exported common interfaces */ 58/* Exported common interfaces */
55#ifdef CONFIG_TREE_PREEMPT_RCU
56extern void synchronize_rcu(void);
57#else /* #ifdef CONFIG_TREE_PREEMPT_RCU */
58#define synchronize_rcu synchronize_sched
59#endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */
60extern void synchronize_rcu_bh(void); 59extern void synchronize_rcu_bh(void);
61extern void synchronize_sched(void); 60extern void synchronize_sched(void);
62extern void rcu_barrier(void); 61extern void rcu_barrier(void);
@@ -67,12 +66,13 @@ extern int sched_expedited_torture_stats(char *page);
67 66
68/* Internal to kernel */ 67/* Internal to kernel */
69extern void rcu_init(void); 68extern void rcu_init(void);
70extern void rcu_scheduler_starting(void);
71extern int rcu_needs_cpu(int cpu);
72extern int rcu_scheduler_active; 69extern int rcu_scheduler_active;
70extern void rcu_scheduler_starting(void);
73 71
74#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) 72#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU)
75#include <linux/rcutree.h> 73#include <linux/rcutree.h>
74#elif defined(CONFIG_TINY_RCU)
75#include <linux/rcutiny.h>
76#else 76#else
77#error "Unknown RCU implementation specified to kernel configuration" 77#error "Unknown RCU implementation specified to kernel configuration"
78#endif 78#endif
@@ -84,14 +84,185 @@ extern int rcu_scheduler_active;
84} while (0) 84} while (0)
85 85
86#ifdef CONFIG_DEBUG_LOCK_ALLOC 86#ifdef CONFIG_DEBUG_LOCK_ALLOC
87
87extern struct lockdep_map rcu_lock_map; 88extern struct lockdep_map rcu_lock_map;
88# define rcu_read_acquire() \ 89# define rcu_read_acquire() \
89 lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) 90 lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_)
90# define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_) 91# define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_)
91#else 92
92# define rcu_read_acquire() do { } while (0) 93extern struct lockdep_map rcu_bh_lock_map;
93# define rcu_read_release() do { } while (0) 94# define rcu_read_acquire_bh() \
94#endif 95 lock_acquire(&rcu_bh_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_)
96# define rcu_read_release_bh() lock_release(&rcu_bh_lock_map, 1, _THIS_IP_)
97
98extern struct lockdep_map rcu_sched_lock_map;
99# define rcu_read_acquire_sched() \
100 lock_acquire(&rcu_sched_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_)
101# define rcu_read_release_sched() \
102 lock_release(&rcu_sched_lock_map, 1, _THIS_IP_)
103
104extern int debug_lockdep_rcu_enabled(void);
105
106/**
107 * rcu_read_lock_held - might we be in RCU read-side critical section?
108 *
109 * If CONFIG_PROVE_LOCKING is selected and enabled, returns nonzero iff in
110 * an RCU read-side critical section. In absence of CONFIG_PROVE_LOCKING,
111 * this assumes we are in an RCU read-side critical section unless it can
112 * prove otherwise.
113 *
114 * Check rcu_scheduler_active to prevent false positives during boot.
115 */
116static inline int rcu_read_lock_held(void)
117{
118 if (!debug_lockdep_rcu_enabled())
119 return 1;
120 return lock_is_held(&rcu_lock_map);
121}
122
123/*
124 * rcu_read_lock_bh_held() is defined out of line to avoid #include-file
125 * hell.
126 */
127extern int rcu_read_lock_bh_held(void);
128
129/**
130 * rcu_read_lock_sched_held - might we be in RCU-sched read-side critical section?
131 *
132 * If CONFIG_PROVE_LOCKING is selected and enabled, returns nonzero iff in an
133 * RCU-sched read-side critical section. In absence of CONFIG_PROVE_LOCKING,
134 * this assumes we are in an RCU-sched read-side critical section unless it
135 * can prove otherwise. Note that disabling of preemption (including
136 * disabling irqs) counts as an RCU-sched read-side critical section.
137 *
138 * Check rcu_scheduler_active to prevent false positives during boot.
139 */
140#ifdef CONFIG_PREEMPT
141static inline int rcu_read_lock_sched_held(void)
142{
143 int lockdep_opinion = 0;
144
145 if (!debug_lockdep_rcu_enabled())
146 return 1;
147 if (debug_locks)
148 lockdep_opinion = lock_is_held(&rcu_sched_lock_map);
149 return lockdep_opinion || preempt_count() != 0 || irqs_disabled();
150}
151#else /* #ifdef CONFIG_PREEMPT */
152static inline int rcu_read_lock_sched_held(void)
153{
154 return 1;
155}
156#endif /* #else #ifdef CONFIG_PREEMPT */
157
158#else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */
159
160# define rcu_read_acquire() do { } while (0)
161# define rcu_read_release() do { } while (0)
162# define rcu_read_acquire_bh() do { } while (0)
163# define rcu_read_release_bh() do { } while (0)
164# define rcu_read_acquire_sched() do { } while (0)
165# define rcu_read_release_sched() do { } while (0)
166
167static inline int rcu_read_lock_held(void)
168{
169 return 1;
170}
171
172static inline int rcu_read_lock_bh_held(void)
173{
174 return 1;
175}
176
177#ifdef CONFIG_PREEMPT
178static inline int rcu_read_lock_sched_held(void)
179{
180 return !rcu_scheduler_active || preempt_count() != 0 || irqs_disabled();
181}
182#else /* #ifdef CONFIG_PREEMPT */
183static inline int rcu_read_lock_sched_held(void)
184{
185 return 1;
186}
187#endif /* #else #ifdef CONFIG_PREEMPT */
188
189#endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */
190
191#ifdef CONFIG_PROVE_RCU
192
193extern int rcu_my_thread_group_empty(void);
194
195/**
196 * rcu_dereference_check - rcu_dereference with debug checking
197 * @p: The pointer to read, prior to dereferencing
198 * @c: The conditions under which the dereference will take place
199 *
200 * Do an rcu_dereference(), but check that the conditions under which the
201 * dereference will take place are correct. Typically the conditions indicate
202 * the various locking conditions that should be held at that point. The check
203 * should return true if the conditions are satisfied.
204 *
205 * For example:
206 *
207 * bar = rcu_dereference_check(foo->bar, rcu_read_lock_held() ||
208 * lockdep_is_held(&foo->lock));
209 *
210 * could be used to indicate to lockdep that foo->bar may only be dereferenced
211 * if either the RCU read lock is held, or that the lock required to replace
212 * the bar struct at foo->bar is held.
213 *
214 * Note that the list of conditions may also include indications of when a lock
215 * need not be held, for example during initialisation or destruction of the
216 * target struct:
217 *
218 * bar = rcu_dereference_check(foo->bar, rcu_read_lock_held() ||
219 * lockdep_is_held(&foo->lock) ||
220 * atomic_read(&foo->usage) == 0);
221 */
222#define rcu_dereference_check(p, c) \
223 ({ \
224 if (debug_lockdep_rcu_enabled() && !(c)) \
225 lockdep_rcu_dereference(__FILE__, __LINE__); \
226 rcu_dereference_raw(p); \
227 })
228
229/**
230 * rcu_dereference_protected - fetch RCU pointer when updates prevented
231 *
232 * Return the value of the specified RCU-protected pointer, but omit
233 * both the smp_read_barrier_depends() and the ACCESS_ONCE(). This
234 * is useful in cases where update-side locks prevent the value of the
235 * pointer from changing. Please note that this primitive does -not-
236 * prevent the compiler from repeating this reference or combining it
237 * with other references, so it should not be used without protection
238 * of appropriate locks.
239 */
240#define rcu_dereference_protected(p, c) \
241 ({ \
242 if (debug_lockdep_rcu_enabled() && !(c)) \
243 lockdep_rcu_dereference(__FILE__, __LINE__); \
244 (p); \
245 })
246
247#else /* #ifdef CONFIG_PROVE_RCU */
248
249#define rcu_dereference_check(p, c) rcu_dereference_raw(p)
250#define rcu_dereference_protected(p, c) (p)
251
252#endif /* #else #ifdef CONFIG_PROVE_RCU */
253
254/**
255 * rcu_access_pointer - fetch RCU pointer with no dereferencing
256 *
257 * Return the value of the specified RCU-protected pointer, but omit the
258 * smp_read_barrier_depends() and keep the ACCESS_ONCE(). This is useful
259 * when the value of this pointer is accessed, but the pointer is not
260 * dereferenced, for example, when testing an RCU-protected pointer against
261 * NULL. This may also be used in cases where update-side locks prevent
262 * the value of the pointer from changing, but rcu_dereference_protected()
263 * is a lighter-weight primitive for this use case.
264 */
265#define rcu_access_pointer(p) ACCESS_ONCE(p)
95 266
96/** 267/**
97 * rcu_read_lock - mark the beginning of an RCU read-side critical section. 268 * rcu_read_lock - mark the beginning of an RCU read-side critical section.
@@ -166,7 +337,7 @@ static inline void rcu_read_lock_bh(void)
166{ 337{
167 __rcu_read_lock_bh(); 338 __rcu_read_lock_bh();
168 __acquire(RCU_BH); 339 __acquire(RCU_BH);
169 rcu_read_acquire(); 340 rcu_read_acquire_bh();
170} 341}
171 342
172/* 343/*
@@ -176,7 +347,7 @@ static inline void rcu_read_lock_bh(void)
176 */ 347 */
177static inline void rcu_read_unlock_bh(void) 348static inline void rcu_read_unlock_bh(void)
178{ 349{
179 rcu_read_release(); 350 rcu_read_release_bh();
180 __release(RCU_BH); 351 __release(RCU_BH);
181 __rcu_read_unlock_bh(); 352 __rcu_read_unlock_bh();
182} 353}
@@ -194,7 +365,7 @@ static inline void rcu_read_lock_sched(void)
194{ 365{
195 preempt_disable(); 366 preempt_disable();
196 __acquire(RCU_SCHED); 367 __acquire(RCU_SCHED);
197 rcu_read_acquire(); 368 rcu_read_acquire_sched();
198} 369}
199 370
200/* Used by lockdep and tracing: cannot be traced, cannot call lockdep. */ 371/* Used by lockdep and tracing: cannot be traced, cannot call lockdep. */
@@ -211,7 +382,7 @@ static inline notrace void rcu_read_lock_sched_notrace(void)
211 */ 382 */
212static inline void rcu_read_unlock_sched(void) 383static inline void rcu_read_unlock_sched(void)
213{ 384{
214 rcu_read_release(); 385 rcu_read_release_sched();
215 __release(RCU_SCHED); 386 __release(RCU_SCHED);
216 preempt_enable(); 387 preempt_enable();
217} 388}
@@ -225,22 +396,49 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
225 396
226 397
227/** 398/**
228 * rcu_dereference - fetch an RCU-protected pointer in an 399 * rcu_dereference_raw - fetch an RCU-protected pointer
229 * RCU read-side critical section. This pointer may later 400 *
230 * be safely dereferenced. 401 * The caller must be within some flavor of RCU read-side critical
402 * section, or must be otherwise preventing the pointer from changing,
403 * for example, by holding an appropriate lock. This pointer may later
404 * be safely dereferenced. It is the caller's responsibility to have
405 * done the right thing, as this primitive does no checking of any kind.
231 * 406 *
232 * Inserts memory barriers on architectures that require them 407 * Inserts memory barriers on architectures that require them
233 * (currently only the Alpha), and, more importantly, documents 408 * (currently only the Alpha), and, more importantly, documents
234 * exactly which pointers are protected by RCU. 409 * exactly which pointers are protected by RCU.
235 */ 410 */
236 411#define rcu_dereference_raw(p) ({ \
237#define rcu_dereference(p) ({ \
238 typeof(p) _________p1 = ACCESS_ONCE(p); \ 412 typeof(p) _________p1 = ACCESS_ONCE(p); \
239 smp_read_barrier_depends(); \ 413 smp_read_barrier_depends(); \
240 (_________p1); \ 414 (_________p1); \
241 }) 415 })
242 416
243/** 417/**
418 * rcu_dereference - fetch an RCU-protected pointer, checking for RCU
419 *
420 * Makes rcu_dereference_check() do the dirty work.
421 */
422#define rcu_dereference(p) \
423 rcu_dereference_check(p, rcu_read_lock_held())
424
425/**
426 * rcu_dereference_bh - fetch an RCU-protected pointer, checking for RCU-bh
427 *
428 * Makes rcu_dereference_check() do the dirty work.
429 */
430#define rcu_dereference_bh(p) \
431 rcu_dereference_check(p, rcu_read_lock_bh_held())
432
433/**
434 * rcu_dereference_sched - fetch RCU-protected pointer, checking for RCU-sched
435 *
436 * Makes rcu_dereference_check() do the dirty work.
437 */
438#define rcu_dereference_sched(p) \
439 rcu_dereference_check(p, rcu_read_lock_sched_held())
440
441/**
244 * rcu_assign_pointer - assign (publicize) a pointer to a newly 442 * rcu_assign_pointer - assign (publicize) a pointer to a newly
245 * initialized structure that will be dereferenced by RCU read-side 443 * initialized structure that will be dereferenced by RCU read-side
246 * critical sections. Returns the value assigned. 444 * critical sections. Returns the value assigned.
diff --git a/include/linux/rcutiny.h b/include/linux/rcutiny.h
new file mode 100644
index 000000000000..a5195875480a
--- /dev/null
+++ b/include/linux/rcutiny.h
@@ -0,0 +1,117 @@
1/*
2 * Read-Copy Update mechanism for mutual exclusion, the Bloatwatch edition.
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 * Copyright IBM Corporation, 2008
19 *
20 * Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
21 *
22 * For detailed explanation of Read-Copy Update mechanism see -
23 * Documentation/RCU
24 */
25#ifndef __LINUX_TINY_H
26#define __LINUX_TINY_H
27
28#include <linux/cache.h>
29
30void rcu_sched_qs(int cpu);
31void rcu_bh_qs(int cpu);
32
33#define __rcu_read_lock() preempt_disable()
34#define __rcu_read_unlock() preempt_enable()
35#define __rcu_read_lock_bh() local_bh_disable()
36#define __rcu_read_unlock_bh() local_bh_enable()
37#define call_rcu_sched call_rcu
38
39#define rcu_init_sched() do { } while (0)
40extern void rcu_check_callbacks(int cpu, int user);
41
42static inline int rcu_needs_cpu(int cpu)
43{
44 return 0;
45}
46
47/*
48 * Return the number of grace periods.
49 */
50static inline long rcu_batches_completed(void)
51{
52 return 0;
53}
54
55/*
56 * Return the number of bottom-half grace periods.
57 */
58static inline long rcu_batches_completed_bh(void)
59{
60 return 0;
61}
62
63extern int rcu_expedited_torture_stats(char *page);
64
65static inline void rcu_force_quiescent_state(void)
66{
67}
68
69static inline void rcu_bh_force_quiescent_state(void)
70{
71}
72
73static inline void rcu_sched_force_quiescent_state(void)
74{
75}
76
77#define synchronize_rcu synchronize_sched
78
79static inline void synchronize_rcu_expedited(void)
80{
81 synchronize_sched();
82}
83
84static inline void synchronize_rcu_bh_expedited(void)
85{
86 synchronize_sched();
87}
88
89struct notifier_block;
90
91#ifdef CONFIG_NO_HZ
92
93extern void rcu_enter_nohz(void);
94extern void rcu_exit_nohz(void);
95
96#else /* #ifdef CONFIG_NO_HZ */
97
98static inline void rcu_enter_nohz(void)
99{
100}
101
102static inline void rcu_exit_nohz(void)
103{
104}
105
106#endif /* #else #ifdef CONFIG_NO_HZ */
107
108static inline void exit_rcu(void)
109{
110}
111
112static inline int rcu_preempt_depth(void)
113{
114 return 0;
115}
116
117#endif /* __LINUX_RCUTINY_H */
diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h
index 9642c6bcb399..42cc3a04779e 100644
--- a/include/linux/rcutree.h
+++ b/include/linux/rcutree.h
@@ -34,8 +34,6 @@ struct notifier_block;
34 34
35extern void rcu_sched_qs(int cpu); 35extern void rcu_sched_qs(int cpu);
36extern void rcu_bh_qs(int cpu); 36extern void rcu_bh_qs(int cpu);
37extern int rcu_cpu_notify(struct notifier_block *self,
38 unsigned long action, void *hcpu);
39extern int rcu_needs_cpu(int cpu); 37extern int rcu_needs_cpu(int cpu);
40extern int rcu_expedited_torture_stats(char *page); 38extern int rcu_expedited_torture_stats(char *page);
41 39
@@ -43,8 +41,15 @@ extern int rcu_expedited_torture_stats(char *page);
43 41
44extern void __rcu_read_lock(void); 42extern void __rcu_read_lock(void);
45extern void __rcu_read_unlock(void); 43extern void __rcu_read_unlock(void);
44extern void synchronize_rcu(void);
46extern void exit_rcu(void); 45extern void exit_rcu(void);
47 46
47/*
48 * Defined as macro as it is a very low level header
49 * included from areas that don't even know about current
50 */
51#define rcu_preempt_depth() (current->rcu_read_lock_nesting)
52
48#else /* #ifdef CONFIG_TREE_PREEMPT_RCU */ 53#else /* #ifdef CONFIG_TREE_PREEMPT_RCU */
49 54
50static inline void __rcu_read_lock(void) 55static inline void __rcu_read_lock(void)
@@ -57,12 +62,17 @@ static inline void __rcu_read_unlock(void)
57 preempt_enable(); 62 preempt_enable();
58} 63}
59 64
60#define __synchronize_sched() synchronize_rcu() 65#define synchronize_rcu synchronize_sched
61 66
62static inline void exit_rcu(void) 67static inline void exit_rcu(void)
63{ 68{
64} 69}
65 70
71static inline int rcu_preempt_depth(void)
72{
73 return 0;
74}
75
66#endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */ 76#endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */
67 77
68static inline void __rcu_read_lock_bh(void) 78static inline void __rcu_read_lock_bh(void)
@@ -83,12 +93,14 @@ static inline void synchronize_rcu_bh_expedited(void)
83 synchronize_sched_expedited(); 93 synchronize_sched_expedited();
84} 94}
85 95
86extern void __rcu_init(void);
87extern void rcu_check_callbacks(int cpu, int user); 96extern void rcu_check_callbacks(int cpu, int user);
88 97
89extern long rcu_batches_completed(void); 98extern long rcu_batches_completed(void);
90extern long rcu_batches_completed_bh(void); 99extern long rcu_batches_completed_bh(void);
91extern long rcu_batches_completed_sched(void); 100extern long rcu_batches_completed_sched(void);
101extern void rcu_force_quiescent_state(void);
102extern void rcu_bh_force_quiescent_state(void);
103extern void rcu_sched_force_quiescent_state(void);
92 104
93#ifdef CONFIG_NO_HZ 105#ifdef CONFIG_NO_HZ
94void rcu_enter_nohz(void); 106void rcu_enter_nohz(void);
diff --git a/include/linux/rds.h b/include/linux/rds.h
index 89d46e1afbb1..cab4994c2f63 100644
--- a/include/linux/rds.h
+++ b/include/linux/rds.h
@@ -56,6 +56,7 @@
56/* deprecated: RDS_BARRIER 4 */ 56/* deprecated: RDS_BARRIER 4 */
57#define RDS_RECVERR 5 57#define RDS_RECVERR 5
58#define RDS_CONG_MONITOR 6 58#define RDS_CONG_MONITOR 6
59#define RDS_GET_MR_FOR_DEST 7
59 60
60/* 61/*
61 * Control message types for SOL_RDS. 62 * Control message types for SOL_RDS.
@@ -224,6 +225,13 @@ struct rds_get_mr_args {
224 uint64_t flags; 225 uint64_t flags;
225}; 226};
226 227
228struct rds_get_mr_for_dest_args {
229 struct sockaddr_storage dest_addr;
230 struct rds_iovec vec;
231 u_int64_t cookie_addr;
232 uint64_t flags;
233};
234
227struct rds_free_mr_args { 235struct rds_free_mr_args {
228 rds_rdma_cookie_t cookie; 236 rds_rdma_cookie_t cookie;
229 u_int64_t flags; 237 u_int64_t flags;
diff --git a/include/linux/reboot.h b/include/linux/reboot.h
index 988e55fe649b..3005d5a7fce5 100644
--- a/include/linux/reboot.h
+++ b/include/linux/reboot.h
@@ -64,6 +64,7 @@ extern void kernel_restart(char *cmd);
64extern void kernel_halt(void); 64extern void kernel_halt(void);
65extern void kernel_power_off(void); 65extern void kernel_power_off(void);
66 66
67extern int C_A_D; /* for sysctl */
67void ctrl_alt_del(void); 68void ctrl_alt_del(void);
68 69
69#define POWEROFF_CMD_PATH_LEN 256 70#define POWEROFF_CMD_PATH_LEN 256
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h
index 490c5b37b6d7..ebd747265294 100644
--- a/include/linux/regulator/consumer.h
+++ b/include/linux/regulator/consumer.h
@@ -35,6 +35,8 @@
35#ifndef __LINUX_REGULATOR_CONSUMER_H_ 35#ifndef __LINUX_REGULATOR_CONSUMER_H_
36#define __LINUX_REGULATOR_CONSUMER_H_ 36#define __LINUX_REGULATOR_CONSUMER_H_
37 37
38#include <linux/device.h>
39
38/* 40/*
39 * Regulator operating modes. 41 * Regulator operating modes.
40 * 42 *
@@ -87,8 +89,9 @@
87 * REGULATION_OUT Regulator output is out of regulation. 89 * REGULATION_OUT Regulator output is out of regulation.
88 * FAIL Regulator output has failed. 90 * FAIL Regulator output has failed.
89 * OVER_TEMP Regulator over temp. 91 * OVER_TEMP Regulator over temp.
90 * FORCE_DISABLE Regulator shut down by software. 92 * FORCE_DISABLE Regulator forcibly shut down by software.
91 * VOLTAGE_CHANGE Regulator voltage changed. 93 * VOLTAGE_CHANGE Regulator voltage changed.
94 * DISABLE Regulator was disabled.
92 * 95 *
93 * NOTE: These events can be OR'ed together when passed into handler. 96 * NOTE: These events can be OR'ed together when passed into handler.
94 */ 97 */
@@ -100,6 +103,7 @@
100#define REGULATOR_EVENT_OVER_TEMP 0x10 103#define REGULATOR_EVENT_OVER_TEMP 0x10
101#define REGULATOR_EVENT_FORCE_DISABLE 0x20 104#define REGULATOR_EVENT_FORCE_DISABLE 0x20
102#define REGULATOR_EVENT_VOLTAGE_CHANGE 0x40 105#define REGULATOR_EVENT_VOLTAGE_CHANGE 0x40
106#define REGULATOR_EVENT_DISABLE 0x80
103 107
104struct regulator; 108struct regulator;
105 109
@@ -179,9 +183,13 @@ static inline struct regulator *__must_check regulator_get(struct device *dev,
179{ 183{
180 /* Nothing except the stubbed out regulator API should be 184 /* Nothing except the stubbed out regulator API should be
181 * looking at the value except to check if it is an error 185 * looking at the value except to check if it is an error
182 * value so the actual return value doesn't matter. 186 * value. Drivers are free to handle NULL specifically by
187 * skipping all regulator API calls, but they don't have to.
188 * Drivers which don't, should make sure they properly handle
189 * corner cases of the API, such as regulator_get_voltage()
190 * returning 0.
183 */ 191 */
184 return (struct regulator *)id; 192 return NULL;
185} 193}
186static inline void regulator_put(struct regulator *regulator) 194static inline void regulator_put(struct regulator *regulator)
187{ 195{
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h
index 31f2055eae28..592cd7c642c2 100644
--- a/include/linux/regulator/driver.h
+++ b/include/linux/regulator/driver.h
@@ -58,6 +58,9 @@ enum regulator_status {
58 * @get_optimum_mode: Get the most efficient operating mode for the regulator 58 * @get_optimum_mode: Get the most efficient operating mode for the regulator
59 * when running with the specified parameters. 59 * when running with the specified parameters.
60 * 60 *
61 * @enable_time: Time taken for the regulator voltage output voltage to
62 * stabalise after being enabled, in microseconds.
63 *
61 * @set_suspend_voltage: Set the voltage for the regulator when the system 64 * @set_suspend_voltage: Set the voltage for the regulator when the system
62 * is suspended. 65 * is suspended.
63 * @set_suspend_enable: Mark the regulator as enabled when the system is 66 * @set_suspend_enable: Mark the regulator as enabled when the system is
@@ -93,6 +96,9 @@ struct regulator_ops {
93 int (*set_mode) (struct regulator_dev *, unsigned int mode); 96 int (*set_mode) (struct regulator_dev *, unsigned int mode);
94 unsigned int (*get_mode) (struct regulator_dev *); 97 unsigned int (*get_mode) (struct regulator_dev *);
95 98
99 /* Time taken to enable the regulator */
100 int (*enable_time) (struct regulator_dev *);
101
96 /* report regulator status ... most other accessors report 102 /* report regulator status ... most other accessors report
97 * control inputs, this reports results of combining inputs 103 * control inputs, this reports results of combining inputs
98 * from Linux (and other sources) with the actual load. 104 * from Linux (and other sources) with the actual load.
diff --git a/include/linux/regulator/fixed.h b/include/linux/regulator/fixed.h
index e94a4a1c7c8a..ffd7d508e726 100644
--- a/include/linux/regulator/fixed.h
+++ b/include/linux/regulator/fixed.h
@@ -25,6 +25,7 @@ struct regulator_init_data;
25 * @microvolts: Output voltage of regulator 25 * @microvolts: Output voltage of regulator
26 * @gpio: GPIO to use for enable control 26 * @gpio: GPIO to use for enable control
27 * set to -EINVAL if not used 27 * set to -EINVAL if not used
28 * @startup_delay: Start-up time in microseconds
28 * @enable_high: Polarity of enable GPIO 29 * @enable_high: Polarity of enable GPIO
29 * 1 = Active high, 0 = Active low 30 * 1 = Active high, 0 = Active low
30 * @enabled_at_boot: Whether regulator has been enabled at 31 * @enabled_at_boot: Whether regulator has been enabled at
@@ -41,6 +42,7 @@ struct fixed_voltage_config {
41 const char *supply_name; 42 const char *supply_name;
42 int microvolts; 43 int microvolts;
43 int gpio; 44 int gpio;
45 unsigned startup_delay;
44 unsigned enable_high:1; 46 unsigned enable_high:1;
45 unsigned enabled_at_boot:1; 47 unsigned enabled_at_boot:1;
46 struct regulator_init_data *init_data; 48 struct regulator_init_data *init_data;
diff --git a/include/linux/regulator/machine.h b/include/linux/regulator/machine.h
index 87f5f176d4ef..234a8476cba8 100644
--- a/include/linux/regulator/machine.h
+++ b/include/linux/regulator/machine.h
@@ -43,16 +43,20 @@ struct regulator;
43/** 43/**
44 * struct regulator_state - regulator state during low power system states 44 * struct regulator_state - regulator state during low power system states
45 * 45 *
46 * This describes a regulators state during a system wide low power state. 46 * This describes a regulators state during a system wide low power
47 * state. One of enabled or disabled must be set for the
48 * configuration to be applied.
47 * 49 *
48 * @uV: Operating voltage during suspend. 50 * @uV: Operating voltage during suspend.
49 * @mode: Operating mode during suspend. 51 * @mode: Operating mode during suspend.
50 * @enabled: Enabled during suspend. 52 * @enabled: Enabled during suspend.
53 * @disabled: Disabled during suspend.
51 */ 54 */
52struct regulator_state { 55struct regulator_state {
53 int uV; /* suspend voltage */ 56 int uV; /* suspend voltage */
54 unsigned int mode; /* suspend regulator operating mode */ 57 unsigned int mode; /* suspend regulator operating mode */
55 int enabled; /* is regulator enabled in this suspend state */ 58 int enabled; /* is regulator enabled in this suspend state */
59 int disabled; /* is the regulator disbled in this suspend state */
56}; 60};
57 61
58/** 62/**
diff --git a/include/linux/regulator/max8649.h b/include/linux/regulator/max8649.h
new file mode 100644
index 000000000000..417d14ecd5cb
--- /dev/null
+++ b/include/linux/regulator/max8649.h
@@ -0,0 +1,44 @@
1/*
2 * Interface of Maxim max8649
3 *
4 * Copyright (C) 2009-2010 Marvell International Ltd.
5 * Haojian Zhuang <haojian.zhuang@marvell.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#ifndef __LINUX_REGULATOR_MAX8649_H
13#define __LINUX_REGULATOR_MAX8649_H
14
15#include <linux/regulator/machine.h>
16
17enum {
18 MAX8649_EXTCLK_26MHZ = 0,
19 MAX8649_EXTCLK_13MHZ,
20 MAX8649_EXTCLK_19MHZ, /* 19.2MHz */
21};
22
23enum {
24 MAX8649_RAMP_32MV = 0,
25 MAX8649_RAMP_16MV,
26 MAX8649_RAMP_8MV,
27 MAX8649_RAMP_4MV,
28 MAX8649_RAMP_2MV,
29 MAX8649_RAMP_1MV,
30 MAX8649_RAMP_0_5MV,
31 MAX8649_RAMP_0_25MV,
32};
33
34struct max8649_platform_data {
35 struct regulator_init_data *regulator;
36
37 unsigned mode:2; /* bit[1:0] = VID1,VID0 */
38 unsigned extclk_freq:2;
39 unsigned extclk:1;
40 unsigned ramp_timing:3;
41 unsigned ramp_down:1;
42};
43
44#endif /* __LINUX_REGULATOR_MAX8649_H */
diff --git a/include/linux/regulator/max8660.h b/include/linux/regulator/max8660.h
new file mode 100644
index 000000000000..9936763621c7
--- /dev/null
+++ b/include/linux/regulator/max8660.h
@@ -0,0 +1,57 @@
1/*
2 * max8660.h -- Voltage regulation for the Maxim 8660/8661
3 *
4 * Copyright (C) 2009 Wolfram Sang, Pengutronix e.K.
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; version 2 of the License.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20#ifndef __LINUX_REGULATOR_MAX8660_H
21#define __LINUX_REGULATOR_MAX8660_H
22
23#include <linux/regulator/machine.h>
24
25enum {
26 MAX8660_V3,
27 MAX8660_V4,
28 MAX8660_V5,
29 MAX8660_V6,
30 MAX8660_V7,
31 MAX8660_V_END,
32};
33
34/**
35 * max8660_subdev_data - regulator subdev data
36 * @id: regulator id
37 * @name: regulator name
38 * @platform_data: regulator init data
39 */
40struct max8660_subdev_data {
41 int id;
42 char *name;
43 struct regulator_init_data *platform_data;
44};
45
46/**
47 * max8660_platform_data - platform data for max8660
48 * @num_subdevs: number of regulators used
49 * @subdevs: pointer to regulators used
50 * @en34_is_high: if EN34 is driven high, regulators cannot be en-/disabled.
51 */
52struct max8660_platform_data {
53 int num_subdevs;
54 struct max8660_subdev_data *subdevs;
55 unsigned en34_is_high:1;
56};
57#endif
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h
index dd31e7bae35c..3b603f474186 100644
--- a/include/linux/reiserfs_fs.h
+++ b/include/linux/reiserfs_fs.h
@@ -52,11 +52,89 @@
52#define REISERFS_IOC32_GETVERSION FS_IOC32_GETVERSION 52#define REISERFS_IOC32_GETVERSION FS_IOC32_GETVERSION
53#define REISERFS_IOC32_SETVERSION FS_IOC32_SETVERSION 53#define REISERFS_IOC32_SETVERSION FS_IOC32_SETVERSION
54 54
55/* Locking primitives */ 55/*
56/* Right now we are still falling back to (un)lock_kernel, but eventually that 56 * Locking primitives. The write lock is a per superblock
57 would evolve into real per-fs locks */ 57 * special mutex that has properties close to the Big Kernel Lock
58#define reiserfs_write_lock( sb ) lock_kernel() 58 * which was used in the previous locking scheme.
59#define reiserfs_write_unlock( sb ) unlock_kernel() 59 */
60void reiserfs_write_lock(struct super_block *s);
61void reiserfs_write_unlock(struct super_block *s);
62int reiserfs_write_lock_once(struct super_block *s);
63void reiserfs_write_unlock_once(struct super_block *s, int lock_depth);
64
65#ifdef CONFIG_REISERFS_CHECK
66void reiserfs_lock_check_recursive(struct super_block *s);
67#else
68static inline void reiserfs_lock_check_recursive(struct super_block *s) { }
69#endif
70
71/*
72 * Several mutexes depend on the write lock.
73 * However sometimes we want to relax the write lock while we hold
74 * these mutexes, according to the release/reacquire on schedule()
75 * properties of the Bkl that were used.
76 * Reiserfs performances and locking were based on this scheme.
77 * Now that the write lock is a mutex and not the bkl anymore, doing so
78 * may result in a deadlock:
79 *
80 * A acquire write_lock
81 * A acquire j_commit_mutex
82 * A release write_lock and wait for something
83 * B acquire write_lock
84 * B can't acquire j_commit_mutex and sleep
85 * A can't acquire write lock anymore
86 * deadlock
87 *
88 * What we do here is avoiding such deadlock by playing the same game
89 * than the Bkl: if we can't acquire a mutex that depends on the write lock,
90 * we release the write lock, wait a bit and then retry.
91 *
92 * The mutexes concerned by this hack are:
93 * - The commit mutex of a journal list
94 * - The flush mutex
95 * - The journal lock
96 * - The inode mutex
97 */
98static inline void reiserfs_mutex_lock_safe(struct mutex *m,
99 struct super_block *s)
100{
101 reiserfs_lock_check_recursive(s);
102 reiserfs_write_unlock(s);
103 mutex_lock(m);
104 reiserfs_write_lock(s);
105}
106
107static inline void
108reiserfs_mutex_lock_nested_safe(struct mutex *m, unsigned int subclass,
109 struct super_block *s)
110{
111 reiserfs_lock_check_recursive(s);
112 reiserfs_write_unlock(s);
113 mutex_lock_nested(m, subclass);
114 reiserfs_write_lock(s);
115}
116
117static inline void
118reiserfs_down_read_safe(struct rw_semaphore *sem, struct super_block *s)
119{
120 reiserfs_lock_check_recursive(s);
121 reiserfs_write_unlock(s);
122 down_read(sem);
123 reiserfs_write_lock(s);
124}
125
126/*
127 * When we schedule, we usually want to also release the write lock,
128 * according to the previous bkl based locking scheme of reiserfs.
129 */
130static inline void reiserfs_cond_resched(struct super_block *s)
131{
132 if (need_resched()) {
133 reiserfs_write_unlock(s);
134 schedule();
135 reiserfs_write_lock(s);
136 }
137}
60 138
61struct fid; 139struct fid;
62 140
@@ -1329,7 +1407,11 @@ static inline loff_t max_reiserfs_offset(struct inode *inode)
1329#define get_generation(s) atomic_read (&fs_generation(s)) 1407#define get_generation(s) atomic_read (&fs_generation(s))
1330#define FILESYSTEM_CHANGED_TB(tb) (get_generation((tb)->tb_sb) != (tb)->fs_gen) 1408#define FILESYSTEM_CHANGED_TB(tb) (get_generation((tb)->tb_sb) != (tb)->fs_gen)
1331#define __fs_changed(gen,s) (gen != get_generation (s)) 1409#define __fs_changed(gen,s) (gen != get_generation (s))
1332#define fs_changed(gen,s) ({cond_resched(); __fs_changed(gen, s);}) 1410#define fs_changed(gen,s) \
1411({ \
1412 reiserfs_cond_resched(s); \
1413 __fs_changed(gen, s); \
1414})
1333 1415
1334/***************************************************************************/ 1416/***************************************************************************/
1335/* FIXATE NODES */ 1417/* FIXATE NODES */
@@ -1952,7 +2034,7 @@ void reiserfs_read_locked_inode(struct inode *inode,
1952int reiserfs_find_actor(struct inode *inode, void *p); 2034int reiserfs_find_actor(struct inode *inode, void *p);
1953int reiserfs_init_locked_inode(struct inode *inode, void *p); 2035int reiserfs_init_locked_inode(struct inode *inode, void *p);
1954void reiserfs_delete_inode(struct inode *inode); 2036void reiserfs_delete_inode(struct inode *inode);
1955int reiserfs_write_inode(struct inode *inode, int); 2037int reiserfs_write_inode(struct inode *inode, struct writeback_control *wbc);
1956int reiserfs_get_block(struct inode *inode, sector_t block, 2038int reiserfs_get_block(struct inode *inode, sector_t block,
1957 struct buffer_head *bh_result, int create); 2039 struct buffer_head *bh_result, int create);
1958struct dentry *reiserfs_fh_to_dentry(struct super_block *sb, struct fid *fid, 2040struct dentry *reiserfs_fh_to_dentry(struct super_block *sb, struct fid *fid,
@@ -1995,25 +2077,12 @@ void set_de_name_and_namelen(struct reiserfs_dir_entry *de);
1995int search_by_entry_key(struct super_block *sb, const struct cpu_key *key, 2077int search_by_entry_key(struct super_block *sb, const struct cpu_key *key,
1996 struct treepath *path, struct reiserfs_dir_entry *de); 2078 struct treepath *path, struct reiserfs_dir_entry *de);
1997struct dentry *reiserfs_get_parent(struct dentry *); 2079struct dentry *reiserfs_get_parent(struct dentry *);
1998/* procfs.c */
1999
2000#if defined( CONFIG_PROC_FS ) && defined( CONFIG_REISERFS_PROC_INFO )
2001#define REISERFS_PROC_INFO
2002#else
2003#undef REISERFS_PROC_INFO
2004#endif
2005 2080
2081#ifdef CONFIG_REISERFS_PROC_INFO
2006int reiserfs_proc_info_init(struct super_block *sb); 2082int reiserfs_proc_info_init(struct super_block *sb);
2007int reiserfs_proc_info_done(struct super_block *sb); 2083int reiserfs_proc_info_done(struct super_block *sb);
2008struct proc_dir_entry *reiserfs_proc_register_global(char *name,
2009 read_proc_t * func);
2010void reiserfs_proc_unregister_global(const char *name);
2011int reiserfs_proc_info_global_init(void); 2084int reiserfs_proc_info_global_init(void);
2012int reiserfs_proc_info_global_done(void); 2085int reiserfs_proc_info_global_done(void);
2013int reiserfs_global_version_in_proc(char *buffer, char **start, off_t offset,
2014 int count, int *eof, void *data);
2015
2016#if defined( REISERFS_PROC_INFO )
2017 2086
2018#define PROC_EXP( e ) e 2087#define PROC_EXP( e ) e
2019 2088
@@ -2028,6 +2097,26 @@ int reiserfs_global_version_in_proc(char *buffer, char **start, off_t offset,
2028 PROC_INFO_ADD( sb, free_at[ ( level ) ], B_FREE_SPACE( bh ) ); \ 2097 PROC_INFO_ADD( sb, free_at[ ( level ) ], B_FREE_SPACE( bh ) ); \
2029 PROC_INFO_ADD( sb, items_at[ ( level ) ], B_NR_ITEMS( bh ) ) 2098 PROC_INFO_ADD( sb, items_at[ ( level ) ], B_NR_ITEMS( bh ) )
2030#else 2099#else
2100static inline int reiserfs_proc_info_init(struct super_block *sb)
2101{
2102 return 0;
2103}
2104
2105static inline int reiserfs_proc_info_done(struct super_block *sb)
2106{
2107 return 0;
2108}
2109
2110static inline int reiserfs_proc_info_global_init(void)
2111{
2112 return 0;
2113}
2114
2115static inline int reiserfs_proc_info_global_done(void)
2116{
2117 return 0;
2118}
2119
2031#define PROC_EXP( e ) 2120#define PROC_EXP( e )
2032#define VOID_V ( ( void ) 0 ) 2121#define VOID_V ( ( void ) 0 )
2033#define PROC_INFO_MAX( sb, field, value ) VOID_V 2122#define PROC_INFO_MAX( sb, field, value ) VOID_V
@@ -2258,8 +2347,7 @@ __u32 r5_hash(const signed char *msg, int len);
2258#define SPARE_SPACE 500 2347#define SPARE_SPACE 500
2259 2348
2260/* prototypes from ioctl.c */ 2349/* prototypes from ioctl.c */
2261int reiserfs_ioctl(struct inode *inode, struct file *filp, 2350long reiserfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
2262 unsigned int cmd, unsigned long arg);
2263long reiserfs_compat_ioctl(struct file *filp, 2351long reiserfs_compat_ioctl(struct file *filp,
2264 unsigned int cmd, unsigned long arg); 2352 unsigned int cmd, unsigned long arg);
2265int reiserfs_unpack(struct inode *inode, struct file *filp); 2353int reiserfs_unpack(struct inode *inode, struct file *filp);
diff --git a/include/linux/reiserfs_fs_sb.h b/include/linux/reiserfs_fs_sb.h
index dab68bbed675..52c83b6a758a 100644
--- a/include/linux/reiserfs_fs_sb.h
+++ b/include/linux/reiserfs_fs_sb.h
@@ -7,6 +7,8 @@
7#ifdef __KERNEL__ 7#ifdef __KERNEL__
8#include <linux/workqueue.h> 8#include <linux/workqueue.h>
9#include <linux/rwsem.h> 9#include <linux/rwsem.h>
10#include <linux/mutex.h>
11#include <linux/sched.h>
10#endif 12#endif
11 13
12typedef enum { 14typedef enum {
@@ -355,6 +357,13 @@ struct reiserfs_sb_info {
355 struct reiserfs_journal *s_journal; /* pointer to journal information */ 357 struct reiserfs_journal *s_journal; /* pointer to journal information */
356 unsigned short s_mount_state; /* reiserfs state (valid, invalid) */ 358 unsigned short s_mount_state; /* reiserfs state (valid, invalid) */
357 359
360 /* Serialize writers access, replace the old bkl */
361 struct mutex lock;
362 /* Owner of the lock (can be recursive) */
363 struct task_struct *lock_owner;
364 /* Depth of the lock, start from -1 like the bkl */
365 int lock_depth;
366
358 /* Comment? -Hans */ 367 /* Comment? -Hans */
359 void (*end_io_handler) (struct buffer_head *, int); 368 void (*end_io_handler) (struct buffer_head *, int);
360 hashf_t s_hash_function; /* pointer to function which is used 369 hashf_t s_hash_function; /* pointer to function which is used
@@ -408,6 +417,17 @@ struct reiserfs_sb_info {
408 char *s_qf_names[MAXQUOTAS]; 417 char *s_qf_names[MAXQUOTAS];
409 int s_jquota_fmt; 418 int s_jquota_fmt;
410#endif 419#endif
420#ifdef CONFIG_REISERFS_CHECK
421
422 struct tree_balance *cur_tb; /*
423 * Detects whether more than one
424 * copy of tb exists per superblock
425 * as a means of checking whether
426 * do_balance is executing concurrently
427 * against another tree reader/writer
428 * on a same mount point.
429 */
430#endif
411}; 431};
412 432
413/* Definitions of reiserfs on-disk properties: */ 433/* Definitions of reiserfs on-disk properties: */
diff --git a/include/linux/reiserfs_xattr.h b/include/linux/reiserfs_xattr.h
index 99928dce37ea..7fa02b4af838 100644
--- a/include/linux/reiserfs_xattr.h
+++ b/include/linux/reiserfs_xattr.h
@@ -70,6 +70,11 @@ int reiserfs_security_write(struct reiserfs_transaction_handle *th,
70void reiserfs_security_free(struct reiserfs_security_handle *sec); 70void reiserfs_security_free(struct reiserfs_security_handle *sec);
71#endif 71#endif
72 72
73static inline int reiserfs_xattrs_initialized(struct super_block *sb)
74{
75 return REISERFS_SB(sb)->priv_root != NULL;
76}
77
73#define xattr_size(size) ((size) + sizeof(struct reiserfs_xattr_header)) 78#define xattr_size(size) ((size) + sizeof(struct reiserfs_xattr_header))
74static inline loff_t reiserfs_xattr_nblocks(struct inode *inode, loff_t size) 79static inline loff_t reiserfs_xattr_nblocks(struct inode *inode, loff_t size)
75{ 80{
diff --git a/include/linux/resource.h b/include/linux/resource.h
index 40fc7e626082..f1e914eefeab 100644
--- a/include/linux/resource.h
+++ b/include/linux/resource.h
@@ -3,8 +3,6 @@
3 3
4#include <linux/time.h> 4#include <linux/time.h>
5 5
6struct task_struct;
7
8/* 6/*
9 * Resource control/accounting header file for linux 7 * Resource control/accounting header file for linux
10 */ 8 */
@@ -70,6 +68,12 @@ struct rlimit {
70 */ 68 */
71#include <asm/resource.h> 69#include <asm/resource.h>
72 70
71#ifdef __KERNEL__
72
73struct task_struct;
74
73int getrusage(struct task_struct *p, int who, struct rusage __user *ru); 75int getrusage(struct task_struct *p, int who, struct rusage __user *ru);
74 76
77#endif /* __KERNEL__ */
78
75#endif 79#endif
diff --git a/include/linux/resume-trace.h b/include/linux/resume-trace.h
index c9ba2fdf807d..bc8c3881c729 100644
--- a/include/linux/resume-trace.h
+++ b/include/linux/resume-trace.h
@@ -6,6 +6,11 @@
6 6
7extern int pm_trace_enabled; 7extern int pm_trace_enabled;
8 8
9static inline int pm_trace_is_enabled(void)
10{
11 return pm_trace_enabled;
12}
13
9struct device; 14struct device;
10extern void set_trace_device(struct device *); 15extern void set_trace_device(struct device *);
11extern void generate_resume_trace(const void *tracedata, unsigned int user); 16extern void generate_resume_trace(const void *tracedata, unsigned int user);
@@ -17,6 +22,8 @@ extern void generate_resume_trace(const void *tracedata, unsigned int user);
17 22
18#else 23#else
19 24
25static inline int pm_trace_is_enabled(void) { return 0; }
26
20#define TRACE_DEVICE(dev) do { } while (0) 27#define TRACE_DEVICE(dev) do { } while (0)
21#define TRACE_RESUME(dev) do { } while (0) 28#define TRACE_RESUME(dev) do { } while (0)
22 29
diff --git a/include/linux/rfkill.h b/include/linux/rfkill.h
index 3392c59d2706..4f82326eb294 100644
--- a/include/linux/rfkill.h
+++ b/include/linux/rfkill.h
@@ -29,12 +29,14 @@
29/** 29/**
30 * enum rfkill_type - type of rfkill switch. 30 * enum rfkill_type - type of rfkill switch.
31 * 31 *
32 * @RFKILL_TYPE_ALL: toggles all switches (userspace only) 32 * @RFKILL_TYPE_ALL: toggles all switches (requests only - not a switch type)
33 * @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device. 33 * @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device.
34 * @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. 34 * @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device.
35 * @RFKILL_TYPE_UWB: switch is on a ultra wideband device. 35 * @RFKILL_TYPE_UWB: switch is on a ultra wideband device.
36 * @RFKILL_TYPE_WIMAX: switch is on a WiMAX device. 36 * @RFKILL_TYPE_WIMAX: switch is on a WiMAX device.
37 * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device. 37 * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device.
38 * @RFKILL_TYPE_GPS: switch is on a GPS device.
39 * @RFKILL_TYPE_FM: switch is on a FM radio device.
38 * @NUM_RFKILL_TYPES: number of defined rfkill types 40 * @NUM_RFKILL_TYPES: number of defined rfkill types
39 */ 41 */
40enum rfkill_type { 42enum rfkill_type {
@@ -45,6 +47,7 @@ enum rfkill_type {
45 RFKILL_TYPE_WIMAX, 47 RFKILL_TYPE_WIMAX,
46 RFKILL_TYPE_WWAN, 48 RFKILL_TYPE_WWAN,
47 RFKILL_TYPE_GPS, 49 RFKILL_TYPE_GPS,
50 RFKILL_TYPE_FM,
48 NUM_RFKILL_TYPES, 51 NUM_RFKILL_TYPES,
49}; 52};
50 53
diff --git a/include/linux/rmap.h b/include/linux/rmap.h
index cb0ba7032609..d25bd224d370 100644
--- a/include/linux/rmap.h
+++ b/include/linux/rmap.h
@@ -26,6 +26,9 @@
26 */ 26 */
27struct anon_vma { 27struct anon_vma {
28 spinlock_t lock; /* Serialize access to vma list */ 28 spinlock_t lock; /* Serialize access to vma list */
29#ifdef CONFIG_KSM
30 atomic_t ksm_refcount;
31#endif
29 /* 32 /*
30 * NOTE: the LSB of the head.next is set by 33 * NOTE: the LSB of the head.next is set by
31 * mm_take_all_locks() _after_ taking the above lock. So the 34 * mm_take_all_locks() _after_ taking the above lock. So the
@@ -34,10 +37,58 @@ struct anon_vma {
34 * is serialized by a system wide lock only visible to 37 * is serialized by a system wide lock only visible to
35 * mm_take_all_locks() (mm_all_locks_mutex). 38 * mm_take_all_locks() (mm_all_locks_mutex).
36 */ 39 */
37 struct list_head head; /* List of private "related" vmas */ 40 struct list_head head; /* Chain of private "related" vmas */
41};
42
43/*
44 * The copy-on-write semantics of fork mean that an anon_vma
45 * can become associated with multiple processes. Furthermore,
46 * each child process will have its own anon_vma, where new
47 * pages for that process are instantiated.
48 *
49 * This structure allows us to find the anon_vmas associated
50 * with a VMA, or the VMAs associated with an anon_vma.
51 * The "same_vma" list contains the anon_vma_chains linking
52 * all the anon_vmas associated with this VMA.
53 * The "same_anon_vma" list contains the anon_vma_chains
54 * which link all the VMAs associated with this anon_vma.
55 */
56struct anon_vma_chain {
57 struct vm_area_struct *vma;
58 struct anon_vma *anon_vma;
59 struct list_head same_vma; /* locked by mmap_sem & page_table_lock */
60 struct list_head same_anon_vma; /* locked by anon_vma->lock */
38}; 61};
39 62
40#ifdef CONFIG_MMU 63#ifdef CONFIG_MMU
64#ifdef CONFIG_KSM
65static inline void ksm_refcount_init(struct anon_vma *anon_vma)
66{
67 atomic_set(&anon_vma->ksm_refcount, 0);
68}
69
70static inline int ksm_refcount(struct anon_vma *anon_vma)
71{
72 return atomic_read(&anon_vma->ksm_refcount);
73}
74#else
75static inline void ksm_refcount_init(struct anon_vma *anon_vma)
76{
77}
78
79static inline int ksm_refcount(struct anon_vma *anon_vma)
80{
81 return 0;
82}
83#endif /* CONFIG_KSM */
84
85static inline struct anon_vma *page_anon_vma(struct page *page)
86{
87 if (((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) !=
88 PAGE_MAPPING_ANON)
89 return NULL;
90 return page_rmapping(page);
91}
41 92
42static inline void anon_vma_lock(struct vm_area_struct *vma) 93static inline void anon_vma_lock(struct vm_area_struct *vma)
43{ 94{
@@ -58,14 +109,23 @@ static inline void anon_vma_unlock(struct vm_area_struct *vma)
58 */ 109 */
59void anon_vma_init(void); /* create anon_vma_cachep */ 110void anon_vma_init(void); /* create anon_vma_cachep */
60int anon_vma_prepare(struct vm_area_struct *); 111int anon_vma_prepare(struct vm_area_struct *);
61void __anon_vma_merge(struct vm_area_struct *, struct vm_area_struct *); 112void unlink_anon_vmas(struct vm_area_struct *);
62void anon_vma_unlink(struct vm_area_struct *); 113int anon_vma_clone(struct vm_area_struct *, struct vm_area_struct *);
63void anon_vma_link(struct vm_area_struct *); 114int anon_vma_fork(struct vm_area_struct *, struct vm_area_struct *);
64void __anon_vma_link(struct vm_area_struct *); 115void __anon_vma_link(struct vm_area_struct *);
116void anon_vma_free(struct anon_vma *);
117
118static inline void anon_vma_merge(struct vm_area_struct *vma,
119 struct vm_area_struct *next)
120{
121 VM_BUG_ON(vma->anon_vma != next->anon_vma);
122 unlink_anon_vmas(next);
123}
65 124
66/* 125/*
67 * rmap interfaces called when adding or removing pte of page 126 * rmap interfaces called when adding or removing pte of page
68 */ 127 */
128void page_move_anon_rmap(struct page *, struct vm_area_struct *, unsigned long);
69void page_add_anon_rmap(struct page *, struct vm_area_struct *, unsigned long); 129void page_add_anon_rmap(struct page *, struct vm_area_struct *, unsigned long);
70void page_add_new_anon_rmap(struct page *, struct vm_area_struct *, unsigned long); 130void page_add_new_anon_rmap(struct page *, struct vm_area_struct *, unsigned long);
71void page_add_file_rmap(struct page *); 131void page_add_file_rmap(struct page *);
@@ -81,6 +141,9 @@ static inline void page_dup_rmap(struct page *page)
81 */ 141 */
82int page_referenced(struct page *, int is_locked, 142int page_referenced(struct page *, int is_locked,
83 struct mem_cgroup *cnt, unsigned long *vm_flags); 143 struct mem_cgroup *cnt, unsigned long *vm_flags);
144int page_referenced_one(struct page *, struct vm_area_struct *,
145 unsigned long address, unsigned int *mapcount, unsigned long *vm_flags);
146
84enum ttu_flags { 147enum ttu_flags {
85 TTU_UNMAP = 0, /* unmap mode */ 148 TTU_UNMAP = 0, /* unmap mode */
86 TTU_MIGRATION = 1, /* migration mode */ 149 TTU_MIGRATION = 1, /* migration mode */
@@ -94,6 +157,8 @@ enum ttu_flags {
94#define TTU_ACTION(x) ((x) & TTU_ACTION_MASK) 157#define TTU_ACTION(x) ((x) & TTU_ACTION_MASK)
95 158
96int try_to_unmap(struct page *, enum ttu_flags flags); 159int try_to_unmap(struct page *, enum ttu_flags flags);
160int try_to_unmap_one(struct page *, struct vm_area_struct *,
161 unsigned long address, enum ttu_flags flags);
97 162
98/* 163/*
99 * Called from mm/filemap_xip.c to unmap empty zero page 164 * Called from mm/filemap_xip.c to unmap empty zero page
@@ -127,6 +192,12 @@ struct anon_vma *page_lock_anon_vma(struct page *page);
127void page_unlock_anon_vma(struct anon_vma *anon_vma); 192void page_unlock_anon_vma(struct anon_vma *anon_vma);
128int page_mapped_in_vma(struct page *page, struct vm_area_struct *vma); 193int page_mapped_in_vma(struct page *page, struct vm_area_struct *vma);
129 194
195/*
196 * Called by migrate.c to remove migration ptes, but might be used more later.
197 */
198int rmap_walk(struct page *page, int (*rmap_one)(struct page *,
199 struct vm_area_struct *, unsigned long, void *), void *arg);
200
130#else /* !CONFIG_MMU */ 201#else /* !CONFIG_MMU */
131 202
132#define anon_vma_init() do {} while (0) 203#define anon_vma_init() do {} while (0)
@@ -138,7 +209,7 @@ static inline int page_referenced(struct page *page, int is_locked,
138 unsigned long *vm_flags) 209 unsigned long *vm_flags)
139{ 210{
140 *vm_flags = 0; 211 *vm_flags = 0;
141 return TestClearPageReferenced(page); 212 return 0;
142} 213}
143 214
144#define try_to_unmap(page, refs) SWAP_FAIL 215#define try_to_unmap(page, refs) SWAP_FAIL
diff --git a/include/linux/route.h b/include/linux/route.h
index f7ed35d5e653..6600708311c8 100644
--- a/include/linux/route.h
+++ b/include/linux/route.h
@@ -27,8 +27,7 @@
27#include <linux/compiler.h> 27#include <linux/compiler.h>
28 28
29/* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */ 29/* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */
30struct rtentry 30struct rtentry {
31{
32 unsigned long rt_pad1; 31 unsigned long rt_pad1;
33 struct sockaddr rt_dst; /* target address */ 32 struct sockaddr rt_dst; /* target address */
34 struct sockaddr rt_gateway; /* gateway addr (RTF_GATEWAY) */ 33 struct sockaddr rt_gateway; /* gateway addr (RTF_GATEWAY) */
diff --git a/include/linux/rtc.h b/include/linux/rtc.h
index 60f88a7fb13d..14dbc83ded20 100644
--- a/include/linux/rtc.h
+++ b/include/linux/rtc.h
@@ -238,6 +238,12 @@ static inline bool is_leap_year(unsigned int year)
238 return (!(year % 4) && (year % 100)) || !(year % 400); 238 return (!(year % 4) && (year % 100)) || !(year % 400);
239} 239}
240 240
241#ifdef CONFIG_RTC_HCTOSYS
242extern int rtc_hctosys_ret;
243#else
244#define rtc_hctosys_ret -ENODEV
245#endif
246
241#endif /* __KERNEL__ */ 247#endif /* __KERNEL__ */
242 248
243#endif /* _LINUX_RTC_H_ */ 249#endif /* _LINUX_RTC_H_ */
diff --git a/include/linux/rtmutex.h b/include/linux/rtmutex.h
index f19b00b7d530..8d522ffeda33 100644
--- a/include/linux/rtmutex.h
+++ b/include/linux/rtmutex.h
@@ -16,6 +16,8 @@
16#include <linux/plist.h> 16#include <linux/plist.h>
17#include <linux/spinlock_types.h> 17#include <linux/spinlock_types.h>
18 18
19extern int max_lock_depth; /* for sysctl */
20
19/** 21/**
20 * The rt_mutex structure 22 * The rt_mutex structure
21 * 23 *
@@ -24,7 +26,7 @@
24 * @owner: the mutex owner 26 * @owner: the mutex owner
25 */ 27 */
26struct rt_mutex { 28struct rt_mutex {
27 spinlock_t wait_lock; 29 raw_spinlock_t wait_lock;
28 struct plist_head wait_list; 30 struct plist_head wait_list;
29 struct task_struct *owner; 31 struct task_struct *owner;
30#ifdef CONFIG_DEBUG_RT_MUTEXES 32#ifdef CONFIG_DEBUG_RT_MUTEXES
@@ -63,8 +65,8 @@ struct hrtimer_sleeper;
63#endif 65#endif
64 66
65#define __RT_MUTEX_INITIALIZER(mutexname) \ 67#define __RT_MUTEX_INITIALIZER(mutexname) \
66 { .wait_lock = __SPIN_LOCK_UNLOCKED(mutexname.wait_lock) \ 68 { .wait_lock = __RAW_SPIN_LOCK_UNLOCKED(mutexname.wait_lock) \
67 , .wait_list = PLIST_HEAD_INIT(mutexname.wait_list, mutexname.wait_lock) \ 69 , .wait_list = PLIST_HEAD_INIT_RAW(mutexname.wait_list, mutexname.wait_lock) \
68 , .owner = NULL \ 70 , .owner = NULL \
69 __DEBUG_RT_MUTEX_INITIALIZER(mutexname)} 71 __DEBUG_RT_MUTEX_INITIALIZER(mutexname)}
70 72
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h
index adf2068d12b5..d1c7c90e9cd4 100644
--- a/include/linux/rtnetlink.h
+++ b/include/linux/rtnetlink.h
@@ -127,8 +127,7 @@ enum {
127 with attribute type. 127 with attribute type.
128 */ 128 */
129 129
130struct rtattr 130struct rtattr {
131{
132 unsigned short rta_len; 131 unsigned short rta_len;
133 unsigned short rta_type; 132 unsigned short rta_type;
134}; 133};
@@ -154,8 +153,7 @@ struct rtattr
154 * Definitions used in routing table administration. 153 * Definitions used in routing table administration.
155 ****/ 154 ****/
156 155
157struct rtmsg 156struct rtmsg {
158{
159 unsigned char rtm_family; 157 unsigned char rtm_family;
160 unsigned char rtm_dst_len; 158 unsigned char rtm_dst_len;
161 unsigned char rtm_src_len; 159 unsigned char rtm_src_len;
@@ -171,8 +169,7 @@ struct rtmsg
171 169
172/* rtm_type */ 170/* rtm_type */
173 171
174enum 172enum {
175{
176 RTN_UNSPEC, 173 RTN_UNSPEC,
177 RTN_UNICAST, /* Gateway or direct route */ 174 RTN_UNICAST, /* Gateway or direct route */
178 RTN_LOCAL, /* Accept locally */ 175 RTN_LOCAL, /* Accept locally */
@@ -230,8 +227,7 @@ enum
230 could be assigned a value between UNIVERSE and LINK. 227 could be assigned a value between UNIVERSE and LINK.
231*/ 228*/
232 229
233enum rt_scope_t 230enum rt_scope_t {
234{
235 RT_SCOPE_UNIVERSE=0, 231 RT_SCOPE_UNIVERSE=0,
236/* User defined values */ 232/* User defined values */
237 RT_SCOPE_SITE=200, 233 RT_SCOPE_SITE=200,
@@ -249,8 +245,7 @@ enum rt_scope_t
249 245
250/* Reserved table identifiers */ 246/* Reserved table identifiers */
251 247
252enum rt_class_t 248enum rt_class_t {
253{
254 RT_TABLE_UNSPEC=0, 249 RT_TABLE_UNSPEC=0,
255/* User defined values */ 250/* User defined values */
256 RT_TABLE_COMPAT=252, 251 RT_TABLE_COMPAT=252,
@@ -263,8 +258,7 @@ enum rt_class_t
263 258
264/* Routing message attributes */ 259/* Routing message attributes */
265 260
266enum rtattr_type_t 261enum rtattr_type_t {
267{
268 RTA_UNSPEC, 262 RTA_UNSPEC,
269 RTA_DST, 263 RTA_DST,
270 RTA_SRC, 264 RTA_SRC,
@@ -298,8 +292,7 @@ enum rtattr_type_t
298 * and rtt for different paths from multipath. 292 * and rtt for different paths from multipath.
299 */ 293 */
300 294
301struct rtnexthop 295struct rtnexthop {
302{
303 unsigned short rtnh_len; 296 unsigned short rtnh_len;
304 unsigned char rtnh_flags; 297 unsigned char rtnh_flags;
305 unsigned char rtnh_hops; 298 unsigned char rtnh_hops;
@@ -325,8 +318,7 @@ struct rtnexthop
325 318
326/* RTM_CACHEINFO */ 319/* RTM_CACHEINFO */
327 320
328struct rta_cacheinfo 321struct rta_cacheinfo {
329{
330 __u32 rta_clntref; 322 __u32 rta_clntref;
331 __u32 rta_lastuse; 323 __u32 rta_lastuse;
332 __s32 rta_expires; 324 __s32 rta_expires;
@@ -341,8 +333,7 @@ struct rta_cacheinfo
341 333
342/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */ 334/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
343 335
344enum 336enum {
345{
346 RTAX_UNSPEC, 337 RTAX_UNSPEC,
347#define RTAX_UNSPEC RTAX_UNSPEC 338#define RTAX_UNSPEC RTAX_UNSPEC
348 RTAX_LOCK, 339 RTAX_LOCK,
@@ -371,6 +362,8 @@ enum
371#define RTAX_FEATURES RTAX_FEATURES 362#define RTAX_FEATURES RTAX_FEATURES
372 RTAX_RTO_MIN, 363 RTAX_RTO_MIN,
373#define RTAX_RTO_MIN RTAX_RTO_MIN 364#define RTAX_RTO_MIN RTAX_RTO_MIN
365 RTAX_INITRWND,
366#define RTAX_INITRWND RTAX_INITRWND
374 __RTAX_MAX 367 __RTAX_MAX
375}; 368};
376 369
@@ -381,8 +374,7 @@ enum
381#define RTAX_FEATURE_TIMESTAMP 0x00000004 374#define RTAX_FEATURE_TIMESTAMP 0x00000004
382#define RTAX_FEATURE_ALLFRAG 0x00000008 375#define RTAX_FEATURE_ALLFRAG 0x00000008
383 376
384struct rta_session 377struct rta_session {
385{
386 __u8 proto; 378 __u8 proto;
387 __u8 pad1; 379 __u8 pad1;
388 __u16 pad2; 380 __u16 pad2;
@@ -407,8 +399,7 @@ struct rta_session
407 * General form of address family dependent message. 399 * General form of address family dependent message.
408 ****/ 400 ****/
409 401
410struct rtgenmsg 402struct rtgenmsg {
411{
412 unsigned char rtgen_family; 403 unsigned char rtgen_family;
413}; 404};
414 405
@@ -421,8 +412,7 @@ struct rtgenmsg
421 * on network protocol. 412 * on network protocol.
422 */ 413 */
423 414
424struct ifinfomsg 415struct ifinfomsg {
425{
426 unsigned char ifi_family; 416 unsigned char ifi_family;
427 unsigned char __ifi_pad; 417 unsigned char __ifi_pad;
428 unsigned short ifi_type; /* ARPHRD_* */ 418 unsigned short ifi_type; /* ARPHRD_* */
@@ -435,8 +425,7 @@ struct ifinfomsg
435 * prefix information 425 * prefix information
436 ****/ 426 ****/
437 427
438struct prefixmsg 428struct prefixmsg {
439{
440 unsigned char prefix_family; 429 unsigned char prefix_family;
441 unsigned char prefix_pad1; 430 unsigned char prefix_pad1;
442 unsigned short prefix_pad2; 431 unsigned short prefix_pad2;
@@ -457,8 +446,7 @@ enum
457 446
458#define PREFIX_MAX (__PREFIX_MAX - 1) 447#define PREFIX_MAX (__PREFIX_MAX - 1)
459 448
460struct prefix_cacheinfo 449struct prefix_cacheinfo {
461{
462 __u32 preferred_time; 450 __u32 preferred_time;
463 __u32 valid_time; 451 __u32 valid_time;
464}; 452};
@@ -468,8 +456,7 @@ struct prefix_cacheinfo
468 * Traffic control messages. 456 * Traffic control messages.
469 ****/ 457 ****/
470 458
471struct tcmsg 459struct tcmsg {
472{
473 unsigned char tcm_family; 460 unsigned char tcm_family;
474 unsigned char tcm__pad1; 461 unsigned char tcm__pad1;
475 unsigned short tcm__pad2; 462 unsigned short tcm__pad2;
@@ -479,8 +466,7 @@ struct tcmsg
479 __u32 tcm_info; 466 __u32 tcm_info;
480}; 467};
481 468
482enum 469enum {
483{
484 TCA_UNSPEC, 470 TCA_UNSPEC,
485 TCA_KIND, 471 TCA_KIND,
486 TCA_OPTIONS, 472 TCA_OPTIONS,
@@ -502,8 +488,7 @@ enum
502 * Neighbor Discovery userland options 488 * Neighbor Discovery userland options
503 ****/ 489 ****/
504 490
505struct nduseroptmsg 491struct nduseroptmsg {
506{
507 unsigned char nduseropt_family; 492 unsigned char nduseropt_family;
508 unsigned char nduseropt_pad1; 493 unsigned char nduseropt_pad1;
509 unsigned short nduseropt_opts_len; /* Total length of options */ 494 unsigned short nduseropt_opts_len; /* Total length of options */
@@ -515,8 +500,7 @@ struct nduseroptmsg
515 /* Followed by one or more ND options */ 500 /* Followed by one or more ND options */
516}; 501};
517 502
518enum 503enum {
519{
520 NDUSEROPT_UNSPEC, 504 NDUSEROPT_UNSPEC,
521 NDUSEROPT_SRCADDR, 505 NDUSEROPT_SRCADDR,
522 __NDUSEROPT_MAX 506 __NDUSEROPT_MAX
@@ -598,8 +582,7 @@ enum rtnetlink_groups {
598#define RTNLGRP_MAX (__RTNLGRP_MAX - 1) 582#define RTNLGRP_MAX (__RTNLGRP_MAX - 1)
599 583
600/* TC action piece */ 584/* TC action piece */
601struct tcamsg 585struct tcamsg {
602{
603 unsigned char tca_family; 586 unsigned char tca_family;
604 unsigned char tca__pad1; 587 unsigned char tca__pad1;
605 unsigned short tca__pad2; 588 unsigned short tca__pad2;
@@ -754,6 +737,9 @@ extern void rtnl_lock(void);
754extern void rtnl_unlock(void); 737extern void rtnl_unlock(void);
755extern int rtnl_trylock(void); 738extern int rtnl_trylock(void);
756extern int rtnl_is_locked(void); 739extern int rtnl_is_locked(void);
740#ifdef CONFIG_PROVE_LOCKING
741extern int lockdep_rtnl_is_held(void);
742#endif /* #ifdef CONFIG_PROVE_LOCKING */
757 743
758extern void rtnetlink_init(void); 744extern void rtnetlink_init(void);
759extern void __rtnl_unlock(void); 745extern void __rtnl_unlock(void);
diff --git a/include/linux/rwlock.h b/include/linux/rwlock.h
new file mode 100644
index 000000000000..bc2994ed66e1
--- /dev/null
+++ b/include/linux/rwlock.h
@@ -0,0 +1,125 @@
1#ifndef __LINUX_RWLOCK_H
2#define __LINUX_RWLOCK_H
3
4#ifndef __LINUX_SPINLOCK_H
5# error "please don't include this file directly"
6#endif
7
8/*
9 * rwlock related methods
10 *
11 * split out from spinlock.h
12 *
13 * portions Copyright 2005, Red Hat, Inc., Ingo Molnar
14 * Released under the General Public License (GPL).
15 */
16
17#ifdef CONFIG_DEBUG_SPINLOCK
18 extern void __rwlock_init(rwlock_t *lock, const char *name,
19 struct lock_class_key *key);
20# define rwlock_init(lock) \
21do { \
22 static struct lock_class_key __key; \
23 \
24 __rwlock_init((lock), #lock, &__key); \
25} while (0)
26#else
27# define rwlock_init(lock) \
28 do { *(lock) = __RW_LOCK_UNLOCKED(lock); } while (0)
29#endif
30
31#ifdef CONFIG_DEBUG_SPINLOCK
32 extern void do_raw_read_lock(rwlock_t *lock) __acquires(lock);
33#define do_raw_read_lock_flags(lock, flags) do_raw_read_lock(lock)
34 extern int do_raw_read_trylock(rwlock_t *lock);
35 extern void do_raw_read_unlock(rwlock_t *lock) __releases(lock);
36 extern void do_raw_write_lock(rwlock_t *lock) __acquires(lock);
37#define do_raw_write_lock_flags(lock, flags) do_raw_write_lock(lock)
38 extern int do_raw_write_trylock(rwlock_t *lock);
39 extern void do_raw_write_unlock(rwlock_t *lock) __releases(lock);
40#else
41# define do_raw_read_lock(rwlock) do {__acquire(lock); arch_read_lock(&(rwlock)->raw_lock); } while (0)
42# define do_raw_read_lock_flags(lock, flags) \
43 do {__acquire(lock); arch_read_lock_flags(&(lock)->raw_lock, *(flags)); } while (0)
44# define do_raw_read_trylock(rwlock) arch_read_trylock(&(rwlock)->raw_lock)
45# define do_raw_read_unlock(rwlock) do {arch_read_unlock(&(rwlock)->raw_lock); __release(lock); } while (0)
46# define do_raw_write_lock(rwlock) do {__acquire(lock); arch_write_lock(&(rwlock)->raw_lock); } while (0)
47# define do_raw_write_lock_flags(lock, flags) \
48 do {__acquire(lock); arch_write_lock_flags(&(lock)->raw_lock, *(flags)); } while (0)
49# define do_raw_write_trylock(rwlock) arch_write_trylock(&(rwlock)->raw_lock)
50# define do_raw_write_unlock(rwlock) do {arch_write_unlock(&(rwlock)->raw_lock); __release(lock); } while (0)
51#endif
52
53#define read_can_lock(rwlock) arch_read_can_lock(&(rwlock)->raw_lock)
54#define write_can_lock(rwlock) arch_write_can_lock(&(rwlock)->raw_lock)
55
56/*
57 * Define the various rw_lock methods. Note we define these
58 * regardless of whether CONFIG_SMP or CONFIG_PREEMPT are set. The various
59 * methods are defined as nops in the case they are not required.
60 */
61#define read_trylock(lock) __cond_lock(lock, _raw_read_trylock(lock))
62#define write_trylock(lock) __cond_lock(lock, _raw_write_trylock(lock))
63
64#define write_lock(lock) _raw_write_lock(lock)
65#define read_lock(lock) _raw_read_lock(lock)
66
67#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
68
69#define read_lock_irqsave(lock, flags) \
70 do { \
71 typecheck(unsigned long, flags); \
72 flags = _raw_read_lock_irqsave(lock); \
73 } while (0)
74#define write_lock_irqsave(lock, flags) \
75 do { \
76 typecheck(unsigned long, flags); \
77 flags = _raw_write_lock_irqsave(lock); \
78 } while (0)
79
80#else
81
82#define read_lock_irqsave(lock, flags) \
83 do { \
84 typecheck(unsigned long, flags); \
85 _raw_read_lock_irqsave(lock, flags); \
86 } while (0)
87#define write_lock_irqsave(lock, flags) \
88 do { \
89 typecheck(unsigned long, flags); \
90 _raw_write_lock_irqsave(lock, flags); \
91 } while (0)
92
93#endif
94
95#define read_lock_irq(lock) _raw_read_lock_irq(lock)
96#define read_lock_bh(lock) _raw_read_lock_bh(lock)
97#define write_lock_irq(lock) _raw_write_lock_irq(lock)
98#define write_lock_bh(lock) _raw_write_lock_bh(lock)
99#define read_unlock(lock) _raw_read_unlock(lock)
100#define write_unlock(lock) _raw_write_unlock(lock)
101#define read_unlock_irq(lock) _raw_read_unlock_irq(lock)
102#define write_unlock_irq(lock) _raw_write_unlock_irq(lock)
103
104#define read_unlock_irqrestore(lock, flags) \
105 do { \
106 typecheck(unsigned long, flags); \
107 _raw_read_unlock_irqrestore(lock, flags); \
108 } while (0)
109#define read_unlock_bh(lock) _raw_read_unlock_bh(lock)
110
111#define write_unlock_irqrestore(lock, flags) \
112 do { \
113 typecheck(unsigned long, flags); \
114 _raw_write_unlock_irqrestore(lock, flags); \
115 } while (0)
116#define write_unlock_bh(lock) _raw_write_unlock_bh(lock)
117
118#define write_trylock_irqsave(lock, flags) \
119({ \
120 local_irq_save(flags); \
121 write_trylock(lock) ? \
122 1 : ({ local_irq_restore(flags); 0; }); \
123})
124
125#endif /* __LINUX_RWLOCK_H */
diff --git a/include/linux/rwlock_api_smp.h b/include/linux/rwlock_api_smp.h
new file mode 100644
index 000000000000..9c9f0495d37c
--- /dev/null
+++ b/include/linux/rwlock_api_smp.h
@@ -0,0 +1,282 @@
1#ifndef __LINUX_RWLOCK_API_SMP_H
2#define __LINUX_RWLOCK_API_SMP_H
3
4#ifndef __LINUX_SPINLOCK_API_SMP_H
5# error "please don't include this file directly"
6#endif
7
8/*
9 * include/linux/rwlock_api_smp.h
10 *
11 * spinlock API declarations on SMP (and debug)
12 * (implemented in kernel/spinlock.c)
13 *
14 * portions Copyright 2005, Red Hat, Inc., Ingo Molnar
15 * Released under the General Public License (GPL).
16 */
17
18void __lockfunc _raw_read_lock(rwlock_t *lock) __acquires(lock);
19void __lockfunc _raw_write_lock(rwlock_t *lock) __acquires(lock);
20void __lockfunc _raw_read_lock_bh(rwlock_t *lock) __acquires(lock);
21void __lockfunc _raw_write_lock_bh(rwlock_t *lock) __acquires(lock);
22void __lockfunc _raw_read_lock_irq(rwlock_t *lock) __acquires(lock);
23void __lockfunc _raw_write_lock_irq(rwlock_t *lock) __acquires(lock);
24unsigned long __lockfunc _raw_read_lock_irqsave(rwlock_t *lock)
25 __acquires(lock);
26unsigned long __lockfunc _raw_write_lock_irqsave(rwlock_t *lock)
27 __acquires(lock);
28int __lockfunc _raw_read_trylock(rwlock_t *lock);
29int __lockfunc _raw_write_trylock(rwlock_t *lock);
30void __lockfunc _raw_read_unlock(rwlock_t *lock) __releases(lock);
31void __lockfunc _raw_write_unlock(rwlock_t *lock) __releases(lock);
32void __lockfunc _raw_read_unlock_bh(rwlock_t *lock) __releases(lock);
33void __lockfunc _raw_write_unlock_bh(rwlock_t *lock) __releases(lock);
34void __lockfunc _raw_read_unlock_irq(rwlock_t *lock) __releases(lock);
35void __lockfunc _raw_write_unlock_irq(rwlock_t *lock) __releases(lock);
36void __lockfunc
37_raw_read_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
38 __releases(lock);
39void __lockfunc
40_raw_write_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
41 __releases(lock);
42
43#ifdef CONFIG_INLINE_READ_LOCK
44#define _raw_read_lock(lock) __raw_read_lock(lock)
45#endif
46
47#ifdef CONFIG_INLINE_WRITE_LOCK
48#define _raw_write_lock(lock) __raw_write_lock(lock)
49#endif
50
51#ifdef CONFIG_INLINE_READ_LOCK_BH
52#define _raw_read_lock_bh(lock) __raw_read_lock_bh(lock)
53#endif
54
55#ifdef CONFIG_INLINE_WRITE_LOCK_BH
56#define _raw_write_lock_bh(lock) __raw_write_lock_bh(lock)
57#endif
58
59#ifdef CONFIG_INLINE_READ_LOCK_IRQ
60#define _raw_read_lock_irq(lock) __raw_read_lock_irq(lock)
61#endif
62
63#ifdef CONFIG_INLINE_WRITE_LOCK_IRQ
64#define _raw_write_lock_irq(lock) __raw_write_lock_irq(lock)
65#endif
66
67#ifdef CONFIG_INLINE_READ_LOCK_IRQSAVE
68#define _raw_read_lock_irqsave(lock) __raw_read_lock_irqsave(lock)
69#endif
70
71#ifdef CONFIG_INLINE_WRITE_LOCK_IRQSAVE
72#define _raw_write_lock_irqsave(lock) __raw_write_lock_irqsave(lock)
73#endif
74
75#ifdef CONFIG_INLINE_READ_TRYLOCK
76#define _raw_read_trylock(lock) __raw_read_trylock(lock)
77#endif
78
79#ifdef CONFIG_INLINE_WRITE_TRYLOCK
80#define _raw_write_trylock(lock) __raw_write_trylock(lock)
81#endif
82
83#ifdef CONFIG_INLINE_READ_UNLOCK
84#define _raw_read_unlock(lock) __raw_read_unlock(lock)
85#endif
86
87#ifdef CONFIG_INLINE_WRITE_UNLOCK
88#define _raw_write_unlock(lock) __raw_write_unlock(lock)
89#endif
90
91#ifdef CONFIG_INLINE_READ_UNLOCK_BH
92#define _raw_read_unlock_bh(lock) __raw_read_unlock_bh(lock)
93#endif
94
95#ifdef CONFIG_INLINE_WRITE_UNLOCK_BH
96#define _raw_write_unlock_bh(lock) __raw_write_unlock_bh(lock)
97#endif
98
99#ifdef CONFIG_INLINE_READ_UNLOCK_IRQ
100#define _raw_read_unlock_irq(lock) __raw_read_unlock_irq(lock)
101#endif
102
103#ifdef CONFIG_INLINE_WRITE_UNLOCK_IRQ
104#define _raw_write_unlock_irq(lock) __raw_write_unlock_irq(lock)
105#endif
106
107#ifdef CONFIG_INLINE_READ_UNLOCK_IRQRESTORE
108#define _raw_read_unlock_irqrestore(lock, flags) \
109 __raw_read_unlock_irqrestore(lock, flags)
110#endif
111
112#ifdef CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE
113#define _raw_write_unlock_irqrestore(lock, flags) \
114 __raw_write_unlock_irqrestore(lock, flags)
115#endif
116
117static inline int __raw_read_trylock(rwlock_t *lock)
118{
119 preempt_disable();
120 if (do_raw_read_trylock(lock)) {
121 rwlock_acquire_read(&lock->dep_map, 0, 1, _RET_IP_);
122 return 1;
123 }
124 preempt_enable();
125 return 0;
126}
127
128static inline int __raw_write_trylock(rwlock_t *lock)
129{
130 preempt_disable();
131 if (do_raw_write_trylock(lock)) {
132 rwlock_acquire(&lock->dep_map, 0, 1, _RET_IP_);
133 return 1;
134 }
135 preempt_enable();
136 return 0;
137}
138
139/*
140 * If lockdep is enabled then we use the non-preemption spin-ops
141 * even on CONFIG_PREEMPT, because lockdep assumes that interrupts are
142 * not re-enabled during lock-acquire (which the preempt-spin-ops do):
143 */
144#if !defined(CONFIG_GENERIC_LOCKBREAK) || defined(CONFIG_DEBUG_LOCK_ALLOC)
145
146static inline void __raw_read_lock(rwlock_t *lock)
147{
148 preempt_disable();
149 rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_);
150 LOCK_CONTENDED(lock, do_raw_read_trylock, do_raw_read_lock);
151}
152
153static inline unsigned long __raw_read_lock_irqsave(rwlock_t *lock)
154{
155 unsigned long flags;
156
157 local_irq_save(flags);
158 preempt_disable();
159 rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_);
160 LOCK_CONTENDED_FLAGS(lock, do_raw_read_trylock, do_raw_read_lock,
161 do_raw_read_lock_flags, &flags);
162 return flags;
163}
164
165static inline void __raw_read_lock_irq(rwlock_t *lock)
166{
167 local_irq_disable();
168 preempt_disable();
169 rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_);
170 LOCK_CONTENDED(lock, do_raw_read_trylock, do_raw_read_lock);
171}
172
173static inline void __raw_read_lock_bh(rwlock_t *lock)
174{
175 local_bh_disable();
176 preempt_disable();
177 rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_);
178 LOCK_CONTENDED(lock, do_raw_read_trylock, do_raw_read_lock);
179}
180
181static inline unsigned long __raw_write_lock_irqsave(rwlock_t *lock)
182{
183 unsigned long flags;
184
185 local_irq_save(flags);
186 preempt_disable();
187 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
188 LOCK_CONTENDED_FLAGS(lock, do_raw_write_trylock, do_raw_write_lock,
189 do_raw_write_lock_flags, &flags);
190 return flags;
191}
192
193static inline void __raw_write_lock_irq(rwlock_t *lock)
194{
195 local_irq_disable();
196 preempt_disable();
197 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
198 LOCK_CONTENDED(lock, do_raw_write_trylock, do_raw_write_lock);
199}
200
201static inline void __raw_write_lock_bh(rwlock_t *lock)
202{
203 local_bh_disable();
204 preempt_disable();
205 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
206 LOCK_CONTENDED(lock, do_raw_write_trylock, do_raw_write_lock);
207}
208
209static inline void __raw_write_lock(rwlock_t *lock)
210{
211 preempt_disable();
212 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
213 LOCK_CONTENDED(lock, do_raw_write_trylock, do_raw_write_lock);
214}
215
216#endif /* CONFIG_PREEMPT */
217
218static inline void __raw_write_unlock(rwlock_t *lock)
219{
220 rwlock_release(&lock->dep_map, 1, _RET_IP_);
221 do_raw_write_unlock(lock);
222 preempt_enable();
223}
224
225static inline void __raw_read_unlock(rwlock_t *lock)
226{
227 rwlock_release(&lock->dep_map, 1, _RET_IP_);
228 do_raw_read_unlock(lock);
229 preempt_enable();
230}
231
232static inline void
233__raw_read_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
234{
235 rwlock_release(&lock->dep_map, 1, _RET_IP_);
236 do_raw_read_unlock(lock);
237 local_irq_restore(flags);
238 preempt_enable();
239}
240
241static inline void __raw_read_unlock_irq(rwlock_t *lock)
242{
243 rwlock_release(&lock->dep_map, 1, _RET_IP_);
244 do_raw_read_unlock(lock);
245 local_irq_enable();
246 preempt_enable();
247}
248
249static inline void __raw_read_unlock_bh(rwlock_t *lock)
250{
251 rwlock_release(&lock->dep_map, 1, _RET_IP_);
252 do_raw_read_unlock(lock);
253 preempt_enable_no_resched();
254 local_bh_enable_ip((unsigned long)__builtin_return_address(0));
255}
256
257static inline void __raw_write_unlock_irqrestore(rwlock_t *lock,
258 unsigned long flags)
259{
260 rwlock_release(&lock->dep_map, 1, _RET_IP_);
261 do_raw_write_unlock(lock);
262 local_irq_restore(flags);
263 preempt_enable();
264}
265
266static inline void __raw_write_unlock_irq(rwlock_t *lock)
267{
268 rwlock_release(&lock->dep_map, 1, _RET_IP_);
269 do_raw_write_unlock(lock);
270 local_irq_enable();
271 preempt_enable();
272}
273
274static inline void __raw_write_unlock_bh(rwlock_t *lock)
275{
276 rwlock_release(&lock->dep_map, 1, _RET_IP_);
277 do_raw_write_unlock(lock);
278 preempt_enable_no_resched();
279 local_bh_enable_ip((unsigned long)__builtin_return_address(0));
280}
281
282#endif /* __LINUX_RWLOCK_API_SMP_H */
diff --git a/include/linux/rwlock_types.h b/include/linux/rwlock_types.h
new file mode 100644
index 000000000000..bd31808c7d8e
--- /dev/null
+++ b/include/linux/rwlock_types.h
@@ -0,0 +1,56 @@
1#ifndef __LINUX_RWLOCK_TYPES_H
2#define __LINUX_RWLOCK_TYPES_H
3
4/*
5 * include/linux/rwlock_types.h - generic rwlock type definitions
6 * and initializers
7 *
8 * portions Copyright 2005, Red Hat, Inc., Ingo Molnar
9 * Released under the General Public License (GPL).
10 */
11typedef struct {
12 arch_rwlock_t raw_lock;
13#ifdef CONFIG_GENERIC_LOCKBREAK
14 unsigned int break_lock;
15#endif
16#ifdef CONFIG_DEBUG_SPINLOCK
17 unsigned int magic, owner_cpu;
18 void *owner;
19#endif
20#ifdef CONFIG_DEBUG_LOCK_ALLOC
21 struct lockdep_map dep_map;
22#endif
23} rwlock_t;
24
25#define RWLOCK_MAGIC 0xdeaf1eed
26
27#ifdef CONFIG_DEBUG_LOCK_ALLOC
28# define RW_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname }
29#else
30# define RW_DEP_MAP_INIT(lockname)
31#endif
32
33#ifdef CONFIG_DEBUG_SPINLOCK
34#define __RW_LOCK_UNLOCKED(lockname) \
35 (rwlock_t) { .raw_lock = __ARCH_RW_LOCK_UNLOCKED, \
36 .magic = RWLOCK_MAGIC, \
37 .owner = SPINLOCK_OWNER_INIT, \
38 .owner_cpu = -1, \
39 RW_DEP_MAP_INIT(lockname) }
40#else
41#define __RW_LOCK_UNLOCKED(lockname) \
42 (rwlock_t) { .raw_lock = __ARCH_RW_LOCK_UNLOCKED, \
43 RW_DEP_MAP_INIT(lockname) }
44#endif
45
46/*
47 * RW_LOCK_UNLOCKED defeat lockdep state tracking and is hence
48 * deprecated.
49 *
50 * Please use DEFINE_RWLOCK() or __RW_LOCK_UNLOCKED() as appropriate.
51 */
52#define RW_LOCK_UNLOCKED __RW_LOCK_UNLOCKED(old_style_rw_init)
53
54#define DEFINE_RWLOCK(x) rwlock_t x = __RW_LOCK_UNLOCKED(x)
55
56#endif /* __LINUX_RWLOCK_TYPES_H */
diff --git a/include/linux/rwsem-spinlock.h b/include/linux/rwsem-spinlock.h
index 6c3c0f6c261f..bdfcc2527970 100644
--- a/include/linux/rwsem-spinlock.h
+++ b/include/linux/rwsem-spinlock.h
@@ -68,11 +68,7 @@ extern int __down_write_trylock(struct rw_semaphore *sem);
68extern void __up_read(struct rw_semaphore *sem); 68extern void __up_read(struct rw_semaphore *sem);
69extern void __up_write(struct rw_semaphore *sem); 69extern void __up_write(struct rw_semaphore *sem);
70extern void __downgrade_write(struct rw_semaphore *sem); 70extern void __downgrade_write(struct rw_semaphore *sem);
71 71extern int rwsem_is_locked(struct rw_semaphore *sem);
72static inline int rwsem_is_locked(struct rw_semaphore *sem)
73{
74 return (sem->activity != 0);
75}
76 72
77#endif /* __KERNEL__ */ 73#endif /* __KERNEL__ */
78#endif /* _LINUX_RWSEM_SPINLOCK_H */ 74#endif /* _LINUX_RWSEM_SPINLOCK_H */
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 724814191fe9..225347d97d47 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -100,7 +100,7 @@ struct sched_param {
100struct exec_domain; 100struct exec_domain;
101struct futex_pi_state; 101struct futex_pi_state;
102struct robust_list_head; 102struct robust_list_head;
103struct bio; 103struct bio_list;
104struct fs_struct; 104struct fs_struct;
105struct bts_context; 105struct bts_context;
106struct perf_event_context; 106struct perf_event_context;
@@ -148,7 +148,6 @@ extern unsigned long this_cpu_load(void);
148 148
149 149
150extern void calc_global_load(void); 150extern void calc_global_load(void);
151extern u64 cpu_nr_migrations(int cpu);
152 151
153extern unsigned long get_parent_ip(unsigned long addr); 152extern unsigned long get_parent_ip(unsigned long addr);
154 153
@@ -174,8 +173,6 @@ print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
174} 173}
175#endif 174#endif
176 175
177extern unsigned long long time_sync_thresh;
178
179/* 176/*
180 * Task state bitmask. NOTE! These bits are also 177 * Task state bitmask. NOTE! These bits are also
181 * encoded in fs/proc/array.c: get_task_state(). 178 * encoded in fs/proc/array.c: get_task_state().
@@ -198,6 +195,12 @@ extern unsigned long long time_sync_thresh;
198#define TASK_DEAD 64 195#define TASK_DEAD 64
199#define TASK_WAKEKILL 128 196#define TASK_WAKEKILL 128
200#define TASK_WAKING 256 197#define TASK_WAKING 256
198#define TASK_STATE_MAX 512
199
200#define TASK_STATE_TO_CHAR_STR "RSDTtZXxKW"
201
202extern char ___assert_task_state[1 - 2*!!(
203 sizeof(TASK_STATE_TO_CHAR_STR)-1 != ilog2(TASK_STATE_MAX)+1)];
201 204
202/* Convenience macros for the sake of set_task_state */ 205/* Convenience macros for the sake of set_task_state */
203#define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE) 206#define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)
@@ -258,6 +261,10 @@ extern spinlock_t mmlist_lock;
258 261
259struct task_struct; 262struct task_struct;
260 263
264#ifdef CONFIG_PROVE_RCU
265extern int lockdep_tasklist_lock_is_held(void);
266#endif /* #ifdef CONFIG_PROVE_RCU */
267
261extern void sched_init(void); 268extern void sched_init(void);
262extern void sched_init_smp(void); 269extern void sched_init_smp(void);
263extern asmlinkage void schedule_tail(struct task_struct *prev); 270extern asmlinkage void schedule_tail(struct task_struct *prev);
@@ -310,6 +317,7 @@ extern void sched_show_task(struct task_struct *p);
310#ifdef CONFIG_DETECT_SOFTLOCKUP 317#ifdef CONFIG_DETECT_SOFTLOCKUP
311extern void softlockup_tick(void); 318extern void softlockup_tick(void);
312extern void touch_softlockup_watchdog(void); 319extern void touch_softlockup_watchdog(void);
320extern void touch_softlockup_watchdog_sync(void);
313extern void touch_all_softlockup_watchdogs(void); 321extern void touch_all_softlockup_watchdogs(void);
314extern int proc_dosoftlockup_thresh(struct ctl_table *table, int write, 322extern int proc_dosoftlockup_thresh(struct ctl_table *table, int write,
315 void __user *buffer, 323 void __user *buffer,
@@ -323,6 +331,9 @@ static inline void softlockup_tick(void)
323static inline void touch_softlockup_watchdog(void) 331static inline void touch_softlockup_watchdog(void)
324{ 332{
325} 333}
334static inline void touch_softlockup_watchdog_sync(void)
335{
336}
326static inline void touch_all_softlockup_watchdogs(void) 337static inline void touch_all_softlockup_watchdogs(void)
327{ 338{
328} 339}
@@ -352,7 +363,6 @@ extern signed long schedule_timeout(signed long timeout);
352extern signed long schedule_timeout_interruptible(signed long timeout); 363extern signed long schedule_timeout_interruptible(signed long timeout);
353extern signed long schedule_timeout_killable(signed long timeout); 364extern signed long schedule_timeout_killable(signed long timeout);
354extern signed long schedule_timeout_uninterruptible(signed long timeout); 365extern signed long schedule_timeout_uninterruptible(signed long timeout);
355asmlinkage void __schedule(void);
356asmlinkage void schedule(void); 366asmlinkage void schedule(void);
357extern int mutex_spin_on_owner(struct mutex *lock, struct thread_info *owner); 367extern int mutex_spin_on_owner(struct mutex *lock, struct thread_info *owner);
358 368
@@ -378,6 +388,8 @@ extern int sysctl_max_map_count;
378 388
379#include <linux/aio.h> 389#include <linux/aio.h>
380 390
391#ifdef CONFIG_MMU
392extern void arch_pick_mmap_layout(struct mm_struct *mm);
381extern unsigned long 393extern unsigned long
382arch_get_unmapped_area(struct file *, unsigned long, unsigned long, 394arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
383 unsigned long, unsigned long); 395 unsigned long, unsigned long);
@@ -387,61 +399,10 @@ arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
387 unsigned long flags); 399 unsigned long flags);
388extern void arch_unmap_area(struct mm_struct *, unsigned long); 400extern void arch_unmap_area(struct mm_struct *, unsigned long);
389extern void arch_unmap_area_topdown(struct mm_struct *, unsigned long); 401extern void arch_unmap_area_topdown(struct mm_struct *, unsigned long);
402#else
403static inline void arch_pick_mmap_layout(struct mm_struct *mm) {}
404#endif
390 405
391#if USE_SPLIT_PTLOCKS
392/*
393 * The mm counters are not protected by its page_table_lock,
394 * so must be incremented atomically.
395 */
396#define set_mm_counter(mm, member, value) atomic_long_set(&(mm)->_##member, value)
397#define get_mm_counter(mm, member) ((unsigned long)atomic_long_read(&(mm)->_##member))
398#define add_mm_counter(mm, member, value) atomic_long_add(value, &(mm)->_##member)
399#define inc_mm_counter(mm, member) atomic_long_inc(&(mm)->_##member)
400#define dec_mm_counter(mm, member) atomic_long_dec(&(mm)->_##member)
401
402#else /* !USE_SPLIT_PTLOCKS */
403/*
404 * The mm counters are protected by its page_table_lock,
405 * so can be incremented directly.
406 */
407#define set_mm_counter(mm, member, value) (mm)->_##member = (value)
408#define get_mm_counter(mm, member) ((mm)->_##member)
409#define add_mm_counter(mm, member, value) (mm)->_##member += (value)
410#define inc_mm_counter(mm, member) (mm)->_##member++
411#define dec_mm_counter(mm, member) (mm)->_##member--
412
413#endif /* !USE_SPLIT_PTLOCKS */
414
415#define get_mm_rss(mm) \
416 (get_mm_counter(mm, file_rss) + get_mm_counter(mm, anon_rss))
417#define update_hiwater_rss(mm) do { \
418 unsigned long _rss = get_mm_rss(mm); \
419 if ((mm)->hiwater_rss < _rss) \
420 (mm)->hiwater_rss = _rss; \
421} while (0)
422#define update_hiwater_vm(mm) do { \
423 if ((mm)->hiwater_vm < (mm)->total_vm) \
424 (mm)->hiwater_vm = (mm)->total_vm; \
425} while (0)
426
427static inline unsigned long get_mm_hiwater_rss(struct mm_struct *mm)
428{
429 return max(mm->hiwater_rss, get_mm_rss(mm));
430}
431
432static inline void setmax_mm_hiwater_rss(unsigned long *maxrss,
433 struct mm_struct *mm)
434{
435 unsigned long hiwater_rss = get_mm_hiwater_rss(mm);
436
437 if (*maxrss < hiwater_rss)
438 *maxrss = hiwater_rss;
439}
440
441static inline unsigned long get_mm_hiwater_vm(struct mm_struct *mm)
442{
443 return max(mm->hiwater_vm, mm->total_vm);
444}
445 406
446extern void set_dumpable(struct mm_struct *mm, int value); 407extern void set_dumpable(struct mm_struct *mm, int value);
447extern int get_dumpable(struct mm_struct *mm); 408extern int get_dumpable(struct mm_struct *mm);
@@ -631,6 +592,9 @@ struct signal_struct {
631 cputime_t utime, stime, cutime, cstime; 592 cputime_t utime, stime, cutime, cstime;
632 cputime_t gtime; 593 cputime_t gtime;
633 cputime_t cgtime; 594 cputime_t cgtime;
595#ifndef CONFIG_VIRT_CPU_ACCOUNTING
596 cputime_t prev_utime, prev_stime;
597#endif
634 unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw; 598 unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw;
635 unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt; 599 unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
636 unsigned long inblock, oublock, cinblock, coublock; 600 unsigned long inblock, oublock, cinblock, coublock;
@@ -729,14 +693,6 @@ struct user_struct {
729 uid_t uid; 693 uid_t uid;
730 struct user_namespace *user_ns; 694 struct user_namespace *user_ns;
731 695
732#ifdef CONFIG_USER_SCHED
733 struct task_group *tg;
734#ifdef CONFIG_SYSFS
735 struct kobject kobj;
736 struct delayed_work work;
737#endif
738#endif
739
740#ifdef CONFIG_PERF_EVENTS 696#ifdef CONFIG_PERF_EVENTS
741 atomic_long_t locked_vm; 697 atomic_long_t locked_vm;
742#endif 698#endif
@@ -867,7 +823,10 @@ static inline int sd_balance_for_mc_power(void)
867 if (sched_smt_power_savings) 823 if (sched_smt_power_savings)
868 return SD_POWERSAVINGS_BALANCE; 824 return SD_POWERSAVINGS_BALANCE;
869 825
870 return SD_PREFER_SIBLING; 826 if (!sched_mc_power_savings)
827 return SD_PREFER_SIBLING;
828
829 return 0;
871} 830}
872 831
873static inline int sd_balance_for_package_power(void) 832static inline int sd_balance_for_package_power(void)
@@ -1016,9 +975,13 @@ static inline struct cpumask *sched_domain_span(struct sched_domain *sd)
1016 return to_cpumask(sd->span); 975 return to_cpumask(sd->span);
1017} 976}
1018 977
1019extern void partition_sched_domains(int ndoms_new, struct cpumask *doms_new, 978extern void partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[],
1020 struct sched_domain_attr *dattr_new); 979 struct sched_domain_attr *dattr_new);
1021 980
981/* Allocate an array of sched domains, for partition_sched_domains(). */
982cpumask_var_t *alloc_sched_domains(unsigned int ndoms);
983void free_sched_domains(cpumask_var_t doms[], unsigned int ndoms);
984
1022/* Test a flag in parent sched domain */ 985/* Test a flag in parent sched domain */
1023static inline int test_sd_parent(struct sched_domain *sd, int flag) 986static inline int test_sd_parent(struct sched_domain *sd, int flag)
1024{ 987{
@@ -1036,7 +999,7 @@ unsigned long default_scale_smt_power(struct sched_domain *sd, int cpu);
1036struct sched_domain_attr; 999struct sched_domain_attr;
1037 1000
1038static inline void 1001static inline void
1039partition_sched_domains(int ndoms_new, struct cpumask *doms_new, 1002partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[],
1040 struct sched_domain_attr *dattr_new) 1003 struct sched_domain_attr *dattr_new)
1041{ 1004{
1042} 1005}
@@ -1069,7 +1032,8 @@ struct sched_domain;
1069struct sched_class { 1032struct sched_class {
1070 const struct sched_class *next; 1033 const struct sched_class *next;
1071 1034
1072 void (*enqueue_task) (struct rq *rq, struct task_struct *p, int wakeup); 1035 void (*enqueue_task) (struct rq *rq, struct task_struct *p, int wakeup,
1036 bool head);
1073 void (*dequeue_task) (struct rq *rq, struct task_struct *p, int sleep); 1037 void (*dequeue_task) (struct rq *rq, struct task_struct *p, int sleep);
1074 void (*yield_task) (struct rq *rq); 1038 void (*yield_task) (struct rq *rq);
1075 1039
@@ -1081,17 +1045,10 @@ struct sched_class {
1081#ifdef CONFIG_SMP 1045#ifdef CONFIG_SMP
1082 int (*select_task_rq)(struct task_struct *p, int sd_flag, int flags); 1046 int (*select_task_rq)(struct task_struct *p, int sd_flag, int flags);
1083 1047
1084 unsigned long (*load_balance) (struct rq *this_rq, int this_cpu,
1085 struct rq *busiest, unsigned long max_load_move,
1086 struct sched_domain *sd, enum cpu_idle_type idle,
1087 int *all_pinned, int *this_best_prio);
1088
1089 int (*move_one_task) (struct rq *this_rq, int this_cpu,
1090 struct rq *busiest, struct sched_domain *sd,
1091 enum cpu_idle_type idle);
1092 void (*pre_schedule) (struct rq *this_rq, struct task_struct *task); 1048 void (*pre_schedule) (struct rq *this_rq, struct task_struct *task);
1093 void (*post_schedule) (struct rq *this_rq); 1049 void (*post_schedule) (struct rq *this_rq);
1094 void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); 1050 void (*task_waking) (struct rq *this_rq, struct task_struct *task);
1051 void (*task_woken) (struct rq *this_rq, struct task_struct *task);
1095 1052
1096 void (*set_cpus_allowed)(struct task_struct *p, 1053 void (*set_cpus_allowed)(struct task_struct *p,
1097 const struct cpumask *newmask); 1054 const struct cpumask *newmask);
@@ -1102,7 +1059,7 @@ struct sched_class {
1102 1059
1103 void (*set_curr_task) (struct rq *rq); 1060 void (*set_curr_task) (struct rq *rq);
1104 void (*task_tick) (struct rq *rq, struct task_struct *p, int queued); 1061 void (*task_tick) (struct rq *rq, struct task_struct *p, int queued);
1105 void (*task_new) (struct rq *rq, struct task_struct *p); 1062 void (*task_fork) (struct task_struct *p);
1106 1063
1107 void (*switched_from) (struct rq *this_rq, struct task_struct *task, 1064 void (*switched_from) (struct rq *this_rq, struct task_struct *task,
1108 int running); 1065 int running);
@@ -1111,10 +1068,11 @@ struct sched_class {
1111 void (*prio_changed) (struct rq *this_rq, struct task_struct *task, 1068 void (*prio_changed) (struct rq *this_rq, struct task_struct *task,
1112 int oldprio, int running); 1069 int oldprio, int running);
1113 1070
1114 unsigned int (*get_rr_interval) (struct task_struct *task); 1071 unsigned int (*get_rr_interval) (struct rq *rq,
1072 struct task_struct *task);
1115 1073
1116#ifdef CONFIG_FAIR_GROUP_SCHED 1074#ifdef CONFIG_FAIR_GROUP_SCHED
1117 void (*moved_group) (struct task_struct *p); 1075 void (*moved_group) (struct task_struct *p, int on_rq);
1118#endif 1076#endif
1119}; 1077};
1120 1078
@@ -1151,8 +1109,6 @@ struct sched_entity {
1151 u64 start_runtime; 1109 u64 start_runtime;
1152 u64 avg_wakeup; 1110 u64 avg_wakeup;
1153 1111
1154 u64 avg_running;
1155
1156#ifdef CONFIG_SCHEDSTATS 1112#ifdef CONFIG_SCHEDSTATS
1157 u64 wait_start; 1113 u64 wait_start;
1158 u64 wait_max; 1114 u64 wait_max;
@@ -1175,7 +1131,6 @@ struct sched_entity {
1175 u64 nr_failed_migrations_running; 1131 u64 nr_failed_migrations_running;
1176 u64 nr_failed_migrations_hot; 1132 u64 nr_failed_migrations_hot;
1177 u64 nr_forced_migrations; 1133 u64 nr_forced_migrations;
1178 u64 nr_forced2_migrations;
1179 1134
1180 u64 nr_wakeups; 1135 u64 nr_wakeups;
1181 u64 nr_wakeups_sync; 1136 u64 nr_wakeups_sync;
@@ -1273,7 +1228,9 @@ struct task_struct {
1273 struct plist_node pushable_tasks; 1228 struct plist_node pushable_tasks;
1274 1229
1275 struct mm_struct *mm, *active_mm; 1230 struct mm_struct *mm, *active_mm;
1276 1231#if defined(SPLIT_RSS_COUNTING)
1232 struct task_rss_stat rss_stat;
1233#endif
1277/* task state */ 1234/* task state */
1278 int exit_state; 1235 int exit_state;
1279 int exit_code, exit_signal; 1236 int exit_code, exit_signal;
@@ -1335,7 +1292,9 @@ struct task_struct {
1335 1292
1336 cputime_t utime, stime, utimescaled, stimescaled; 1293 cputime_t utime, stime, utimescaled, stimescaled;
1337 cputime_t gtime; 1294 cputime_t gtime;
1295#ifndef CONFIG_VIRT_CPU_ACCOUNTING
1338 cputime_t prev_utime, prev_stime; 1296 cputime_t prev_utime, prev_stime;
1297#endif
1339 unsigned long nvcsw, nivcsw; /* context switch counts */ 1298 unsigned long nvcsw, nivcsw; /* context switch counts */
1340 struct timespec start_time; /* monotonic time */ 1299 struct timespec start_time; /* monotonic time */
1341 struct timespec real_start_time; /* boot based time */ 1300 struct timespec real_start_time; /* boot based time */
@@ -1358,7 +1317,7 @@ struct task_struct {
1358 char comm[TASK_COMM_LEN]; /* executable name excluding path 1317 char comm[TASK_COMM_LEN]; /* executable name excluding path
1359 - access with [gs]et_task_comm (which lock 1318 - access with [gs]et_task_comm (which lock
1360 it with task_lock()) 1319 it with task_lock())
1361 - initialized normally by flush_old_exec */ 1320 - initialized normally by setup_new_exec */
1362/* file system info */ 1321/* file system info */
1363 int link_count, total_link_count; 1322 int link_count, total_link_count;
1364#ifdef CONFIG_SYSVIPC 1323#ifdef CONFIG_SYSVIPC
@@ -1410,7 +1369,7 @@ struct task_struct {
1410#endif 1369#endif
1411 1370
1412 /* Protection of the PI data structures: */ 1371 /* Protection of the PI data structures: */
1413 spinlock_t pi_lock; 1372 raw_spinlock_t pi_lock;
1414 1373
1415#ifdef CONFIG_RT_MUTEXES 1374#ifdef CONFIG_RT_MUTEXES
1416 /* PI waiters blocked on a rt_mutex held by this task */ 1375 /* PI waiters blocked on a rt_mutex held by this task */
@@ -1425,17 +1384,17 @@ struct task_struct {
1425#endif 1384#endif
1426#ifdef CONFIG_TRACE_IRQFLAGS 1385#ifdef CONFIG_TRACE_IRQFLAGS
1427 unsigned int irq_events; 1386 unsigned int irq_events;
1428 int hardirqs_enabled;
1429 unsigned long hardirq_enable_ip; 1387 unsigned long hardirq_enable_ip;
1430 unsigned int hardirq_enable_event;
1431 unsigned long hardirq_disable_ip; 1388 unsigned long hardirq_disable_ip;
1389 unsigned int hardirq_enable_event;
1432 unsigned int hardirq_disable_event; 1390 unsigned int hardirq_disable_event;
1433 int softirqs_enabled; 1391 int hardirqs_enabled;
1392 int hardirq_context;
1434 unsigned long softirq_disable_ip; 1393 unsigned long softirq_disable_ip;
1435 unsigned int softirq_disable_event;
1436 unsigned long softirq_enable_ip; 1394 unsigned long softirq_enable_ip;
1395 unsigned int softirq_disable_event;
1437 unsigned int softirq_enable_event; 1396 unsigned int softirq_enable_event;
1438 int hardirq_context; 1397 int softirqs_enabled;
1439 int softirq_context; 1398 int softirq_context;
1440#endif 1399#endif
1441#ifdef CONFIG_LOCKDEP 1400#ifdef CONFIG_LOCKDEP
@@ -1451,7 +1410,7 @@ struct task_struct {
1451 void *journal_info; 1410 void *journal_info;
1452 1411
1453/* stacked block device info */ 1412/* stacked block device info */
1454 struct bio *bio_list, **bio_tail; 1413 struct bio_list *bio_list;
1455 1414
1456/* VM state */ 1415/* VM state */
1457 struct reclaim_state *reclaim_state; 1416 struct reclaim_state *reclaim_state;
@@ -1529,7 +1488,7 @@ struct task_struct {
1529 1488
1530 struct list_head *scm_work_list; 1489 struct list_head *scm_work_list;
1531#ifdef CONFIG_FUNCTION_GRAPH_TRACER 1490#ifdef CONFIG_FUNCTION_GRAPH_TRACER
1532 /* Index of current stored adress in ret_stack */ 1491 /* Index of current stored address in ret_stack */
1533 int curr_ret_stack; 1492 int curr_ret_stack;
1534 /* Stack of return addresses for return function tracing */ 1493 /* Stack of return addresses for return function tracing */
1535 struct ftrace_ret_stack *ret_stack; 1494 struct ftrace_ret_stack *ret_stack;
@@ -1549,11 +1508,18 @@ struct task_struct {
1549 /* bitmask of trace recursion */ 1508 /* bitmask of trace recursion */
1550 unsigned long trace_recursion; 1509 unsigned long trace_recursion;
1551#endif /* CONFIG_TRACING */ 1510#endif /* CONFIG_TRACING */
1552 unsigned long stack_start; 1511#ifdef CONFIG_CGROUP_MEM_RES_CTLR /* memcg uses this to do batch job */
1512 struct memcg_batch_info {
1513 int do_batch; /* incremented when batch uncharge started */
1514 struct mem_cgroup *memcg; /* target memcg of uncharge */
1515 unsigned long bytes; /* uncharged usage */
1516 unsigned long memsw_bytes; /* uncharged mem+swap usage */
1517 } memcg_batch;
1518#endif
1553}; 1519};
1554 1520
1555/* Future-safe accessor for struct task_struct's cpus_allowed. */ 1521/* Future-safe accessor for struct task_struct's cpus_allowed. */
1556#define tsk_cpumask(tsk) (&(tsk)->cpus_allowed) 1522#define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
1557 1523
1558/* 1524/*
1559 * Priority of a process goes from 0..MAX_PRIO-1, valid RT 1525 * Priority of a process goes from 0..MAX_PRIO-1, valid RT
@@ -1731,9 +1697,8 @@ static inline void put_task_struct(struct task_struct *t)
1731 __put_task_struct(t); 1697 __put_task_struct(t);
1732} 1698}
1733 1699
1734extern cputime_t task_utime(struct task_struct *p); 1700extern void task_times(struct task_struct *p, cputime_t *ut, cputime_t *st);
1735extern cputime_t task_stime(struct task_struct *p); 1701extern void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *st);
1736extern cputime_t task_gtime(struct task_struct *p);
1737 1702
1738/* 1703/*
1739 * Per process flags 1704 * Per process flags
@@ -1847,7 +1812,8 @@ static inline int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask)
1847extern int sched_clock_stable; 1812extern int sched_clock_stable;
1848#endif 1813#endif
1849 1814
1850extern unsigned long long sched_clock(void); 1815/* ftrace calls sched_clock() directly */
1816extern unsigned long long notrace sched_clock(void);
1851 1817
1852extern void sched_clock_init(void); 1818extern void sched_clock_init(void);
1853extern u64 sched_clock_cpu(int cpu); 1819extern u64 sched_clock_cpu(int cpu);
@@ -1910,14 +1876,22 @@ extern unsigned int sysctl_sched_wakeup_granularity;
1910extern unsigned int sysctl_sched_shares_ratelimit; 1876extern unsigned int sysctl_sched_shares_ratelimit;
1911extern unsigned int sysctl_sched_shares_thresh; 1877extern unsigned int sysctl_sched_shares_thresh;
1912extern unsigned int sysctl_sched_child_runs_first; 1878extern unsigned int sysctl_sched_child_runs_first;
1879
1880enum sched_tunable_scaling {
1881 SCHED_TUNABLESCALING_NONE,
1882 SCHED_TUNABLESCALING_LOG,
1883 SCHED_TUNABLESCALING_LINEAR,
1884 SCHED_TUNABLESCALING_END,
1885};
1886extern enum sched_tunable_scaling sysctl_sched_tunable_scaling;
1887
1913#ifdef CONFIG_SCHED_DEBUG 1888#ifdef CONFIG_SCHED_DEBUG
1914extern unsigned int sysctl_sched_features;
1915extern unsigned int sysctl_sched_migration_cost; 1889extern unsigned int sysctl_sched_migration_cost;
1916extern unsigned int sysctl_sched_nr_migrate; 1890extern unsigned int sysctl_sched_nr_migrate;
1917extern unsigned int sysctl_sched_time_avg; 1891extern unsigned int sysctl_sched_time_avg;
1918extern unsigned int sysctl_timer_migration; 1892extern unsigned int sysctl_timer_migration;
1919 1893
1920int sched_nr_latency_handler(struct ctl_table *table, int write, 1894int sched_proc_update_handler(struct ctl_table *table, int write,
1921 void __user *buffer, size_t *length, 1895 void __user *buffer, size_t *length,
1922 loff_t *ppos); 1896 loff_t *ppos);
1923#endif 1897#endif
@@ -2073,7 +2047,6 @@ extern int kill_proc_info(int, struct siginfo *, pid_t);
2073extern int do_notify_parent(struct task_struct *, int); 2047extern int do_notify_parent(struct task_struct *, int);
2074extern void __wake_up_parent(struct task_struct *p, struct task_struct *parent); 2048extern void __wake_up_parent(struct task_struct *p, struct task_struct *parent);
2075extern void force_sig(int, struct task_struct *); 2049extern void force_sig(int, struct task_struct *);
2076extern void force_sig_specific(int, struct task_struct *);
2077extern int send_sig(int, struct task_struct *, int); 2050extern int send_sig(int, struct task_struct *, int);
2078extern void zap_other_threads(struct task_struct *p); 2051extern void zap_other_threads(struct task_struct *p);
2079extern struct sigqueue *sigqueue_alloc(void); 2052extern struct sigqueue *sigqueue_alloc(void);
@@ -2092,16 +2065,18 @@ static inline int kill_cad_pid(int sig, int priv)
2092#define SEND_SIG_PRIV ((struct siginfo *) 1) 2065#define SEND_SIG_PRIV ((struct siginfo *) 1)
2093#define SEND_SIG_FORCED ((struct siginfo *) 2) 2066#define SEND_SIG_FORCED ((struct siginfo *) 2)
2094 2067
2095static inline int is_si_special(const struct siginfo *info) 2068/*
2096{ 2069 * True if we are on the alternate signal stack.
2097 return info <= SEND_SIG_FORCED; 2070 */
2098}
2099
2100/* True if we are on the alternate signal stack. */
2101
2102static inline int on_sig_stack(unsigned long sp) 2071static inline int on_sig_stack(unsigned long sp)
2103{ 2072{
2104 return (sp - current->sas_ss_sp < current->sas_ss_size); 2073#ifdef CONFIG_STACK_GROWSUP
2074 return sp >= current->sas_ss_sp &&
2075 sp - current->sas_ss_sp < current->sas_ss_size;
2076#else
2077 return sp > current->sas_ss_sp &&
2078 sp - current->sas_ss_sp <= current->sas_ss_size;
2079#endif
2105} 2080}
2106 2081
2107static inline int sas_ss_flags(unsigned long sp) 2082static inline int sas_ss_flags(unsigned long sp)
@@ -2430,9 +2405,7 @@ void thread_group_cputimer(struct task_struct *tsk, struct task_cputime *times);
2430 2405
2431static inline void thread_group_cputime_init(struct signal_struct *sig) 2406static inline void thread_group_cputime_init(struct signal_struct *sig)
2432{ 2407{
2433 sig->cputimer.cputime = INIT_CPUTIME;
2434 spin_lock_init(&sig->cputimer.lock); 2408 spin_lock_init(&sig->cputimer.lock);
2435 sig->cputimer.running = 0;
2436} 2409}
2437 2410
2438static inline void thread_group_cputime_free(struct signal_struct *sig) 2411static inline void thread_group_cputime_free(struct signal_struct *sig)
@@ -2475,8 +2448,6 @@ static inline void set_task_cpu(struct task_struct *p, unsigned int cpu)
2475 2448
2476#endif /* CONFIG_SMP */ 2449#endif /* CONFIG_SMP */
2477 2450
2478extern void arch_pick_mmap_layout(struct mm_struct *mm);
2479
2480#ifdef CONFIG_TRACING 2451#ifdef CONFIG_TRACING
2481extern void 2452extern void
2482__trace_special(void *__tr, void *__data, 2453__trace_special(void *__tr, void *__data,
@@ -2494,13 +2465,9 @@ extern long sched_getaffinity(pid_t pid, struct cpumask *mask);
2494 2465
2495extern void normalize_rt_tasks(void); 2466extern void normalize_rt_tasks(void);
2496 2467
2497#ifdef CONFIG_GROUP_SCHED 2468#ifdef CONFIG_CGROUP_SCHED
2498 2469
2499extern struct task_group init_task_group; 2470extern struct task_group init_task_group;
2500#ifdef CONFIG_USER_SCHED
2501extern struct task_group root_task_group;
2502extern void set_tg_uid(struct user_struct *user);
2503#endif
2504 2471
2505extern struct task_group *sched_create_group(struct task_group *parent); 2472extern struct task_group *sched_create_group(struct task_group *parent);
2506extern void sched_destroy_group(struct task_group *tg); 2473extern void sched_destroy_group(struct task_group *tg);
@@ -2585,7 +2552,27 @@ static inline void mm_init_owner(struct mm_struct *mm, struct task_struct *p)
2585} 2552}
2586#endif /* CONFIG_MM_OWNER */ 2553#endif /* CONFIG_MM_OWNER */
2587 2554
2588#define TASK_STATE_TO_CHAR_STR "RSDTtZX" 2555static inline unsigned long task_rlimit(const struct task_struct *tsk,
2556 unsigned int limit)
2557{
2558 return ACCESS_ONCE(tsk->signal->rlim[limit].rlim_cur);
2559}
2560
2561static inline unsigned long task_rlimit_max(const struct task_struct *tsk,
2562 unsigned int limit)
2563{
2564 return ACCESS_ONCE(tsk->signal->rlim[limit].rlim_max);
2565}
2566
2567static inline unsigned long rlimit(unsigned int limit)
2568{
2569 return task_rlimit(current, limit);
2570}
2571
2572static inline unsigned long rlimit_max(unsigned int limit)
2573{
2574 return task_rlimit_max(current, limit);
2575}
2589 2576
2590#endif /* __KERNEL__ */ 2577#endif /* __KERNEL__ */
2591 2578
diff --git a/include/linux/screen_info.h b/include/linux/screen_info.h
index 1ee2c05142f6..899fbb487c94 100644
--- a/include/linux/screen_info.h
+++ b/include/linux/screen_info.h
@@ -14,7 +14,8 @@ struct screen_info {
14 __u16 orig_video_page; /* 0x04 */ 14 __u16 orig_video_page; /* 0x04 */
15 __u8 orig_video_mode; /* 0x06 */ 15 __u8 orig_video_mode; /* 0x06 */
16 __u8 orig_video_cols; /* 0x07 */ 16 __u8 orig_video_cols; /* 0x07 */
17 __u16 unused2; /* 0x08 */ 17 __u8 flags; /* 0x08 */
18 __u8 unused2; /* 0x09 */
18 __u16 orig_video_ega_bx;/* 0x0a */ 19 __u16 orig_video_ega_bx;/* 0x0a */
19 __u16 unused3; /* 0x0c */ 20 __u16 unused3; /* 0x0c */
20 __u8 orig_video_lines; /* 0x0e */ 21 __u8 orig_video_lines; /* 0x0e */
@@ -65,6 +66,8 @@ struct screen_info {
65 66
66#define VIDEO_TYPE_EFI 0x70 /* EFI graphic mode */ 67#define VIDEO_TYPE_EFI 0x70 /* EFI graphic mode */
67 68
69#define VIDEO_FLAGS_NOCURSOR (1 << 0) /* The video mode has no cursor set */
70
68#ifdef __KERNEL__ 71#ifdef __KERNEL__
69extern struct screen_info screen_info; 72extern struct screen_info screen_info;
70 73
diff --git a/include/linux/sctp.h b/include/linux/sctp.h
index b464b9d3d242..c20d3ce673c0 100644
--- a/include/linux/sctp.h
+++ b/include/linux/sctp.h
@@ -242,6 +242,7 @@ enum {
242 SCTP_DATA_FIRST_FRAG = 0x02, 242 SCTP_DATA_FIRST_FRAG = 0x02,
243 SCTP_DATA_NOT_FRAG = 0x03, 243 SCTP_DATA_NOT_FRAG = 0x03,
244 SCTP_DATA_UNORDERED = 0x04, 244 SCTP_DATA_UNORDERED = 0x04,
245 SCTP_DATA_SACK_IMM = 0x08,
245}; 246};
246enum { SCTP_DATA_FRAG_MASK = 0x03, }; 247enum { SCTP_DATA_FRAG_MASK = 0x03, };
247 248
diff --git a/include/linux/securebits.h b/include/linux/securebits.h
index d2c5ed845bcc..33406174cbe8 100644
--- a/include/linux/securebits.h
+++ b/include/linux/securebits.h
@@ -1,6 +1,15 @@
1#ifndef _LINUX_SECUREBITS_H 1#ifndef _LINUX_SECUREBITS_H
2#define _LINUX_SECUREBITS_H 1 2#define _LINUX_SECUREBITS_H 1
3 3
4/* Each securesetting is implemented using two bits. One bit specifies
5 whether the setting is on or off. The other bit specify whether the
6 setting is locked or not. A setting which is locked cannot be
7 changed from user-level. */
8#define issecure_mask(X) (1 << (X))
9#ifdef __KERNEL__
10#define issecure(X) (issecure_mask(X) & current_cred_xxx(securebits))
11#endif
12
4#define SECUREBITS_DEFAULT 0x00000000 13#define SECUREBITS_DEFAULT 0x00000000
5 14
6/* When set UID 0 has no special privileges. When unset, we support 15/* When set UID 0 has no special privileges. When unset, we support
@@ -12,6 +21,9 @@
12#define SECURE_NOROOT 0 21#define SECURE_NOROOT 0
13#define SECURE_NOROOT_LOCKED 1 /* make bit-0 immutable */ 22#define SECURE_NOROOT_LOCKED 1 /* make bit-0 immutable */
14 23
24#define SECBIT_NOROOT (issecure_mask(SECURE_NOROOT))
25#define SECBIT_NOROOT_LOCKED (issecure_mask(SECURE_NOROOT_LOCKED))
26
15/* When set, setuid to/from uid 0 does not trigger capability-"fixup". 27/* When set, setuid to/from uid 0 does not trigger capability-"fixup".
16 When unset, to provide compatiblility with old programs relying on 28 When unset, to provide compatiblility with old programs relying on
17 set*uid to gain/lose privilege, transitions to/from uid 0 cause 29 set*uid to gain/lose privilege, transitions to/from uid 0 cause
@@ -19,6 +31,10 @@
19#define SECURE_NO_SETUID_FIXUP 2 31#define SECURE_NO_SETUID_FIXUP 2
20#define SECURE_NO_SETUID_FIXUP_LOCKED 3 /* make bit-2 immutable */ 32#define SECURE_NO_SETUID_FIXUP_LOCKED 3 /* make bit-2 immutable */
21 33
34#define SECBIT_NO_SETUID_FIXUP (issecure_mask(SECURE_NO_SETUID_FIXUP))
35#define SECBIT_NO_SETUID_FIXUP_LOCKED \
36 (issecure_mask(SECURE_NO_SETUID_FIXUP_LOCKED))
37
22/* When set, a process can retain its capabilities even after 38/* When set, a process can retain its capabilities even after
23 transitioning to a non-root user (the set-uid fixup suppressed by 39 transitioning to a non-root user (the set-uid fixup suppressed by
24 bit 2). Bit-4 is cleared when a process calls exec(); setting both 40 bit 2). Bit-4 is cleared when a process calls exec(); setting both
@@ -27,12 +43,8 @@
27#define SECURE_KEEP_CAPS 4 43#define SECURE_KEEP_CAPS 4
28#define SECURE_KEEP_CAPS_LOCKED 5 /* make bit-4 immutable */ 44#define SECURE_KEEP_CAPS_LOCKED 5 /* make bit-4 immutable */
29 45
30/* Each securesetting is implemented using two bits. One bit specifies 46#define SECBIT_KEEP_CAPS (issecure_mask(SECURE_KEEP_CAPS))
31 whether the setting is on or off. The other bit specify whether the 47#define SECBIT_KEEP_CAPS_LOCKED (issecure_mask(SECURE_KEEP_CAPS_LOCKED))
32 setting is locked or not. A setting which is locked cannot be
33 changed from user-level. */
34#define issecure_mask(X) (1 << (X))
35#define issecure(X) (issecure_mask(X) & current_cred_xxx(securebits))
36 48
37#define SECURE_ALL_BITS (issecure_mask(SECURE_NOROOT) | \ 49#define SECURE_ALL_BITS (issecure_mask(SECURE_NOROOT) | \
38 issecure_mask(SECURE_NO_SETUID_FIXUP) | \ 50 issecure_mask(SECURE_NO_SETUID_FIXUP) | \
diff --git a/include/linux/security.h b/include/linux/security.h
index 239e40d0450b..3158dd982d27 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -33,7 +33,7 @@
33#include <linux/sched.h> 33#include <linux/sched.h>
34#include <linux/key.h> 34#include <linux/key.h>
35#include <linux/xfrm.h> 35#include <linux/xfrm.h>
36#include <linux/gfp.h> 36#include <linux/slab.h>
37#include <net/flow.h> 37#include <net/flow.h>
38 38
39/* Maximum number of letters for an LSM name string */ 39/* Maximum number of letters for an LSM name string */
@@ -76,7 +76,7 @@ extern int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3,
76extern int cap_task_setscheduler(struct task_struct *p, int policy, struct sched_param *lp); 76extern int cap_task_setscheduler(struct task_struct *p, int policy, struct sched_param *lp);
77extern int cap_task_setioprio(struct task_struct *p, int ioprio); 77extern int cap_task_setioprio(struct task_struct *p, int ioprio);
78extern int cap_task_setnice(struct task_struct *p, int nice); 78extern int cap_task_setnice(struct task_struct *p, int nice);
79extern int cap_syslog(int type); 79extern int cap_syslog(int type, bool from_file);
80extern int cap_vm_enough_memory(struct mm_struct *mm, long pages); 80extern int cap_vm_enough_memory(struct mm_struct *mm, long pages);
81 81
82struct msghdr; 82struct msghdr;
@@ -95,8 +95,15 @@ struct seq_file;
95extern int cap_netlink_send(struct sock *sk, struct sk_buff *skb); 95extern int cap_netlink_send(struct sock *sk, struct sk_buff *skb);
96extern int cap_netlink_recv(struct sk_buff *skb, int cap); 96extern int cap_netlink_recv(struct sk_buff *skb, int cap);
97 97
98void reset_security_ops(void);
99
100#ifdef CONFIG_MMU
98extern unsigned long mmap_min_addr; 101extern unsigned long mmap_min_addr;
99extern unsigned long dac_mmap_min_addr; 102extern unsigned long dac_mmap_min_addr;
103#else
104#define dac_mmap_min_addr 0UL
105#endif
106
100/* 107/*
101 * Values used in the task_security_ops calls 108 * Values used in the task_security_ops calls
102 */ 109 */
@@ -121,6 +128,7 @@ struct request_sock;
121#define LSM_UNSAFE_PTRACE 2 128#define LSM_UNSAFE_PTRACE 2
122#define LSM_UNSAFE_PTRACE_CAP 4 129#define LSM_UNSAFE_PTRACE_CAP 4
123 130
131#ifdef CONFIG_MMU
124/* 132/*
125 * If a hint addr is less than mmap_min_addr change hint to be as 133 * If a hint addr is less than mmap_min_addr change hint to be as
126 * low as possible but still greater than mmap_min_addr 134 * low as possible but still greater than mmap_min_addr
@@ -135,6 +143,7 @@ static inline unsigned long round_hint_to_min(unsigned long hint)
135} 143}
136extern int mmap_min_addr_handler(struct ctl_table *table, int write, 144extern int mmap_min_addr_handler(struct ctl_table *table, int write,
137 void __user *buffer, size_t *lenp, loff_t *ppos); 145 void __user *buffer, size_t *lenp, loff_t *ppos);
146#endif
138 147
139#ifdef CONFIG_SECURITY 148#ifdef CONFIG_SECURITY
140 149
@@ -447,6 +456,22 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
447 * @new_dir contains the path structure for parent of the new link. 456 * @new_dir contains the path structure for parent of the new link.
448 * @new_dentry contains the dentry structure of the new link. 457 * @new_dentry contains the dentry structure of the new link.
449 * Return 0 if permission is granted. 458 * Return 0 if permission is granted.
459 * @path_chmod:
460 * Check for permission to change DAC's permission of a file or directory.
461 * @dentry contains the dentry structure.
462 * @mnt contains the vfsmnt structure.
463 * @mode contains DAC's mode.
464 * Return 0 if permission is granted.
465 * @path_chown:
466 * Check for permission to change owner/group of a file or directory.
467 * @path contains the path structure.
468 * @uid contains new owner's ID.
469 * @gid contains new group's ID.
470 * Return 0 if permission is granted.
471 * @path_chroot:
472 * Check for permission to change root directory.
473 * @path contains the path structure.
474 * Return 0 if permission is granted.
450 * @inode_readlink: 475 * @inode_readlink:
451 * Check the permission to read the symbolic link. 476 * Check the permission to read the symbolic link.
452 * @dentry contains the dentry structure for the file link. 477 * @dentry contains the dentry structure for the file link.
@@ -690,6 +715,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
690 * @kernel_module_request: 715 * @kernel_module_request:
691 * Ability to trigger the kernel to automatically upcall to userspace for 716 * Ability to trigger the kernel to automatically upcall to userspace for
692 * userspace to load a kernel module with the given name. 717 * userspace to load a kernel module with the given name.
718 * @kmod_name name of the module requested by the kernel
693 * Return 0 if successful. 719 * Return 0 if successful.
694 * @task_setuid: 720 * @task_setuid:
695 * Check permission before setting one or more of the user identity 721 * Check permission before setting one or more of the user identity
@@ -961,6 +987,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
961 * Check permissions on incoming network packets. This hook is distinct 987 * Check permissions on incoming network packets. This hook is distinct
962 * from Netfilter's IP input hooks since it is the first time that the 988 * from Netfilter's IP input hooks since it is the first time that the
963 * incoming sk_buff @skb has been associated with a particular socket, @sk. 989 * incoming sk_buff @skb has been associated with a particular socket, @sk.
990 * Must not sleep inside this hook because some callers hold spinlocks.
964 * @sk contains the sock (not socket) associated with the incoming sk_buff. 991 * @sk contains the sock (not socket) associated with the incoming sk_buff.
965 * @skb contains the incoming network data. 992 * @skb contains the incoming network data.
966 * @socket_getpeersec_stream: 993 * @socket_getpeersec_stream:
@@ -1324,6 +1351,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
1324 * logging to the console. 1351 * logging to the console.
1325 * See the syslog(2) manual page for an explanation of the @type values. 1352 * See the syslog(2) manual page for an explanation of the @type values.
1326 * @type contains the type of action. 1353 * @type contains the type of action.
1354 * @from_file indicates the context of action (if it came from /proc).
1327 * Return 0 if permission is granted. 1355 * Return 0 if permission is granted.
1328 * @settime: 1356 * @settime:
1329 * Check permission to change the system time. 1357 * Check permission to change the system time.
@@ -1438,7 +1466,7 @@ struct security_operations {
1438 int (*sysctl) (struct ctl_table *table, int op); 1466 int (*sysctl) (struct ctl_table *table, int op);
1439 int (*quotactl) (int cmds, int type, int id, struct super_block *sb); 1467 int (*quotactl) (int cmds, int type, int id, struct super_block *sb);
1440 int (*quota_on) (struct dentry *dentry); 1468 int (*quota_on) (struct dentry *dentry);
1441 int (*syslog) (int type); 1469 int (*syslog) (int type, bool from_file);
1442 int (*settime) (struct timespec *ts, struct timezone *tz); 1470 int (*settime) (struct timespec *ts, struct timezone *tz);
1443 int (*vm_enough_memory) (struct mm_struct *mm, long pages); 1471 int (*vm_enough_memory) (struct mm_struct *mm, long pages);
1444 1472
@@ -1488,6 +1516,10 @@ struct security_operations {
1488 struct dentry *new_dentry); 1516 struct dentry *new_dentry);
1489 int (*path_rename) (struct path *old_dir, struct dentry *old_dentry, 1517 int (*path_rename) (struct path *old_dir, struct dentry *old_dentry,
1490 struct path *new_dir, struct dentry *new_dentry); 1518 struct path *new_dir, struct dentry *new_dentry);
1519 int (*path_chmod) (struct dentry *dentry, struct vfsmount *mnt,
1520 mode_t mode);
1521 int (*path_chown) (struct path *path, uid_t uid, gid_t gid);
1522 int (*path_chroot) (struct path *path);
1491#endif 1523#endif
1492 1524
1493 int (*inode_alloc_security) (struct inode *inode); 1525 int (*inode_alloc_security) (struct inode *inode);
@@ -1557,7 +1589,7 @@ struct security_operations {
1557 void (*cred_transfer)(struct cred *new, const struct cred *old); 1589 void (*cred_transfer)(struct cred *new, const struct cred *old);
1558 int (*kernel_act_as)(struct cred *new, u32 secid); 1590 int (*kernel_act_as)(struct cred *new, u32 secid);
1559 int (*kernel_create_files_as)(struct cred *new, struct inode *inode); 1591 int (*kernel_create_files_as)(struct cred *new, struct inode *inode);
1560 int (*kernel_module_request)(void); 1592 int (*kernel_module_request)(char *kmod_name);
1561 int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags); 1593 int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags);
1562 int (*task_fix_setuid) (struct cred *new, const struct cred *old, 1594 int (*task_fix_setuid) (struct cred *new, const struct cred *old,
1563 int flags); 1595 int flags);
@@ -1733,7 +1765,7 @@ int security_acct(struct file *file);
1733int security_sysctl(struct ctl_table *table, int op); 1765int security_sysctl(struct ctl_table *table, int op);
1734int security_quotactl(int cmds, int type, int id, struct super_block *sb); 1766int security_quotactl(int cmds, int type, int id, struct super_block *sb);
1735int security_quota_on(struct dentry *dentry); 1767int security_quota_on(struct dentry *dentry);
1736int security_syslog(int type); 1768int security_syslog(int type, bool from_file);
1737int security_settime(struct timespec *ts, struct timezone *tz); 1769int security_settime(struct timespec *ts, struct timezone *tz);
1738int security_vm_enough_memory(long pages); 1770int security_vm_enough_memory(long pages);
1739int security_vm_enough_memory_mm(struct mm_struct *mm, long pages); 1771int security_vm_enough_memory_mm(struct mm_struct *mm, long pages);
@@ -1822,7 +1854,7 @@ void security_commit_creds(struct cred *new, const struct cred *old);
1822void security_transfer_creds(struct cred *new, const struct cred *old); 1854void security_transfer_creds(struct cred *new, const struct cred *old);
1823int security_kernel_act_as(struct cred *new, u32 secid); 1855int security_kernel_act_as(struct cred *new, u32 secid);
1824int security_kernel_create_files_as(struct cred *new, struct inode *inode); 1856int security_kernel_create_files_as(struct cred *new, struct inode *inode);
1825int security_kernel_module_request(void); 1857int security_kernel_module_request(char *kmod_name);
1826int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags); 1858int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags);
1827int security_task_fix_setuid(struct cred *new, const struct cred *old, 1859int security_task_fix_setuid(struct cred *new, const struct cred *old,
1828 int flags); 1860 int flags);
@@ -1979,9 +2011,9 @@ static inline int security_quota_on(struct dentry *dentry)
1979 return 0; 2011 return 0;
1980} 2012}
1981 2013
1982static inline int security_syslog(int type) 2014static inline int security_syslog(int type, bool from_file)
1983{ 2015{
1984 return cap_syslog(type); 2016 return cap_syslog(type, from_file);
1985} 2017}
1986 2018
1987static inline int security_settime(struct timespec *ts, struct timezone *tz) 2019static inline int security_settime(struct timespec *ts, struct timezone *tz)
@@ -2387,7 +2419,7 @@ static inline int security_kernel_create_files_as(struct cred *cred,
2387 return 0; 2419 return 0;
2388} 2420}
2389 2421
2390static inline int security_kernel_module_request(void) 2422static inline int security_kernel_module_request(char *kmod_name)
2391{ 2423{
2392 return 0; 2424 return 0;
2393} 2425}
@@ -2952,6 +2984,10 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
2952 struct dentry *new_dentry); 2984 struct dentry *new_dentry);
2953int security_path_rename(struct path *old_dir, struct dentry *old_dentry, 2985int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
2954 struct path *new_dir, struct dentry *new_dentry); 2986 struct path *new_dir, struct dentry *new_dentry);
2987int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
2988 mode_t mode);
2989int security_path_chown(struct path *path, uid_t uid, gid_t gid);
2990int security_path_chroot(struct path *path);
2955#else /* CONFIG_SECURITY_PATH */ 2991#else /* CONFIG_SECURITY_PATH */
2956static inline int security_path_unlink(struct path *dir, struct dentry *dentry) 2992static inline int security_path_unlink(struct path *dir, struct dentry *dentry)
2957{ 2993{
@@ -3001,6 +3037,23 @@ static inline int security_path_rename(struct path *old_dir,
3001{ 3037{
3002 return 0; 3038 return 0;
3003} 3039}
3040
3041static inline int security_path_chmod(struct dentry *dentry,
3042 struct vfsmount *mnt,
3043 mode_t mode)
3044{
3045 return 0;
3046}
3047
3048static inline int security_path_chown(struct path *path, uid_t uid, gid_t gid)
3049{
3050 return 0;
3051}
3052
3053static inline int security_path_chroot(struct path *path)
3054{
3055 return 0;
3056}
3004#endif /* CONFIG_SECURITY_PATH */ 3057#endif /* CONFIG_SECURITY_PATH */
3005 3058
3006#ifdef CONFIG_KEYS 3059#ifdef CONFIG_KEYS
diff --git a/include/linux/sem.h b/include/linux/sem.h
index 1b191c176bcd..8a4adbef8a0f 100644
--- a/include/linux/sem.h
+++ b/include/linux/sem.h
@@ -86,6 +86,7 @@ struct task_struct;
86struct sem { 86struct sem {
87 int semval; /* current value */ 87 int semval; /* current value */
88 int sempid; /* pid of last operation */ 88 int sempid; /* pid of last operation */
89 struct list_head sem_pending; /* pending single-sop operations */
89}; 90};
90 91
91/* One sem_array data structure for each set of semaphores in the system. */ 92/* One sem_array data structure for each set of semaphores in the system. */
@@ -96,11 +97,13 @@ struct sem_array {
96 struct sem *sem_base; /* ptr to first semaphore in array */ 97 struct sem *sem_base; /* ptr to first semaphore in array */
97 struct list_head sem_pending; /* pending operations to be processed */ 98 struct list_head sem_pending; /* pending operations to be processed */
98 struct list_head list_id; /* undo requests on this array */ 99 struct list_head list_id; /* undo requests on this array */
99 unsigned long sem_nsems; /* no. of semaphores in array */ 100 int sem_nsems; /* no. of semaphores in array */
101 int complex_count; /* pending complex operations */
100}; 102};
101 103
102/* One queue for each sleeping process in the system. */ 104/* One queue for each sleeping process in the system. */
103struct sem_queue { 105struct sem_queue {
106 struct list_head simple_list; /* queue of pending operations */
104 struct list_head list; /* queue of pending operations */ 107 struct list_head list; /* queue of pending operations */
105 struct task_struct *sleeper; /* this process */ 108 struct task_struct *sleeper; /* this process */
106 struct sem_undo *undo; /* undo structure */ 109 struct sem_undo *undo; /* undo structure */
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h
index 8366d8f12e53..03c0232b4169 100644
--- a/include/linux/seq_file.h
+++ b/include/linux/seq_file.h
@@ -135,4 +135,22 @@ extern struct list_head *seq_list_start_head(struct list_head *head,
135extern struct list_head *seq_list_next(void *v, struct list_head *head, 135extern struct list_head *seq_list_next(void *v, struct list_head *head,
136 loff_t *ppos); 136 loff_t *ppos);
137 137
138/*
139 * Helpers for iteration over hlist_head-s in seq_files
140 */
141
142extern struct hlist_node *seq_hlist_start(struct hlist_head *head,
143 loff_t pos);
144extern struct hlist_node *seq_hlist_start_head(struct hlist_head *head,
145 loff_t pos);
146extern struct hlist_node *seq_hlist_next(void *v, struct hlist_head *head,
147 loff_t *ppos);
148
149extern struct hlist_node *seq_hlist_start_rcu(struct hlist_head *head,
150 loff_t pos);
151extern struct hlist_node *seq_hlist_start_head_rcu(struct hlist_head *head,
152 loff_t pos);
153extern struct hlist_node *seq_hlist_next_rcu(void *v,
154 struct hlist_head *head,
155 loff_t *ppos);
138#endif 156#endif
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
index db532ce288be..78dd1e7120a9 100644
--- a/include/linux/serial_core.h
+++ b/include/linux/serial_core.h
@@ -179,6 +179,9 @@
179/* BCM63xx family SoCs */ 179/* BCM63xx family SoCs */
180#define PORT_BCM63XX 89 180#define PORT_BCM63XX 89
181 181
182/* Aeroflex Gaisler GRLIB APBUART */
183#define PORT_APBUART 90
184
182#ifdef __KERNEL__ 185#ifdef __KERNEL__
183 186
184#include <linux/compiler.h> 187#include <linux/compiler.h>
@@ -488,9 +491,13 @@ uart_handle_dcd_change(struct uart_port *uport, unsigned int status)
488{ 491{
489 struct uart_state *state = uport->state; 492 struct uart_state *state = uport->state;
490 struct tty_port *port = &state->port; 493 struct tty_port *port = &state->port;
494 struct tty_ldisc *ld = tty_ldisc_ref(port->tty);
495 struct timespec ts;
491 496
492 uport->icount.dcd++; 497 if (ld && ld->ops->dcd_change)
498 getnstimeofday(&ts);
493 499
500 uport->icount.dcd++;
494#ifdef CONFIG_HARD_PPS 501#ifdef CONFIG_HARD_PPS
495 if ((uport->flags & UPF_HARDPPS_CD) && status) 502 if ((uport->flags & UPF_HARDPPS_CD) && status)
496 hardpps(); 503 hardpps();
@@ -502,6 +509,11 @@ uart_handle_dcd_change(struct uart_port *uport, unsigned int status)
502 else if (port->tty) 509 else if (port->tty)
503 tty_hangup(port->tty); 510 tty_hangup(port->tty);
504 } 511 }
512
513 if (ld && ld->ops->dcd_change)
514 ld->ops->dcd_change(port->tty, status, &ts);
515 if (ld)
516 tty_ldisc_deref(ld);
505} 517}
506 518
507/** 519/**
diff --git a/include/linux/serial_reg.h b/include/linux/serial_reg.h
index 850db2e80510..cf9327c051ad 100644
--- a/include/linux/serial_reg.h
+++ b/include/linux/serial_reg.h
@@ -216,10 +216,10 @@
216 216
217#define UART_IIR_TOD 0x08 /* Character Timeout Indication Detected */ 217#define UART_IIR_TOD 0x08 /* Character Timeout Indication Detected */
218 218
219#define UART_FCR_PXAR1 0x00 /* receive FIFO treshold = 1 */ 219#define UART_FCR_PXAR1 0x00 /* receive FIFO threshold = 1 */
220#define UART_FCR_PXAR8 0x40 /* receive FIFO treshold = 8 */ 220#define UART_FCR_PXAR8 0x40 /* receive FIFO threshold = 8 */
221#define UART_FCR_PXAR16 0x80 /* receive FIFO treshold = 16 */ 221#define UART_FCR_PXAR16 0x80 /* receive FIFO threshold = 16 */
222#define UART_FCR_PXAR32 0xc0 /* receive FIFO treshold = 32 */ 222#define UART_FCR_PXAR32 0xc0 /* receive FIFO threshold = 32 */
223 223
224 224
225 225
diff --git a/include/linux/serial_sci.h b/include/linux/serial_sci.h
index 1c297ddc9d5a..193d4bfe42ff 100644
--- a/include/linux/serial_sci.h
+++ b/include/linux/serial_sci.h
@@ -2,6 +2,9 @@
2#define __LINUX_SERIAL_SCI_H 2#define __LINUX_SERIAL_SCI_H
3 3
4#include <linux/serial_core.h> 4#include <linux/serial_core.h>
5#ifdef CONFIG_SERIAL_SH_SCI_DMA
6#include <asm/dmaengine.h>
7#endif
5 8
6/* 9/*
7 * Generic header for SuperH SCI(F) (used by sh/sh64/h8300 and related parts) 10 * Generic header for SuperH SCI(F) (used by sh/sh64/h8300 and related parts)
@@ -16,6 +19,8 @@ enum {
16 SCIx_NR_IRQS, 19 SCIx_NR_IRQS,
17}; 20};
18 21
22struct device;
23
19/* 24/*
20 * Platform device specific platform_data struct 25 * Platform device specific platform_data struct
21 */ 26 */
@@ -26,6 +31,11 @@ struct plat_sci_port {
26 unsigned int type; /* SCI / SCIF / IRDA */ 31 unsigned int type; /* SCI / SCIF / IRDA */
27 upf_t flags; /* UPF_* flags */ 32 upf_t flags; /* UPF_* flags */
28 char *clk; /* clock string */ 33 char *clk; /* clock string */
34 struct device *dma_dev;
35#ifdef CONFIG_SERIAL_SH_SCI_DMA
36 enum sh_dmae_slave_chan_id dma_slave_tx;
37 enum sh_dmae_slave_chan_id dma_slave_rx;
38#endif
29}; 39};
30 40
31#endif /* __LINUX_SERIAL_SCI_H */ 41#endif /* __LINUX_SERIAL_SCI_H */
diff --git a/include/linux/serio.h b/include/linux/serio.h
index a640bc2afe76..64b473066b9a 100644
--- a/include/linux/serio.h
+++ b/include/linux/serio.h
@@ -30,7 +30,6 @@ struct serio {
30 char phys[32]; 30 char phys[32];
31 31
32 bool manual_bind; 32 bool manual_bind;
33 bool registered; /* port has been fully registered with driver core */
34 33
35 struct serio_device_id id; 34 struct serio_device_id id;
36 35
@@ -136,25 +135,6 @@ static inline void serio_continue_rx(struct serio *serio)
136 spin_unlock_irq(&serio->lock); 135 spin_unlock_irq(&serio->lock);
137} 136}
138 137
139/*
140 * Use the following functions to pin serio's driver in process context
141 */
142static inline int serio_pin_driver(struct serio *serio)
143{
144 return mutex_lock_interruptible(&serio->drv_mutex);
145}
146
147static inline void serio_pin_driver_uninterruptible(struct serio *serio)
148{
149 mutex_lock(&serio->drv_mutex);
150}
151
152static inline void serio_unpin_driver(struct serio *serio)
153{
154 mutex_unlock(&serio->drv_mutex);
155}
156
157
158#endif 138#endif
159 139
160/* 140/*
@@ -215,5 +195,6 @@ static inline void serio_unpin_driver(struct serio *serio)
215#define SERIO_INEXIO 0x37 195#define SERIO_INEXIO 0x37
216#define SERIO_TOUCHIT213 0x38 196#define SERIO_TOUCHIT213 0x38
217#define SERIO_W8001 0x39 197#define SERIO_W8001 0x39
198#define SERIO_DYNAPRO 0x3a
218 199
219#endif 200#endif
diff --git a/include/linux/sh_intc.h b/include/linux/sh_intc.h
index 68e212ff9dde..51d288d8ac88 100644
--- a/include/linux/sh_intc.h
+++ b/include/linux/sh_intc.h
@@ -45,7 +45,7 @@ struct intc_sense_reg {
45#define INTC_SMP(stride, nr) 45#define INTC_SMP(stride, nr)
46#endif 46#endif
47 47
48struct intc_desc { 48struct intc_hw_desc {
49 struct intc_vect *vectors; 49 struct intc_vect *vectors;
50 unsigned int nr_vectors; 50 unsigned int nr_vectors;
51 struct intc_group *groups; 51 struct intc_group *groups;
@@ -56,36 +56,46 @@ struct intc_desc {
56 unsigned int nr_prio_regs; 56 unsigned int nr_prio_regs;
57 struct intc_sense_reg *sense_regs; 57 struct intc_sense_reg *sense_regs;
58 unsigned int nr_sense_regs; 58 unsigned int nr_sense_regs;
59 char *name;
60#if defined(CONFIG_CPU_SH3) || defined(CONFIG_CPU_SH4A)
61 struct intc_mask_reg *ack_regs; 59 struct intc_mask_reg *ack_regs;
62 unsigned int nr_ack_regs; 60 unsigned int nr_ack_regs;
63#endif
64}; 61};
65 62
66#define _INTC_ARRAY(a) a, sizeof(a)/sizeof(*a) 63#define _INTC_ARRAY(a) a, sizeof(a)/sizeof(*a)
64#define INTC_HW_DESC(vectors, groups, mask_regs, \
65 prio_regs, sense_regs, ack_regs) \
66{ \
67 _INTC_ARRAY(vectors), _INTC_ARRAY(groups), \
68 _INTC_ARRAY(mask_regs), _INTC_ARRAY(prio_regs), \
69 _INTC_ARRAY(sense_regs), _INTC_ARRAY(ack_regs), \
70}
71
72struct intc_desc {
73 char *name;
74 intc_enum force_enable;
75 intc_enum force_disable;
76 struct intc_hw_desc hw;
77};
78
67#define DECLARE_INTC_DESC(symbol, chipname, vectors, groups, \ 79#define DECLARE_INTC_DESC(symbol, chipname, vectors, groups, \
68 mask_regs, prio_regs, sense_regs) \ 80 mask_regs, prio_regs, sense_regs) \
69struct intc_desc symbol __initdata = { \ 81struct intc_desc symbol __initdata = { \
70 _INTC_ARRAY(vectors), _INTC_ARRAY(groups), \ 82 .name = chipname, \
71 _INTC_ARRAY(mask_regs), _INTC_ARRAY(prio_regs), \ 83 .hw = INTC_HW_DESC(vectors, groups, mask_regs, \
72 _INTC_ARRAY(sense_regs), \ 84 prio_regs, sense_regs, NULL), \
73 chipname, \
74} 85}
75 86
76#if defined(CONFIG_CPU_SH3) || defined(CONFIG_CPU_SH4A)
77#define DECLARE_INTC_DESC_ACK(symbol, chipname, vectors, groups, \ 87#define DECLARE_INTC_DESC_ACK(symbol, chipname, vectors, groups, \
78 mask_regs, prio_regs, sense_regs, ack_regs) \ 88 mask_regs, prio_regs, sense_regs, ack_regs) \
79struct intc_desc symbol __initdata = { \ 89struct intc_desc symbol __initdata = { \
80 _INTC_ARRAY(vectors), _INTC_ARRAY(groups), \ 90 .name = chipname, \
81 _INTC_ARRAY(mask_regs), _INTC_ARRAY(prio_regs), \ 91 .hw = INTC_HW_DESC(vectors, groups, mask_regs, \
82 _INTC_ARRAY(sense_regs), \ 92 prio_regs, sense_regs, ack_regs), \
83 chipname, \
84 _INTC_ARRAY(ack_regs), \
85} 93}
86#endif
87 94
88void __init register_intc_controller(struct intc_desc *desc); 95void __init register_intc_controller(struct intc_desc *desc);
89int intc_set_priority(unsigned int irq, unsigned int prio); 96int intc_set_priority(unsigned int irq, unsigned int prio);
90 97
98int reserve_irq_vector(unsigned int irq);
99void reserve_irq_legacy(void);
100
91#endif /* __SH_INTC_H */ 101#endif /* __SH_INTC_H */
diff --git a/include/linux/sh_pfc.h b/include/linux/sh_pfc.h
new file mode 100644
index 000000000000..07c08af9f8f6
--- /dev/null
+++ b/include/linux/sh_pfc.h
@@ -0,0 +1,96 @@
1/*
2 * SuperH Pin Function Controller Support
3 *
4 * Copyright (c) 2008 Magnus Damm
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License. See the file "COPYING" in the main directory of this archive
8 * for more details.
9 */
10
11#ifndef __SH_PFC_H
12#define __SH_PFC_H
13
14#include <asm-generic/gpio.h>
15
16typedef unsigned short pinmux_enum_t;
17typedef unsigned short pinmux_flag_t;
18
19#define PINMUX_TYPE_NONE 0
20#define PINMUX_TYPE_FUNCTION 1
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
27#define PINMUX_FLAG_TYPE (0x7)
28#define PINMUX_FLAG_WANT_PULLUP (1 << 3)
29#define PINMUX_FLAG_WANT_PULLDOWN (1 << 4)
30
31#define PINMUX_FLAG_DBIT_SHIFT 5
32#define PINMUX_FLAG_DBIT (0x1f << PINMUX_FLAG_DBIT_SHIFT)
33#define PINMUX_FLAG_DREG_SHIFT 10
34#define PINMUX_FLAG_DREG (0x3f << PINMUX_FLAG_DREG_SHIFT)
35
36struct pinmux_gpio {
37 pinmux_enum_t enum_id;
38 pinmux_flag_t flags;
39};
40
41#define PINMUX_GPIO(gpio, data_or_mark) [gpio] = { data_or_mark }
42#define PINMUX_DATA(data_or_mark, ids...) data_or_mark, ids, 0
43
44struct pinmux_cfg_reg {
45 unsigned long reg, reg_width, field_width;
46 unsigned long *cnt;
47 pinmux_enum_t *enum_ids;
48};
49
50#define PINMUX_CFG_REG(name, r, r_width, f_width) \
51 .reg = r, .reg_width = r_width, .field_width = f_width, \
52 .cnt = (unsigned long [r_width / f_width]) {}, \
53 .enum_ids = (pinmux_enum_t [(r_width / f_width) * (1 << f_width)]) \
54
55struct pinmux_data_reg {
56 unsigned long reg, reg_width, reg_shadow;
57 pinmux_enum_t *enum_ids;
58};
59
60#define PINMUX_DATA_REG(name, r, r_width) \
61 .reg = r, .reg_width = r_width, \
62 .enum_ids = (pinmux_enum_t [r_width]) \
63
64struct pinmux_range {
65 pinmux_enum_t begin;
66 pinmux_enum_t end;
67 pinmux_enum_t force;
68};
69
70struct pinmux_info {
71 char *name;
72 pinmux_enum_t reserved_id;
73 struct pinmux_range data;
74 struct pinmux_range input;
75 struct pinmux_range input_pd;
76 struct pinmux_range input_pu;
77 struct pinmux_range output;
78 struct pinmux_range mark;
79 struct pinmux_range function;
80
81 unsigned first_gpio, last_gpio;
82
83 struct pinmux_gpio *gpios;
84 struct pinmux_cfg_reg *cfg_regs;
85 struct pinmux_data_reg *data_regs;
86
87 pinmux_enum_t *gpio_data;
88 unsigned int gpio_data_size;
89
90 unsigned long *gpio_in_use;
91 struct gpio_chip chip;
92};
93
94int register_pinmux(struct pinmux_info *pip);
95
96#endif /* __SH_PFC_H */
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h
index deee7afd8d66..e164291fb3e7 100644
--- a/include/linux/shmem_fs.h
+++ b/include/linux/shmem_fs.h
@@ -41,20 +41,4 @@ static inline struct shmem_inode_info *SHMEM_I(struct inode *inode)
41extern int init_tmpfs(void); 41extern int init_tmpfs(void);
42extern int shmem_fill_super(struct super_block *sb, void *data, int silent); 42extern int shmem_fill_super(struct super_block *sb, void *data, int silent);
43 43
44#ifdef CONFIG_TMPFS_POSIX_ACL
45int shmem_check_acl(struct inode *, int);
46int shmem_acl_init(struct inode *, struct inode *);
47
48extern struct xattr_handler shmem_xattr_acl_access_handler;
49extern struct xattr_handler shmem_xattr_acl_default_handler;
50
51extern struct generic_acl_operations shmem_acl_ops;
52
53#else
54static inline int shmem_acl_init(struct inode *inode, struct inode *dir)
55{
56 return 0;
57}
58#endif /* CONFIG_TMPFS_POSIX_ACL */
59
60#endif 44#endif
diff --git a/include/linux/signal.h b/include/linux/signal.h
index ab9272cc270c..fcd2b14b1932 100644
--- a/include/linux/signal.h
+++ b/include/linux/signal.h
@@ -7,6 +7,8 @@
7#ifdef __KERNEL__ 7#ifdef __KERNEL__
8#include <linux/list.h> 8#include <linux/list.h>
9 9
10/* for sysctl */
11extern int print_fatal_signals;
10/* 12/*
11 * Real Time signals may be queued. 13 * Real Time signals may be queued.
12 */ 14 */
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index bcdd6606f468..124f90cd5a38 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -190,9 +190,6 @@ struct skb_shared_info {
190 atomic_t dataref; 190 atomic_t dataref;
191 unsigned short nr_frags; 191 unsigned short nr_frags;
192 unsigned short gso_size; 192 unsigned short gso_size;
193#ifdef CONFIG_HAS_DMA
194 dma_addr_t dma_head;
195#endif
196 /* Warning: this field is not always filled in (UFO)! */ 193 /* Warning: this field is not always filled in (UFO)! */
197 unsigned short gso_segs; 194 unsigned short gso_segs;
198 unsigned short gso_type; 195 unsigned short gso_type;
@@ -201,9 +198,6 @@ struct skb_shared_info {
201 struct sk_buff *frag_list; 198 struct sk_buff *frag_list;
202 struct skb_shared_hwtstamps hwtstamps; 199 struct skb_shared_hwtstamps hwtstamps;
203 skb_frag_t frags[MAX_SKB_FRAGS]; 200 skb_frag_t frags[MAX_SKB_FRAGS];
204#ifdef CONFIG_HAS_DMA
205 dma_addr_t dma_maps[MAX_SKB_FRAGS];
206#endif
207 /* Intermediate layers must ensure that destructor_arg 201 /* Intermediate layers must ensure that destructor_arg
208 * remains valid until skb destructor */ 202 * remains valid until skb destructor */
209 void * destructor_arg; 203 void * destructor_arg;
@@ -299,7 +293,7 @@ typedef unsigned char *sk_buff_data_t;
299 * @nfctinfo: Relationship of this skb to the connection 293 * @nfctinfo: Relationship of this skb to the connection
300 * @nfct_reasm: netfilter conntrack re-assembly pointer 294 * @nfct_reasm: netfilter conntrack re-assembly pointer
301 * @nf_bridge: Saved data about a bridged frame - see br_netfilter.c 295 * @nf_bridge: Saved data about a bridged frame - see br_netfilter.c
302 * @iif: ifindex of device we arrived on 296 * @skb_iif: ifindex of device we arrived on
303 * @queue_mapping: Queue mapping for multiqueue devices 297 * @queue_mapping: Queue mapping for multiqueue devices
304 * @tc_index: Traffic control index 298 * @tc_index: Traffic control index
305 * @tc_verd: traffic control verdict 299 * @tc_verd: traffic control verdict
@@ -315,22 +309,23 @@ struct sk_buff {
315 struct sk_buff *next; 309 struct sk_buff *next;
316 struct sk_buff *prev; 310 struct sk_buff *prev;
317 311
318 struct sock *sk;
319 ktime_t tstamp; 312 ktime_t tstamp;
313
314 struct sock *sk;
320 struct net_device *dev; 315 struct net_device *dev;
321 316
322 unsigned long _skb_dst;
323#ifdef CONFIG_XFRM
324 struct sec_path *sp;
325#endif
326 /* 317 /*
327 * This is the control buffer. It is free to use for every 318 * This is the control buffer. It is free to use for every
328 * layer. Please put your private variables there. If you 319 * layer. Please put your private variables there. If you
329 * want to keep them across layers you have to do a skb_clone() 320 * want to keep them across layers you have to do a skb_clone()
330 * first. This is owned by whoever has the skb queued ATM. 321 * first. This is owned by whoever has the skb queued ATM.
331 */ 322 */
332 char cb[48]; 323 char cb[48] __aligned(8);
333 324
325 unsigned long _skb_dst;
326#ifdef CONFIG_XFRM
327 struct sec_path *sp;
328#endif
334 unsigned int len, 329 unsigned int len,
335 data_len; 330 data_len;
336 __u16 mac_len, 331 __u16 mac_len,
@@ -354,8 +349,8 @@ struct sk_buff {
354 ipvs_property:1, 349 ipvs_property:1,
355 peeked:1, 350 peeked:1,
356 nf_trace:1; 351 nf_trace:1;
357 __be16 protocol:16;
358 kmemcheck_bitfield_end(flags1); 352 kmemcheck_bitfield_end(flags1);
353 __be16 protocol;
359 354
360 void (*destructor)(struct sk_buff *skb); 355 void (*destructor)(struct sk_buff *skb);
361#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 356#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
@@ -366,7 +361,7 @@ struct sk_buff {
366 struct nf_bridge_info *nf_bridge; 361 struct nf_bridge_info *nf_bridge;
367#endif 362#endif
368 363
369 int iif; 364 int skb_iif;
370#ifdef CONFIG_NET_SCHED 365#ifdef CONFIG_NET_SCHED
371 __u16 tc_index; /* traffic control index */ 366 __u16 tc_index; /* traffic control index */
372#ifdef CONFIG_NET_CLS_ACT 367#ifdef CONFIG_NET_CLS_ACT
@@ -389,8 +384,10 @@ struct sk_buff {
389#ifdef CONFIG_NETWORK_SECMARK 384#ifdef CONFIG_NETWORK_SECMARK
390 __u32 secmark; 385 __u32 secmark;
391#endif 386#endif
392 387 union {
393 __u32 mark; 388 __u32 mark;
389 __u32 dropcount;
390 };
394 391
395 __u16 vlan_tci; 392 __u16 vlan_tci;
396 393
@@ -414,14 +411,6 @@ struct sk_buff {
414 411
415#include <asm/system.h> 412#include <asm/system.h>
416 413
417#ifdef CONFIG_HAS_DMA
418#include <linux/dma-mapping.h>
419extern int skb_dma_map(struct device *dev, struct sk_buff *skb,
420 enum dma_data_direction dir);
421extern void skb_dma_unmap(struct device *dev, struct sk_buff *skb,
422 enum dma_data_direction dir);
423#endif
424
425static inline struct dst_entry *skb_dst(const struct sk_buff *skb) 414static inline struct dst_entry *skb_dst(const struct sk_buff *skb)
426{ 415{
427 return (struct dst_entry *)skb->_skb_dst; 416 return (struct dst_entry *)skb->_skb_dst;
@@ -489,8 +478,7 @@ extern int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb,
489 int len,int odd, struct sk_buff *skb), 478 int len,int odd, struct sk_buff *skb),
490 void *from, int length); 479 void *from, int length);
491 480
492struct skb_seq_state 481struct skb_seq_state {
493{
494 __u32 lower_offset; 482 __u32 lower_offset;
495 __u32 upper_offset; 483 __u32 upper_offset;
496 __u32 frag_idx; 484 __u32 frag_idx;
@@ -745,7 +733,7 @@ static inline struct sk_buff *skb_unshare(struct sk_buff *skb,
745} 733}
746 734
747/** 735/**
748 * skb_peek 736 * skb_peek - peek at the head of an &sk_buff_head
749 * @list_: list to peek at 737 * @list_: list to peek at
750 * 738 *
751 * Peek an &sk_buff. Unlike most other operations you _MUST_ 739 * Peek an &sk_buff. Unlike most other operations you _MUST_
@@ -766,7 +754,7 @@ static inline struct sk_buff *skb_peek(struct sk_buff_head *list_)
766} 754}
767 755
768/** 756/**
769 * skb_peek_tail 757 * skb_peek_tail - peek at the tail of an &sk_buff_head
770 * @list_: list to peek at 758 * @list_: list to peek at
771 * 759 *
772 * Peek an &sk_buff. Unlike most other operations you _MUST_ 760 * Peek an &sk_buff. Unlike most other operations you _MUST_
@@ -1489,6 +1477,16 @@ static inline struct sk_buff *netdev_alloc_skb(struct net_device *dev,
1489 return __netdev_alloc_skb(dev, length, GFP_ATOMIC); 1477 return __netdev_alloc_skb(dev, length, GFP_ATOMIC);
1490} 1478}
1491 1479
1480static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev,
1481 unsigned int length)
1482{
1483 struct sk_buff *skb = netdev_alloc_skb(dev, length + NET_IP_ALIGN);
1484
1485 if (NET_IP_ALIGN && skb)
1486 skb_reserve(skb, NET_IP_ALIGN);
1487 return skb;
1488}
1489
1492extern struct page *__netdev_alloc_page(struct net_device *dev, gfp_t gfp_mask); 1490extern struct page *__netdev_alloc_page(struct net_device *dev, gfp_t gfp_mask);
1493 1491
1494/** 1492/**
diff --git a/include/linux/slab.h b/include/linux/slab.h
index 2da8372519f5..49d1247cd6d9 100644
--- a/include/linux/slab.h
+++ b/include/linux/slab.h
@@ -70,6 +70,11 @@
70#else 70#else
71# define SLAB_NOTRACK 0x00000000UL 71# define SLAB_NOTRACK 0x00000000UL
72#endif 72#endif
73#ifdef CONFIG_FAILSLAB
74# define SLAB_FAILSLAB 0x02000000UL /* Fault injection mark */
75#else
76# define SLAB_FAILSLAB 0x00000000UL
77#endif
73 78
74/* The following flags affect the page allocator grouping pages by mobility */ 79/* The following flags affect the page allocator grouping pages by mobility */
75#define SLAB_RECLAIM_ACCOUNT 0x00020000UL /* Objects are reclaimable */ 80#define SLAB_RECLAIM_ACCOUNT 0x00020000UL /* Objects are reclaimable */
@@ -101,6 +106,7 @@ int kmem_cache_shrink(struct kmem_cache *);
101void kmem_cache_free(struct kmem_cache *, void *); 106void kmem_cache_free(struct kmem_cache *, void *);
102unsigned int kmem_cache_size(struct kmem_cache *); 107unsigned int kmem_cache_size(struct kmem_cache *);
103const char *kmem_cache_name(struct kmem_cache *); 108const char *kmem_cache_name(struct kmem_cache *);
109int kern_ptr_validate(const void *ptr, unsigned long size);
104int kmem_ptr_validate(struct kmem_cache *cachep, const void *ptr); 110int kmem_ptr_validate(struct kmem_cache *cachep, const void *ptr);
105 111
106/* 112/*
diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h
index 850d057500de..ca6b2b317991 100644
--- a/include/linux/slab_def.h
+++ b/include/linux/slab_def.h
@@ -110,7 +110,7 @@ extern struct cache_sizes malloc_sizes[];
110void *kmem_cache_alloc(struct kmem_cache *, gfp_t); 110void *kmem_cache_alloc(struct kmem_cache *, gfp_t);
111void *__kmalloc(size_t size, gfp_t flags); 111void *__kmalloc(size_t size, gfp_t flags);
112 112
113#ifdef CONFIG_KMEMTRACE 113#ifdef CONFIG_TRACING
114extern void *kmem_cache_alloc_notrace(struct kmem_cache *cachep, gfp_t flags); 114extern void *kmem_cache_alloc_notrace(struct kmem_cache *cachep, gfp_t flags);
115extern size_t slab_buffer_size(struct kmem_cache *cachep); 115extern size_t slab_buffer_size(struct kmem_cache *cachep);
116#else 116#else
@@ -166,7 +166,7 @@ found:
166extern void *__kmalloc_node(size_t size, gfp_t flags, int node); 166extern void *__kmalloc_node(size_t size, gfp_t flags, int node);
167extern void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node); 167extern void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node);
168 168
169#ifdef CONFIG_KMEMTRACE 169#ifdef CONFIG_TRACING
170extern void *kmem_cache_alloc_node_notrace(struct kmem_cache *cachep, 170extern void *kmem_cache_alloc_node_notrace(struct kmem_cache *cachep,
171 gfp_t flags, 171 gfp_t flags,
172 int nodeid); 172 int nodeid);
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h
index 5ad70a60fd74..0249d4175bac 100644
--- a/include/linux/slub_def.h
+++ b/include/linux/slub_def.h
@@ -38,8 +38,6 @@ struct kmem_cache_cpu {
38 void **freelist; /* Pointer to first free per cpu object */ 38 void **freelist; /* Pointer to first free per cpu object */
39 struct page *page; /* The slab from which we are allocating */ 39 struct page *page; /* The slab from which we are allocating */
40 int node; /* The node of the page (or -1 for debug) */ 40 int node; /* The node of the page (or -1 for debug) */
41 unsigned int offset; /* Freepointer offset (in word units) */
42 unsigned int objsize; /* Size of an object (from kmem_cache) */
43#ifdef CONFIG_SLUB_STATS 41#ifdef CONFIG_SLUB_STATS
44 unsigned stat[NR_SLUB_STAT_ITEMS]; 42 unsigned stat[NR_SLUB_STAT_ITEMS];
45#endif 43#endif
@@ -69,6 +67,7 @@ struct kmem_cache_order_objects {
69 * Slab cache management. 67 * Slab cache management.
70 */ 68 */
71struct kmem_cache { 69struct kmem_cache {
70 struct kmem_cache_cpu *cpu_slab;
72 /* Used for retriving partial slabs etc */ 71 /* Used for retriving partial slabs etc */
73 unsigned long flags; 72 unsigned long flags;
74 int size; /* The size of an object including meta data */ 73 int size; /* The size of an object including meta data */
@@ -104,11 +103,6 @@ struct kmem_cache {
104 int remote_node_defrag_ratio; 103 int remote_node_defrag_ratio;
105 struct kmem_cache_node *node[MAX_NUMNODES]; 104 struct kmem_cache_node *node[MAX_NUMNODES];
106#endif 105#endif
107#ifdef CONFIG_SMP
108 struct kmem_cache_cpu *cpu_slab[NR_CPUS];
109#else
110 struct kmem_cache_cpu cpu_slab;
111#endif
112}; 106};
113 107
114/* 108/*
@@ -135,11 +129,21 @@ struct kmem_cache {
135 129
136#define SLUB_PAGE_SHIFT (PAGE_SHIFT + 2) 130#define SLUB_PAGE_SHIFT (PAGE_SHIFT + 2)
137 131
132#ifdef CONFIG_ZONE_DMA
133#define SLUB_DMA __GFP_DMA
134/* Reserve extra caches for potential DMA use */
135#define KMALLOC_CACHES (2 * SLUB_PAGE_SHIFT - 6)
136#else
137/* Disable DMA functionality */
138#define SLUB_DMA (__force gfp_t)0
139#define KMALLOC_CACHES SLUB_PAGE_SHIFT
140#endif
141
138/* 142/*
139 * We keep the general caches in an array of slab caches that are used for 143 * We keep the general caches in an array of slab caches that are used for
140 * 2^x bytes of allocations. 144 * 2^x bytes of allocations.
141 */ 145 */
142extern struct kmem_cache kmalloc_caches[SLUB_PAGE_SHIFT]; 146extern struct kmem_cache kmalloc_caches[KMALLOC_CACHES];
143 147
144/* 148/*
145 * Sorry that the following has to be that ugly but some versions of GCC 149 * Sorry that the following has to be that ugly but some versions of GCC
@@ -207,17 +211,10 @@ static __always_inline struct kmem_cache *kmalloc_slab(size_t size)
207 return &kmalloc_caches[index]; 211 return &kmalloc_caches[index];
208} 212}
209 213
210#ifdef CONFIG_ZONE_DMA
211#define SLUB_DMA __GFP_DMA
212#else
213/* Disable DMA functionality */
214#define SLUB_DMA (__force gfp_t)0
215#endif
216
217void *kmem_cache_alloc(struct kmem_cache *, gfp_t); 214void *kmem_cache_alloc(struct kmem_cache *, gfp_t);
218void *__kmalloc(size_t size, gfp_t flags); 215void *__kmalloc(size_t size, gfp_t flags);
219 216
220#ifdef CONFIG_KMEMTRACE 217#ifdef CONFIG_TRACING
221extern void *kmem_cache_alloc_notrace(struct kmem_cache *s, gfp_t gfpflags); 218extern void *kmem_cache_alloc_notrace(struct kmem_cache *s, gfp_t gfpflags);
222#else 219#else
223static __always_inline void * 220static __always_inline void *
@@ -266,7 +263,7 @@ static __always_inline void *kmalloc(size_t size, gfp_t flags)
266void *__kmalloc_node(size_t size, gfp_t flags, int node); 263void *__kmalloc_node(size_t size, gfp_t flags, int node);
267void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node); 264void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node);
268 265
269#ifdef CONFIG_KMEMTRACE 266#ifdef CONFIG_TRACING
270extern void *kmem_cache_alloc_node_notrace(struct kmem_cache *s, 267extern void *kmem_cache_alloc_node_notrace(struct kmem_cache *s,
271 gfp_t gfpflags, 268 gfp_t gfpflags,
272 int node); 269 int node);
diff --git a/include/linux/sm501-regs.h b/include/linux/sm501-regs.h
index d53642d2d899..67ed2c542831 100644
--- a/include/linux/sm501-regs.h
+++ b/include/linux/sm501-regs.h
@@ -31,6 +31,8 @@
31#define SM501_SYSCTRL_PCI_SUBSYS_LOCK (1<<11) 31#define SM501_SYSCTRL_PCI_SUBSYS_LOCK (1<<11)
32#define SM501_SYSCTRL_PCI_BURST_READ_EN (1<<15) 32#define SM501_SYSCTRL_PCI_BURST_READ_EN (1<<15)
33 33
34#define SM501_SYSCTRL_2D_ENGINE_STATUS (1<<19)
35
34/* miscellaneous control */ 36/* miscellaneous control */
35 37
36#define SM501_MISC_CONTROL (0x000004) 38#define SM501_MISC_CONTROL (0x000004)
diff --git a/include/linux/smb_fs_sb.h b/include/linux/smb_fs_sb.h
index 8a060a7040d8..bb947dd1fba9 100644
--- a/include/linux/smb_fs_sb.h
+++ b/include/linux/smb_fs_sb.h
@@ -10,6 +10,7 @@
10#define _SMB_FS_SB 10#define _SMB_FS_SB
11 11
12#include <linux/types.h> 12#include <linux/types.h>
13#include <linux/backing-dev.h>
13#include <linux/smb.h> 14#include <linux/smb.h>
14 15
15/* 16/*
@@ -74,6 +75,8 @@ struct smb_sb_info {
74 struct smb_ops *ops; 75 struct smb_ops *ops;
75 76
76 struct super_block *super_block; 77 struct super_block *super_block;
78
79 struct backing_dev_info bdi;
77}; 80};
78 81
79static inline int 82static inline int
diff --git a/include/linux/smp.h b/include/linux/smp.h
index 76bb3e45351f..f86d40768e7f 100644
--- a/include/linux/smp.h
+++ b/include/linux/smp.h
@@ -76,6 +76,9 @@ void smp_call_function_many(const struct cpumask *mask,
76void __smp_call_function_single(int cpuid, struct call_single_data *data, 76void __smp_call_function_single(int cpuid, struct call_single_data *data,
77 int wait); 77 int wait);
78 78
79int smp_call_function_any(const struct cpumask *mask,
80 void (*func)(void *info), void *info, int wait);
81
79/* 82/*
80 * sends a 'pull timer' event to a remote CPU 83 * sends a 'pull timer' event to a remote CPU
81 */ 84 */
@@ -142,15 +145,21 @@ static inline void smp_send_reschedule(int cpu) { }
142#define smp_prepare_boot_cpu() do {} while (0) 145#define smp_prepare_boot_cpu() do {} while (0)
143#define smp_call_function_many(mask, func, info, wait) \ 146#define smp_call_function_many(mask, func, info, wait) \
144 (up_smp_call_function(func, info)) 147 (up_smp_call_function(func, info))
145static inline void init_call_single_data(void) 148static inline void init_call_single_data(void) { }
149
150static inline int
151smp_call_function_any(const struct cpumask *mask, void (*func)(void *info),
152 void *info, int wait)
146{ 153{
154 return smp_call_function_single(0, func, info, wait);
147} 155}
156
148#endif /* !SMP */ 157#endif /* !SMP */
149 158
150/* 159/*
151 * smp_processor_id(): get the current CPU ID. 160 * smp_processor_id(): get the current CPU ID.
152 * 161 *
153 * if DEBUG_PREEMPT is enabled the we check whether it is 162 * if DEBUG_PREEMPT is enabled then we check whether it is
154 * used in a preemption-safe way. (smp_processor_id() is safe 163 * used in a preemption-safe way. (smp_processor_id() is safe
155 * if it's used in a preemption-off critical section, or in 164 * if it's used in a preemption-off critical section, or in
156 * a thread that is bound to the current CPU.) 165 * a thread that is bound to the current CPU.)
diff --git a/include/linux/smp_lock.h b/include/linux/smp_lock.h
index 813be59bf345..2ea1dd1ba21c 100644
--- a/include/linux/smp_lock.h
+++ b/include/linux/smp_lock.h
@@ -24,8 +24,21 @@ static inline int reacquire_kernel_lock(struct task_struct *task)
24 return 0; 24 return 0;
25} 25}
26 26
27extern void __lockfunc lock_kernel(void) __acquires(kernel_lock); 27extern void __lockfunc
28extern void __lockfunc unlock_kernel(void) __releases(kernel_lock); 28_lock_kernel(const char *func, const char *file, int line)
29__acquires(kernel_lock);
30
31extern void __lockfunc
32_unlock_kernel(const char *func, const char *file, int line)
33__releases(kernel_lock);
34
35#define lock_kernel() do { \
36 _lock_kernel(__func__, __FILE__, __LINE__); \
37} while (0)
38
39#define unlock_kernel() do { \
40 _unlock_kernel(__func__, __FILE__, __LINE__); \
41} while (0)
29 42
30/* 43/*
31 * Various legacy drivers don't really need the BKL in a specific 44 * Various legacy drivers don't really need the BKL in a specific
@@ -41,8 +54,8 @@ static inline void cycle_kernel_lock(void)
41 54
42#else 55#else
43 56
44#define lock_kernel() do { } while(0) 57#define lock_kernel()
45#define unlock_kernel() do { } while(0) 58#define unlock_kernel()
46#define release_kernel_lock(task) do { } while(0) 59#define release_kernel_lock(task) do { } while(0)
47#define cycle_kernel_lock() do { } while(0) 60#define cycle_kernel_lock() do { } while(0)
48#define reacquire_kernel_lock(task) 0 61#define reacquire_kernel_lock(task) 0
diff --git a/include/linux/smsc911x.h b/include/linux/smsc911x.h
index 5241e4fb4eca..7144e8aa1e41 100644
--- a/include/linux/smsc911x.h
+++ b/include/linux/smsc911x.h
@@ -30,6 +30,7 @@ struct smsc911x_platform_config {
30 unsigned int irq_type; 30 unsigned int irq_type;
31 unsigned int flags; 31 unsigned int flags;
32 phy_interface_t phy_interface; 32 phy_interface_t phy_interface;
33 unsigned char mac[6];
33}; 34};
34 35
35/* Constants for platform_device irq polarity configuration */ 36/* Constants for platform_device irq polarity configuration */
diff --git a/include/linux/snmp.h b/include/linux/snmp.h
index 0f953fe40413..4435d1084755 100644
--- a/include/linux/snmp.h
+++ b/include/linux/snmp.h
@@ -225,6 +225,8 @@ enum
225 LINUX_MIB_SACKSHIFTED, 225 LINUX_MIB_SACKSHIFTED,
226 LINUX_MIB_SACKMERGED, 226 LINUX_MIB_SACKMERGED,
227 LINUX_MIB_SACKSHIFTFALLBACK, 227 LINUX_MIB_SACKSHIFTFALLBACK,
228 LINUX_MIB_TCPBACKLOGDROP,
229 LINUX_MIB_TCPMINTTLDROP, /* RFC 5082 */
228 __LINUX_MIB_MAX 230 __LINUX_MIB_MAX
229}; 231};
230 232
@@ -257,6 +259,7 @@ enum
257 LINUX_MIB_XFRMOUTPOLBLOCK, /* XfrmOutPolBlock */ 259 LINUX_MIB_XFRMOUTPOLBLOCK, /* XfrmOutPolBlock */
258 LINUX_MIB_XFRMOUTPOLDEAD, /* XfrmOutPolDead */ 260 LINUX_MIB_XFRMOUTPOLDEAD, /* XfrmOutPolDead */
259 LINUX_MIB_XFRMOUTPOLERROR, /* XfrmOutPolError */ 261 LINUX_MIB_XFRMOUTPOLERROR, /* XfrmOutPolError */
262 LINUX_MIB_XFRMFWDHDRERROR, /* XfrmFwdHdrError*/
260 __LINUX_MIB_XFRMMAX 263 __LINUX_MIB_XFRMMAX
261}; 264};
262 265
diff --git a/include/linux/socket.h b/include/linux/socket.h
index 3273a0c5043b..354cc5617f8b 100644
--- a/include/linux/socket.h
+++ b/include/linux/socket.h
@@ -24,6 +24,9 @@ struct __kernel_sockaddr_storage {
24#include <linux/types.h> /* pid_t */ 24#include <linux/types.h> /* pid_t */
25#include <linux/compiler.h> /* __user */ 25#include <linux/compiler.h> /* __user */
26 26
27#define __sockaddr_check_size(size) \
28 BUILD_BUG_ON(((size) > sizeof(struct __kernel_sockaddr_storage)))
29
27#ifdef __KERNEL__ 30#ifdef __KERNEL__
28# ifdef CONFIG_PROC_FS 31# ifdef CONFIG_PROC_FS
29struct seq_file; 32struct seq_file;
@@ -65,6 +68,12 @@ struct msghdr {
65 unsigned msg_flags; 68 unsigned msg_flags;
66}; 69};
67 70
71/* For recvmmsg/sendmmsg */
72struct mmsghdr {
73 struct msghdr msg_hdr;
74 unsigned msg_len;
75};
76
68/* 77/*
69 * POSIX 1003.1g - ancillary data object information 78 * POSIX 1003.1g - ancillary data object information
70 * Ancillary data consits of a sequence of pairs of 79 * Ancillary data consits of a sequence of pairs of
@@ -246,6 +255,7 @@ struct ucred {
246#define MSG_ERRQUEUE 0x2000 /* Fetch message from error queue */ 255#define MSG_ERRQUEUE 0x2000 /* Fetch message from error queue */
247#define MSG_NOSIGNAL 0x4000 /* Do not generate SIGPIPE */ 256#define MSG_NOSIGNAL 0x4000 /* Do not generate SIGPIPE */
248#define MSG_MORE 0x8000 /* Sender will send more */ 257#define MSG_MORE 0x8000 /* Sender will send more */
258#define MSG_WAITFORONE 0x10000 /* recvmmsg(): block until 1+ packets avail */
249 259
250#define MSG_EOF MSG_FIN 260#define MSG_EOF MSG_FIN
251 261
@@ -312,6 +322,10 @@ extern int move_addr_to_user(struct sockaddr *kaddr, int klen, void __user *uadd
312extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr); 322extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr);
313extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); 323extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data);
314 324
325struct timespec;
326
327extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
328 unsigned int flags, struct timespec *timeout);
315#endif 329#endif
316#endif /* not kernel and not glibc */ 330#endif /* not kernel and not glibc */
317#endif /* _LINUX_SOCKET_H */ 331#endif /* _LINUX_SOCKET_H */
diff --git a/include/linux/sonypi.h b/include/linux/sonypi.h
index 34c4475ac4a2..4f95c1aac2fd 100644
--- a/include/linux/sonypi.h
+++ b/include/linux/sonypi.h
@@ -111,6 +111,7 @@
111#define SONYPI_EVENT_VOLUME_INC_PRESSED 69 111#define SONYPI_EVENT_VOLUME_INC_PRESSED 69
112#define SONYPI_EVENT_VOLUME_DEC_PRESSED 70 112#define SONYPI_EVENT_VOLUME_DEC_PRESSED 70
113#define SONYPI_EVENT_BRIGHTNESS_PRESSED 71 113#define SONYPI_EVENT_BRIGHTNESS_PRESSED 71
114#define SONYPI_EVENT_MEDIA_PRESSED 72
114 115
115/* get/set brightness */ 116/* get/set brightness */
116#define SONYPI_IOCGBRT _IOR('v', 0, __u8) 117#define SONYPI_IOCGBRT _IOR('v', 0, __u8)
diff --git a/include/linux/spi/ad7879.h b/include/linux/spi/ad7879.h
index 4231104c9afa..6334cee1a3be 100644
--- a/include/linux/spi/ad7879.h
+++ b/include/linux/spi/ad7879.h
@@ -28,8 +28,12 @@ struct ad7879_platform_data {
28 * 1 = 4, 2 = 8, 3 = 16 (median > averaging) 28 * 1 = 4, 2 = 8, 3 = 16 (median > averaging)
29 */ 29 */
30 u8 median; 30 u8 median;
31 /* 1 = AUX/VBAT/GPIO set to GPIO Output */ 31 /* 1 = AUX/VBAT/GPIO export GPIO to gpiolib
32 u8 gpio_output; 32 * requires CONFIG_GPIOLIB
33 /* Initial GPIO pin state (valid if gpio_output = 1) */ 33 */
34 u8 gpio_default; 34 bool gpio_export;
35 /* identifies the first GPIO number handled by this chip;
36 * or, if negative, requests dynamic ID allocation.
37 */
38 s32 gpio_base;
35}; 39};
diff --git a/include/linux/spi/ads7846.h b/include/linux/spi/ads7846.h
index 51948eb6927a..b4ae570d3c98 100644
--- a/include/linux/spi/ads7846.h
+++ b/include/linux/spi/ads7846.h
@@ -12,7 +12,7 @@ enum ads7846_filter {
12}; 12};
13 13
14struct ads7846_platform_data { 14struct ads7846_platform_data {
15 u16 model; /* 7843, 7845, 7846. */ 15 u16 model; /* 7843, 7845, 7846, 7873. */
16 u16 vref_delay_usecs; /* 0 for external vref; etc */ 16 u16 vref_delay_usecs; /* 0 for external vref; etc */
17 u16 vref_mv; /* external vref value, milliVolts */ 17 u16 vref_mv; /* external vref value, milliVolts */
18 bool keep_vref_on; /* set to keep vref on for differential 18 bool keep_vref_on; /* set to keep vref on for differential
@@ -53,5 +53,6 @@ struct ads7846_platform_data {
53 int (*filter) (void *filter_data, int data_idx, int *val); 53 int (*filter) (void *filter_data, int data_idx, int *val);
54 void (*filter_cleanup)(void *filter_data); 54 void (*filter_cleanup)(void *filter_data);
55 void (*wait_for_sync)(void); 55 void (*wait_for_sync)(void);
56 bool wakeup;
56}; 57};
57 58
diff --git a/include/linux/spi/dw_spi.h b/include/linux/spi/dw_spi.h
new file mode 100644
index 000000000000..cc813f95a2f2
--- /dev/null
+++ b/include/linux/spi/dw_spi.h
@@ -0,0 +1,217 @@
1#ifndef DW_SPI_HEADER_H
2#define DW_SPI_HEADER_H
3#include <linux/io.h>
4
5/* Bit fields in CTRLR0 */
6#define SPI_DFS_OFFSET 0
7
8#define SPI_FRF_OFFSET 4
9#define SPI_FRF_SPI 0x0
10#define SPI_FRF_SSP 0x1
11#define SPI_FRF_MICROWIRE 0x2
12#define SPI_FRF_RESV 0x3
13
14#define SPI_MODE_OFFSET 6
15#define SPI_SCPH_OFFSET 6
16#define SPI_SCOL_OFFSET 7
17#define SPI_TMOD_OFFSET 8
18#define SPI_TMOD_TR 0x0 /* xmit & recv */
19#define SPI_TMOD_TO 0x1 /* xmit only */
20#define SPI_TMOD_RO 0x2 /* recv only */
21#define SPI_TMOD_EPROMREAD 0x3 /* eeprom read mode */
22
23#define SPI_SLVOE_OFFSET 10
24#define SPI_SRL_OFFSET 11
25#define SPI_CFS_OFFSET 12
26
27/* Bit fields in SR, 7 bits */
28#define SR_MASK 0x7f /* cover 7 bits */
29#define SR_BUSY (1 << 0)
30#define SR_TF_NOT_FULL (1 << 1)
31#define SR_TF_EMPT (1 << 2)
32#define SR_RF_NOT_EMPT (1 << 3)
33#define SR_RF_FULL (1 << 4)
34#define SR_TX_ERR (1 << 5)
35#define SR_DCOL (1 << 6)
36
37/* Bit fields in ISR, IMR, RISR, 7 bits */
38#define SPI_INT_TXEI (1 << 0)
39#define SPI_INT_TXOI (1 << 1)
40#define SPI_INT_RXUI (1 << 2)
41#define SPI_INT_RXOI (1 << 3)
42#define SPI_INT_RXFI (1 << 4)
43#define SPI_INT_MSTI (1 << 5)
44
45/* TX RX interrupt level threshhold, max can be 256 */
46#define SPI_INT_THRESHOLD 32
47
48enum dw_ssi_type {
49 SSI_MOTO_SPI = 0,
50 SSI_TI_SSP,
51 SSI_NS_MICROWIRE,
52};
53
54struct dw_spi_reg {
55 u32 ctrl0;
56 u32 ctrl1;
57 u32 ssienr;
58 u32 mwcr;
59 u32 ser;
60 u32 baudr;
61 u32 txfltr;
62 u32 rxfltr;
63 u32 txflr;
64 u32 rxflr;
65 u32 sr;
66 u32 imr;
67 u32 isr;
68 u32 risr;
69 u32 txoicr;
70 u32 rxoicr;
71 u32 rxuicr;
72 u32 msticr;
73 u32 icr;
74 u32 dmacr;
75 u32 dmatdlr;
76 u32 dmardlr;
77 u32 idr;
78 u32 version;
79 u32 dr; /* Currently oper as 32 bits,
80 though only low 16 bits matters */
81} __packed;
82
83struct dw_spi {
84 struct spi_master *master;
85 struct spi_device *cur_dev;
86 struct device *parent_dev;
87 enum dw_ssi_type type;
88
89 void __iomem *regs;
90 unsigned long paddr;
91 u32 iolen;
92 int irq;
93 u32 fifo_len; /* depth of the FIFO buffer */
94 u32 max_freq; /* max bus freq supported */
95
96 u16 bus_num;
97 u16 num_cs; /* supported slave numbers */
98
99 /* Driver message queue */
100 struct workqueue_struct *workqueue;
101 struct work_struct pump_messages;
102 spinlock_t lock;
103 struct list_head queue;
104 int busy;
105 int run;
106
107 /* Message Transfer pump */
108 struct tasklet_struct pump_transfers;
109
110 /* Current message transfer state info */
111 struct spi_message *cur_msg;
112 struct spi_transfer *cur_transfer;
113 struct chip_data *cur_chip;
114 struct chip_data *prev_chip;
115 size_t len;
116 void *tx;
117 void *tx_end;
118 void *rx;
119 void *rx_end;
120 int dma_mapped;
121 dma_addr_t rx_dma;
122 dma_addr_t tx_dma;
123 size_t rx_map_len;
124 size_t tx_map_len;
125 u8 n_bytes; /* current is a 1/2 bytes op */
126 u8 max_bits_per_word; /* maxim is 16b */
127 u32 dma_width;
128 int cs_change;
129 int (*write)(struct dw_spi *dws);
130 int (*read)(struct dw_spi *dws);
131 irqreturn_t (*transfer_handler)(struct dw_spi *dws);
132 void (*cs_control)(u32 command);
133
134 /* Dma info */
135 int dma_inited;
136 struct dma_chan *txchan;
137 struct dma_chan *rxchan;
138 int txdma_done;
139 int rxdma_done;
140 u64 tx_param;
141 u64 rx_param;
142 struct device *dma_dev;
143 dma_addr_t dma_addr;
144
145 /* Bus interface info */
146 void *priv;
147#ifdef CONFIG_DEBUG_FS
148 struct dentry *debugfs;
149#endif
150};
151
152#define dw_readl(dw, name) \
153 __raw_readl(&(((struct dw_spi_reg *)dw->regs)->name))
154#define dw_writel(dw, name, val) \
155 __raw_writel((val), &(((struct dw_spi_reg *)dw->regs)->name))
156#define dw_readw(dw, name) \
157 __raw_readw(&(((struct dw_spi_reg *)dw->regs)->name))
158#define dw_writew(dw, name, val) \
159 __raw_writew((val), &(((struct dw_spi_reg *)dw->regs)->name))
160
161static inline void spi_enable_chip(struct dw_spi *dws, int enable)
162{
163 dw_writel(dws, ssienr, (enable ? 1 : 0));
164}
165
166static inline void spi_set_clk(struct dw_spi *dws, u16 div)
167{
168 dw_writel(dws, baudr, div);
169}
170
171static inline void spi_chip_sel(struct dw_spi *dws, u16 cs)
172{
173 if (cs > dws->num_cs)
174 return;
175
176 if (dws->cs_control)
177 dws->cs_control(1);
178
179 dw_writel(dws, ser, 1 << cs);
180}
181
182/* Disable IRQ bits */
183static inline void spi_mask_intr(struct dw_spi *dws, u32 mask)
184{
185 u32 new_mask;
186
187 new_mask = dw_readl(dws, imr) & ~mask;
188 dw_writel(dws, imr, new_mask);
189}
190
191/* Enable IRQ bits */
192static inline void spi_umask_intr(struct dw_spi *dws, u32 mask)
193{
194 u32 new_mask;
195
196 new_mask = dw_readl(dws, imr) | mask;
197 dw_writel(dws, imr, new_mask);
198}
199
200/*
201 * Each SPI slave device to work with dw_api controller should
202 * has such a structure claiming its working mode (PIO/DMA etc),
203 * which can be save in the "controller_data" member of the
204 * struct spi_device
205 */
206struct dw_spi_chip {
207 u8 poll_mode; /* 0 for contoller polling mode */
208 u8 type; /* SPI/SSP/Micrwire */
209 u8 enable_dma;
210 void (*cs_control)(u32 command);
211};
212
213extern int dw_spi_add_host(struct dw_spi *dws);
214extern void dw_spi_remove_host(struct dw_spi *dws);
215extern int dw_spi_suspend_host(struct dw_spi *dws);
216extern int dw_spi_resume_host(struct dw_spi *dws);
217#endif /* DW_SPI_HEADER_H */
diff --git a/include/linux/spi/l4f00242t03.h b/include/linux/spi/l4f00242t03.h
new file mode 100644
index 000000000000..aee1dbda4edc
--- /dev/null
+++ b/include/linux/spi/l4f00242t03.h
@@ -0,0 +1,31 @@
1/*
2 * l4f00242t03.h -- Platform glue for Epson L4F00242T03 LCD
3 *
4 * Copyright (c) 2009 Alberto Panizzo <maramaopercheseimorto@gmail.com>
5 * Based on Marek Vasut work in lms283gf05.h
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
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#ifndef _INCLUDE_LINUX_SPI_L4F00242T03_H_
22#define _INCLUDE_LINUX_SPI_L4F00242T03_H_
23
24struct l4f00242t03_pdata {
25 unsigned int reset_gpio;
26 unsigned int data_enable_gpio;
27 const char *io_supply; /* will be set to 1.8 V */
28 const char *core_supply; /* will be set to 2.8 V */
29};
30
31#endif /* _INCLUDE_LINUX_SPI_L4F00242T03_H_ */
diff --git a/include/linux/spi/max7301.h b/include/linux/spi/max7301.h
index 6dfd83f19b4b..34af0a3477bf 100644
--- a/include/linux/spi/max7301.h
+++ b/include/linux/spi/max7301.h
@@ -1,9 +1,27 @@
1#ifndef LINUX_SPI_MAX7301_H 1#ifndef LINUX_SPI_MAX7301_H
2#define LINUX_SPI_MAX7301_H 2#define LINUX_SPI_MAX7301_H
3 3
4#include <linux/gpio.h>
5
6/*
7 * Some registers must be read back to modify.
8 * To save time we cache them here in memory
9 */
10struct max7301 {
11 struct mutex lock;
12 u8 port_config[8]; /* field 0 is unused */
13 u32 out_level; /* cached output levels */
14 struct gpio_chip chip;
15 struct device *dev;
16 int (*write)(struct device *dev, unsigned int reg, unsigned int val);
17 int (*read)(struct device *dev, unsigned int reg);
18};
19
4struct max7301_platform_data { 20struct max7301_platform_data {
5 /* number assigned to the first GPIO */ 21 /* number assigned to the first GPIO */
6 unsigned base; 22 unsigned base;
7}; 23};
8 24
25extern int __max730x_remove(struct device *dev);
26extern int __max730x_probe(struct max7301 *ts);
9#endif 27#endif
diff --git a/include/linux/spi/sh_msiof.h b/include/linux/spi/sh_msiof.h
new file mode 100644
index 000000000000..2e8db3d2d2e5
--- /dev/null
+++ b/include/linux/spi/sh_msiof.h
@@ -0,0 +1,10 @@
1#ifndef __SPI_SH_MSIOF_H__
2#define __SPI_SH_MSIOF_H__
3
4struct sh_msiof_spi_info {
5 int tx_fifo_override;
6 int rx_fifo_override;
7 u16 num_chipselect;
8};
9
10#endif /* __SPI_SH_MSIOF_H__ */
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index 97b60b37f445..af56071b06f9 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -21,6 +21,7 @@
21 21
22#include <linux/device.h> 22#include <linux/device.h>
23#include <linux/mod_devicetable.h> 23#include <linux/mod_devicetable.h>
24#include <linux/slab.h>
24 25
25/* 26/*
26 * INTERFACES between SPI master-side drivers and SPI infrastructure. 27 * INTERFACES between SPI master-side drivers and SPI infrastructure.
diff --git a/include/linux/spi/spi_bitbang.h b/include/linux/spi/spi_bitbang.h
index eed4254bd503..3274c507b8a9 100644
--- a/include/linux/spi/spi_bitbang.h
+++ b/include/linux/spi/spi_bitbang.h
@@ -15,7 +15,7 @@
15 * Some hardware works well with requests at spi_transfer scope: 15 * Some hardware works well with requests at spi_transfer scope:
16 * 16 *
17 * - Drivers leveraging smarter hardware, with fifos or DMA; or for half 17 * - Drivers leveraging smarter hardware, with fifos or DMA; or for half
18 * duplex (MicroWire) controllers. Provide chipslect() and txrx_bufs(), 18 * duplex (MicroWire) controllers. Provide chipselect() and txrx_bufs(),
19 * and custom setup()/cleanup() methods. 19 * and custom setup()/cleanup() methods.
20 */ 20 */
21 21
diff --git a/include/linux/spi/wl12xx.h b/include/linux/spi/wl12xx.h
index 11430cab2aad..aed64ed3dc8a 100644
--- a/include/linux/spi/wl12xx.h
+++ b/include/linux/spi/wl12xx.h
@@ -26,6 +26,7 @@
26 26
27struct wl12xx_platform_data { 27struct wl12xx_platform_data {
28 void (*set_power)(bool enable); 28 void (*set_power)(bool enable);
29 bool use_eeprom;
29}; 30};
30 31
31#endif 32#endif
diff --git a/include/linux/spi/xilinx_spi.h b/include/linux/spi/xilinx_spi.h
new file mode 100644
index 000000000000..6f17278810b0
--- /dev/null
+++ b/include/linux/spi/xilinx_spi.h
@@ -0,0 +1,20 @@
1#ifndef __LINUX_SPI_XILINX_SPI_H
2#define __LINUX_SPI_XILINX_SPI_H
3
4/**
5 * struct xspi_platform_data - Platform data of the Xilinx SPI driver
6 * @num_chipselect: Number of chip select by the IP.
7 * @little_endian: If registers should be accessed little endian or not.
8 * @bits_per_word: Number of bits per word.
9 * @devices: Devices to add when the driver is probed.
10 * @num_devices: Number of devices in the devices array.
11 */
12struct xspi_platform_data {
13 u16 num_chipselect;
14 bool little_endian;
15 u8 bits_per_word;
16 struct spi_board_info *devices;
17 u8 num_devices;
18};
19
20#endif /* __LINUX_SPI_XILINX_SPI_H */
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h
index f0ca7a7a1757..89fac6a3f78b 100644
--- a/include/linux/spinlock.h
+++ b/include/linux/spinlock.h
@@ -8,13 +8,13 @@
8 * 8 *
9 * on SMP builds: 9 * on SMP builds:
10 * 10 *
11 * asm/spinlock_types.h: contains the raw_spinlock_t/raw_rwlock_t and the 11 * asm/spinlock_types.h: contains the arch_spinlock_t/arch_rwlock_t and the
12 * initializers 12 * initializers
13 * 13 *
14 * linux/spinlock_types.h: 14 * linux/spinlock_types.h:
15 * defines the generic type and initializers 15 * defines the generic type and initializers
16 * 16 *
17 * asm/spinlock.h: contains the __raw_spin_*()/etc. lowlevel 17 * asm/spinlock.h: contains the arch_spin_*()/etc. lowlevel
18 * implementations, mostly inline assembly code 18 * implementations, mostly inline assembly code
19 * 19 *
20 * (also included on UP-debug builds:) 20 * (also included on UP-debug builds:)
@@ -34,7 +34,7 @@
34 * defines the generic type and initializers 34 * defines the generic type and initializers
35 * 35 *
36 * linux/spinlock_up.h: 36 * linux/spinlock_up.h:
37 * contains the __raw_spin_*()/etc. version of UP 37 * contains the arch_spin_*()/etc. version of UP
38 * builds. (which are NOPs on non-debug, non-preempt 38 * builds. (which are NOPs on non-debug, non-preempt
39 * builds) 39 * builds)
40 * 40 *
@@ -75,14 +75,12 @@
75#define __lockfunc __attribute__((section(".spinlock.text"))) 75#define __lockfunc __attribute__((section(".spinlock.text")))
76 76
77/* 77/*
78 * Pull the raw_spinlock_t and raw_rwlock_t definitions: 78 * Pull the arch_spinlock_t and arch_rwlock_t definitions:
79 */ 79 */
80#include <linux/spinlock_types.h> 80#include <linux/spinlock_types.h>
81 81
82extern int __lockfunc generic__raw_read_trylock(raw_rwlock_t *lock);
83
84/* 82/*
85 * Pull the __raw*() functions/declarations (UP-nondebug doesnt need them): 83 * Pull the arch_spin*() functions/declarations (UP-nondebug doesnt need them):
86 */ 84 */
87#ifdef CONFIG_SMP 85#ifdef CONFIG_SMP
88# include <asm/spinlock.h> 86# include <asm/spinlock.h>
@@ -91,45 +89,31 @@ extern int __lockfunc generic__raw_read_trylock(raw_rwlock_t *lock);
91#endif 89#endif
92 90
93#ifdef CONFIG_DEBUG_SPINLOCK 91#ifdef CONFIG_DEBUG_SPINLOCK
94 extern void __spin_lock_init(spinlock_t *lock, const char *name, 92 extern void __raw_spin_lock_init(raw_spinlock_t *lock, const char *name,
95 struct lock_class_key *key); 93 struct lock_class_key *key);
96# define spin_lock_init(lock) \ 94# define raw_spin_lock_init(lock) \
97do { \ 95do { \
98 static struct lock_class_key __key; \ 96 static struct lock_class_key __key; \
99 \ 97 \
100 __spin_lock_init((lock), #lock, &__key); \ 98 __raw_spin_lock_init((lock), #lock, &__key); \
101} while (0) 99} while (0)
102 100
103#else 101#else
104# define spin_lock_init(lock) \ 102# define raw_spin_lock_init(lock) \
105 do { *(lock) = SPIN_LOCK_UNLOCKED; } while (0) 103 do { *(lock) = __RAW_SPIN_LOCK_UNLOCKED(lock); } while (0)
106#endif
107
108#ifdef CONFIG_DEBUG_SPINLOCK
109 extern void __rwlock_init(rwlock_t *lock, const char *name,
110 struct lock_class_key *key);
111# define rwlock_init(lock) \
112do { \
113 static struct lock_class_key __key; \
114 \
115 __rwlock_init((lock), #lock, &__key); \
116} while (0)
117#else
118# define rwlock_init(lock) \
119 do { *(lock) = RW_LOCK_UNLOCKED; } while (0)
120#endif 104#endif
121 105
122#define spin_is_locked(lock) __raw_spin_is_locked(&(lock)->raw_lock) 106#define raw_spin_is_locked(lock) arch_spin_is_locked(&(lock)->raw_lock)
123 107
124#ifdef CONFIG_GENERIC_LOCKBREAK 108#ifdef CONFIG_GENERIC_LOCKBREAK
125#define spin_is_contended(lock) ((lock)->break_lock) 109#define raw_spin_is_contended(lock) ((lock)->break_lock)
126#else 110#else
127 111
128#ifdef __raw_spin_is_contended 112#ifdef arch_spin_is_contended
129#define spin_is_contended(lock) __raw_spin_is_contended(&(lock)->raw_lock) 113#define raw_spin_is_contended(lock) arch_spin_is_contended(&(lock)->raw_lock)
130#else 114#else
131#define spin_is_contended(lock) (((void)(lock), 0)) 115#define raw_spin_is_contended(lock) (((void)(lock), 0))
132#endif /*__raw_spin_is_contended*/ 116#endif /*arch_spin_is_contended*/
133#endif 117#endif
134 118
135/* The lock does not imply full memory barrier. */ 119/* The lock does not imply full memory barrier. */
@@ -138,182 +122,263 @@ static inline void smp_mb__after_lock(void) { smp_mb(); }
138#endif 122#endif
139 123
140/** 124/**
141 * spin_unlock_wait - wait until the spinlock gets unlocked 125 * raw_spin_unlock_wait - wait until the spinlock gets unlocked
142 * @lock: the spinlock in question. 126 * @lock: the spinlock in question.
143 */ 127 */
144#define spin_unlock_wait(lock) __raw_spin_unlock_wait(&(lock)->raw_lock) 128#define raw_spin_unlock_wait(lock) arch_spin_unlock_wait(&(lock)->raw_lock)
145 129
146#ifdef CONFIG_DEBUG_SPINLOCK 130#ifdef CONFIG_DEBUG_SPINLOCK
147 extern void _raw_spin_lock(spinlock_t *lock); 131 extern void do_raw_spin_lock(raw_spinlock_t *lock) __acquires(lock);
148#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock) 132#define do_raw_spin_lock_flags(lock, flags) do_raw_spin_lock(lock)
149 extern int _raw_spin_trylock(spinlock_t *lock); 133 extern int do_raw_spin_trylock(raw_spinlock_t *lock);
150 extern void _raw_spin_unlock(spinlock_t *lock); 134 extern void do_raw_spin_unlock(raw_spinlock_t *lock) __releases(lock);
151 extern void _raw_read_lock(rwlock_t *lock);
152#define _raw_read_lock_flags(lock, flags) _raw_read_lock(lock)
153 extern int _raw_read_trylock(rwlock_t *lock);
154 extern void _raw_read_unlock(rwlock_t *lock);
155 extern void _raw_write_lock(rwlock_t *lock);
156#define _raw_write_lock_flags(lock, flags) _raw_write_lock(lock)
157 extern int _raw_write_trylock(rwlock_t *lock);
158 extern void _raw_write_unlock(rwlock_t *lock);
159#else 135#else
160# define _raw_spin_lock(lock) __raw_spin_lock(&(lock)->raw_lock) 136static inline void do_raw_spin_lock(raw_spinlock_t *lock) __acquires(lock)
161# define _raw_spin_lock_flags(lock, flags) \ 137{
162 __raw_spin_lock_flags(&(lock)->raw_lock, *(flags)) 138 __acquire(lock);
163# define _raw_spin_trylock(lock) __raw_spin_trylock(&(lock)->raw_lock) 139 arch_spin_lock(&lock->raw_lock);
164# define _raw_spin_unlock(lock) __raw_spin_unlock(&(lock)->raw_lock) 140}
165# define _raw_read_lock(rwlock) __raw_read_lock(&(rwlock)->raw_lock) 141
166# define _raw_read_lock_flags(lock, flags) \ 142static inline void
167 __raw_read_lock_flags(&(lock)->raw_lock, *(flags)) 143do_raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long *flags) __acquires(lock)
168# define _raw_read_trylock(rwlock) __raw_read_trylock(&(rwlock)->raw_lock) 144{
169# define _raw_read_unlock(rwlock) __raw_read_unlock(&(rwlock)->raw_lock) 145 __acquire(lock);
170# define _raw_write_lock(rwlock) __raw_write_lock(&(rwlock)->raw_lock) 146 arch_spin_lock_flags(&lock->raw_lock, *flags);
171# define _raw_write_lock_flags(lock, flags) \ 147}
172 __raw_write_lock_flags(&(lock)->raw_lock, *(flags)) 148
173# define _raw_write_trylock(rwlock) __raw_write_trylock(&(rwlock)->raw_lock) 149static inline int do_raw_spin_trylock(raw_spinlock_t *lock)
174# define _raw_write_unlock(rwlock) __raw_write_unlock(&(rwlock)->raw_lock) 150{
151 return arch_spin_trylock(&(lock)->raw_lock);
152}
153
154static inline void do_raw_spin_unlock(raw_spinlock_t *lock) __releases(lock)
155{
156 arch_spin_unlock(&lock->raw_lock);
157 __release(lock);
158}
175#endif 159#endif
176 160
177#define read_can_lock(rwlock) __raw_read_can_lock(&(rwlock)->raw_lock)
178#define write_can_lock(rwlock) __raw_write_can_lock(&(rwlock)->raw_lock)
179
180/* 161/*
181 * Define the various spin_lock and rw_lock methods. Note we define these 162 * Define the various spin_lock methods. Note we define these
182 * regardless of whether CONFIG_SMP or CONFIG_PREEMPT are set. The various 163 * regardless of whether CONFIG_SMP or CONFIG_PREEMPT are set. The
183 * methods are defined as nops in the case they are not required. 164 * various methods are defined as nops in the case they are not
165 * required.
184 */ 166 */
185#define spin_trylock(lock) __cond_lock(lock, _spin_trylock(lock)) 167#define raw_spin_trylock(lock) __cond_lock(lock, _raw_spin_trylock(lock))
186#define read_trylock(lock) __cond_lock(lock, _read_trylock(lock))
187#define write_trylock(lock) __cond_lock(lock, _write_trylock(lock))
188 168
189#define spin_lock(lock) _spin_lock(lock) 169#define raw_spin_lock(lock) _raw_spin_lock(lock)
190 170
191#ifdef CONFIG_DEBUG_LOCK_ALLOC 171#ifdef CONFIG_DEBUG_LOCK_ALLOC
192# define spin_lock_nested(lock, subclass) _spin_lock_nested(lock, subclass) 172# define raw_spin_lock_nested(lock, subclass) \
193# define spin_lock_nest_lock(lock, nest_lock) \ 173 _raw_spin_lock_nested(lock, subclass)
174
175# define raw_spin_lock_nest_lock(lock, nest_lock) \
194 do { \ 176 do { \
195 typecheck(struct lockdep_map *, &(nest_lock)->dep_map);\ 177 typecheck(struct lockdep_map *, &(nest_lock)->dep_map);\
196 _spin_lock_nest_lock(lock, &(nest_lock)->dep_map); \ 178 _raw_spin_lock_nest_lock(lock, &(nest_lock)->dep_map); \
197 } while (0) 179 } while (0)
198#else 180#else
199# define spin_lock_nested(lock, subclass) _spin_lock(lock) 181# define raw_spin_lock_nested(lock, subclass) _raw_spin_lock(lock)
200# define spin_lock_nest_lock(lock, nest_lock) _spin_lock(lock) 182# define raw_spin_lock_nest_lock(lock, nest_lock) _raw_spin_lock(lock)
201#endif 183#endif
202 184
203#define write_lock(lock) _write_lock(lock)
204#define read_lock(lock) _read_lock(lock)
205
206#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) 185#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
207 186
208#define spin_lock_irqsave(lock, flags) \ 187#define raw_spin_lock_irqsave(lock, flags) \
209 do { \ 188 do { \
210 typecheck(unsigned long, flags); \ 189 typecheck(unsigned long, flags); \
211 flags = _spin_lock_irqsave(lock); \ 190 flags = _raw_spin_lock_irqsave(lock); \
212 } while (0)
213#define read_lock_irqsave(lock, flags) \
214 do { \
215 typecheck(unsigned long, flags); \
216 flags = _read_lock_irqsave(lock); \
217 } while (0)
218#define write_lock_irqsave(lock, flags) \
219 do { \
220 typecheck(unsigned long, flags); \
221 flags = _write_lock_irqsave(lock); \
222 } while (0) 191 } while (0)
223 192
224#ifdef CONFIG_DEBUG_LOCK_ALLOC 193#ifdef CONFIG_DEBUG_LOCK_ALLOC
225#define spin_lock_irqsave_nested(lock, flags, subclass) \ 194#define raw_spin_lock_irqsave_nested(lock, flags, subclass) \
226 do { \ 195 do { \
227 typecheck(unsigned long, flags); \ 196 typecheck(unsigned long, flags); \
228 flags = _spin_lock_irqsave_nested(lock, subclass); \ 197 flags = _raw_spin_lock_irqsave_nested(lock, subclass); \
229 } while (0) 198 } while (0)
230#else 199#else
231#define spin_lock_irqsave_nested(lock, flags, subclass) \ 200#define raw_spin_lock_irqsave_nested(lock, flags, subclass) \
232 do { \ 201 do { \
233 typecheck(unsigned long, flags); \ 202 typecheck(unsigned long, flags); \
234 flags = _spin_lock_irqsave(lock); \ 203 flags = _raw_spin_lock_irqsave(lock); \
235 } while (0) 204 } while (0)
236#endif 205#endif
237 206
238#else 207#else
239 208
240#define spin_lock_irqsave(lock, flags) \ 209#define raw_spin_lock_irqsave(lock, flags) \
241 do { \
242 typecheck(unsigned long, flags); \
243 _spin_lock_irqsave(lock, flags); \
244 } while (0)
245#define read_lock_irqsave(lock, flags) \
246 do { \ 210 do { \
247 typecheck(unsigned long, flags); \ 211 typecheck(unsigned long, flags); \
248 _read_lock_irqsave(lock, flags); \ 212 _raw_spin_lock_irqsave(lock, flags); \
249 } while (0) 213 } while (0)
250#define write_lock_irqsave(lock, flags) \ 214
251 do { \ 215#define raw_spin_lock_irqsave_nested(lock, flags, subclass) \
252 typecheck(unsigned long, flags); \ 216 raw_spin_lock_irqsave(lock, flags)
253 _write_lock_irqsave(lock, flags); \
254 } while (0)
255#define spin_lock_irqsave_nested(lock, flags, subclass) \
256 spin_lock_irqsave(lock, flags)
257 217
258#endif 218#endif
259 219
260#define spin_lock_irq(lock) _spin_lock_irq(lock) 220#define raw_spin_lock_irq(lock) _raw_spin_lock_irq(lock)
261#define spin_lock_bh(lock) _spin_lock_bh(lock) 221#define raw_spin_lock_bh(lock) _raw_spin_lock_bh(lock)
262#define read_lock_irq(lock) _read_lock_irq(lock) 222#define raw_spin_unlock(lock) _raw_spin_unlock(lock)
263#define read_lock_bh(lock) _read_lock_bh(lock) 223#define raw_spin_unlock_irq(lock) _raw_spin_unlock_irq(lock)
264#define write_lock_irq(lock) _write_lock_irq(lock)
265#define write_lock_bh(lock) _write_lock_bh(lock)
266#define spin_unlock(lock) _spin_unlock(lock)
267#define read_unlock(lock) _read_unlock(lock)
268#define write_unlock(lock) _write_unlock(lock)
269#define spin_unlock_irq(lock) _spin_unlock_irq(lock)
270#define read_unlock_irq(lock) _read_unlock_irq(lock)
271#define write_unlock_irq(lock) _write_unlock_irq(lock)
272
273#define spin_unlock_irqrestore(lock, flags) \
274 do { \
275 typecheck(unsigned long, flags); \
276 _spin_unlock_irqrestore(lock, flags); \
277 } while (0)
278#define spin_unlock_bh(lock) _spin_unlock_bh(lock)
279 224
280#define read_unlock_irqrestore(lock, flags) \ 225#define raw_spin_unlock_irqrestore(lock, flags) \
281 do { \ 226 do { \
282 typecheck(unsigned long, flags); \ 227 typecheck(unsigned long, flags); \
283 _read_unlock_irqrestore(lock, flags); \ 228 _raw_spin_unlock_irqrestore(lock, flags); \
284 } while (0) 229 } while (0)
285#define read_unlock_bh(lock) _read_unlock_bh(lock) 230#define raw_spin_unlock_bh(lock) _raw_spin_unlock_bh(lock)
286 231
287#define write_unlock_irqrestore(lock, flags) \ 232#define raw_spin_trylock_bh(lock) \
288 do { \ 233 __cond_lock(lock, _raw_spin_trylock_bh(lock))
289 typecheck(unsigned long, flags); \
290 _write_unlock_irqrestore(lock, flags); \
291 } while (0)
292#define write_unlock_bh(lock) _write_unlock_bh(lock)
293 234
294#define spin_trylock_bh(lock) __cond_lock(lock, _spin_trylock_bh(lock)) 235#define raw_spin_trylock_irq(lock) \
295
296#define spin_trylock_irq(lock) \
297({ \ 236({ \
298 local_irq_disable(); \ 237 local_irq_disable(); \
299 spin_trylock(lock) ? \ 238 raw_spin_trylock(lock) ? \
300 1 : ({ local_irq_enable(); 0; }); \ 239 1 : ({ local_irq_enable(); 0; }); \
301}) 240})
302 241
303#define spin_trylock_irqsave(lock, flags) \ 242#define raw_spin_trylock_irqsave(lock, flags) \
304({ \ 243({ \
305 local_irq_save(flags); \ 244 local_irq_save(flags); \
306 spin_trylock(lock) ? \ 245 raw_spin_trylock(lock) ? \
307 1 : ({ local_irq_restore(flags); 0; }); \ 246 1 : ({ local_irq_restore(flags); 0; }); \
308}) 247})
309 248
310#define write_trylock_irqsave(lock, flags) \ 249/**
311({ \ 250 * raw_spin_can_lock - would raw_spin_trylock() succeed?
312 local_irq_save(flags); \ 251 * @lock: the spinlock in question.
313 write_trylock(lock) ? \ 252 */
314 1 : ({ local_irq_restore(flags); 0; }); \ 253#define raw_spin_can_lock(lock) (!raw_spin_is_locked(lock))
254
255/* Include rwlock functions */
256#include <linux/rwlock.h>
257
258/*
259 * Pull the _spin_*()/_read_*()/_write_*() functions/declarations:
260 */
261#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
262# include <linux/spinlock_api_smp.h>
263#else
264# include <linux/spinlock_api_up.h>
265#endif
266
267/*
268 * Map the spin_lock functions to the raw variants for PREEMPT_RT=n
269 */
270
271static inline raw_spinlock_t *spinlock_check(spinlock_t *lock)
272{
273 return &lock->rlock;
274}
275
276#define spin_lock_init(_lock) \
277do { \
278 spinlock_check(_lock); \
279 raw_spin_lock_init(&(_lock)->rlock); \
280} while (0)
281
282static inline void spin_lock(spinlock_t *lock)
283{
284 raw_spin_lock(&lock->rlock);
285}
286
287static inline void spin_lock_bh(spinlock_t *lock)
288{
289 raw_spin_lock_bh(&lock->rlock);
290}
291
292static inline int spin_trylock(spinlock_t *lock)
293{
294 return raw_spin_trylock(&lock->rlock);
295}
296
297#define spin_lock_nested(lock, subclass) \
298do { \
299 raw_spin_lock_nested(spinlock_check(lock), subclass); \
300} while (0)
301
302#define spin_lock_nest_lock(lock, nest_lock) \
303do { \
304 raw_spin_lock_nest_lock(spinlock_check(lock), nest_lock); \
305} while (0)
306
307static inline void spin_lock_irq(spinlock_t *lock)
308{
309 raw_spin_lock_irq(&lock->rlock);
310}
311
312#define spin_lock_irqsave(lock, flags) \
313do { \
314 raw_spin_lock_irqsave(spinlock_check(lock), flags); \
315} while (0)
316
317#define spin_lock_irqsave_nested(lock, flags, subclass) \
318do { \
319 raw_spin_lock_irqsave_nested(spinlock_check(lock), flags, subclass); \
320} while (0)
321
322static inline void spin_unlock(spinlock_t *lock)
323{
324 raw_spin_unlock(&lock->rlock);
325}
326
327static inline void spin_unlock_bh(spinlock_t *lock)
328{
329 raw_spin_unlock_bh(&lock->rlock);
330}
331
332static inline void spin_unlock_irq(spinlock_t *lock)
333{
334 raw_spin_unlock_irq(&lock->rlock);
335}
336
337static inline void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags)
338{
339 raw_spin_unlock_irqrestore(&lock->rlock, flags);
340}
341
342static inline int spin_trylock_bh(spinlock_t *lock)
343{
344 return raw_spin_trylock_bh(&lock->rlock);
345}
346
347static inline int spin_trylock_irq(spinlock_t *lock)
348{
349 return raw_spin_trylock_irq(&lock->rlock);
350}
351
352#define spin_trylock_irqsave(lock, flags) \
353({ \
354 raw_spin_trylock_irqsave(spinlock_check(lock), flags); \
315}) 355})
316 356
357static inline void spin_unlock_wait(spinlock_t *lock)
358{
359 raw_spin_unlock_wait(&lock->rlock);
360}
361
362static inline int spin_is_locked(spinlock_t *lock)
363{
364 return raw_spin_is_locked(&lock->rlock);
365}
366
367static inline int spin_is_contended(spinlock_t *lock)
368{
369 return raw_spin_is_contended(&lock->rlock);
370}
371
372static inline int spin_can_lock(spinlock_t *lock)
373{
374 return raw_spin_can_lock(&lock->rlock);
375}
376
377static inline void assert_spin_locked(spinlock_t *lock)
378{
379 assert_raw_spin_locked(&lock->rlock);
380}
381
317/* 382/*
318 * Pull the atomic_t declaration: 383 * Pull the atomic_t declaration:
319 * (asm-mips/atomic.h needs above definitions) 384 * (asm-mips/atomic.h needs above definitions)
@@ -331,19 +396,4 @@ extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock);
331#define atomic_dec_and_lock(atomic, lock) \ 396#define atomic_dec_and_lock(atomic, lock) \
332 __cond_lock(lock, _atomic_dec_and_lock(atomic, lock)) 397 __cond_lock(lock, _atomic_dec_and_lock(atomic, lock))
333 398
334/**
335 * spin_can_lock - would spin_trylock() succeed?
336 * @lock: the spinlock in question.
337 */
338#define spin_can_lock(lock) (!spin_is_locked(lock))
339
340/*
341 * Pull the _spin_*()/_read_*()/_write_*() functions/declarations:
342 */
343#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
344# include <linux/spinlock_api_smp.h>
345#else
346# include <linux/spinlock_api_up.h>
347#endif
348
349#endif /* __LINUX_SPINLOCK_H */ 399#endif /* __LINUX_SPINLOCK_H */
diff --git a/include/linux/spinlock_api_smp.h b/include/linux/spinlock_api_smp.h
index 7a7e18fc2415..e253ccd7a604 100644
--- a/include/linux/spinlock_api_smp.h
+++ b/include/linux/spinlock_api_smp.h
@@ -17,184 +17,76 @@
17 17
18int in_lock_functions(unsigned long addr); 18int in_lock_functions(unsigned long addr);
19 19
20#define assert_spin_locked(x) BUG_ON(!spin_is_locked(x)) 20#define assert_raw_spin_locked(x) BUG_ON(!raw_spin_is_locked(x))
21 21
22void __lockfunc _spin_lock(spinlock_t *lock) __acquires(lock); 22void __lockfunc _raw_spin_lock(raw_spinlock_t *lock) __acquires(lock);
23void __lockfunc _spin_lock_nested(spinlock_t *lock, int subclass) 23void __lockfunc _raw_spin_lock_nested(raw_spinlock_t *lock, int subclass)
24 __acquires(lock); 24 __acquires(lock);
25void __lockfunc _spin_lock_nest_lock(spinlock_t *lock, struct lockdep_map *map) 25void __lockfunc
26 __acquires(lock); 26_raw_spin_lock_nest_lock(raw_spinlock_t *lock, struct lockdep_map *map)
27void __lockfunc _read_lock(rwlock_t *lock) __acquires(lock); 27 __acquires(lock);
28void __lockfunc _write_lock(rwlock_t *lock) __acquires(lock); 28void __lockfunc _raw_spin_lock_bh(raw_spinlock_t *lock) __acquires(lock);
29void __lockfunc _spin_lock_bh(spinlock_t *lock) __acquires(lock); 29void __lockfunc _raw_spin_lock_irq(raw_spinlock_t *lock)
30void __lockfunc _read_lock_bh(rwlock_t *lock) __acquires(lock); 30 __acquires(lock);
31void __lockfunc _write_lock_bh(rwlock_t *lock) __acquires(lock);
32void __lockfunc _spin_lock_irq(spinlock_t *lock) __acquires(lock);
33void __lockfunc _read_lock_irq(rwlock_t *lock) __acquires(lock);
34void __lockfunc _write_lock_irq(rwlock_t *lock) __acquires(lock);
35unsigned long __lockfunc _spin_lock_irqsave(spinlock_t *lock)
36 __acquires(lock);
37unsigned long __lockfunc _spin_lock_irqsave_nested(spinlock_t *lock, int subclass)
38 __acquires(lock);
39unsigned long __lockfunc _read_lock_irqsave(rwlock_t *lock)
40 __acquires(lock);
41unsigned long __lockfunc _write_lock_irqsave(rwlock_t *lock)
42 __acquires(lock);
43int __lockfunc _spin_trylock(spinlock_t *lock);
44int __lockfunc _read_trylock(rwlock_t *lock);
45int __lockfunc _write_trylock(rwlock_t *lock);
46int __lockfunc _spin_trylock_bh(spinlock_t *lock);
47void __lockfunc _spin_unlock(spinlock_t *lock) __releases(lock);
48void __lockfunc _read_unlock(rwlock_t *lock) __releases(lock);
49void __lockfunc _write_unlock(rwlock_t *lock) __releases(lock);
50void __lockfunc _spin_unlock_bh(spinlock_t *lock) __releases(lock);
51void __lockfunc _read_unlock_bh(rwlock_t *lock) __releases(lock);
52void __lockfunc _write_unlock_bh(rwlock_t *lock) __releases(lock);
53void __lockfunc _spin_unlock_irq(spinlock_t *lock) __releases(lock);
54void __lockfunc _read_unlock_irq(rwlock_t *lock) __releases(lock);
55void __lockfunc _write_unlock_irq(rwlock_t *lock) __releases(lock);
56void __lockfunc _spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags)
57 __releases(lock);
58void __lockfunc _read_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
59 __releases(lock);
60void __lockfunc _write_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
61 __releases(lock);
62 31
63/* 32unsigned long __lockfunc _raw_spin_lock_irqsave(raw_spinlock_t *lock)
64 * We inline the unlock functions in the nondebug case: 33 __acquires(lock);
65 */ 34unsigned long __lockfunc
66#if !defined(CONFIG_DEBUG_SPINLOCK) && !defined(CONFIG_PREEMPT) 35_raw_spin_lock_irqsave_nested(raw_spinlock_t *lock, int subclass)
67#define __always_inline__spin_unlock 36 __acquires(lock);
68#define __always_inline__read_unlock 37int __lockfunc _raw_spin_trylock(raw_spinlock_t *lock);
69#define __always_inline__write_unlock 38int __lockfunc _raw_spin_trylock_bh(raw_spinlock_t *lock);
70#define __always_inline__spin_unlock_irq 39void __lockfunc _raw_spin_unlock(raw_spinlock_t *lock) __releases(lock);
71#define __always_inline__read_unlock_irq 40void __lockfunc _raw_spin_unlock_bh(raw_spinlock_t *lock) __releases(lock);
72#define __always_inline__write_unlock_irq 41void __lockfunc _raw_spin_unlock_irq(raw_spinlock_t *lock) __releases(lock);
73#endif 42void __lockfunc
74 43_raw_spin_unlock_irqrestore(raw_spinlock_t *lock, unsigned long flags)
75#ifndef CONFIG_DEBUG_SPINLOCK 44 __releases(lock);
76#ifndef CONFIG_GENERIC_LOCKBREAK
77
78#ifdef __always_inline__spin_lock
79#define _spin_lock(lock) __spin_lock(lock)
80#endif
81
82#ifdef __always_inline__read_lock
83#define _read_lock(lock) __read_lock(lock)
84#endif
85
86#ifdef __always_inline__write_lock
87#define _write_lock(lock) __write_lock(lock)
88#endif
89
90#ifdef __always_inline__spin_lock_bh
91#define _spin_lock_bh(lock) __spin_lock_bh(lock)
92#endif
93
94#ifdef __always_inline__read_lock_bh
95#define _read_lock_bh(lock) __read_lock_bh(lock)
96#endif
97
98#ifdef __always_inline__write_lock_bh
99#define _write_lock_bh(lock) __write_lock_bh(lock)
100#endif
101
102#ifdef __always_inline__spin_lock_irq
103#define _spin_lock_irq(lock) __spin_lock_irq(lock)
104#endif
105 45
106#ifdef __always_inline__read_lock_irq 46#ifdef CONFIG_INLINE_SPIN_LOCK
107#define _read_lock_irq(lock) __read_lock_irq(lock) 47#define _raw_spin_lock(lock) __raw_spin_lock(lock)
108#endif 48#endif
109 49
110#ifdef __always_inline__write_lock_irq 50#ifdef CONFIG_INLINE_SPIN_LOCK_BH
111#define _write_lock_irq(lock) __write_lock_irq(lock) 51#define _raw_spin_lock_bh(lock) __raw_spin_lock_bh(lock)
112#endif 52#endif
113 53
114#ifdef __always_inline__spin_lock_irqsave 54#ifdef CONFIG_INLINE_SPIN_LOCK_IRQ
115#define _spin_lock_irqsave(lock) __spin_lock_irqsave(lock) 55#define _raw_spin_lock_irq(lock) __raw_spin_lock_irq(lock)
116#endif 56#endif
117 57
118#ifdef __always_inline__read_lock_irqsave 58#ifdef CONFIG_INLINE_SPIN_LOCK_IRQSAVE
119#define _read_lock_irqsave(lock) __read_lock_irqsave(lock) 59#define _raw_spin_lock_irqsave(lock) __raw_spin_lock_irqsave(lock)
120#endif 60#endif
121 61
122#ifdef __always_inline__write_lock_irqsave 62#ifdef CONFIG_INLINE_SPIN_TRYLOCK
123#define _write_lock_irqsave(lock) __write_lock_irqsave(lock) 63#define _raw_spin_trylock(lock) __raw_spin_trylock(lock)
124#endif 64#endif
125 65
126#endif /* !CONFIG_GENERIC_LOCKBREAK */ 66#ifdef CONFIG_INLINE_SPIN_TRYLOCK_BH
127 67#define _raw_spin_trylock_bh(lock) __raw_spin_trylock_bh(lock)
128#ifdef __always_inline__spin_trylock
129#define _spin_trylock(lock) __spin_trylock(lock)
130#endif
131
132#ifdef __always_inline__read_trylock
133#define _read_trylock(lock) __read_trylock(lock)
134#endif
135
136#ifdef __always_inline__write_trylock
137#define _write_trylock(lock) __write_trylock(lock)
138#endif
139
140#ifdef __always_inline__spin_trylock_bh
141#define _spin_trylock_bh(lock) __spin_trylock_bh(lock)
142#endif
143
144#ifdef __always_inline__spin_unlock
145#define _spin_unlock(lock) __spin_unlock(lock)
146#endif 68#endif
147 69
148#ifdef __always_inline__read_unlock 70#ifdef CONFIG_INLINE_SPIN_UNLOCK
149#define _read_unlock(lock) __read_unlock(lock) 71#define _raw_spin_unlock(lock) __raw_spin_unlock(lock)
150#endif 72#endif
151 73
152#ifdef __always_inline__write_unlock 74#ifdef CONFIG_INLINE_SPIN_UNLOCK_BH
153#define _write_unlock(lock) __write_unlock(lock) 75#define _raw_spin_unlock_bh(lock) __raw_spin_unlock_bh(lock)
154#endif 76#endif
155 77
156#ifdef __always_inline__spin_unlock_bh 78#ifdef CONFIG_INLINE_SPIN_UNLOCK_IRQ
157#define _spin_unlock_bh(lock) __spin_unlock_bh(lock) 79#define _raw_spin_unlock_irq(lock) __raw_spin_unlock_irq(lock)
158#endif 80#endif
159 81
160#ifdef __always_inline__read_unlock_bh 82#ifdef CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE
161#define _read_unlock_bh(lock) __read_unlock_bh(lock) 83#define _raw_spin_unlock_irqrestore(lock, flags) __raw_spin_unlock_irqrestore(lock, flags)
162#endif 84#endif
163 85
164#ifdef __always_inline__write_unlock_bh 86static inline int __raw_spin_trylock(raw_spinlock_t *lock)
165#define _write_unlock_bh(lock) __write_unlock_bh(lock)
166#endif
167
168#ifdef __always_inline__spin_unlock_irq
169#define _spin_unlock_irq(lock) __spin_unlock_irq(lock)
170#endif
171
172#ifdef __always_inline__read_unlock_irq
173#define _read_unlock_irq(lock) __read_unlock_irq(lock)
174#endif
175
176#ifdef __always_inline__write_unlock_irq
177#define _write_unlock_irq(lock) __write_unlock_irq(lock)
178#endif
179
180#ifdef __always_inline__spin_unlock_irqrestore
181#define _spin_unlock_irqrestore(lock, flags) __spin_unlock_irqrestore(lock, flags)
182#endif
183
184#ifdef __always_inline__read_unlock_irqrestore
185#define _read_unlock_irqrestore(lock, flags) __read_unlock_irqrestore(lock, flags)
186#endif
187
188#ifdef __always_inline__write_unlock_irqrestore
189#define _write_unlock_irqrestore(lock, flags) __write_unlock_irqrestore(lock, flags)
190#endif
191
192#endif /* CONFIG_DEBUG_SPINLOCK */
193
194static inline int __spin_trylock(spinlock_t *lock)
195{ 87{
196 preempt_disable(); 88 preempt_disable();
197 if (_raw_spin_trylock(lock)) { 89 if (do_raw_spin_trylock(lock)) {
198 spin_acquire(&lock->dep_map, 0, 1, _RET_IP_); 90 spin_acquire(&lock->dep_map, 0, 1, _RET_IP_);
199 return 1; 91 return 1;
200 } 92 }
@@ -202,28 +94,6 @@ static inline int __spin_trylock(spinlock_t *lock)
202 return 0; 94 return 0;
203} 95}
204 96
205static inline int __read_trylock(rwlock_t *lock)
206{
207 preempt_disable();
208 if (_raw_read_trylock(lock)) {
209 rwlock_acquire_read(&lock->dep_map, 0, 1, _RET_IP_);
210 return 1;
211 }
212 preempt_enable();
213 return 0;
214}
215
216static inline int __write_trylock(rwlock_t *lock)
217{
218 preempt_disable();
219 if (_raw_write_trylock(lock)) {
220 rwlock_acquire(&lock->dep_map, 0, 1, _RET_IP_);
221 return 1;
222 }
223 preempt_enable();
224 return 0;
225}
226
227/* 97/*
228 * If lockdep is enabled then we use the non-preemption spin-ops 98 * If lockdep is enabled then we use the non-preemption spin-ops
229 * even on CONFIG_PREEMPT, because lockdep assumes that interrupts are 99 * even on CONFIG_PREEMPT, because lockdep assumes that interrupts are
@@ -231,14 +101,7 @@ static inline int __write_trylock(rwlock_t *lock)
231 */ 101 */
232#if !defined(CONFIG_GENERIC_LOCKBREAK) || defined(CONFIG_DEBUG_LOCK_ALLOC) 102#if !defined(CONFIG_GENERIC_LOCKBREAK) || defined(CONFIG_DEBUG_LOCK_ALLOC)
233 103
234static inline void __read_lock(rwlock_t *lock) 104static inline unsigned long __raw_spin_lock_irqsave(raw_spinlock_t *lock)
235{
236 preempt_disable();
237 rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_);
238 LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock);
239}
240
241static inline unsigned long __spin_lock_irqsave(spinlock_t *lock)
242{ 105{
243 unsigned long flags; 106 unsigned long flags;
244 107
@@ -247,205 +110,79 @@ static inline unsigned long __spin_lock_irqsave(spinlock_t *lock)
247 spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); 110 spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
248 /* 111 /*
249 * On lockdep we dont want the hand-coded irq-enable of 112 * On lockdep we dont want the hand-coded irq-enable of
250 * _raw_spin_lock_flags() code, because lockdep assumes 113 * do_raw_spin_lock_flags() code, because lockdep assumes
251 * that interrupts are not re-enabled during lock-acquire: 114 * that interrupts are not re-enabled during lock-acquire:
252 */ 115 */
253#ifdef CONFIG_LOCKDEP 116#ifdef CONFIG_LOCKDEP
254 LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); 117 LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
255#else 118#else
256 _raw_spin_lock_flags(lock, &flags); 119 do_raw_spin_lock_flags(lock, &flags);
257#endif 120#endif
258 return flags; 121 return flags;
259} 122}
260 123
261static inline void __spin_lock_irq(spinlock_t *lock) 124static inline void __raw_spin_lock_irq(raw_spinlock_t *lock)
262{ 125{
263 local_irq_disable(); 126 local_irq_disable();
264 preempt_disable(); 127 preempt_disable();
265 spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); 128 spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
266 LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); 129 LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
267} 130}
268 131
269static inline void __spin_lock_bh(spinlock_t *lock) 132static inline void __raw_spin_lock_bh(raw_spinlock_t *lock)
270{ 133{
271 local_bh_disable(); 134 local_bh_disable();
272 preempt_disable(); 135 preempt_disable();
273 spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); 136 spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
274 LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); 137 LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
275} 138}
276 139
277static inline unsigned long __read_lock_irqsave(rwlock_t *lock) 140static inline void __raw_spin_lock(raw_spinlock_t *lock)
278{
279 unsigned long flags;
280
281 local_irq_save(flags);
282 preempt_disable();
283 rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_);
284 LOCK_CONTENDED_FLAGS(lock, _raw_read_trylock, _raw_read_lock,
285 _raw_read_lock_flags, &flags);
286 return flags;
287}
288
289static inline void __read_lock_irq(rwlock_t *lock)
290{
291 local_irq_disable();
292 preempt_disable();
293 rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_);
294 LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock);
295}
296
297static inline void __read_lock_bh(rwlock_t *lock)
298{
299 local_bh_disable();
300 preempt_disable();
301 rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_);
302 LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock);
303}
304
305static inline unsigned long __write_lock_irqsave(rwlock_t *lock)
306{
307 unsigned long flags;
308
309 local_irq_save(flags);
310 preempt_disable();
311 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
312 LOCK_CONTENDED_FLAGS(lock, _raw_write_trylock, _raw_write_lock,
313 _raw_write_lock_flags, &flags);
314 return flags;
315}
316
317static inline void __write_lock_irq(rwlock_t *lock)
318{
319 local_irq_disable();
320 preempt_disable();
321 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
322 LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock);
323}
324
325static inline void __write_lock_bh(rwlock_t *lock)
326{
327 local_bh_disable();
328 preempt_disable();
329 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
330 LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock);
331}
332
333static inline void __spin_lock(spinlock_t *lock)
334{ 141{
335 preempt_disable(); 142 preempt_disable();
336 spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); 143 spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
337 LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); 144 LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
338}
339
340static inline void __write_lock(rwlock_t *lock)
341{
342 preempt_disable();
343 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
344 LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock);
345} 145}
346 146
347#endif /* CONFIG_PREEMPT */ 147#endif /* CONFIG_PREEMPT */
348 148
349static inline void __spin_unlock(spinlock_t *lock) 149static inline void __raw_spin_unlock(raw_spinlock_t *lock)
350{ 150{
351 spin_release(&lock->dep_map, 1, _RET_IP_); 151 spin_release(&lock->dep_map, 1, _RET_IP_);
352 _raw_spin_unlock(lock); 152 do_raw_spin_unlock(lock);
353 preempt_enable();
354}
355
356static inline void __write_unlock(rwlock_t *lock)
357{
358 rwlock_release(&lock->dep_map, 1, _RET_IP_);
359 _raw_write_unlock(lock);
360 preempt_enable(); 153 preempt_enable();
361} 154}
362 155
363static inline void __read_unlock(rwlock_t *lock) 156static inline void __raw_spin_unlock_irqrestore(raw_spinlock_t *lock,
364{
365 rwlock_release(&lock->dep_map, 1, _RET_IP_);
366 _raw_read_unlock(lock);
367 preempt_enable();
368}
369
370static inline void __spin_unlock_irqrestore(spinlock_t *lock,
371 unsigned long flags) 157 unsigned long flags)
372{ 158{
373 spin_release(&lock->dep_map, 1, _RET_IP_); 159 spin_release(&lock->dep_map, 1, _RET_IP_);
374 _raw_spin_unlock(lock); 160 do_raw_spin_unlock(lock);
375 local_irq_restore(flags); 161 local_irq_restore(flags);
376 preempt_enable(); 162 preempt_enable();
377} 163}
378 164
379static inline void __spin_unlock_irq(spinlock_t *lock) 165static inline void __raw_spin_unlock_irq(raw_spinlock_t *lock)
380{ 166{
381 spin_release(&lock->dep_map, 1, _RET_IP_); 167 spin_release(&lock->dep_map, 1, _RET_IP_);
382 _raw_spin_unlock(lock); 168 do_raw_spin_unlock(lock);
383 local_irq_enable(); 169 local_irq_enable();
384 preempt_enable(); 170 preempt_enable();
385} 171}
386 172
387static inline void __spin_unlock_bh(spinlock_t *lock) 173static inline void __raw_spin_unlock_bh(raw_spinlock_t *lock)
388{ 174{
389 spin_release(&lock->dep_map, 1, _RET_IP_); 175 spin_release(&lock->dep_map, 1, _RET_IP_);
390 _raw_spin_unlock(lock); 176 do_raw_spin_unlock(lock);
391 preempt_enable_no_resched(); 177 preempt_enable_no_resched();
392 local_bh_enable_ip((unsigned long)__builtin_return_address(0)); 178 local_bh_enable_ip((unsigned long)__builtin_return_address(0));
393} 179}
394 180
395static inline void __read_unlock_irqrestore(rwlock_t *lock, unsigned long flags) 181static inline int __raw_spin_trylock_bh(raw_spinlock_t *lock)
396{
397 rwlock_release(&lock->dep_map, 1, _RET_IP_);
398 _raw_read_unlock(lock);
399 local_irq_restore(flags);
400 preempt_enable();
401}
402
403static inline void __read_unlock_irq(rwlock_t *lock)
404{
405 rwlock_release(&lock->dep_map, 1, _RET_IP_);
406 _raw_read_unlock(lock);
407 local_irq_enable();
408 preempt_enable();
409}
410
411static inline void __read_unlock_bh(rwlock_t *lock)
412{
413 rwlock_release(&lock->dep_map, 1, _RET_IP_);
414 _raw_read_unlock(lock);
415 preempt_enable_no_resched();
416 local_bh_enable_ip((unsigned long)__builtin_return_address(0));
417}
418
419static inline void __write_unlock_irqrestore(rwlock_t *lock,
420 unsigned long flags)
421{
422 rwlock_release(&lock->dep_map, 1, _RET_IP_);
423 _raw_write_unlock(lock);
424 local_irq_restore(flags);
425 preempt_enable();
426}
427
428static inline void __write_unlock_irq(rwlock_t *lock)
429{
430 rwlock_release(&lock->dep_map, 1, _RET_IP_);
431 _raw_write_unlock(lock);
432 local_irq_enable();
433 preempt_enable();
434}
435
436static inline void __write_unlock_bh(rwlock_t *lock)
437{
438 rwlock_release(&lock->dep_map, 1, _RET_IP_);
439 _raw_write_unlock(lock);
440 preempt_enable_no_resched();
441 local_bh_enable_ip((unsigned long)__builtin_return_address(0));
442}
443
444static inline int __spin_trylock_bh(spinlock_t *lock)
445{ 182{
446 local_bh_disable(); 183 local_bh_disable();
447 preempt_disable(); 184 preempt_disable();
448 if (_raw_spin_trylock(lock)) { 185 if (do_raw_spin_trylock(lock)) {
449 spin_acquire(&lock->dep_map, 0, 1, _RET_IP_); 186 spin_acquire(&lock->dep_map, 0, 1, _RET_IP_);
450 return 1; 187 return 1;
451 } 188 }
@@ -454,4 +191,6 @@ static inline int __spin_trylock_bh(spinlock_t *lock)
454 return 0; 191 return 0;
455} 192}
456 193
194#include <linux/rwlock_api_smp.h>
195
457#endif /* __LINUX_SPINLOCK_API_SMP_H */ 196#endif /* __LINUX_SPINLOCK_API_SMP_H */
diff --git a/include/linux/spinlock_api_up.h b/include/linux/spinlock_api_up.h
index 04e1d3164576..af1f47229e70 100644
--- a/include/linux/spinlock_api_up.h
+++ b/include/linux/spinlock_api_up.h
@@ -16,7 +16,7 @@
16 16
17#define in_lock_functions(ADDR) 0 17#define in_lock_functions(ADDR) 0
18 18
19#define assert_spin_locked(lock) do { (void)(lock); } while (0) 19#define assert_raw_spin_locked(lock) do { (void)(lock); } while (0)
20 20
21/* 21/*
22 * In the UP-nondebug case there's no real locking going on, so the 22 * In the UP-nondebug case there's no real locking going on, so the
@@ -40,7 +40,8 @@
40 do { preempt_enable(); __release(lock); (void)(lock); } while (0) 40 do { preempt_enable(); __release(lock); (void)(lock); } while (0)
41 41
42#define __UNLOCK_BH(lock) \ 42#define __UNLOCK_BH(lock) \
43 do { preempt_enable_no_resched(); local_bh_enable(); __release(lock); (void)(lock); } while (0) 43 do { preempt_enable_no_resched(); local_bh_enable(); \
44 __release(lock); (void)(lock); } while (0)
44 45
45#define __UNLOCK_IRQ(lock) \ 46#define __UNLOCK_IRQ(lock) \
46 do { local_irq_enable(); __UNLOCK(lock); } while (0) 47 do { local_irq_enable(); __UNLOCK(lock); } while (0)
@@ -48,34 +49,37 @@
48#define __UNLOCK_IRQRESTORE(lock, flags) \ 49#define __UNLOCK_IRQRESTORE(lock, flags) \
49 do { local_irq_restore(flags); __UNLOCK(lock); } while (0) 50 do { local_irq_restore(flags); __UNLOCK(lock); } while (0)
50 51
51#define _spin_lock(lock) __LOCK(lock) 52#define _raw_spin_lock(lock) __LOCK(lock)
52#define _spin_lock_nested(lock, subclass) __LOCK(lock) 53#define _raw_spin_lock_nested(lock, subclass) __LOCK(lock)
53#define _read_lock(lock) __LOCK(lock) 54#define _raw_read_lock(lock) __LOCK(lock)
54#define _write_lock(lock) __LOCK(lock) 55#define _raw_write_lock(lock) __LOCK(lock)
55#define _spin_lock_bh(lock) __LOCK_BH(lock) 56#define _raw_spin_lock_bh(lock) __LOCK_BH(lock)
56#define _read_lock_bh(lock) __LOCK_BH(lock) 57#define _raw_read_lock_bh(lock) __LOCK_BH(lock)
57#define _write_lock_bh(lock) __LOCK_BH(lock) 58#define _raw_write_lock_bh(lock) __LOCK_BH(lock)
58#define _spin_lock_irq(lock) __LOCK_IRQ(lock) 59#define _raw_spin_lock_irq(lock) __LOCK_IRQ(lock)
59#define _read_lock_irq(lock) __LOCK_IRQ(lock) 60#define _raw_read_lock_irq(lock) __LOCK_IRQ(lock)
60#define _write_lock_irq(lock) __LOCK_IRQ(lock) 61#define _raw_write_lock_irq(lock) __LOCK_IRQ(lock)
61#define _spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) 62#define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags)
62#define _read_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) 63#define _raw_read_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags)
63#define _write_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) 64#define _raw_write_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags)
64#define _spin_trylock(lock) ({ __LOCK(lock); 1; }) 65#define _raw_spin_trylock(lock) ({ __LOCK(lock); 1; })
65#define _read_trylock(lock) ({ __LOCK(lock); 1; }) 66#define _raw_read_trylock(lock) ({ __LOCK(lock); 1; })
66#define _write_trylock(lock) ({ __LOCK(lock); 1; }) 67#define _raw_write_trylock(lock) ({ __LOCK(lock); 1; })
67#define _spin_trylock_bh(lock) ({ __LOCK_BH(lock); 1; }) 68#define _raw_spin_trylock_bh(lock) ({ __LOCK_BH(lock); 1; })
68#define _spin_unlock(lock) __UNLOCK(lock) 69#define _raw_spin_unlock(lock) __UNLOCK(lock)
69#define _read_unlock(lock) __UNLOCK(lock) 70#define _raw_read_unlock(lock) __UNLOCK(lock)
70#define _write_unlock(lock) __UNLOCK(lock) 71#define _raw_write_unlock(lock) __UNLOCK(lock)
71#define _spin_unlock_bh(lock) __UNLOCK_BH(lock) 72#define _raw_spin_unlock_bh(lock) __UNLOCK_BH(lock)
72#define _write_unlock_bh(lock) __UNLOCK_BH(lock) 73#define _raw_write_unlock_bh(lock) __UNLOCK_BH(lock)
73#define _read_unlock_bh(lock) __UNLOCK_BH(lock) 74#define _raw_read_unlock_bh(lock) __UNLOCK_BH(lock)
74#define _spin_unlock_irq(lock) __UNLOCK_IRQ(lock) 75#define _raw_spin_unlock_irq(lock) __UNLOCK_IRQ(lock)
75#define _read_unlock_irq(lock) __UNLOCK_IRQ(lock) 76#define _raw_read_unlock_irq(lock) __UNLOCK_IRQ(lock)
76#define _write_unlock_irq(lock) __UNLOCK_IRQ(lock) 77#define _raw_write_unlock_irq(lock) __UNLOCK_IRQ(lock)
77#define _spin_unlock_irqrestore(lock, flags) __UNLOCK_IRQRESTORE(lock, flags) 78#define _raw_spin_unlock_irqrestore(lock, flags) \
78#define _read_unlock_irqrestore(lock, flags) __UNLOCK_IRQRESTORE(lock, flags) 79 __UNLOCK_IRQRESTORE(lock, flags)
79#define _write_unlock_irqrestore(lock, flags) __UNLOCK_IRQRESTORE(lock, flags) 80#define _raw_read_unlock_irqrestore(lock, flags) \
81 __UNLOCK_IRQRESTORE(lock, flags)
82#define _raw_write_unlock_irqrestore(lock, flags) \
83 __UNLOCK_IRQRESTORE(lock, flags)
80 84
81#endif /* __LINUX_SPINLOCK_API_UP_H */ 85#endif /* __LINUX_SPINLOCK_API_UP_H */
diff --git a/include/linux/spinlock_types.h b/include/linux/spinlock_types.h
index 68d88f71f1a2..851b7783720d 100644
--- a/include/linux/spinlock_types.h
+++ b/include/linux/spinlock_types.h
@@ -17,8 +17,8 @@
17 17
18#include <linux/lockdep.h> 18#include <linux/lockdep.h>
19 19
20typedef struct { 20typedef struct raw_spinlock {
21 raw_spinlock_t raw_lock; 21 arch_spinlock_t raw_lock;
22#ifdef CONFIG_GENERIC_LOCKBREAK 22#ifdef CONFIG_GENERIC_LOCKBREAK
23 unsigned int break_lock; 23 unsigned int break_lock;
24#endif 24#endif
@@ -29,26 +29,10 @@ typedef struct {
29#ifdef CONFIG_DEBUG_LOCK_ALLOC 29#ifdef CONFIG_DEBUG_LOCK_ALLOC
30 struct lockdep_map dep_map; 30 struct lockdep_map dep_map;
31#endif 31#endif
32} spinlock_t; 32} raw_spinlock_t;
33 33
34#define SPINLOCK_MAGIC 0xdead4ead 34#define SPINLOCK_MAGIC 0xdead4ead
35 35
36typedef struct {
37 raw_rwlock_t raw_lock;
38#ifdef CONFIG_GENERIC_LOCKBREAK
39 unsigned int break_lock;
40#endif
41#ifdef CONFIG_DEBUG_SPINLOCK
42 unsigned int magic, owner_cpu;
43 void *owner;
44#endif
45#ifdef CONFIG_DEBUG_LOCK_ALLOC
46 struct lockdep_map dep_map;
47#endif
48} rwlock_t;
49
50#define RWLOCK_MAGIC 0xdeaf1eed
51
52#define SPINLOCK_OWNER_INIT ((void *)-1L) 36#define SPINLOCK_OWNER_INIT ((void *)-1L)
53 37
54#ifdef CONFIG_DEBUG_LOCK_ALLOC 38#ifdef CONFIG_DEBUG_LOCK_ALLOC
@@ -57,44 +41,56 @@ typedef struct {
57# define SPIN_DEP_MAP_INIT(lockname) 41# define SPIN_DEP_MAP_INIT(lockname)
58#endif 42#endif
59 43
60#ifdef CONFIG_DEBUG_LOCK_ALLOC 44#ifdef CONFIG_DEBUG_SPINLOCK
61# define RW_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname } 45# define SPIN_DEBUG_INIT(lockname) \
46 .magic = SPINLOCK_MAGIC, \
47 .owner_cpu = -1, \
48 .owner = SPINLOCK_OWNER_INIT,
62#else 49#else
63# define RW_DEP_MAP_INIT(lockname) 50# define SPIN_DEBUG_INIT(lockname)
64#endif 51#endif
65 52
66#ifdef CONFIG_DEBUG_SPINLOCK 53#define __RAW_SPIN_LOCK_INITIALIZER(lockname) \
67# define __SPIN_LOCK_UNLOCKED(lockname) \ 54 { \
68 (spinlock_t) { .raw_lock = __RAW_SPIN_LOCK_UNLOCKED, \ 55 .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \
69 .magic = SPINLOCK_MAGIC, \ 56 SPIN_DEBUG_INIT(lockname) \
70 .owner = SPINLOCK_OWNER_INIT, \ 57 SPIN_DEP_MAP_INIT(lockname) }
71 .owner_cpu = -1, \ 58
72 SPIN_DEP_MAP_INIT(lockname) } 59#define __RAW_SPIN_LOCK_UNLOCKED(lockname) \
73#define __RW_LOCK_UNLOCKED(lockname) \ 60 (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname)
74 (rwlock_t) { .raw_lock = __RAW_RW_LOCK_UNLOCKED, \ 61
75 .magic = RWLOCK_MAGIC, \ 62#define DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x)
76 .owner = SPINLOCK_OWNER_INIT, \ 63
77 .owner_cpu = -1, \ 64typedef struct spinlock {
78 RW_DEP_MAP_INIT(lockname) } 65 union {
79#else 66 struct raw_spinlock rlock;
80# define __SPIN_LOCK_UNLOCKED(lockname) \ 67
81 (spinlock_t) { .raw_lock = __RAW_SPIN_LOCK_UNLOCKED, \ 68#ifdef CONFIG_DEBUG_LOCK_ALLOC
82 SPIN_DEP_MAP_INIT(lockname) } 69# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map))
83#define __RW_LOCK_UNLOCKED(lockname) \ 70 struct {
84 (rwlock_t) { .raw_lock = __RAW_RW_LOCK_UNLOCKED, \ 71 u8 __padding[LOCK_PADSIZE];
85 RW_DEP_MAP_INIT(lockname) } 72 struct lockdep_map dep_map;
73 };
86#endif 74#endif
75 };
76} spinlock_t;
77
78#define __SPIN_LOCK_INITIALIZER(lockname) \
79 { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } }
80
81#define __SPIN_LOCK_UNLOCKED(lockname) \
82 (spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname)
87 83
88/* 84/*
89 * SPIN_LOCK_UNLOCKED and RW_LOCK_UNLOCKED defeat lockdep state tracking and 85 * SPIN_LOCK_UNLOCKED defeats lockdep state tracking and is hence
90 * are hence deprecated. 86 * deprecated.
91 * Please use DEFINE_SPINLOCK()/DEFINE_RWLOCK() or 87 * Please use DEFINE_SPINLOCK() or __SPIN_LOCK_UNLOCKED() as
92 * __SPIN_LOCK_UNLOCKED()/__RW_LOCK_UNLOCKED() as appropriate. 88 * appropriate.
93 */ 89 */
94#define SPIN_LOCK_UNLOCKED __SPIN_LOCK_UNLOCKED(old_style_spin_init) 90#define SPIN_LOCK_UNLOCKED __SPIN_LOCK_UNLOCKED(old_style_spin_init)
95#define RW_LOCK_UNLOCKED __RW_LOCK_UNLOCKED(old_style_rw_init)
96 91
97#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x) 92#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
98#define DEFINE_RWLOCK(x) rwlock_t x = __RW_LOCK_UNLOCKED(x) 93
94#include <linux/rwlock_types.h>
99 95
100#endif /* __LINUX_SPINLOCK_TYPES_H */ 96#endif /* __LINUX_SPINLOCK_TYPES_H */
diff --git a/include/linux/spinlock_types_up.h b/include/linux/spinlock_types_up.h
index 04135b0e198e..c09b6407ae1b 100644
--- a/include/linux/spinlock_types_up.h
+++ b/include/linux/spinlock_types_up.h
@@ -16,22 +16,22 @@
16 16
17typedef struct { 17typedef struct {
18 volatile unsigned int slock; 18 volatile unsigned int slock;
19} raw_spinlock_t; 19} arch_spinlock_t;
20 20
21#define __RAW_SPIN_LOCK_UNLOCKED { 1 } 21#define __ARCH_SPIN_LOCK_UNLOCKED { 1 }
22 22
23#else 23#else
24 24
25typedef struct { } raw_spinlock_t; 25typedef struct { } arch_spinlock_t;
26 26
27#define __RAW_SPIN_LOCK_UNLOCKED { } 27#define __ARCH_SPIN_LOCK_UNLOCKED { }
28 28
29#endif 29#endif
30 30
31typedef struct { 31typedef struct {
32 /* no debug version on UP */ 32 /* no debug version on UP */
33} raw_rwlock_t; 33} arch_rwlock_t;
34 34
35#define __RAW_RW_LOCK_UNLOCKED { } 35#define __ARCH_RW_LOCK_UNLOCKED { }
36 36
37#endif /* __LINUX_SPINLOCK_TYPES_UP_H */ 37#endif /* __LINUX_SPINLOCK_TYPES_UP_H */
diff --git a/include/linux/spinlock_up.h b/include/linux/spinlock_up.h
index d4841ed8215b..b14f6a91e19f 100644
--- a/include/linux/spinlock_up.h
+++ b/include/linux/spinlock_up.h
@@ -18,21 +18,21 @@
18 */ 18 */
19 19
20#ifdef CONFIG_DEBUG_SPINLOCK 20#ifdef CONFIG_DEBUG_SPINLOCK
21#define __raw_spin_is_locked(x) ((x)->slock == 0) 21#define arch_spin_is_locked(x) ((x)->slock == 0)
22 22
23static inline void __raw_spin_lock(raw_spinlock_t *lock) 23static inline void arch_spin_lock(arch_spinlock_t *lock)
24{ 24{
25 lock->slock = 0; 25 lock->slock = 0;
26} 26}
27 27
28static inline void 28static inline void
29__raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags) 29arch_spin_lock_flags(arch_spinlock_t *lock, unsigned long flags)
30{ 30{
31 local_irq_save(flags); 31 local_irq_save(flags);
32 lock->slock = 0; 32 lock->slock = 0;
33} 33}
34 34
35static inline int __raw_spin_trylock(raw_spinlock_t *lock) 35static inline int arch_spin_trylock(arch_spinlock_t *lock)
36{ 36{
37 char oldval = lock->slock; 37 char oldval = lock->slock;
38 38
@@ -41,7 +41,7 @@ static inline int __raw_spin_trylock(raw_spinlock_t *lock)
41 return oldval > 0; 41 return oldval > 0;
42} 42}
43 43
44static inline void __raw_spin_unlock(raw_spinlock_t *lock) 44static inline void arch_spin_unlock(arch_spinlock_t *lock)
45{ 45{
46 lock->slock = 1; 46 lock->slock = 1;
47} 47}
@@ -49,28 +49,28 @@ static inline void __raw_spin_unlock(raw_spinlock_t *lock)
49/* 49/*
50 * Read-write spinlocks. No debug version. 50 * Read-write spinlocks. No debug version.
51 */ 51 */
52#define __raw_read_lock(lock) do { (void)(lock); } while (0) 52#define arch_read_lock(lock) do { (void)(lock); } while (0)
53#define __raw_write_lock(lock) do { (void)(lock); } while (0) 53#define arch_write_lock(lock) do { (void)(lock); } while (0)
54#define __raw_read_trylock(lock) ({ (void)(lock); 1; }) 54#define arch_read_trylock(lock) ({ (void)(lock); 1; })
55#define __raw_write_trylock(lock) ({ (void)(lock); 1; }) 55#define arch_write_trylock(lock) ({ (void)(lock); 1; })
56#define __raw_read_unlock(lock) do { (void)(lock); } while (0) 56#define arch_read_unlock(lock) do { (void)(lock); } while (0)
57#define __raw_write_unlock(lock) do { (void)(lock); } while (0) 57#define arch_write_unlock(lock) do { (void)(lock); } while (0)
58 58
59#else /* DEBUG_SPINLOCK */ 59#else /* DEBUG_SPINLOCK */
60#define __raw_spin_is_locked(lock) ((void)(lock), 0) 60#define arch_spin_is_locked(lock) ((void)(lock), 0)
61/* for sched.c and kernel_lock.c: */ 61/* for sched.c and kernel_lock.c: */
62# define __raw_spin_lock(lock) do { (void)(lock); } while (0) 62# define arch_spin_lock(lock) do { (void)(lock); } while (0)
63# define __raw_spin_lock_flags(lock, flags) do { (void)(lock); } while (0) 63# define arch_spin_lock_flags(lock, flags) do { (void)(lock); } while (0)
64# define __raw_spin_unlock(lock) do { (void)(lock); } while (0) 64# define arch_spin_unlock(lock) do { (void)(lock); } while (0)
65# define __raw_spin_trylock(lock) ({ (void)(lock); 1; }) 65# define arch_spin_trylock(lock) ({ (void)(lock); 1; })
66#endif /* DEBUG_SPINLOCK */ 66#endif /* DEBUG_SPINLOCK */
67 67
68#define __raw_spin_is_contended(lock) (((void)(lock), 0)) 68#define arch_spin_is_contended(lock) (((void)(lock), 0))
69 69
70#define __raw_read_can_lock(lock) (((void)(lock), 1)) 70#define arch_read_can_lock(lock) (((void)(lock), 1))
71#define __raw_write_can_lock(lock) (((void)(lock), 1)) 71#define arch_write_can_lock(lock) (((void)(lock), 1))
72 72
73#define __raw_spin_unlock_wait(lock) \ 73#define arch_spin_unlock_wait(lock) \
74 do { cpu_relax(); } while (__raw_spin_is_locked(lock)) 74 do { cpu_relax(); } while (arch_spin_is_locked(lock))
75 75
76#endif /* __LINUX_SPINLOCK_UP_H */ 76#endif /* __LINUX_SPINLOCK_UP_H */
diff --git a/include/linux/srcu.h b/include/linux/srcu.h
index aca0eee53930..4d5ecb222af9 100644
--- a/include/linux/srcu.h
+++ b/include/linux/srcu.h
@@ -33,8 +33,11 @@ struct srcu_struct_array {
33 33
34struct srcu_struct { 34struct srcu_struct {
35 int completed; 35 int completed;
36 struct srcu_struct_array *per_cpu_ref; 36 struct srcu_struct_array __percpu *per_cpu_ref;
37 struct mutex mutex; 37 struct mutex mutex;
38#ifdef CONFIG_DEBUG_LOCK_ALLOC
39 struct lockdep_map dep_map;
40#endif /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */
38}; 41};
39 42
40#ifndef CONFIG_PREEMPT 43#ifndef CONFIG_PREEMPT
@@ -43,11 +46,100 @@ struct srcu_struct {
43#define srcu_barrier() 46#define srcu_barrier()
44#endif /* #else #ifndef CONFIG_PREEMPT */ 47#endif /* #else #ifndef CONFIG_PREEMPT */
45 48
49#ifdef CONFIG_DEBUG_LOCK_ALLOC
50
51int __init_srcu_struct(struct srcu_struct *sp, const char *name,
52 struct lock_class_key *key);
53
54#define init_srcu_struct(sp) \
55({ \
56 static struct lock_class_key __srcu_key; \
57 \
58 __init_srcu_struct((sp), #sp, &__srcu_key); \
59})
60
61# define srcu_read_acquire(sp) \
62 lock_acquire(&(sp)->dep_map, 0, 0, 2, 1, NULL, _THIS_IP_)
63# define srcu_read_release(sp) \
64 lock_release(&(sp)->dep_map, 1, _THIS_IP_)
65
66#else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */
67
46int init_srcu_struct(struct srcu_struct *sp); 68int init_srcu_struct(struct srcu_struct *sp);
69
70# define srcu_read_acquire(sp) do { } while (0)
71# define srcu_read_release(sp) do { } while (0)
72
73#endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */
74
47void cleanup_srcu_struct(struct srcu_struct *sp); 75void cleanup_srcu_struct(struct srcu_struct *sp);
48int srcu_read_lock(struct srcu_struct *sp) __acquires(sp); 76int __srcu_read_lock(struct srcu_struct *sp) __acquires(sp);
49void srcu_read_unlock(struct srcu_struct *sp, int idx) __releases(sp); 77void __srcu_read_unlock(struct srcu_struct *sp, int idx) __releases(sp);
50void synchronize_srcu(struct srcu_struct *sp); 78void synchronize_srcu(struct srcu_struct *sp);
79void synchronize_srcu_expedited(struct srcu_struct *sp);
51long srcu_batches_completed(struct srcu_struct *sp); 80long srcu_batches_completed(struct srcu_struct *sp);
52 81
82#ifdef CONFIG_DEBUG_LOCK_ALLOC
83
84/**
85 * srcu_read_lock_held - might we be in SRCU read-side critical section?
86 *
87 * If CONFIG_PROVE_LOCKING is selected and enabled, returns nonzero iff in
88 * an SRCU read-side critical section. In absence of CONFIG_PROVE_LOCKING,
89 * this assumes we are in an SRCU read-side critical section unless it can
90 * prove otherwise.
91 */
92static inline int srcu_read_lock_held(struct srcu_struct *sp)
93{
94 if (debug_locks)
95 return lock_is_held(&sp->dep_map);
96 return 1;
97}
98
99#else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */
100
101static inline int srcu_read_lock_held(struct srcu_struct *sp)
102{
103 return 1;
104}
105
106#endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */
107
108/**
109 * srcu_dereference - fetch SRCU-protected pointer with checking
110 *
111 * Makes rcu_dereference_check() do the dirty work.
112 */
113#define srcu_dereference(p, sp) \
114 rcu_dereference_check(p, srcu_read_lock_held(sp))
115
116/**
117 * srcu_read_lock - register a new reader for an SRCU-protected structure.
118 * @sp: srcu_struct in which to register the new reader.
119 *
120 * Enter an SRCU read-side critical section. Note that SRCU read-side
121 * critical sections may be nested.
122 */
123static inline int srcu_read_lock(struct srcu_struct *sp) __acquires(sp)
124{
125 int retval = __srcu_read_lock(sp);
126
127 srcu_read_acquire(sp);
128 return retval;
129}
130
131/**
132 * srcu_read_unlock - unregister a old reader from an SRCU-protected structure.
133 * @sp: srcu_struct in which to unregister the old reader.
134 * @idx: return value from corresponding srcu_read_lock().
135 *
136 * Exit an SRCU read-side critical section.
137 */
138static inline void srcu_read_unlock(struct srcu_struct *sp, int idx)
139 __releases(sp)
140{
141 srcu_read_release(sp);
142 __srcu_read_unlock(sp, idx);
143}
144
53#endif 145#endif
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h
index 3d0a9ff24f01..24f988547361 100644
--- a/include/linux/ssb/ssb.h
+++ b/include/linux/ssb/ssb.h
@@ -269,7 +269,8 @@ struct ssb_bus {
269 269
270 const struct ssb_bus_ops *ops; 270 const struct ssb_bus_ops *ops;
271 271
272 /* The core in the basic address register window. (PCI bus only) */ 272 /* The core currently mapped into the MMIO window.
273 * Not valid on all host-buses. So don't use outside of SSB. */
273 struct ssb_device *mapped_device; 274 struct ssb_device *mapped_device;
274 union { 275 union {
275 /* Currently mapped PCMCIA segment. (bustype == SSB_BUSTYPE_PCMCIA only) */ 276 /* Currently mapped PCMCIA segment. (bustype == SSB_BUSTYPE_PCMCIA only) */
@@ -281,14 +282,17 @@ struct ssb_bus {
281 * On PCMCIA-host busses this is used to protect the whole MMIO access. */ 282 * On PCMCIA-host busses this is used to protect the whole MMIO access. */
282 spinlock_t bar_lock; 283 spinlock_t bar_lock;
283 284
284 /* The bus this backplane is running on. */ 285 /* The host-bus this backplane is running on. */
285 enum ssb_bustype bustype; 286 enum ssb_bustype bustype;
286 /* Pointer to the PCI bus (only valid if bustype == SSB_BUSTYPE_PCI). */ 287 /* Pointers to the host-bus. Check bustype before using any of these pointers. */
287 struct pci_dev *host_pci; 288 union {
288 /* Pointer to the PCMCIA device (only if bustype == SSB_BUSTYPE_PCMCIA). */ 289 /* Pointer to the PCI bus (only valid if bustype == SSB_BUSTYPE_PCI). */
289 struct pcmcia_device *host_pcmcia; 290 struct pci_dev *host_pci;
290 /* Pointer to the SDIO device (only if bustype == SSB_BUSTYPE_SDIO). */ 291 /* Pointer to the PCMCIA device (only if bustype == SSB_BUSTYPE_PCMCIA). */
291 struct sdio_func *host_sdio; 292 struct pcmcia_device *host_pcmcia;
293 /* Pointer to the SDIO device (only if bustype == SSB_BUSTYPE_SDIO). */
294 struct sdio_func *host_sdio;
295 };
292 296
293 /* See enum ssb_quirks */ 297 /* See enum ssb_quirks */
294 unsigned int quirks; 298 unsigned int quirks;
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
new file mode 100644
index 000000000000..32bfd1a8a48d
--- /dev/null
+++ b/include/linux/stmmac.h
@@ -0,0 +1,53 @@
1/*******************************************************************************
2
3 Header file for stmmac platform data
4
5 Copyright (C) 2009 STMicroelectronics Ltd
6
7 This program is free software; you can redistribute it and/or modify it
8 under the terms and conditions of the GNU General Public License,
9 version 2, as published by the Free Software Foundation.
10
11 This program is distributed in the hope 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, write to the Free Software Foundation, Inc.,
18 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
19
20 The full GNU General Public License is included in this distribution in
21 the file called "COPYING".
22
23 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
24*******************************************************************************/
25
26#ifndef __STMMAC_PLATFORM_DATA
27#define __STMMAC_PLATFORM_DATA
28
29/* platfrom data for platfrom device structure's platfrom_data field */
30
31/* Private data for the STM on-board ethernet driver */
32struct plat_stmmacenet_data {
33 int bus_id;
34 int pbl;
35 int has_gmac;
36 void (*fix_mac_speed)(void *priv, unsigned int speed);
37 void (*bus_setup)(unsigned long ioaddr);
38#ifdef CONFIG_STM_DRIVERS
39 struct stm_pad_config *pad_config;
40#endif
41 void *bsp_priv;
42};
43
44struct plat_stmmacphy_data {
45 int bus_id;
46 int phy_addr;
47 unsigned int phy_mask;
48 int interface;
49 int (*phy_reset)(void *priv);
50 void *priv;
51};
52#endif
53
diff --git a/include/linux/string.h b/include/linux/string.h
index b8508868d5ad..a716ee2a8adb 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -62,9 +62,20 @@ extern char * strnchr(const char *, size_t, int);
62#ifndef __HAVE_ARCH_STRRCHR 62#ifndef __HAVE_ARCH_STRRCHR
63extern char * strrchr(const char *,int); 63extern char * strrchr(const char *,int);
64#endif 64#endif
65extern char * __must_check strstrip(char *); 65extern char * __must_check skip_spaces(const char *);
66
67extern char *strim(char *);
68
69static inline __must_check char *strstrip(char *str)
70{
71 return strim(str);
72}
73
66#ifndef __HAVE_ARCH_STRSTR 74#ifndef __HAVE_ARCH_STRSTR
67extern char * strstr(const char *,const char *); 75extern char * strstr(const char *, const char *);
76#endif
77#ifndef __HAVE_ARCH_STRNSTR
78extern char * strnstr(const char *, const char *, size_t);
68#endif 79#endif
69#ifndef __HAVE_ARCH_STRLEN 80#ifndef __HAVE_ARCH_STRLEN
70extern __kernel_size_t strlen(const char *); 81extern __kernel_size_t strlen(const char *);
diff --git a/include/linux/sunrpc/bc_xprt.h b/include/linux/sunrpc/bc_xprt.h
index 6508f0dc0eff..7c91260c44a9 100644
--- a/include/linux/sunrpc/bc_xprt.h
+++ b/include/linux/sunrpc/bc_xprt.h
@@ -36,14 +36,32 @@ struct rpc_rqst *xprt_alloc_bc_request(struct rpc_xprt *xprt);
36void xprt_free_bc_request(struct rpc_rqst *req); 36void xprt_free_bc_request(struct rpc_rqst *req);
37int xprt_setup_backchannel(struct rpc_xprt *, unsigned int min_reqs); 37int xprt_setup_backchannel(struct rpc_xprt *, unsigned int min_reqs);
38void xprt_destroy_backchannel(struct rpc_xprt *, int max_reqs); 38void xprt_destroy_backchannel(struct rpc_xprt *, int max_reqs);
39void bc_release_request(struct rpc_task *);
40int bc_send(struct rpc_rqst *req); 39int bc_send(struct rpc_rqst *req);
40
41/*
42 * Determine if a shared backchannel is in use
43 */
44static inline int svc_is_backchannel(const struct svc_rqst *rqstp)
45{
46 if (rqstp->rq_server->bc_xprt)
47 return 1;
48 return 0;
49}
41#else /* CONFIG_NFS_V4_1 */ 50#else /* CONFIG_NFS_V4_1 */
42static inline int xprt_setup_backchannel(struct rpc_xprt *xprt, 51static inline int xprt_setup_backchannel(struct rpc_xprt *xprt,
43 unsigned int min_reqs) 52 unsigned int min_reqs)
44{ 53{
45 return 0; 54 return 0;
46} 55}
56
57static inline int svc_is_backchannel(const struct svc_rqst *rqstp)
58{
59 return 0;
60}
61
62static inline void xprt_free_bc_request(struct rpc_rqst *req)
63{
64}
47#endif /* CONFIG_NFS_V4_1 */ 65#endif /* CONFIG_NFS_V4_1 */
48#endif /* _LINUX_SUNRPC_BC_XPRT_H */ 66#endif /* _LINUX_SUNRPC_BC_XPRT_H */
49 67
diff --git a/include/linux/sunrpc/debug.h b/include/linux/sunrpc/debug.h
index 10709cbe96fd..c2786f20016f 100644
--- a/include/linux/sunrpc/debug.h
+++ b/include/linux/sunrpc/debug.h
@@ -28,9 +28,6 @@
28 28
29#ifdef __KERNEL__ 29#ifdef __KERNEL__
30 30
31#include <linux/timer.h>
32#include <linux/workqueue.h>
33
34/* 31/*
35 * Enable RPC debugging/profiling. 32 * Enable RPC debugging/profiling.
36 */ 33 */
diff --git a/include/linux/sunrpc/rpc_rdma.h b/include/linux/sunrpc/rpc_rdma.h
index 87b895d5c786..b78f16b1dea3 100644
--- a/include/linux/sunrpc/rpc_rdma.h
+++ b/include/linux/sunrpc/rpc_rdma.h
@@ -40,6 +40,8 @@
40#ifndef _LINUX_SUNRPC_RPC_RDMA_H 40#ifndef _LINUX_SUNRPC_RPC_RDMA_H
41#define _LINUX_SUNRPC_RPC_RDMA_H 41#define _LINUX_SUNRPC_RPC_RDMA_H
42 42
43#include <linux/types.h>
44
43struct rpcrdma_segment { 45struct rpcrdma_segment {
44 __be32 rs_handle; /* Registered memory handle */ 46 __be32 rs_handle; /* Registered memory handle */
45 __be32 rs_length; /* Length of the chunk in bytes */ 47 __be32 rs_length; /* Length of the chunk in bytes */
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h
index 401097781fc0..7bc7fd5291ce 100644
--- a/include/linux/sunrpc/sched.h
+++ b/include/linux/sunrpc/sched.h
@@ -130,12 +130,14 @@ struct rpc_task_setup {
130#define RPC_TASK_DYNAMIC 0x0080 /* task was kmalloc'ed */ 130#define RPC_TASK_DYNAMIC 0x0080 /* task was kmalloc'ed */
131#define RPC_TASK_KILLED 0x0100 /* task was killed */ 131#define RPC_TASK_KILLED 0x0100 /* task was killed */
132#define RPC_TASK_SOFT 0x0200 /* Use soft timeouts */ 132#define RPC_TASK_SOFT 0x0200 /* Use soft timeouts */
133#define RPC_TASK_SOFTCONN 0x0400 /* Fail if can't connect */
133 134
134#define RPC_IS_ASYNC(t) ((t)->tk_flags & RPC_TASK_ASYNC) 135#define RPC_IS_ASYNC(t) ((t)->tk_flags & RPC_TASK_ASYNC)
135#define RPC_IS_SWAPPER(t) ((t)->tk_flags & RPC_TASK_SWAPPER) 136#define RPC_IS_SWAPPER(t) ((t)->tk_flags & RPC_TASK_SWAPPER)
136#define RPC_DO_ROOTOVERRIDE(t) ((t)->tk_flags & RPC_TASK_ROOTCREDS) 137#define RPC_DO_ROOTOVERRIDE(t) ((t)->tk_flags & RPC_TASK_ROOTCREDS)
137#define RPC_ASSASSINATED(t) ((t)->tk_flags & RPC_TASK_KILLED) 138#define RPC_ASSASSINATED(t) ((t)->tk_flags & RPC_TASK_KILLED)
138#define RPC_IS_SOFT(t) ((t)->tk_flags & RPC_TASK_SOFT) 139#define RPC_IS_SOFT(t) ((t)->tk_flags & RPC_TASK_SOFT)
140#define RPC_IS_SOFTCONN(t) ((t)->tk_flags & RPC_TASK_SOFTCONN)
139 141
140#define RPC_TASK_RUNNING 0 142#define RPC_TASK_RUNNING 0
141#define RPC_TASK_QUEUED 1 143#define RPC_TASK_QUEUED 1
@@ -171,7 +173,8 @@ struct rpc_task_setup {
171#define RPC_PRIORITY_LOW (-1) 173#define RPC_PRIORITY_LOW (-1)
172#define RPC_PRIORITY_NORMAL (0) 174#define RPC_PRIORITY_NORMAL (0)
173#define RPC_PRIORITY_HIGH (1) 175#define RPC_PRIORITY_HIGH (1)
174#define RPC_NR_PRIORITY (1 + RPC_PRIORITY_HIGH - RPC_PRIORITY_LOW) 176#define RPC_PRIORITY_PRIVILEGED (2)
177#define RPC_NR_PRIORITY (1 + RPC_PRIORITY_PRIVILEGED - RPC_PRIORITY_LOW)
175 178
176struct rpc_timer { 179struct rpc_timer {
177 struct timer_list timer; 180 struct timer_list timer;
@@ -227,6 +230,7 @@ void rpc_wake_up_queued_task(struct rpc_wait_queue *,
227void rpc_wake_up(struct rpc_wait_queue *); 230void rpc_wake_up(struct rpc_wait_queue *);
228struct rpc_task *rpc_wake_up_next(struct rpc_wait_queue *); 231struct rpc_task *rpc_wake_up_next(struct rpc_wait_queue *);
229void rpc_wake_up_status(struct rpc_wait_queue *, int); 232void rpc_wake_up_status(struct rpc_wait_queue *, int);
233int rpc_queue_empty(struct rpc_wait_queue *);
230void rpc_delay(struct rpc_task *, unsigned long); 234void rpc_delay(struct rpc_task *, unsigned long);
231void * rpc_malloc(struct rpc_task *, size_t); 235void * rpc_malloc(struct rpc_task *, size_t);
232void rpc_free(void *); 236void rpc_free(void *);
@@ -252,6 +256,16 @@ static inline int rpc_wait_for_completion_task(struct rpc_task *task)
252 return __rpc_wait_for_completion_task(task, NULL); 256 return __rpc_wait_for_completion_task(task, NULL);
253} 257}
254 258
259static inline void rpc_task_set_priority(struct rpc_task *task, unsigned char prio)
260{
261 task->tk_priority = prio - RPC_PRIORITY_LOW;
262}
263
264static inline int rpc_task_has_priority(struct rpc_task *task, unsigned char prio)
265{
266 return (task->tk_priority + RPC_PRIORITY_LOW == prio);
267}
268
255#ifdef RPC_DEBUG 269#ifdef RPC_DEBUG
256static inline const char * rpc_qname(struct rpc_wait_queue *q) 270static inline const char * rpc_qname(struct rpc_wait_queue *q)
257{ 271{
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
index 52e8cb0a7569..5a3085b9b394 100644
--- a/include/linux/sunrpc/svc.h
+++ b/include/linux/sunrpc/svc.h
@@ -29,7 +29,6 @@ struct svc_pool_stats {
29 unsigned long packets; 29 unsigned long packets;
30 unsigned long sockets_queued; 30 unsigned long sockets_queued;
31 unsigned long threads_woken; 31 unsigned long threads_woken;
32 unsigned long overloads_avoided;
33 unsigned long threads_timedout; 32 unsigned long threads_timedout;
34}; 33};
35 34
@@ -50,7 +49,6 @@ struct svc_pool {
50 struct list_head sp_sockets; /* pending sockets */ 49 struct list_head sp_sockets; /* pending sockets */
51 unsigned int sp_nrthreads; /* # of threads in pool */ 50 unsigned int sp_nrthreads; /* # of threads in pool */
52 struct list_head sp_all_threads; /* all server threads */ 51 struct list_head sp_all_threads; /* all server threads */
53 int sp_nwaking; /* number of threads woken but not yet active */
54 struct svc_pool_stats sp_stats; /* statistics on pool operation */ 52 struct svc_pool_stats sp_stats; /* statistics on pool operation */
55} ____cacheline_aligned_in_smp; 53} ____cacheline_aligned_in_smp;
56 54
@@ -275,16 +273,11 @@ struct svc_rqst {
275 struct auth_domain * rq_client; /* RPC peer info */ 273 struct auth_domain * rq_client; /* RPC peer info */
276 struct auth_domain * rq_gssclient; /* "gss/"-style peer info */ 274 struct auth_domain * rq_gssclient; /* "gss/"-style peer info */
277 struct svc_cacherep * rq_cacherep; /* cache info */ 275 struct svc_cacherep * rq_cacherep; /* cache info */
278 struct knfsd_fh * rq_reffh; /* Referrence filehandle, used to
279 * determine what device number
280 * to report (real or virtual)
281 */
282 int rq_splice_ok; /* turned off in gss privacy 276 int rq_splice_ok; /* turned off in gss privacy
283 * to prevent encrypting page 277 * to prevent encrypting page
284 * cache pages */ 278 * cache pages */
285 wait_queue_head_t rq_wait; /* synchronization */ 279 wait_queue_head_t rq_wait; /* synchronization */
286 struct task_struct *rq_task; /* service thread */ 280 struct task_struct *rq_task; /* service thread */
287 int rq_waking; /* 1 if thread is being woken */
288}; 281};
289 282
290/* 283/*
diff --git a/include/linux/swap.h b/include/linux/swap.h
index 4ec90019c1a4..1f59d9340c4d 100644
--- a/include/linux/swap.h
+++ b/include/linux/swap.h
@@ -145,38 +145,43 @@ enum {
145 SWP_DISCARDABLE = (1 << 2), /* blkdev supports discard */ 145 SWP_DISCARDABLE = (1 << 2), /* blkdev supports discard */
146 SWP_DISCARDING = (1 << 3), /* now discarding a free cluster */ 146 SWP_DISCARDING = (1 << 3), /* now discarding a free cluster */
147 SWP_SOLIDSTATE = (1 << 4), /* blkdev seeks are cheap */ 147 SWP_SOLIDSTATE = (1 << 4), /* blkdev seeks are cheap */
148 SWP_CONTINUED = (1 << 5), /* swap_map has count continuation */
148 /* add others here before... */ 149 /* add others here before... */
149 SWP_SCANNING = (1 << 8), /* refcount in scan_swap_map */ 150 SWP_SCANNING = (1 << 8), /* refcount in scan_swap_map */
150}; 151};
151 152
152#define SWAP_CLUSTER_MAX 32 153#define SWAP_CLUSTER_MAX 32
153 154
154#define SWAP_MAP_MAX 0x7ffe 155#define SWAP_MAP_MAX 0x3e /* Max duplication count, in first swap_map */
155#define SWAP_MAP_BAD 0x7fff 156#define SWAP_MAP_BAD 0x3f /* Note pageblock is bad, in first swap_map */
156#define SWAP_HAS_CACHE 0x8000 /* There is a swap cache of entry. */ 157#define SWAP_HAS_CACHE 0x40 /* Flag page is cached, in first swap_map */
157#define SWAP_COUNT_MASK (~SWAP_HAS_CACHE) 158#define SWAP_CONT_MAX 0x7f /* Max count, in each swap_map continuation */
159#define COUNT_CONTINUED 0x80 /* See swap_map continuation for full count */
160#define SWAP_MAP_SHMEM 0xbf /* Owned by shmem/tmpfs, in first swap_map */
161
158/* 162/*
159 * The in-memory structure used to track swap areas. 163 * The in-memory structure used to track swap areas.
160 */ 164 */
161struct swap_info_struct { 165struct swap_info_struct {
162 unsigned long flags; 166 unsigned long flags; /* SWP_USED etc: see above */
163 int prio; /* swap priority */ 167 signed short prio; /* swap priority of this type */
164 int next; /* next entry on swap list */ 168 signed char type; /* strange name for an index */
165 struct file *swap_file; 169 signed char next; /* next type on the swap list */
166 struct block_device *bdev; 170 unsigned int max; /* extent of the swap_map */
167 struct list_head extent_list; 171 unsigned char *swap_map; /* vmalloc'ed array of usage counts */
168 struct swap_extent *curr_swap_extent; 172 unsigned int lowest_bit; /* index of first free in swap_map */
169 unsigned short *swap_map; 173 unsigned int highest_bit; /* index of last free in swap_map */
170 unsigned int lowest_bit; 174 unsigned int pages; /* total of usable pages of swap */
171 unsigned int highest_bit; 175 unsigned int inuse_pages; /* number of those currently in use */
176 unsigned int cluster_next; /* likely index for next allocation */
177 unsigned int cluster_nr; /* countdown to next cluster search */
172 unsigned int lowest_alloc; /* while preparing discard cluster */ 178 unsigned int lowest_alloc; /* while preparing discard cluster */
173 unsigned int highest_alloc; /* while preparing discard cluster */ 179 unsigned int highest_alloc; /* while preparing discard cluster */
174 unsigned int cluster_next; 180 struct swap_extent *curr_swap_extent;
175 unsigned int cluster_nr; 181 struct swap_extent first_swap_extent;
176 unsigned int pages; 182 struct block_device *bdev; /* swap device or bdev of swap file */
177 unsigned int max; 183 struct file *swap_file; /* seldom referenced */
178 unsigned int inuse_pages; 184 unsigned int old_block_size; /* seldom referenced */
179 unsigned int old_block_size;
180}; 185};
181 186
182struct swap_list_t { 187struct swap_list_t {
@@ -273,6 +278,7 @@ extern int scan_unevictable_register_node(struct node *node);
273extern void scan_unevictable_unregister_node(struct node *node); 278extern void scan_unevictable_unregister_node(struct node *node);
274 279
275extern int kswapd_run(int nid); 280extern int kswapd_run(int nid);
281extern void kswapd_stop(int nid);
276 282
277#ifdef CONFIG_MMU 283#ifdef CONFIG_MMU
278/* linux/mm/shmem.c */ 284/* linux/mm/shmem.c */
@@ -309,17 +315,18 @@ extern long total_swap_pages;
309extern void si_swapinfo(struct sysinfo *); 315extern void si_swapinfo(struct sysinfo *);
310extern swp_entry_t get_swap_page(void); 316extern swp_entry_t get_swap_page(void);
311extern swp_entry_t get_swap_page_of_type(int); 317extern swp_entry_t get_swap_page_of_type(int);
312extern void swap_duplicate(swp_entry_t);
313extern int swapcache_prepare(swp_entry_t);
314extern int valid_swaphandles(swp_entry_t, unsigned long *); 318extern int valid_swaphandles(swp_entry_t, unsigned long *);
319extern int add_swap_count_continuation(swp_entry_t, gfp_t);
320extern void swap_shmem_alloc(swp_entry_t);
321extern int swap_duplicate(swp_entry_t);
322extern int swapcache_prepare(swp_entry_t);
315extern void swap_free(swp_entry_t); 323extern void swap_free(swp_entry_t);
316extern void swapcache_free(swp_entry_t, struct page *page); 324extern void swapcache_free(swp_entry_t, struct page *page);
317extern int free_swap_and_cache(swp_entry_t); 325extern int free_swap_and_cache(swp_entry_t);
318extern int swap_type_of(dev_t, sector_t, struct block_device **); 326extern int swap_type_of(dev_t, sector_t, struct block_device **);
319extern unsigned int count_swap_pages(int, int); 327extern unsigned int count_swap_pages(int, int);
320extern sector_t map_swap_page(struct swap_info_struct *, pgoff_t); 328extern sector_t map_swap_page(struct page *, struct block_device **);
321extern sector_t swapdev_block(int, pgoff_t); 329extern sector_t swapdev_block(int, pgoff_t);
322extern struct swap_info_struct *get_swap_info_struct(unsigned);
323extern int reuse_swap_page(struct page *); 330extern int reuse_swap_page(struct page *);
324extern int try_to_free_swap(struct page *); 331extern int try_to_free_swap(struct page *);
325struct backing_dev_info; 332struct backing_dev_info;
@@ -348,6 +355,7 @@ static inline void disable_swap_token(void)
348#ifdef CONFIG_CGROUP_MEM_RES_CTLR 355#ifdef CONFIG_CGROUP_MEM_RES_CTLR
349extern void 356extern void
350mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout); 357mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout);
358extern int mem_cgroup_count_swap_user(swp_entry_t ent, struct page **pagep);
351#else 359#else
352static inline void 360static inline void
353mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout) 361mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout)
@@ -384,8 +392,18 @@ static inline void show_swap_cache_info(void)
384#define free_swap_and_cache(swp) is_migration_entry(swp) 392#define free_swap_and_cache(swp) is_migration_entry(swp)
385#define swapcache_prepare(swp) is_migration_entry(swp) 393#define swapcache_prepare(swp) is_migration_entry(swp)
386 394
387static inline void swap_duplicate(swp_entry_t swp) 395static inline int add_swap_count_continuation(swp_entry_t swp, gfp_t gfp_mask)
388{ 396{
397 return 0;
398}
399
400static inline void swap_shmem_alloc(swp_entry_t swp)
401{
402}
403
404static inline int swap_duplicate(swp_entry_t swp)
405{
406 return 0;
389} 407}
390 408
391static inline void swap_free(swp_entry_t swp) 409static inline void swap_free(swp_entry_t swp)
@@ -468,6 +486,14 @@ mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent)
468{ 486{
469} 487}
470 488
489#ifdef CONFIG_CGROUP_MEM_RES_CTLR
490static inline int
491mem_cgroup_count_swap_user(swp_entry_t ent, struct page **pagep)
492{
493 return 0;
494}
495#endif
496
471#endif /* CONFIG_SWAP */ 497#endif /* CONFIG_SWAP */
472#endif /* __KERNEL__*/ 498#endif /* __KERNEL__*/
473#endif /* _LINUX_SWAP_H */ 499#endif /* _LINUX_SWAP_H */
diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
index 73b1f1cec423..febedcf67c7e 100644
--- a/include/linux/swiotlb.h
+++ b/include/linux/swiotlb.h
@@ -7,6 +7,8 @@ struct device;
7struct dma_attrs; 7struct dma_attrs;
8struct scatterlist; 8struct scatterlist;
9 9
10extern int swiotlb_force;
11
10/* 12/*
11 * Maximum allowable number of contiguous slabs to map, 13 * Maximum allowable number of contiguous slabs to map,
12 * must be a power of 2. What is the appropriate value ? 14 * must be a power of 2. What is the appropriate value ?
@@ -20,8 +22,7 @@ struct scatterlist;
20 */ 22 */
21#define IO_TLB_SHIFT 11 23#define IO_TLB_SHIFT 11
22 24
23extern void 25extern void swiotlb_init(int verbose);
24swiotlb_init(void);
25 26
26extern void 27extern void
27*swiotlb_alloc_coherent(struct device *hwdev, size_t size, 28*swiotlb_alloc_coherent(struct device *hwdev, size_t size,
@@ -88,4 +89,11 @@ swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr);
88extern int 89extern int
89swiotlb_dma_supported(struct device *hwdev, u64 mask); 90swiotlb_dma_supported(struct device *hwdev, u64 mask);
90 91
92#ifdef CONFIG_SWIOTLB
93extern void __init swiotlb_free(void);
94#else
95static inline void swiotlb_free(void) { }
96#endif
97
98extern void swiotlb_print_info(void);
91#endif /* __LINUX_SWIOTLB_H */ 99#endif /* __LINUX_SWIOTLB_H */
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index a990ace1a838..057929b0a651 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -23,16 +23,21 @@ struct kexec_segment;
23struct linux_dirent; 23struct linux_dirent;
24struct linux_dirent64; 24struct linux_dirent64;
25struct list_head; 25struct list_head;
26struct mmap_arg_struct;
26struct msgbuf; 27struct msgbuf;
27struct msghdr; 28struct msghdr;
29struct mmsghdr;
28struct msqid_ds; 30struct msqid_ds;
29struct new_utsname; 31struct new_utsname;
30struct nfsctl_arg; 32struct nfsctl_arg;
31struct __old_kernel_stat; 33struct __old_kernel_stat;
34struct oldold_utsname;
35struct old_utsname;
32struct pollfd; 36struct pollfd;
33struct rlimit; 37struct rlimit;
34struct rusage; 38struct rusage;
35struct sched_param; 39struct sched_param;
40struct sel_arg_struct;
36struct semaphore; 41struct semaphore;
37struct sembuf; 42struct sembuf;
38struct shmid_ds; 43struct shmid_ds;
@@ -98,44 +103,21 @@ struct perf_event_attr;
98#define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) 103#define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__)
99#define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) 104#define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__)
100 105
101#ifdef CONFIG_EVENT_PROFILE 106#ifdef CONFIG_PERF_EVENTS
102#define TRACE_SYS_ENTER_PROFILE(sname) \ 107
103static int prof_sysenter_enable_##sname(void) \ 108#define TRACE_SYS_ENTER_PERF_INIT(sname) \
104{ \ 109 .perf_event_enable = perf_sysenter_enable, \
105 return reg_prof_syscall_enter("sys"#sname); \ 110 .perf_event_disable = perf_sysenter_disable,
106} \ 111
107 \ 112#define TRACE_SYS_EXIT_PERF_INIT(sname) \
108static void prof_sysenter_disable_##sname(void) \ 113 .perf_event_enable = perf_sysexit_enable, \
109{ \ 114 .perf_event_disable = perf_sysexit_disable,
110 unreg_prof_syscall_enter("sys"#sname); \
111}
112
113#define TRACE_SYS_EXIT_PROFILE(sname) \
114static int prof_sysexit_enable_##sname(void) \
115{ \
116 return reg_prof_syscall_exit("sys"#sname); \
117} \
118 \
119static void prof_sysexit_disable_##sname(void) \
120{ \
121 unreg_prof_syscall_exit("sys"#sname); \
122}
123
124#define TRACE_SYS_ENTER_PROFILE_INIT(sname) \
125 .profile_count = ATOMIC_INIT(-1), \
126 .profile_enable = prof_sysenter_enable_##sname, \
127 .profile_disable = prof_sysenter_disable_##sname,
128
129#define TRACE_SYS_EXIT_PROFILE_INIT(sname) \
130 .profile_count = ATOMIC_INIT(-1), \
131 .profile_enable = prof_sysexit_enable_##sname, \
132 .profile_disable = prof_sysexit_disable_##sname,
133#else 115#else
134#define TRACE_SYS_ENTER_PROFILE(sname) 116#define TRACE_SYS_ENTER_PERF(sname)
135#define TRACE_SYS_ENTER_PROFILE_INIT(sname) 117#define TRACE_SYS_ENTER_PERF_INIT(sname)
136#define TRACE_SYS_EXIT_PROFILE(sname) 118#define TRACE_SYS_EXIT_PERF(sname)
137#define TRACE_SYS_EXIT_PROFILE_INIT(sname) 119#define TRACE_SYS_EXIT_PERF_INIT(sname)
138#endif 120#endif /* CONFIG_PERF_EVENTS */
139 121
140#ifdef CONFIG_FTRACE_SYSCALLS 122#ifdef CONFIG_FTRACE_SYSCALLS
141#define __SC_STR_ADECL1(t, a) #a 123#define __SC_STR_ADECL1(t, a) #a
@@ -153,75 +135,47 @@ static void prof_sysexit_disable_##sname(void) \
153#define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) 135#define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__)
154 136
155#define SYSCALL_TRACE_ENTER_EVENT(sname) \ 137#define SYSCALL_TRACE_ENTER_EVENT(sname) \
156 static struct ftrace_event_call event_enter_##sname; \ 138 static const struct syscall_metadata __syscall_meta_##sname; \
157 struct trace_event enter_syscall_print_##sname = { \ 139 static struct ftrace_event_call \
140 __attribute__((__aligned__(4))) event_enter_##sname; \
141 static struct trace_event enter_syscall_print_##sname = { \
158 .trace = print_syscall_enter, \ 142 .trace = print_syscall_enter, \
159 }; \ 143 }; \
160 static int init_enter_##sname(void) \
161 { \
162 int num, id; \
163 num = syscall_name_to_nr("sys"#sname); \
164 if (num < 0) \
165 return -ENOSYS; \
166 id = register_ftrace_event(&enter_syscall_print_##sname);\
167 if (!id) \
168 return -ENODEV; \
169 event_enter_##sname.id = id; \
170 set_syscall_enter_id(num, id); \
171 INIT_LIST_HEAD(&event_enter_##sname.fields); \
172 return 0; \
173 } \
174 TRACE_SYS_ENTER_PROFILE(sname); \
175 static struct ftrace_event_call __used \ 144 static struct ftrace_event_call __used \
176 __attribute__((__aligned__(4))) \ 145 __attribute__((__aligned__(4))) \
177 __attribute__((section("_ftrace_events"))) \ 146 __attribute__((section("_ftrace_events"))) \
178 event_enter_##sname = { \ 147 event_enter_##sname = { \
179 .name = "sys_enter"#sname, \ 148 .name = "sys_enter"#sname, \
180 .system = "syscalls", \ 149 .system = "syscalls", \
181 .event = &event_syscall_enter, \ 150 .event = &enter_syscall_print_##sname, \
182 .raw_init = init_enter_##sname, \ 151 .raw_init = init_syscall_trace, \
183 .show_format = syscall_enter_format, \
184 .define_fields = syscall_enter_define_fields, \ 152 .define_fields = syscall_enter_define_fields, \
185 .regfunc = reg_event_syscall_enter, \ 153 .regfunc = reg_event_syscall_enter, \
186 .unregfunc = unreg_event_syscall_enter, \ 154 .unregfunc = unreg_event_syscall_enter, \
187 .data = "sys"#sname, \ 155 .data = (void *)&__syscall_meta_##sname,\
188 TRACE_SYS_ENTER_PROFILE_INIT(sname) \ 156 TRACE_SYS_ENTER_PERF_INIT(sname) \
189 } 157 }
190 158
191#define SYSCALL_TRACE_EXIT_EVENT(sname) \ 159#define SYSCALL_TRACE_EXIT_EVENT(sname) \
192 static struct ftrace_event_call event_exit_##sname; \ 160 static const struct syscall_metadata __syscall_meta_##sname; \
193 struct trace_event exit_syscall_print_##sname = { \ 161 static struct ftrace_event_call \
162 __attribute__((__aligned__(4))) event_exit_##sname; \
163 static struct trace_event exit_syscall_print_##sname = { \
194 .trace = print_syscall_exit, \ 164 .trace = print_syscall_exit, \
195 }; \ 165 }; \
196 static int init_exit_##sname(void) \
197 { \
198 int num, id; \
199 num = syscall_name_to_nr("sys"#sname); \
200 if (num < 0) \
201 return -ENOSYS; \
202 id = register_ftrace_event(&exit_syscall_print_##sname);\
203 if (!id) \
204 return -ENODEV; \
205 event_exit_##sname.id = id; \
206 set_syscall_exit_id(num, id); \
207 INIT_LIST_HEAD(&event_exit_##sname.fields); \
208 return 0; \
209 } \
210 TRACE_SYS_EXIT_PROFILE(sname); \
211 static struct ftrace_event_call __used \ 166 static struct ftrace_event_call __used \
212 __attribute__((__aligned__(4))) \ 167 __attribute__((__aligned__(4))) \
213 __attribute__((section("_ftrace_events"))) \ 168 __attribute__((section("_ftrace_events"))) \
214 event_exit_##sname = { \ 169 event_exit_##sname = { \
215 .name = "sys_exit"#sname, \ 170 .name = "sys_exit"#sname, \
216 .system = "syscalls", \ 171 .system = "syscalls", \
217 .event = &event_syscall_exit, \ 172 .event = &exit_syscall_print_##sname, \
218 .raw_init = init_exit_##sname, \ 173 .raw_init = init_syscall_trace, \
219 .show_format = syscall_exit_format, \
220 .define_fields = syscall_exit_define_fields, \ 174 .define_fields = syscall_exit_define_fields, \
221 .regfunc = reg_event_syscall_exit, \ 175 .regfunc = reg_event_syscall_exit, \
222 .unregfunc = unreg_event_syscall_exit, \ 176 .unregfunc = unreg_event_syscall_exit, \
223 .data = "sys"#sname, \ 177 .data = (void *)&__syscall_meta_##sname,\
224 TRACE_SYS_EXIT_PROFILE_INIT(sname) \ 178 TRACE_SYS_EXIT_PERF_INIT(sname) \
225 } 179 }
226 180
227#define SYSCALL_METADATA(sname, nb) \ 181#define SYSCALL_METADATA(sname, nb) \
@@ -245,7 +199,7 @@ static void prof_sysexit_disable_##sname(void) \
245 static const struct syscall_metadata __used \ 199 static const struct syscall_metadata __used \
246 __attribute__((__aligned__(4))) \ 200 __attribute__((__aligned__(4))) \
247 __attribute__((section("__syscalls_metadata"))) \ 201 __attribute__((section("__syscalls_metadata"))) \
248 __syscall_meta_##sname = { \ 202 __syscall_meta__##sname = { \
249 .name = "sys_"#sname, \ 203 .name = "sys_"#sname, \
250 .nb_args = 0, \ 204 .nb_args = 0, \
251 .enter_event = &event_enter__##sname, \ 205 .enter_event = &event_enter__##sname, \
@@ -677,6 +631,9 @@ asmlinkage long sys_recv(int, void __user *, size_t, unsigned);
677asmlinkage long sys_recvfrom(int, void __user *, size_t, unsigned, 631asmlinkage long sys_recvfrom(int, void __user *, size_t, unsigned,
678 struct sockaddr __user *, int __user *); 632 struct sockaddr __user *, int __user *);
679asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags); 633asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags);
634asmlinkage long sys_recvmmsg(int fd, struct mmsghdr __user *msg,
635 unsigned int vlen, unsigned flags,
636 struct timespec __user *timeout);
680asmlinkage long sys_socket(int, int, int); 637asmlinkage long sys_socket(int, int, int);
681asmlinkage long sys_socketpair(int, int, int, int __user *); 638asmlinkage long sys_socketpair(int, int, int, int __user *);
682asmlinkage long sys_socketcall(int call, unsigned long __user *args); 639asmlinkage long sys_socketcall(int call, unsigned long __user *args);
@@ -685,6 +642,7 @@ asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds,
685 long timeout); 642 long timeout);
686asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp, 643asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp,
687 fd_set __user *exp, struct timeval __user *tvp); 644 fd_set __user *exp, struct timeval __user *tvp);
645asmlinkage long sys_old_select(struct sel_arg_struct __user *arg);
688asmlinkage long sys_epoll_create(int size); 646asmlinkage long sys_epoll_create(int size);
689asmlinkage long sys_epoll_create1(int flags); 647asmlinkage long sys_epoll_create1(int flags);
690asmlinkage long sys_epoll_ctl(int epfd, int op, int fd, 648asmlinkage long sys_epoll_ctl(int epfd, int op, int fd,
@@ -699,6 +657,8 @@ asmlinkage long sys_gethostname(char __user *name, int len);
699asmlinkage long sys_sethostname(char __user *name, int len); 657asmlinkage long sys_sethostname(char __user *name, int len);
700asmlinkage long sys_setdomainname(char __user *name, int len); 658asmlinkage long sys_setdomainname(char __user *name, int len);
701asmlinkage long sys_newuname(struct new_utsname __user *name); 659asmlinkage long sys_newuname(struct new_utsname __user *name);
660asmlinkage long sys_uname(struct old_utsname __user *);
661asmlinkage long sys_olduname(struct oldold_utsname __user *);
702 662
703asmlinkage long sys_getrlimit(unsigned int resource, 663asmlinkage long sys_getrlimit(unsigned int resource,
704 struct rlimit __user *rlim); 664 struct rlimit __user *rlim);
@@ -728,6 +688,8 @@ asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg);
728asmlinkage long sys_shmget(key_t key, size_t size, int flag); 688asmlinkage long sys_shmget(key_t key, size_t size, int flag);
729asmlinkage long sys_shmdt(char __user *shmaddr); 689asmlinkage long sys_shmdt(char __user *shmaddr);
730asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf); 690asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf);
691asmlinkage long sys_ipc(unsigned int call, int first, unsigned long second,
692 unsigned long third, void __user *ptr, long fifth);
731 693
732asmlinkage long sys_mq_open(const char __user *name, int oflag, mode_t mode, struct mq_attr __user *attr); 694asmlinkage long sys_mq_open(const char __user *name, int oflag, mode_t mode, struct mq_attr __user *attr);
733asmlinkage long sys_mq_unlink(const char __user *name); 695asmlinkage long sys_mq_unlink(const char __user *name);
@@ -879,4 +841,10 @@ int kernel_execve(const char *filename, char *const argv[], char *const envp[]);
879asmlinkage long sys_perf_event_open( 841asmlinkage long sys_perf_event_open(
880 struct perf_event_attr __user *attr_uptr, 842 struct perf_event_attr __user *attr_uptr,
881 pid_t pid, int cpu, int group_fd, unsigned long flags); 843 pid_t pid, int cpu, int group_fd, unsigned long flags);
844
845asmlinkage long sys_mmap_pgoff(unsigned long addr, unsigned long len,
846 unsigned long prot, unsigned long flags,
847 unsigned long fd, unsigned long pgoff);
848asmlinkage long sys_old_mmap(struct mmap_arg_struct __user *arg);
849
882#endif 850#endif
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index 1e4743ee6831..f66014c90c9f 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -15,9 +15,6 @@
15 ** The kernel will then return -ENOTDIR to any application using 15 ** The kernel will then return -ENOTDIR to any application using
16 ** the old binary interface. 16 ** the old binary interface.
17 ** 17 **
18 ** For new interfaces unless you really need a binary number
19 ** please use CTL_UNNUMBERED.
20 **
21 **************************************************************** 18 ****************************************************************
22 **************************************************************** 19 ****************************************************************
23 */ 20 */
@@ -50,12 +47,6 @@ struct __sysctl_args {
50 47
51/* Top-level names: */ 48/* Top-level names: */
52 49
53/* For internal pattern-matching use only: */
54#ifdef __KERNEL__
55#define CTL_NONE 0
56#define CTL_UNNUMBERED CTL_NONE /* sysctl without a binary number */
57#endif
58
59enum 50enum
60{ 51{
61 CTL_KERN=1, /* General kernel info and control */ 52 CTL_KERN=1, /* General kernel info and control */
@@ -98,8 +89,8 @@ enum
98 KERN_VERSION=4, /* string: compile time info */ 89 KERN_VERSION=4, /* string: compile time info */
99 KERN_SECUREMASK=5, /* struct: maximum rights mask */ 90 KERN_SECUREMASK=5, /* struct: maximum rights mask */
100 KERN_PROF=6, /* table: profiling information */ 91 KERN_PROF=6, /* table: profiling information */
101 KERN_NODENAME=7, 92 KERN_NODENAME=7, /* string: hostname */
102 KERN_DOMAINNAME=8, 93 KERN_DOMAINNAME=8, /* string: domainname */
103 94
104 KERN_PANIC=15, /* int: panic timeout */ 95 KERN_PANIC=15, /* int: panic timeout */
105 KERN_REALROOTDEV=16, /* real root device to mount after initrd */ 96 KERN_REALROOTDEV=16, /* real root device to mount after initrd */
@@ -111,8 +102,8 @@ enum
111 KERN_PPC_HTABRECLAIM=25, /* turn htab reclaimation on/off on PPC */ 102 KERN_PPC_HTABRECLAIM=25, /* turn htab reclaimation on/off on PPC */
112 KERN_PPC_ZEROPAGED=26, /* turn idle page zeroing on/off on PPC */ 103 KERN_PPC_ZEROPAGED=26, /* turn idle page zeroing on/off on PPC */
113 KERN_PPC_POWERSAVE_NAP=27, /* use nap mode for power saving */ 104 KERN_PPC_POWERSAVE_NAP=27, /* use nap mode for power saving */
114 KERN_MODPROBE=28, 105 KERN_MODPROBE=28, /* string: modprobe path */
115 KERN_SG_BIG_BUFF=29, 106 KERN_SG_BIG_BUFF=29, /* int: sg driver reserved buffer size */
116 KERN_ACCT=30, /* BSD process accounting parameters */ 107 KERN_ACCT=30, /* BSD process accounting parameters */
117 KERN_PPC_L2CR=31, /* l2cr register on PPC */ 108 KERN_PPC_L2CR=31, /* l2cr register on PPC */
118 109
@@ -159,7 +150,7 @@ enum
159 KERN_ACPI_VIDEO_FLAGS=71, /* int: flags for setting up video after ACPI sleep */ 150 KERN_ACPI_VIDEO_FLAGS=71, /* int: flags for setting up video after ACPI sleep */
160 KERN_IA64_UNALIGNED=72, /* int: ia64 unaligned userland trap enable */ 151 KERN_IA64_UNALIGNED=72, /* int: ia64 unaligned userland trap enable */
161 KERN_COMPAT_LOG=73, /* int: print compat layer messages */ 152 KERN_COMPAT_LOG=73, /* int: print compat layer messages */
162 KERN_MAX_LOCK_DEPTH=74, 153 KERN_MAX_LOCK_DEPTH=74, /* int: rtmutex's maximum lock depth */
163 KERN_NMI_WATCHDOG=75, /* int: enable/disable nmi watchdog */ 154 KERN_NMI_WATCHDOG=75, /* int: enable/disable nmi watchdog */
164 KERN_PANIC_ON_NMI=76, /* int: whether we will panic on an unrecovered */ 155 KERN_PANIC_ON_NMI=76, /* int: whether we will panic on an unrecovered */
165}; 156};
@@ -490,7 +481,6 @@ enum
490 NET_IPV4_CONF_PROMOTE_SECONDARIES=20, 481 NET_IPV4_CONF_PROMOTE_SECONDARIES=20,
491 NET_IPV4_CONF_ARP_ACCEPT=21, 482 NET_IPV4_CONF_ARP_ACCEPT=21,
492 NET_IPV4_CONF_ARP_NOTIFY=22, 483 NET_IPV4_CONF_ARP_NOTIFY=22,
493 __NET_IPV4_CONF_MAX
494}; 484};
495 485
496/* /proc/sys/net/ipv4/netfilter */ 486/* /proc/sys/net/ipv4/netfilter */
@@ -606,7 +596,6 @@ enum {
606 NET_NEIGH_GC_THRESH3=16, 596 NET_NEIGH_GC_THRESH3=16,
607 NET_NEIGH_RETRANS_TIME_MS=17, 597 NET_NEIGH_RETRANS_TIME_MS=17,
608 NET_NEIGH_REACHABLE_TIME_MS=18, 598 NET_NEIGH_REACHABLE_TIME_MS=18,
609 __NET_NEIGH_MAX
610}; 599};
611 600
612/* /proc/sys/net/dccp */ 601/* /proc/sys/net/dccp */
@@ -972,10 +961,6 @@ extern int sysctl_perm(struct ctl_table_root *root,
972 961
973typedef struct ctl_table ctl_table; 962typedef struct ctl_table ctl_table;
974 963
975typedef int ctl_handler (struct ctl_table *table,
976 void __user *oldval, size_t __user *oldlenp,
977 void __user *newval, size_t newlen);
978
979typedef int proc_handler (struct ctl_table *ctl, int write, 964typedef int proc_handler (struct ctl_table *ctl, int write,
980 void __user *buffer, size_t *lenp, loff_t *ppos); 965 void __user *buffer, size_t *lenp, loff_t *ppos);
981 966
@@ -996,21 +981,10 @@ extern int proc_doulongvec_minmax(struct ctl_table *, int,
996extern int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int, 981extern int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int,
997 void __user *, size_t *, loff_t *); 982 void __user *, size_t *, loff_t *);
998 983
999extern int do_sysctl (int __user *name, int nlen,
1000 void __user *oldval, size_t __user *oldlenp,
1001 void __user *newval, size_t newlen);
1002
1003extern ctl_handler sysctl_data;
1004extern ctl_handler sysctl_string;
1005extern ctl_handler sysctl_intvec;
1006extern ctl_handler sysctl_jiffies;
1007extern ctl_handler sysctl_ms_jiffies;
1008
1009
1010/* 984/*
1011 * Register a set of sysctl names by calling register_sysctl_table 985 * Register a set of sysctl names by calling register_sysctl_table
1012 * with an initialised array of struct ctl_table's. An entry with zero 986 * with an initialised array of struct ctl_table's. An entry with
1013 * ctl_name and NULL procname terminates the table. table->de will be 987 * NULL procname terminates the table. table->de will be
1014 * set up by the registration and need not be initialised in advance. 988 * set up by the registration and need not be initialised in advance.
1015 * 989 *
1016 * sysctl names can be mirrored automatically under /proc/sys. The 990 * sysctl names can be mirrored automatically under /proc/sys. The
@@ -1023,24 +997,11 @@ extern ctl_handler sysctl_ms_jiffies;
1023 * under /proc; non-leaf nodes will be represented by directories. A 997 * under /proc; non-leaf nodes will be represented by directories. A
1024 * null procname disables /proc mirroring at this node. 998 * null procname disables /proc mirroring at this node.
1025 * 999 *
1026 * sysctl entries with a zero ctl_name will not be available through
1027 * the binary sysctl interface.
1028 *
1029 * sysctl(2) can automatically manage read and write requests through 1000 * sysctl(2) can automatically manage read and write requests through
1030 * the sysctl table. The data and maxlen fields of the ctl_table 1001 * the sysctl table. The data and maxlen fields of the ctl_table
1031 * struct enable minimal validation of the values being written to be 1002 * struct enable minimal validation of the values being written to be
1032 * performed, and the mode field allows minimal authentication. 1003 * performed, and the mode field allows minimal authentication.
1033 * 1004 *
1034 * More sophisticated management can be enabled by the provision of a
1035 * strategy routine with the table entry. This will be called before
1036 * any automatic read or write of the data is performed.
1037 *
1038 * The strategy routine may return:
1039 * <0: Error occurred (error is passed to user process)
1040 * 0: OK - proceed with automatic read or write.
1041 * >0: OK - read or write has been done by the strategy routine, so
1042 * return immediately.
1043 *
1044 * There must be a proc_handler routine for any terminal nodes 1005 * There must be a proc_handler routine for any terminal nodes
1045 * mirrored under /proc/sys (non-terminals are handled by a built-in 1006 * mirrored under /proc/sys (non-terminals are handled by a built-in
1046 * directory handler). Several default handlers are available to 1007 * directory handler). Several default handlers are available to
@@ -1050,7 +1011,6 @@ extern ctl_handler sysctl_ms_jiffies;
1050/* A sysctl table is an array of struct ctl_table: */ 1011/* A sysctl table is an array of struct ctl_table: */
1051struct ctl_table 1012struct ctl_table
1052{ 1013{
1053 int ctl_name; /* Binary ID */
1054 const char *procname; /* Text ID for /proc/sys, or zero */ 1014 const char *procname; /* Text ID for /proc/sys, or zero */
1055 void *data; 1015 void *data;
1056 int maxlen; 1016 int maxlen;
@@ -1058,7 +1018,6 @@ struct ctl_table
1058 struct ctl_table *child; 1018 struct ctl_table *child;
1059 struct ctl_table *parent; /* Automatically set */ 1019 struct ctl_table *parent; /* Automatically set */
1060 proc_handler *proc_handler; /* Callback for text formatting */ 1020 proc_handler *proc_handler; /* Callback for text formatting */
1061 ctl_handler *strategy; /* Callback function for all r/w */
1062 void *extra1; 1021 void *extra1;
1063 void *extra2; 1022 void *extra2;
1064}; 1023};
@@ -1092,7 +1051,6 @@ struct ctl_table_header
1092/* struct ctl_path describes where in the hierarchy a table is added */ 1051/* struct ctl_path describes where in the hierarchy a table is added */
1093struct ctl_path { 1052struct ctl_path {
1094 const char *procname; 1053 const char *procname;
1095 int ctl_name;
1096}; 1054};
1097 1055
1098void register_sysctl_root(struct ctl_table_root *root); 1056void register_sysctl_root(struct ctl_table_root *root);
diff --git a/include/linux/sysdev.h b/include/linux/sysdev.h
index f395bb3fa2f2..1154c29f4101 100644
--- a/include/linux/sysdev.h
+++ b/include/linux/sysdev.h
@@ -27,10 +27,12 @@
27 27
28 28
29struct sys_device; 29struct sys_device;
30struct sysdev_class_attribute;
30 31
31struct sysdev_class { 32struct sysdev_class {
32 const char *name; 33 const char *name;
33 struct list_head drivers; 34 struct list_head drivers;
35 struct sysdev_class_attribute **attrs;
34 36
35 /* Default operations for these types of devices */ 37 /* Default operations for these types of devices */
36 int (*shutdown)(struct sys_device *); 38 int (*shutdown)(struct sys_device *);
@@ -41,8 +43,10 @@ struct sysdev_class {
41 43
42struct sysdev_class_attribute { 44struct sysdev_class_attribute {
43 struct attribute attr; 45 struct attribute attr;
44 ssize_t (*show)(struct sysdev_class *, char *); 46 ssize_t (*show)(struct sysdev_class *, struct sysdev_class_attribute *,
45 ssize_t (*store)(struct sysdev_class *, const char *, size_t); 47 char *);
48 ssize_t (*store)(struct sysdev_class *, struct sysdev_class_attribute *,
49 const char *, size_t);
46}; 50};
47 51
48#define _SYSDEV_CLASS_ATTR(_name,_mode,_show,_store) \ 52#define _SYSDEV_CLASS_ATTR(_name,_mode,_show,_store) \
@@ -119,6 +123,19 @@ struct sysdev_attribute {
119extern int sysdev_create_file(struct sys_device *, struct sysdev_attribute *); 123extern int sysdev_create_file(struct sys_device *, struct sysdev_attribute *);
120extern void sysdev_remove_file(struct sys_device *, struct sysdev_attribute *); 124extern void sysdev_remove_file(struct sys_device *, struct sysdev_attribute *);
121 125
126/* Create/remove NULL terminated attribute list */
127static inline int
128sysdev_create_files(struct sys_device *d, struct sysdev_attribute **a)
129{
130 return sysfs_create_files(&d->kobj, (const struct attribute **)a);
131}
132
133static inline void
134sysdev_remove_files(struct sys_device *d, struct sysdev_attribute **a)
135{
136 return sysfs_remove_files(&d->kobj, (const struct attribute **)a);
137}
138
122struct sysdev_ext_attribute { 139struct sysdev_ext_attribute {
123 struct sysdev_attribute attr; 140 struct sysdev_attribute attr;
124 void *var; 141 void *var;
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
index 9d68fed50f11..f0496b3d1811 100644
--- a/include/linux/sysfs.h
+++ b/include/linux/sysfs.h
@@ -15,6 +15,7 @@
15#include <linux/compiler.h> 15#include <linux/compiler.h>
16#include <linux/errno.h> 16#include <linux/errno.h>
17#include <linux/list.h> 17#include <linux/list.h>
18#include <linux/lockdep.h>
18#include <asm/atomic.h> 19#include <asm/atomic.h>
19 20
20struct kobject; 21struct kobject;
@@ -29,8 +30,33 @@ struct attribute {
29 const char *name; 30 const char *name;
30 struct module *owner; 31 struct module *owner;
31 mode_t mode; 32 mode_t mode;
33#ifdef CONFIG_DEBUG_LOCK_ALLOC
34 struct lock_class_key *key;
35 struct lock_class_key skey;
36#endif
32}; 37};
33 38
39/**
40 * sysfs_attr_init - initialize a dynamically allocated sysfs attribute
41 * @attr: struct attribute to initialize
42 *
43 * Initialize a dynamically allocated struct attribute so we can
44 * make lockdep happy. This is a new requirement for attributes
45 * and initially this is only needed when lockdep is enabled.
46 * Lockdep gives a nice error when your attribute is added to
47 * sysfs if you don't have this.
48 */
49#ifdef CONFIG_DEBUG_LOCK_ALLOC
50#define sysfs_attr_init(attr) \
51do { \
52 static struct lock_class_key __key; \
53 \
54 (attr)->key = &__key; \
55} while(0)
56#else
57#define sysfs_attr_init(attr) do {} while(0)
58#endif
59
34struct attribute_group { 60struct attribute_group {
35 const char *name; 61 const char *name;
36 mode_t (*is_visible)(struct kobject *, 62 mode_t (*is_visible)(struct kobject *,
@@ -74,6 +100,18 @@ struct bin_attribute {
74 struct vm_area_struct *vma); 100 struct vm_area_struct *vma);
75}; 101};
76 102
103/**
104 * sysfs_bin_attr_init - initialize a dynamically allocated bin_attribute
105 * @attr: struct bin_attribute to initialize
106 *
107 * Initialize a dynamically allocated struct bin_attribute so we
108 * can make lockdep happy. This is a new requirement for
109 * attributes and initially this is only needed when lockdep is
110 * enabled. Lockdep gives a nice error when your attribute is
111 * added to sysfs if you don't have this.
112 */
113#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr)
114
77struct sysfs_ops { 115struct sysfs_ops {
78 ssize_t (*show)(struct kobject *, struct attribute *,char *); 116 ssize_t (*show)(struct kobject *, struct attribute *,char *);
79 ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t); 117 ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
@@ -94,13 +132,17 @@ int __must_check sysfs_move_dir(struct kobject *kobj,
94 132
95int __must_check sysfs_create_file(struct kobject *kobj, 133int __must_check sysfs_create_file(struct kobject *kobj,
96 const struct attribute *attr); 134 const struct attribute *attr);
135int __must_check sysfs_create_files(struct kobject *kobj,
136 const struct attribute **attr);
97int __must_check sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, 137int __must_check sysfs_chmod_file(struct kobject *kobj, struct attribute *attr,
98 mode_t mode); 138 mode_t mode);
99void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr); 139void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr);
140void sysfs_remove_files(struct kobject *kobj, const struct attribute **attr);
100 141
101int __must_check sysfs_create_bin_file(struct kobject *kobj, 142int __must_check sysfs_create_bin_file(struct kobject *kobj,
102 struct bin_attribute *attr); 143 const struct bin_attribute *attr);
103void sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr); 144void sysfs_remove_bin_file(struct kobject *kobj,
145 const struct bin_attribute *attr);
104 146
105int __must_check sysfs_create_link(struct kobject *kobj, struct kobject *target, 147int __must_check sysfs_create_link(struct kobject *kobj, struct kobject *target,
106 const char *name); 148 const char *name);
@@ -109,6 +151,9 @@ int __must_check sysfs_create_link_nowarn(struct kobject *kobj,
109 const char *name); 151 const char *name);
110void sysfs_remove_link(struct kobject *kobj, const char *name); 152void sysfs_remove_link(struct kobject *kobj, const char *name);
111 153
154int sysfs_rename_link(struct kobject *kobj, struct kobject *target,
155 const char *old_name, const char *new_name);
156
112int __must_check sysfs_create_group(struct kobject *kobj, 157int __must_check sysfs_create_group(struct kobject *kobj,
113 const struct attribute_group *grp); 158 const struct attribute_group *grp);
114int sysfs_update_group(struct kobject *kobj, 159int sysfs_update_group(struct kobject *kobj,
@@ -163,6 +208,12 @@ static inline int sysfs_create_file(struct kobject *kobj,
163 return 0; 208 return 0;
164} 209}
165 210
211static inline int sysfs_create_files(struct kobject *kobj,
212 const struct attribute **attr)
213{
214 return 0;
215}
216
166static inline int sysfs_chmod_file(struct kobject *kobj, 217static inline int sysfs_chmod_file(struct kobject *kobj,
167 struct attribute *attr, mode_t mode) 218 struct attribute *attr, mode_t mode)
168{ 219{
@@ -174,14 +225,19 @@ static inline void sysfs_remove_file(struct kobject *kobj,
174{ 225{
175} 226}
176 227
228static inline void sysfs_remove_files(struct kobject *kobj,
229 const struct attribute **attr)
230{
231}
232
177static inline int sysfs_create_bin_file(struct kobject *kobj, 233static inline int sysfs_create_bin_file(struct kobject *kobj,
178 struct bin_attribute *attr) 234 const struct bin_attribute *attr)
179{ 235{
180 return 0; 236 return 0;
181} 237}
182 238
183static inline void sysfs_remove_bin_file(struct kobject *kobj, 239static inline void sysfs_remove_bin_file(struct kobject *kobj,
184 struct bin_attribute *attr) 240 const struct bin_attribute *attr)
185{ 241{
186} 242}
187 243
@@ -202,6 +258,12 @@ static inline void sysfs_remove_link(struct kobject *kobj, const char *name)
202{ 258{
203} 259}
204 260
261static inline int sysfs_rename_link(struct kobject *k, struct kobject *t,
262 const char *old_name, const char *new_name)
263{
264 return 0;
265}
266
205static inline int sysfs_create_group(struct kobject *kobj, 267static inline int sysfs_create_group(struct kobject *kobj,
206 const struct attribute_group *grp) 268 const struct attribute_group *grp)
207{ 269{
diff --git a/include/linux/syslog.h b/include/linux/syslog.h
new file mode 100644
index 000000000000..38911391a139
--- /dev/null
+++ b/include/linux/syslog.h
@@ -0,0 +1,52 @@
1/* Syslog internals
2 *
3 * Copyright 2010 Canonical, Ltd.
4 * Author: Kees Cook <kees.cook@canonical.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, or (at your option)
9 * 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; see the file COPYING. If not, write to
18 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20
21#ifndef _LINUX_SYSLOG_H
22#define _LINUX_SYSLOG_H
23
24/* Close the log. Currently a NOP. */
25#define SYSLOG_ACTION_CLOSE 0
26/* Open the log. Currently a NOP. */
27#define SYSLOG_ACTION_OPEN 1
28/* Read from the log. */
29#define SYSLOG_ACTION_READ 2
30/* Read all messages remaining in the ring buffer. */
31#define SYSLOG_ACTION_READ_ALL 3
32/* Read and clear all messages remaining in the ring buffer */
33#define SYSLOG_ACTION_READ_CLEAR 4
34/* Clear ring buffer. */
35#define SYSLOG_ACTION_CLEAR 5
36/* Disable printk's to console */
37#define SYSLOG_ACTION_CONSOLE_OFF 6
38/* Enable printk's to console */
39#define SYSLOG_ACTION_CONSOLE_ON 7
40/* Set level of messages printed to console */
41#define SYSLOG_ACTION_CONSOLE_LEVEL 8
42/* Return number of unread characters in the log buffer */
43#define SYSLOG_ACTION_SIZE_UNREAD 9
44/* Return size of the log buffer */
45#define SYSLOG_ACTION_SIZE_BUFFER 10
46
47#define SYSLOG_FROM_CALL 0
48#define SYSLOG_FROM_FILE 1
49
50int do_syslog(int type, char __user *buf, int count, bool from_file);
51
52#endif /* _LINUX_SYSLOG_H */
diff --git a/include/linux/taskstats_kern.h b/include/linux/taskstats_kern.h
index 3398f4553269..58de6edf751f 100644
--- a/include/linux/taskstats_kern.h
+++ b/include/linux/taskstats_kern.h
@@ -9,16 +9,12 @@
9 9
10#include <linux/taskstats.h> 10#include <linux/taskstats.h>
11#include <linux/sched.h> 11#include <linux/sched.h>
12#include <linux/slab.h>
12 13
13#ifdef CONFIG_TASKSTATS 14#ifdef CONFIG_TASKSTATS
14extern struct kmem_cache *taskstats_cache; 15extern struct kmem_cache *taskstats_cache;
15extern struct mutex taskstats_exit_mutex; 16extern struct mutex taskstats_exit_mutex;
16 17
17static inline void taskstats_tgid_init(struct signal_struct *sig)
18{
19 sig->stats = NULL;
20}
21
22static inline void taskstats_tgid_free(struct signal_struct *sig) 18static inline void taskstats_tgid_free(struct signal_struct *sig)
23{ 19{
24 if (sig->stats) 20 if (sig->stats)
@@ -30,8 +26,6 @@ extern void taskstats_init_early(void);
30#else 26#else
31static inline void taskstats_exit(struct task_struct *tsk, int group_dead) 27static inline void taskstats_exit(struct task_struct *tsk, int group_dead)
32{} 28{}
33static inline void taskstats_tgid_init(struct signal_struct *sig)
34{}
35static inline void taskstats_tgid_free(struct signal_struct *sig) 29static inline void taskstats_tgid_free(struct signal_struct *sig)
36{} 30{}
37static inline void taskstats_init_early(void) 31static inline void taskstats_init_early(void)
diff --git a/include/linux/tc_act/tc_defact.h b/include/linux/tc_act/tc_defact.h
index 964f473af0f0..6f65d07c7ce2 100644
--- a/include/linux/tc_act/tc_defact.h
+++ b/include/linux/tc_act/tc_defact.h
@@ -3,13 +3,11 @@
3 3
4#include <linux/pkt_cls.h> 4#include <linux/pkt_cls.h>
5 5
6struct tc_defact 6struct tc_defact {
7{
8 tc_gen; 7 tc_gen;
9}; 8};
10 9
11enum 10enum {
12{
13 TCA_DEF_UNSPEC, 11 TCA_DEF_UNSPEC,
14 TCA_DEF_TM, 12 TCA_DEF_TM,
15 TCA_DEF_PARMS, 13 TCA_DEF_PARMS,
diff --git a/include/linux/tc_act/tc_gact.h b/include/linux/tc_act/tc_gact.h
index e895c0a39629..f7bf94eed510 100644
--- a/include/linux/tc_act/tc_gact.h
+++ b/include/linux/tc_act/tc_gact.h
@@ -5,14 +5,12 @@
5#include <linux/pkt_cls.h> 5#include <linux/pkt_cls.h>
6 6
7#define TCA_ACT_GACT 5 7#define TCA_ACT_GACT 5
8struct tc_gact 8struct tc_gact {
9{
10 tc_gen; 9 tc_gen;
11 10
12}; 11};
13 12
14struct tc_gact_p 13struct tc_gact_p {
15{
16#define PGACT_NONE 0 14#define PGACT_NONE 0
17#define PGACT_NETRAND 1 15#define PGACT_NETRAND 1
18#define PGACT_DETERM 2 16#define PGACT_DETERM 2
@@ -22,8 +20,7 @@ struct tc_gact_p
22 int paction; 20 int paction;
23}; 21};
24 22
25enum 23enum {
26{
27 TCA_GACT_UNSPEC, 24 TCA_GACT_UNSPEC,
28 TCA_GACT_TM, 25 TCA_GACT_TM,
29 TCA_GACT_PARMS, 26 TCA_GACT_PARMS,
diff --git a/include/linux/tc_act/tc_ipt.h b/include/linux/tc_act/tc_ipt.h
index 4b6f7b6c7a79..a2335563d21f 100644
--- a/include/linux/tc_act/tc_ipt.h
+++ b/include/linux/tc_act/tc_ipt.h
@@ -5,8 +5,7 @@
5 5
6#define TCA_ACT_IPT 6 6#define TCA_ACT_IPT 6
7 7
8enum 8enum {
9{
10 TCA_IPT_UNSPEC, 9 TCA_IPT_UNSPEC,
11 TCA_IPT_TABLE, 10 TCA_IPT_TABLE,
12 TCA_IPT_HOOK, 11 TCA_IPT_HOOK,
diff --git a/include/linux/tc_act/tc_mirred.h b/include/linux/tc_act/tc_mirred.h
index 0a99ab60d610..7561750e8fd6 100644
--- a/include/linux/tc_act/tc_mirred.h
+++ b/include/linux/tc_act/tc_mirred.h
@@ -10,15 +10,13 @@
10#define TCA_INGRESS_REDIR 3 /* packet redirect to INGRESS*/ 10#define TCA_INGRESS_REDIR 3 /* packet redirect to INGRESS*/
11#define TCA_INGRESS_MIRROR 4 /* mirror packet to INGRESS */ 11#define TCA_INGRESS_MIRROR 4 /* mirror packet to INGRESS */
12 12
13struct tc_mirred 13struct tc_mirred {
14{
15 tc_gen; 14 tc_gen;
16 int eaction; /* one of IN/EGRESS_MIRROR/REDIR */ 15 int eaction; /* one of IN/EGRESS_MIRROR/REDIR */
17 __u32 ifindex; /* ifindex of egress port */ 16 __u32 ifindex; /* ifindex of egress port */
18}; 17};
19 18
20enum 19enum {
21{
22 TCA_MIRRED_UNSPEC, 20 TCA_MIRRED_UNSPEC,
23 TCA_MIRRED_TM, 21 TCA_MIRRED_TM,
24 TCA_MIRRED_PARMS, 22 TCA_MIRRED_PARMS,
diff --git a/include/linux/tc_act/tc_nat.h b/include/linux/tc_act/tc_nat.h
index e7cf31e8ba79..6663aeba0b9a 100644
--- a/include/linux/tc_act/tc_nat.h
+++ b/include/linux/tc_act/tc_nat.h
@@ -6,8 +6,7 @@
6 6
7#define TCA_ACT_NAT 9 7#define TCA_ACT_NAT 9
8 8
9enum 9enum {
10{
11 TCA_NAT_UNSPEC, 10 TCA_NAT_UNSPEC,
12 TCA_NAT_PARMS, 11 TCA_NAT_PARMS,
13 TCA_NAT_TM, 12 TCA_NAT_TM,
@@ -17,8 +16,7 @@ enum
17 16
18#define TCA_NAT_FLAG_EGRESS 1 17#define TCA_NAT_FLAG_EGRESS 1
19 18
20struct tc_nat 19struct tc_nat {
21{
22 tc_gen; 20 tc_gen;
23 __be32 old_addr; 21 __be32 old_addr;
24 __be32 new_addr; 22 __be32 new_addr;
diff --git a/include/linux/tc_act/tc_pedit.h b/include/linux/tc_act/tc_pedit.h
index 54ce9064115a..716cfabcd5b2 100644
--- a/include/linux/tc_act/tc_pedit.h
+++ b/include/linux/tc_act/tc_pedit.h
@@ -6,8 +6,7 @@
6 6
7#define TCA_ACT_PEDIT 7 7#define TCA_ACT_PEDIT 7
8 8
9enum 9enum {
10{
11 TCA_PEDIT_UNSPEC, 10 TCA_PEDIT_UNSPEC,
12 TCA_PEDIT_TM, 11 TCA_PEDIT_TM,
13 TCA_PEDIT_PARMS, 12 TCA_PEDIT_PARMS,
@@ -15,8 +14,7 @@ enum
15}; 14};
16#define TCA_PEDIT_MAX (__TCA_PEDIT_MAX - 1) 15#define TCA_PEDIT_MAX (__TCA_PEDIT_MAX - 1)
17 16
18struct tc_pedit_key 17struct tc_pedit_key {
19{
20 __u32 mask; /* AND */ 18 __u32 mask; /* AND */
21 __u32 val; /*XOR */ 19 __u32 val; /*XOR */
22 __u32 off; /*offset */ 20 __u32 off; /*offset */
@@ -25,8 +23,7 @@ struct tc_pedit_key
25 __u32 shift; 23 __u32 shift;
26}; 24};
27 25
28struct tc_pedit_sel 26struct tc_pedit_sel {
29{
30 tc_gen; 27 tc_gen;
31 unsigned char nkeys; 28 unsigned char nkeys;
32 unsigned char flags; 29 unsigned char flags;
diff --git a/include/linux/tc_act/tc_skbedit.h b/include/linux/tc_act/tc_skbedit.h
index a14e461a7af7..7a2e910a5f08 100644
--- a/include/linux/tc_act/tc_skbedit.h
+++ b/include/linux/tc_act/tc_skbedit.h
@@ -26,6 +26,7 @@
26 26
27#define SKBEDIT_F_PRIORITY 0x1 27#define SKBEDIT_F_PRIORITY 0x1
28#define SKBEDIT_F_QUEUE_MAPPING 0x2 28#define SKBEDIT_F_QUEUE_MAPPING 0x2
29#define SKBEDIT_F_MARK 0x4
29 30
30struct tc_skbedit { 31struct tc_skbedit {
31 tc_gen; 32 tc_gen;
@@ -37,6 +38,7 @@ enum {
37 TCA_SKBEDIT_PARMS, 38 TCA_SKBEDIT_PARMS,
38 TCA_SKBEDIT_PRIORITY, 39 TCA_SKBEDIT_PRIORITY,
39 TCA_SKBEDIT_QUEUE_MAPPING, 40 TCA_SKBEDIT_QUEUE_MAPPING,
41 TCA_SKBEDIT_MARK,
40 __TCA_SKBEDIT_MAX 42 __TCA_SKBEDIT_MAX
41}; 43};
42#define TCA_SKBEDIT_MAX (__TCA_SKBEDIT_MAX - 1) 44#define TCA_SKBEDIT_MAX (__TCA_SKBEDIT_MAX - 1)
diff --git a/include/linux/tc_ematch/tc_em_cmp.h b/include/linux/tc_ematch/tc_em_cmp.h
index 38e7f7b25ec2..f34bb1bae083 100644
--- a/include/linux/tc_ematch/tc_em_cmp.h
+++ b/include/linux/tc_ematch/tc_em_cmp.h
@@ -4,8 +4,7 @@
4#include <linux/types.h> 4#include <linux/types.h>
5#include <linux/pkt_cls.h> 5#include <linux/pkt_cls.h>
6 6
7struct tcf_em_cmp 7struct tcf_em_cmp {
8{
9 __u32 val; 8 __u32 val;
10 __u32 mask; 9 __u32 mask;
11 __u16 off; 10 __u16 off;
@@ -15,8 +14,7 @@ struct tcf_em_cmp
15 __u8 opnd:4; 14 __u8 opnd:4;
16}; 15};
17 16
18enum 17enum {
19{
20 TCF_EM_ALIGN_U8 = 1, 18 TCF_EM_ALIGN_U8 = 1,
21 TCF_EM_ALIGN_U16 = 2, 19 TCF_EM_ALIGN_U16 = 2,
22 TCF_EM_ALIGN_U32 = 4 20 TCF_EM_ALIGN_U32 = 4
diff --git a/include/linux/tc_ematch/tc_em_meta.h b/include/linux/tc_ematch/tc_em_meta.h
index dcfb733fa1f6..0864206ec1a3 100644
--- a/include/linux/tc_ematch/tc_em_meta.h
+++ b/include/linux/tc_ematch/tc_em_meta.h
@@ -4,8 +4,7 @@
4#include <linux/types.h> 4#include <linux/types.h>
5#include <linux/pkt_cls.h> 5#include <linux/pkt_cls.h>
6 6
7enum 7enum {
8{
9 TCA_EM_META_UNSPEC, 8 TCA_EM_META_UNSPEC,
10 TCA_EM_META_HDR, 9 TCA_EM_META_HDR,
11 TCA_EM_META_LVALUE, 10 TCA_EM_META_LVALUE,
@@ -14,8 +13,7 @@ enum
14}; 13};
15#define TCA_EM_META_MAX (__TCA_EM_META_MAX - 1) 14#define TCA_EM_META_MAX (__TCA_EM_META_MAX - 1)
16 15
17struct tcf_meta_val 16struct tcf_meta_val {
18{
19 __u16 kind; 17 __u16 kind;
20 __u8 shift; 18 __u8 shift;
21 __u8 op; 19 __u8 op;
@@ -26,16 +24,14 @@ struct tcf_meta_val
26#define TCF_META_ID_MASK 0x7ff 24#define TCF_META_ID_MASK 0x7ff
27#define TCF_META_ID(kind) ((kind) & TCF_META_ID_MASK) 25#define TCF_META_ID(kind) ((kind) & TCF_META_ID_MASK)
28 26
29enum 27enum {
30{
31 TCF_META_TYPE_VAR, 28 TCF_META_TYPE_VAR,
32 TCF_META_TYPE_INT, 29 TCF_META_TYPE_INT,
33 __TCF_META_TYPE_MAX 30 __TCF_META_TYPE_MAX
34}; 31};
35#define TCF_META_TYPE_MAX (__TCF_META_TYPE_MAX - 1) 32#define TCF_META_TYPE_MAX (__TCF_META_TYPE_MAX - 1)
36 33
37enum 34enum {
38{
39 TCF_META_ID_VALUE, 35 TCF_META_ID_VALUE,
40 TCF_META_ID_RANDOM, 36 TCF_META_ID_RANDOM,
41 TCF_META_ID_LOADAVG_0, 37 TCF_META_ID_LOADAVG_0,
@@ -87,8 +83,7 @@ enum
87}; 83};
88#define TCF_META_ID_MAX (__TCF_META_ID_MAX - 1) 84#define TCF_META_ID_MAX (__TCF_META_ID_MAX - 1)
89 85
90struct tcf_meta_hdr 86struct tcf_meta_hdr {
91{
92 struct tcf_meta_val left; 87 struct tcf_meta_val left;
93 struct tcf_meta_val right; 88 struct tcf_meta_val right;
94}; 89};
diff --git a/include/linux/tc_ematch/tc_em_nbyte.h b/include/linux/tc_ematch/tc_em_nbyte.h
index 9ed8c2e58488..7172cfb999c1 100644
--- a/include/linux/tc_ematch/tc_em_nbyte.h
+++ b/include/linux/tc_ematch/tc_em_nbyte.h
@@ -4,8 +4,7 @@
4#include <linux/types.h> 4#include <linux/types.h>
5#include <linux/pkt_cls.h> 5#include <linux/pkt_cls.h>
6 6
7struct tcf_em_nbyte 7struct tcf_em_nbyte {
8{
9 __u16 off; 8 __u16 off;
10 __u16 len:12; 9 __u16 len:12;
11 __u8 layer:4; 10 __u8 layer:4;
diff --git a/include/linux/tc_ematch/tc_em_text.h b/include/linux/tc_ematch/tc_em_text.h
index d12a73a225fc..5aac4045ba88 100644
--- a/include/linux/tc_ematch/tc_em_text.h
+++ b/include/linux/tc_ematch/tc_em_text.h
@@ -6,8 +6,7 @@
6 6
7#define TC_EM_TEXT_ALGOSIZ 16 7#define TC_EM_TEXT_ALGOSIZ 16
8 8
9struct tcf_em_text 9struct tcf_em_text {
10{
11 char algo[TC_EM_TEXT_ALGOSIZ]; 10 char algo[TC_EM_TEXT_ALGOSIZ];
12 __u16 from_offset; 11 __u16 from_offset;
13 __u16 to_offset; 12 __u16 to_offset;
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
index 61723a7c21fe..a778ee024590 100644
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
@@ -81,6 +81,12 @@ enum {
81 TCP_DATA_OFFSET = __cpu_to_be32(0xF0000000) 81 TCP_DATA_OFFSET = __cpu_to_be32(0xF0000000)
82}; 82};
83 83
84/*
85 * TCP general constants
86 */
87#define TCP_MSS_DEFAULT 536U /* IPv4 (RFC1122, RFC2581) */
88#define TCP_MSS_DESIRED 1220U /* IPv6 (tunneled), EDNS0 (RFC3226) */
89
84/* TCP socket options */ 90/* TCP socket options */
85#define TCP_NODELAY 1 /* Turn off Nagle's algorithm. */ 91#define TCP_NODELAY 1 /* Turn off Nagle's algorithm. */
86#define TCP_MAXSEG 2 /* Limit MSS */ 92#define TCP_MAXSEG 2 /* Limit MSS */
@@ -96,14 +102,17 @@ enum {
96#define TCP_QUICKACK 12 /* Block/reenable quick acks */ 102#define TCP_QUICKACK 12 /* Block/reenable quick acks */
97#define TCP_CONGESTION 13 /* Congestion control algorithm */ 103#define TCP_CONGESTION 13 /* Congestion control algorithm */
98#define TCP_MD5SIG 14 /* TCP MD5 Signature (RFC2385) */ 104#define TCP_MD5SIG 14 /* TCP MD5 Signature (RFC2385) */
105#define TCP_COOKIE_TRANSACTIONS 15 /* TCP Cookie Transactions */
106#define TCP_THIN_LINEAR_TIMEOUTS 16 /* Use linear timeouts for thin streams*/
107#define TCP_THIN_DUPACK 17 /* Fast retrans. after 1 dupack */
99 108
109/* for TCP_INFO socket option */
100#define TCPI_OPT_TIMESTAMPS 1 110#define TCPI_OPT_TIMESTAMPS 1
101#define TCPI_OPT_SACK 2 111#define TCPI_OPT_SACK 2
102#define TCPI_OPT_WSCALE 4 112#define TCPI_OPT_WSCALE 4
103#define TCPI_OPT_ECN 8 113#define TCPI_OPT_ECN 8
104 114
105enum tcp_ca_state 115enum tcp_ca_state {
106{
107 TCP_CA_Open = 0, 116 TCP_CA_Open = 0,
108#define TCPF_CA_Open (1<<TCP_CA_Open) 117#define TCPF_CA_Open (1<<TCP_CA_Open)
109 TCP_CA_Disorder = 1, 118 TCP_CA_Disorder = 1,
@@ -116,8 +125,7 @@ enum tcp_ca_state
116#define TCPF_CA_Loss (1<<TCP_CA_Loss) 125#define TCPF_CA_Loss (1<<TCP_CA_Loss)
117}; 126};
118 127
119struct tcp_info 128struct tcp_info {
120{
121 __u8 tcpi_state; 129 __u8 tcpi_state;
122 __u8 tcpi_ca_state; 130 __u8 tcpi_ca_state;
123 __u8 tcpi_retransmits; 131 __u8 tcpi_retransmits;
@@ -170,6 +178,30 @@ struct tcp_md5sig {
170 __u8 tcpm_key[TCP_MD5SIG_MAXKEYLEN]; /* key (binary) */ 178 __u8 tcpm_key[TCP_MD5SIG_MAXKEYLEN]; /* key (binary) */
171}; 179};
172 180
181/* for TCP_COOKIE_TRANSACTIONS (TCPCT) socket option */
182#define TCP_COOKIE_MIN 8 /* 64-bits */
183#define TCP_COOKIE_MAX 16 /* 128-bits */
184#define TCP_COOKIE_PAIR_SIZE (2*TCP_COOKIE_MAX)
185
186/* Flags for both getsockopt and setsockopt */
187#define TCP_COOKIE_IN_ALWAYS (1 << 0) /* Discard SYN without cookie */
188#define TCP_COOKIE_OUT_NEVER (1 << 1) /* Prohibit outgoing cookies,
189 * supercedes everything. */
190
191/* Flags for getsockopt */
192#define TCP_S_DATA_IN (1 << 2) /* Was data received? */
193#define TCP_S_DATA_OUT (1 << 3) /* Was data sent? */
194
195/* TCP_COOKIE_TRANSACTIONS data */
196struct tcp_cookie_transactions {
197 __u16 tcpct_flags; /* see above */
198 __u8 __tcpct_pad1; /* zero */
199 __u8 tcpct_cookie_desired; /* bytes */
200 __u16 tcpct_s_data_desired; /* bytes of variable data */
201 __u16 tcpct_used; /* bytes in value */
202 __u8 tcpct_value[TCP_MSS_DEFAULT];
203};
204
173#ifdef __KERNEL__ 205#ifdef __KERNEL__
174 206
175#include <linux/skbuff.h> 207#include <linux/skbuff.h>
@@ -217,26 +249,38 @@ struct tcp_options_received {
217 sack_ok : 4, /* SACK seen on SYN packet */ 249 sack_ok : 4, /* SACK seen on SYN packet */
218 snd_wscale : 4, /* Window scaling received from sender */ 250 snd_wscale : 4, /* Window scaling received from sender */
219 rcv_wscale : 4; /* Window scaling to send to receiver */ 251 rcv_wscale : 4; /* Window scaling to send to receiver */
220/* SACKs data */ 252 u8 cookie_plus:6, /* bytes in authenticator/cookie option */
253 cookie_out_never:1,
254 cookie_in_always:1;
221 u8 num_sacks; /* Number of SACK blocks */ 255 u8 num_sacks; /* Number of SACK blocks */
222 u16 user_mss; /* mss requested by user in ioctl */ 256 u16 user_mss; /* mss requested by user in ioctl */
223 u16 mss_clamp; /* Maximal mss, negotiated at connection setup */ 257 u16 mss_clamp; /* Maximal mss, negotiated at connection setup */
224}; 258};
225 259
260static inline void tcp_clear_options(struct tcp_options_received *rx_opt)
261{
262 rx_opt->tstamp_ok = rx_opt->sack_ok = 0;
263 rx_opt->wscale_ok = rx_opt->snd_wscale = 0;
264 rx_opt->cookie_plus = 0;
265}
266
226/* This is the max number of SACKS that we'll generate and process. It's safe 267/* This is the max number of SACKS that we'll generate and process. It's safe
227 * to increse this, although since: 268 * to increase this, although since:
228 * size = TCPOLEN_SACK_BASE_ALIGNED (4) + n * TCPOLEN_SACK_PERBLOCK (8) 269 * size = TCPOLEN_SACK_BASE_ALIGNED (4) + n * TCPOLEN_SACK_PERBLOCK (8)
229 * only four options will fit in a standard TCP header */ 270 * only four options will fit in a standard TCP header */
230#define TCP_NUM_SACKS 4 271#define TCP_NUM_SACKS 4
231 272
273struct tcp_cookie_values;
274struct tcp_request_sock_ops;
275
232struct tcp_request_sock { 276struct tcp_request_sock {
233 struct inet_request_sock req; 277 struct inet_request_sock req;
234#ifdef CONFIG_TCP_MD5SIG 278#ifdef CONFIG_TCP_MD5SIG
235 /* Only used by TCP MD5 Signature so far. */ 279 /* Only used by TCP MD5 Signature so far. */
236 const struct tcp_request_sock_ops *af_specific; 280 const struct tcp_request_sock_ops *af_specific;
237#endif 281#endif
238 u32 rcv_isn; 282 u32 rcv_isn;
239 u32 snt_isn; 283 u32 snt_isn;
240}; 284};
241 285
242static inline struct tcp_request_sock *tcp_rsk(const struct request_sock *req) 286static inline struct tcp_request_sock *tcp_rsk(const struct request_sock *req)
@@ -298,7 +342,10 @@ struct tcp_sock {
298 u32 frto_highmark; /* snd_nxt when RTO occurred */ 342 u32 frto_highmark; /* snd_nxt when RTO occurred */
299 u16 advmss; /* Advertised MSS */ 343 u16 advmss; /* Advertised MSS */
300 u8 frto_counter; /* Number of new acks after RTO */ 344 u8 frto_counter; /* Number of new acks after RTO */
301 u8 nonagle; /* Disable Nagle algorithm? */ 345 u8 nonagle : 4,/* Disable Nagle algorithm? */
346 thin_lto : 1,/* Use linear timeouts for thin streams */
347 thin_dupack : 1,/* Fast retransmit on first dupack */
348 unused : 2;
302 349
303/* RTT measurement */ 350/* RTT measurement */
304 u32 srtt; /* smoothed round trip time << 3 */ 351 u32 srtt; /* smoothed round trip time << 3 */
@@ -406,6 +453,12 @@ struct tcp_sock {
406/* TCP MD5 Signature Option information */ 453/* TCP MD5 Signature Option information */
407 struct tcp_md5sig_info *md5sig_info; 454 struct tcp_md5sig_info *md5sig_info;
408#endif 455#endif
456
457 /* When the cookie options are generated and exchanged, then this
458 * object holds a reference to them (cookie_values->kref). Also
459 * contains related tcp_cookie_transactions fields.
460 */
461 struct tcp_cookie_values *cookie_values;
409}; 462};
410 463
411static inline struct tcp_sock *tcp_sk(const struct sock *sk) 464static inline struct tcp_sock *tcp_sk(const struct sock *sk)
@@ -424,6 +477,10 @@ struct tcp_timewait_sock {
424 u16 tw_md5_keylen; 477 u16 tw_md5_keylen;
425 u8 tw_md5_key[TCP_MD5SIG_MAXKEYLEN]; 478 u8 tw_md5_key[TCP_MD5SIG_MAXKEYLEN];
426#endif 479#endif
480 /* Few sockets in timewait have cookies; in that case, then this
481 * object holds a reference to them (tw_cookie_values->kref).
482 */
483 struct tcp_cookie_values *tw_cookie_values;
427}; 484};
428 485
429static inline struct tcp_timewait_sock *tcp_twsk(const struct sock *sk) 486static inline struct tcp_timewait_sock *tcp_twsk(const struct sock *sk)
@@ -431,6 +488,6 @@ static inline struct tcp_timewait_sock *tcp_twsk(const struct sock *sk)
431 return (struct tcp_timewait_sock *)sk; 488 return (struct tcp_timewait_sock *)sk;
432} 489}
433 490
434#endif 491#endif /* __KERNEL__ */
435 492
436#endif /* _LINUX_TCP_H */ 493#endif /* _LINUX_TCP_H */
diff --git a/include/linux/tick.h b/include/linux/tick.h
index 4f9ba058abdb..25d0cf41d3fd 100644
--- a/include/linux/tick.h
+++ b/include/linux/tick.h
@@ -43,6 +43,7 @@ enum tick_nohz_mode {
43 * @idle_exittime: Time when the idle state was left 43 * @idle_exittime: Time when the idle state was left
44 * @idle_sleeptime: Sum of the time slept in idle with sched tick stopped 44 * @idle_sleeptime: Sum of the time slept in idle with sched tick stopped
45 * @sleep_length: Duration of the current idle sleep 45 * @sleep_length: Duration of the current idle sleep
46 * @do_timer_lst: CPU was the last one doing do_timer before going idle
46 */ 47 */
47struct tick_sched { 48struct tick_sched {
48 struct hrtimer sched_timer; 49 struct hrtimer sched_timer;
@@ -64,6 +65,7 @@ struct tick_sched {
64 unsigned long last_jiffies; 65 unsigned long last_jiffies;
65 unsigned long next_jiffies; 66 unsigned long next_jiffies;
66 ktime_t idle_expires; 67 ktime_t idle_expires;
68 int do_timer_last;
67}; 69};
68 70
69extern void __init tick_init(void); 71extern void __init tick_init(void);
@@ -103,6 +105,9 @@ extern int tick_check_oneshot_change(int allow_nohz);
103extern struct tick_sched *tick_get_tick_sched(int cpu); 105extern struct tick_sched *tick_get_tick_sched(int cpu);
104extern void tick_check_idle(int cpu); 106extern void tick_check_idle(int cpu);
105extern int tick_oneshot_mode_active(void); 107extern int tick_oneshot_mode_active(void);
108# ifndef arch_needs_cpu
109# define arch_needs_cpu(cpu) (0)
110# endif
106# else 111# else
107static inline void tick_clock_notify(void) { } 112static inline void tick_clock_notify(void) { }
108static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } 113static inline int tick_check_oneshot_change(int allow_nohz) { return 0; }
diff --git a/include/linux/timb_gpio.h b/include/linux/timb_gpio.h
new file mode 100644
index 000000000000..ce456eaae861
--- /dev/null
+++ b/include/linux/timb_gpio.h
@@ -0,0 +1,37 @@
1/*
2 * timb_gpio.h timberdale FPGA GPIO driver, platform data definition
3 * Copyright (c) 2009 Intel Corporation
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_TIMB_GPIO_H
20#define _LINUX_TIMB_GPIO_H
21
22/**
23 * struct timbgpio_platform_data - Platform data of the Timberdale GPIO driver
24 * @gpio_base The number of the first GPIO pin, set to -1 for
25 * dynamic number allocation.
26 * @nr_pins Number of pins that is supported by the hardware (1-32)
27 * @irq_base If IRQ is supported by the hardware, this is the base
28 * number of IRQ:s. One IRQ per pin will be used. Set to
29 * -1 if IRQ:s is not supported.
30 */
31struct timbgpio_platform_data {
32 int gpio_base;
33 int nr_pins;
34 int irq_base;
35};
36
37#endif
diff --git a/include/linux/time.h b/include/linux/time.h
index fe04e5ef6a59..6e026e45a179 100644
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -148,6 +148,7 @@ extern void monotonic_to_bootbased(struct timespec *ts);
148 148
149extern struct timespec timespec_trunc(struct timespec t, unsigned gran); 149extern struct timespec timespec_trunc(struct timespec t, unsigned gran);
150extern int timekeeping_valid_for_hres(void); 150extern int timekeeping_valid_for_hres(void);
151extern u64 timekeeping_max_deferment(void);
151extern void update_wall_time(void); 152extern void update_wall_time(void);
152extern void update_xtime_cache(u64 nsec); 153extern void update_xtime_cache(u64 nsec);
153extern void timekeeping_leap_insert(int leapsecond); 154extern void timekeeping_leap_insert(int leapsecond);
diff --git a/include/linux/timex.h b/include/linux/timex.h
index e6967d10d9e5..7a082b32d8e1 100644
--- a/include/linux/timex.h
+++ b/include/linux/timex.h
@@ -115,13 +115,16 @@ struct timex {
115#define ADJ_OFFSET_SS_READ 0xa001 /* read-only adjtime */ 115#define ADJ_OFFSET_SS_READ 0xa001 /* read-only adjtime */
116#endif 116#endif
117 117
118/* xntp 3.4 compatibility names */ 118/* NTP userland likes the MOD_ prefix better */
119#define MOD_OFFSET ADJ_OFFSET 119#define MOD_OFFSET ADJ_OFFSET
120#define MOD_FREQUENCY ADJ_FREQUENCY 120#define MOD_FREQUENCY ADJ_FREQUENCY
121#define MOD_MAXERROR ADJ_MAXERROR 121#define MOD_MAXERROR ADJ_MAXERROR
122#define MOD_ESTERROR ADJ_ESTERROR 122#define MOD_ESTERROR ADJ_ESTERROR
123#define MOD_STATUS ADJ_STATUS 123#define MOD_STATUS ADJ_STATUS
124#define MOD_TIMECONST ADJ_TIMECONST 124#define MOD_TIMECONST ADJ_TIMECONST
125#define MOD_TAI ADJ_TAI
126#define MOD_MICRO ADJ_MICRO
127#define MOD_NANO ADJ_NANO
125 128
126 129
127/* 130/*
@@ -235,9 +238,6 @@ extern int tickadj; /* amount of adjustment per tick */
235 * phase-lock loop variables 238 * phase-lock loop variables
236 */ 239 */
237extern int time_status; /* clock synchronization status bits */ 240extern int time_status; /* clock synchronization status bits */
238extern long time_maxerror; /* maximum error */
239extern long time_esterror; /* estimated error */
240
241extern long time_adjust; /* The amount of adjtime left */ 241extern long time_adjust; /* The amount of adjtime left */
242 242
243extern void ntp_init(void); 243extern void ntp_init(void);
@@ -261,11 +261,7 @@ static inline int ntp_synced(void)
261 261
262#define NTP_SCALE_SHIFT 32 262#define NTP_SCALE_SHIFT 32
263 263
264#ifdef CONFIG_NO_HZ
265#define NTP_INTERVAL_FREQ (2)
266#else
267#define NTP_INTERVAL_FREQ (HZ) 264#define NTP_INTERVAL_FREQ (HZ)
268#endif
269#define NTP_INTERVAL_LENGTH (NSEC_PER_SEC/NTP_INTERVAL_FREQ) 265#define NTP_INTERVAL_LENGTH (NSEC_PER_SEC/NTP_INTERVAL_FREQ)
270 266
271/* Returns how long ticks are at present, in ns / 2^NTP_SCALE_SHIFT. */ 267/* Returns how long ticks are at present, in ns / 2^NTP_SCALE_SHIFT. */
diff --git a/include/linux/topology.h b/include/linux/topology.h
index 57e63579bfdd..5b81156780b1 100644
--- a/include/linux/topology.h
+++ b/include/linux/topology.h
@@ -99,7 +99,7 @@ int arch_update_cpu_topology(void);
99 | 1*SD_WAKE_AFFINE \ 99 | 1*SD_WAKE_AFFINE \
100 | 1*SD_SHARE_CPUPOWER \ 100 | 1*SD_SHARE_CPUPOWER \
101 | 0*SD_POWERSAVINGS_BALANCE \ 101 | 0*SD_POWERSAVINGS_BALANCE \
102 | 0*SD_SHARE_PKG_RESOURCES \ 102 | 1*SD_SHARE_PKG_RESOURCES \
103 | 0*SD_SERIALIZE \ 103 | 0*SD_SERIALIZE \
104 | 0*SD_PREFER_SIBLING \ 104 | 0*SD_PREFER_SIBLING \
105 , \ 105 , \
diff --git a/include/linux/tpm.h b/include/linux/tpm.h
index 3338b3f5c21a..ac5d1c1285d9 100644
--- a/include/linux/tpm.h
+++ b/include/linux/tpm.h
@@ -27,9 +27,16 @@
27 */ 27 */
28#define TPM_ANY_NUM 0xFFFF 28#define TPM_ANY_NUM 0xFFFF
29 29
30#if defined(CONFIG_TCG_TPM) 30#if defined(CONFIG_TCG_TPM) || defined(CONFIG_TCG_TPM_MODULE)
31 31
32extern int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf); 32extern int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf);
33extern int tpm_pcr_extend(u32 chip_num, int pcr_idx, const u8 *hash); 33extern int tpm_pcr_extend(u32 chip_num, int pcr_idx, const u8 *hash);
34#else
35static inline int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf) {
36 return -ENODEV;
37}
38static inline int tpm_pcr_extend(u32 chip_num, int pcr_idx, const u8 *hash) {
39 return -ENODEV;
40}
34#endif 41#endif
35#endif 42#endif
diff --git a/include/linux/trace_seq.h b/include/linux/trace_seq.h
index 09077f6ed128..5cf397ceb726 100644
--- a/include/linux/trace_seq.h
+++ b/include/linux/trace_seq.h
@@ -14,6 +14,7 @@ struct trace_seq {
14 unsigned char buffer[PAGE_SIZE]; 14 unsigned char buffer[PAGE_SIZE];
15 unsigned int len; 15 unsigned int len;
16 unsigned int readpos; 16 unsigned int readpos;
17 int full;
17}; 18};
18 19
19static inline void 20static inline void
@@ -21,6 +22,7 @@ trace_seq_init(struct trace_seq *s)
21{ 22{
22 s->len = 0; 23 s->len = 0;
23 s->readpos = 0; 24 s->readpos = 0;
25 s->full = 0;
24} 26}
25 27
26/* 28/*
@@ -33,7 +35,7 @@ extern int trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args)
33 __attribute__ ((format (printf, 2, 0))); 35 __attribute__ ((format (printf, 2, 0)));
34extern int 36extern int
35trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary); 37trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary);
36extern void trace_print_seq(struct seq_file *m, struct trace_seq *s); 38extern int trace_print_seq(struct seq_file *m, struct trace_seq *s);
37extern ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf, 39extern ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf,
38 size_t cnt); 40 size_t cnt);
39extern int trace_seq_puts(struct trace_seq *s, const char *str); 41extern int trace_seq_puts(struct trace_seq *s, const char *str);
@@ -55,8 +57,9 @@ trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary)
55 return 0; 57 return 0;
56} 58}
57 59
58static inline void trace_print_seq(struct seq_file *m, struct trace_seq *s) 60static inline int trace_print_seq(struct seq_file *m, struct trace_seq *s)
59{ 61{
62 return 0;
60} 63}
61static inline ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf, 64static inline ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf,
62 size_t cnt) 65 size_t cnt)
diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h
index 1eb44a924e56..10db0102a890 100644
--- a/include/linux/tracehook.h
+++ b/include/linux/tracehook.h
@@ -134,6 +134,13 @@ static inline __must_check int tracehook_report_syscall_entry(
134 */ 134 */
135static inline void tracehook_report_syscall_exit(struct pt_regs *regs, int step) 135static inline void tracehook_report_syscall_exit(struct pt_regs *regs, int step)
136{ 136{
137 if (step) {
138 siginfo_t info;
139 user_single_step_siginfo(current, regs, &info);
140 force_sig_info(SIGTRAP, &info, current);
141 return;
142 }
143
137 ptrace_report_syscall(regs); 144 ptrace_report_syscall(regs);
138} 145}
139 146
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h
index 2aac8a83e89b..78b4bd3be496 100644
--- a/include/linux/tracepoint.h
+++ b/include/linux/tracepoint.h
@@ -49,7 +49,7 @@ struct tracepoint {
49 void **it_func; \ 49 void **it_func; \
50 \ 50 \
51 rcu_read_lock_sched_notrace(); \ 51 rcu_read_lock_sched_notrace(); \
52 it_func = rcu_dereference((tp)->funcs); \ 52 it_func = rcu_dereference_sched((tp)->funcs); \
53 if (it_func) { \ 53 if (it_func) { \
54 do { \ 54 do { \
55 ((void(*)(proto))(*it_func))(args); \ 55 ((void(*)(proto))(*it_func))(args); \
@@ -280,6 +280,12 @@ static inline void tracepoint_synchronize_unregister(void)
280 * TRACE_EVENT_FN to perform any (un)registration work. 280 * TRACE_EVENT_FN to perform any (un)registration work.
281 */ 281 */
282 282
283#define DECLARE_EVENT_CLASS(name, proto, args, tstruct, assign, print)
284#define DEFINE_EVENT(template, name, proto, args) \
285 DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
286#define DEFINE_EVENT_PRINT(template, name, proto, args, print) \
287 DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
288
283#define TRACE_EVENT(name, proto, args, struct, assign, print) \ 289#define TRACE_EVENT(name, proto, args, struct, assign, print) \
284 DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) 290 DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
285#define TRACE_EVENT_FN(name, proto, args, struct, \ 291#define TRACE_EVENT_FN(name, proto, args, struct, \
diff --git a/include/linux/tty.h b/include/linux/tty.h
index f0f43d08d8b8..4409967db0c4 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -68,6 +68,17 @@ struct tty_buffer {
68 unsigned long data[0]; 68 unsigned long data[0];
69}; 69};
70 70
71/*
72 * We default to dicing tty buffer allocations to this many characters
73 * in order to avoid multiple page allocations. We know the size of
74 * tty_buffer itself but it must also be taken into account that the
75 * the buffer is 256 byte aligned. See tty_buffer_find for the allocation
76 * logic this must match
77 */
78
79#define TTY_BUFFER_PAGE (((PAGE_SIZE - sizeof(struct tty_buffer)) / 2) & ~0xFF)
80
81
71struct tty_bufhead { 82struct tty_bufhead {
72 struct delayed_work work; 83 struct delayed_work work;
73 spinlock_t lock; 84 spinlock_t lock;
@@ -190,9 +201,17 @@ struct tty_port_operations {
190 /* Control the DTR line */ 201 /* Control the DTR line */
191 void (*dtr_rts)(struct tty_port *port, int raise); 202 void (*dtr_rts)(struct tty_port *port, int raise);
192 /* Called when the last close completes or a hangup finishes 203 /* Called when the last close completes or a hangup finishes
193 IFF the port was initialized. Do not use to free resources */ 204 IFF the port was initialized. Do not use to free resources. Called
205 under the port mutex to serialize against activate/shutdowns */
194 void (*shutdown)(struct tty_port *port); 206 void (*shutdown)(struct tty_port *port);
195 void (*drop)(struct tty_port *port); 207 void (*drop)(struct tty_port *port);
208 /* Called under the port mutex from tty_port_open, serialized using
209 the port mutex */
210 /* FIXME: long term getting the tty argument *out* of this would be
211 good for consoles */
212 int (*activate)(struct tty_port *port, struct tty_struct *tty);
213 /* Called on the final put of a port */
214 void (*destruct)(struct tty_port *port);
196}; 215};
197 216
198struct tty_port { 217struct tty_port {
@@ -205,13 +224,16 @@ struct tty_port {
205 wait_queue_head_t close_wait; /* Close waiters */ 224 wait_queue_head_t close_wait; /* Close waiters */
206 wait_queue_head_t delta_msr_wait; /* Modem status change */ 225 wait_queue_head_t delta_msr_wait; /* Modem status change */
207 unsigned long flags; /* TTY flags ASY_*/ 226 unsigned long flags; /* TTY flags ASY_*/
227 unsigned char console:1; /* port is a console */
208 struct mutex mutex; /* Locking */ 228 struct mutex mutex; /* Locking */
229 struct mutex buf_mutex; /* Buffer alloc lock */
209 unsigned char *xmit_buf; /* Optional buffer */ 230 unsigned char *xmit_buf; /* Optional buffer */
210 unsigned int close_delay; /* Close port delay */ 231 unsigned int close_delay; /* Close port delay */
211 unsigned int closing_wait; /* Delay for output */ 232 unsigned int closing_wait; /* Delay for output */
212 int drain_delay; /* Set to zero if no pure time 233 int drain_delay; /* Set to zero if no pure time
213 based drain is needed else 234 based drain is needed else
214 set to size of fifo */ 235 set to size of fifo */
236 struct kref kref; /* Ref counter */
215}; 237};
216 238
217/* 239/*
@@ -340,8 +362,6 @@ extern void tty_write_flush(struct tty_struct *);
340 362
341extern struct ktermios tty_std_termios; 363extern struct ktermios tty_std_termios;
342 364
343extern int kmsg_redirect;
344
345extern void console_init(void); 365extern void console_init(void);
346extern int vcs_init(void); 366extern int vcs_init(void);
347 367
@@ -439,7 +459,7 @@ extern void initialize_tty_struct(struct tty_struct *tty,
439 struct tty_driver *driver, int idx); 459 struct tty_driver *driver, int idx);
440extern struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx, 460extern struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx,
441 int first_ok); 461 int first_ok);
442extern void tty_release_dev(struct file *filp); 462extern int tty_release(struct inode *inode, struct file *filp);
443extern int tty_init_termios(struct tty_struct *tty); 463extern int tty_init_termios(struct tty_struct *tty);
444 464
445extern struct tty_struct *tty_pair_get_tty(struct tty_struct *tty); 465extern struct tty_struct *tty_pair_get_tty(struct tty_struct *tty);
@@ -454,6 +474,15 @@ extern int tty_write_lock(struct tty_struct *tty, int ndelay);
454extern void tty_port_init(struct tty_port *port); 474extern void tty_port_init(struct tty_port *port);
455extern int tty_port_alloc_xmit_buf(struct tty_port *port); 475extern int tty_port_alloc_xmit_buf(struct tty_port *port);
456extern void tty_port_free_xmit_buf(struct tty_port *port); 476extern void tty_port_free_xmit_buf(struct tty_port *port);
477extern void tty_port_put(struct tty_port *port);
478
479static inline struct tty_port *tty_port_get(struct tty_port *port)
480{
481 if (port)
482 kref_get(&port->kref);
483 return port;
484}
485
457extern struct tty_struct *tty_port_tty_get(struct tty_port *port); 486extern struct tty_struct *tty_port_tty_get(struct tty_port *port);
458extern void tty_port_tty_set(struct tty_port *port, struct tty_struct *tty); 487extern void tty_port_tty_set(struct tty_port *port, struct tty_struct *tty);
459extern int tty_port_carrier_raised(struct tty_port *port); 488extern int tty_port_carrier_raised(struct tty_port *port);
@@ -467,7 +496,9 @@ extern int tty_port_close_start(struct tty_port *port,
467extern void tty_port_close_end(struct tty_port *port, struct tty_struct *tty); 496extern void tty_port_close_end(struct tty_port *port, struct tty_struct *tty);
468extern void tty_port_close(struct tty_port *port, 497extern void tty_port_close(struct tty_port *port,
469 struct tty_struct *tty, struct file *filp); 498 struct tty_struct *tty, struct file *filp);
470extern inline int tty_port_users(struct tty_port *port) 499extern int tty_port_open(struct tty_port *port,
500 struct tty_struct *tty, struct file *filp);
501static inline int tty_port_users(struct tty_port *port)
471{ 502{
472 return port->count + port->blocked_open; 503 return port->count + port->blocked_open;
473} 504}
@@ -485,6 +516,7 @@ extern void tty_ldisc_enable(struct tty_struct *tty);
485 516
486/* n_tty.c */ 517/* n_tty.c */
487extern struct tty_ldisc_ops tty_ldisc_N_TTY; 518extern struct tty_ldisc_ops tty_ldisc_N_TTY;
519extern void n_tty_inherit_ops(struct tty_ldisc_ops *ops);
488 520
489/* tty_audit.c */ 521/* tty_audit.c */
490#ifdef CONFIG_AUDIT 522#ifdef CONFIG_AUDIT
diff --git a/include/linux/tty_flip.h b/include/linux/tty_flip.h
index eb677cf56106..9239d033a0a3 100644
--- a/include/linux/tty_flip.h
+++ b/include/linux/tty_flip.h
@@ -2,8 +2,8 @@
2#define _LINUX_TTY_FLIP_H 2#define _LINUX_TTY_FLIP_H
3 3
4extern int tty_buffer_request_room(struct tty_struct *tty, size_t size); 4extern int tty_buffer_request_room(struct tty_struct *tty, size_t size);
5extern int tty_insert_flip_string(struct tty_struct *tty, const unsigned char *chars, size_t size);
6extern int tty_insert_flip_string_flags(struct tty_struct *tty, const unsigned char *chars, const char *flags, size_t size); 5extern int tty_insert_flip_string_flags(struct tty_struct *tty, const unsigned char *chars, const char *flags, size_t size);
6extern int tty_insert_flip_string_fixed_flag(struct tty_struct *tty, const unsigned char *chars, char flag, size_t size);
7extern int tty_prepare_flip_string(struct tty_struct *tty, unsigned char **chars, size_t size); 7extern int tty_prepare_flip_string(struct tty_struct *tty, unsigned char **chars, size_t size);
8extern int tty_prepare_flip_string_flags(struct tty_struct *tty, unsigned char **chars, char **flags, size_t size); 8extern int tty_prepare_flip_string_flags(struct tty_struct *tty, unsigned char **chars, char **flags, size_t size);
9void tty_schedule_flip(struct tty_struct *tty); 9void tty_schedule_flip(struct tty_struct *tty);
@@ -20,4 +20,9 @@ static inline int tty_insert_flip_char(struct tty_struct *tty,
20 return tty_insert_flip_string_flags(tty, &ch, &flag, 1); 20 return tty_insert_flip_string_flags(tty, &ch, &flag, 1);
21} 21}
22 22
23static inline int tty_insert_flip_string(struct tty_struct *tty, const unsigned char *chars, size_t size)
24{
25 return tty_insert_flip_string_fixed_flag(tty, chars, TTY_NORMAL, size);
26}
27
23#endif /* _LINUX_TTY_FLIP_H */ 28#endif /* _LINUX_TTY_FLIP_H */
diff --git a/include/linux/tty_ldisc.h b/include/linux/tty_ldisc.h
index 0c4ee9b88f85..526d66f066a3 100644
--- a/include/linux/tty_ldisc.h
+++ b/include/linux/tty_ldisc.h
@@ -99,6 +99,12 @@
99 * cease I/O to the tty driver. Can sleep. The driver should 99 * cease I/O to the tty driver. Can sleep. The driver should
100 * seek to perform this action quickly but should wait until 100 * seek to perform this action quickly but should wait until
101 * any pending driver I/O is completed. 101 * any pending driver I/O is completed.
102 *
103 * void (*dcd_change)(struct tty_struct *tty, unsigned int status,
104 * struct timespec *ts)
105 *
106 * Tells the discipline that the DCD pin has changed its status and
107 * the relative timestamp. Pointer ts can be NULL.
102 */ 108 */
103 109
104#include <linux/fs.h> 110#include <linux/fs.h>
@@ -136,6 +142,8 @@ struct tty_ldisc_ops {
136 void (*receive_buf)(struct tty_struct *, const unsigned char *cp, 142 void (*receive_buf)(struct tty_struct *, const unsigned char *cp,
137 char *fp, int count); 143 char *fp, int count);
138 void (*write_wakeup)(struct tty_struct *); 144 void (*write_wakeup)(struct tty_struct *);
145 void (*dcd_change)(struct tty_struct *, unsigned int,
146 struct timespec *);
139 147
140 struct module *owner; 148 struct module *owner;
141 149
diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h
index 6b58367d145e..d512d98dfb7d 100644
--- a/include/linux/uaccess.h
+++ b/include/linux/uaccess.h
@@ -94,6 +94,7 @@ static inline unsigned long __copy_from_user_nocache(void *to,
94 * happens, handle that and return -EFAULT. 94 * happens, handle that and return -EFAULT.
95 */ 95 */
96extern long probe_kernel_read(void *dst, void *src, size_t size); 96extern long probe_kernel_read(void *dst, void *src, size_t size);
97extern long __probe_kernel_read(void *dst, void *src, size_t size);
97 98
98/* 99/*
99 * probe_kernel_write(): safely attempt to write to a location 100 * probe_kernel_write(): safely attempt to write to a location
@@ -104,6 +105,7 @@ extern long probe_kernel_read(void *dst, void *src, size_t size);
104 * Safely write to address @dst from the buffer at @src. If a kernel fault 105 * Safely write to address @dst from the buffer at @src. If a kernel fault
105 * happens, handle that and return -EFAULT. 106 * happens, handle that and return -EFAULT.
106 */ 107 */
107extern long probe_kernel_write(void *dst, void *src, size_t size); 108extern long notrace probe_kernel_write(void *dst, void *src, size_t size);
109extern long notrace __probe_kernel_write(void *dst, void *src, size_t size);
108 110
109#endif /* __LINUX_UACCESS_H__ */ 111#endif /* __LINUX_UACCESS_H__ */
diff --git a/include/linux/ucb1400.h b/include/linux/ucb1400.h
index adb44066680c..1b4790911052 100644
--- a/include/linux/ucb1400.h
+++ b/include/linux/ucb1400.h
@@ -110,6 +110,10 @@ struct ucb1400 {
110 struct platform_device *ucb1400_gpio; 110 struct platform_device *ucb1400_gpio;
111}; 111};
112 112
113struct ucb1400_pdata {
114 int irq;
115};
116
113static inline u16 ucb1400_reg_read(struct snd_ac97 *ac97, u16 reg) 117static inline u16 ucb1400_reg_read(struct snd_ac97 *ac97, u16 reg)
114{ 118{
115 return ac97->bus->ops->read(ac97, reg); 119 return ac97->bus->ops->read(ac97, reg);
diff --git a/include/linux/udp.h b/include/linux/udp.h
index 0cf5c4c0ec81..03f72a2ba028 100644
--- a/include/linux/udp.h
+++ b/include/linux/udp.h
@@ -45,16 +45,19 @@ static inline struct udphdr *udp_hdr(const struct sk_buff *skb)
45 return (struct udphdr *)skb_transport_header(skb); 45 return (struct udphdr *)skb_transport_header(skb);
46} 46}
47 47
48#define UDP_HTABLE_SIZE 128 48#define UDP_HTABLE_SIZE_MIN (CONFIG_BASE_SMALL ? 128 : 256)
49 49
50static inline int udp_hashfn(struct net *net, const unsigned num) 50static inline int udp_hashfn(struct net *net, unsigned num, unsigned mask)
51{ 51{
52 return (num + net_hash_mix(net)) & (UDP_HTABLE_SIZE - 1); 52 return (num + net_hash_mix(net)) & mask;
53} 53}
54 54
55struct udp_sock { 55struct udp_sock {
56 /* inet_sock has to be the first member */ 56 /* inet_sock has to be the first member */
57 struct inet_sock inet; 57 struct inet_sock inet;
58#define udp_port_hash inet.sk.__sk_common.skc_u16hashes[0]
59#define udp_portaddr_hash inet.sk.__sk_common.skc_u16hashes[1]
60#define udp_portaddr_node inet.sk.__sk_common.skc_portaddr_node
58 int pending; /* Any pending frames ? */ 61 int pending; /* Any pending frames ? */
59 unsigned int corkflag; /* Cork is required */ 62 unsigned int corkflag; /* Cork is required */
60 __u16 encap_type; /* Is this an Encapsulation socket? */ 63 __u16 encap_type; /* Is this an Encapsulation socket? */
@@ -85,6 +88,12 @@ static inline struct udp_sock *udp_sk(const struct sock *sk)
85 return (struct udp_sock *)sk; 88 return (struct udp_sock *)sk;
86} 89}
87 90
91#define udp_portaddr_for_each_entry(__sk, node, list) \
92 hlist_nulls_for_each_entry(__sk, node, list, __sk_common.skc_portaddr_node)
93
94#define udp_portaddr_for_each_entry_rcu(__sk, node, list) \
95 hlist_nulls_for_each_entry_rcu(__sk, node, list, __sk_common.skc_portaddr_node)
96
88#define IS_UDPLITE(__sk) (udp_sk(__sk)->pcflag) 97#define IS_UDPLITE(__sk) (udp_sk(__sk)->pcflag)
89 98
90#endif 99#endif
diff --git a/include/linux/usb.h b/include/linux/usb.h
index a34fa89f1474..739f1fd1cc15 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -122,7 +122,6 @@ enum usb_interface_condition {
122 * number from the USB core by calling usb_register_dev(). 122 * number from the USB core by calling usb_register_dev().
123 * @condition: binding state of the interface: not bound, binding 123 * @condition: binding state of the interface: not bound, binding
124 * (in probe()), bound to a driver, or unbinding (in disconnect()) 124 * (in probe()), bound to a driver, or unbinding (in disconnect())
125 * @is_active: flag set when the interface is bound and not suspended.
126 * @sysfs_files_created: sysfs attributes exist 125 * @sysfs_files_created: sysfs attributes exist
127 * @ep_devs_created: endpoint child pseudo-devices exist 126 * @ep_devs_created: endpoint child pseudo-devices exist
128 * @unregistering: flag set when the interface is being unregistered 127 * @unregistering: flag set when the interface is being unregistered
@@ -135,8 +134,7 @@ enum usb_interface_condition {
135 * @dev: driver model's view of this device 134 * @dev: driver model's view of this device
136 * @usb_dev: if an interface is bound to the USB major, this will point 135 * @usb_dev: if an interface is bound to the USB major, this will point
137 * to the sysfs representation for that device. 136 * to the sysfs representation for that device.
138 * @pm_usage_cnt: PM usage counter for this interface; autosuspend is not 137 * @pm_usage_cnt: PM usage counter for this interface
139 * allowed unless the counter is 0.
140 * @reset_ws: Used for scheduling resets from atomic context. 138 * @reset_ws: Used for scheduling resets from atomic context.
141 * @reset_running: set to 1 if the interface is currently running a 139 * @reset_running: set to 1 if the interface is currently running a
142 * queued reset so that usb_cancel_queued_reset() doesn't try to 140 * queued reset so that usb_cancel_queued_reset() doesn't try to
@@ -184,7 +182,6 @@ struct usb_interface {
184 int minor; /* minor number this interface is 182 int minor; /* minor number this interface is
185 * bound to */ 183 * bound to */
186 enum usb_interface_condition condition; /* state of binding */ 184 enum usb_interface_condition condition; /* state of binding */
187 unsigned is_active:1; /* the interface is not suspended */
188 unsigned sysfs_files_created:1; /* the sysfs attributes exist */ 185 unsigned sysfs_files_created:1; /* the sysfs attributes exist */
189 unsigned ep_devs_created:1; /* endpoint "devices" exist */ 186 unsigned ep_devs_created:1; /* endpoint "devices" exist */
190 unsigned unregistering:1; /* unregistration is in progress */ 187 unsigned unregistering:1; /* unregistration is in progress */
@@ -192,6 +189,7 @@ struct usb_interface {
192 unsigned needs_altsetting0:1; /* switch to altsetting 0 is pending */ 189 unsigned needs_altsetting0:1; /* switch to altsetting 0 is pending */
193 unsigned needs_binding:1; /* needs delayed unbind/rebind */ 190 unsigned needs_binding:1; /* needs delayed unbind/rebind */
194 unsigned reset_running:1; 191 unsigned reset_running:1;
192 unsigned resetting_device:1; /* true: bandwidth alloc after reset */
195 193
196 struct device dev; /* interface specific device info */ 194 struct device dev; /* interface specific device info */
197 struct device *usb_dev; 195 struct device *usb_dev;
@@ -331,12 +329,14 @@ struct usb_bus {
331 u8 otg_port; /* 0, or number of OTG/HNP port */ 329 u8 otg_port; /* 0, or number of OTG/HNP port */
332 unsigned is_b_host:1; /* true during some HNP roleswitches */ 330 unsigned is_b_host:1; /* true during some HNP roleswitches */
333 unsigned b_hnp_enable:1; /* OTG: did A-Host enable HNP? */ 331 unsigned b_hnp_enable:1; /* OTG: did A-Host enable HNP? */
332 unsigned sg_tablesize; /* 0 or largest number of sg list entries */
334 333
335 int devnum_next; /* Next open device number in 334 int devnum_next; /* Next open device number in
336 * round-robin allocation */ 335 * round-robin allocation */
337 336
338 struct usb_devmap devmap; /* device address allocation map */ 337 struct usb_devmap devmap; /* device address allocation map */
339 struct usb_device *root_hub; /* Root hub */ 338 struct usb_device *root_hub; /* Root hub */
339 struct usb_bus *hs_companion; /* Companion EHCI bus, if any */
340 struct list_head bus_list; /* list of busses */ 340 struct list_head bus_list; /* list of busses */
341 341
342 int bandwidth_allocated; /* on this bus: how much of the time 342 int bandwidth_allocated; /* on this bus: how much of the time
@@ -398,7 +398,6 @@ struct usb_tt;
398 * @portnum: parent port number (origin 1) 398 * @portnum: parent port number (origin 1)
399 * @level: number of USB hub ancestors 399 * @level: number of USB hub ancestors
400 * @can_submit: URBs may be submitted 400 * @can_submit: URBs may be submitted
401 * @discon_suspended: disconnected while suspended
402 * @persist_enabled: USB_PERSIST enabled for this device 401 * @persist_enabled: USB_PERSIST enabled for this device
403 * @have_langid: whether string_langid is valid 402 * @have_langid: whether string_langid is valid
404 * @authorized: policy has said we can use it; 403 * @authorized: policy has said we can use it;
@@ -418,22 +417,15 @@ struct usb_tt;
418 * @usbfs_dentry: usbfs dentry entry for the device 417 * @usbfs_dentry: usbfs dentry entry for the device
419 * @maxchild: number of ports if hub 418 * @maxchild: number of ports if hub
420 * @children: child devices - USB devices that are attached to this hub 419 * @children: child devices - USB devices that are attached to this hub
421 * @pm_usage_cnt: usage counter for autosuspend
422 * @quirks: quirks of the whole device 420 * @quirks: quirks of the whole device
423 * @urbnum: number of URBs submitted for the whole device 421 * @urbnum: number of URBs submitted for the whole device
424 * @active_duration: total time device is not suspended 422 * @active_duration: total time device is not suspended
425 * @autosuspend: for delayed autosuspends
426 * @autoresume: for autoresumes requested while in_interrupt
427 * @pm_mutex: protects PM operations
428 * @last_busy: time of last use 423 * @last_busy: time of last use
429 * @autosuspend_delay: in jiffies 424 * @autosuspend_delay: in jiffies
430 * @connect_time: time device was first connected 425 * @connect_time: time device was first connected
431 * @auto_pm: autosuspend/resume in progress
432 * @do_remote_wakeup: remote wakeup should be enabled 426 * @do_remote_wakeup: remote wakeup should be enabled
433 * @reset_resume: needs reset instead of resume 427 * @reset_resume: needs reset instead of resume
434 * @autosuspend_disabled: autosuspend disabled by the user 428 * @autosuspend_disabled: autosuspend disabled by the user
435 * @autoresume_disabled: autoresume disabled by the user
436 * @skip_sys_resume: skip the next system resume
437 * @wusb_dev: if this is a Wireless USB device, link to the WUSB 429 * @wusb_dev: if this is a Wireless USB device, link to the WUSB
438 * specific data for the device. 430 * specific data for the device.
439 * @slot_id: Slot ID assigned by xHCI 431 * @slot_id: Slot ID assigned by xHCI
@@ -474,7 +466,6 @@ struct usb_device {
474 u8 level; 466 u8 level;
475 467
476 unsigned can_submit:1; 468 unsigned can_submit:1;
477 unsigned discon_suspended:1;
478 unsigned persist_enabled:1; 469 unsigned persist_enabled:1;
479 unsigned have_langid:1; 470 unsigned have_langid:1;
480 unsigned authorized:1; 471 unsigned authorized:1;
@@ -498,27 +489,19 @@ struct usb_device {
498 int maxchild; 489 int maxchild;
499 struct usb_device *children[USB_MAXCHILDREN]; 490 struct usb_device *children[USB_MAXCHILDREN];
500 491
501 int pm_usage_cnt;
502 u32 quirks; 492 u32 quirks;
503 atomic_t urbnum; 493 atomic_t urbnum;
504 494
505 unsigned long active_duration; 495 unsigned long active_duration;
506 496
507#ifdef CONFIG_PM 497#ifdef CONFIG_PM
508 struct delayed_work autosuspend;
509 struct work_struct autoresume;
510 struct mutex pm_mutex;
511
512 unsigned long last_busy; 498 unsigned long last_busy;
513 int autosuspend_delay; 499 int autosuspend_delay;
514 unsigned long connect_time; 500 unsigned long connect_time;
515 501
516 unsigned auto_pm:1;
517 unsigned do_remote_wakeup:1; 502 unsigned do_remote_wakeup:1;
518 unsigned reset_resume:1; 503 unsigned reset_resume:1;
519 unsigned autosuspend_disabled:1; 504 unsigned autosuspend_disabled:1;
520 unsigned autoresume_disabled:1;
521 unsigned skip_sys_resume:1;
522#endif 505#endif
523 struct wusb_dev *wusb_dev; 506 struct wusb_dev *wusb_dev;
524 int slot_id; 507 int slot_id;
@@ -529,9 +512,9 @@ extern struct usb_device *usb_get_dev(struct usb_device *dev);
529extern void usb_put_dev(struct usb_device *dev); 512extern void usb_put_dev(struct usb_device *dev);
530 513
531/* USB device locking */ 514/* USB device locking */
532#define usb_lock_device(udev) down(&(udev)->dev.sem) 515#define usb_lock_device(udev) device_lock(&(udev)->dev)
533#define usb_unlock_device(udev) up(&(udev)->dev.sem) 516#define usb_unlock_device(udev) device_unlock(&(udev)->dev)
534#define usb_trylock_device(udev) down_trylock(&(udev)->dev.sem) 517#define usb_trylock_device(udev) device_trylock(&(udev)->dev)
535extern int usb_lock_device_for_reset(struct usb_device *udev, 518extern int usb_lock_device_for_reset(struct usb_device *udev,
536 const struct usb_interface *iface); 519 const struct usb_interface *iface);
537 520
@@ -543,23 +526,15 @@ extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id);
543 526
544/* USB autosuspend and autoresume */ 527/* USB autosuspend and autoresume */
545#ifdef CONFIG_USB_SUSPEND 528#ifdef CONFIG_USB_SUSPEND
546extern int usb_autopm_set_interface(struct usb_interface *intf); 529extern int usb_enable_autosuspend(struct usb_device *udev);
530extern int usb_disable_autosuspend(struct usb_device *udev);
531
547extern int usb_autopm_get_interface(struct usb_interface *intf); 532extern int usb_autopm_get_interface(struct usb_interface *intf);
548extern void usb_autopm_put_interface(struct usb_interface *intf); 533extern void usb_autopm_put_interface(struct usb_interface *intf);
549extern int usb_autopm_get_interface_async(struct usb_interface *intf); 534extern int usb_autopm_get_interface_async(struct usb_interface *intf);
550extern void usb_autopm_put_interface_async(struct usb_interface *intf); 535extern void usb_autopm_put_interface_async(struct usb_interface *intf);
551 536extern void usb_autopm_get_interface_no_resume(struct usb_interface *intf);
552static inline void usb_autopm_enable(struct usb_interface *intf) 537extern void usb_autopm_put_interface_no_suspend(struct usb_interface *intf);
553{
554 atomic_set(&intf->pm_usage_cnt, 0);
555 usb_autopm_set_interface(intf);
556}
557
558static inline void usb_autopm_disable(struct usb_interface *intf)
559{
560 atomic_set(&intf->pm_usage_cnt, 1);
561 usb_autopm_set_interface(intf);
562}
563 538
564static inline void usb_mark_last_busy(struct usb_device *udev) 539static inline void usb_mark_last_busy(struct usb_device *udev)
565{ 540{
@@ -568,12 +543,13 @@ static inline void usb_mark_last_busy(struct usb_device *udev)
568 543
569#else 544#else
570 545
571static inline int usb_autopm_set_interface(struct usb_interface *intf) 546static inline int usb_enable_autosuspend(struct usb_device *udev)
547{ return 0; }
548static inline int usb_disable_autosuspend(struct usb_device *udev)
572{ return 0; } 549{ return 0; }
573 550
574static inline int usb_autopm_get_interface(struct usb_interface *intf) 551static inline int usb_autopm_get_interface(struct usb_interface *intf)
575{ return 0; } 552{ return 0; }
576
577static inline int usb_autopm_get_interface_async(struct usb_interface *intf) 553static inline int usb_autopm_get_interface_async(struct usb_interface *intf)
578{ return 0; } 554{ return 0; }
579 555
@@ -581,9 +557,11 @@ static inline void usb_autopm_put_interface(struct usb_interface *intf)
581{ } 557{ }
582static inline void usb_autopm_put_interface_async(struct usb_interface *intf) 558static inline void usb_autopm_put_interface_async(struct usb_interface *intf)
583{ } 559{ }
584static inline void usb_autopm_enable(struct usb_interface *intf) 560static inline void usb_autopm_get_interface_no_resume(
561 struct usb_interface *intf)
585{ } 562{ }
586static inline void usb_autopm_disable(struct usb_interface *intf) 563static inline void usb_autopm_put_interface_no_suspend(
564 struct usb_interface *intf)
587{ } 565{ }
588static inline void usb_mark_last_busy(struct usb_device *udev) 566static inline void usb_mark_last_busy(struct usb_device *udev)
589{ } 567{ }
@@ -626,6 +604,10 @@ extern struct usb_interface *usb_ifnum_to_if(const struct usb_device *dev,
626 unsigned ifnum); 604 unsigned ifnum);
627extern struct usb_host_interface *usb_altnum_to_altsetting( 605extern struct usb_host_interface *usb_altnum_to_altsetting(
628 const struct usb_interface *intf, unsigned int altnum); 606 const struct usb_interface *intf, unsigned int altnum);
607extern struct usb_host_interface *usb_find_alt_setting(
608 struct usb_host_config *config,
609 unsigned int iface_num,
610 unsigned int alt_num);
629 611
630 612
631/** 613/**
@@ -1073,7 +1055,8 @@ typedef void (*usb_complete_t)(struct urb *);
1073 * @number_of_packets: Lists the number of ISO transfer buffers. 1055 * @number_of_packets: Lists the number of ISO transfer buffers.
1074 * @interval: Specifies the polling interval for interrupt or isochronous 1056 * @interval: Specifies the polling interval for interrupt or isochronous
1075 * transfers. The units are frames (milliseconds) for full and low 1057 * transfers. The units are frames (milliseconds) for full and low
1076 * speed devices, and microframes (1/8 millisecond) for highspeed ones. 1058 * speed devices, and microframes (1/8 millisecond) for highspeed
1059 * and SuperSpeed devices.
1077 * @error_count: Returns the number of ISO transfers that reported errors. 1060 * @error_count: Returns the number of ISO transfers that reported errors.
1078 * @context: For use in completion functions. This normally points to 1061 * @context: For use in completion functions. This normally points to
1079 * request-specific driver context. 1062 * request-specific driver context.
@@ -1102,7 +1085,7 @@ typedef void (*usb_complete_t)(struct urb *);
1102 * Alternatively, drivers may pass the URB_NO_xxx_DMA_MAP transfer flags, 1085 * Alternatively, drivers may pass the URB_NO_xxx_DMA_MAP transfer flags,
1103 * which tell the host controller driver that no such mapping is needed since 1086 * which tell the host controller driver that no such mapping is needed since
1104 * the device driver is DMA-aware. For example, a device driver might 1087 * the device driver is DMA-aware. For example, a device driver might
1105 * allocate a DMA buffer with usb_buffer_alloc() or call usb_buffer_map(). 1088 * allocate a DMA buffer with usb_alloc_coherent() or call usb_buffer_map().
1106 * When these transfer flags are provided, host controller drivers will 1089 * When these transfer flags are provided, host controller drivers will
1107 * attempt to use the dma addresses found in the transfer_dma and/or 1090 * attempt to use the dma addresses found in the transfer_dma and/or
1108 * setup_dma fields rather than determining a dma address themselves. 1091 * setup_dma fields rather than determining a dma address themselves.
@@ -1304,9 +1287,16 @@ static inline void usb_fill_bulk_urb(struct urb *urb,
1304 * 1287 *
1305 * Initializes a interrupt urb with the proper information needed to submit 1288 * Initializes a interrupt urb with the proper information needed to submit
1306 * it to a device. 1289 * it to a device.
1307 * Note that high speed interrupt endpoints use a logarithmic encoding of 1290 *
1308 * the endpoint interval, and express polling intervals in microframes 1291 * Note that High Speed and SuperSpeed interrupt endpoints use a logarithmic
1309 * (eight per millisecond) rather than in frames (one per millisecond). 1292 * encoding of the endpoint interval, and express polling intervals in
1293 * microframes (eight per millisecond) rather than in frames (one per
1294 * millisecond).
1295 *
1296 * Wireless USB also uses the logarithmic encoding, but specifies it in units of
1297 * 128us instead of 125us. For Wireless USB devices, the interval is passed
1298 * through to the host controller, rather than being translated into microframe
1299 * units.
1310 */ 1300 */
1311static inline void usb_fill_int_urb(struct urb *urb, 1301static inline void usb_fill_int_urb(struct urb *urb,
1312 struct usb_device *dev, 1302 struct usb_device *dev,
@@ -1323,7 +1313,7 @@ static inline void usb_fill_int_urb(struct urb *urb,
1323 urb->transfer_buffer_length = buffer_length; 1313 urb->transfer_buffer_length = buffer_length;
1324 urb->complete = complete_fn; 1314 urb->complete = complete_fn;
1325 urb->context = context; 1315 urb->context = context;
1326 if (dev->speed == USB_SPEED_HIGH) 1316 if (dev->speed == USB_SPEED_HIGH || dev->speed == USB_SPEED_SUPER)
1327 urb->interval = 1 << (interval - 1); 1317 urb->interval = 1 << (interval - 1);
1328 else 1318 else
1329 urb->interval = interval; 1319 urb->interval = interval;
@@ -1376,11 +1366,23 @@ static inline int usb_urb_dir_out(struct urb *urb)
1376 return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_OUT; 1366 return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_OUT;
1377} 1367}
1378 1368
1379void *usb_buffer_alloc(struct usb_device *dev, size_t size, 1369void *usb_alloc_coherent(struct usb_device *dev, size_t size,
1380 gfp_t mem_flags, dma_addr_t *dma); 1370 gfp_t mem_flags, dma_addr_t *dma);
1381void usb_buffer_free(struct usb_device *dev, size_t size, 1371void usb_free_coherent(struct usb_device *dev, size_t size,
1382 void *addr, dma_addr_t dma); 1372 void *addr, dma_addr_t dma);
1383 1373
1374/* Compatible macros while we switch over */
1375static inline void *usb_buffer_alloc(struct usb_device *dev, size_t size,
1376 gfp_t mem_flags, dma_addr_t *dma)
1377{
1378 return usb_alloc_coherent(dev, size, mem_flags, dma);
1379}
1380static inline void usb_buffer_free(struct usb_device *dev, size_t size,
1381 void *addr, dma_addr_t dma)
1382{
1383 return usb_free_coherent(dev, size, addr, dma);
1384}
1385
1384#if 0 1386#if 0
1385struct urb *usb_buffer_map(struct urb *urb); 1387struct urb *usb_buffer_map(struct urb *urb);
1386void usb_buffer_dmasync(struct urb *urb); 1388void usb_buffer_dmasync(struct urb *urb);
@@ -1584,14 +1586,18 @@ extern void usb_register_notify(struct notifier_block *nb);
1584extern void usb_unregister_notify(struct notifier_block *nb); 1586extern void usb_unregister_notify(struct notifier_block *nb);
1585 1587
1586#ifdef DEBUG 1588#ifdef DEBUG
1587#define dbg(format, arg...) printk(KERN_DEBUG "%s: " format "\n" , \ 1589#define dbg(format, arg...) \
1588 __FILE__ , ## arg) 1590 printk(KERN_DEBUG "%s: " format "\n", __FILE__, ##arg)
1589#else 1591#else
1590#define dbg(format, arg...) do {} while (0) 1592#define dbg(format, arg...) \
1593do { \
1594 if (0) \
1595 printk(KERN_DEBUG "%s: " format "\n", __FILE__, ##arg); \
1596} while (0)
1591#endif 1597#endif
1592 1598
1593#define err(format, arg...) printk(KERN_ERR KBUILD_MODNAME ": " \ 1599#define err(format, arg...) \
1594 format "\n" , ## arg) 1600 printk(KERN_ERR KBUILD_MODNAME ": " format "\n", ##arg)
1595 1601
1596/* debugfs stuff */ 1602/* debugfs stuff */
1597extern struct dentry *usb_debug_root; 1603extern struct dentry *usb_debug_root;
diff --git a/include/linux/usb/Kbuild b/include/linux/usb/Kbuild
index 54c446309a2a..29fd73b0bffc 100644
--- a/include/linux/usb/Kbuild
+++ b/include/linux/usb/Kbuild
@@ -5,4 +5,3 @@ header-y += gadgetfs.h
5header-y += midi.h 5header-y += midi.h
6header-y += g_printer.h 6header-y += g_printer.h
7header-y += tmc.h 7header-y += tmc.h
8header-y += vstusb.h
diff --git a/include/linux/usb/atmel_usba_udc.h b/include/linux/usb/atmel_usba_udc.h
index 6311fa2d9f82..baf41c8616e9 100644
--- a/include/linux/usb/atmel_usba_udc.h
+++ b/include/linux/usb/atmel_usba_udc.h
@@ -15,6 +15,7 @@ struct usba_ep_data {
15 15
16struct usba_platform_data { 16struct usba_platform_data {
17 int vbus_pin; 17 int vbus_pin;
18 int vbus_pin_inverted;
18 int num_ep; 19 int num_ep;
19 struct usba_ep_data ep[0]; 20 struct usba_ep_data ep[0];
20}; 21};
diff --git a/include/linux/usb/audio.h b/include/linux/usb/audio.h
index eaf9dffe0a01..4d3e450e2b03 100644
--- a/include/linux/usb/audio.h
+++ b/include/linux/usb/audio.h
@@ -25,6 +25,9 @@
25#define USB_SUBCLASS_AUDIOSTREAMING 0x02 25#define USB_SUBCLASS_AUDIOSTREAMING 0x02
26#define USB_SUBCLASS_MIDISTREAMING 0x03 26#define USB_SUBCLASS_MIDISTREAMING 0x03
27 27
28#define UAC_VERSION_1 0x00
29#define UAC_VERSION_2 0x20
30
28/* A.5 Audio Class-Specific AC Interface Descriptor Subtypes */ 31/* A.5 Audio Class-Specific AC Interface Descriptor Subtypes */
29#define UAC_HEADER 0x01 32#define UAC_HEADER 0x01
30#define UAC_INPUT_TERMINAL 0x02 33#define UAC_INPUT_TERMINAL 0x02
@@ -32,8 +35,17 @@
32#define UAC_MIXER_UNIT 0x04 35#define UAC_MIXER_UNIT 0x04
33#define UAC_SELECTOR_UNIT 0x05 36#define UAC_SELECTOR_UNIT 0x05
34#define UAC_FEATURE_UNIT 0x06 37#define UAC_FEATURE_UNIT 0x06
35#define UAC_PROCESSING_UNIT 0x07 38#define UAC_PROCESSING_UNIT_V1 0x07
36#define UAC_EXTENSION_UNIT 0x08 39#define UAC_EXTENSION_UNIT_V1 0x08
40
41/* UAC v2.0 types */
42#define UAC_EFFECT_UNIT 0x07
43#define UAC_PROCESSING_UNIT_V2 0x08
44#define UAC_EXTENSION_UNIT_V2 0x09
45#define UAC_CLOCK_SOURCE 0x0a
46#define UAC_CLOCK_SELECTOR 0x0b
47#define UAC_CLOCK_MULTIPLIER 0x0c
48#define UAC_SAMPLE_RATE_CONVERTER 0x0d
37 49
38/* A.6 Audio Class-Specific AS Interface Descriptor Subtypes */ 50/* A.6 Audio Class-Specific AS Interface Descriptor Subtypes */
39#define UAC_AS_GENERAL 0x01 51#define UAC_AS_GENERAL 0x01
@@ -66,6 +78,10 @@
66 78
67#define UAC_GET_STAT 0xff 79#define UAC_GET_STAT 0xff
68 80
81/* Audio class v2.0 handles all the parameter calls differently */
82#define UAC2_CS_CUR 0x01
83#define UAC2_CS_RANGE 0x02
84
69/* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */ 85/* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */
70#define UAC_MS_HEADER 0x01 86#define UAC_MS_HEADER 0x01
71#define UAC_MIDI_IN_JACK 0x02 87#define UAC_MIDI_IN_JACK 0x02
@@ -81,7 +97,7 @@
81 97
82/* Terminal Control Selectors */ 98/* Terminal Control Selectors */
83/* 4.3.2 Class-Specific AC Interface Descriptor */ 99/* 4.3.2 Class-Specific AC Interface Descriptor */
84struct uac_ac_header_descriptor { 100struct uac_ac_header_descriptor_v1 {
85 __u8 bLength; /* 8 + n */ 101 __u8 bLength; /* 8 + n */
86 __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ 102 __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */
87 __u8 bDescriptorSubtype; /* UAC_MS_HEADER */ 103 __u8 bDescriptorSubtype; /* UAC_MS_HEADER */
@@ -95,7 +111,7 @@ struct uac_ac_header_descriptor {
95 111
96/* As above, but more useful for defining your own descriptors: */ 112/* As above, but more useful for defining your own descriptors: */
97#define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n) \ 113#define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n) \
98struct uac_ac_header_descriptor_##n { \ 114struct uac_ac_header_descriptor_v1_##n { \
99 __u8 bLength; \ 115 __u8 bLength; \
100 __u8 bDescriptorType; \ 116 __u8 bDescriptorType; \
101 __u8 bDescriptorSubtype; \ 117 __u8 bDescriptorSubtype; \
@@ -130,8 +146,12 @@ struct uac_input_terminal_descriptor {
130#define UAC_INPUT_TERMINAL_MICROPHONE_ARRAY 0x205 146#define UAC_INPUT_TERMINAL_MICROPHONE_ARRAY 0x205
131#define UAC_INPUT_TERMINAL_PROC_MICROPHONE_ARRAY 0x206 147#define UAC_INPUT_TERMINAL_PROC_MICROPHONE_ARRAY 0x206
132 148
149/* Terminals - control selectors */
150
151#define UAC_TERMINAL_CS_COPY_PROTECT_CONTROL 0x01
152
133/* 4.3.2.2 Output Terminal Descriptor */ 153/* 4.3.2.2 Output Terminal Descriptor */
134struct uac_output_terminal_descriptor { 154struct uac_output_terminal_descriptor_v1 {
135 __u8 bLength; /* in bytes: 9 */ 155 __u8 bLength; /* in bytes: 9 */
136 __u8 bDescriptorType; /* CS_INTERFACE descriptor type */ 156 __u8 bDescriptorType; /* CS_INTERFACE descriptor type */
137 __u8 bDescriptorSubtype; /* OUTPUT_TERMINAL descriptor subtype */ 157 __u8 bDescriptorSubtype; /* OUTPUT_TERMINAL descriptor subtype */
@@ -171,7 +191,7 @@ struct uac_feature_unit_descriptor_##ch { \
171} __attribute__ ((packed)) 191} __attribute__ ((packed))
172 192
173/* 4.5.2 Class-Specific AS Interface Descriptor */ 193/* 4.5.2 Class-Specific AS Interface Descriptor */
174struct uac_as_header_descriptor { 194struct uac_as_header_descriptor_v1 {
175 __u8 bLength; /* in bytes: 7 */ 195 __u8 bLength; /* in bytes: 7 */
176 __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ 196 __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */
177 __u8 bDescriptorSubtype; /* AS_GENERAL */ 197 __u8 bDescriptorSubtype; /* AS_GENERAL */
@@ -180,6 +200,19 @@ struct uac_as_header_descriptor {
180 __le16 wFormatTag; /* The Audio Data Format */ 200 __le16 wFormatTag; /* The Audio Data Format */
181} __attribute__ ((packed)); 201} __attribute__ ((packed));
182 202
203struct uac_as_header_descriptor_v2 {
204 __u8 bLength;
205 __u8 bDescriptorType;
206 __u8 bDescriptorSubtype;
207 __u8 bTerminalLink;
208 __u8 bmControls;
209 __u8 bFormatType;
210 __u32 bmFormats;
211 __u8 bNrChannels;
212 __u32 bmChannelConfig;
213 __u8 iChannelNames;
214} __attribute__((packed));
215
183#define UAC_DT_AS_HEADER_SIZE 7 216#define UAC_DT_AS_HEADER_SIZE 7
184 217
185/* Formats - A.1.1 Audio Data Format Type I Codes */ 218/* Formats - A.1.1 Audio Data Format Type I Codes */
@@ -232,11 +265,62 @@ struct uac_format_type_i_discrete_descriptor_##n { \
232 265
233#define UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(n) (8 + (n * 3)) 266#define UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(n) (8 + (n * 3))
234 267
268struct uac_format_type_i_ext_descriptor {
269 __u8 bLength;
270 __u8 bDescriptorType;
271 __u8 bDescriptorSubtype;
272 __u8 bFormatType;
273 __u8 bSubslotSize;
274 __u8 bBitResolution;
275 __u8 bHeaderLength;
276 __u8 bControlSize;
277 __u8 bSideBandProtocol;
278} __attribute__((packed));
279
280
281/* Formats - Audio Data Format Type I Codes */
282
283#define UAC_FORMAT_TYPE_II_MPEG 0x1001
284#define UAC_FORMAT_TYPE_II_AC3 0x1002
285
286struct uac_format_type_ii_discrete_descriptor {
287 __u8 bLength;
288 __u8 bDescriptorType;
289 __u8 bDescriptorSubtype;
290 __u8 bFormatType;
291 __le16 wMaxBitRate;
292 __le16 wSamplesPerFrame;
293 __u8 bSamFreqType;
294 __u8 tSamFreq[][3];
295} __attribute__((packed));
296
297struct uac_format_type_ii_ext_descriptor {
298 __u8 bLength;
299 __u8 bDescriptorType;
300 __u8 bDescriptorSubtype;
301 __u8 bFormatType;
302 __u16 wMaxBitRate;
303 __u16 wSamplesPerFrame;
304 __u8 bHeaderLength;
305 __u8 bSideBandProtocol;
306} __attribute__((packed));
307
308/* type III */
309#define UAC_FORMAT_TYPE_III_IEC1937_AC3 0x2001
310#define UAC_FORMAT_TYPE_III_IEC1937_MPEG1_LAYER1 0x2002
311#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_NOEXT 0x2003
312#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_EXT 0x2004
313#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER1_LS 0x2005
314#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER23_LS 0x2006
315
235/* Formats - A.2 Format Type Codes */ 316/* Formats - A.2 Format Type Codes */
236#define UAC_FORMAT_TYPE_UNDEFINED 0x0 317#define UAC_FORMAT_TYPE_UNDEFINED 0x0
237#define UAC_FORMAT_TYPE_I 0x1 318#define UAC_FORMAT_TYPE_I 0x1
238#define UAC_FORMAT_TYPE_II 0x2 319#define UAC_FORMAT_TYPE_II 0x2
239#define UAC_FORMAT_TYPE_III 0x3 320#define UAC_FORMAT_TYPE_III 0x3
321#define UAC_EXT_FORMAT_TYPE_I 0x81
322#define UAC_EXT_FORMAT_TYPE_II 0x82
323#define UAC_EXT_FORMAT_TYPE_III 0x83
240 324
241struct uac_iso_endpoint_descriptor { 325struct uac_iso_endpoint_descriptor {
242 __u8 bLength; /* in bytes: 7 */ 326 __u8 bLength; /* in bytes: 7 */
@@ -252,7 +336,31 @@ struct uac_iso_endpoint_descriptor {
252#define UAC_EP_CS_ATTR_PITCH_CONTROL 0x02 336#define UAC_EP_CS_ATTR_PITCH_CONTROL 0x02
253#define UAC_EP_CS_ATTR_FILL_MAX 0x80 337#define UAC_EP_CS_ATTR_FILL_MAX 0x80
254 338
339/* Audio class v2.0: CLOCK_SOURCE descriptor */
340
341struct uac_clock_source_descriptor {
342 __u8 bLength;
343 __u8 bDescriptorType;
344 __u8 bDescriptorSubtype;
345 __u8 bClockID;
346 __u8 bmAttributes;
347 __u8 bmControls;
348 __u8 bAssocTerminal;
349 __u8 iClockSource;
350} __attribute__((packed));
351
255/* A.10.2 Feature Unit Control Selectors */ 352/* A.10.2 Feature Unit Control Selectors */
353
354struct uac_feature_unit_descriptor {
355 __u8 bLength;
356 __u8 bDescriptorType;
357 __u8 bDescriptorSubtype;
358 __u8 bUnitID;
359 __u8 bSourceID;
360 __u8 bControlSize;
361 __u8 controls[0]; /* variable length */
362} __attribute__((packed));
363
256#define UAC_FU_CONTROL_UNDEFINED 0x00 364#define UAC_FU_CONTROL_UNDEFINED 0x00
257#define UAC_MUTE_CONTROL 0x01 365#define UAC_MUTE_CONTROL 0x01
258#define UAC_VOLUME_CONTROL 0x02 366#define UAC_VOLUME_CONTROL 0x02
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h
index 94012e649d86..e58369ff8168 100644
--- a/include/linux/usb/ch9.h
+++ b/include/linux/usb/ch9.h
@@ -775,7 +775,7 @@ enum usb_device_speed {
775 USB_SPEED_UNKNOWN = 0, /* enumerating */ 775 USB_SPEED_UNKNOWN = 0, /* enumerating */
776 USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */ 776 USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */
777 USB_SPEED_HIGH, /* usb 2.0 */ 777 USB_SPEED_HIGH, /* usb 2.0 */
778 USB_SPEED_VARIABLE, /* wireless (usb 2.5) */ 778 USB_SPEED_WIRELESS, /* wireless (usb 2.5) */
779 USB_SPEED_SUPER, /* usb 3.0 */ 779 USB_SPEED_SUPER, /* usb 3.0 */
780}; 780};
781 781
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
index 4f6bb3d2160e..738ea1a691cb 100644
--- a/include/linux/usb/composite.h
+++ b/include/linux/usb/composite.h
@@ -127,6 +127,7 @@ struct usb_function {
127 /* private: */ 127 /* private: */
128 /* internals */ 128 /* internals */
129 struct list_head list; 129 struct list_head list;
130 DECLARE_BITMAP(endpoints, 32);
130}; 131};
131 132
132int usb_add_function(struct usb_configuration *, struct usb_function *); 133int usb_add_function(struct usb_configuration *, struct usb_function *);
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index bbf45d500b6d..f4b7ca516cdd 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -15,6 +15,8 @@
15#ifndef __LINUX_USB_GADGET_H 15#ifndef __LINUX_USB_GADGET_H
16#define __LINUX_USB_GADGET_H 16#define __LINUX_USB_GADGET_H
17 17
18#include <linux/slab.h>
19
18struct usb_ep; 20struct usb_ep;
19 21
20/** 22/**
diff --git a/include/linux/usb/musb.h b/include/linux/usb/musb.h
index d43755669261..7acef0234c0e 100644
--- a/include/linux/usb/musb.h
+++ b/include/linux/usb/musb.h
@@ -30,26 +30,26 @@ struct musb_hdrc_eps_bits {
30struct musb_hdrc_config { 30struct musb_hdrc_config {
31 /* MUSB configuration-specific details */ 31 /* MUSB configuration-specific details */
32 unsigned multipoint:1; /* multipoint device */ 32 unsigned multipoint:1; /* multipoint device */
33 unsigned dyn_fifo:1; /* supports dynamic fifo sizing */ 33 unsigned dyn_fifo:1 __deprecated; /* supports dynamic fifo sizing */
34 unsigned soft_con:1; /* soft connect required */ 34 unsigned soft_con:1 __deprecated; /* soft connect required */
35 unsigned utm_16:1; /* utm data witdh is 16 bits */ 35 unsigned utm_16:1 __deprecated; /* utm data witdh is 16 bits */
36 unsigned big_endian:1; /* true if CPU uses big-endian */ 36 unsigned big_endian:1; /* true if CPU uses big-endian */
37 unsigned mult_bulk_tx:1; /* Tx ep required for multbulk pkts */ 37 unsigned mult_bulk_tx:1; /* Tx ep required for multbulk pkts */
38 unsigned mult_bulk_rx:1; /* Rx ep required for multbulk pkts */ 38 unsigned mult_bulk_rx:1; /* Rx ep required for multbulk pkts */
39 unsigned high_iso_tx:1; /* Tx ep required for HB iso */ 39 unsigned high_iso_tx:1; /* Tx ep required for HB iso */
40 unsigned high_iso_rx:1; /* Rx ep required for HD iso */ 40 unsigned high_iso_rx:1; /* Rx ep required for HD iso */
41 unsigned dma:1; /* supports DMA */ 41 unsigned dma:1 __deprecated; /* supports DMA */
42 unsigned vendor_req:1; /* vendor registers required */ 42 unsigned vendor_req:1 __deprecated; /* vendor registers required */
43 43
44 u8 num_eps; /* number of endpoints _with_ ep0 */ 44 u8 num_eps; /* number of endpoints _with_ ep0 */
45 u8 dma_channels; /* number of dma channels */ 45 u8 dma_channels __deprecated; /* number of dma channels */
46 u8 dyn_fifo_size; /* dynamic size in bytes */ 46 u8 dyn_fifo_size; /* dynamic size in bytes */
47 u8 vendor_ctrl; /* vendor control reg width */ 47 u8 vendor_ctrl __deprecated; /* vendor control reg width */
48 u8 vendor_stat; /* vendor status reg witdh */ 48 u8 vendor_stat __deprecated; /* vendor status reg witdh */
49 u8 dma_req_chan; /* bitmask for required dma channels */ 49 u8 dma_req_chan __deprecated; /* bitmask for required dma channels */
50 u8 ram_bits; /* ram address size */ 50 u8 ram_bits; /* ram address size */
51 51
52 struct musb_hdrc_eps_bits *eps_bits; 52 struct musb_hdrc_eps_bits *eps_bits __deprecated;
53#ifdef CONFIG_BLACKFIN 53#ifdef CONFIG_BLACKFIN
54 /* A GPIO controlling VRSEL in Blackfin */ 54 /* A GPIO controlling VRSEL in Blackfin */
55 unsigned int gpio_vrsel; 55 unsigned int gpio_vrsel;
@@ -76,6 +76,9 @@ struct musb_hdrc_platform_data {
76 /* (HOST or OTG) msec/2 after VBUS on till power good */ 76 /* (HOST or OTG) msec/2 after VBUS on till power good */
77 u8 potpgt; 77 u8 potpgt;
78 78
79 /* (HOST or OTG) program PHY for external Vbus */
80 unsigned extvbus:1;
81
79 /* Power the device on or off */ 82 /* Power the device on or off */
80 int (*set_power)(int state); 83 int (*set_power)(int state);
81 84
@@ -84,6 +87,9 @@ struct musb_hdrc_platform_data {
84 87
85 /* MUSB configuration-specific details */ 88 /* MUSB configuration-specific details */
86 struct musb_hdrc_config *config; 89 struct musb_hdrc_config *config;
90
91 /* Architecture specific board data */
92 void *board_data;
87}; 93};
88 94
89 95
diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
index 2443c0e7a80c..f8302d036a76 100644
--- a/include/linux/usb/otg.h
+++ b/include/linux/usb/otg.h
@@ -9,6 +9,8 @@
9#ifndef __LINUX_USB_OTG_H 9#ifndef __LINUX_USB_OTG_H
10#define __LINUX_USB_OTG_H 10#define __LINUX_USB_OTG_H
11 11
12#include <linux/notifier.h>
13
12/* OTG defines lots of enumeration states before device reset */ 14/* OTG defines lots of enumeration states before device reset */
13enum usb_otg_state { 15enum usb_otg_state {
14 OTG_STATE_UNDEFINED = 0, 16 OTG_STATE_UNDEFINED = 0,
@@ -33,6 +35,31 @@ enum usb_otg_state {
33 OTG_STATE_A_VBUS_ERR, 35 OTG_STATE_A_VBUS_ERR,
34}; 36};
35 37
38enum usb_xceiv_events {
39 USB_EVENT_NONE, /* no events or cable disconnected */
40 USB_EVENT_VBUS, /* vbus valid event */
41 USB_EVENT_ID, /* id was grounded */
42 USB_EVENT_CHARGER, /* usb dedicated charger */
43 USB_EVENT_ENUMERATED, /* gadget driver enumerated */
44};
45
46#define USB_OTG_PULLUP_ID (1 << 0)
47#define USB_OTG_PULLDOWN_DP (1 << 1)
48#define USB_OTG_PULLDOWN_DM (1 << 2)
49#define USB_OTG_EXT_VBUS_INDICATOR (1 << 3)
50#define USB_OTG_DRV_VBUS (1 << 4)
51#define USB_OTG_DRV_VBUS_EXT (1 << 5)
52
53struct otg_transceiver;
54
55/* for transceivers connected thru an ULPI interface, the user must
56 * provide access ops
57 */
58struct otg_io_access_ops {
59 int (*read)(struct otg_transceiver *otg, u32 reg);
60 int (*write)(struct otg_transceiver *otg, u32 val, u32 reg);
61};
62
36/* 63/*
37 * the otg driver needs to interact with both device side and host side 64 * the otg driver needs to interact with both device side and host side
38 * usb controllers. it decides which controller is active at a given 65 * usb controllers. it decides which controller is active at a given
@@ -42,6 +69,7 @@ enum usb_otg_state {
42struct otg_transceiver { 69struct otg_transceiver {
43 struct device *dev; 70 struct device *dev;
44 const char *label; 71 const char *label;
72 unsigned int flags;
45 73
46 u8 default_a; 74 u8 default_a;
47 enum usb_otg_state state; 75 enum usb_otg_state state;
@@ -49,10 +77,20 @@ struct otg_transceiver {
49 struct usb_bus *host; 77 struct usb_bus *host;
50 struct usb_gadget *gadget; 78 struct usb_gadget *gadget;
51 79
80 struct otg_io_access_ops *io_ops;
81 void __iomem *io_priv;
82
83 /* for notification of usb_xceiv_events */
84 struct blocking_notifier_head notifier;
85
52 /* to pass extra port status to the root hub */ 86 /* to pass extra port status to the root hub */
53 u16 port_status; 87 u16 port_status;
54 u16 port_change; 88 u16 port_change;
55 89
90 /* initialize/shutdown the OTG controller */
91 int (*init)(struct otg_transceiver *otg);
92 void (*shutdown)(struct otg_transceiver *otg);
93
56 /* bind/unbind the host controller */ 94 /* bind/unbind the host controller */
57 int (*set_host)(struct otg_transceiver *otg, 95 int (*set_host)(struct otg_transceiver *otg,
58 struct usb_bus *host); 96 struct usb_bus *host);
@@ -65,6 +103,10 @@ struct otg_transceiver {
65 int (*set_power)(struct otg_transceiver *otg, 103 int (*set_power)(struct otg_transceiver *otg,
66 unsigned mA); 104 unsigned mA);
67 105
106 /* effective for A-peripheral, ignored for B devices */
107 int (*set_vbus)(struct otg_transceiver *otg,
108 bool enabled);
109
68 /* for non-OTG B devices: set transceiver into suspend mode */ 110 /* for non-OTG B devices: set transceiver into suspend mode */
69 int (*set_suspend)(struct otg_transceiver *otg, 111 int (*set_suspend)(struct otg_transceiver *otg,
70 int suspend); 112 int suspend);
@@ -81,10 +123,52 @@ struct otg_transceiver {
81/* for board-specific init logic */ 123/* for board-specific init logic */
82extern int otg_set_transceiver(struct otg_transceiver *); 124extern int otg_set_transceiver(struct otg_transceiver *);
83 125
126#if defined(CONFIG_NOP_USB_XCEIV) || defined(CONFIG_NOP_USB_XCEIV_MODULE)
84/* sometimes transceivers are accessed only through e.g. ULPI */ 127/* sometimes transceivers are accessed only through e.g. ULPI */
85extern void usb_nop_xceiv_register(void); 128extern void usb_nop_xceiv_register(void);
86extern void usb_nop_xceiv_unregister(void); 129extern void usb_nop_xceiv_unregister(void);
130#else
131static inline void usb_nop_xceiv_register(void)
132{
133}
134
135static inline void usb_nop_xceiv_unregister(void)
136{
137}
138#endif
87 139
140/* helpers for direct access thru low-level io interface */
141static inline int otg_io_read(struct otg_transceiver *otg, u32 reg)
142{
143 if (otg->io_ops && otg->io_ops->read)
144 return otg->io_ops->read(otg, reg);
145
146 return -EINVAL;
147}
148
149static inline int otg_io_write(struct otg_transceiver *otg, u32 reg, u32 val)
150{
151 if (otg->io_ops && otg->io_ops->write)
152 return otg->io_ops->write(otg, reg, val);
153
154 return -EINVAL;
155}
156
157static inline int
158otg_init(struct otg_transceiver *otg)
159{
160 if (otg->init)
161 return otg->init(otg);
162
163 return 0;
164}
165
166static inline void
167otg_shutdown(struct otg_transceiver *otg)
168{
169 if (otg->shutdown)
170 otg->shutdown(otg);
171}
88 172
89/* for usb host and peripheral controller drivers */ 173/* for usb host and peripheral controller drivers */
90extern struct otg_transceiver *otg_get_transceiver(void); 174extern struct otg_transceiver *otg_get_transceiver(void);
@@ -97,6 +181,12 @@ otg_start_hnp(struct otg_transceiver *otg)
97 return otg->start_hnp(otg); 181 return otg->start_hnp(otg);
98} 182}
99 183
184/* Context: can sleep */
185static inline int
186otg_set_vbus(struct otg_transceiver *otg, bool enabled)
187{
188 return otg->set_vbus(otg, enabled);
189}
100 190
101/* for HCDs */ 191/* for HCDs */
102static inline int 192static inline int
@@ -105,7 +195,6 @@ otg_set_host(struct otg_transceiver *otg, struct usb_bus *host)
105 return otg->set_host(otg, host); 195 return otg->set_host(otg, host);
106} 196}
107 197
108
109/* for usb peripheral controller drivers */ 198/* for usb peripheral controller drivers */
110 199
111/* Context: can sleep */ 200/* Context: can sleep */
@@ -137,6 +226,18 @@ otg_start_srp(struct otg_transceiver *otg)
137 return otg->start_srp(otg); 226 return otg->start_srp(otg);
138} 227}
139 228
229/* notifiers */
230static inline int
231otg_register_notifier(struct otg_transceiver *otg, struct notifier_block *nb)
232{
233 return blocking_notifier_chain_register(&otg->notifier, nb);
234}
235
236static inline void
237otg_unregister_notifier(struct otg_transceiver *otg, struct notifier_block *nb)
238{
239 blocking_notifier_chain_unregister(&otg->notifier, nb);
240}
140 241
141/* for OTG controller drivers (and maybe other stuff) */ 242/* for OTG controller drivers (and maybe other stuff) */
142extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num); 243extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num);
diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h
index 2526f3bbd273..0a555dd131fc 100644
--- a/include/linux/usb/quirks.h
+++ b/include/linux/usb/quirks.h
@@ -19,4 +19,7 @@
19/* device can't handle its Configuration or Interface strings */ 19/* device can't handle its Configuration or Interface strings */
20#define USB_QUIRK_CONFIG_INTF_STRINGS 0x00000008 20#define USB_QUIRK_CONFIG_INTF_STRINGS 0x00000008
21 21
22/*device will morph if reset, don't use reset for handling errors */
23#define USB_QUIRK_RESET_MORPHS 0x00000010
24
22#endif /* __LINUX_USB_QUIRKS_H */ 25#endif /* __LINUX_USB_QUIRKS_H */
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h
index ce911ebf91e8..0a458b861933 100644
--- a/include/linux/usb/serial.h
+++ b/include/linux/usb/serial.h
@@ -16,6 +16,7 @@
16#include <linux/kref.h> 16#include <linux/kref.h>
17#include <linux/mutex.h> 17#include <linux/mutex.h>
18#include <linux/sysrq.h> 18#include <linux/sysrq.h>
19#include <linux/kfifo.h>
19 20
20#define SERIAL_TTY_MAJOR 188 /* Nice legal number now */ 21#define SERIAL_TTY_MAJOR 188 /* Nice legal number now */
21#define SERIAL_TTY_MINORS 254 /* loads of devices :) */ 22#define SERIAL_TTY_MINORS 254 /* loads of devices :) */
@@ -39,8 +40,6 @@ enum port_dev_state {
39 * @serial: pointer back to the struct usb_serial owner of this port. 40 * @serial: pointer back to the struct usb_serial owner of this port.
40 * @port: pointer to the corresponding tty_port for this port. 41 * @port: pointer to the corresponding tty_port for this port.
41 * @lock: spinlock to grab when updating portions of this structure. 42 * @lock: spinlock to grab when updating portions of this structure.
42 * @mutex: mutex used to synchronize serial_open() and serial_close()
43 * access for this port.
44 * @number: the number of the port (the minor number). 43 * @number: the number of the port (the minor number).
45 * @interrupt_in_buffer: pointer to the interrupt in buffer for this port. 44 * @interrupt_in_buffer: pointer to the interrupt in buffer for this port.
46 * @interrupt_in_urb: pointer to the interrupt in struct urb for this port. 45 * @interrupt_in_urb: pointer to the interrupt in struct urb for this port.
@@ -77,7 +76,6 @@ struct usb_serial_port {
77 struct usb_serial *serial; 76 struct usb_serial *serial;
78 struct tty_port port; 77 struct tty_port port;
79 spinlock_t lock; 78 spinlock_t lock;
80 struct mutex mutex;
81 unsigned char number; 79 unsigned char number;
82 80
83 unsigned char *interrupt_in_buffer; 81 unsigned char *interrupt_in_buffer;
@@ -97,7 +95,7 @@ struct usb_serial_port {
97 unsigned char *bulk_out_buffer; 95 unsigned char *bulk_out_buffer;
98 int bulk_out_size; 96 int bulk_out_size;
99 struct urb *write_urb; 97 struct urb *write_urb;
100 struct kfifo *write_fifo; 98 struct kfifo write_fifo;
101 int write_urb_busy; 99 int write_urb_busy;
102 __u8 bulk_out_endpointAddress; 100 __u8 bulk_out_endpointAddress;
103 101
@@ -353,14 +351,11 @@ static inline void usb_serial_debug_data(int debug,
353 351
354/* Use our own dbg macro */ 352/* Use our own dbg macro */
355#undef dbg 353#undef dbg
356#define dbg(format, arg...) \ 354#define dbg(format, arg...) \
357 do { \ 355do { \
358 if (debug) \ 356 if (debug) \
359 printk(KERN_DEBUG "%s: " format "\n" , __FILE__ , \ 357 printk(KERN_DEBUG "%s: " format "\n", __FILE__, ##arg); \
360 ## arg); \ 358} while (0)
361 } while (0)
362
363
364 359
365#endif /* __LINUX_USB_SERIAL_H */ 360#endif /* __LINUX_USB_SERIAL_H */
366 361
diff --git a/include/linux/usb/ulpi.h b/include/linux/usb/ulpi.h
new file mode 100644
index 000000000000..20675c6ebc4d
--- /dev/null
+++ b/include/linux/usb/ulpi.h
@@ -0,0 +1,7 @@
1#ifndef __LINUX_USB_ULPI_H
2#define __LINUX_USB_ULPI_H
3
4struct otg_transceiver *otg_ulpi_create(struct otg_io_access_ops *ops,
5 unsigned int flags);
6
7#endif /* __LINUX_USB_ULPI_H */
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
index f81473052059..df1e83dd9a54 100644
--- a/include/linux/usb/usbnet.h
+++ b/include/linux/usb/usbnet.h
@@ -55,6 +55,7 @@ struct usbnet {
55 struct sk_buff_head done; 55 struct sk_buff_head done;
56 struct sk_buff_head rxq_pause; 56 struct sk_buff_head rxq_pause;
57 struct urb *interrupt; 57 struct urb *interrupt;
58 struct usb_anchor deferred;
58 struct tasklet_struct bh; 59 struct tasklet_struct bh;
59 60
60 struct work_struct kevent; 61 struct work_struct kevent;
@@ -65,6 +66,8 @@ struct usbnet {
65# define EVENT_STS_SPLIT 3 66# define EVENT_STS_SPLIT 3
66# define EVENT_LINK_RESET 4 67# define EVENT_LINK_RESET 4
67# define EVENT_RX_PAUSED 5 68# define EVENT_RX_PAUSED 5
69# define EVENT_DEV_WAKING 6
70# define EVENT_DEV_ASLEEP 7
68}; 71};
69 72
70static inline struct usb_driver *driver_of(struct usb_interface *intf) 73static inline struct usb_driver *driver_of(struct usb_interface *intf)
@@ -90,7 +93,9 @@ struct driver_info {
90#define FLAG_WLAN 0x0080 /* use "wlan%d" names */ 93#define FLAG_WLAN 0x0080 /* use "wlan%d" names */
91#define FLAG_AVOID_UNLINK_URBS 0x0100 /* don't unlink urbs at usbnet_stop() */ 94#define FLAG_AVOID_UNLINK_URBS 0x0100 /* don't unlink urbs at usbnet_stop() */
92#define FLAG_SEND_ZLP 0x0200 /* hw requires ZLPs are sent */ 95#define FLAG_SEND_ZLP 0x0200 /* hw requires ZLPs are sent */
96#define FLAG_WWAN 0x0400 /* use "wwan%d" names */
93 97
98#define FLAG_LINK_INTR 0x0800 /* updates link (carrier) status */
94 99
95 /* init device ... can sleep, or cause probe() failure */ 100 /* init device ... can sleep, or cause probe() failure */
96 int (*bind)(struct usbnet *, struct usb_interface *); 101 int (*bind)(struct usbnet *, struct usb_interface *);
@@ -107,6 +112,9 @@ struct driver_info {
107 /* see if peer is connected ... can sleep */ 112 /* see if peer is connected ... can sleep */
108 int (*check_connect)(struct usbnet *); 113 int (*check_connect)(struct usbnet *);
109 114
115 /* (dis)activate runtime power management */
116 int (*manage_power)(struct usbnet *, int);
117
110 /* for status polling */ 118 /* for status polling */
111 void (*status)(struct usbnet *, struct urb *); 119 void (*status)(struct usbnet *, struct urb *);
112 120
@@ -206,25 +214,4 @@ extern void usbnet_set_msglevel (struct net_device *, u32);
206extern void usbnet_get_drvinfo (struct net_device *, struct ethtool_drvinfo *); 214extern void usbnet_get_drvinfo (struct net_device *, struct ethtool_drvinfo *);
207extern int usbnet_nway_reset(struct net_device *net); 215extern int usbnet_nway_reset(struct net_device *net);
208 216
209/* messaging support includes the interface name, so it must not be
210 * used before it has one ... notably, in minidriver bind() calls.
211 */
212#ifdef DEBUG
213#define devdbg(usbnet, fmt, arg...) \
214 printk(KERN_DEBUG "%s: " fmt "\n" , (usbnet)->net->name , ## arg)
215#else
216#define devdbg(usbnet, fmt, arg...) \
217 ({ if (0) printk(KERN_DEBUG "%s: " fmt "\n" , (usbnet)->net->name , \
218 ## arg); 0; })
219#endif
220
221#define deverr(usbnet, fmt, arg...) \
222 printk(KERN_ERR "%s: " fmt "\n" , (usbnet)->net->name , ## arg)
223#define devwarn(usbnet, fmt, arg...) \
224 printk(KERN_WARNING "%s: " fmt "\n" , (usbnet)->net->name , ## arg)
225
226#define devinfo(usbnet, fmt, arg...) \
227 printk(KERN_INFO "%s: " fmt "\n" , (usbnet)->net->name , ## arg); \
228
229
230#endif /* __LINUX_USB_USBNET_H */ 217#endif /* __LINUX_USB_USBNET_H */
diff --git a/include/linux/usb/vstusb.h b/include/linux/usb/vstusb.h
deleted file mode 100644
index 1cfac67191ff..000000000000
--- a/include/linux/usb/vstusb.h
+++ /dev/null
@@ -1,71 +0,0 @@
1/*****************************************************************************
2 * File: drivers/usb/misc/vstusb.h
3 *
4 * Purpose: Support for the bulk USB Vernier Spectrophotometers
5 *
6 * Author: EQware Engineering, Inc.
7 * Oregon City, OR, USA 97045
8 *
9 * Copyright: 2007, 2008
10 * Vernier Software & Technology
11 * Beaverton, OR, USA 97005
12 *
13 * Web: www.vernier.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/*****************************************************************************
21 *
22 * The vstusb module is a standard usb 'client' driver running on top of the
23 * standard usb host controller stack.
24 *
25 * In general, vstusb supports standard bulk usb pipes. It supports multiple
26 * devices and multiple pipes per device.
27 *
28 * The vstusb driver supports two interfaces:
29 * 1 - ioctl SEND_PIPE/RECV_PIPE - a general bulk write/read msg
30 * interface to any pipe with timeout support;
31 * 2 - standard read/write with ioctl config - offers standard read/write
32 * interface with ioctl configured pipes and timeouts.
33 *
34 * Both interfaces can be signal from other process and will abort its i/o
35 * operation.
36 *
37 * A timeout of 0 means NO timeout. The user can still terminate the read via
38 * signal.
39 *
40 * If using multiple threads with this driver, the user should ensure that
41 * any reads, writes, or ioctls are complete before closing the device.
42 * Changing read/write timeouts or pipes takes effect on next read/write.
43 *
44 *****************************************************************************/
45
46struct vstusb_args {
47 union {
48 /* this struct is used for IOCTL_VSTUSB_SEND_PIPE, *
49 * IOCTL_VSTUSB_RECV_PIPE, and read()/write() fops */
50 struct {
51 void __user *buffer;
52 size_t count;
53 unsigned int timeout_ms;
54 int pipe;
55 };
56
57 /* this one is used for IOCTL_VSTUSB_CONFIG_RW */
58 struct {
59 int rd_pipe;
60 int rd_timeout_ms;
61 int wr_pipe;
62 int wr_timeout_ms;
63 };
64 };
65};
66
67#define VST_IOC_MAGIC 'L'
68#define VST_IOC_FIRST 0x20
69#define IOCTL_VSTUSB_SEND_PIPE _IO(VST_IOC_MAGIC, VST_IOC_FIRST)
70#define IOCTL_VSTUSB_RECV_PIPE _IO(VST_IOC_MAGIC, VST_IOC_FIRST + 1)
71#define IOCTL_VSTUSB_CONFIG_RW _IO(VST_IOC_MAGIC, VST_IOC_FIRST + 2)
diff --git a/include/linux/usb/wusb.h b/include/linux/usb/wusb.h
index 429c631d2aad..63ebdcc5dda6 100644
--- a/include/linux/usb/wusb.h
+++ b/include/linux/usb/wusb.h
@@ -74,7 +74,7 @@ enum {
74 * WUSB defines that CHIDs, CDIDs and CKs are a 16 byte string of 74 * WUSB defines that CHIDs, CDIDs and CKs are a 16 byte string of
75 * data. In order to avoid confusion and enforce types, we wrap it. 75 * data. In order to avoid confusion and enforce types, we wrap it.
76 * 76 *
77 * Make it packed, as we use it in some hw defintions. 77 * Make it packed, as we use it in some hw definitions.
78 */ 78 */
79struct wusb_ckhdid { 79struct wusb_ckhdid {
80 u8 data[16]; 80 u8 data[16];
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h
index 3d15fb9bc116..a4b947e470a5 100644
--- a/include/linux/usb_usual.h
+++ b/include/linux/usb_usual.h
@@ -56,7 +56,9 @@
56 US_FLAG(SANE_SENSE, 0x00008000) \ 56 US_FLAG(SANE_SENSE, 0x00008000) \
57 /* Sane Sense (> 18 bytes) */ \ 57 /* Sane Sense (> 18 bytes) */ \
58 US_FLAG(CAPACITY_OK, 0x00010000) \ 58 US_FLAG(CAPACITY_OK, 0x00010000) \
59 /* READ CAPACITY response is correct */ 59 /* READ CAPACITY response is correct */ \
60 US_FLAG(BAD_SENSE, 0x00020000) \
61 /* Bad Sense (never more than 18 bytes) */
60 62
61#define US_FLAG(name, value) US_FL_##name = value , 63#define US_FLAG(name, value) US_FL_##name = value ,
62enum { US_DO_ALL_FLAGS }; 64enum { US_DO_ALL_FLAGS };
diff --git a/include/linux/usbdevice_fs.h b/include/linux/usbdevice_fs.h
index b2a7d8ba6ee3..15591d2ea400 100644
--- a/include/linux/usbdevice_fs.h
+++ b/include/linux/usbdevice_fs.h
@@ -128,6 +128,29 @@ struct usbdevfs_hub_portinfo {
128#ifdef __KERNEL__ 128#ifdef __KERNEL__
129#ifdef CONFIG_COMPAT 129#ifdef CONFIG_COMPAT
130#include <linux/compat.h> 130#include <linux/compat.h>
131
132struct usbdevfs_ctrltransfer32 {
133 u8 bRequestType;
134 u8 bRequest;
135 u16 wValue;
136 u16 wIndex;
137 u16 wLength;
138 u32 timeout; /* in milliseconds */
139 compat_caddr_t data;
140};
141
142struct usbdevfs_bulktransfer32 {
143 compat_uint_t ep;
144 compat_uint_t len;
145 compat_uint_t timeout; /* in milliseconds */
146 compat_caddr_t data;
147};
148
149struct usbdevfs_disconnectsignal32 {
150 compat_int_t signr;
151 compat_caddr_t context;
152};
153
131struct usbdevfs_urb32 { 154struct usbdevfs_urb32 {
132 unsigned char type; 155 unsigned char type;
133 unsigned char endpoint; 156 unsigned char endpoint;
@@ -153,7 +176,9 @@ struct usbdevfs_ioctl32 {
153#endif /* __KERNEL__ */ 176#endif /* __KERNEL__ */
154 177
155#define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer) 178#define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer)
179#define USBDEVFS_CONTROL32 _IOWR('U', 0, struct usbdevfs_ctrltransfer32)
156#define USBDEVFS_BULK _IOWR('U', 2, struct usbdevfs_bulktransfer) 180#define USBDEVFS_BULK _IOWR('U', 2, struct usbdevfs_bulktransfer)
181#define USBDEVFS_BULK32 _IOWR('U', 2, struct usbdevfs_bulktransfer32)
157#define USBDEVFS_RESETEP _IOR('U', 3, unsigned int) 182#define USBDEVFS_RESETEP _IOR('U', 3, unsigned int)
158#define USBDEVFS_SETINTERFACE _IOR('U', 4, struct usbdevfs_setinterface) 183#define USBDEVFS_SETINTERFACE _IOR('U', 4, struct usbdevfs_setinterface)
159#define USBDEVFS_SETCONFIGURATION _IOR('U', 5, unsigned int) 184#define USBDEVFS_SETCONFIGURATION _IOR('U', 5, unsigned int)
@@ -166,6 +191,7 @@ struct usbdevfs_ioctl32 {
166#define USBDEVFS_REAPURBNDELAY _IOW('U', 13, void *) 191#define USBDEVFS_REAPURBNDELAY _IOW('U', 13, void *)
167#define USBDEVFS_REAPURBNDELAY32 _IOW('U', 13, __u32) 192#define USBDEVFS_REAPURBNDELAY32 _IOW('U', 13, __u32)
168#define USBDEVFS_DISCSIGNAL _IOR('U', 14, struct usbdevfs_disconnectsignal) 193#define USBDEVFS_DISCSIGNAL _IOR('U', 14, struct usbdevfs_disconnectsignal)
194#define USBDEVFS_DISCSIGNAL32 _IOR('U', 14, struct usbdevfs_disconnectsignal32)
169#define USBDEVFS_CLAIMINTERFACE _IOR('U', 15, unsigned int) 195#define USBDEVFS_CLAIMINTERFACE _IOR('U', 15, unsigned int)
170#define USBDEVFS_RELEASEINTERFACE _IOR('U', 16, unsigned int) 196#define USBDEVFS_RELEASEINTERFACE _IOR('U', 16, unsigned int)
171#define USBDEVFS_CONNECTINFO _IOW('U', 17, struct usbdevfs_connectinfo) 197#define USBDEVFS_CONNECTINFO _IOW('U', 17, struct usbdevfs_connectinfo)
diff --git a/include/linux/user-return-notifier.h b/include/linux/user-return-notifier.h
new file mode 100644
index 000000000000..9c4a445bb43c
--- /dev/null
+++ b/include/linux/user-return-notifier.h
@@ -0,0 +1,49 @@
1#ifndef _LINUX_USER_RETURN_NOTIFIER_H
2#define _LINUX_USER_RETURN_NOTIFIER_H
3
4#ifdef CONFIG_USER_RETURN_NOTIFIER
5
6#include <linux/list.h>
7#include <linux/sched.h>
8
9struct user_return_notifier {
10 void (*on_user_return)(struct user_return_notifier *urn);
11 struct hlist_node link;
12};
13
14
15void user_return_notifier_register(struct user_return_notifier *urn);
16void user_return_notifier_unregister(struct user_return_notifier *urn);
17
18static inline void propagate_user_return_notify(struct task_struct *prev,
19 struct task_struct *next)
20{
21 if (test_tsk_thread_flag(prev, TIF_USER_RETURN_NOTIFY)) {
22 clear_tsk_thread_flag(prev, TIF_USER_RETURN_NOTIFY);
23 set_tsk_thread_flag(next, TIF_USER_RETURN_NOTIFY);
24 }
25}
26
27void fire_user_return_notifiers(void);
28
29static inline void clear_user_return_notifier(struct task_struct *p)
30{
31 clear_tsk_thread_flag(p, TIF_USER_RETURN_NOTIFY);
32}
33
34#else
35
36struct user_return_notifier {};
37
38static inline void propagate_user_return_notify(struct task_struct *prev,
39 struct task_struct *next)
40{
41}
42
43static inline void fire_user_return_notifiers(void) {}
44
45static inline void clear_user_return_notifier(struct task_struct *p) {}
46
47#endif
48
49#endif
diff --git a/include/linux/vermagic.h b/include/linux/vermagic.h
index 79b9837d9ca0..cf97b5b9d1fe 100644
--- a/include/linux/vermagic.h
+++ b/include/linux/vermagic.h
@@ -1,4 +1,4 @@
1#include <linux/utsrelease.h> 1#include <generated/utsrelease.h>
2#include <linux/module.h> 2#include <linux/module.h>
3 3
4/* Simply sanity version stamp for modules. */ 4/* Simply sanity version stamp for modules. */
diff --git a/include/linux/vga_switcheroo.h b/include/linux/vga_switcheroo.h
new file mode 100644
index 000000000000..ae9ab13b963d
--- /dev/null
+++ b/include/linux/vga_switcheroo.h
@@ -0,0 +1,57 @@
1/*
2 * Copyright (c) 2010 Red Hat Inc.
3 * Author : Dave Airlie <airlied@redhat.com>
4 *
5 * Licensed under GPLv2
6 *
7 * vga_switcheroo.h - Support for laptop with dual GPU using one set of outputs
8 */
9
10#include <linux/fb.h>
11
12enum vga_switcheroo_state {
13 VGA_SWITCHEROO_OFF,
14 VGA_SWITCHEROO_ON,
15};
16
17enum vga_switcheroo_client_id {
18 VGA_SWITCHEROO_IGD,
19 VGA_SWITCHEROO_DIS,
20 VGA_SWITCHEROO_MAX_CLIENTS,
21};
22
23struct vga_switcheroo_handler {
24 int (*switchto)(enum vga_switcheroo_client_id id);
25 int (*power_state)(enum vga_switcheroo_client_id id,
26 enum vga_switcheroo_state state);
27 int (*init)(void);
28 int (*get_client_id)(struct pci_dev *pdev);
29};
30
31
32#if defined(CONFIG_VGA_SWITCHEROO)
33void vga_switcheroo_unregister_client(struct pci_dev *dev);
34int vga_switcheroo_register_client(struct pci_dev *dev,
35 void (*set_gpu_state)(struct pci_dev *dev, enum vga_switcheroo_state),
36 bool (*can_switch)(struct pci_dev *dev));
37
38void vga_switcheroo_client_fb_set(struct pci_dev *dev,
39 struct fb_info *info);
40
41int vga_switcheroo_register_handler(struct vga_switcheroo_handler *handler);
42void vga_switcheroo_unregister_handler(void);
43
44int vga_switcheroo_process_delayed_switch(void);
45
46#else
47
48static inline void vga_switcheroo_unregister_client(struct pci_dev *dev) {}
49static inline int vga_switcheroo_register_client(struct pci_dev *dev,
50 void (*set_gpu_state)(struct pci_dev *dev, enum vga_switcheroo_state),
51 bool (*can_switch)(struct pci_dev *dev)) { return 0; }
52static inline void vga_switcheroo_client_fb_set(struct pci_dev *dev, struct fb_info *info) {}
53static inline int vga_switcheroo_register_handler(struct vga_switcheroo_handler *handler) { return 0; }
54static inline void vga_switcheroo_unregister_handler(void) {}
55static inline int vga_switcheroo_process_delayed_switch(void) { return 0; }
56
57#endif
diff --git a/include/linux/vhost.h b/include/linux/vhost.h
new file mode 100644
index 000000000000..e847f1e30756
--- /dev/null
+++ b/include/linux/vhost.h
@@ -0,0 +1,130 @@
1#ifndef _LINUX_VHOST_H
2#define _LINUX_VHOST_H
3/* Userspace interface for in-kernel virtio accelerators. */
4
5/* vhost is used to reduce the number of system calls involved in virtio.
6 *
7 * Existing virtio net code is used in the guest without modification.
8 *
9 * This header includes interface used by userspace hypervisor for
10 * device configuration.
11 */
12
13#include <linux/types.h>
14#include <linux/compiler.h>
15#include <linux/ioctl.h>
16#include <linux/virtio_config.h>
17#include <linux/virtio_ring.h>
18
19struct vhost_vring_state {
20 unsigned int index;
21 unsigned int num;
22};
23
24struct vhost_vring_file {
25 unsigned int index;
26 int fd; /* Pass -1 to unbind from file. */
27
28};
29
30struct vhost_vring_addr {
31 unsigned int index;
32 /* Option flags. */
33 unsigned int flags;
34 /* Flag values: */
35 /* Whether log address is valid. If set enables logging. */
36#define VHOST_VRING_F_LOG 0
37
38 /* Start of array of descriptors (virtually contiguous) */
39 __u64 desc_user_addr;
40 /* Used structure address. Must be 32 bit aligned */
41 __u64 used_user_addr;
42 /* Available structure address. Must be 16 bit aligned */
43 __u64 avail_user_addr;
44 /* Logging support. */
45 /* Log writes to used structure, at offset calculated from specified
46 * address. Address must be 32 bit aligned. */
47 __u64 log_guest_addr;
48};
49
50struct vhost_memory_region {
51 __u64 guest_phys_addr;
52 __u64 memory_size; /* bytes */
53 __u64 userspace_addr;
54 __u64 flags_padding; /* No flags are currently specified. */
55};
56
57/* All region addresses and sizes must be 4K aligned. */
58#define VHOST_PAGE_SIZE 0x1000
59
60struct vhost_memory {
61 __u32 nregions;
62 __u32 padding;
63 struct vhost_memory_region regions[0];
64};
65
66/* ioctls */
67
68#define VHOST_VIRTIO 0xAF
69
70/* Features bitmask for forward compatibility. Transport bits are used for
71 * vhost specific features. */
72#define VHOST_GET_FEATURES _IOR(VHOST_VIRTIO, 0x00, __u64)
73#define VHOST_SET_FEATURES _IOW(VHOST_VIRTIO, 0x00, __u64)
74
75/* Set current process as the (exclusive) owner of this file descriptor. This
76 * must be called before any other vhost command. Further calls to
77 * VHOST_OWNER_SET fail until VHOST_OWNER_RESET is called. */
78#define VHOST_SET_OWNER _IO(VHOST_VIRTIO, 0x01)
79/* Give up ownership, and reset the device to default values.
80 * Allows subsequent call to VHOST_OWNER_SET to succeed. */
81#define VHOST_RESET_OWNER _IO(VHOST_VIRTIO, 0x02)
82
83/* Set up/modify memory layout */
84#define VHOST_SET_MEM_TABLE _IOW(VHOST_VIRTIO, 0x03, struct vhost_memory)
85
86/* Write logging setup. */
87/* Memory writes can optionally be logged by setting bit at an offset
88 * (calculated from the physical address) from specified log base.
89 * The bit is set using an atomic 32 bit operation. */
90/* Set base address for logging. */
91#define VHOST_SET_LOG_BASE _IOW(VHOST_VIRTIO, 0x04, __u64)
92/* Specify an eventfd file descriptor to signal on log write. */
93#define VHOST_SET_LOG_FD _IOW(VHOST_VIRTIO, 0x07, int)
94
95/* Ring setup. */
96/* Set number of descriptors in ring. This parameter can not
97 * be modified while ring is running (bound to a device). */
98#define VHOST_SET_VRING_NUM _IOW(VHOST_VIRTIO, 0x10, struct vhost_vring_state)
99/* Set addresses for the ring. */
100#define VHOST_SET_VRING_ADDR _IOW(VHOST_VIRTIO, 0x11, struct vhost_vring_addr)
101/* Base value where queue looks for available descriptors */
102#define VHOST_SET_VRING_BASE _IOW(VHOST_VIRTIO, 0x12, struct vhost_vring_state)
103/* Get accessor: reads index, writes value in num */
104#define VHOST_GET_VRING_BASE _IOWR(VHOST_VIRTIO, 0x12, struct vhost_vring_state)
105
106/* The following ioctls use eventfd file descriptors to signal and poll
107 * for events. */
108
109/* Set eventfd to poll for added buffers */
110#define VHOST_SET_VRING_KICK _IOW(VHOST_VIRTIO, 0x20, struct vhost_vring_file)
111/* Set eventfd to signal when buffers have beed used */
112#define VHOST_SET_VRING_CALL _IOW(VHOST_VIRTIO, 0x21, struct vhost_vring_file)
113/* Set eventfd to signal an error */
114#define VHOST_SET_VRING_ERR _IOW(VHOST_VIRTIO, 0x22, struct vhost_vring_file)
115
116/* VHOST_NET specific defines */
117
118/* Attach virtio net ring to a raw socket, or tap device.
119 * The socket must be already bound to an ethernet device, this device will be
120 * used for transmit. Pass fd -1 to unbind from the socket and the transmit
121 * device. This can be used to stop the ring (e.g. for migration). */
122#define VHOST_NET_SET_BACKEND _IOW(VHOST_VIRTIO, 0x30, struct vhost_vring_file)
123
124/* Feature bits */
125/* Log all write descriptors. Can be changed while device is active. */
126#define VHOST_F_LOG_ALL 26
127/* vhost-net should add virtio_net_hdr for RX, and strip for TX packets. */
128#define VHOST_NET_F_VIRTIO_NET_HDR 27
129
130#endif
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
index b59e78c57161..3793d168b44d 100644
--- a/include/linux/videodev2.h
+++ b/include/linux/videodev2.h
@@ -294,6 +294,7 @@ struct v4l2_pix_format {
294 294
295/* Grey formats */ 295/* Grey formats */
296#define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ 296#define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */
297#define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */
297#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ 298#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */
298 299
299/* Palette formats */ 300/* Palette formats */
@@ -329,7 +330,11 @@ struct v4l2_pix_format {
329#define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */ 330#define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */
330#define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */ 331#define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */
331#define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */ 332#define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */
332#define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10bit raw bayer */ 333#define V4L2_PIX_FMT_SRGGB8 v4l2_fourcc('R', 'G', 'G', 'B') /* 8 RGRG.. GBGB.. */
334#define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10 BGBG.. GRGR.. */
335#define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10 GBGB.. RGRG.. */
336#define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10 GRGR.. BGBG.. */
337#define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10 RGRG.. GBGB.. */
333 /* 10bit raw bayer DPCM compressed to 8 bits */ 338 /* 10bit raw bayer DPCM compressed to 8 bits */
334#define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') 339#define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
335 /* 340 /*
@@ -345,6 +350,7 @@ struct v4l2_pix_format {
345#define V4L2_PIX_FMT_MPEG v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 */ 350#define V4L2_PIX_FMT_MPEG v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 */
346 351
347/* Vendor-specific formats */ 352/* Vendor-specific formats */
353#define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
348#define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */ 354#define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */
349#define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */ 355#define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */
350#define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */ 356#define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */
@@ -357,10 +363,12 @@ struct v4l2_pix_format {
357#define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */ 363#define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */
358#define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */ 364#define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */
359#define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */ 365#define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */
366#define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */
360#define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */ 367#define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */
361#define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ 368#define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
362#define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ 369#define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
363#define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ 370#define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
371#define V4L2_PIX_FMT_STV0680 v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */
364 372
365/* 373/*
366 * F O R M A T E N U M E R A T I O N 374 * F O R M A T E N U M E R A T I O N
@@ -490,7 +498,7 @@ struct v4l2_jpegcompression {
490 * you do, leave them untouched. 498 * you do, leave them untouched.
491 * Inluding less markers will make the 499 * Inluding less markers will make the
492 * resulting code smaller, but there will 500 * resulting code smaller, but there will
493 * be fewer aplications which can read it. 501 * be fewer applications which can read it.
494 * The presence of the APP and COM marker 502 * The presence of the APP and COM marker
495 * is influenced by APP_len and COM_len 503 * is influenced by APP_len and COM_len
496 * ONLY, not by this property! */ 504 * ONLY, not by this property! */
@@ -563,6 +571,7 @@ struct v4l2_framebuffer {
563#define V4L2_FBUF_CAP_LOCAL_ALPHA 0x0010 571#define V4L2_FBUF_CAP_LOCAL_ALPHA 0x0010
564#define V4L2_FBUF_CAP_GLOBAL_ALPHA 0x0020 572#define V4L2_FBUF_CAP_GLOBAL_ALPHA 0x0020
565#define V4L2_FBUF_CAP_LOCAL_INV_ALPHA 0x0040 573#define V4L2_FBUF_CAP_LOCAL_INV_ALPHA 0x0040
574#define V4L2_FBUF_CAP_SRC_CHROMAKEY 0x0080
566/* Flags for the 'flags' field. */ 575/* Flags for the 'flags' field. */
567#define V4L2_FBUF_FLAG_PRIMARY 0x0001 576#define V4L2_FBUF_FLAG_PRIMARY 0x0001
568#define V4L2_FBUF_FLAG_OVERLAY 0x0002 577#define V4L2_FBUF_FLAG_OVERLAY 0x0002
@@ -570,6 +579,7 @@ struct v4l2_framebuffer {
570#define V4L2_FBUF_FLAG_LOCAL_ALPHA 0x0008 579#define V4L2_FBUF_FLAG_LOCAL_ALPHA 0x0008
571#define V4L2_FBUF_FLAG_GLOBAL_ALPHA 0x0010 580#define V4L2_FBUF_FLAG_GLOBAL_ALPHA 0x0010
572#define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA 0x0020 581#define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA 0x0020
582#define V4L2_FBUF_FLAG_SRC_CHROMAKEY 0x0040
573 583
574struct v4l2_clip { 584struct v4l2_clip {
575 struct v4l2_rect c; 585 struct v4l2_rect c;
@@ -729,6 +739,99 @@ struct v4l2_standard {
729}; 739};
730 740
731/* 741/*
742 * V I D E O T I M I N G S D V P R E S E T
743 */
744struct v4l2_dv_preset {
745 __u32 preset;
746 __u32 reserved[4];
747};
748
749/*
750 * D V P R E S E T S E N U M E R A T I O N
751 */
752struct v4l2_dv_enum_preset {
753 __u32 index;
754 __u32 preset;
755 __u8 name[32]; /* Name of the preset timing */
756 __u32 width;
757 __u32 height;
758 __u32 reserved[4];
759};
760
761/*
762 * D V P R E S E T V A L U E S
763 */
764#define V4L2_DV_INVALID 0
765#define V4L2_DV_480P59_94 1 /* BT.1362 */
766#define V4L2_DV_576P50 2 /* BT.1362 */
767#define V4L2_DV_720P24 3 /* SMPTE 296M */
768#define V4L2_DV_720P25 4 /* SMPTE 296M */
769#define V4L2_DV_720P30 5 /* SMPTE 296M */
770#define V4L2_DV_720P50 6 /* SMPTE 296M */
771#define V4L2_DV_720P59_94 7 /* SMPTE 274M */
772#define V4L2_DV_720P60 8 /* SMPTE 274M/296M */
773#define V4L2_DV_1080I29_97 9 /* BT.1120/ SMPTE 274M */
774#define V4L2_DV_1080I30 10 /* BT.1120/ SMPTE 274M */
775#define V4L2_DV_1080I25 11 /* BT.1120 */
776#define V4L2_DV_1080I50 12 /* SMPTE 296M */
777#define V4L2_DV_1080I60 13 /* SMPTE 296M */
778#define V4L2_DV_1080P24 14 /* SMPTE 296M */
779#define V4L2_DV_1080P25 15 /* SMPTE 296M */
780#define V4L2_DV_1080P30 16 /* SMPTE 296M */
781#define V4L2_DV_1080P50 17 /* BT.1120 */
782#define V4L2_DV_1080P60 18 /* BT.1120 */
783
784/*
785 * D V B T T I M I N G S
786 */
787
788/* BT.656/BT.1120 timing data */
789struct v4l2_bt_timings {
790 __u32 width; /* width in pixels */
791 __u32 height; /* height in lines */
792 __u32 interlaced; /* Interlaced or progressive */
793 __u32 polarities; /* Positive or negative polarity */
794 __u64 pixelclock; /* Pixel clock in HZ. Ex. 74.25MHz->74250000 */
795 __u32 hfrontporch; /* Horizpontal front porch in pixels */
796 __u32 hsync; /* Horizontal Sync length in pixels */
797 __u32 hbackporch; /* Horizontal back porch in pixels */
798 __u32 vfrontporch; /* Vertical front porch in pixels */
799 __u32 vsync; /* Vertical Sync length in lines */
800 __u32 vbackporch; /* Vertical back porch in lines */
801 __u32 il_vfrontporch; /* Vertical front porch for bottom field of
802 * interlaced field formats
803 */
804 __u32 il_vsync; /* Vertical sync length for bottom field of
805 * interlaced field formats
806 */
807 __u32 il_vbackporch; /* Vertical back porch for bottom field of
808 * interlaced field formats
809 */
810 __u32 reserved[16];
811} __attribute__ ((packed));
812
813/* Interlaced or progressive format */
814#define V4L2_DV_PROGRESSIVE 0
815#define V4L2_DV_INTERLACED 1
816
817/* Polarities. If bit is not set, it is assumed to be negative polarity */
818#define V4L2_DV_VSYNC_POS_POL 0x00000001
819#define V4L2_DV_HSYNC_POS_POL 0x00000002
820
821
822/* DV timings */
823struct v4l2_dv_timings {
824 __u32 type;
825 union {
826 struct v4l2_bt_timings bt;
827 __u32 reserved[32];
828 };
829} __attribute__ ((packed));
830
831/* Values for the type field */
832#define V4L2_DV_BT_656_1120 0 /* BT.656/1120 timing type */
833
834/*
732 * V I D E O I N P U T S 835 * V I D E O I N P U T S
733 */ 836 */
734struct v4l2_input { 837struct v4l2_input {
@@ -739,7 +842,8 @@ struct v4l2_input {
739 __u32 tuner; /* Associated tuner */ 842 __u32 tuner; /* Associated tuner */
740 v4l2_std_id std; 843 v4l2_std_id std;
741 __u32 status; 844 __u32 status;
742 __u32 reserved[4]; 845 __u32 capabilities;
846 __u32 reserved[3];
743}; 847};
744 848
745/* Values for the 'type' field */ 849/* Values for the 'type' field */
@@ -770,6 +874,11 @@ struct v4l2_input {
770#define V4L2_IN_ST_NO_ACCESS 0x02000000 /* Conditional access denied */ 874#define V4L2_IN_ST_NO_ACCESS 0x02000000 /* Conditional access denied */
771#define V4L2_IN_ST_VTR 0x04000000 /* VTR time constant */ 875#define V4L2_IN_ST_VTR 0x04000000 /* VTR time constant */
772 876
877/* capabilities flags */
878#define V4L2_IN_CAP_PRESETS 0x00000001 /* Supports S_DV_PRESET */
879#define V4L2_IN_CAP_CUSTOM_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */
880#define V4L2_IN_CAP_STD 0x00000004 /* Supports S_STD */
881
773/* 882/*
774 * V I D E O O U T P U T S 883 * V I D E O O U T P U T S
775 */ 884 */
@@ -780,13 +889,19 @@ struct v4l2_output {
780 __u32 audioset; /* Associated audios (bitfield) */ 889 __u32 audioset; /* Associated audios (bitfield) */
781 __u32 modulator; /* Associated modulator */ 890 __u32 modulator; /* Associated modulator */
782 v4l2_std_id std; 891 v4l2_std_id std;
783 __u32 reserved[4]; 892 __u32 capabilities;
893 __u32 reserved[3];
784}; 894};
785/* Values for the 'type' field */ 895/* Values for the 'type' field */
786#define V4L2_OUTPUT_TYPE_MODULATOR 1 896#define V4L2_OUTPUT_TYPE_MODULATOR 1
787#define V4L2_OUTPUT_TYPE_ANALOG 2 897#define V4L2_OUTPUT_TYPE_ANALOG 2
788#define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY 3 898#define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY 3
789 899
900/* capabilities flags */
901#define V4L2_OUT_CAP_PRESETS 0x00000001 /* Supports S_DV_PRESET */
902#define V4L2_OUT_CAP_CUSTOM_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */
903#define V4L2_OUT_CAP_STD 0x00000004 /* Supports S_STD */
904
790/* 905/*
791 * C O N T R O L S 906 * C O N T R O L S
792 */ 907 */
@@ -912,8 +1027,10 @@ enum v4l2_colorfx {
912#define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32) 1027#define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32)
913#define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33) 1028#define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33)
914 1029
1030#define V4L2_CID_ROTATE (V4L2_CID_BASE+34)
1031#define V4L2_CID_BG_COLOR (V4L2_CID_BASE+35)
915/* last CID + 1 */ 1032/* last CID + 1 */
916#define V4L2_CID_LASTP1 (V4L2_CID_BASE+34) 1033#define V4L2_CID_LASTP1 (V4L2_CID_BASE+36)
917 1034
918/* MPEG-class control IDs defined by V4L2 */ 1035/* MPEG-class control IDs defined by V4L2 */
919#define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) 1036#define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900)
@@ -1619,6 +1736,13 @@ struct v4l2_dbg_chip_ident {
1619#endif 1736#endif
1620 1737
1621#define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) 1738#define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek)
1739#define VIDIOC_ENUM_DV_PRESETS _IOWR('V', 83, struct v4l2_dv_enum_preset)
1740#define VIDIOC_S_DV_PRESET _IOWR('V', 84, struct v4l2_dv_preset)
1741#define VIDIOC_G_DV_PRESET _IOWR('V', 85, struct v4l2_dv_preset)
1742#define VIDIOC_QUERY_DV_PRESET _IOR('V', 86, struct v4l2_dv_preset)
1743#define VIDIOC_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings)
1744#define VIDIOC_G_DV_TIMINGS _IOWR('V', 88, struct v4l2_dv_timings)
1745
1622/* Reminder: when adding new ioctls please add support for them to 1746/* Reminder: when adding new ioctls please add support for them to
1623 drivers/media/video/v4l2-compat-ioctl32.c as well! */ 1747 drivers/media/video/v4l2-compat-ioctl32.c as well! */
1624 1748
diff --git a/include/linux/virtio.h b/include/linux/virtio.h
index 057a2e010758..40d1709bdbf4 100644
--- a/include/linux/virtio.h
+++ b/include/linux/virtio.h
@@ -51,6 +51,9 @@ struct virtqueue {
51 * This re-enables callbacks; it returns "false" if there are pending 51 * This re-enables callbacks; it returns "false" if there are pending
52 * buffers in the queue, to detect a possible race between the driver 52 * buffers in the queue, to detect a possible race between the driver
53 * checking for more work, and enabling callbacks. 53 * checking for more work, and enabling callbacks.
54 * @detach_unused_buf: detach first unused buffer
55 * vq: the struct virtqueue we're talking about.
56 * Returns NULL or the "data" token handed to add_buf
54 * 57 *
55 * Locking rules are straightforward: the driver is responsible for 58 * Locking rules are straightforward: the driver is responsible for
56 * locking. No two operations may be invoked simultaneously, with the exception 59 * locking. No two operations may be invoked simultaneously, with the exception
@@ -71,6 +74,7 @@ struct virtqueue_ops {
71 74
72 void (*disable_cb)(struct virtqueue *vq); 75 void (*disable_cb)(struct virtqueue *vq);
73 bool (*enable_cb)(struct virtqueue *vq); 76 bool (*enable_cb)(struct virtqueue *vq);
77 void *(*detach_unused_buf)(struct virtqueue *vq);
74}; 78};
75 79
76/** 80/**
@@ -94,6 +98,7 @@ struct virtio_device {
94 void *priv; 98 void *priv;
95}; 99};
96 100
101#define dev_to_virtio(dev) container_of(dev, struct virtio_device, dev)
97int register_virtio_device(struct virtio_device *dev); 102int register_virtio_device(struct virtio_device *dev);
98void unregister_virtio_device(struct virtio_device *dev); 103void unregister_virtio_device(struct virtio_device *dev);
99 104
diff --git a/include/linux/virtio_9p.h b/include/linux/virtio_9p.h
index 095e10d148b4..5cf11765146b 100644
--- a/include/linux/virtio_9p.h
+++ b/include/linux/virtio_9p.h
@@ -5,7 +5,16 @@
5#include <linux/virtio_ids.h> 5#include <linux/virtio_ids.h>
6#include <linux/virtio_config.h> 6#include <linux/virtio_config.h>
7 7
8/* Maximum number of virtio channels per partition (1 for now) */ 8/* The feature bitmap for virtio 9P */
9#define MAX_9P_CHAN 1 9
10/* The mount point is specified in a config variable */
11#define VIRTIO_9P_MOUNT_TAG 0
12
13struct virtio_9p_config {
14 /* length of the tag name */
15 __u16 tag_len;
16 /* non-NULL terminated tag name */
17 __u8 tag[0];
18} __attribute__((packed));
10 19
11#endif /* _LINUX_VIRTIO_9P_H */ 20#endif /* _LINUX_VIRTIO_9P_H */
diff --git a/include/linux/virtio_balloon.h b/include/linux/virtio_balloon.h
index 1418f048cb34..a50ecd1b81a2 100644
--- a/include/linux/virtio_balloon.h
+++ b/include/linux/virtio_balloon.h
@@ -7,6 +7,7 @@
7 7
8/* The feature bitmap for virtio balloon */ 8/* The feature bitmap for virtio balloon */
9#define VIRTIO_BALLOON_F_MUST_TELL_HOST 0 /* Tell before reclaiming pages */ 9#define VIRTIO_BALLOON_F_MUST_TELL_HOST 0 /* Tell before reclaiming pages */
10#define VIRTIO_BALLOON_F_STATS_VQ 1 /* Memory Stats virtqueue */
10 11
11/* Size of a PFN in the balloon interface. */ 12/* Size of a PFN in the balloon interface. */
12#define VIRTIO_BALLOON_PFN_SHIFT 12 13#define VIRTIO_BALLOON_PFN_SHIFT 12
@@ -18,4 +19,18 @@ struct virtio_balloon_config
18 /* Number of pages we've actually got in balloon. */ 19 /* Number of pages we've actually got in balloon. */
19 __le32 actual; 20 __le32 actual;
20}; 21};
22
23#define VIRTIO_BALLOON_S_SWAP_IN 0 /* Amount of memory swapped in */
24#define VIRTIO_BALLOON_S_SWAP_OUT 1 /* Amount of memory swapped out */
25#define VIRTIO_BALLOON_S_MAJFLT 2 /* Number of major faults */
26#define VIRTIO_BALLOON_S_MINFLT 3 /* Number of minor faults */
27#define VIRTIO_BALLOON_S_MEMFREE 4 /* Total amount of free memory */
28#define VIRTIO_BALLOON_S_MEMTOT 5 /* Total amount of memory */
29#define VIRTIO_BALLOON_S_NR 6
30
31struct virtio_balloon_stat {
32 u16 tag;
33 u64 val;
34} __attribute__((packed));
35
21#endif /* _LINUX_VIRTIO_BALLOON_H */ 36#endif /* _LINUX_VIRTIO_BALLOON_H */
diff --git a/include/linux/virtio_blk.h b/include/linux/virtio_blk.h
index fd294c56d571..e52029e98919 100644
--- a/include/linux/virtio_blk.h
+++ b/include/linux/virtio_blk.h
@@ -15,6 +15,7 @@
15#define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/ 15#define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/
16#define VIRTIO_BLK_F_SCSI 7 /* Supports scsi command passthru */ 16#define VIRTIO_BLK_F_SCSI 7 /* Supports scsi command passthru */
17#define VIRTIO_BLK_F_FLUSH 9 /* Cache flush command support */ 17#define VIRTIO_BLK_F_FLUSH 9 /* Cache flush command support */
18#define VIRTIO_BLK_F_TOPOLOGY 10 /* Topology information is available */
18 19
19struct virtio_blk_config { 20struct virtio_blk_config {
20 /* The capacity (in 512-byte sectors). */ 21 /* The capacity (in 512-byte sectors). */
@@ -29,8 +30,20 @@ struct virtio_blk_config {
29 __u8 heads; 30 __u8 heads;
30 __u8 sectors; 31 __u8 sectors;
31 } geometry; 32 } geometry;
33
32 /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */ 34 /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */
33 __u32 blk_size; 35 __u32 blk_size;
36
37 /* the next 4 entries are guarded by VIRTIO_BLK_F_TOPOLOGY */
38 /* exponent for physical block per logical block. */
39 __u8 physical_block_exp;
40 /* alignment offset in logical blocks. */
41 __u8 alignment_offset;
42 /* minimum I/O size without performance penalty in logical blocks. */
43 __u16 min_io_size;
44 /* optimal sustained I/O size in logical blocks. */
45 __u32 opt_io_size;
46
34} __attribute__((packed)); 47} __attribute__((packed));
35 48
36/* 49/*
diff --git a/include/linux/virtio_console.h b/include/linux/virtio_console.h
index fe885174cc1f..92228a8fbcbc 100644
--- a/include/linux/virtio_console.h
+++ b/include/linux/virtio_console.h
@@ -3,8 +3,12 @@
3#include <linux/types.h> 3#include <linux/types.h>
4#include <linux/virtio_ids.h> 4#include <linux/virtio_ids.h>
5#include <linux/virtio_config.h> 5#include <linux/virtio_config.h>
6/* This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so 6/*
7 * anyone can use the definitions to implement compatible drivers/servers. */ 7 * This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so
8 * anyone can use the definitions to implement compatible drivers/servers.
9 *
10 * Copyright (C) Red Hat, Inc., 2009, 2010
11 */
8 12
9/* Feature bits */ 13/* Feature bits */
10#define VIRTIO_CONSOLE_F_SIZE 0 /* Does host provide console size? */ 14#define VIRTIO_CONSOLE_F_SIZE 0 /* Does host provide console size? */
@@ -16,7 +20,6 @@ struct virtio_console_config {
16 __u16 rows; 20 __u16 rows;
17} __attribute__((packed)); 21} __attribute__((packed));
18 22
19
20#ifdef __KERNEL__ 23#ifdef __KERNEL__
21int __init virtio_cons_early_init(int (*put_chars)(u32, const char *, int)); 24int __init virtio_cons_early_init(int (*put_chars)(u32, const char *, int));
22#endif /* __KERNEL__ */ 25#endif /* __KERNEL__ */
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
index 2d0f222388a8..117f0dd8ad03 100644
--- a/include/linux/vmstat.h
+++ b/include/linux/vmstat.h
@@ -40,6 +40,8 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
40 PGSCAN_ZONE_RECLAIM_FAILED, 40 PGSCAN_ZONE_RECLAIM_FAILED,
41#endif 41#endif
42 PGINODESTEAL, SLABS_SCANNED, KSWAPD_STEAL, KSWAPD_INODESTEAL, 42 PGINODESTEAL, SLABS_SCANNED, KSWAPD_STEAL, KSWAPD_INODESTEAL,
43 KSWAPD_LOW_WMARK_HIT_QUICKLY, KSWAPD_HIGH_WMARK_HIT_QUICKLY,
44 KSWAPD_SKIP_CONGESTION_WAIT,
43 PAGEOUTRUN, ALLOCSTALL, PGROTATED, 45 PAGEOUTRUN, ALLOCSTALL, PGROTATED,
44#ifdef CONFIG_HUGETLB_PAGE 46#ifdef CONFIG_HUGETLB_PAGE
45 HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL, 47 HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL,
@@ -76,24 +78,22 @@ DECLARE_PER_CPU(struct vm_event_state, vm_event_states);
76 78
77static inline void __count_vm_event(enum vm_event_item item) 79static inline void __count_vm_event(enum vm_event_item item)
78{ 80{
79 __get_cpu_var(vm_event_states).event[item]++; 81 __this_cpu_inc(vm_event_states.event[item]);
80} 82}
81 83
82static inline void count_vm_event(enum vm_event_item item) 84static inline void count_vm_event(enum vm_event_item item)
83{ 85{
84 get_cpu_var(vm_event_states).event[item]++; 86 this_cpu_inc(vm_event_states.event[item]);
85 put_cpu();
86} 87}
87 88
88static inline void __count_vm_events(enum vm_event_item item, long delta) 89static inline void __count_vm_events(enum vm_event_item item, long delta)
89{ 90{
90 __get_cpu_var(vm_event_states).event[item] += delta; 91 __this_cpu_add(vm_event_states.event[item], delta);
91} 92}
92 93
93static inline void count_vm_events(enum vm_event_item item, long delta) 94static inline void count_vm_events(enum vm_event_item item, long delta)
94{ 95{
95 get_cpu_var(vm_event_states).event[item] += delta; 96 this_cpu_add(vm_event_states.event[item], delta);
96 put_cpu();
97} 97}
98 98
99extern void all_vm_events(unsigned long *); 99extern void all_vm_events(unsigned long *);
diff --git a/include/linux/vt.h b/include/linux/vt.h
index 7ffa11f06232..d5dd0bc408fd 100644
--- a/include/linux/vt.h
+++ b/include/linux/vt.h
@@ -84,4 +84,23 @@ struct vt_setactivate {
84 84
85#define VT_SETACTIVATE 0x560F /* Activate and set the mode of a console */ 85#define VT_SETACTIVATE 0x560F /* Activate and set the mode of a console */
86 86
87#ifdef __KERNEL__
88
89#ifdef CONFIG_VT_CONSOLE
90
91extern int vt_kmsg_redirect(int new);
92
93#else
94
95static inline int vt_kmsg_redirect(int new)
96{
97 return 0;
98}
99
100#endif
101
102#endif /* __KERNEL__ */
103
104#define vt_get_kmsg_redirect() vt_kmsg_redirect(-1)
105
87#endif /* _LINUX_VT_H */ 106#endif /* _LINUX_VT_H */
diff --git a/include/linux/vt_kern.h b/include/linux/vt_kern.h
index c0c4e1103a73..7f56db4a79f0 100644
--- a/include/linux/vt_kern.h
+++ b/include/linux/vt_kern.h
@@ -110,6 +110,7 @@ extern char con_buf[CON_BUF_SIZE];
110extern struct mutex con_buf_mtx; 110extern struct mutex con_buf_mtx;
111extern char vt_dont_switch; 111extern char vt_dont_switch;
112extern int default_utf8; 112extern int default_utf8;
113extern int global_cursor_default;
113 114
114struct vt_spawn_console { 115struct vt_spawn_console {
115 spinlock_t lock; 116 spinlock_t lock;
@@ -130,4 +131,6 @@ struct vt_notifier_param {
130extern int register_vt_notifier(struct notifier_block *nb); 131extern int register_vt_notifier(struct notifier_block *nb);
131extern int unregister_vt_notifier(struct notifier_block *nb); 132extern int unregister_vt_notifier(struct notifier_block *nb);
132 133
134extern void hide_boot_cursor(bool hide);
135
133#endif /* _VT_KERN_H */ 136#endif /* _VT_KERN_H */
diff --git a/include/linux/wimax/debug.h b/include/linux/wimax/debug.h
index c703e0340423..57031b4d12f2 100644
--- a/include/linux/wimax/debug.h
+++ b/include/linux/wimax/debug.h
@@ -155,6 +155,7 @@
155 155
156#include <linux/types.h> 156#include <linux/types.h>
157#include <linux/device.h> 157#include <linux/device.h>
158#include <linux/slab.h>
158 159
159 160
160/* Backend stuff */ 161/* Backend stuff */
@@ -450,4 +451,76 @@ do { \
450}) 451})
451 452
452 453
454static inline
455void d_submodule_set(struct d_level *d_level, size_t d_level_size,
456 const char *submodule, u8 level, const char *tag)
457{
458 struct d_level *itr, *top;
459 int index = -1;
460
461 for (itr = d_level, top = itr + d_level_size; itr < top; itr++) {
462 index++;
463 if (itr->name == NULL) {
464 printk(KERN_ERR "%s: itr->name NULL?? (%p, #%d)\n",
465 tag, itr, index);
466 continue;
467 }
468 if (!strcmp(itr->name, submodule)) {
469 itr->level = level;
470 return;
471 }
472 }
473 printk(KERN_ERR "%s: unknown submodule %s\n", tag, submodule);
474}
475
476
477/**
478 * d_parse_params - Parse a string with debug parameters from the
479 * command line
480 *
481 * @d_level: level structure (D_LEVEL)
482 * @d_level_size: number of items in the level structure
483 * (D_LEVEL_SIZE).
484 * @_params: string with the parameters; this is a space (not tab!)
485 * separated list of NAME:VALUE, where value is the debug level
486 * and NAME is the name of the submodule.
487 * @tag: string for error messages (example: MODULE.ARGNAME).
488 */
489static inline
490void d_parse_params(struct d_level *d_level, size_t d_level_size,
491 const char *_params, const char *tag)
492{
493 char submodule[130], *params, *params_orig, *token, *colon;
494 unsigned level, tokens;
495
496 if (_params == NULL)
497 return;
498 params_orig = kstrdup(_params, GFP_KERNEL);
499 params = params_orig;
500 while (1) {
501 token = strsep(&params, " ");
502 if (token == NULL)
503 break;
504 if (*token == '\0') /* eat joint spaces */
505 continue;
506 /* kernel's sscanf %s eats until whitespace, so we
507 * replace : by \n so it doesn't get eaten later by
508 * strsep */
509 colon = strchr(token, ':');
510 if (colon != NULL)
511 *colon = '\n';
512 tokens = sscanf(token, "%s\n%u", submodule, &level);
513 if (colon != NULL)
514 *colon = ':'; /* set back, for error messages */
515 if (tokens == 2)
516 d_submodule_set(d_level, d_level_size,
517 submodule, level, tag);
518 else
519 printk(KERN_ERR "%s: can't parse '%s' as a "
520 "SUBMODULE:LEVEL (%d tokens)\n",
521 tag, token, tokens);
522 }
523 kfree(params_orig);
524}
525
453#endif /* #ifndef __debug__h__ */ 526#endif /* #ifndef __debug__h__ */
diff --git a/include/linux/wimax/i2400m.h b/include/linux/wimax/i2400m.h
index 433693ef2bb0..62d356153565 100644
--- a/include/linux/wimax/i2400m.h
+++ b/include/linux/wimax/i2400m.h
@@ -138,7 +138,7 @@ struct i2400m_bcf_hdr {
138 __le32 module_id; 138 __le32 module_id;
139 __le32 module_vendor; 139 __le32 module_vendor;
140 __le32 date; /* BCD YYYMMDD */ 140 __le32 date; /* BCD YYYMMDD */
141 __le32 size; 141 __le32 size; /* in dwords */
142 __le32 key_size; /* in dwords */ 142 __le32 key_size; /* in dwords */
143 __le32 modulus_size; /* in dwords */ 143 __le32 modulus_size; /* in dwords */
144 __le32 exponent_size; /* in dwords */ 144 __le32 exponent_size; /* in dwords */
@@ -168,16 +168,6 @@ enum i2400m_brh {
168}; 168};
169 169
170 170
171/* Constants for bcf->module_id */
172enum i2400m_bcf_mod_id {
173 /* Firmware file carries its own pokes -- pokes are a set of
174 * magical values that have to be written in certain memory
175 * addresses to get the device up and ready for firmware
176 * download when it is in non-signed boot mode. */
177 I2400M_BCF_MOD_ID_POKES = 0x000000001,
178};
179
180
181/** 171/**
182 * i2400m_bootrom_header - Header for a boot-mode command 172 * i2400m_bootrom_header - Header for a boot-mode command
183 * 173 *
@@ -276,6 +266,7 @@ enum {
276 I2400M_WARM_RESET_BARKER = 0x50f750f7, 266 I2400M_WARM_RESET_BARKER = 0x50f750f7,
277 I2400M_NBOOT_BARKER = 0xdeadbeef, 267 I2400M_NBOOT_BARKER = 0xdeadbeef,
278 I2400M_SBOOT_BARKER = 0x0ff1c1a1, 268 I2400M_SBOOT_BARKER = 0x0ff1c1a1,
269 I2400M_SBOOT_BARKER_6050 = 0x80000001,
279 I2400M_ACK_BARKER = 0xfeedbabe, 270 I2400M_ACK_BARKER = 0xfeedbabe,
280 I2400M_D2H_MSG_BARKER = 0xbeefbabe, 271 I2400M_D2H_MSG_BARKER = 0xbeefbabe,
281}; 272};
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
index cf24c20de9e4..9466e860d8c2 100644
--- a/include/linux/workqueue.h
+++ b/include/linux/workqueue.h
@@ -25,6 +25,7 @@ typedef void (*work_func_t)(struct work_struct *work);
25struct work_struct { 25struct work_struct {
26 atomic_long_t data; 26 atomic_long_t data;
27#define WORK_STRUCT_PENDING 0 /* T if work item pending execution */ 27#define WORK_STRUCT_PENDING 0 /* T if work item pending execution */
28#define WORK_STRUCT_STATIC 1 /* static initializer (debugobjects) */
28#define WORK_STRUCT_FLAG_MASK (3UL) 29#define WORK_STRUCT_FLAG_MASK (3UL)
29#define WORK_STRUCT_WQ_DATA_MASK (~WORK_STRUCT_FLAG_MASK) 30#define WORK_STRUCT_WQ_DATA_MASK (~WORK_STRUCT_FLAG_MASK)
30 struct list_head entry; 31 struct list_head entry;
@@ -35,6 +36,7 @@ struct work_struct {
35}; 36};
36 37
37#define WORK_DATA_INIT() ATOMIC_LONG_INIT(0) 38#define WORK_DATA_INIT() ATOMIC_LONG_INIT(0)
39#define WORK_DATA_STATIC_INIT() ATOMIC_LONG_INIT(2)
38 40
39struct delayed_work { 41struct delayed_work {
40 struct work_struct work; 42 struct work_struct work;
@@ -63,7 +65,7 @@ struct execute_work {
63#endif 65#endif
64 66
65#define __WORK_INITIALIZER(n, f) { \ 67#define __WORK_INITIALIZER(n, f) { \
66 .data = WORK_DATA_INIT(), \ 68 .data = WORK_DATA_STATIC_INIT(), \
67 .entry = { &(n).entry, &(n).entry }, \ 69 .entry = { &(n).entry, &(n).entry }, \
68 .func = (f), \ 70 .func = (f), \
69 __WORK_INIT_LOCKDEP_MAP(#n, &(n)) \ 71 __WORK_INIT_LOCKDEP_MAP(#n, &(n)) \
@@ -91,6 +93,14 @@ struct execute_work {
91#define PREPARE_DELAYED_WORK(_work, _func) \ 93#define PREPARE_DELAYED_WORK(_work, _func) \
92 PREPARE_WORK(&(_work)->work, (_func)) 94 PREPARE_WORK(&(_work)->work, (_func))
93 95
96#ifdef CONFIG_DEBUG_OBJECTS_WORK
97extern void __init_work(struct work_struct *work, int onstack);
98extern void destroy_work_on_stack(struct work_struct *work);
99#else
100static inline void __init_work(struct work_struct *work, int onstack) { }
101static inline void destroy_work_on_stack(struct work_struct *work) { }
102#endif
103
94/* 104/*
95 * initialize all of a work item in one go 105 * initialize all of a work item in one go
96 * 106 *
@@ -99,24 +109,36 @@ struct execute_work {
99 * to generate better code. 109 * to generate better code.
100 */ 110 */
101#ifdef CONFIG_LOCKDEP 111#ifdef CONFIG_LOCKDEP
102#define INIT_WORK(_work, _func) \ 112#define __INIT_WORK(_work, _func, _onstack) \
103 do { \ 113 do { \
104 static struct lock_class_key __key; \ 114 static struct lock_class_key __key; \
105 \ 115 \
116 __init_work((_work), _onstack); \
106 (_work)->data = (atomic_long_t) WORK_DATA_INIT(); \ 117 (_work)->data = (atomic_long_t) WORK_DATA_INIT(); \
107 lockdep_init_map(&(_work)->lockdep_map, #_work, &__key, 0);\ 118 lockdep_init_map(&(_work)->lockdep_map, #_work, &__key, 0);\
108 INIT_LIST_HEAD(&(_work)->entry); \ 119 INIT_LIST_HEAD(&(_work)->entry); \
109 PREPARE_WORK((_work), (_func)); \ 120 PREPARE_WORK((_work), (_func)); \
110 } while (0) 121 } while (0)
111#else 122#else
112#define INIT_WORK(_work, _func) \ 123#define __INIT_WORK(_work, _func, _onstack) \
113 do { \ 124 do { \
125 __init_work((_work), _onstack); \
114 (_work)->data = (atomic_long_t) WORK_DATA_INIT(); \ 126 (_work)->data = (atomic_long_t) WORK_DATA_INIT(); \
115 INIT_LIST_HEAD(&(_work)->entry); \ 127 INIT_LIST_HEAD(&(_work)->entry); \
116 PREPARE_WORK((_work), (_func)); \ 128 PREPARE_WORK((_work), (_func)); \
117 } while (0) 129 } while (0)
118#endif 130#endif
119 131
132#define INIT_WORK(_work, _func) \
133 do { \
134 __INIT_WORK((_work), (_func), 0); \
135 } while (0)
136
137#define INIT_WORK_ON_STACK(_work, _func) \
138 do { \
139 __INIT_WORK((_work), (_func), 1); \
140 } while (0)
141
120#define INIT_DELAYED_WORK(_work, _func) \ 142#define INIT_DELAYED_WORK(_work, _func) \
121 do { \ 143 do { \
122 INIT_WORK(&(_work)->work, (_func)); \ 144 INIT_WORK(&(_work)->work, (_func)); \
@@ -125,22 +147,16 @@ struct execute_work {
125 147
126#define INIT_DELAYED_WORK_ON_STACK(_work, _func) \ 148#define INIT_DELAYED_WORK_ON_STACK(_work, _func) \
127 do { \ 149 do { \
128 INIT_WORK(&(_work)->work, (_func)); \ 150 INIT_WORK_ON_STACK(&(_work)->work, (_func)); \
129 init_timer_on_stack(&(_work)->timer); \ 151 init_timer_on_stack(&(_work)->timer); \
130 } while (0) 152 } while (0)
131 153
132#define INIT_DELAYED_WORK_DEFERRABLE(_work, _func) \ 154#define INIT_DELAYED_WORK_DEFERRABLE(_work, _func) \
133 do { \ 155 do { \
134 INIT_WORK(&(_work)->work, (_func)); \ 156 INIT_WORK(&(_work)->work, (_func)); \
135 init_timer_deferrable(&(_work)->timer); \ 157 init_timer_deferrable(&(_work)->timer); \
136 } while (0) 158 } while (0)
137 159
138#define INIT_DELAYED_WORK_ON_STACK(_work, _func) \
139 do { \
140 INIT_WORK(&(_work)->work, (_func)); \
141 init_timer_on_stack(&(_work)->timer); \
142 } while (0)
143
144/** 160/**
145 * work_pending - Find out whether a work item is currently pending 161 * work_pending - Find out whether a work item is currently pending
146 * @work: The work item in question 162 * @work: The work item in question
diff --git a/include/linux/writeback.h b/include/linux/writeback.h
index 66ebddcff664..36520ded3e06 100644
--- a/include/linux/writeback.h
+++ b/include/linux/writeback.h
@@ -34,6 +34,9 @@ struct writeback_control {
34 enum writeback_sync_modes sync_mode; 34 enum writeback_sync_modes sync_mode;
35 unsigned long *older_than_this; /* If !NULL, only write back inodes 35 unsigned long *older_than_this; /* If !NULL, only write back inodes
36 older than this */ 36 older than this */
37 unsigned long wb_start; /* Time writeback_inodes_wb was
38 called. This is needed to avoid
39 extra jobs and livelock */
37 long nr_to_write; /* Write this many pages, and decrement 40 long nr_to_write; /* Write this many pages, and decrement
38 this for each page written */ 41 this for each page written */
39 long pages_skipped; /* Pages which were not written */ 42 long pages_skipped; /* Pages which were not written */
@@ -49,6 +52,7 @@ struct writeback_control {
49 unsigned nonblocking:1; /* Don't get stuck on request queues */ 52 unsigned nonblocking:1; /* Don't get stuck on request queues */
50 unsigned encountered_congestion:1; /* An output: a queue is full */ 53 unsigned encountered_congestion:1; /* An output: a queue is full */
51 unsigned for_kupdate:1; /* A kupdate writeback */ 54 unsigned for_kupdate:1; /* A kupdate writeback */
55 unsigned for_background:1; /* A background writeback */
52 unsigned for_reclaim:1; /* Invoked from the page allocator */ 56 unsigned for_reclaim:1; /* Invoked from the page allocator */
53 unsigned range_cyclic:1; /* range_start is cyclic */ 57 unsigned range_cyclic:1; /* range_start is cyclic */
54 unsigned more_io:1; /* more io to be dispatched */ 58 unsigned more_io:1; /* more io to be dispatched */
@@ -69,6 +73,7 @@ struct writeback_control {
69struct bdi_writeback; 73struct bdi_writeback;
70int inode_wait(void *); 74int inode_wait(void *);
71void writeback_inodes_sb(struct super_block *); 75void writeback_inodes_sb(struct super_block *);
76int writeback_inodes_sb_if_idle(struct super_block *);
72void sync_inodes_sb(struct super_block *); 77void sync_inodes_sb(struct super_block *);
73void writeback_inodes_wbc(struct writeback_control *wbc); 78void writeback_inodes_wbc(struct writeback_control *wbc);
74long wb_do_writeback(struct bdi_writeback *wb, int force_wait); 79long wb_do_writeback(struct bdi_writeback *wb, int force_wait);
@@ -78,8 +83,7 @@ void wakeup_flusher_threads(long nr_pages);
78static inline void wait_on_inode(struct inode *inode) 83static inline void wait_on_inode(struct inode *inode)
79{ 84{
80 might_sleep(); 85 might_sleep();
81 wait_on_bit(&inode->i_state, __I_LOCK, inode_wait, 86 wait_on_bit(&inode->i_state, __I_NEW, inode_wait, TASK_UNINTERRUPTIBLE);
82 TASK_UNINTERRUPTIBLE);
83} 87}
84static inline void inode_sync_wait(struct inode *inode) 88static inline void inode_sync_wait(struct inode *inode)
85{ 89{
diff --git a/include/linux/x25.h b/include/linux/x25.h
index d035e4e87d07..6450a7f12074 100644
--- a/include/linux/x25.h
+++ b/include/linux/x25.h
@@ -25,6 +25,7 @@
25#define SIOCX25SENDCALLACCPT (SIOCPROTOPRIVATE + 9) 25#define SIOCX25SENDCALLACCPT (SIOCPROTOPRIVATE + 9)
26#define SIOCX25GDTEFACILITIES (SIOCPROTOPRIVATE + 10) 26#define SIOCX25GDTEFACILITIES (SIOCPROTOPRIVATE + 10)
27#define SIOCX25SDTEFACILITIES (SIOCPROTOPRIVATE + 11) 27#define SIOCX25SDTEFACILITIES (SIOCPROTOPRIVATE + 11)
28#define SIOCX25SCAUSEDIAG (SIOCPROTOPRIVATE + 12)
28 29
29/* 30/*
30 * Values for {get,set}sockopt. 31 * Values for {get,set}sockopt.
diff --git a/include/linux/xattr.h b/include/linux/xattr.h
index 5c84af8c5f6f..fb9b7e6e1e2d 100644
--- a/include/linux/xattr.h
+++ b/include/linux/xattr.h
@@ -38,12 +38,13 @@ struct dentry;
38 38
39struct xattr_handler { 39struct xattr_handler {
40 char *prefix; 40 char *prefix;
41 size_t (*list)(struct inode *inode, char *list, size_t list_size, 41 int flags; /* fs private flags passed back to the handlers */
42 const char *name, size_t name_len); 42 size_t (*list)(struct dentry *dentry, char *list, size_t list_size,
43 int (*get)(struct inode *inode, const char *name, void *buffer, 43 const char *name, size_t name_len, int handler_flags);
44 size_t size); 44 int (*get)(struct dentry *dentry, const char *name, void *buffer,
45 int (*set)(struct inode *inode, const char *name, const void *buffer, 45 size_t size, int handler_flags);
46 size_t size, int flags); 46 int (*set)(struct dentry *dentry, const char *name, const void *buffer,
47 size_t size, int flags, int handler_flags);
47}; 48};
48 49
49ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t); 50ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t);
diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h
index 2d4ec15abaca..b971e3848493 100644
--- a/include/linux/xfrm.h
+++ b/include/linux/xfrm.h
@@ -10,8 +10,7 @@
10/* Structure to encapsulate addresses. I do not want to use 10/* Structure to encapsulate addresses. I do not want to use
11 * "standard" structure. My apologies. 11 * "standard" structure. My apologies.
12 */ 12 */
13typedef union 13typedef union {
14{
15 __be32 a4; 14 __be32 a4;
16 __be32 a6[4]; 15 __be32 a6[4];
17} xfrm_address_t; 16} xfrm_address_t;
@@ -20,8 +19,7 @@ typedef union
20 * the state by (spi,daddr,ah/esp) or to store information about 19 * the state by (spi,daddr,ah/esp) or to store information about
21 * spi, protocol and tunnel address on output. 20 * spi, protocol and tunnel address on output.
22 */ 21 */
23struct xfrm_id 22struct xfrm_id {
24{
25 xfrm_address_t daddr; 23 xfrm_address_t daddr;
26 __be32 spi; 24 __be32 spi;
27 __u8 proto; 25 __u8 proto;
@@ -45,8 +43,7 @@ struct xfrm_sec_ctx {
45 43
46/* Selector, used as selector both on policy rules (SPD) and SAs. */ 44/* Selector, used as selector both on policy rules (SPD) and SAs. */
47 45
48struct xfrm_selector 46struct xfrm_selector {
49{
50 xfrm_address_t daddr; 47 xfrm_address_t daddr;
51 xfrm_address_t saddr; 48 xfrm_address_t saddr;
52 __be16 dport; 49 __be16 dport;
@@ -63,8 +60,7 @@ struct xfrm_selector
63 60
64#define XFRM_INF (~(__u64)0) 61#define XFRM_INF (~(__u64)0)
65 62
66struct xfrm_lifetime_cfg 63struct xfrm_lifetime_cfg {
67{
68 __u64 soft_byte_limit; 64 __u64 soft_byte_limit;
69 __u64 hard_byte_limit; 65 __u64 hard_byte_limit;
70 __u64 soft_packet_limit; 66 __u64 soft_packet_limit;
@@ -75,16 +71,14 @@ struct xfrm_lifetime_cfg
75 __u64 hard_use_expires_seconds; 71 __u64 hard_use_expires_seconds;
76}; 72};
77 73
78struct xfrm_lifetime_cur 74struct xfrm_lifetime_cur {
79{
80 __u64 bytes; 75 __u64 bytes;
81 __u64 packets; 76 __u64 packets;
82 __u64 add_time; 77 __u64 add_time;
83 __u64 use_time; 78 __u64 use_time;
84}; 79};
85 80
86struct xfrm_replay_state 81struct xfrm_replay_state {
87{
88 __u32 oseq; 82 __u32 oseq;
89 __u32 seq; 83 __u32 seq;
90 __u32 bitmap; 84 __u32 bitmap;
@@ -96,6 +90,13 @@ struct xfrm_algo {
96 char alg_key[0]; 90 char alg_key[0];
97}; 91};
98 92
93struct xfrm_algo_auth {
94 char alg_name[64];
95 unsigned int alg_key_len; /* in bits */
96 unsigned int alg_trunc_len; /* in bits */
97 char alg_key[0];
98};
99
99struct xfrm_algo_aead { 100struct xfrm_algo_aead {
100 char alg_name[64]; 101 char alg_name[64];
101 unsigned int alg_key_len; /* in bits */ 102 unsigned int alg_key_len; /* in bits */
@@ -109,16 +110,14 @@ struct xfrm_stats {
109 __u32 integrity_failed; 110 __u32 integrity_failed;
110}; 111};
111 112
112enum 113enum {
113{
114 XFRM_POLICY_TYPE_MAIN = 0, 114 XFRM_POLICY_TYPE_MAIN = 0,
115 XFRM_POLICY_TYPE_SUB = 1, 115 XFRM_POLICY_TYPE_SUB = 1,
116 XFRM_POLICY_TYPE_MAX = 2, 116 XFRM_POLICY_TYPE_MAX = 2,
117 XFRM_POLICY_TYPE_ANY = 255 117 XFRM_POLICY_TYPE_ANY = 255
118}; 118};
119 119
120enum 120enum {
121{
122 XFRM_POLICY_IN = 0, 121 XFRM_POLICY_IN = 0,
123 XFRM_POLICY_OUT = 1, 122 XFRM_POLICY_OUT = 1,
124 XFRM_POLICY_FWD = 2, 123 XFRM_POLICY_FWD = 2,
@@ -126,8 +125,7 @@ enum
126 XFRM_POLICY_MAX = 3 125 XFRM_POLICY_MAX = 3
127}; 126};
128 127
129enum 128enum {
130{
131 XFRM_SHARE_ANY, /* No limitations */ 129 XFRM_SHARE_ANY, /* No limitations */
132 XFRM_SHARE_SESSION, /* For this session only */ 130 XFRM_SHARE_SESSION, /* For this session only */
133 XFRM_SHARE_USER, /* For this user only */ 131 XFRM_SHARE_USER, /* For this user only */
@@ -269,8 +267,8 @@ enum xfrm_attr_type_t {
269 XFRMA_ALG_COMP, /* struct xfrm_algo */ 267 XFRMA_ALG_COMP, /* struct xfrm_algo */
270 XFRMA_ENCAP, /* struct xfrm_algo + struct xfrm_encap_tmpl */ 268 XFRMA_ENCAP, /* struct xfrm_algo + struct xfrm_encap_tmpl */
271 XFRMA_TMPL, /* 1 or more struct xfrm_user_tmpl */ 269 XFRMA_TMPL, /* 1 or more struct xfrm_user_tmpl */
272 XFRMA_SA, 270 XFRMA_SA, /* struct xfrm_usersa_info */
273 XFRMA_POLICY, 271 XFRMA_POLICY, /*struct xfrm_userpolicy_info */
274 XFRMA_SEC_CTX, /* struct xfrm_sec_ctx */ 272 XFRMA_SEC_CTX, /* struct xfrm_sec_ctx */
275 XFRMA_LTIME_VAL, 273 XFRMA_LTIME_VAL,
276 XFRMA_REPLAY_VAL, 274 XFRMA_REPLAY_VAL,
@@ -278,16 +276,23 @@ enum xfrm_attr_type_t {
278 XFRMA_ETIMER_THRESH, 276 XFRMA_ETIMER_THRESH,
279 XFRMA_SRCADDR, /* xfrm_address_t */ 277 XFRMA_SRCADDR, /* xfrm_address_t */
280 XFRMA_COADDR, /* xfrm_address_t */ 278 XFRMA_COADDR, /* xfrm_address_t */
281 XFRMA_LASTUSED, 279 XFRMA_LASTUSED, /* unsigned long */
282 XFRMA_POLICY_TYPE, /* struct xfrm_userpolicy_type */ 280 XFRMA_POLICY_TYPE, /* struct xfrm_userpolicy_type */
283 XFRMA_MIGRATE, 281 XFRMA_MIGRATE,
284 XFRMA_ALG_AEAD, /* struct xfrm_algo_aead */ 282 XFRMA_ALG_AEAD, /* struct xfrm_algo_aead */
285 XFRMA_KMADDRESS, /* struct xfrm_user_kmaddress */ 283 XFRMA_KMADDRESS, /* struct xfrm_user_kmaddress */
284 XFRMA_ALG_AUTH_TRUNC, /* struct xfrm_algo_auth */
285 XFRMA_MARK, /* struct xfrm_mark */
286 __XFRMA_MAX 286 __XFRMA_MAX
287 287
288#define XFRMA_MAX (__XFRMA_MAX - 1) 288#define XFRMA_MAX (__XFRMA_MAX - 1)
289}; 289};
290 290
291struct xfrm_mark {
292 __u32 v; /* value */
293 __u32 m; /* mask */
294};
295
291enum xfrm_sadattr_type_t { 296enum xfrm_sadattr_type_t {
292 XFRMA_SAD_UNSPEC, 297 XFRMA_SAD_UNSPEC,
293 XFRMA_SAD_CNT, 298 XFRMA_SAD_CNT,