aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/asm-arm/plat-s3c24xx/regs-iis.h77
-rw-r--r--include/asm-arm/plat-s3c24xx/regs-s3c2412-iis.h72
-rw-r--r--include/asm-frv/ide.h24
-rw-r--r--include/asm-frv/socket.h3
-rw-r--r--include/asm-generic/vmlinux.lds.h15
-rw-r--r--include/asm-m32r/socket.h3
-rw-r--r--include/asm-mn10300/ide.h39
-rw-r--r--include/asm-mn10300/pci.h5
-rw-r--r--include/asm-mn10300/socket.h3
-rw-r--r--include/crypto/aes.h6
-rw-r--r--include/crypto/compress.h145
-rw-r--r--include/crypto/cryptd.h27
-rw-r--r--include/crypto/crypto_wq.h7
-rw-r--r--include/crypto/hash.h5
-rw-r--r--include/crypto/internal/compress.h28
-rw-r--r--include/linux/Kbuild1
-rw-r--r--include/linux/arcdevice.h9
-rw-r--r--include/linux/ata.h8
-rw-r--r--include/linux/ath9k_platform.h28
-rw-r--r--include/linux/audit.h9
-rw-r--r--include/linux/bio.h18
-rw-r--r--include/linux/bsg.h8
-rw-r--r--include/linux/clocksource.h101
-rw-r--r--include/linux/com20020.h1
-rw-r--r--include/linux/connector.h8
-rw-r--r--include/linux/console.h4
-rw-r--r--include/linux/crypto.h4
-rw-r--r--include/linux/dca.h20
-rw-r--r--include/linux/dccp.h51
-rw-r--r--include/linux/device.h38
-rw-r--r--include/linux/dynamic_debug.h88
-rw-r--r--include/linux/dynamic_printk.h93
-rw-r--r--include/linux/errqueue.h1
-rw-r--r--include/linux/etherdevice.h21
-rw-r--r--include/linux/ethtool.h89
-rw-r--r--include/linux/fs.h1
-rw-r--r--include/linux/gen_stats.h2
-rw-r--r--include/linux/genhd.h5
-rw-r--r--include/linux/hdlc.h5
-rw-r--r--include/linux/hdlcdrv.h3
-rw-r--r--include/linux/ibmtr.h2
-rw-r--r--include/linux/ide.h78
-rw-r--r--include/linux/ieee80211.h181
-rw-r--r--include/linux/if.h1
-rw-r--r--include/linux/if_ether.h8
-rw-r--r--include/linux/if_pppox.h20
-rw-r--r--include/linux/if_tun.h2
-rw-r--r--include/linux/if_tunnel.h16
-rw-r--r--include/linux/ima.h61
-rw-r--r--include/linux/inetdevice.h1
-rw-r--r--include/linux/init_task.h1
-rw-r--r--include/linux/input.h1
-rw-r--r--include/linux/kernel.h7
-rw-r--r--include/linux/kobject.h3
-rw-r--r--include/linux/kvm.h115
-rw-r--r--include/linux/kvm_host.h62
-rw-r--r--include/linux/kvm_types.h13
-rw-r--r--include/linux/latencytop.h10
-rw-r--r--include/linux/libata.h8
-rw-r--r--include/linux/lm_interface.h277
-rw-r--r--include/linux/maple.h62
-rw-r--r--include/linux/mfd/wm8350/audio.h1
-rw-r--r--include/linux/mfd/wm8400-audio.h1
-rw-r--r--include/linux/mlx4/cmd.h1
-rw-r--r--include/linux/mlx4/device.h6
-rw-r--r--include/linux/mod_devicetable.h9
-rw-r--r--include/linux/mount.h1
-rw-r--r--include/linux/mroute.h18
-rw-r--r--include/linux/ncp_no.h26
-rw-r--r--include/linux/neighbour.h1
-rw-r--r--include/linux/net.h8
-rw-r--r--include/linux/net_dropmon.h56
-rw-r--r--include/linux/net_tstamp.h104
-rw-r--r--include/linux/netdevice.h111
-rw-r--r--include/linux/netfilter/Kbuild8
-rw-r--r--include/linux/netfilter/nfnetlink.h1
-rw-r--r--include/linux/netfilter/x_tables.h15
-rw-r--r--include/linux/netfilter/xt_LED.h13
-rw-r--r--include/linux/netfilter/xt_cluster.h15
-rw-r--r--include/linux/netfilter/xt_limit.h9
-rw-r--r--include/linux/netfilter/xt_quota.h4
-rw-r--r--include/linux/netfilter/xt_statistic.h7
-rw-r--r--include/linux/netfilter_bridge.h4
-rw-r--r--include/linux/netfilter_ipv6/Kbuild1
-rw-r--r--include/linux/netlink.h2
-rw-r--r--include/linux/netpoll.h11
-rw-r--r--include/linux/nl80211.h177
-rw-r--r--include/linux/pci_ids.h8
-rw-r--r--include/linux/phy.h3
-rw-r--r--include/linux/pim.h4
-rw-r--r--include/linux/platform_device.h7
-rw-r--r--include/linux/plist.h9
-rw-r--r--include/linux/pm.h11
-rw-r--r--include/linux/ppp_channel.h6
-rw-r--r--include/linux/rds.h250
-rw-r--r--include/linux/rtnetlink.h5
-rw-r--r--include/linux/sched.h19
-rw-r--r--include/linux/sctp.h92
-rw-r--r--include/linux/sh_cmt.h13
-rw-r--r--include/linux/sh_intc.h1
-rw-r--r--include/linux/skbuff.h124
-rw-r--r--include/linux/smsc911x.h3
-rw-r--r--include/linux/socket.h3
-rw-r--r--include/linux/sockios.h3
-rw-r--r--include/linux/spi/libertas_spi.h32
-rw-r--r--include/linux/ssb/ssb.h4
-rw-r--r--include/linux/ssb/ssb_driver_chipcommon.h224
-rw-r--r--include/linux/ssb/ssb_regs.h36
-rw-r--r--include/linux/sysctl.h1
-rw-r--r--include/linux/tcp.h23
-rw-r--r--include/linux/timecompare.h125
-rw-r--r--include/linux/timer.h22
-rw-r--r--include/linux/timeriomem-rng.h21
-rw-r--r--include/linux/timex.h2
-rw-r--r--include/linux/tpm.h35
-rw-r--r--include/linux/uio_driver.h4
-rw-r--r--include/linux/usb.h184
-rw-r--r--include/linux/usb/ch9.h183
-rw-r--r--include/linux/usb/composite.h8
-rw-r--r--include/linux/usb/gadget.h6
-rw-r--r--include/linux/usb/otg.h8
-rw-r--r--include/linux/usb/quirks.h3
-rw-r--r--include/linux/usb/rndis_host.h85
-rw-r--r--include/linux/usb/serial.h3
-rw-r--r--include/linux/usb/usbnet.h5
-rw-r--r--include/linux/usb_usual.h21
-rw-r--r--include/linux/virtio_net.h71
-rw-r--r--include/linux/wimax/debug.h2
-rw-r--r--include/linux/wimax/i2400m.h69
-rw-r--r--include/linux/wireless.h12
-rw-r--r--include/net/addrconf.h4
-rw-r--r--include/net/atmclip.h1
-rw-r--r--include/net/ax88796.h13
-rw-r--r--include/net/bluetooth/bluetooth.h12
-rw-r--r--include/net/bluetooth/hci.h8
-rw-r--r--include/net/bluetooth/hci_core.h84
-rw-r--r--include/net/bluetooth/l2cap.h13
-rw-r--r--include/net/bluetooth/rfcomm.h20
-rw-r--r--include/net/cfg80211.h266
-rw-r--r--include/net/dsa.h42
-rw-r--r--include/net/ieee80211.h1185
-rw-r--r--include/net/if_inet6.h5
-rw-r--r--include/net/inet_ecn.h4
-rw-r--r--include/net/inet_frag.h3
-rw-r--r--include/net/inet_hashtables.h4
-rw-r--r--include/net/ip.h1
-rw-r--r--include/net/ip_vs.h4
-rw-r--r--include/net/ipv6.h4
-rw-r--r--include/net/ipx.h2
-rw-r--r--include/net/mac80211.h260
-rw-r--r--include/net/netfilter/nf_conntrack.h2
-rw-r--r--include/net/netfilter/nf_conntrack_core.h3
-rw-r--r--include/net/netfilter/nf_conntrack_l4proto.h10
-rw-r--r--include/net/netfilter/nf_log.h11
-rw-r--r--include/net/netns/ipv4.h13
-rw-r--r--include/net/netrom.h4
-rw-r--r--include/net/phonet/phonet.h1
-rw-r--r--include/net/phonet/pn_dev.h5
-rw-r--r--include/net/pkt_sched.h1
-rw-r--r--include/net/psnap.h6
-rw-r--r--include/net/sch_generic.h28
-rw-r--r--include/net/sctp/checksum.h14
-rw-r--r--include/net/sctp/command.h3
-rw-r--r--include/net/sctp/sctp.h9
-rw-r--r--include/net/sctp/structs.h7
-rw-r--r--include/net/sock.h49
-rw-r--r--include/net/tcp.h37
-rw-r--r--include/net/transp_v6.h2
-rw-r--r--include/net/udp.h2
-rw-r--r--include/net/wireless.h86
-rw-r--r--include/rdma/ib_cm.h12
-rw-r--r--include/rdma/ib_mad.h4
-rw-r--r--include/rdma/ib_smi.h34
-rw-r--r--include/rdma/ib_verbs.h2
-rw-r--r--include/sound/ad1816a.h2
-rw-r--r--include/sound/asound.h185
-rw-r--r--include/sound/atmel-abdac.h23
-rw-r--r--include/sound/atmel-ac97c.h40
-rw-r--r--include/sound/control.h52
-rw-r--r--include/sound/core.h36
-rw-r--r--include/sound/hwdep.h38
-rw-r--r--include/sound/jack.h5
-rw-r--r--include/sound/pcm.h3
-rw-r--r--include/sound/pxa2xx-lib.h15
-rw-r--r--include/sound/rawmidi.h1
-rw-r--r--include/sound/sb.h4
-rw-r--r--include/sound/sfnt_info.h14
-rw-r--r--include/sound/soc-dai.h2
-rw-r--r--include/sound/soc-dapm.h31
-rw-r--r--include/sound/soc.h69
-rw-r--r--include/sound/uda1341.h126
-rw-r--r--include/sound/version.h2
-rw-r--r--include/sound/wss.h1
-rw-r--r--include/trace/skb.h11
194 files changed, 4344 insertions, 2960 deletions
diff --git a/include/asm-arm/plat-s3c24xx/regs-iis.h b/include/asm-arm/plat-s3c24xx/regs-iis.h
deleted file mode 100644
index a6f1d5df13b4..000000000000
--- a/include/asm-arm/plat-s3c24xx/regs-iis.h
+++ /dev/null
@@ -1,77 +0,0 @@
1/* arch/arm/mach-s3c2410/include/mach/regs-iis.h
2 *
3 * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk>
4 * http://www.simtec.co.uk/products/SWLINUX/
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 * S3C2410 IIS register definition
11*/
12
13#ifndef __ASM_ARCH_REGS_IIS_H
14#define __ASM_ARCH_REGS_IIS_H
15
16#define S3C2410_IISCON (0x00)
17
18#define S3C2410_IISCON_LRINDEX (1<<8)
19#define S3C2410_IISCON_TXFIFORDY (1<<7)
20#define S3C2410_IISCON_RXFIFORDY (1<<6)
21#define S3C2410_IISCON_TXDMAEN (1<<5)
22#define S3C2410_IISCON_RXDMAEN (1<<4)
23#define S3C2410_IISCON_TXIDLE (1<<3)
24#define S3C2410_IISCON_RXIDLE (1<<2)
25#define S3C2410_IISCON_PSCEN (1<<1)
26#define S3C2410_IISCON_IISEN (1<<0)
27
28#define S3C2410_IISMOD (0x04)
29
30#define S3C2440_IISMOD_MPLL (1<<9)
31#define S3C2410_IISMOD_SLAVE (1<<8)
32#define S3C2410_IISMOD_NOXFER (0<<6)
33#define S3C2410_IISMOD_RXMODE (1<<6)
34#define S3C2410_IISMOD_TXMODE (2<<6)
35#define S3C2410_IISMOD_TXRXMODE (3<<6)
36#define S3C2410_IISMOD_LR_LLOW (0<<5)
37#define S3C2410_IISMOD_LR_RLOW (1<<5)
38#define S3C2410_IISMOD_IIS (0<<4)
39#define S3C2410_IISMOD_MSB (1<<4)
40#define S3C2410_IISMOD_8BIT (0<<3)
41#define S3C2410_IISMOD_16BIT (1<<3)
42#define S3C2410_IISMOD_BITMASK (1<<3)
43#define S3C2410_IISMOD_256FS (0<<2)
44#define S3C2410_IISMOD_384FS (1<<2)
45#define S3C2410_IISMOD_16FS (0<<0)
46#define S3C2410_IISMOD_32FS (1<<0)
47#define S3C2410_IISMOD_48FS (2<<0)
48#define S3C2410_IISMOD_FS_MASK (3<<0)
49
50#define S3C2410_IISPSR (0x08)
51#define S3C2410_IISPSR_INTMASK (31<<5)
52#define S3C2410_IISPSR_INTSHIFT (5)
53#define S3C2410_IISPSR_EXTMASK (31<<0)
54#define S3C2410_IISPSR_EXTSHFIT (0)
55
56#define S3C2410_IISFCON (0x0c)
57
58#define S3C2410_IISFCON_TXDMA (1<<15)
59#define S3C2410_IISFCON_RXDMA (1<<14)
60#define S3C2410_IISFCON_TXENABLE (1<<13)
61#define S3C2410_IISFCON_RXENABLE (1<<12)
62#define S3C2410_IISFCON_TXMASK (0x3f << 6)
63#define S3C2410_IISFCON_TXSHIFT (6)
64#define S3C2410_IISFCON_RXMASK (0x3f)
65#define S3C2410_IISFCON_RXSHIFT (0)
66
67#define S3C2400_IISFCON_TXDMA (1<<11)
68#define S3C2400_IISFCON_RXDMA (1<<10)
69#define S3C2400_IISFCON_TXENABLE (1<<9)
70#define S3C2400_IISFCON_RXENABLE (1<<8)
71#define S3C2400_IISFCON_TXMASK (0x07 << 4)
72#define S3C2400_IISFCON_TXSHIFT (4)
73#define S3C2400_IISFCON_RXMASK (0x07)
74#define S3C2400_IISFCON_RXSHIFT (0)
75
76#define S3C2410_IISFIFO (0x10)
77#endif /* __ASM_ARCH_REGS_IIS_H */
diff --git a/include/asm-arm/plat-s3c24xx/regs-s3c2412-iis.h b/include/asm-arm/plat-s3c24xx/regs-s3c2412-iis.h
deleted file mode 100644
index 25d4058bcfed..000000000000
--- a/include/asm-arm/plat-s3c24xx/regs-s3c2412-iis.h
+++ /dev/null
@@ -1,72 +0,0 @@
1/* linux/include/asm-arm/plat-s3c24xx/regs-s3c2412-iis.h
2 *
3 * Copyright 2007 Simtec Electronics <linux@simtec.co.uk>
4 * http://armlinux.simtec.co.uk/
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 * S3C2412 IIS register definition
11*/
12
13#ifndef __ASM_ARCH_REGS_S3C2412_IIS_H
14#define __ASM_ARCH_REGS_S3C2412_IIS_H
15
16#define S3C2412_IISCON (0x00)
17#define S3C2412_IISMOD (0x04)
18#define S3C2412_IISFIC (0x08)
19#define S3C2412_IISPSR (0x0C)
20#define S3C2412_IISTXD (0x10)
21#define S3C2412_IISRXD (0x14)
22
23#define S3C2412_IISCON_LRINDEX (1 << 11)
24#define S3C2412_IISCON_TXFIFO_EMPTY (1 << 10)
25#define S3C2412_IISCON_RXFIFO_EMPTY (1 << 9)
26#define S3C2412_IISCON_TXFIFO_FULL (1 << 8)
27#define S3C2412_IISCON_RXFIFO_FULL (1 << 7)
28#define S3C2412_IISCON_TXDMA_PAUSE (1 << 6)
29#define S3C2412_IISCON_RXDMA_PAUSE (1 << 5)
30#define S3C2412_IISCON_TXCH_PAUSE (1 << 4)
31#define S3C2412_IISCON_RXCH_PAUSE (1 << 3)
32#define S3C2412_IISCON_TXDMA_ACTIVE (1 << 2)
33#define S3C2412_IISCON_RXDMA_ACTIVE (1 << 1)
34#define S3C2412_IISCON_IIS_ACTIVE (1 << 0)
35
36#define S3C2412_IISMOD_MASTER_INTERNAL (0 << 10)
37#define S3C2412_IISMOD_MASTER_EXTERNAL (1 << 10)
38#define S3C2412_IISMOD_SLAVE (2 << 10)
39#define S3C2412_IISMOD_MASTER_MASK (3 << 10)
40#define S3C2412_IISMOD_MODE_TXONLY (0 << 8)
41#define S3C2412_IISMOD_MODE_RXONLY (1 << 8)
42#define S3C2412_IISMOD_MODE_TXRX (2 << 8)
43#define S3C2412_IISMOD_MODE_MASK (3 << 8)
44#define S3C2412_IISMOD_LR_LLOW (0 << 7)
45#define S3C2412_IISMOD_LR_RLOW (1 << 7)
46#define S3C2412_IISMOD_SDF_IIS (0 << 5)
47#define S3C2412_IISMOD_SDF_MSB (0 << 5)
48#define S3C2412_IISMOD_SDF_LSB (0 << 5)
49#define S3C2412_IISMOD_SDF_MASK (3 << 5)
50#define S3C2412_IISMOD_RCLK_256FS (0 << 3)
51#define S3C2412_IISMOD_RCLK_512FS (1 << 3)
52#define S3C2412_IISMOD_RCLK_384FS (2 << 3)
53#define S3C2412_IISMOD_RCLK_768FS (3 << 3)
54#define S3C2412_IISMOD_RCLK_MASK (3 << 3)
55#define S3C2412_IISMOD_BCLK_32FS (0 << 1)
56#define S3C2412_IISMOD_BCLK_48FS (1 << 1)
57#define S3C2412_IISMOD_BCLK_16FS (2 << 1)
58#define S3C2412_IISMOD_BCLK_24FS (3 << 1)
59#define S3C2412_IISMOD_BCLK_MASK (3 << 1)
60#define S3C2412_IISMOD_8BIT (1 << 0)
61
62#define S3C2412_IISPSR_PSREN (1 << 15)
63
64#define S3C2412_IISFIC_TXFLUSH (1 << 15)
65#define S3C2412_IISFIC_RXFLUSH (1 << 7)
66#define S3C2412_IISFIC_TXCOUNT(x) (((x) >> 8) & 0xf)
67#define S3C2412_IISFIC_RXCOUNT(x) (((x) >> 0) & 0xf)
68
69
70
71#endif /* __ASM_ARCH_REGS_S3C2412_IIS_H */
72
diff --git a/include/asm-frv/ide.h b/include/asm-frv/ide.h
deleted file mode 100644
index 361076611855..000000000000
--- a/include/asm-frv/ide.h
+++ /dev/null
@@ -1,24 +0,0 @@
1/* ide.h: FRV IDE declarations
2 *
3 * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
10 */
11
12#ifndef _ASM_IDE_H
13#define _ASM_IDE_H
14
15#ifdef __KERNEL__
16
17#include <asm/setup.h>
18#include <asm/io.h>
19#include <asm/irq.h>
20
21#include <asm-generic/ide_iops.h>
22
23#endif /* __KERNEL__ */
24#endif /* _ASM_IDE_H */
diff --git a/include/asm-frv/socket.h b/include/asm-frv/socket.h
index e51ca67b9356..57c3d4054e8b 100644
--- a/include/asm-frv/socket.h
+++ b/include/asm-frv/socket.h
@@ -54,5 +54,8 @@
54 54
55#define SO_MARK 36 55#define SO_MARK 36
56 56
57#define SO_TIMESTAMPING 37
58#define SCM_TIMESTAMPING SO_TIMESTAMPING
59
57#endif /* _ASM_SOCKET_H */ 60#endif /* _ASM_SOCKET_H */
58 61
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index c61fab1dd2f8..aca40b93bd28 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -80,6 +80,11 @@
80 VMLINUX_SYMBOL(__start___tracepoints) = .; \ 80 VMLINUX_SYMBOL(__start___tracepoints) = .; \
81 *(__tracepoints) \ 81 *(__tracepoints) \
82 VMLINUX_SYMBOL(__stop___tracepoints) = .; \ 82 VMLINUX_SYMBOL(__stop___tracepoints) = .; \
83 /* implement dynamic printk debug */ \
84 . = ALIGN(8); \
85 VMLINUX_SYMBOL(__start___verbose) = .; \
86 *(__verbose) \
87 VMLINUX_SYMBOL(__stop___verbose) = .; \
83 LIKELY_PROFILE() \ 88 LIKELY_PROFILE() \
84 BRANCH_PROFILE() 89 BRANCH_PROFILE()
85 90
@@ -309,15 +314,7 @@
309 CPU_DISCARD(init.data) \ 314 CPU_DISCARD(init.data) \
310 CPU_DISCARD(init.rodata) \ 315 CPU_DISCARD(init.rodata) \
311 MEM_DISCARD(init.data) \ 316 MEM_DISCARD(init.data) \
312 MEM_DISCARD(init.rodata) \ 317 MEM_DISCARD(init.rodata)
313 /* implement dynamic printk debug */ \
314 VMLINUX_SYMBOL(__start___verbose_strings) = .; \
315 *(__verbose_strings) \
316 VMLINUX_SYMBOL(__stop___verbose_strings) = .; \
317 . = ALIGN(8); \
318 VMLINUX_SYMBOL(__start___verbose) = .; \
319 *(__verbose) \
320 VMLINUX_SYMBOL(__stop___verbose) = .;
321 318
322#define INIT_TEXT \ 319#define INIT_TEXT \
323 *(.init.text) \ 320 *(.init.text) \
diff --git a/include/asm-m32r/socket.h b/include/asm-m32r/socket.h
index 9a0e20012224..be7ed589af5c 100644
--- a/include/asm-m32r/socket.h
+++ b/include/asm-m32r/socket.h
@@ -54,4 +54,7 @@
54 54
55#define SO_MARK 36 55#define SO_MARK 36
56 56
57#define SO_TIMESTAMPING 37
58#define SCM_TIMESTAMPING SO_TIMESTAMPING
59
57#endif /* _ASM_M32R_SOCKET_H */ 60#endif /* _ASM_M32R_SOCKET_H */
diff --git a/include/asm-mn10300/ide.h b/include/asm-mn10300/ide.h
deleted file mode 100644
index 6adcdd92e83d..000000000000
--- a/include/asm-mn10300/ide.h
+++ /dev/null
@@ -1,39 +0,0 @@
1/* MN10300 Arch-specific IDE code
2 *
3 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
5 * - Derived from include/asm-i386/ide.h
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public Licence
9 * as published by the Free Software Foundation; either version
10 * 2 of the Licence, or (at your option) any later version.
11 */
12
13#ifndef _ASM_IDE_H
14#define _ASM_IDE_H
15
16#ifdef __KERNEL__
17
18#include <asm/intctl-regs.h>
19
20#undef SUPPORT_SLOW_DATA_PORTS
21#define SUPPORT_SLOW_DATA_PORTS 0
22
23#undef SUPPORT_VLB_SYNC
24#define SUPPORT_VLB_SYNC 0
25
26/*
27 * some bits needed for parts of the IDE subsystem to compile
28 */
29#define __ide_mm_insw(port, addr, n) \
30 insw((unsigned long) (port), (addr), (n))
31#define __ide_mm_insl(port, addr, n) \
32 insl((unsigned long) (port), (addr), (n))
33#define __ide_mm_outsw(port, addr, n) \
34 outsw((unsigned long) (port), (addr), (n))
35#define __ide_mm_outsl(port, addr, n) \
36 outsl((unsigned long) (port), (addr), (n))
37
38#endif /* __KERNEL__ */
39#endif /* _ASM_IDE_H */
diff --git a/include/asm-mn10300/pci.h b/include/asm-mn10300/pci.h
index cd9cc5c89cea..0517b45313d8 100644
--- a/include/asm-mn10300/pci.h
+++ b/include/asm-mn10300/pci.h
@@ -121,4 +121,9 @@ pcibios_select_root(struct pci_dev *pdev, struct resource *res)
121 121
122#define pcibios_scan_all_fns(a, b) 0 122#define pcibios_scan_all_fns(a, b) 0
123 123
124static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
125{
126 return channel ? 15 : 14;
127}
128
124#endif /* _ASM_PCI_H */ 129#endif /* _ASM_PCI_H */
diff --git a/include/asm-mn10300/socket.h b/include/asm-mn10300/socket.h
index 80af9c4ccad7..fb5daf438ec9 100644
--- a/include/asm-mn10300/socket.h
+++ b/include/asm-mn10300/socket.h
@@ -54,4 +54,7 @@
54 54
55#define SO_MARK 36 55#define SO_MARK 36
56 56
57#define SO_TIMESTAMPING 37
58#define SCM_TIMESTAMPING SO_TIMESTAMPING
59
57#endif /* _ASM_SOCKET_H */ 60#endif /* _ASM_SOCKET_H */
diff --git a/include/crypto/aes.h b/include/crypto/aes.h
index 656a4c66a568..7524ba3b6f3c 100644
--- a/include/crypto/aes.h
+++ b/include/crypto/aes.h
@@ -17,10 +17,14 @@
17#define AES_MAX_KEYLENGTH (15 * 16) 17#define AES_MAX_KEYLENGTH (15 * 16)
18#define AES_MAX_KEYLENGTH_U32 (AES_MAX_KEYLENGTH / sizeof(u32)) 18#define AES_MAX_KEYLENGTH_U32 (AES_MAX_KEYLENGTH / sizeof(u32))
19 19
20/*
21 * Please ensure that the first two fields are 16-byte aligned
22 * relative to the start of the structure, i.e., don't move them!
23 */
20struct crypto_aes_ctx { 24struct crypto_aes_ctx {
21 u32 key_length;
22 u32 key_enc[AES_MAX_KEYLENGTH_U32]; 25 u32 key_enc[AES_MAX_KEYLENGTH_U32];
23 u32 key_dec[AES_MAX_KEYLENGTH_U32]; 26 u32 key_dec[AES_MAX_KEYLENGTH_U32];
27 u32 key_length;
24}; 28};
25 29
26extern const u32 crypto_ft_tab[4][256]; 30extern const u32 crypto_ft_tab[4][256];
diff --git a/include/crypto/compress.h b/include/crypto/compress.h
new file mode 100644
index 000000000000..86163ef24219
--- /dev/null
+++ b/include/crypto/compress.h
@@ -0,0 +1,145 @@
1/*
2 * Compress: Compression algorithms under the cryptographic API.
3 *
4 * Copyright 2008 Sony Corporation
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.
17 * If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef _CRYPTO_COMPRESS_H
21#define _CRYPTO_COMPRESS_H
22
23#include <linux/crypto.h>
24
25
26struct comp_request {
27 const void *next_in; /* next input byte */
28 void *next_out; /* next output byte */
29 unsigned int avail_in; /* bytes available at next_in */
30 unsigned int avail_out; /* bytes available at next_out */
31};
32
33enum zlib_comp_params {
34 ZLIB_COMP_LEVEL = 1, /* e.g. Z_DEFAULT_COMPRESSION */
35 ZLIB_COMP_METHOD, /* e.g. Z_DEFLATED */
36 ZLIB_COMP_WINDOWBITS, /* e.g. MAX_WBITS */
37 ZLIB_COMP_MEMLEVEL, /* e.g. DEF_MEM_LEVEL */
38 ZLIB_COMP_STRATEGY, /* e.g. Z_DEFAULT_STRATEGY */
39 __ZLIB_COMP_MAX,
40};
41
42#define ZLIB_COMP_MAX (__ZLIB_COMP_MAX - 1)
43
44
45enum zlib_decomp_params {
46 ZLIB_DECOMP_WINDOWBITS = 1, /* e.g. DEF_WBITS */
47 __ZLIB_DECOMP_MAX,
48};
49
50#define ZLIB_DECOMP_MAX (__ZLIB_DECOMP_MAX - 1)
51
52
53struct crypto_pcomp {
54 struct crypto_tfm base;
55};
56
57struct pcomp_alg {
58 int (*compress_setup)(struct crypto_pcomp *tfm, void *params,
59 unsigned int len);
60 int (*compress_init)(struct crypto_pcomp *tfm);
61 int (*compress_update)(struct crypto_pcomp *tfm,
62 struct comp_request *req);
63 int (*compress_final)(struct crypto_pcomp *tfm,
64 struct comp_request *req);
65 int (*decompress_setup)(struct crypto_pcomp *tfm, void *params,
66 unsigned int len);
67 int (*decompress_init)(struct crypto_pcomp *tfm);
68 int (*decompress_update)(struct crypto_pcomp *tfm,
69 struct comp_request *req);
70 int (*decompress_final)(struct crypto_pcomp *tfm,
71 struct comp_request *req);
72
73 struct crypto_alg base;
74};
75
76extern struct crypto_pcomp *crypto_alloc_pcomp(const char *alg_name, u32 type,
77 u32 mask);
78
79static inline struct crypto_tfm *crypto_pcomp_tfm(struct crypto_pcomp *tfm)
80{
81 return &tfm->base;
82}
83
84static inline void crypto_free_pcomp(struct crypto_pcomp *tfm)
85{
86 crypto_destroy_tfm(tfm, crypto_pcomp_tfm(tfm));
87}
88
89static inline struct pcomp_alg *__crypto_pcomp_alg(struct crypto_alg *alg)
90{
91 return container_of(alg, struct pcomp_alg, base);
92}
93
94static inline struct pcomp_alg *crypto_pcomp_alg(struct crypto_pcomp *tfm)
95{
96 return __crypto_pcomp_alg(crypto_pcomp_tfm(tfm)->__crt_alg);
97}
98
99static inline int crypto_compress_setup(struct crypto_pcomp *tfm,
100 void *params, unsigned int len)
101{
102 return crypto_pcomp_alg(tfm)->compress_setup(tfm, params, len);
103}
104
105static inline int crypto_compress_init(struct crypto_pcomp *tfm)
106{
107 return crypto_pcomp_alg(tfm)->compress_init(tfm);
108}
109
110static inline int crypto_compress_update(struct crypto_pcomp *tfm,
111 struct comp_request *req)
112{
113 return crypto_pcomp_alg(tfm)->compress_update(tfm, req);
114}
115
116static inline int crypto_compress_final(struct crypto_pcomp *tfm,
117 struct comp_request *req)
118{
119 return crypto_pcomp_alg(tfm)->compress_final(tfm, req);
120}
121
122static inline int crypto_decompress_setup(struct crypto_pcomp *tfm,
123 void *params, unsigned int len)
124{
125 return crypto_pcomp_alg(tfm)->decompress_setup(tfm, params, len);
126}
127
128static inline int crypto_decompress_init(struct crypto_pcomp *tfm)
129{
130 return crypto_pcomp_alg(tfm)->decompress_init(tfm);
131}
132
133static inline int crypto_decompress_update(struct crypto_pcomp *tfm,
134 struct comp_request *req)
135{
136 return crypto_pcomp_alg(tfm)->decompress_update(tfm, req);
137}
138
139static inline int crypto_decompress_final(struct crypto_pcomp *tfm,
140 struct comp_request *req)
141{
142 return crypto_pcomp_alg(tfm)->decompress_final(tfm, req);
143}
144
145#endif /* _CRYPTO_COMPRESS_H */
diff --git a/include/crypto/cryptd.h b/include/crypto/cryptd.h
new file mode 100644
index 000000000000..55fa7bbdbc71
--- /dev/null
+++ b/include/crypto/cryptd.h
@@ -0,0 +1,27 @@
1/*
2 * Software async crypto daemon
3 */
4
5#ifndef _CRYPTO_CRYPT_H
6#define _CRYPTO_CRYPT_H
7
8#include <linux/crypto.h>
9#include <linux/kernel.h>
10
11struct cryptd_ablkcipher {
12 struct crypto_ablkcipher base;
13};
14
15static inline struct cryptd_ablkcipher *__cryptd_ablkcipher_cast(
16 struct crypto_ablkcipher *tfm)
17{
18 return (struct cryptd_ablkcipher *)tfm;
19}
20
21/* alg_name should be algorithm to be cryptd-ed */
22struct cryptd_ablkcipher *cryptd_alloc_ablkcipher(const char *alg_name,
23 u32 type, u32 mask);
24struct crypto_blkcipher *cryptd_ablkcipher_child(struct cryptd_ablkcipher *tfm);
25void cryptd_free_ablkcipher(struct cryptd_ablkcipher *tfm);
26
27#endif
diff --git a/include/crypto/crypto_wq.h b/include/crypto/crypto_wq.h
new file mode 100644
index 000000000000..a7d252daf91b
--- /dev/null
+++ b/include/crypto/crypto_wq.h
@@ -0,0 +1,7 @@
1#ifndef CRYPTO_WQ_H
2#define CRYPTO_WQ_H
3
4#include <linux/workqueue.h>
5
6extern struct workqueue_struct *kcrypto_wq;
7#endif
diff --git a/include/crypto/hash.h b/include/crypto/hash.h
index d797e119e3d5..d56bb71617c3 100644
--- a/include/crypto/hash.h
+++ b/include/crypto/hash.h
@@ -231,6 +231,11 @@ static inline unsigned int crypto_shash_alignmask(
231 return crypto_tfm_alg_alignmask(crypto_shash_tfm(tfm)); 231 return crypto_tfm_alg_alignmask(crypto_shash_tfm(tfm));
232} 232}
233 233
234static inline unsigned int crypto_shash_blocksize(struct crypto_shash *tfm)
235{
236 return crypto_tfm_alg_blocksize(crypto_shash_tfm(tfm));
237}
238
234static inline struct shash_alg *__crypto_shash_alg(struct crypto_alg *alg) 239static inline struct shash_alg *__crypto_shash_alg(struct crypto_alg *alg)
235{ 240{
236 return container_of(alg, struct shash_alg, base); 241 return container_of(alg, struct shash_alg, base);
diff --git a/include/crypto/internal/compress.h b/include/crypto/internal/compress.h
new file mode 100644
index 000000000000..178a888d1d93
--- /dev/null
+++ b/include/crypto/internal/compress.h
@@ -0,0 +1,28 @@
1/*
2 * Compress: Compression algorithms under the cryptographic API.
3 *
4 * Copyright 2008 Sony Corporation
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.
17 * If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef _CRYPTO_INTERNAL_COMPRESS_H
21#define _CRYPTO_INTERNAL_COMPRESS_H
22
23#include <crypto/compress.h>
24
25extern int crypto_register_pcomp(struct pcomp_alg *alg);
26extern int crypto_unregister_pcomp(struct pcomp_alg *alg);
27
28#endif /* _CRYPTO_INTERNAL_COMPRESS_H */
diff --git a/include/linux/Kbuild b/include/linux/Kbuild
index 106c3ba50844..e9581fd9fb66 100644
--- a/include/linux/Kbuild
+++ b/include/linux/Kbuild
@@ -115,6 +115,7 @@ header-y += mqueue.h
115header-y += mtio.h 115header-y += mtio.h
116header-y += ncp_no.h 116header-y += ncp_no.h
117header-y += neighbour.h 117header-y += neighbour.h
118header-y += net_dropmon.h
118header-y += netfilter_arp.h 119header-y += netfilter_arp.h
119header-y += netrom.h 120header-y += netrom.h
120header-y += nfs2.h 121header-y += nfs2.h
diff --git a/include/linux/arcdevice.h b/include/linux/arcdevice.h
index a1916078fd08..cd4bcb6989ce 100644
--- a/include/linux/arcdevice.h
+++ b/include/linux/arcdevice.h
@@ -235,8 +235,6 @@ struct Outgoing {
235 235
236 236
237struct arcnet_local { 237struct arcnet_local {
238 struct net_device_stats stats;
239
240 uint8_t config, /* current value of CONFIG register */ 238 uint8_t config, /* current value of CONFIG register */
241 timeout, /* Extended timeout for COM20020 */ 239 timeout, /* Extended timeout for COM20020 */
242 backplane, /* Backplane flag for COM20020 */ 240 backplane, /* Backplane flag for COM20020 */
@@ -335,7 +333,12 @@ void arcnet_dump_skb(struct net_device *dev, struct sk_buff *skb, char *desc);
335 333
336void arcnet_unregister_proto(struct ArcProto *proto); 334void arcnet_unregister_proto(struct ArcProto *proto);
337irqreturn_t arcnet_interrupt(int irq, void *dev_id); 335irqreturn_t arcnet_interrupt(int irq, void *dev_id);
338struct net_device *alloc_arcdev(char *name); 336struct net_device *alloc_arcdev(const char *name);
337
338int arcnet_open(struct net_device *dev);
339int arcnet_close(struct net_device *dev);
340int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev);
341void arcnet_timeout(struct net_device *dev);
339 342
340#endif /* __KERNEL__ */ 343#endif /* __KERNEL__ */
341#endif /* _LINUX_ARCDEVICE_H */ 344#endif /* _LINUX_ARCDEVICE_H */
diff --git a/include/linux/ata.h b/include/linux/ata.h
index 9a061accd8b8..6617c9f8f2ca 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -108,6 +108,8 @@ enum {
108 ATA_PIO5 = ATA_PIO4 | (1 << 5), 108 ATA_PIO5 = ATA_PIO4 | (1 << 5),
109 ATA_PIO6 = ATA_PIO5 | (1 << 6), 109 ATA_PIO6 = ATA_PIO5 | (1 << 6),
110 110
111 ATA_PIO4_ONLY = (1 << 4),
112
111 ATA_SWDMA0 = (1 << 0), 113 ATA_SWDMA0 = (1 << 0),
112 ATA_SWDMA1 = ATA_SWDMA0 | (1 << 1), 114 ATA_SWDMA1 = ATA_SWDMA0 | (1 << 1),
113 ATA_SWDMA2 = ATA_SWDMA1 | (1 << 2), 115 ATA_SWDMA2 = ATA_SWDMA1 | (1 << 2),
@@ -117,6 +119,8 @@ enum {
117 ATA_MWDMA0 = (1 << 0), 119 ATA_MWDMA0 = (1 << 0),
118 ATA_MWDMA1 = ATA_MWDMA0 | (1 << 1), 120 ATA_MWDMA1 = ATA_MWDMA0 | (1 << 1),
119 ATA_MWDMA2 = ATA_MWDMA1 | (1 << 2), 121 ATA_MWDMA2 = ATA_MWDMA1 | (1 << 2),
122 ATA_MWDMA3 = ATA_MWDMA2 | (1 << 3),
123 ATA_MWDMA4 = ATA_MWDMA3 | (1 << 4),
120 124
121 ATA_MWDMA12_ONLY = (1 << 1) | (1 << 2), 125 ATA_MWDMA12_ONLY = (1 << 1) | (1 << 2),
122 ATA_MWDMA2_ONLY = (1 << 2), 126 ATA_MWDMA2_ONLY = (1 << 2),
@@ -131,6 +135,8 @@ enum {
131 ATA_UDMA7 = ATA_UDMA6 | (1 << 7), 135 ATA_UDMA7 = ATA_UDMA6 | (1 << 7),
132 /* ATA_UDMA7 is just for completeness... doesn't exist (yet?). */ 136 /* ATA_UDMA7 is just for completeness... doesn't exist (yet?). */
133 137
138 ATA_UDMA24_ONLY = (1 << 2) | (1 << 4),
139
134 ATA_UDMA_MASK_40C = ATA_UDMA2, /* udma0-2 */ 140 ATA_UDMA_MASK_40C = ATA_UDMA2, /* udma0-2 */
135 141
136 /* DMA-related */ 142 /* DMA-related */
@@ -244,8 +250,6 @@ enum {
244 ATA_CMD_MEDIA_UNLOCK = 0xDF, 250 ATA_CMD_MEDIA_UNLOCK = 0xDF,
245 /* marked obsolete in the ATA/ATAPI-7 spec */ 251 /* marked obsolete in the ATA/ATAPI-7 spec */
246 ATA_CMD_RESTORE = 0x10, 252 ATA_CMD_RESTORE = 0x10,
247 /* EXABYTE specific */
248 ATA_EXABYTE_ENABLE_NEST = 0xF0,
249 253
250 /* READ_LOG_EXT pages */ 254 /* READ_LOG_EXT pages */
251 ATA_LOG_SATA_NCQ = 0x10, 255 ATA_LOG_SATA_NCQ = 0x10,
diff --git a/include/linux/ath9k_platform.h b/include/linux/ath9k_platform.h
new file mode 100644
index 000000000000..b847fc7b93f9
--- /dev/null
+++ b/include/linux/ath9k_platform.h
@@ -0,0 +1,28 @@
1/*
2 * Copyright (c) 2008 Atheros Communications Inc.
3 * Copyright (c) 2009 Gabor Juhos <juhosg@openwrt.org>
4 * Copyright (c) 2009 Imre Kaloz <kaloz@openwrt.org>
5 *
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19#ifndef _LINUX_ATH9K_PLATFORM_H
20#define _LINUX_ATH9K_PLATFORM_H
21
22#define ATH9K_PLAT_EEP_MAX_WORDS 2048
23
24struct ath9k_platform_data {
25 u16 eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS];
26};
27
28#endif /* _LINUX_ATH9K_PLATFORM_H */
diff --git a/include/linux/audit.h b/include/linux/audit.h
index 67e5dbfc2961..4fa2810b675e 100644
--- a/include/linux/audit.h
+++ b/include/linux/audit.h
@@ -36,7 +36,8 @@
36 * 1500 - 1599 kernel LSPP events 36 * 1500 - 1599 kernel LSPP events
37 * 1600 - 1699 kernel crypto events 37 * 1600 - 1699 kernel crypto events
38 * 1700 - 1799 kernel anomaly records 38 * 1700 - 1799 kernel anomaly records
39 * 1800 - 1999 future kernel use (maybe integrity labels and related events) 39 * 1800 - 1899 kernel integrity events
40 * 1900 - 1999 future kernel use
40 * 2000 is for otherwise unclassified kernel audit messages (legacy) 41 * 2000 is for otherwise unclassified kernel audit messages (legacy)
41 * 2001 - 2099 unused (kernel) 42 * 2001 - 2099 unused (kernel)
42 * 2100 - 2199 user space anomaly records 43 * 2100 - 2199 user space anomaly records
@@ -125,6 +126,12 @@
125#define AUDIT_LAST_KERN_ANOM_MSG 1799 126#define AUDIT_LAST_KERN_ANOM_MSG 1799
126#define AUDIT_ANOM_PROMISCUOUS 1700 /* Device changed promiscuous mode */ 127#define AUDIT_ANOM_PROMISCUOUS 1700 /* Device changed promiscuous mode */
127#define AUDIT_ANOM_ABEND 1701 /* Process ended abnormally */ 128#define AUDIT_ANOM_ABEND 1701 /* Process ended abnormally */
129#define AUDIT_INTEGRITY_DATA 1800 /* Data integrity verification */
130#define AUDIT_INTEGRITY_METADATA 1801 /* Metadata integrity verification */
131#define AUDIT_INTEGRITY_STATUS 1802 /* Integrity enable status */
132#define AUDIT_INTEGRITY_HASH 1803 /* Integrity HASH type */
133#define AUDIT_INTEGRITY_PCR 1804 /* PCR invalidation msgs */
134#define AUDIT_INTEGRITY_RULE 1805 /* policy rule */
128 135
129#define AUDIT_KERNEL 2000 /* Asynchronous audit record. NOT A REQUEST. */ 136#define AUDIT_KERNEL 2000 /* Asynchronous audit record. NOT A REQUEST. */
130 137
diff --git a/include/linux/bio.h b/include/linux/bio.h
index d8bd43bfdcf5..b05b1d4d17d2 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -426,9 +426,6 @@ struct bio_set {
426 unsigned int front_pad; 426 unsigned int front_pad;
427 427
428 mempool_t *bio_pool; 428 mempool_t *bio_pool;
429#if defined(CONFIG_BLK_DEV_INTEGRITY)
430 mempool_t *bio_integrity_pool;
431#endif
432 mempool_t *bvec_pool; 429 mempool_t *bvec_pool;
433}; 430};
434 431
@@ -519,9 +516,8 @@ static inline int bio_has_data(struct bio *bio)
519 516
520#define bio_integrity(bio) (bio->bi_integrity != NULL) 517#define bio_integrity(bio) (bio->bi_integrity != NULL)
521 518
522extern struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *, gfp_t, unsigned int, struct bio_set *);
523extern struct bio_integrity_payload *bio_integrity_alloc(struct bio *, gfp_t, unsigned int); 519extern struct bio_integrity_payload *bio_integrity_alloc(struct bio *, gfp_t, unsigned int);
524extern void bio_integrity_free(struct bio *, struct bio_set *); 520extern void bio_integrity_free(struct bio *);
525extern int bio_integrity_add_page(struct bio *, struct page *, unsigned int, unsigned int); 521extern int bio_integrity_add_page(struct bio *, struct page *, unsigned int, unsigned int);
526extern int bio_integrity_enabled(struct bio *bio); 522extern int bio_integrity_enabled(struct bio *bio);
527extern int bio_integrity_set_tag(struct bio *, void *, unsigned int); 523extern int bio_integrity_set_tag(struct bio *, void *, unsigned int);
@@ -531,27 +527,21 @@ extern void bio_integrity_endio(struct bio *, int);
531extern void bio_integrity_advance(struct bio *, unsigned int); 527extern void bio_integrity_advance(struct bio *, unsigned int);
532extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int); 528extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int);
533extern void bio_integrity_split(struct bio *, struct bio_pair *, int); 529extern void bio_integrity_split(struct bio *, struct bio_pair *, int);
534extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t, struct bio_set *); 530extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t);
535extern int bioset_integrity_create(struct bio_set *, int);
536extern void bioset_integrity_free(struct bio_set *);
537extern void bio_integrity_init_slab(void);
538 531
539#else /* CONFIG_BLK_DEV_INTEGRITY */ 532#else /* CONFIG_BLK_DEV_INTEGRITY */
540 533
541#define bio_integrity(a) (0) 534#define bio_integrity(a) (0)
542#define bioset_integrity_create(a, b) (0)
543#define bio_integrity_prep(a) (0) 535#define bio_integrity_prep(a) (0)
544#define bio_integrity_enabled(a) (0) 536#define bio_integrity_enabled(a) (0)
545#define bio_integrity_clone(a, b, c,d ) (0) 537#define bio_integrity_clone(a, b, c) (0)
546#define bioset_integrity_free(a) do { } while (0) 538#define bio_integrity_free(a) do { } while (0)
547#define bio_integrity_free(a, b) do { } while (0)
548#define bio_integrity_endio(a, b) do { } while (0) 539#define bio_integrity_endio(a, b) do { } while (0)
549#define bio_integrity_advance(a, b) do { } while (0) 540#define bio_integrity_advance(a, b) do { } while (0)
550#define bio_integrity_trim(a, b, c) do { } while (0) 541#define bio_integrity_trim(a, b, c) do { } while (0)
551#define bio_integrity_split(a, b, c) do { } while (0) 542#define bio_integrity_split(a, b, c) do { } while (0)
552#define bio_integrity_set_tag(a, b, c) do { } while (0) 543#define bio_integrity_set_tag(a, b, c) do { } while (0)
553#define bio_integrity_get_tag(a, b, c) do { } while (0) 544#define bio_integrity_get_tag(a, b, c) do { } while (0)
554#define bio_integrity_init_slab(a) do { } while (0)
555 545
556#endif /* CONFIG_BLK_DEV_INTEGRITY */ 546#endif /* CONFIG_BLK_DEV_INTEGRITY */
557 547
diff --git a/include/linux/bsg.h b/include/linux/bsg.h
index cf0303a60611..3f0c64ace424 100644
--- a/include/linux/bsg.h
+++ b/include/linux/bsg.h
@@ -7,6 +7,14 @@
7#define BSG_SUB_PROTOCOL_SCSI_TMF 1 7#define BSG_SUB_PROTOCOL_SCSI_TMF 1
8#define BSG_SUB_PROTOCOL_SCSI_TRANSPORT 2 8#define BSG_SUB_PROTOCOL_SCSI_TRANSPORT 2
9 9
10/*
11 * For flags member below
12 * sg.h sg_io_hdr also has bits defined for it's flags member. However
13 * none of these bits are implemented/used by bsg. The bits below are
14 * allocated to not conflict with sg.h ones anyway.
15 */
16#define BSG_FLAG_Q_AT_TAIL 0x10 /* default, == 0 at this bit, is Q_AT_HEAD */
17
10struct sg_io_v4 { 18struct sg_io_v4 {
11 __s32 guard; /* [i] 'Q' to differentiate from v3 */ 19 __s32 guard; /* [i] 'Q' to differentiate from v3 */
12 __u32 protocol; /* [i] 0 -> SCSI , .... */ 20 __u32 protocol; /* [i] 0 -> SCSI , .... */
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h
index f88d32f8ff7c..573819ef4cc0 100644
--- a/include/linux/clocksource.h
+++ b/include/linux/clocksource.h
@@ -22,8 +22,109 @@ typedef u64 cycle_t;
22struct clocksource; 22struct clocksource;
23 23
24/** 24/**
25 * struct cyclecounter - hardware abstraction for a free running counter
26 * Provides completely state-free accessors to the underlying hardware.
27 * Depending on which hardware it reads, the cycle counter may wrap
28 * around quickly. Locking rules (if necessary) have to be defined
29 * by the implementor and user of specific instances of this API.
30 *
31 * @read: returns the current cycle value
32 * @mask: bitmask for two's complement
33 * subtraction of non 64 bit counters,
34 * see CLOCKSOURCE_MASK() helper macro
35 * @mult: cycle to nanosecond multiplier
36 * @shift: cycle to nanosecond divisor (power of two)
37 */
38struct cyclecounter {
39 cycle_t (*read)(const struct cyclecounter *cc);
40 cycle_t mask;
41 u32 mult;
42 u32 shift;
43};
44
45/**
46 * struct timecounter - layer above a %struct cyclecounter which counts nanoseconds
47 * Contains the state needed by timecounter_read() to detect
48 * cycle counter wrap around. Initialize with
49 * timecounter_init(). Also used to convert cycle counts into the
50 * corresponding nanosecond counts with timecounter_cyc2time(). Users
51 * of this code are responsible for initializing the underlying
52 * cycle counter hardware, locking issues and reading the time
53 * more often than the cycle counter wraps around. The nanosecond
54 * counter will only wrap around after ~585 years.
55 *
56 * @cc: the cycle counter used by this instance
57 * @cycle_last: most recent cycle counter value seen by
58 * timecounter_read()
59 * @nsec: continuously increasing count
60 */
61struct timecounter {
62 const struct cyclecounter *cc;
63 cycle_t cycle_last;
64 u64 nsec;
65};
66
67/**
68 * cyclecounter_cyc2ns - converts cycle counter cycles to nanoseconds
69 * @tc: Pointer to cycle counter.
70 * @cycles: Cycles
71 *
72 * XXX - This could use some mult_lxl_ll() asm optimization. Same code
73 * as in cyc2ns, but with unsigned result.
74 */
75static inline u64 cyclecounter_cyc2ns(const struct cyclecounter *cc,
76 cycle_t cycles)
77{
78 u64 ret = (u64)cycles;
79 ret = (ret * cc->mult) >> cc->shift;
80 return ret;
81}
82
83/**
84 * timecounter_init - initialize a time counter
85 * @tc: Pointer to time counter which is to be initialized/reset
86 * @cc: A cycle counter, ready to be used.
87 * @start_tstamp: Arbitrary initial time stamp.
88 *
89 * After this call the current cycle register (roughly) corresponds to
90 * the initial time stamp. Every call to timecounter_read() increments
91 * the time stamp counter by the number of elapsed nanoseconds.
92 */
93extern void timecounter_init(struct timecounter *tc,
94 const struct cyclecounter *cc,
95 u64 start_tstamp);
96
97/**
98 * timecounter_read - return nanoseconds elapsed since timecounter_init()
99 * plus the initial time stamp
100 * @tc: Pointer to time counter.
101 *
102 * In other words, keeps track of time since the same epoch as
103 * the function which generated the initial time stamp.
104 */
105extern u64 timecounter_read(struct timecounter *tc);
106
107/**
108 * timecounter_cyc2time - convert a cycle counter to same
109 * time base as values returned by
110 * timecounter_read()
111 * @tc: Pointer to time counter.
112 * @cycle: a value returned by tc->cc->read()
113 *
114 * Cycle counts that are converted correctly as long as they
115 * fall into the interval [-1/2 max cycle count, +1/2 max cycle count],
116 * with "max cycle count" == cs->mask+1.
117 *
118 * This allows conversion of cycle counter values which were generated
119 * in the past.
120 */
121extern u64 timecounter_cyc2time(struct timecounter *tc,
122 cycle_t cycle_tstamp);
123
124/**
25 * struct clocksource - hardware abstraction for a free running counter 125 * struct clocksource - hardware abstraction for a free running counter
26 * Provides mostly state-free accessors to the underlying hardware. 126 * Provides mostly state-free accessors to the underlying hardware.
127 * This is the structure used for system time.
27 * 128 *
28 * @name: ptr to clocksource name 129 * @name: ptr to clocksource name
29 * @list: list head for registration 130 * @list: list head for registration
diff --git a/include/linux/com20020.h b/include/linux/com20020.h
index ac6d9a43e085..5dcfb944b6ce 100644
--- a/include/linux/com20020.h
+++ b/include/linux/com20020.h
@@ -29,6 +29,7 @@
29 29
30int com20020_check(struct net_device *dev); 30int com20020_check(struct net_device *dev);
31int com20020_found(struct net_device *dev, int shared); 31int com20020_found(struct net_device *dev, int shared);
32extern const struct net_device_ops com20020_netdev_ops;
32 33
33/* The number of low I/O ports used by the card. */ 34/* The number of low I/O ports used by the card. */
34#define ARCNET_TOTAL_SIZE 8 35#define ARCNET_TOTAL_SIZE 8
diff --git a/include/linux/connector.h b/include/linux/connector.h
index 34f2789d9b9b..fc65d219d88c 100644
--- a/include/linux/connector.h
+++ b/include/linux/connector.h
@@ -109,6 +109,12 @@ struct cn_queue_dev {
109 unsigned char name[CN_CBQ_NAMELEN]; 109 unsigned char name[CN_CBQ_NAMELEN];
110 110
111 struct workqueue_struct *cn_queue; 111 struct workqueue_struct *cn_queue;
112 /* Sent to kevent to create cn_queue only when needed */
113 struct work_struct wq_creation;
114 /* Tell if the wq_creation job is pending/completed */
115 atomic_t wq_requested;
116 /* Wait for cn_queue to be created */
117 wait_queue_head_t wq_created;
112 118
113 struct list_head queue_list; 119 struct list_head queue_list;
114 spinlock_t queue_lock; 120 spinlock_t queue_lock;
@@ -164,6 +170,8 @@ int cn_netlink_send(struct cn_msg *, u32, gfp_t);
164int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(void *)); 170int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(void *));
165void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id); 171void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id);
166 172
173int queue_cn_work(struct cn_callback_entry *cbq, struct work_struct *work);
174
167struct cn_queue_dev *cn_queue_alloc_dev(char *name, struct sock *); 175struct cn_queue_dev *cn_queue_alloc_dev(char *name, struct sock *);
168void cn_queue_free_dev(struct cn_queue_dev *dev); 176void cn_queue_free_dev(struct cn_queue_dev *dev);
169 177
diff --git a/include/linux/console.h b/include/linux/console.h
index a67a90cf8268..dcca5339ceb3 100644
--- a/include/linux/console.h
+++ b/include/linux/console.h
@@ -137,8 +137,8 @@ extern void resume_console(void);
137int mda_console_init(void); 137int mda_console_init(void);
138void prom_con_init(void); 138void prom_con_init(void);
139 139
140void vcs_make_sysfs(struct tty_struct *tty); 140void vcs_make_sysfs(int index);
141void vcs_remove_sysfs(struct tty_struct *tty); 141void vcs_remove_sysfs(int index);
142 142
143/* Some debug stub to catch some of the obvious races in the VT code */ 143/* Some debug stub to catch some of the obvious races in the VT code */
144#if 1 144#if 1
diff --git a/include/linux/crypto.h b/include/linux/crypto.h
index 1f2e9020acc6..ec29fa268b94 100644
--- a/include/linux/crypto.h
+++ b/include/linux/crypto.h
@@ -40,6 +40,7 @@
40#define CRYPTO_ALG_TYPE_SHASH 0x00000009 40#define CRYPTO_ALG_TYPE_SHASH 0x00000009
41#define CRYPTO_ALG_TYPE_AHASH 0x0000000a 41#define CRYPTO_ALG_TYPE_AHASH 0x0000000a
42#define CRYPTO_ALG_TYPE_RNG 0x0000000c 42#define CRYPTO_ALG_TYPE_RNG 0x0000000c
43#define CRYPTO_ALG_TYPE_PCOMPRESS 0x0000000f
43 44
44#define CRYPTO_ALG_TYPE_HASH_MASK 0x0000000e 45#define CRYPTO_ALG_TYPE_HASH_MASK 0x0000000e
45#define CRYPTO_ALG_TYPE_AHASH_MASK 0x0000000c 46#define CRYPTO_ALG_TYPE_AHASH_MASK 0x0000000c
@@ -548,9 +549,6 @@ struct crypto_attr_u32 {
548 * Transform user interface. 549 * Transform user interface.
549 */ 550 */
550 551
551struct crypto_tfm *crypto_alloc_tfm(const char *alg_name,
552 const struct crypto_type *frontend,
553 u32 type, u32 mask);
554struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask); 552struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask);
555void crypto_destroy_tfm(void *mem, struct crypto_tfm *tfm); 553void crypto_destroy_tfm(void *mem, struct crypto_tfm *tfm);
556 554
diff --git a/include/linux/dca.h b/include/linux/dca.h
index b00a753eda53..9c20c7e87d0a 100644
--- a/include/linux/dca.h
+++ b/include/linux/dca.h
@@ -1,3 +1,23 @@
1/*
2 * Copyright(c) 2007 - 2009 Intel Corporation. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the Free
6 * Software Foundation; either version 2 of the License, or (at your option)
7 * any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc., 59
16 * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 *
18 * The full GNU General Public License is included in this distribution in the
19 * file called COPYING.
20 */
1#ifndef DCA_H 21#ifndef DCA_H
2#define DCA_H 22#define DCA_H
3/* DCA Provider API */ 23/* DCA Provider API */
diff --git a/include/linux/dccp.h b/include/linux/dccp.h
index 61734e27abb7..7434a8353e23 100644
--- a/include/linux/dccp.h
+++ b/include/linux/dccp.h
@@ -355,46 +355,6 @@ static inline unsigned int dccp_hdr_len(const struct sk_buff *skb)
355 return __dccp_hdr_len(dccp_hdr(skb)); 355 return __dccp_hdr_len(dccp_hdr(skb));
356} 356}
357 357
358
359/* initial values for each feature */
360#define DCCPF_INITIAL_SEQUENCE_WINDOW 100
361#define DCCPF_INITIAL_ACK_RATIO 2
362#define DCCPF_INITIAL_CCID DCCPC_CCID2
363/* FIXME: for now we're default to 1 but it should really be 0 */
364#define DCCPF_INITIAL_SEND_NDP_COUNT 1
365
366/**
367 * struct dccp_minisock - Minimal DCCP connection representation
368 *
369 * Will be used to pass the state from dccp_request_sock to dccp_sock.
370 *
371 * @dccpms_sequence_window - Sequence Window Feature (section 7.5.2)
372 * @dccpms_pending - List of features being negotiated
373 * @dccpms_conf -
374 */
375struct dccp_minisock {
376 __u64 dccpms_sequence_window;
377 struct list_head dccpms_pending;
378 struct list_head dccpms_conf;
379};
380
381struct dccp_opt_conf {
382 __u8 *dccpoc_val;
383 __u8 dccpoc_len;
384};
385
386struct dccp_opt_pend {
387 struct list_head dccpop_node;
388 __u8 dccpop_type;
389 __u8 dccpop_feat;
390 __u8 *dccpop_val;
391 __u8 dccpop_len;
392 int dccpop_conf;
393 struct dccp_opt_conf *dccpop_sc;
394};
395
396extern void dccp_minisock_init(struct dccp_minisock *dmsk);
397
398/** 358/**
399 * struct dccp_request_sock - represent DCCP-specific connection request 359 * struct dccp_request_sock - represent DCCP-specific connection request
400 * @dreq_inet_rsk: structure inherited from 360 * @dreq_inet_rsk: structure inherited from
@@ -483,13 +443,14 @@ struct dccp_ackvec;
483 * @dccps_timestamp_time - time of receiving latest @dccps_timestamp_echo 443 * @dccps_timestamp_time - time of receiving latest @dccps_timestamp_echo
484 * @dccps_l_ack_ratio - feature-local Ack Ratio 444 * @dccps_l_ack_ratio - feature-local Ack Ratio
485 * @dccps_r_ack_ratio - feature-remote Ack Ratio 445 * @dccps_r_ack_ratio - feature-remote Ack Ratio
446 * @dccps_l_seq_win - local Sequence Window (influences ack number validity)
447 * @dccps_r_seq_win - remote Sequence Window (influences seq number validity)
486 * @dccps_pcslen - sender partial checksum coverage (via sockopt) 448 * @dccps_pcslen - sender partial checksum coverage (via sockopt)
487 * @dccps_pcrlen - receiver partial checksum coverage (via sockopt) 449 * @dccps_pcrlen - receiver partial checksum coverage (via sockopt)
488 * @dccps_send_ndp_count - local Send NDP Count feature (7.7.2) 450 * @dccps_send_ndp_count - local Send NDP Count feature (7.7.2)
489 * @dccps_ndp_count - number of Non Data Packets since last data packet 451 * @dccps_ndp_count - number of Non Data Packets since last data packet
490 * @dccps_mss_cache - current value of MSS (path MTU minus header sizes) 452 * @dccps_mss_cache - current value of MSS (path MTU minus header sizes)
491 * @dccps_rate_last - timestamp for rate-limiting DCCP-Sync (RFC 4340, 7.5.4) 453 * @dccps_rate_last - timestamp for rate-limiting DCCP-Sync (RFC 4340, 7.5.4)
492 * @dccps_minisock - associated minisock (accessed via dccp_msk)
493 * @dccps_featneg - tracks feature-negotiation state (mostly during handshake) 454 * @dccps_featneg - tracks feature-negotiation state (mostly during handshake)
494 * @dccps_hc_rx_ackvec - rx half connection ack vector 455 * @dccps_hc_rx_ackvec - rx half connection ack vector
495 * @dccps_hc_rx_ccid - CCID used for the receiver (or receiving half-connection) 456 * @dccps_hc_rx_ccid - CCID used for the receiver (or receiving half-connection)
@@ -523,12 +484,13 @@ struct dccp_sock {
523 __u32 dccps_timestamp_time; 484 __u32 dccps_timestamp_time;
524 __u16 dccps_l_ack_ratio; 485 __u16 dccps_l_ack_ratio;
525 __u16 dccps_r_ack_ratio; 486 __u16 dccps_r_ack_ratio;
487 __u64 dccps_l_seq_win:48;
488 __u64 dccps_r_seq_win:48;
526 __u8 dccps_pcslen:4; 489 __u8 dccps_pcslen:4;
527 __u8 dccps_pcrlen:4; 490 __u8 dccps_pcrlen:4;
528 __u8 dccps_send_ndp_count:1; 491 __u8 dccps_send_ndp_count:1;
529 __u64 dccps_ndp_count:48; 492 __u64 dccps_ndp_count:48;
530 unsigned long dccps_rate_last; 493 unsigned long dccps_rate_last;
531 struct dccp_minisock dccps_minisock;
532 struct list_head dccps_featneg; 494 struct list_head dccps_featneg;
533 struct dccp_ackvec *dccps_hc_rx_ackvec; 495 struct dccp_ackvec *dccps_hc_rx_ackvec;
534 struct ccid *dccps_hc_rx_ccid; 496 struct ccid *dccps_hc_rx_ccid;
@@ -546,11 +508,6 @@ static inline struct dccp_sock *dccp_sk(const struct sock *sk)
546 return (struct dccp_sock *)sk; 508 return (struct dccp_sock *)sk;
547} 509}
548 510
549static inline struct dccp_minisock *dccp_msk(const struct sock *sk)
550{
551 return (struct dccp_minisock *)&dccp_sk(sk)->dccps_minisock;
552}
553
554static inline const char *dccp_role(const struct sock *sk) 511static inline const char *dccp_role(const struct sock *sk)
555{ 512{
556 switch (dccp_sk(sk)->dccps_role) { 513 switch (dccp_sk(sk)->dccps_role) {
diff --git a/include/linux/device.h b/include/linux/device.h
index 47f343c7bdda..2918c0e8fdfd 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -28,6 +28,7 @@
28#define BUS_ID_SIZE 20 28#define BUS_ID_SIZE 20
29 29
30struct device; 30struct device;
31struct device_private;
31struct device_driver; 32struct device_driver;
32struct driver_private; 33struct driver_private;
33struct class; 34struct class;
@@ -147,7 +148,7 @@ extern void put_driver(struct device_driver *drv);
147extern struct device_driver *driver_find(const char *name, 148extern struct device_driver *driver_find(const char *name,
148 struct bus_type *bus); 149 struct bus_type *bus);
149extern int driver_probe_done(void); 150extern int driver_probe_done(void);
150extern int wait_for_device_probe(void); 151extern void wait_for_device_probe(void);
151 152
152 153
153/* sysfs interface for exporting driver attributes */ 154/* sysfs interface for exporting driver attributes */
@@ -367,15 +368,11 @@ struct device_dma_parameters {
367}; 368};
368 369
369struct device { 370struct device {
370 struct klist klist_children;
371 struct klist_node knode_parent; /* node in sibling list */
372 struct klist_node knode_driver;
373 struct klist_node knode_bus;
374 struct device *parent; 371 struct device *parent;
375 372
373 struct device_private *p;
374
376 struct kobject kobj; 375 struct kobject kobj;
377 char bus_id[BUS_ID_SIZE]; /* position on parent bus */
378 unsigned uevent_suppress:1;
379 const char *init_name; /* initial name of the device */ 376 const char *init_name; /* initial name of the device */
380 struct device_type *type; 377 struct device_type *type;
381 378
@@ -387,8 +384,13 @@ struct device {
387 struct device_driver *driver; /* which driver has allocated this 384 struct device_driver *driver; /* which driver has allocated this
388 device */ 385 device */
389 void *driver_data; /* data private to the driver */ 386 void *driver_data; /* data private to the driver */
390 void *platform_data; /* Platform specific data, device 387
391 core doesn't touch it */ 388 void *platform_data; /* We will remove platform_data
389 field if all platform devices
390 pass its platform specific data
391 from platform_device->platform_data,
392 other kind of devices should not
393 use platform_data. */
392 struct dev_pm_info power; 394 struct dev_pm_info power;
393 395
394#ifdef CONFIG_NUMA 396#ifdef CONFIG_NUMA
@@ -427,8 +429,7 @@ struct device {
427 429
428static inline const char *dev_name(const struct device *dev) 430static inline const char *dev_name(const struct device *dev)
429{ 431{
430 /* will be changed into kobject_name(&dev->kobj) in the near future */ 432 return kobject_name(&dev->kobj);
431 return dev->bus_id;
432} 433}
433 434
434extern int dev_set_name(struct device *dev, const char *name, ...) 435extern int dev_set_name(struct device *dev, const char *name, ...)
@@ -463,6 +464,16 @@ static inline void dev_set_drvdata(struct device *dev, void *data)
463 dev->driver_data = data; 464 dev->driver_data = data;
464} 465}
465 466
467static inline unsigned int dev_get_uevent_suppress(const struct device *dev)
468{
469 return dev->kobj.uevent_suppress;
470}
471
472static inline void dev_set_uevent_suppress(struct device *dev, int val)
473{
474 dev->kobj.uevent_suppress = val;
475}
476
466static inline int device_is_registered(struct device *dev) 477static inline int device_is_registered(struct device *dev)
467{ 478{
468 return dev->kobj.state_in_sysfs; 479 return dev->kobj.state_in_sysfs;
@@ -483,7 +494,8 @@ extern int device_for_each_child(struct device *dev, void *data,
483extern struct device *device_find_child(struct device *dev, void *data, 494extern struct device *device_find_child(struct device *dev, void *data,
484 int (*match)(struct device *dev, void *data)); 495 int (*match)(struct device *dev, void *data));
485extern int device_rename(struct device *dev, char *new_name); 496extern int device_rename(struct device *dev, char *new_name);
486extern int device_move(struct device *dev, struct device *new_parent); 497extern int device_move(struct device *dev, struct device *new_parent,
498 enum dpm_order dpm_order);
487 499
488/* 500/*
489 * Root device objects for grouping under /sys/devices 501 * Root device objects for grouping under /sys/devices
@@ -570,7 +582,7 @@ extern const char *dev_driver_string(const struct device *dev);
570#if defined(DEBUG) 582#if defined(DEBUG)
571#define dev_dbg(dev, format, arg...) \ 583#define dev_dbg(dev, format, arg...) \
572 dev_printk(KERN_DEBUG , dev , format , ## arg) 584 dev_printk(KERN_DEBUG , dev , format , ## arg)
573#elif defined(CONFIG_DYNAMIC_PRINTK_DEBUG) 585#elif defined(CONFIG_DYNAMIC_DEBUG)
574#define dev_dbg(dev, format, ...) do { \ 586#define dev_dbg(dev, format, ...) do { \
575 dynamic_dev_dbg(dev, format, ##__VA_ARGS__); \ 587 dynamic_dev_dbg(dev, format, ##__VA_ARGS__); \
576 } while (0) 588 } while (0)
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
new file mode 100644
index 000000000000..baabf33be244
--- /dev/null
+++ b/include/linux/dynamic_debug.h
@@ -0,0 +1,88 @@
1#ifndef _DYNAMIC_DEBUG_H
2#define _DYNAMIC_DEBUG_H
3
4/* dynamic_printk_enabled, and dynamic_printk_enabled2 are bitmasks in which
5 * bit n is set to 1 if any modname hashes into the bucket n, 0 otherwise. They
6 * use independent hash functions, to reduce the chance of false positives.
7 */
8extern long long dynamic_debug_enabled;
9extern long long dynamic_debug_enabled2;
10
11/*
12 * An instance of this structure is created in a special
13 * ELF section at every dynamic debug callsite. At runtime,
14 * the special section is treated as an array of these.
15 */
16struct _ddebug {
17 /*
18 * These fields are used to drive the user interface
19 * for selecting and displaying debug callsites.
20 */
21 const char *modname;
22 const char *function;
23 const char *filename;
24 const char *format;
25 char primary_hash;
26 char secondary_hash;
27 unsigned int lineno:24;
28 /*
29 * The flags field controls the behaviour at the callsite.
30 * The bits here are changed dynamically when the user
31 * writes commands to <debugfs>/dynamic_debug/ddebug
32 */
33#define _DPRINTK_FLAGS_PRINT (1<<0) /* printk() a message using the format */
34#define _DPRINTK_FLAGS_DEFAULT 0
35 unsigned int flags:8;
36} __attribute__((aligned(8)));
37
38
39int ddebug_add_module(struct _ddebug *tab, unsigned int n,
40 const char *modname);
41
42#if defined(CONFIG_DYNAMIC_DEBUG)
43extern int ddebug_remove_module(char *mod_name);
44
45#define __dynamic_dbg_enabled(dd) ({ \
46 int __ret = 0; \
47 if (unlikely((dynamic_debug_enabled & (1LL << DEBUG_HASH)) && \
48 (dynamic_debug_enabled2 & (1LL << DEBUG_HASH2)))) \
49 if (unlikely(dd.flags)) \
50 __ret = 1; \
51 __ret; })
52
53#define dynamic_pr_debug(fmt, ...) do { \
54 static struct _ddebug descriptor \
55 __used \
56 __attribute__((section("__verbose"), aligned(8))) = \
57 { KBUILD_MODNAME, __func__, __FILE__, fmt, DEBUG_HASH, \
58 DEBUG_HASH2, __LINE__, _DPRINTK_FLAGS_DEFAULT }; \
59 if (__dynamic_dbg_enabled(descriptor)) \
60 printk(KERN_DEBUG KBUILD_MODNAME ":" pr_fmt(fmt), \
61 ##__VA_ARGS__); \
62 } while (0)
63
64
65#define dynamic_dev_dbg(dev, fmt, ...) do { \
66 static struct _ddebug descriptor \
67 __used \
68 __attribute__((section("__verbose"), aligned(8))) = \
69 { KBUILD_MODNAME, __func__, __FILE__, fmt, DEBUG_HASH, \
70 DEBUG_HASH2, __LINE__, _DPRINTK_FLAGS_DEFAULT }; \
71 if (__dynamic_dbg_enabled(descriptor)) \
72 dev_printk(KERN_DEBUG, dev, \
73 KBUILD_MODNAME ": " pr_fmt(fmt),\
74 ##__VA_ARGS__); \
75 } while (0)
76
77#else
78
79static inline int ddebug_remove_module(char *mod)
80{
81 return 0;
82}
83
84#define dynamic_pr_debug(fmt, ...) do { } while (0)
85#define dynamic_dev_dbg(dev, format, ...) do { } while (0)
86#endif
87
88#endif
diff --git a/include/linux/dynamic_printk.h b/include/linux/dynamic_printk.h
deleted file mode 100644
index 2d528d009074..000000000000
--- a/include/linux/dynamic_printk.h
+++ /dev/null
@@ -1,93 +0,0 @@
1#ifndef _DYNAMIC_PRINTK_H
2#define _DYNAMIC_PRINTK_H
3
4#define DYNAMIC_DEBUG_HASH_BITS 6
5#define DEBUG_HASH_TABLE_SIZE (1 << DYNAMIC_DEBUG_HASH_BITS)
6
7#define TYPE_BOOLEAN 1
8
9#define DYNAMIC_ENABLED_ALL 0
10#define DYNAMIC_ENABLED_NONE 1
11#define DYNAMIC_ENABLED_SOME 2
12
13extern int dynamic_enabled;
14
15/* dynamic_printk_enabled, and dynamic_printk_enabled2 are bitmasks in which
16 * bit n is set to 1 if any modname hashes into the bucket n, 0 otherwise. They
17 * use independent hash functions, to reduce the chance of false positives.
18 */
19extern long long dynamic_printk_enabled;
20extern long long dynamic_printk_enabled2;
21
22struct mod_debug {
23 char *modname;
24 char *logical_modname;
25 char *flag_names;
26 int type;
27 int hash;
28 int hash2;
29} __attribute__((aligned(8)));
30
31int register_dynamic_debug_module(char *mod_name, int type, char *share_name,
32 char *flags, int hash, int hash2);
33
34#if defined(CONFIG_DYNAMIC_PRINTK_DEBUG)
35extern int unregister_dynamic_debug_module(char *mod_name);
36extern int __dynamic_dbg_enabled_helper(char *modname, int type,
37 int value, int hash);
38
39#define __dynamic_dbg_enabled(module, type, value, level, hash) ({ \
40 int __ret = 0; \
41 if (unlikely((dynamic_printk_enabled & (1LL << DEBUG_HASH)) && \
42 (dynamic_printk_enabled2 & (1LL << DEBUG_HASH2)))) \
43 __ret = __dynamic_dbg_enabled_helper(module, type, \
44 value, hash);\
45 __ret; })
46
47#define dynamic_pr_debug(fmt, ...) do { \
48 static char mod_name[] \
49 __attribute__((section("__verbose_strings"))) \
50 = KBUILD_MODNAME; \
51 static struct mod_debug descriptor \
52 __used \
53 __attribute__((section("__verbose"), aligned(8))) = \
54 { mod_name, mod_name, NULL, TYPE_BOOLEAN, DEBUG_HASH, DEBUG_HASH2 };\
55 if (__dynamic_dbg_enabled(KBUILD_MODNAME, TYPE_BOOLEAN, \
56 0, 0, DEBUG_HASH)) \
57 printk(KERN_DEBUG KBUILD_MODNAME ":" fmt, \
58 ##__VA_ARGS__); \
59 } while (0)
60
61#define dynamic_dev_dbg(dev, format, ...) do { \
62 static char mod_name[] \
63 __attribute__((section("__verbose_strings"))) \
64 = KBUILD_MODNAME; \
65 static struct mod_debug descriptor \
66 __used \
67 __attribute__((section("__verbose"), aligned(8))) = \
68 { mod_name, mod_name, NULL, TYPE_BOOLEAN, DEBUG_HASH, DEBUG_HASH2 };\
69 if (__dynamic_dbg_enabled(KBUILD_MODNAME, TYPE_BOOLEAN, \
70 0, 0, DEBUG_HASH)) \
71 dev_printk(KERN_DEBUG, dev, \
72 KBUILD_MODNAME ": " format, \
73 ##__VA_ARGS__); \
74 } while (0)
75
76#else
77
78static inline int unregister_dynamic_debug_module(const char *mod_name)
79{
80 return 0;
81}
82static inline int __dynamic_dbg_enabled_helper(char *modname, int type,
83 int value, int hash)
84{
85 return 0;
86}
87
88#define __dynamic_dbg_enabled(module, type, value, level, hash) ({ 0; })
89#define dynamic_pr_debug(fmt, ...) do { } while (0)
90#define dynamic_dev_dbg(dev, format, ...) do { } while (0)
91#endif
92
93#endif
diff --git a/include/linux/errqueue.h b/include/linux/errqueue.h
index ceb1454b6977..ec12cc74366f 100644
--- a/include/linux/errqueue.h
+++ b/include/linux/errqueue.h
@@ -18,6 +18,7 @@ struct sock_extended_err
18#define SO_EE_ORIGIN_LOCAL 1 18#define SO_EE_ORIGIN_LOCAL 1
19#define SO_EE_ORIGIN_ICMP 2 19#define SO_EE_ORIGIN_ICMP 2
20#define SO_EE_ORIGIN_ICMP6 3 20#define SO_EE_ORIGIN_ICMP6 3
21#define SO_EE_ORIGIN_TIMESTAMPING 4
21 22
22#define SO_EE_OFFENDER(ee) ((struct sockaddr*)((ee)+1)) 23#define SO_EE_OFFENDER(ee) ((struct sockaddr*)((ee)+1))
23 24
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h
index 1cb0f0b90926..a1f17abba7dc 100644
--- a/include/linux/etherdevice.h
+++ b/include/linux/etherdevice.h
@@ -184,4 +184,25 @@ static inline unsigned compare_ether_addr_64bits(const u8 addr1[6+2],
184} 184}
185#endif /* __KERNEL__ */ 185#endif /* __KERNEL__ */
186 186
187/**
188 * compare_ether_header - Compare two Ethernet headers
189 * @a: Pointer to Ethernet header
190 * @b: Pointer to Ethernet header
191 *
192 * Compare two ethernet headers, returns 0 if equal.
193 * This assumes that the network header (i.e., IP header) is 4-byte
194 * aligned OR the platform can handle unaligned access. This is the
195 * case for all packets coming into netif_receive_skb or similar
196 * entry points.
197 */
198
199static inline int compare_ether_header(const void *a, const void *b)
200{
201 u32 *a32 = (u32 *)((u8 *)a + 2);
202 u32 *b32 = (u32 *)((u8 *)b + 2);
203
204 return (*(u16 *)a ^ *(u16 *)b) | (a32[0] ^ b32[0]) |
205 (a32[1] ^ b32[1]) | (a32[2] ^ b32[2]);
206}
207
187#endif /* _LINUX_ETHERDEVICE_H */ 208#endif /* _LINUX_ETHERDEVICE_H */
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
index 27c67a542235..131b127b70f8 100644
--- a/include/linux/ethtool.h
+++ b/include/linux/ethtool.h
@@ -7,6 +7,7 @@
7 * Portions Copyright 2002 Intel (eli.kupermann@intel.com, 7 * Portions Copyright 2002 Intel (eli.kupermann@intel.com,
8 * christopher.leech@intel.com, 8 * christopher.leech@intel.com,
9 * scott.feldman@intel.com) 9 * scott.feldman@intel.com)
10 * Portions Copyright (C) Sun Microsystems 2008
10 */ 11 */
11 12
12#ifndef _LINUX_ETHTOOL_H 13#ifndef _LINUX_ETHTOOL_H
@@ -287,10 +288,75 @@ enum ethtool_flags {
287 ETH_FLAG_LRO = (1 << 15), /* LRO is enabled */ 288 ETH_FLAG_LRO = (1 << 15), /* LRO is enabled */
288}; 289};
289 290
290struct ethtool_rxnfc { 291/* The following structures are for supporting RX network flow
291 __u32 cmd; 292 * classification configuration. Note, all multibyte fields, e.g.,
293 * ip4src, ip4dst, psrc, pdst, spi, etc. are expected to be in network
294 * byte order.
295 */
296struct ethtool_tcpip4_spec {
297 __be32 ip4src;
298 __be32 ip4dst;
299 __be16 psrc;
300 __be16 pdst;
301 __u8 tos;
302};
303
304struct ethtool_ah_espip4_spec {
305 __be32 ip4src;
306 __be32 ip4dst;
307 __be32 spi;
308 __u8 tos;
309};
310
311struct ethtool_rawip4_spec {
312 __be32 ip4src;
313 __be32 ip4dst;
314 __u8 hdata[64];
315};
316
317struct ethtool_ether_spec {
318 __be16 ether_type;
319 __u8 frame_size;
320 __u8 eframe[16];
321};
322
323#define ETH_RX_NFC_IP4 1
324#define ETH_RX_NFC_IP6 2
325
326struct ethtool_usrip4_spec {
327 __be32 ip4src;
328 __be32 ip4dst;
329 __be32 l4_4_bytes;
330 __u8 tos;
331 __u8 ip_ver;
332 __u8 proto;
333};
334
335struct ethtool_rx_flow_spec {
292 __u32 flow_type; 336 __u32 flow_type;
293 __u64 data; 337 union {
338 struct ethtool_tcpip4_spec tcp_ip4_spec;
339 struct ethtool_tcpip4_spec udp_ip4_spec;
340 struct ethtool_tcpip4_spec sctp_ip4_spec;
341 struct ethtool_ah_espip4_spec ah_ip4_spec;
342 struct ethtool_ah_espip4_spec esp_ip4_spec;
343 struct ethtool_rawip4_spec raw_ip4_spec;
344 struct ethtool_ether_spec ether_spec;
345 struct ethtool_usrip4_spec usr_ip4_spec;
346 __u8 hdata[64];
347 } h_u, m_u; /* entry, mask */
348 __u64 ring_cookie;
349 __u32 location;
350};
351
352struct ethtool_rxnfc {
353 __u32 cmd;
354 __u32 flow_type;
355 /* The rx flow hash value or the rule DB size */
356 __u64 data;
357 struct ethtool_rx_flow_spec fs;
358 __u32 rule_cnt;
359 __u32 rule_locs[0];
294}; 360};
295 361
296#ifdef __KERNEL__ 362#ifdef __KERNEL__
@@ -417,8 +483,8 @@ struct ethtool_ops {
417 /* the following hooks are obsolete */ 483 /* the following hooks are obsolete */
418 int (*self_test_count)(struct net_device *);/* use get_sset_count */ 484 int (*self_test_count)(struct net_device *);/* use get_sset_count */
419 int (*get_stats_count)(struct net_device *);/* use get_sset_count */ 485 int (*get_stats_count)(struct net_device *);/* use get_sset_count */
420 int (*get_rxhash)(struct net_device *, struct ethtool_rxnfc *); 486 int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *);
421 int (*set_rxhash)(struct net_device *, struct ethtool_rxnfc *); 487 int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
422}; 488};
423#endif /* __KERNEL__ */ 489#endif /* __KERNEL__ */
424 490
@@ -469,6 +535,12 @@ struct ethtool_ops {
469#define ETHTOOL_SRXFH 0x0000002a /* Set RX flow hash configuration */ 535#define ETHTOOL_SRXFH 0x0000002a /* Set RX flow hash configuration */
470#define ETHTOOL_GGRO 0x0000002b /* Get GRO enable (ethtool_value) */ 536#define ETHTOOL_GGRO 0x0000002b /* Get GRO enable (ethtool_value) */
471#define ETHTOOL_SGRO 0x0000002c /* Set GRO enable (ethtool_value) */ 537#define ETHTOOL_SGRO 0x0000002c /* Set GRO enable (ethtool_value) */
538#define ETHTOOL_GRXRINGS 0x0000002d /* Get RX rings available for LB */
539#define ETHTOOL_GRXCLSRLCNT 0x0000002e /* Get RX class rule count */
540#define ETHTOOL_GRXCLSRULE 0x0000002f /* Get RX classification rule */
541#define ETHTOOL_GRXCLSRLALL 0x00000030 /* Get all RX classification rule */
542#define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */
543#define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */
472 544
473/* compatibility with older code */ 545/* compatibility with older code */
474#define SPARC_ETH_GSET ETHTOOL_GSET 546#define SPARC_ETH_GSET ETHTOOL_GSET
@@ -565,9 +637,13 @@ struct ethtool_ops {
565#define UDP_V6_FLOW 0x06 637#define UDP_V6_FLOW 0x06
566#define SCTP_V6_FLOW 0x07 638#define SCTP_V6_FLOW 0x07
567#define AH_ESP_V6_FLOW 0x08 639#define AH_ESP_V6_FLOW 0x08
640#define AH_V4_FLOW 0x09
641#define ESP_V4_FLOW 0x0a
642#define AH_V6_FLOW 0x0b
643#define ESP_V6_FLOW 0x0c
644#define IP_USER_FLOW 0x0d
568 645
569/* L3-L4 network traffic flow hash options */ 646/* L3-L4 network traffic flow hash options */
570#define RXH_DEV_PORT (1 << 0)
571#define RXH_L2DA (1 << 1) 647#define RXH_L2DA (1 << 1)
572#define RXH_VLAN (1 << 2) 648#define RXH_VLAN (1 << 2)
573#define RXH_L3_PROTO (1 << 3) 649#define RXH_L3_PROTO (1 << 3)
@@ -577,5 +653,6 @@ struct ethtool_ops {
577#define RXH_L4_B_2_3 (1 << 7) /* dst port in case of TCP/UDP/SCTP */ 653#define RXH_L4_B_2_3 (1 << 7) /* dst port in case of TCP/UDP/SCTP */
578#define RXH_DISCARD (1 << 31) 654#define RXH_DISCARD (1 << 31)
579 655
656#define RX_CLS_FLOW_DISC 0xffffffffffffffffULL
580 657
581#endif /* _LINUX_ETHTOOL_H */ 658#endif /* _LINUX_ETHTOOL_H */
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 92734c0012e6..5bc81c4a98c1 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -141,6 +141,7 @@ struct inodes_stat_t {
141#define MS_RELATIME (1<<21) /* Update atime relative to mtime/ctime. */ 141#define MS_RELATIME (1<<21) /* Update atime relative to mtime/ctime. */
142#define MS_KERNMOUNT (1<<22) /* this is a kern_mount call */ 142#define MS_KERNMOUNT (1<<22) /* this is a kern_mount call */
143#define MS_I_VERSION (1<<23) /* Update inode I_version field */ 143#define MS_I_VERSION (1<<23) /* Update inode I_version field */
144#define MS_STRICTATIME (1<<24) /* Always perform atime updates */
144#define MS_ACTIVE (1<<30) 145#define MS_ACTIVE (1<<30)
145#define MS_NOUSER (1<<31) 146#define MS_NOUSER (1<<31)
146 147
diff --git a/include/linux/gen_stats.h b/include/linux/gen_stats.h
index 13f4e74609ac..0ffa41df0ee8 100644
--- a/include/linux/gen_stats.h
+++ b/include/linux/gen_stats.h
@@ -22,7 +22,7 @@ struct gnet_stats_basic
22{ 22{
23 __u64 bytes; 23 __u64 bytes;
24 __u32 packets; 24 __u32 packets;
25}; 25} __attribute__ ((packed));
26 26
27/** 27/**
28 * struct gnet_stats_rate_est - rate estimator 28 * struct gnet_stats_rate_est - rate estimator
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index 16948eaecae3..634c53028fb8 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -333,11 +333,10 @@ static inline void part_dec_in_flight(struct hd_struct *part)
333 part_to_disk(part)->part0.in_flight--; 333 part_to_disk(part)->part0.in_flight--;
334} 334}
335 335
336/* drivers/block/ll_rw_blk.c */ 336/* block/blk-core.c */
337extern void part_round_stats(int cpu, struct hd_struct *part); 337extern void part_round_stats(int cpu, struct hd_struct *part);
338 338
339/* drivers/block/genhd.c */ 339/* block/genhd.c */
340extern int get_blkdev_list(char *, int);
341extern void add_disk(struct gendisk *disk); 340extern void add_disk(struct gendisk *disk);
342extern void del_gendisk(struct gendisk *gp); 341extern void del_gendisk(struct gendisk *gp);
343extern void unlink_gendisk(struct gendisk *gp); 342extern void unlink_gendisk(struct gendisk *gp);
diff --git a/include/linux/hdlc.h b/include/linux/hdlc.h
index fd47a151665e..6a6e701f1631 100644
--- a/include/linux/hdlc.h
+++ b/include/linux/hdlc.h
@@ -38,6 +38,7 @@ struct hdlc_proto {
38 int (*ioctl)(struct net_device *dev, struct ifreq *ifr); 38 int (*ioctl)(struct net_device *dev, struct ifreq *ifr);
39 __be16 (*type_trans)(struct sk_buff *skb, struct net_device *dev); 39 __be16 (*type_trans)(struct sk_buff *skb, struct net_device *dev);
40 int (*netif_rx)(struct sk_buff *skb); 40 int (*netif_rx)(struct sk_buff *skb);
41 int (*xmit)(struct sk_buff *skb, struct net_device *dev);
41 struct module *module; 42 struct module *module;
42 struct hdlc_proto *next; /* next protocol in the list */ 43 struct hdlc_proto *next; /* next protocol in the list */
43}; 44};
@@ -102,6 +103,10 @@ static __inline__ void debug_frame(const struct sk_buff *skb)
102int hdlc_open(struct net_device *dev); 103int hdlc_open(struct net_device *dev);
103/* Must be called by hardware driver when HDLC device is being closed */ 104/* Must be called by hardware driver when HDLC device is being closed */
104void hdlc_close(struct net_device *dev); 105void hdlc_close(struct net_device *dev);
106/* May be used by hardware driver */
107int hdlc_change_mtu(struct net_device *dev, int new_mtu);
108/* Must be pointed to by hw driver's dev->netdev_ops->ndo_start_xmit */
109int hdlc_start_xmit(struct sk_buff *skb, struct net_device *dev);
105 110
106int attach_hdlc_protocol(struct net_device *dev, struct hdlc_proto *proto, 111int attach_hdlc_protocol(struct net_device *dev, struct hdlc_proto *proto,
107 size_t size); 112 size_t size);
diff --git a/include/linux/hdlcdrv.h b/include/linux/hdlcdrv.h
index bf6302f6b5f8..c010b4a785b8 100644
--- a/include/linux/hdlcdrv.h
+++ b/include/linux/hdlcdrv.h
@@ -215,7 +215,7 @@ struct hdlcdrv_state {
215 215
216 struct hdlcdrv_hdlctx { 216 struct hdlcdrv_hdlctx {
217 struct hdlcdrv_hdlcbuffer hbuf; 217 struct hdlcdrv_hdlcbuffer hbuf;
218 long in_hdlc_tx; 218 unsigned long in_hdlc_tx;
219 /* 219 /*
220 * 0 = send flags 220 * 0 = send flags
221 * 1 = send txtail (flags) 221 * 1 = send txtail (flags)
@@ -241,7 +241,6 @@ struct hdlcdrv_state {
241 struct hdlcdrv_bitbuffer bitbuf_hdlc; 241 struct hdlcdrv_bitbuffer bitbuf_hdlc;
242#endif /* HDLCDRV_DEBUG */ 242#endif /* HDLCDRV_DEBUG */
243 243
244 struct net_device_stats stats;
245 int ptt_keyed; 244 int ptt_keyed;
246 245
247 /* queued skb for transmission */ 246 /* queued skb for transmission */
diff --git a/include/linux/ibmtr.h b/include/linux/ibmtr.h
index 1c7a0dd5536a..06695b74d405 100644
--- a/include/linux/ibmtr.h
+++ b/include/linux/ibmtr.h
@@ -207,7 +207,7 @@ struct tok_info {
207 unsigned short exsap_station_id; 207 unsigned short exsap_station_id;
208 unsigned short global_int_enable; 208 unsigned short global_int_enable;
209 struct sk_buff *current_skb; 209 struct sk_buff *current_skb;
210 struct net_device_stats tr_stats; 210
211 unsigned char auto_speedsave; 211 unsigned char auto_speedsave;
212 open_state open_status, sap_status; 212 open_state open_status, sap_status;
213 enum {MANUAL, AUTOMATIC} open_mode; 213 enum {MANUAL, AUTOMATIC} open_mode;
diff --git a/include/linux/ide.h b/include/linux/ide.h
index 25087aead657..854eba8b2ba3 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -26,7 +26,7 @@
26#include <asm/io.h> 26#include <asm/io.h>
27#include <asm/mutex.h> 27#include <asm/mutex.h>
28 28
29#if defined(CONFIG_CRIS) || defined(CONFIG_FRV) 29#if defined(CONFIG_CRIS) || defined(CONFIG_FRV) || defined(CONFIG_MN10300)
30# define SUPPORT_VLB_SYNC 0 30# define SUPPORT_VLB_SYNC 0
31#else 31#else
32# define SUPPORT_VLB_SYNC 1 32# define SUPPORT_VLB_SYNC 1
@@ -193,24 +193,8 @@ static inline void ide_std_init_ports(hw_regs_t *hw,
193 hw->io_ports.ctl_addr = ctl_addr; 193 hw->io_ports.ctl_addr = ctl_addr;
194} 194}
195 195
196/* for IDE PCI controllers in legacy mode, temporary */ 196#if defined(CONFIG_ARM) || defined(CONFIG_M68K) || defined(CONFIG_MIPS) || \
197static inline int __ide_default_irq(unsigned long base) 197 defined(CONFIG_PARISC) || defined(CONFIG_PPC) || defined(CONFIG_SPARC)
198{
199 switch (base) {
200#ifdef CONFIG_IA64
201 case 0x1f0: return isa_irq_to_vector(14);
202 case 0x170: return isa_irq_to_vector(15);
203#else
204 case 0x1f0: return 14;
205 case 0x170: return 15;
206#endif
207 }
208 return 0;
209}
210
211#if defined(CONFIG_ARM) || defined(CONFIG_FRV) || defined(CONFIG_M68K) || \
212 defined(CONFIG_MIPS) || defined(CONFIG_MN10300) || defined(CONFIG_PARISC) \
213 || defined(CONFIG_PPC) || defined(CONFIG_SPARC) || defined(CONFIG_SPARC64)
214#include <asm/ide.h> 198#include <asm/ide.h>
215#else 199#else
216#include <asm-generic/ide_iops.h> 200#include <asm-generic/ide_iops.h>
@@ -866,7 +850,7 @@ struct ide_host {
866 ide_hwif_t *ports[MAX_HOST_PORTS + 1]; 850 ide_hwif_t *ports[MAX_HOST_PORTS + 1];
867 unsigned int n_ports; 851 unsigned int n_ports;
868 struct device *dev[2]; 852 struct device *dev[2];
869 unsigned int (*init_chipset)(struct pci_dev *); 853 int (*init_chipset)(struct pci_dev *);
870 irq_handler_t irq_handler; 854 irq_handler_t irq_handler;
871 unsigned long host_flags; 855 unsigned long host_flags;
872 void *host_priv; 856 void *host_priv;
@@ -1146,11 +1130,14 @@ int generic_ide_ioctl(ide_drive_t *, struct block_device *, unsigned, unsigned l
1146extern int ide_vlb_clk; 1130extern int ide_vlb_clk;
1147extern int ide_pci_clk; 1131extern int ide_pci_clk;
1148 1132
1149extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs); 1133int ide_end_request(ide_drive_t *, int, int);
1150int ide_end_dequeued_request(ide_drive_t *drive, struct request *rq, 1134int ide_end_dequeued_request(ide_drive_t *, struct request *, int, int);
1151 int uptodate, int nr_sectors); 1135void ide_kill_rq(ide_drive_t *, struct request *);
1152 1136
1153extern void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry); 1137void __ide_set_handler(ide_drive_t *, ide_handler_t *, unsigned int,
1138 ide_expiry_t *);
1139void ide_set_handler(ide_drive_t *, ide_handler_t *, unsigned int,
1140 ide_expiry_t *);
1154 1141
1155void ide_execute_command(ide_drive_t *, u8, ide_handler_t *, unsigned int, 1142void ide_execute_command(ide_drive_t *, u8, ide_handler_t *, unsigned int,
1156 ide_expiry_t *); 1143 ide_expiry_t *);
@@ -1169,13 +1156,14 @@ int ide_busy_sleep(ide_hwif_t *, unsigned long, int);
1169 1156
1170int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); 1157int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long);
1171 1158
1159ide_startstop_t ide_do_park_unpark(ide_drive_t *, struct request *);
1160ide_startstop_t ide_do_devset(ide_drive_t *, struct request *);
1161
1172extern ide_startstop_t ide_do_reset (ide_drive_t *); 1162extern ide_startstop_t ide_do_reset (ide_drive_t *);
1173 1163
1174extern int ide_devset_execute(ide_drive_t *drive, 1164extern int ide_devset_execute(ide_drive_t *drive,
1175 const struct ide_devset *setting, int arg); 1165 const struct ide_devset *setting, int arg);
1176 1166
1177extern void ide_do_drive_cmd(ide_drive_t *, struct request *);
1178
1179extern void ide_end_drive_cmd(ide_drive_t *, u8, u8); 1167extern void ide_end_drive_cmd(ide_drive_t *, u8, u8);
1180 1168
1181void ide_tf_dump(const char *, struct ide_taskfile *); 1169void ide_tf_dump(const char *, struct ide_taskfile *);
@@ -1200,10 +1188,6 @@ void SELECT_MASK(ide_drive_t *, int);
1200u8 ide_read_error(ide_drive_t *); 1188u8 ide_read_error(ide_drive_t *);
1201void ide_read_bcount_and_ireason(ide_drive_t *, u16 *, u8 *); 1189void ide_read_bcount_and_ireason(ide_drive_t *, u16 *, u8 *);
1202 1190
1203extern int drive_is_ready(ide_drive_t *);
1204
1205void ide_pktcmd_tf_load(ide_drive_t *, u32, u16, u8);
1206
1207int ide_check_atapi_device(ide_drive_t *, const char *); 1191int ide_check_atapi_device(ide_drive_t *, const char *);
1208 1192
1209void ide_init_pc(struct ide_atapi_pc *); 1193void ide_init_pc(struct ide_atapi_pc *);
@@ -1251,6 +1235,8 @@ int ide_no_data_taskfile(ide_drive_t *, ide_task_t *);
1251 1235
1252int ide_taskfile_ioctl(ide_drive_t *, unsigned int, unsigned long); 1236int ide_taskfile_ioctl(ide_drive_t *, unsigned int, unsigned long);
1253 1237
1238int ide_dev_read_id(ide_drive_t *, u8, u16 *);
1239
1254extern int ide_driveid_update(ide_drive_t *); 1240extern int ide_driveid_update(ide_drive_t *);
1255extern int ide_config_drive_speed(ide_drive_t *, u8); 1241extern int ide_config_drive_speed(ide_drive_t *, u8);
1256extern u8 eighty_ninty_three (ide_drive_t *); 1242extern u8 eighty_ninty_three (ide_drive_t *);
@@ -1280,7 +1266,7 @@ static inline int ide_pci_is_in_compatibility_mode(struct pci_dev *dev)
1280 return 0; 1266 return 0;
1281} 1267}
1282 1268
1283void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, 1269void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *,
1284 hw_regs_t *, hw_regs_t **); 1270 hw_regs_t *, hw_regs_t **);
1285void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); 1271void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *);
1286 1272
@@ -1349,10 +1335,6 @@ enum {
1349 IDE_HFLAG_ERROR_STOPS_FIFO = (1 << 19), 1335 IDE_HFLAG_ERROR_STOPS_FIFO = (1 << 19),
1350 /* serialize ports */ 1336 /* serialize ports */
1351 IDE_HFLAG_SERIALIZE = (1 << 20), 1337 IDE_HFLAG_SERIALIZE = (1 << 20),
1352 /* use legacy IRQs */
1353 IDE_HFLAG_LEGACY_IRQS = (1 << 21),
1354 /* force use of legacy IRQs */
1355 IDE_HFLAG_FORCE_LEGACY_IRQS = (1 << 22),
1356 /* host is TRM290 */ 1338 /* host is TRM290 */
1357 IDE_HFLAG_TRM290 = (1 << 23), 1339 IDE_HFLAG_TRM290 = (1 << 23),
1358 /* use 32-bit I/O ops */ 1340 /* use 32-bit I/O ops */
@@ -1380,7 +1362,7 @@ enum {
1380 1362
1381struct ide_port_info { 1363struct ide_port_info {
1382 char *name; 1364 char *name;
1383 unsigned int (*init_chipset)(struct pci_dev *); 1365 int (*init_chipset)(struct pci_dev *);
1384 void (*init_iops)(ide_hwif_t *); 1366 void (*init_iops)(ide_hwif_t *);
1385 void (*init_hwif)(ide_hwif_t *); 1367 void (*init_hwif)(ide_hwif_t *);
1386 int (*init_dma)(ide_hwif_t *, 1368 int (*init_dma)(ide_hwif_t *,
@@ -1471,6 +1453,7 @@ static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; }
1471 1453
1472void ide_dma_lost_irq(ide_drive_t *); 1454void ide_dma_lost_irq(ide_drive_t *);
1473void ide_dma_timeout(ide_drive_t *); 1455void ide_dma_timeout(ide_drive_t *);
1456ide_startstop_t ide_dma_timeout_retry(ide_drive_t *, int);
1474 1457
1475#else 1458#else
1476static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; } 1459static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; }
@@ -1482,21 +1465,24 @@ static inline void ide_dma_on(ide_drive_t *drive) { ; }
1482static inline void ide_dma_verbose(ide_drive_t *drive) { ; } 1465static inline void ide_dma_verbose(ide_drive_t *drive) { ; }
1483static inline int ide_set_dma(ide_drive_t *drive) { return 1; } 1466static inline int ide_set_dma(ide_drive_t *drive) { return 1; }
1484static inline void ide_check_dma_crc(ide_drive_t *drive) { ; } 1467static inline void ide_check_dma_crc(ide_drive_t *drive) { ; }
1468static inline ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error) { return ide_stopped; }
1485static inline void ide_release_dma_engine(ide_hwif_t *hwif) { ; } 1469static inline void ide_release_dma_engine(ide_hwif_t *hwif) { ; }
1486#endif /* CONFIG_BLK_DEV_IDEDMA */ 1470#endif /* CONFIG_BLK_DEV_IDEDMA */
1487 1471
1488#ifdef CONFIG_BLK_DEV_IDEACPI 1472#ifdef CONFIG_BLK_DEV_IDEACPI
1473int ide_acpi_init(void);
1489extern int ide_acpi_exec_tfs(ide_drive_t *drive); 1474extern int ide_acpi_exec_tfs(ide_drive_t *drive);
1490extern void ide_acpi_get_timing(ide_hwif_t *hwif); 1475extern void ide_acpi_get_timing(ide_hwif_t *hwif);
1491extern void ide_acpi_push_timing(ide_hwif_t *hwif); 1476extern void ide_acpi_push_timing(ide_hwif_t *hwif);
1492extern void ide_acpi_init(ide_hwif_t *hwif); 1477void ide_acpi_init_port(ide_hwif_t *);
1493void ide_acpi_port_init_devices(ide_hwif_t *); 1478void ide_acpi_port_init_devices(ide_hwif_t *);
1494extern void ide_acpi_set_state(ide_hwif_t *hwif, int on); 1479extern void ide_acpi_set_state(ide_hwif_t *hwif, int on);
1495#else 1480#else
1481static inline int ide_acpi_init(void) { return 0; }
1496static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; } 1482static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; }
1497static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; } 1483static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; }
1498static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; } 1484static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; }
1499static inline void ide_acpi_init(ide_hwif_t *hwif) { ; } 1485static inline void ide_acpi_init_port(ide_hwif_t *hwif) { ; }
1500static inline void ide_acpi_port_init_devices(ide_hwif_t *hwif) { ; } 1486static inline void ide_acpi_port_init_devices(ide_hwif_t *hwif) { ; }
1501static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {} 1487static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {}
1502#endif 1488#endif
@@ -1530,9 +1516,7 @@ static inline void ide_set_hwifdata (ide_hwif_t * hwif, void *data)
1530 hwif->hwif_data = data; 1516 hwif->hwif_data = data;
1531} 1517}
1532 1518
1533const char *ide_xfer_verbose(u8 mode);
1534extern void ide_toggle_bounce(ide_drive_t *drive, int on); 1519extern void ide_toggle_bounce(ide_drive_t *drive, int on);
1535extern int ide_set_xfer_rate(ide_drive_t *drive, u8 rate);
1536 1520
1537u64 ide_get_lba_addr(struct ide_taskfile *, int); 1521u64 ide_get_lba_addr(struct ide_taskfile *, int);
1538u8 ide_dump_status(ide_drive_t *, const char *, u8); 1522u8 ide_dump_status(ide_drive_t *, const char *, u8);
@@ -1571,14 +1555,18 @@ void ide_timing_merge(struct ide_timing *, struct ide_timing *,
1571 struct ide_timing *, unsigned int); 1555 struct ide_timing *, unsigned int);
1572int ide_timing_compute(ide_drive_t *, u8, struct ide_timing *, int, int); 1556int ide_timing_compute(ide_drive_t *, u8, struct ide_timing *, int, int);
1573 1557
1558#ifdef CONFIG_IDE_XFER_MODE
1574int ide_scan_pio_blacklist(char *); 1559int ide_scan_pio_blacklist(char *);
1575 1560const char *ide_xfer_verbose(u8);
1576u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8); 1561u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8);
1577
1578int ide_set_pio_mode(ide_drive_t *, u8); 1562int ide_set_pio_mode(ide_drive_t *, u8);
1579int ide_set_dma_mode(ide_drive_t *, u8); 1563int ide_set_dma_mode(ide_drive_t *, u8);
1580
1581void ide_set_pio(ide_drive_t *, u8); 1564void ide_set_pio(ide_drive_t *, u8);
1565int ide_set_xfer_rate(ide_drive_t *, u8);
1566#else
1567static inline void ide_set_pio(ide_drive_t *drive, u8 pio) { ; }
1568static inline int ide_set_xfer_rate(ide_drive_t *drive, u8 rate) { return -1; }
1569#endif
1582 1570
1583static inline void ide_set_max_pio(ide_drive_t *drive) 1571static inline void ide_set_max_pio(ide_drive_t *drive)
1584{ 1572{
@@ -1611,6 +1599,10 @@ static inline ide_drive_t *ide_get_pair_dev(ide_drive_t *drive)
1611#define ide_port_for_each_dev(i, dev, port) \ 1599#define ide_port_for_each_dev(i, dev, port) \
1612 for ((i) = 0; ((dev) = (port)->devices[i]) || (i) < MAX_DRIVES; (i)++) 1600 for ((i) = 0; ((dev) = (port)->devices[i]) || (i) < MAX_DRIVES; (i)++)
1613 1601
1602#define ide_port_for_each_present_dev(i, dev, port) \
1603 for ((i) = 0; ((dev) = (port)->devices[i]) || (i) < MAX_DRIVES; (i)++) \
1604 if ((dev)->dev_flags & IDE_DFLAG_PRESENT)
1605
1614#define ide_host_for_each_port(i, port, host) \ 1606#define ide_host_for_each_port(i, port, host) \
1615 for ((i) = 0; ((port) = (host)->ports[i]) || (i) < MAX_HOST_PORTS; (i)++) 1607 for ((i) = 0; ((port) = (host)->ports[i]) || (i) < MAX_HOST_PORTS; (i)++)
1616 1608
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index c4e6ca1a6306..b1bb817d1427 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -527,6 +527,8 @@ struct ieee80211_tim_ie {
527 u8 virtual_map[0]; 527 u8 virtual_map[0];
528} __attribute__ ((packed)); 528} __attribute__ ((packed));
529 529
530#define WLAN_SA_QUERY_TR_ID_LEN 16
531
530struct ieee80211_mgmt { 532struct ieee80211_mgmt {
531 __le16 frame_control; 533 __le16 frame_control;
532 __le16 duration; 534 __le16 duration;
@@ -646,6 +648,10 @@ struct ieee80211_mgmt {
646 u8 action_code; 648 u8 action_code;
647 u8 variable[0]; 649 u8 variable[0];
648 } __attribute__((packed)) mesh_action; 650 } __attribute__((packed)) mesh_action;
651 struct {
652 u8 action;
653 u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN];
654 } __attribute__ ((packed)) sa_query;
649 } u; 655 } u;
650 } __attribute__ ((packed)) action; 656 } __attribute__ ((packed)) action;
651 } u; 657 } u;
@@ -655,6 +661,15 @@ struct ieee80211_mgmt {
655#define IEEE80211_MIN_ACTION_SIZE offsetof(struct ieee80211_mgmt, u.action.u) 661#define IEEE80211_MIN_ACTION_SIZE offsetof(struct ieee80211_mgmt, u.action.u)
656 662
657 663
664/* Management MIC information element (IEEE 802.11w) */
665struct ieee80211_mmie {
666 u8 element_id;
667 u8 length;
668 __le16 key_id;
669 u8 sequence_number[6];
670 u8 mic[8];
671} __attribute__ ((packed));
672
658/* Control frames */ 673/* Control frames */
659struct ieee80211_rts { 674struct ieee80211_rts {
660 __le16 frame_control; 675 __le16 frame_control;
@@ -899,6 +914,9 @@ enum ieee80211_statuscode {
899 /* 802.11g */ 914 /* 802.11g */
900 WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25, 915 WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25,
901 WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26, 916 WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26,
917 /* 802.11w */
918 WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY = 30,
919 WLAN_STATUS_ROBUST_MGMT_FRAME_POLICY_VIOLATION = 31,
902 /* 802.11i */ 920 /* 802.11i */
903 WLAN_STATUS_INVALID_IE = 40, 921 WLAN_STATUS_INVALID_IE = 40,
904 WLAN_STATUS_INVALID_GROUP_CIPHER = 41, 922 WLAN_STATUS_INVALID_GROUP_CIPHER = 41,
@@ -1018,6 +1036,8 @@ enum ieee80211_eid {
1018 WLAN_EID_HT_INFORMATION = 61, 1036 WLAN_EID_HT_INFORMATION = 61,
1019 /* 802.11i */ 1037 /* 802.11i */
1020 WLAN_EID_RSN = 48, 1038 WLAN_EID_RSN = 48,
1039 WLAN_EID_TIMEOUT_INTERVAL = 56,
1040 WLAN_EID_MMIE = 76 /* 802.11w */,
1021 WLAN_EID_WPA = 221, 1041 WLAN_EID_WPA = 221,
1022 WLAN_EID_GENERIC = 221, 1042 WLAN_EID_GENERIC = 221,
1023 WLAN_EID_VENDOR_SPECIFIC = 221, 1043 WLAN_EID_VENDOR_SPECIFIC = 221,
@@ -1030,6 +1050,8 @@ enum ieee80211_category {
1030 WLAN_CATEGORY_QOS = 1, 1050 WLAN_CATEGORY_QOS = 1,
1031 WLAN_CATEGORY_DLS = 2, 1051 WLAN_CATEGORY_DLS = 2,
1032 WLAN_CATEGORY_BACK = 3, 1052 WLAN_CATEGORY_BACK = 3,
1053 WLAN_CATEGORY_PUBLIC = 4,
1054 WLAN_CATEGORY_SA_QUERY = 8,
1033 WLAN_CATEGORY_WMM = 17, 1055 WLAN_CATEGORY_WMM = 17,
1034}; 1056};
1035 1057
@@ -1104,6 +1126,12 @@ struct ieee80211_country_ie_triplet {
1104 }; 1126 };
1105} __attribute__ ((packed)); 1127} __attribute__ ((packed));
1106 1128
1129enum ieee80211_timeout_interval_type {
1130 WLAN_TIMEOUT_REASSOC_DEADLINE = 1 /* 802.11r */,
1131 WLAN_TIMEOUT_KEY_LIFETIME = 2 /* 802.11r */,
1132 WLAN_TIMEOUT_ASSOC_COMEBACK = 3 /* 802.11w */,
1133};
1134
1107/* BACK action code */ 1135/* BACK action code */
1108enum ieee80211_back_actioncode { 1136enum ieee80211_back_actioncode {
1109 WLAN_ACTION_ADDBA_REQ = 0, 1137 WLAN_ACTION_ADDBA_REQ = 0,
@@ -1118,6 +1146,13 @@ enum ieee80211_back_parties {
1118 WLAN_BACK_TIMER = 2, 1146 WLAN_BACK_TIMER = 2,
1119}; 1147};
1120 1148
1149/* SA Query action */
1150enum ieee80211_sa_query_action {
1151 WLAN_ACTION_SA_QUERY_REQUEST = 0,
1152 WLAN_ACTION_SA_QUERY_RESPONSE = 1,
1153};
1154
1155
1121/* A-MSDU 802.11n */ 1156/* A-MSDU 802.11n */
1122#define IEEE80211_QOS_CONTROL_A_MSDU_PRESENT 0x0080 1157#define IEEE80211_QOS_CONTROL_A_MSDU_PRESENT 0x0080
1123 1158
@@ -1128,6 +1163,7 @@ enum ieee80211_back_parties {
1128/* reserved: 0x000FAC03 */ 1163/* reserved: 0x000FAC03 */
1129#define WLAN_CIPHER_SUITE_CCMP 0x000FAC04 1164#define WLAN_CIPHER_SUITE_CCMP 0x000FAC04
1130#define WLAN_CIPHER_SUITE_WEP104 0x000FAC05 1165#define WLAN_CIPHER_SUITE_WEP104 0x000FAC05
1166#define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06
1131 1167
1132#define WLAN_MAX_KEY_LEN 32 1168#define WLAN_MAX_KEY_LEN 32
1133 1169
@@ -1185,4 +1221,149 @@ static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr)
1185 return hdr->addr1; 1221 return hdr->addr1;
1186} 1222}
1187 1223
1224/**
1225 * ieee80211_is_robust_mgmt_frame - check if frame is a robust management frame
1226 * @hdr: the frame (buffer must include at least the first octet of payload)
1227 */
1228static inline bool ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr)
1229{
1230 if (ieee80211_is_disassoc(hdr->frame_control) ||
1231 ieee80211_is_deauth(hdr->frame_control))
1232 return true;
1233
1234 if (ieee80211_is_action(hdr->frame_control)) {
1235 u8 *category;
1236
1237 /*
1238 * Action frames, excluding Public Action frames, are Robust
1239 * Management Frames. However, if we are looking at a Protected
1240 * frame, skip the check since the data may be encrypted and
1241 * the frame has already been found to be a Robust Management
1242 * Frame (by the other end).
1243 */
1244 if (ieee80211_has_protected(hdr->frame_control))
1245 return true;
1246 category = ((u8 *) hdr) + 24;
1247 return *category != WLAN_CATEGORY_PUBLIC;
1248 }
1249
1250 return false;
1251}
1252
1253/**
1254 * ieee80211_fhss_chan_to_freq - get channel frequency
1255 * @channel: the FHSS channel
1256 *
1257 * Convert IEEE802.11 FHSS channel to frequency (MHz)
1258 * Ref IEEE 802.11-2007 section 14.6
1259 */
1260static inline int ieee80211_fhss_chan_to_freq(int channel)
1261{
1262 if ((channel > 1) && (channel < 96))
1263 return channel + 2400;
1264 else
1265 return -1;
1266}
1267
1268/**
1269 * ieee80211_freq_to_fhss_chan - get channel
1270 * @freq: the channels frequency
1271 *
1272 * Convert frequency (MHz) to IEEE802.11 FHSS channel
1273 * Ref IEEE 802.11-2007 section 14.6
1274 */
1275static inline int ieee80211_freq_to_fhss_chan(int freq)
1276{
1277 if ((freq > 2401) && (freq < 2496))
1278 return freq - 2400;
1279 else
1280 return -1;
1281}
1282
1283/**
1284 * ieee80211_dsss_chan_to_freq - get channel center frequency
1285 * @channel: the DSSS channel
1286 *
1287 * Convert IEEE802.11 DSSS channel to the center frequency (MHz).
1288 * Ref IEEE 802.11-2007 section 15.6
1289 */
1290static inline int ieee80211_dsss_chan_to_freq(int channel)
1291{
1292 if ((channel > 0) && (channel < 14))
1293 return 2407 + (channel * 5);
1294 else if (channel == 14)
1295 return 2484;
1296 else
1297 return -1;
1298}
1299
1300/**
1301 * ieee80211_freq_to_dsss_chan - get channel
1302 * @freq: the frequency
1303 *
1304 * Convert frequency (MHz) to IEEE802.11 DSSS channel
1305 * Ref IEEE 802.11-2007 section 15.6
1306 *
1307 * This routine selects the channel with the closest center frequency.
1308 */
1309static inline int ieee80211_freq_to_dsss_chan(int freq)
1310{
1311 if ((freq >= 2410) && (freq < 2475))
1312 return (freq - 2405) / 5;
1313 else if ((freq >= 2482) && (freq < 2487))
1314 return 14;
1315 else
1316 return -1;
1317}
1318
1319/* Convert IEEE802.11 HR DSSS channel to frequency (MHz) and back
1320 * Ref IEEE 802.11-2007 section 18.4.6.2
1321 *
1322 * The channels and frequencies are the same as those defined for DSSS
1323 */
1324#define ieee80211_hr_chan_to_freq(chan) ieee80211_dsss_chan_to_freq(chan)
1325#define ieee80211_freq_to_hr_chan(freq) ieee80211_freq_to_dsss_chan(freq)
1326
1327/* Convert IEEE802.11 ERP channel to frequency (MHz) and back
1328 * Ref IEEE 802.11-2007 section 19.4.2
1329 */
1330#define ieee80211_erp_chan_to_freq(chan) ieee80211_hr_chan_to_freq(chan)
1331#define ieee80211_freq_to_erp_chan(freq) ieee80211_freq_to_hr_chan(freq)
1332
1333/**
1334 * ieee80211_ofdm_chan_to_freq - get channel center frequency
1335 * @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz
1336 * @channel: the OFDM channel
1337 *
1338 * Convert IEEE802.11 OFDM channel to center frequency (MHz)
1339 * Ref IEEE 802.11-2007 section 17.3.8.3.2
1340 */
1341static inline int ieee80211_ofdm_chan_to_freq(int s_freq, int channel)
1342{
1343 if ((channel > 0) && (channel <= 200) &&
1344 (s_freq >= 4000))
1345 return s_freq + (channel * 5);
1346 else
1347 return -1;
1348}
1349
1350/**
1351 * ieee80211_freq_to_ofdm_channel - get channel
1352 * @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz
1353 * @freq: the frequency
1354 *
1355 * Convert frequency (MHz) to IEEE802.11 OFDM channel
1356 * Ref IEEE 802.11-2007 section 17.3.8.3.2
1357 *
1358 * This routine selects the channel with the closest center frequency.
1359 */
1360static inline int ieee80211_freq_to_ofdm_chan(int s_freq, int freq)
1361{
1362 if ((freq > (s_freq + 2)) && (freq <= (s_freq + 1202)) &&
1363 (s_freq >= 4000))
1364 return (freq + 2 - s_freq) / 5;
1365 else
1366 return -1;
1367}
1368
1188#endif /* LINUX_IEEE80211_H */ 1369#endif /* LINUX_IEEE80211_H */
diff --git a/include/linux/if.h b/include/linux/if.h
index 2a6e29620a96..1108f3e099e3 100644
--- a/include/linux/if.h
+++ b/include/linux/if.h
@@ -66,6 +66,7 @@
66#define IFF_SLAVE_NEEDARP 0x40 /* need ARPs for validation */ 66#define IFF_SLAVE_NEEDARP 0x40 /* need ARPs for validation */
67#define IFF_ISATAP 0x80 /* ISATAP interface (RFC4214) */ 67#define IFF_ISATAP 0x80 /* ISATAP interface (RFC4214) */
68#define IFF_MASTER_ARPMON 0x100 /* bonding master, ARP mon in use */ 68#define IFF_MASTER_ARPMON 0x100 /* bonding master, ARP mon in use */
69#define IFF_WAN_HDLC 0x200 /* WAN HDLC device */
69 70
70#define IF_GET_IFACE 0x0001 /* for querying only */ 71#define IF_GET_IFACE 0x0001 /* for querying only */
71#define IF_GET_PROTO 0x0002 72#define IF_GET_PROTO 0x0002
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h
index 7f3c735f422b..0216e1bdbc56 100644
--- a/include/linux/if_ether.h
+++ b/include/linux/if_ether.h
@@ -17,7 +17,7 @@
17 * as published by the Free Software Foundation; either version 17 * as published by the Free Software Foundation; either version
18 * 2 of the License, or (at your option) any later version. 18 * 2 of the License, or (at your option) any later version.
19 */ 19 */
20 20
21#ifndef _LINUX_IF_ETHER_H 21#ifndef _LINUX_IF_ETHER_H
22#define _LINUX_IF_ETHER_H 22#define _LINUX_IF_ETHER_H
23 23
@@ -25,7 +25,7 @@
25 25
26/* 26/*
27 * IEEE 802.3 Ethernet magic constants. The frame sizes omit the preamble 27 * IEEE 802.3 Ethernet magic constants. The frame sizes omit the preamble
28 * and FCS/CRC (frame check sequence). 28 * and FCS/CRC (frame check sequence).
29 */ 29 */
30 30
31#define ETH_ALEN 6 /* Octets in one ethernet addr */ 31#define ETH_ALEN 6 /* Octets in one ethernet addr */
@@ -83,7 +83,7 @@
83/* 83/*
84 * Non DIX types. Won't clash for 1500 types. 84 * Non DIX types. Won't clash for 1500 types.
85 */ 85 */
86 86
87#define ETH_P_802_3 0x0001 /* Dummy type for 802.3 frames */ 87#define ETH_P_802_3 0x0001 /* Dummy type for 802.3 frames */
88#define ETH_P_AX25 0x0002 /* Dummy protocol id for AX.25 */ 88#define ETH_P_AX25 0x0002 /* Dummy protocol id for AX.25 */
89#define ETH_P_ALL 0x0003 /* Every packet (be careful!!!) */ 89#define ETH_P_ALL 0x0003 /* Every packet (be careful!!!) */
@@ -109,7 +109,7 @@
109/* 109/*
110 * This is an Ethernet frame header. 110 * This is an Ethernet frame header.
111 */ 111 */
112 112
113struct ethhdr { 113struct ethhdr {
114 unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ 114 unsigned char h_dest[ETH_ALEN]; /* destination eth addr */
115 unsigned char h_source[ETH_ALEN]; /* source ether addr */ 115 unsigned char h_source[ETH_ALEN]; /* source ether addr */
diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h
index 30c88b2245ff..90b5fae5d714 100644
--- a/include/linux/if_pppox.h
+++ b/include/linux/if_pppox.h
@@ -95,16 +95,16 @@ struct pppoe_tag {
95} __attribute ((packed)); 95} __attribute ((packed));
96 96
97/* Tag identifiers */ 97/* Tag identifiers */
98#define PTT_EOL __constant_htons(0x0000) 98#define PTT_EOL __cpu_to_be16(0x0000)
99#define PTT_SRV_NAME __constant_htons(0x0101) 99#define PTT_SRV_NAME __cpu_to_be16(0x0101)
100#define PTT_AC_NAME __constant_htons(0x0102) 100#define PTT_AC_NAME __cpu_to_be16(0x0102)
101#define PTT_HOST_UNIQ __constant_htons(0x0103) 101#define PTT_HOST_UNIQ __cpu_to_be16(0x0103)
102#define PTT_AC_COOKIE __constant_htons(0x0104) 102#define PTT_AC_COOKIE __cpu_to_be16(0x0104)
103#define PTT_VENDOR __constant_htons(0x0105) 103#define PTT_VENDOR __cpu_to_be16(0x0105)
104#define PTT_RELAY_SID __constant_htons(0x0110) 104#define PTT_RELAY_SID __cpu_to_be16(0x0110)
105#define PTT_SRV_ERR __constant_htons(0x0201) 105#define PTT_SRV_ERR __cpu_to_be16(0x0201)
106#define PTT_SYS_ERR __constant_htons(0x0202) 106#define PTT_SYS_ERR __cpu_to_be16(0x0202)
107#define PTT_GEN_ERR __constant_htons(0x0203) 107#define PTT_GEN_ERR __cpu_to_be16(0x0203)
108 108
109struct pppoe_hdr { 109struct pppoe_hdr {
110#if defined(__LITTLE_ENDIAN_BITFIELD) 110#if defined(__LITTLE_ENDIAN_BITFIELD)
diff --git a/include/linux/if_tun.h b/include/linux/if_tun.h
index 8529f57ba263..049d6c9428db 100644
--- a/include/linux/if_tun.h
+++ b/include/linux/if_tun.h
@@ -46,6 +46,8 @@
46#define TUNSETOFFLOAD _IOW('T', 208, unsigned int) 46#define TUNSETOFFLOAD _IOW('T', 208, unsigned int)
47#define TUNSETTXFILTER _IOW('T', 209, unsigned int) 47#define TUNSETTXFILTER _IOW('T', 209, unsigned int)
48#define TUNGETIFF _IOR('T', 210, unsigned int) 48#define TUNGETIFF _IOR('T', 210, unsigned int)
49#define TUNGETSNDBUF _IOR('T', 211, int)
50#define TUNSETSNDBUF _IOW('T', 212, int)
49 51
50/* TUNSETIFF ifr flags */ 52/* TUNSETIFF ifr flags */
51#define IFF_TUN 0x0001 53#define IFF_TUN 0x0001
diff --git a/include/linux/if_tunnel.h b/include/linux/if_tunnel.h
index 82c43624c067..5a9aae4adb44 100644
--- a/include/linux/if_tunnel.h
+++ b/include/linux/if_tunnel.h
@@ -16,14 +16,14 @@
16#define SIOCDELPRL (SIOCDEVPRIVATE + 6) 16#define SIOCDELPRL (SIOCDEVPRIVATE + 6)
17#define SIOCCHGPRL (SIOCDEVPRIVATE + 7) 17#define SIOCCHGPRL (SIOCDEVPRIVATE + 7)
18 18
19#define GRE_CSUM __constant_htons(0x8000) 19#define GRE_CSUM __cpu_to_be16(0x8000)
20#define GRE_ROUTING __constant_htons(0x4000) 20#define GRE_ROUTING __cpu_to_be16(0x4000)
21#define GRE_KEY __constant_htons(0x2000) 21#define GRE_KEY __cpu_to_be16(0x2000)
22#define GRE_SEQ __constant_htons(0x1000) 22#define GRE_SEQ __cpu_to_be16(0x1000)
23#define GRE_STRICT __constant_htons(0x0800) 23#define GRE_STRICT __cpu_to_be16(0x0800)
24#define GRE_REC __constant_htons(0x0700) 24#define GRE_REC __cpu_to_be16(0x0700)
25#define GRE_FLAGS __constant_htons(0x00F8) 25#define GRE_FLAGS __cpu_to_be16(0x00F8)
26#define GRE_VERSION __constant_htons(0x0007) 26#define GRE_VERSION __cpu_to_be16(0x0007)
27 27
28struct ip_tunnel_parm 28struct ip_tunnel_parm
29{ 29{
diff --git a/include/linux/ima.h b/include/linux/ima.h
new file mode 100644
index 000000000000..0e2aa45cb0ce
--- /dev/null
+++ b/include/linux/ima.h
@@ -0,0 +1,61 @@
1/*
2 * Copyright (C) 2008 IBM Corporation
3 * Author: Mimi Zohar <zohar@us.ibm.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, version 2 of the License.
8 */
9
10#ifndef _LINUX_IMA_H
11#define _LINUX_IMA_H
12
13#include <linux/fs.h>
14struct linux_binprm;
15
16#ifdef CONFIG_IMA
17extern int ima_bprm_check(struct linux_binprm *bprm);
18extern int ima_inode_alloc(struct inode *inode);
19extern void ima_inode_free(struct inode *inode);
20extern int ima_path_check(struct path *path, int mask);
21extern void ima_file_free(struct file *file);
22extern int ima_file_mmap(struct file *file, unsigned long prot);
23extern void ima_shm_check(struct file *file);
24
25#else
26static inline int ima_bprm_check(struct linux_binprm *bprm)
27{
28 return 0;
29}
30
31static inline int ima_inode_alloc(struct inode *inode)
32{
33 return 0;
34}
35
36static inline void ima_inode_free(struct inode *inode)
37{
38 return;
39}
40
41static inline int ima_path_check(struct path *path, int mask)
42{
43 return 0;
44}
45
46static inline void ima_file_free(struct file *file)
47{
48 return;
49}
50
51static inline int ima_file_mmap(struct file *file, unsigned long prot)
52{
53 return 0;
54}
55
56static inline void ima_shm_check(struct file *file)
57{
58 return;
59}
60#endif /* CONFIG_IMA_H */
61#endif /* _LINUX_IMA_H */
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h
index 06fcdb45106b..acef2a770b6b 100644
--- a/include/linux/inetdevice.h
+++ b/include/linux/inetdevice.h
@@ -108,6 +108,7 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev)
108#define IN_DEV_ARPFILTER(in_dev) IN_DEV_ORCONF((in_dev), ARPFILTER) 108#define IN_DEV_ARPFILTER(in_dev) IN_DEV_ORCONF((in_dev), ARPFILTER)
109#define IN_DEV_ARP_ANNOUNCE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_ANNOUNCE) 109#define IN_DEV_ARP_ANNOUNCE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_ANNOUNCE)
110#define IN_DEV_ARP_IGNORE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_IGNORE) 110#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)
111 112
112struct in_ifaddr 113struct in_ifaddr
113{ 114{
diff --git a/include/linux/init_task.h b/include/linux/init_task.h
index e752d973fa21..af1de95e711e 100644
--- a/include/linux/init_task.h
+++ b/include/linux/init_task.h
@@ -147,6 +147,7 @@ extern struct cred init_cred;
147 .nr_cpus_allowed = NR_CPUS, \ 147 .nr_cpus_allowed = NR_CPUS, \
148 }, \ 148 }, \
149 .tasks = LIST_HEAD_INIT(tsk.tasks), \ 149 .tasks = LIST_HEAD_INIT(tsk.tasks), \
150 .pushable_tasks = PLIST_NODE_INIT(tsk.pushable_tasks, MAX_PRIO), \
150 .ptraced = LIST_HEAD_INIT(tsk.ptraced), \ 151 .ptraced = LIST_HEAD_INIT(tsk.ptraced), \
151 .ptrace_entry = LIST_HEAD_INIT(tsk.ptrace_entry), \ 152 .ptrace_entry = LIST_HEAD_INIT(tsk.ptrace_entry), \
152 .real_parent = &tsk, \ 153 .real_parent = &tsk, \
diff --git a/include/linux/input.h b/include/linux/input.h
index 1249a0c20a38..6b28048fc568 100644
--- a/include/linux/input.h
+++ b/include/linux/input.h
@@ -661,6 +661,7 @@ struct input_absinfo {
661#define SW_DOCK 0x05 /* set = plugged into dock */ 661#define SW_DOCK 0x05 /* set = plugged into dock */
662#define SW_LINEOUT_INSERT 0x06 /* set = inserted */ 662#define SW_LINEOUT_INSERT 0x06 /* set = inserted */
663#define SW_JACK_PHYSICAL_INSERT 0x07 /* set = mechanical switch set */ 663#define SW_JACK_PHYSICAL_INSERT 0x07 /* set = mechanical switch set */
664#define SW_VIDEOOUT_INSERT 0x08 /* set = inserted */
664#define SW_MAX 0x0f 665#define SW_MAX 0x0f
665#define SW_CNT (SW_MAX+1) 666#define SW_CNT (SW_MAX+1)
666 667
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index 7fa371898e3e..914918abfdd1 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -16,7 +16,7 @@
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> 18#include <linux/ratelimit.h>
19#include <linux/dynamic_printk.h> 19#include <linux/dynamic_debug.h>
20#include <asm/byteorder.h> 20#include <asm/byteorder.h>
21#include <asm/bug.h> 21#include <asm/bug.h>
22 22
@@ -358,9 +358,10 @@ static inline char *pack_hex_byte(char *buf, u8 byte)
358#if defined(DEBUG) 358#if defined(DEBUG)
359#define pr_debug(fmt, ...) \ 359#define pr_debug(fmt, ...) \
360 printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 360 printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
361#elif defined(CONFIG_DYNAMIC_PRINTK_DEBUG) 361#elif defined(CONFIG_DYNAMIC_DEBUG)
362/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
362#define pr_debug(fmt, ...) do { \ 363#define pr_debug(fmt, ...) do { \
363 dynamic_pr_debug(pr_fmt(fmt), ##__VA_ARGS__); \ 364 dynamic_pr_debug(fmt, ##__VA_ARGS__); \
364 } while (0) 365 } while (0)
365#else 366#else
366#define pr_debug(fmt, ...) \ 367#define pr_debug(fmt, ...) \
diff --git a/include/linux/kobject.h b/include/linux/kobject.h
index 5437ac0276e2..58ae8e00fcdd 100644
--- a/include/linux/kobject.h
+++ b/include/linux/kobject.h
@@ -68,10 +68,13 @@ struct kobject {
68 unsigned int state_in_sysfs:1; 68 unsigned int state_in_sysfs:1;
69 unsigned int state_add_uevent_sent:1; 69 unsigned int state_add_uevent_sent:1;
70 unsigned int state_remove_uevent_sent:1; 70 unsigned int state_remove_uevent_sent:1;
71 unsigned int uevent_suppress:1;
71}; 72};
72 73
73extern int kobject_set_name(struct kobject *kobj, const char *name, ...) 74extern int kobject_set_name(struct kobject *kobj, const char *name, ...)
74 __attribute__((format(printf, 2, 3))); 75 __attribute__((format(printf, 2, 3)));
76extern int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,
77 va_list vargs);
75 78
76static inline const char *kobject_name(const struct kobject *kobj) 79static inline const char *kobject_name(const struct kobject *kobj)
77{ 80{
diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index 0424326f1679..311a073afe8a 100644
--- a/include/linux/kvm.h
+++ b/include/linux/kvm.h
@@ -48,7 +48,10 @@ struct kvm_irq_level {
48 * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47.. 48 * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
49 * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23.. 49 * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
50 */ 50 */
51 __u32 irq; 51 union {
52 __u32 irq;
53 __s32 status;
54 };
52 __u32 level; 55 __u32 level;
53}; 56};
54 57
@@ -126,6 +129,7 @@ struct kvm_run {
126 __u64 data_offset; /* relative to kvm_run start */ 129 __u64 data_offset; /* relative to kvm_run start */
127 } io; 130 } io;
128 struct { 131 struct {
132 struct kvm_debug_exit_arch arch;
129 } debug; 133 } debug;
130 /* KVM_EXIT_MMIO */ 134 /* KVM_EXIT_MMIO */
131 struct { 135 struct {
@@ -217,21 +221,6 @@ struct kvm_interrupt {
217 __u32 irq; 221 __u32 irq;
218}; 222};
219 223
220struct kvm_breakpoint {
221 __u32 enabled;
222 __u32 padding;
223 __u64 address;
224};
225
226/* for KVM_DEBUG_GUEST */
227struct kvm_debug_guest {
228 /* int */
229 __u32 enabled;
230 __u32 pad;
231 struct kvm_breakpoint breakpoints[4];
232 __u32 singlestep;
233};
234
235/* for KVM_GET_DIRTY_LOG */ 224/* for KVM_GET_DIRTY_LOG */
236struct kvm_dirty_log { 225struct kvm_dirty_log {
237 __u32 slot; 226 __u32 slot;
@@ -292,6 +281,17 @@ struct kvm_s390_interrupt {
292 __u64 parm64; 281 __u64 parm64;
293}; 282};
294 283
284/* for KVM_SET_GUEST_DEBUG */
285
286#define KVM_GUESTDBG_ENABLE 0x00000001
287#define KVM_GUESTDBG_SINGLESTEP 0x00000002
288
289struct kvm_guest_debug {
290 __u32 control;
291 __u32 pad;
292 struct kvm_guest_debug_arch arch;
293};
294
295#define KVM_TRC_SHIFT 16 295#define KVM_TRC_SHIFT 16
296/* 296/*
297 * kvm trace categories 297 * kvm trace categories
@@ -396,6 +396,57 @@ struct kvm_trace_rec {
396#ifdef __KVM_HAVE_USER_NMI 396#ifdef __KVM_HAVE_USER_NMI
397#define KVM_CAP_USER_NMI 22 397#define KVM_CAP_USER_NMI 22
398#endif 398#endif
399#ifdef __KVM_HAVE_GUEST_DEBUG
400#define KVM_CAP_SET_GUEST_DEBUG 23
401#endif
402#ifdef __KVM_HAVE_PIT
403#define KVM_CAP_REINJECT_CONTROL 24
404#endif
405#ifdef __KVM_HAVE_IOAPIC
406#define KVM_CAP_IRQ_ROUTING 25
407#endif
408#define KVM_CAP_IRQ_INJECT_STATUS 26
409#ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
410#define KVM_CAP_DEVICE_DEASSIGNMENT 27
411#endif
412
413#ifdef KVM_CAP_IRQ_ROUTING
414
415struct kvm_irq_routing_irqchip {
416 __u32 irqchip;
417 __u32 pin;
418};
419
420struct kvm_irq_routing_msi {
421 __u32 address_lo;
422 __u32 address_hi;
423 __u32 data;
424 __u32 pad;
425};
426
427/* gsi routing entry types */
428#define KVM_IRQ_ROUTING_IRQCHIP 1
429#define KVM_IRQ_ROUTING_MSI 2
430
431struct kvm_irq_routing_entry {
432 __u32 gsi;
433 __u32 type;
434 __u32 flags;
435 __u32 pad;
436 union {
437 struct kvm_irq_routing_irqchip irqchip;
438 struct kvm_irq_routing_msi msi;
439 __u32 pad[8];
440 } u;
441};
442
443struct kvm_irq_routing {
444 __u32 nr;
445 __u32 flags;
446 struct kvm_irq_routing_entry entries[0];
447};
448
449#endif
399 450
400/* 451/*
401 * ioctls for VM fds 452 * ioctls for VM fds
@@ -421,14 +472,19 @@ struct kvm_trace_rec {
421#define KVM_CREATE_PIT _IO(KVMIO, 0x64) 472#define KVM_CREATE_PIT _IO(KVMIO, 0x64)
422#define KVM_GET_PIT _IOWR(KVMIO, 0x65, struct kvm_pit_state) 473#define KVM_GET_PIT _IOWR(KVMIO, 0x65, struct kvm_pit_state)
423#define KVM_SET_PIT _IOR(KVMIO, 0x66, struct kvm_pit_state) 474#define KVM_SET_PIT _IOR(KVMIO, 0x66, struct kvm_pit_state)
475#define KVM_IRQ_LINE_STATUS _IOWR(KVMIO, 0x67, struct kvm_irq_level)
424#define KVM_REGISTER_COALESCED_MMIO \ 476#define KVM_REGISTER_COALESCED_MMIO \
425 _IOW(KVMIO, 0x67, struct kvm_coalesced_mmio_zone) 477 _IOW(KVMIO, 0x67, struct kvm_coalesced_mmio_zone)
426#define KVM_UNREGISTER_COALESCED_MMIO \ 478#define KVM_UNREGISTER_COALESCED_MMIO \
427 _IOW(KVMIO, 0x68, struct kvm_coalesced_mmio_zone) 479 _IOW(KVMIO, 0x68, struct kvm_coalesced_mmio_zone)
428#define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \ 480#define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \
429 struct kvm_assigned_pci_dev) 481 struct kvm_assigned_pci_dev)
482#define KVM_SET_GSI_ROUTING _IOW(KVMIO, 0x6a, struct kvm_irq_routing)
430#define KVM_ASSIGN_IRQ _IOR(KVMIO, 0x70, \ 483#define KVM_ASSIGN_IRQ _IOR(KVMIO, 0x70, \
431 struct kvm_assigned_irq) 484 struct kvm_assigned_irq)
485#define KVM_REINJECT_CONTROL _IO(KVMIO, 0x71)
486#define KVM_DEASSIGN_PCI_DEVICE _IOW(KVMIO, 0x72, \
487 struct kvm_assigned_pci_dev)
432 488
433/* 489/*
434 * ioctls for vcpu fds 490 * ioctls for vcpu fds
@@ -440,7 +496,8 @@ struct kvm_trace_rec {
440#define KVM_SET_SREGS _IOW(KVMIO, 0x84, struct kvm_sregs) 496#define KVM_SET_SREGS _IOW(KVMIO, 0x84, struct kvm_sregs)
441#define KVM_TRANSLATE _IOWR(KVMIO, 0x85, struct kvm_translation) 497#define KVM_TRANSLATE _IOWR(KVMIO, 0x85, struct kvm_translation)
442#define KVM_INTERRUPT _IOW(KVMIO, 0x86, struct kvm_interrupt) 498#define KVM_INTERRUPT _IOW(KVMIO, 0x86, struct kvm_interrupt)
443#define KVM_DEBUG_GUEST _IOW(KVMIO, 0x87, struct kvm_debug_guest) 499/* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
500#define KVM_DEBUG_GUEST __KVM_DEPRECATED_DEBUG_GUEST
444#define KVM_GET_MSRS _IOWR(KVMIO, 0x88, struct kvm_msrs) 501#define KVM_GET_MSRS _IOWR(KVMIO, 0x88, struct kvm_msrs)
445#define KVM_SET_MSRS _IOW(KVMIO, 0x89, struct kvm_msrs) 502#define KVM_SET_MSRS _IOW(KVMIO, 0x89, struct kvm_msrs)
446#define KVM_SET_CPUID _IOW(KVMIO, 0x8a, struct kvm_cpuid) 503#define KVM_SET_CPUID _IOW(KVMIO, 0x8a, struct kvm_cpuid)
@@ -469,6 +526,29 @@ struct kvm_trace_rec {
469#define KVM_SET_MP_STATE _IOW(KVMIO, 0x99, struct kvm_mp_state) 526#define KVM_SET_MP_STATE _IOW(KVMIO, 0x99, struct kvm_mp_state)
470/* Available with KVM_CAP_NMI */ 527/* Available with KVM_CAP_NMI */
471#define KVM_NMI _IO(KVMIO, 0x9a) 528#define KVM_NMI _IO(KVMIO, 0x9a)
529/* Available with KVM_CAP_SET_GUEST_DEBUG */
530#define KVM_SET_GUEST_DEBUG _IOW(KVMIO, 0x9b, struct kvm_guest_debug)
531
532/*
533 * Deprecated interfaces
534 */
535struct kvm_breakpoint {
536 __u32 enabled;
537 __u32 padding;
538 __u64 address;
539};
540
541struct kvm_debug_guest {
542 __u32 enabled;
543 __u32 pad;
544 struct kvm_breakpoint breakpoints[4];
545 __u32 singlestep;
546};
547
548#define __KVM_DEPRECATED_DEBUG_GUEST _IOW(KVMIO, 0x87, struct kvm_debug_guest)
549
550#define KVM_IA64_VCPU_GET_STACK _IOR(KVMIO, 0x9a, void *)
551#define KVM_IA64_VCPU_SET_STACK _IOW(KVMIO, 0x9b, void *)
472 552
473#define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) 553#define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02)
474#define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) 554#define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03)
@@ -522,6 +602,7 @@ struct kvm_assigned_irq {
522 602
523#define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) 603#define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0)
524 604
605#define KVM_DEV_IRQ_ASSIGN_MSI_ACTION KVM_DEV_IRQ_ASSIGN_ENABLE_MSI
525#define KVM_DEV_IRQ_ASSIGN_ENABLE_MSI (1 << 0) 606#define KVM_DEV_IRQ_ASSIGN_ENABLE_MSI (1 << 0)
526 607
527#endif 608#endif
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index bf6f703642fc..894a56e365e8 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -37,6 +37,7 @@
37#define KVM_REQ_PENDING_TIMER 5 37#define KVM_REQ_PENDING_TIMER 5
38#define KVM_REQ_UNHALT 6 38#define KVM_REQ_UNHALT 6
39#define KVM_REQ_MMU_SYNC 7 39#define KVM_REQ_MMU_SYNC 7
40#define KVM_REQ_KVMCLOCK_UPDATE 8
40 41
41#define KVM_USERSPACE_IRQ_SOURCE_ID 0 42#define KVM_USERSPACE_IRQ_SOURCE_ID 0
42 43
@@ -73,7 +74,7 @@ struct kvm_vcpu {
73 struct kvm_run *run; 74 struct kvm_run *run;
74 int guest_mode; 75 int guest_mode;
75 unsigned long requests; 76 unsigned long requests;
76 struct kvm_guest_debug guest_debug; 77 unsigned long guest_debug;
77 int fpu_active; 78 int fpu_active;
78 int guest_fpu_loaded; 79 int guest_fpu_loaded;
79 wait_queue_head_t wq; 80 wait_queue_head_t wq;
@@ -107,6 +108,20 @@ struct kvm_memory_slot {
107 int user_alloc; 108 int user_alloc;
108}; 109};
109 110
111struct kvm_kernel_irq_routing_entry {
112 u32 gsi;
113 int (*set)(struct kvm_kernel_irq_routing_entry *e,
114 struct kvm *kvm, int level);
115 union {
116 struct {
117 unsigned irqchip;
118 unsigned pin;
119 } irqchip;
120 struct msi_msg msi;
121 };
122 struct list_head link;
123};
124
110struct kvm { 125struct kvm {
111 struct mutex lock; /* protects the vcpus array and APIC accesses */ 126 struct mutex lock; /* protects the vcpus array and APIC accesses */
112 spinlock_t mmu_lock; 127 spinlock_t mmu_lock;
@@ -127,6 +142,11 @@ struct kvm {
127 struct kvm_coalesced_mmio_ring *coalesced_mmio_ring; 142 struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
128#endif 143#endif
129 144
145#ifdef CONFIG_HAVE_KVM_IRQCHIP
146 struct list_head irq_routing; /* of kvm_kernel_irq_routing_entry */
147 struct hlist_head mask_notifier_list;
148#endif
149
130#ifdef KVM_ARCH_WANT_MMU_NOTIFIER 150#ifdef KVM_ARCH_WANT_MMU_NOTIFIER
131 struct mmu_notifier mmu_notifier; 151 struct mmu_notifier mmu_notifier;
132 unsigned long mmu_notifier_seq; 152 unsigned long mmu_notifier_seq;
@@ -237,7 +257,6 @@ int kvm_vm_ioctl_set_memory_region(struct kvm *kvm,
237 int user_alloc); 257 int user_alloc);
238long kvm_arch_vm_ioctl(struct file *filp, 258long kvm_arch_vm_ioctl(struct file *filp,
239 unsigned int ioctl, unsigned long arg); 259 unsigned int ioctl, unsigned long arg);
240void kvm_arch_destroy_vm(struct kvm *kvm);
241 260
242int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu); 261int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu);
243int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu); 262int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu);
@@ -255,8 +274,8 @@ int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
255 struct kvm_mp_state *mp_state); 274 struct kvm_mp_state *mp_state);
256int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, 275int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
257 struct kvm_mp_state *mp_state); 276 struct kvm_mp_state *mp_state);
258int kvm_arch_vcpu_ioctl_debug_guest(struct kvm_vcpu *vcpu, 277int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
259 struct kvm_debug_guest *dbg); 278 struct kvm_guest_debug *dbg);
260int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run); 279int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run);
261 280
262int kvm_arch_init(void *opaque); 281int kvm_arch_init(void *opaque);
@@ -310,7 +329,6 @@ struct kvm_assigned_dev_kernel {
310 int host_irq; 329 int host_irq;
311 bool host_irq_disabled; 330 bool host_irq_disabled;
312 int guest_irq; 331 int guest_irq;
313 struct msi_msg guest_msi;
314#define KVM_ASSIGNED_DEV_GUEST_INTX (1 << 0) 332#define KVM_ASSIGNED_DEV_GUEST_INTX (1 << 0)
315#define KVM_ASSIGNED_DEV_GUEST_MSI (1 << 1) 333#define KVM_ASSIGNED_DEV_GUEST_MSI (1 << 1)
316#define KVM_ASSIGNED_DEV_HOST_INTX (1 << 8) 334#define KVM_ASSIGNED_DEV_HOST_INTX (1 << 8)
@@ -321,8 +339,21 @@ struct kvm_assigned_dev_kernel {
321 struct pci_dev *dev; 339 struct pci_dev *dev;
322 struct kvm *kvm; 340 struct kvm *kvm;
323}; 341};
324void kvm_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level); 342
325void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi); 343struct kvm_irq_mask_notifier {
344 void (*func)(struct kvm_irq_mask_notifier *kimn, bool masked);
345 int irq;
346 struct hlist_node link;
347};
348
349void kvm_register_irq_mask_notifier(struct kvm *kvm, int irq,
350 struct kvm_irq_mask_notifier *kimn);
351void kvm_unregister_irq_mask_notifier(struct kvm *kvm, int irq,
352 struct kvm_irq_mask_notifier *kimn);
353void kvm_fire_mask_notifiers(struct kvm *kvm, int irq, bool mask);
354
355int kvm_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level);
356void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin);
326void kvm_register_irq_ack_notifier(struct kvm *kvm, 357void kvm_register_irq_ack_notifier(struct kvm *kvm,
327 struct kvm_irq_ack_notifier *kian); 358 struct kvm_irq_ack_notifier *kian);
328void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian); 359void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian);
@@ -464,4 +495,21 @@ static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_se
464} 495}
465#endif 496#endif
466 497
498#ifdef CONFIG_HAVE_KVM_IRQCHIP
499
500#define KVM_MAX_IRQ_ROUTES 1024
501
502int kvm_setup_default_irq_routing(struct kvm *kvm);
503int kvm_set_irq_routing(struct kvm *kvm,
504 const struct kvm_irq_routing_entry *entries,
505 unsigned nr,
506 unsigned flags);
507void kvm_free_irq_routing(struct kvm *kvm);
508
509#else
510
511static inline void kvm_free_irq_routing(struct kvm *kvm) {}
512
513#endif
514
467#endif 515#endif
diff --git a/include/linux/kvm_types.h b/include/linux/kvm_types.h
index 9b6f395c9625..2b8318c83e53 100644
--- a/include/linux/kvm_types.h
+++ b/include/linux/kvm_types.h
@@ -40,17 +40,4 @@ typedef unsigned long hfn_t;
40 40
41typedef hfn_t pfn_t; 41typedef hfn_t pfn_t;
42 42
43struct kvm_pio_request {
44 unsigned long count;
45 int cur_count;
46 struct page *guest_pages[2];
47 unsigned guest_page_offset;
48 int in;
49 int port;
50 int size;
51 int string;
52 int down;
53 int rep;
54};
55
56#endif /* __KVM_TYPES_H__ */ 43#endif /* __KVM_TYPES_H__ */
diff --git a/include/linux/latencytop.h b/include/linux/latencytop.h
index 901c2d6377a8..b0e99898527c 100644
--- a/include/linux/latencytop.h
+++ b/include/linux/latencytop.h
@@ -9,6 +9,7 @@
9#ifndef _INCLUDE_GUARD_LATENCYTOP_H_ 9#ifndef _INCLUDE_GUARD_LATENCYTOP_H_
10#define _INCLUDE_GUARD_LATENCYTOP_H_ 10#define _INCLUDE_GUARD_LATENCYTOP_H_
11 11
12#include <linux/compiler.h>
12#ifdef CONFIG_LATENCYTOP 13#ifdef CONFIG_LATENCYTOP
13 14
14#define LT_SAVECOUNT 32 15#define LT_SAVECOUNT 32
@@ -24,7 +25,14 @@ struct latency_record {
24 25
25struct task_struct; 26struct task_struct;
26 27
27void account_scheduler_latency(struct task_struct *task, int usecs, int inter); 28extern int latencytop_enabled;
29void __account_scheduler_latency(struct task_struct *task, int usecs, int inter);
30static inline void
31account_scheduler_latency(struct task_struct *task, int usecs, int inter)
32{
33 if (unlikely(latencytop_enabled))
34 __account_scheduler_latency(task, usecs, inter);
35}
28 36
29void clear_all_latency_tracing(struct task_struct *p); 37void clear_all_latency_tracing(struct task_struct *p);
30 38
diff --git a/include/linux/libata.h b/include/linux/libata.h
index dc18b87ed722..76262d83656b 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -795,6 +795,7 @@ struct ata_port_operations {
795 ata_reset_fn_t pmp_hardreset; 795 ata_reset_fn_t pmp_hardreset;
796 ata_postreset_fn_t pmp_postreset; 796 ata_postreset_fn_t pmp_postreset;
797 void (*error_handler)(struct ata_port *ap); 797 void (*error_handler)(struct ata_port *ap);
798 void (*lost_interrupt)(struct ata_port *ap);
798 void (*post_internal_cmd)(struct ata_queued_cmd *qc); 799 void (*post_internal_cmd)(struct ata_queued_cmd *qc);
799 800
800 /* 801 /*
@@ -836,6 +837,8 @@ struct ata_port_operations {
836 void (*bmdma_start)(struct ata_queued_cmd *qc); 837 void (*bmdma_start)(struct ata_queued_cmd *qc);
837 void (*bmdma_stop)(struct ata_queued_cmd *qc); 838 void (*bmdma_stop)(struct ata_queued_cmd *qc);
838 u8 (*bmdma_status)(struct ata_port *ap); 839 u8 (*bmdma_status)(struct ata_port *ap);
840
841 void (*drain_fifo)(struct ata_queued_cmd *qc);
839#endif /* CONFIG_ATA_SFF */ 842#endif /* CONFIG_ATA_SFF */
840 843
841 ssize_t (*em_show)(struct ata_port *ap, char *buf); 844 ssize_t (*em_show)(struct ata_port *ap, char *buf);
@@ -1008,6 +1011,9 @@ extern int ata_cable_sata(struct ata_port *ap);
1008extern int ata_cable_ignore(struct ata_port *ap); 1011extern int ata_cable_ignore(struct ata_port *ap);
1009extern int ata_cable_unknown(struct ata_port *ap); 1012extern int ata_cable_unknown(struct ata_port *ap);
1010 1013
1014extern void ata_pio_queue_task(struct ata_port *ap, void *data,
1015 unsigned long delay);
1016
1011/* Timing helpers */ 1017/* Timing helpers */
1012extern unsigned int ata_pio_need_iordy(const struct ata_device *); 1018extern unsigned int ata_pio_need_iordy(const struct ata_device *);
1013extern const struct ata_timing *ata_timing_find_mode(u8 xfer_mode); 1019extern const struct ata_timing *ata_timing_find_mode(u8 xfer_mode);
@@ -1572,6 +1578,7 @@ extern bool ata_sff_qc_fill_rtf(struct ata_queued_cmd *qc);
1572extern unsigned int ata_sff_host_intr(struct ata_port *ap, 1578extern unsigned int ata_sff_host_intr(struct ata_port *ap,
1573 struct ata_queued_cmd *qc); 1579 struct ata_queued_cmd *qc);
1574extern irqreturn_t ata_sff_interrupt(int irq, void *dev_instance); 1580extern irqreturn_t ata_sff_interrupt(int irq, void *dev_instance);
1581extern void ata_sff_lost_interrupt(struct ata_port *ap);
1575extern void ata_sff_freeze(struct ata_port *ap); 1582extern void ata_sff_freeze(struct ata_port *ap);
1576extern void ata_sff_thaw(struct ata_port *ap); 1583extern void ata_sff_thaw(struct ata_port *ap);
1577extern int ata_sff_prereset(struct ata_link *link, unsigned long deadline); 1584extern int ata_sff_prereset(struct ata_link *link, unsigned long deadline);
@@ -1584,6 +1591,7 @@ extern int ata_sff_softreset(struct ata_link *link, unsigned int *classes,
1584extern int sata_sff_hardreset(struct ata_link *link, unsigned int *class, 1591extern int sata_sff_hardreset(struct ata_link *link, unsigned int *class,
1585 unsigned long deadline); 1592 unsigned long deadline);
1586extern void ata_sff_postreset(struct ata_link *link, unsigned int *classes); 1593extern void ata_sff_postreset(struct ata_link *link, unsigned int *classes);
1594extern void ata_sff_drain_fifo(struct ata_queued_cmd *qc);
1587extern void ata_sff_error_handler(struct ata_port *ap); 1595extern void ata_sff_error_handler(struct ata_port *ap);
1588extern void ata_sff_post_internal_cmd(struct ata_queued_cmd *qc); 1596extern void ata_sff_post_internal_cmd(struct ata_queued_cmd *qc);
1589extern int ata_sff_port_start(struct ata_port *ap); 1597extern int ata_sff_port_start(struct ata_port *ap);
diff --git a/include/linux/lm_interface.h b/include/linux/lm_interface.h
deleted file mode 100644
index 2ed8fa1b762b..000000000000
--- a/include/linux/lm_interface.h
+++ /dev/null
@@ -1,277 +0,0 @@
1/*
2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
3 * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
4 *
5 * This copyrighted material is made available to anyone wishing to use,
6 * modify, copy, or redistribute it subject to the terms and conditions
7 * of the GNU General Public License version 2.
8 */
9
10#ifndef __LM_INTERFACE_DOT_H__
11#define __LM_INTERFACE_DOT_H__
12
13
14typedef void (*lm_callback_t) (void *ptr, unsigned int type, void *data);
15
16/*
17 * lm_mount() flags
18 *
19 * LM_MFLAG_SPECTATOR
20 * GFS is asking to join the filesystem's lockspace, but it doesn't want to
21 * modify the filesystem. The lock module shouldn't assign a journal to the FS
22 * mount. It shouldn't send recovery callbacks to the FS mount. If the node
23 * dies or withdraws, all locks can be wiped immediately.
24 *
25 * LM_MFLAG_CONV_NODROP
26 * Do not allow the dlm to internally resolve conversion deadlocks by demoting
27 * the lock to unlocked and then reacquiring it in the requested mode. Instead,
28 * it should cancel the request and return LM_OUT_CONV_DEADLK.
29 */
30
31#define LM_MFLAG_SPECTATOR 0x00000001
32#define LM_MFLAG_CONV_NODROP 0x00000002
33
34/*
35 * lm_lockstruct flags
36 *
37 * LM_LSFLAG_LOCAL
38 * The lock_nolock module returns LM_LSFLAG_LOCAL to GFS, indicating that GFS
39 * can make single-node optimizations.
40 */
41
42#define LM_LSFLAG_LOCAL 0x00000001
43
44/*
45 * lm_lockname types
46 */
47
48#define LM_TYPE_RESERVED 0x00
49#define LM_TYPE_NONDISK 0x01
50#define LM_TYPE_INODE 0x02
51#define LM_TYPE_RGRP 0x03
52#define LM_TYPE_META 0x04
53#define LM_TYPE_IOPEN 0x05
54#define LM_TYPE_FLOCK 0x06
55#define LM_TYPE_PLOCK 0x07
56#define LM_TYPE_QUOTA 0x08
57#define LM_TYPE_JOURNAL 0x09
58
59/*
60 * lm_lock() states
61 *
62 * SHARED is compatible with SHARED, not with DEFERRED or EX.
63 * DEFERRED is compatible with DEFERRED, not with SHARED or EX.
64 */
65
66#define LM_ST_UNLOCKED 0
67#define LM_ST_EXCLUSIVE 1
68#define LM_ST_DEFERRED 2
69#define LM_ST_SHARED 3
70
71/*
72 * lm_lock() flags
73 *
74 * LM_FLAG_TRY
75 * Don't wait to acquire the lock if it can't be granted immediately.
76 *
77 * LM_FLAG_TRY_1CB
78 * Send one blocking callback if TRY is set and the lock is not granted.
79 *
80 * LM_FLAG_NOEXP
81 * GFS sets this flag on lock requests it makes while doing journal recovery.
82 * These special requests should not be blocked due to the recovery like
83 * ordinary locks would be.
84 *
85 * LM_FLAG_ANY
86 * A SHARED request may also be granted in DEFERRED, or a DEFERRED request may
87 * also be granted in SHARED. The preferred state is whichever is compatible
88 * with other granted locks, or the specified state if no other locks exist.
89 *
90 * LM_FLAG_PRIORITY
91 * Override fairness considerations. Suppose a lock is held in a shared state
92 * and there is a pending request for the deferred state. A shared lock
93 * request with the priority flag would be allowed to bypass the deferred
94 * request and directly join the other shared lock. A shared lock request
95 * without the priority flag might be forced to wait until the deferred
96 * requested had acquired and released the lock.
97 */
98
99#define LM_FLAG_TRY 0x00000001
100#define LM_FLAG_TRY_1CB 0x00000002
101#define LM_FLAG_NOEXP 0x00000004
102#define LM_FLAG_ANY 0x00000008
103#define LM_FLAG_PRIORITY 0x00000010
104
105/*
106 * lm_lock() and lm_async_cb return flags
107 *
108 * LM_OUT_ST_MASK
109 * Masks the lower two bits of lock state in the returned value.
110 *
111 * LM_OUT_CACHEABLE
112 * The lock hasn't been released so GFS can continue to cache data for it.
113 *
114 * LM_OUT_CANCELED
115 * The lock request was canceled.
116 *
117 * LM_OUT_ASYNC
118 * The result of the request will be returned in an LM_CB_ASYNC callback.
119 *
120 * LM_OUT_CONV_DEADLK
121 * The lock request was canceled do to a conversion deadlock.
122 */
123
124#define LM_OUT_ST_MASK 0x00000003
125#define LM_OUT_CANCELED 0x00000008
126#define LM_OUT_ASYNC 0x00000080
127#define LM_OUT_ERROR 0x00000100
128
129/*
130 * lm_callback_t types
131 *
132 * LM_CB_NEED_E LM_CB_NEED_D LM_CB_NEED_S
133 * Blocking callback, a remote node is requesting the given lock in
134 * EXCLUSIVE, DEFERRED, or SHARED.
135 *
136 * LM_CB_NEED_RECOVERY
137 * The given journal needs to be recovered.
138 *
139 * LM_CB_ASYNC
140 * The given lock has been granted.
141 */
142
143#define LM_CB_NEED_E 257
144#define LM_CB_NEED_D 258
145#define LM_CB_NEED_S 259
146#define LM_CB_NEED_RECOVERY 260
147#define LM_CB_ASYNC 262
148
149/*
150 * lm_recovery_done() messages
151 */
152
153#define LM_RD_GAVEUP 308
154#define LM_RD_SUCCESS 309
155
156
157struct lm_lockname {
158 u64 ln_number;
159 unsigned int ln_type;
160};
161
162#define lm_name_equal(name1, name2) \
163 (((name1)->ln_number == (name2)->ln_number) && \
164 ((name1)->ln_type == (name2)->ln_type)) \
165
166struct lm_async_cb {
167 struct lm_lockname lc_name;
168 int lc_ret;
169};
170
171struct lm_lockstruct;
172
173struct lm_lockops {
174 const char *lm_proto_name;
175
176 /*
177 * Mount/Unmount
178 */
179
180 int (*lm_mount) (char *table_name, char *host_data,
181 lm_callback_t cb, void *cb_data,
182 unsigned int min_lvb_size, int flags,
183 struct lm_lockstruct *lockstruct,
184 struct kobject *fskobj);
185
186 void (*lm_others_may_mount) (void *lockspace);
187
188 void (*lm_unmount) (void *lockspace);
189
190 void (*lm_withdraw) (void *lockspace);
191
192 /*
193 * Lock oriented operations
194 */
195
196 int (*lm_get_lock) (void *lockspace, struct lm_lockname *name, void **lockp);
197
198 void (*lm_put_lock) (void *lock);
199
200 unsigned int (*lm_lock) (void *lock, unsigned int cur_state,
201 unsigned int req_state, unsigned int flags);
202
203 unsigned int (*lm_unlock) (void *lock, unsigned int cur_state);
204
205 void (*lm_cancel) (void *lock);
206
207 int (*lm_hold_lvb) (void *lock, char **lvbp);
208 void (*lm_unhold_lvb) (void *lock, char *lvb);
209
210 /*
211 * Posix Lock oriented operations
212 */
213
214 int (*lm_plock_get) (void *lockspace, struct lm_lockname *name,
215 struct file *file, struct file_lock *fl);
216
217 int (*lm_plock) (void *lockspace, struct lm_lockname *name,
218 struct file *file, int cmd, struct file_lock *fl);
219
220 int (*lm_punlock) (void *lockspace, struct lm_lockname *name,
221 struct file *file, struct file_lock *fl);
222
223 /*
224 * Client oriented operations
225 */
226
227 void (*lm_recovery_done) (void *lockspace, unsigned int jid,
228 unsigned int message);
229
230 struct module *lm_owner;
231};
232
233/*
234 * lm_mount() return values
235 *
236 * ls_jid - the journal ID this node should use
237 * ls_first - this node is the first to mount the file system
238 * ls_lvb_size - size in bytes of lock value blocks
239 * ls_lockspace - lock module's context for this file system
240 * ls_ops - lock module's functions
241 * ls_flags - lock module features
242 */
243
244struct lm_lockstruct {
245 unsigned int ls_jid;
246 unsigned int ls_first;
247 unsigned int ls_lvb_size;
248 void *ls_lockspace;
249 const struct lm_lockops *ls_ops;
250 int ls_flags;
251};
252
253/*
254 * Lock module bottom interface. A lock module makes itself available to GFS
255 * with these functions.
256 */
257
258int gfs2_register_lockproto(const struct lm_lockops *proto);
259void gfs2_unregister_lockproto(const struct lm_lockops *proto);
260
261/*
262 * Lock module top interface. GFS calls these functions when mounting or
263 * unmounting a file system.
264 */
265
266int gfs2_mount_lockproto(char *proto_name, char *table_name, char *host_data,
267 lm_callback_t cb, void *cb_data,
268 unsigned int min_lvb_size, int flags,
269 struct lm_lockstruct *lockstruct,
270 struct kobject *fskobj);
271
272void gfs2_unmount_lockproto(struct lm_lockstruct *lockstruct);
273
274void gfs2_withdraw_lockproto(struct lm_lockstruct *lockstruct);
275
276#endif /* __LM_INTERFACE_DOT_H__ */
277
diff --git a/include/linux/maple.h b/include/linux/maple.h
index c23d3f51ba40..d9a51b9b3300 100644
--- a/include/linux/maple.h
+++ b/include/linux/maple.h
@@ -8,33 +8,49 @@ extern struct bus_type maple_bus_type;
8 8
9/* Maple Bus command and response codes */ 9/* Maple Bus command and response codes */
10enum maple_code { 10enum maple_code {
11 MAPLE_RESPONSE_FILEERR = -5, 11 MAPLE_RESPONSE_FILEERR = -5,
12 MAPLE_RESPONSE_AGAIN = -4, /* request should be retransmitted */ 12 MAPLE_RESPONSE_AGAIN, /* retransmit */
13 MAPLE_RESPONSE_BADCMD = -3, 13 MAPLE_RESPONSE_BADCMD,
14 MAPLE_RESPONSE_BADFUNC = -2, 14 MAPLE_RESPONSE_BADFUNC,
15 MAPLE_RESPONSE_NONE = -1, /* unit didn't respond at all */ 15 MAPLE_RESPONSE_NONE, /* unit didn't respond*/
16 MAPLE_COMMAND_DEVINFO = 1, 16 MAPLE_COMMAND_DEVINFO = 1,
17 MAPLE_COMMAND_ALLINFO = 2, 17 MAPLE_COMMAND_ALLINFO,
18 MAPLE_COMMAND_RESET = 3, 18 MAPLE_COMMAND_RESET,
19 MAPLE_COMMAND_KILL = 4, 19 MAPLE_COMMAND_KILL,
20 MAPLE_RESPONSE_DEVINFO = 5, 20 MAPLE_RESPONSE_DEVINFO,
21 MAPLE_RESPONSE_ALLINFO = 6, 21 MAPLE_RESPONSE_ALLINFO,
22 MAPLE_RESPONSE_OK = 7, 22 MAPLE_RESPONSE_OK,
23 MAPLE_RESPONSE_DATATRF = 8, 23 MAPLE_RESPONSE_DATATRF,
24 MAPLE_COMMAND_GETCOND = 9, 24 MAPLE_COMMAND_GETCOND,
25 MAPLE_COMMAND_GETMINFO = 10, 25 MAPLE_COMMAND_GETMINFO,
26 MAPLE_COMMAND_BREAD = 11, 26 MAPLE_COMMAND_BREAD,
27 MAPLE_COMMAND_BWRITE = 12, 27 MAPLE_COMMAND_BWRITE,
28 MAPLE_COMMAND_SETCOND = 14 28 MAPLE_COMMAND_BSYNC,
29 MAPLE_COMMAND_SETCOND,
30 MAPLE_COMMAND_MICCONTROL
31};
32
33enum maple_file_errors {
34 MAPLE_FILEERR_INVALID_PARTITION = 0x01000000,
35 MAPLE_FILEERR_PHASE_ERROR = 0x02000000,
36 MAPLE_FILEERR_INVALID_BLOCK = 0x04000000,
37 MAPLE_FILEERR_WRITE_ERROR = 0x08000000,
38 MAPLE_FILEERR_INVALID_WRITE_LENGTH = 0x10000000,
39 MAPLE_FILEERR_BAD_CRC = 0x20000000
40};
41
42struct maple_buffer {
43 char bufx[0x400];
44 void *buf;
29}; 45};
30 46
31struct mapleq { 47struct mapleq {
32 struct list_head list; 48 struct list_head list;
33 struct maple_device *dev; 49 struct maple_device *dev;
34 void *sendbuf, *recvbuf, *recvbufdcsp; 50 struct maple_buffer *recvbuf;
51 void *sendbuf, *recvbuf_p2;
35 unsigned char length; 52 unsigned char length;
36 enum maple_code command; 53 enum maple_code command;
37 struct mutex mutex;
38}; 54};
39 55
40struct maple_devinfo { 56struct maple_devinfo {
@@ -52,11 +68,15 @@ struct maple_device {
52 struct maple_driver *driver; 68 struct maple_driver *driver;
53 struct mapleq *mq; 69 struct mapleq *mq;
54 void (*callback) (struct mapleq * mq); 70 void (*callback) (struct mapleq * mq);
71 void (*fileerr_handler)(struct maple_device *mdev, void *recvbuf);
72 int (*can_unload)(struct maple_device *mdev);
55 unsigned long when, interval, function; 73 unsigned long when, interval, function;
56 struct maple_devinfo devinfo; 74 struct maple_devinfo devinfo;
57 unsigned char port, unit; 75 unsigned char port, unit;
58 char product_name[32]; 76 char product_name[32];
59 char product_licence[64]; 77 char product_licence[64];
78 atomic_t busy;
79 wait_queue_head_t maple_wait;
60 struct device dev; 80 struct device dev;
61}; 81};
62 82
@@ -72,7 +92,7 @@ void maple_getcond_callback(struct maple_device *dev,
72int maple_driver_register(struct maple_driver *); 92int maple_driver_register(struct maple_driver *);
73void maple_driver_unregister(struct maple_driver *); 93void maple_driver_unregister(struct maple_driver *);
74 94
75int maple_add_packet_sleeps(struct maple_device *mdev, u32 function, 95int maple_add_packet(struct maple_device *mdev, u32 function,
76 u32 command, u32 length, void *data); 96 u32 command, u32 length, void *data);
77void maple_clear_dev(struct maple_device *mdev); 97void maple_clear_dev(struct maple_device *mdev);
78 98
diff --git a/include/linux/mfd/wm8350/audio.h b/include/linux/mfd/wm8350/audio.h
index af95a1d2f3a1..d899dc0223ba 100644
--- a/include/linux/mfd/wm8350/audio.h
+++ b/include/linux/mfd/wm8350/audio.h
@@ -490,6 +490,7 @@
490/* 490/*
491 * R231 (0xE7) - Jack Status 491 * R231 (0xE7) - Jack Status
492 */ 492 */
493#define WM8350_JACK_L_LVL 0x0800
493#define WM8350_JACK_R_LVL 0x0400 494#define WM8350_JACK_R_LVL 0x0400
494 495
495/* 496/*
diff --git a/include/linux/mfd/wm8400-audio.h b/include/linux/mfd/wm8400-audio.h
index b6640e018046..e06ed3eb1d0a 100644
--- a/include/linux/mfd/wm8400-audio.h
+++ b/include/linux/mfd/wm8400-audio.h
@@ -1181,6 +1181,7 @@
1181#define WM8400_FLL_OUTDIV_SHIFT 0 /* FLL_OUTDIV - [2:0] */ 1181#define WM8400_FLL_OUTDIV_SHIFT 0 /* FLL_OUTDIV - [2:0] */
1182#define WM8400_FLL_OUTDIV_WIDTH 3 /* FLL_OUTDIV - [2:0] */ 1182#define WM8400_FLL_OUTDIV_WIDTH 3 /* FLL_OUTDIV - [2:0] */
1183 1183
1184struct wm8400;
1184void wm8400_reset_codec_reg_cache(struct wm8400 *wm8400); 1185void wm8400_reset_codec_reg_cache(struct wm8400 *wm8400);
1185 1186
1186#endif 1187#endif
diff --git a/include/linux/mlx4/cmd.h b/include/linux/mlx4/cmd.h
index cf9c679ab38b..0f82293a82ed 100644
--- a/include/linux/mlx4/cmd.h
+++ b/include/linux/mlx4/cmd.h
@@ -55,6 +55,7 @@ enum {
55 MLX4_CMD_CLOSE_PORT = 0xa, 55 MLX4_CMD_CLOSE_PORT = 0xa,
56 MLX4_CMD_QUERY_HCA = 0xb, 56 MLX4_CMD_QUERY_HCA = 0xb,
57 MLX4_CMD_QUERY_PORT = 0x43, 57 MLX4_CMD_QUERY_PORT = 0x43,
58 MLX4_CMD_SENSE_PORT = 0x4d,
58 MLX4_CMD_SET_PORT = 0xc, 59 MLX4_CMD_SET_PORT = 0xc,
59 MLX4_CMD_ACCESS_DDR = 0x2e, 60 MLX4_CMD_ACCESS_DDR = 0x2e,
60 MLX4_CMD_MAP_ICM = 0xffa, 61 MLX4_CMD_MAP_ICM = 0xffa,
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h
index 8f659cc29960..3aff8a6a389e 100644
--- a/include/linux/mlx4/device.h
+++ b/include/linux/mlx4/device.h
@@ -155,8 +155,9 @@ enum mlx4_qp_region {
155}; 155};
156 156
157enum mlx4_port_type { 157enum mlx4_port_type {
158 MLX4_PORT_TYPE_IB = 1 << 0, 158 MLX4_PORT_TYPE_IB = 1,
159 MLX4_PORT_TYPE_ETH = 1 << 1, 159 MLX4_PORT_TYPE_ETH = 2,
160 MLX4_PORT_TYPE_AUTO = 3
160}; 161};
161 162
162enum mlx4_special_vlan_idx { 163enum mlx4_special_vlan_idx {
@@ -237,6 +238,7 @@ struct mlx4_caps {
237 enum mlx4_port_type port_type[MLX4_MAX_PORTS + 1]; 238 enum mlx4_port_type port_type[MLX4_MAX_PORTS + 1];
238 u8 supported_type[MLX4_MAX_PORTS + 1]; 239 u8 supported_type[MLX4_MAX_PORTS + 1];
239 u32 port_mask; 240 u32 port_mask;
241 enum mlx4_port_type possible_type[MLX4_MAX_PORTS + 1];
240}; 242};
241 243
242struct mlx4_buf_list { 244struct mlx4_buf_list {
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index fde86671f48f..1bf5900ffe43 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -454,4 +454,13 @@ struct dmi_system_id {
454 454
455#define DMI_MATCH(a, b) { a, b } 455#define DMI_MATCH(a, b) { a, b }
456 456
457#define PLATFORM_NAME_SIZE 20
458#define PLATFORM_MODULE_PREFIX "platform:"
459
460struct platform_device_id {
461 char name[PLATFORM_NAME_SIZE];
462 kernel_ulong_t driver_data
463 __attribute__((aligned(sizeof(kernel_ulong_t))));
464};
465
457#endif /* LINUX_MOD_DEVICETABLE_H */ 466#endif /* LINUX_MOD_DEVICETABLE_H */
diff --git a/include/linux/mount.h b/include/linux/mount.h
index cab2a85e2ee8..51f55f903aff 100644
--- a/include/linux/mount.h
+++ b/include/linux/mount.h
@@ -27,6 +27,7 @@ struct mnt_namespace;
27#define MNT_NODIRATIME 0x10 27#define MNT_NODIRATIME 0x10
28#define MNT_RELATIME 0x20 28#define MNT_RELATIME 0x20
29#define MNT_READONLY 0x40 /* does the user want this to be r/o? */ 29#define MNT_READONLY 0x40 /* does the user want this to be r/o? */
30#define MNT_STRICTATIME 0x80
30 31
31#define MNT_SHRINKABLE 0x100 32#define MNT_SHRINKABLE 0x100
32#define MNT_IMBALANCED_WRITE_COUNT 0x200 /* just for debugging */ 33#define MNT_IMBALANCED_WRITE_COUNT 0x200 /* just for debugging */
diff --git a/include/linux/mroute.h b/include/linux/mroute.h
index 8a455694d682..0d45b4e8d367 100644
--- a/include/linux/mroute.h
+++ b/include/linux/mroute.h
@@ -193,6 +193,9 @@ struct vif_device
193struct mfc_cache 193struct mfc_cache
194{ 194{
195 struct mfc_cache *next; /* Next entry on cache line */ 195 struct mfc_cache *next; /* Next entry on cache line */
196#ifdef CONFIG_NET_NS
197 struct net *mfc_net;
198#endif
196 __be32 mfc_mcastgrp; /* Group the entry belongs to */ 199 __be32 mfc_mcastgrp; /* Group the entry belongs to */
197 __be32 mfc_origin; /* Source of packet */ 200 __be32 mfc_origin; /* Source of packet */
198 vifi_t mfc_parent; /* Source interface */ 201 vifi_t mfc_parent; /* Source interface */
@@ -215,6 +218,18 @@ struct mfc_cache
215 } mfc_un; 218 } mfc_un;
216}; 219};
217 220
221static inline
222struct net *mfc_net(const struct mfc_cache *mfc)
223{
224 return read_pnet(&mfc->mfc_net);
225}
226
227static inline
228void mfc_net_set(struct mfc_cache *mfc, struct net *net)
229{
230 write_pnet(&mfc->mfc_net, hold_net(net));
231}
232
218#define MFC_STATIC 1 233#define MFC_STATIC 1
219#define MFC_NOTIFY 2 234#define MFC_NOTIFY 2
220 235
@@ -241,7 +256,8 @@ struct mfc_cache
241 256
242#ifdef __KERNEL__ 257#ifdef __KERNEL__
243struct rtmsg; 258struct rtmsg;
244extern int ipmr_get_route(struct sk_buff *skb, struct rtmsg *rtm, int nowait); 259extern int ipmr_get_route(struct net *net, struct sk_buff *skb,
260 struct rtmsg *rtm, int nowait);
245#endif 261#endif
246 262
247#endif 263#endif
diff --git a/include/linux/ncp_no.h b/include/linux/ncp_no.h
index f56a696a7cc6..cddaa48fb182 100644
--- a/include/linux/ncp_no.h
+++ b/include/linux/ncp_no.h
@@ -2,18 +2,18 @@
2#define _NCP_NO 2#define _NCP_NO
3 3
4/* these define the attribute byte as seen by NCP */ 4/* these define the attribute byte as seen by NCP */
5#define aRONLY (__constant_cpu_to_le32(1)) 5#define aRONLY (__cpu_to_le32(1))
6#define aHIDDEN (__constant_cpu_to_le32(2)) 6#define aHIDDEN (__cpu_to_le32(2))
7#define aSYSTEM (__constant_cpu_to_le32(4)) 7#define aSYSTEM (__cpu_to_le32(4))
8#define aEXECUTE (__constant_cpu_to_le32(8)) 8#define aEXECUTE (__cpu_to_le32(8))
9#define aDIR (__constant_cpu_to_le32(0x10)) 9#define aDIR (__cpu_to_le32(0x10))
10#define aARCH (__constant_cpu_to_le32(0x20)) 10#define aARCH (__cpu_to_le32(0x20))
11#define aSHARED (__constant_cpu_to_le32(0x80)) 11#define aSHARED (__cpu_to_le32(0x80))
12#define aDONTSUBALLOCATE (__constant_cpu_to_le32(1L<<11)) 12#define aDONTSUBALLOCATE (__cpu_to_le32(1L<<11))
13#define aTRANSACTIONAL (__constant_cpu_to_le32(1L<<12)) 13#define aTRANSACTIONAL (__cpu_to_le32(1L<<12))
14#define aPURGE (__constant_cpu_to_le32(1L<<16)) 14#define aPURGE (__cpu_to_le32(1L<<16))
15#define aRENAMEINHIBIT (__constant_cpu_to_le32(1L<<17)) 15#define aRENAMEINHIBIT (__cpu_to_le32(1L<<17))
16#define aDELETEINHIBIT (__constant_cpu_to_le32(1L<<18)) 16#define aDELETEINHIBIT (__cpu_to_le32(1L<<18))
17#define aDONTCOMPRESS (__constant_cpu_to_le32(1L<<27)) 17#define aDONTCOMPRESS (__cpu_to_le32(1L<<27))
18 18
19#endif /* _NCP_NO */ 19#endif /* _NCP_NO */
diff --git a/include/linux/neighbour.h b/include/linux/neighbour.h
index 8730d5dae1bc..12c9de138451 100644
--- a/include/linux/neighbour.h
+++ b/include/linux/neighbour.h
@@ -31,6 +31,7 @@ enum
31 * Neighbor Cache Entry Flags 31 * Neighbor Cache Entry Flags
32 */ 32 */
33 33
34#define NTF_USE 0x01
34#define NTF_PROXY 0x08 /* == ATF_PUBL */ 35#define NTF_PROXY 0x08 /* == ATF_PUBL */
35#define NTF_ROUTER 0x80 36#define NTF_ROUTER 0x80
36 37
diff --git a/include/linux/net.h b/include/linux/net.h
index 4515efae4c39..4fc2ffd527f9 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
@@ -129,11 +129,15 @@ struct socket {
129 socket_state state; 129 socket_state state;
130 short type; 130 short type;
131 unsigned long flags; 131 unsigned long flags;
132 const struct proto_ops *ops; 132 /*
133 * Please keep fasync_list & wait fields in the same cache line
134 */
133 struct fasync_struct *fasync_list; 135 struct fasync_struct *fasync_list;
136 wait_queue_head_t wait;
137
134 struct file *file; 138 struct file *file;
135 struct sock *sk; 139 struct sock *sk;
136 wait_queue_head_t wait; 140 const struct proto_ops *ops;
137}; 141};
138 142
139struct vm_area_struct; 143struct vm_area_struct;
diff --git a/include/linux/net_dropmon.h b/include/linux/net_dropmon.h
new file mode 100644
index 000000000000..0217fb81a630
--- /dev/null
+++ b/include/linux/net_dropmon.h
@@ -0,0 +1,56 @@
1#ifndef __NET_DROPMON_H
2#define __NET_DROPMON_H
3
4#include <linux/netlink.h>
5
6struct net_dm_drop_point {
7 __u8 pc[8];
8 __u32 count;
9};
10
11#define NET_DM_CFG_VERSION 0
12#define NET_DM_CFG_ALERT_COUNT 1
13#define NET_DM_CFG_ALERT_DELAY 2
14#define NET_DM_CFG_MAX 3
15
16struct net_dm_config_entry {
17 __u32 type;
18 __u64 data __attribute__((aligned(8)));
19};
20
21struct net_dm_config_msg {
22 __u32 entries;
23 struct net_dm_config_entry options[0];
24};
25
26struct net_dm_alert_msg {
27 __u32 entries;
28 struct net_dm_drop_point points[0];
29};
30
31struct net_dm_user_msg {
32 union {
33 struct net_dm_config_msg user;
34 struct net_dm_alert_msg alert;
35 } u;
36};
37
38
39/* These are the netlink message types for this protocol */
40
41enum {
42 NET_DM_CMD_UNSPEC = 0,
43 NET_DM_CMD_ALERT,
44 NET_DM_CMD_CONFIG,
45 NET_DM_CMD_START,
46 NET_DM_CMD_STOP,
47 _NET_DM_CMD_MAX,
48};
49
50#define NET_DM_CMD_MAX (_NET_DM_CMD_MAX - 1)
51
52/*
53 * Our group identifiers
54 */
55#define NET_DM_GRP_ALERT 1
56#endif
diff --git a/include/linux/net_tstamp.h b/include/linux/net_tstamp.h
new file mode 100644
index 000000000000..a3b8546354ac
--- /dev/null
+++ b/include/linux/net_tstamp.h
@@ -0,0 +1,104 @@
1/*
2 * Userspace API for hardware time stamping of network packets
3 *
4 * Copyright (C) 2008,2009 Intel Corporation
5 * Author: Patrick Ohly <patrick.ohly@intel.com>
6 *
7 */
8
9#ifndef _NET_TIMESTAMPING_H
10#define _NET_TIMESTAMPING_H
11
12#include <linux/socket.h> /* for SO_TIMESTAMPING */
13
14/* SO_TIMESTAMPING gets an integer bit field comprised of these values */
15enum {
16 SOF_TIMESTAMPING_TX_HARDWARE = (1<<0),
17 SOF_TIMESTAMPING_TX_SOFTWARE = (1<<1),
18 SOF_TIMESTAMPING_RX_HARDWARE = (1<<2),
19 SOF_TIMESTAMPING_RX_SOFTWARE = (1<<3),
20 SOF_TIMESTAMPING_SOFTWARE = (1<<4),
21 SOF_TIMESTAMPING_SYS_HARDWARE = (1<<5),
22 SOF_TIMESTAMPING_RAW_HARDWARE = (1<<6),
23 SOF_TIMESTAMPING_MASK =
24 (SOF_TIMESTAMPING_RAW_HARDWARE - 1) |
25 SOF_TIMESTAMPING_RAW_HARDWARE
26};
27
28/**
29 * struct hwtstamp_config - %SIOCSHWTSTAMP parameter
30 *
31 * @flags: no flags defined right now, must be zero
32 * @tx_type: one of HWTSTAMP_TX_*
33 * @rx_type: one of one of HWTSTAMP_FILTER_*
34 *
35 * %SIOCSHWTSTAMP expects a &struct ifreq with a ifr_data pointer to
36 * this structure. dev_ifsioc() in the kernel takes care of the
37 * translation between 32 bit userspace and 64 bit kernel. The
38 * structure is intentionally chosen so that it has the same layout on
39 * 32 and 64 bit systems, don't break this!
40 */
41struct hwtstamp_config {
42 int flags;
43 int tx_type;
44 int rx_filter;
45};
46
47/* possible values for hwtstamp_config->tx_type */
48enum {
49 /*
50 * No outgoing packet will need hardware time stamping;
51 * should a packet arrive which asks for it, no hardware
52 * time stamping will be done.
53 */
54 HWTSTAMP_TX_OFF,
55
56 /*
57 * Enables hardware time stamping for outgoing packets;
58 * the sender of the packet decides which are to be
59 * time stamped by setting %SOF_TIMESTAMPING_TX_SOFTWARE
60 * before sending the packet.
61 */
62 HWTSTAMP_TX_ON,
63};
64
65/* possible values for hwtstamp_config->rx_filter */
66enum {
67 /* time stamp no incoming packet at all */
68 HWTSTAMP_FILTER_NONE,
69
70 /* time stamp any incoming packet */
71 HWTSTAMP_FILTER_ALL,
72
73 /* return value: time stamp all packets requested plus some others */
74 HWTSTAMP_FILTER_SOME,
75
76 /* PTP v1, UDP, any kind of event packet */
77 HWTSTAMP_FILTER_PTP_V1_L4_EVENT,
78 /* PTP v1, UDP, Sync packet */
79 HWTSTAMP_FILTER_PTP_V1_L4_SYNC,
80 /* PTP v1, UDP, Delay_req packet */
81 HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ,
82 /* PTP v2, UDP, any kind of event packet */
83 HWTSTAMP_FILTER_PTP_V2_L4_EVENT,
84 /* PTP v2, UDP, Sync packet */
85 HWTSTAMP_FILTER_PTP_V2_L4_SYNC,
86 /* PTP v2, UDP, Delay_req packet */
87 HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ,
88
89 /* 802.AS1, Ethernet, any kind of event packet */
90 HWTSTAMP_FILTER_PTP_V2_L2_EVENT,
91 /* 802.AS1, Ethernet, Sync packet */
92 HWTSTAMP_FILTER_PTP_V2_L2_SYNC,
93 /* 802.AS1, Ethernet, Delay_req packet */
94 HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ,
95
96 /* PTP v2/802.AS1, any layer, any kind of event packet */
97 HWTSTAMP_FILTER_PTP_V2_EVENT,
98 /* PTP v2/802.AS1, any layer, Sync packet */
99 HWTSTAMP_FILTER_PTP_V2_SYNC,
100 /* PTP v2/802.AS1, any layer, Delay_req packet */
101 HWTSTAMP_FILTER_PTP_V2_DELAY_REQ,
102};
103
104#endif /* _NET_TIMESTAMPING_H */
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 659366734f3f..be3ebd7e8ce5 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -96,7 +96,7 @@ struct wireless_dev;
96 * Compute the worst case header length according to the protocols 96 * Compute the worst case header length according to the protocols
97 * used. 97 * used.
98 */ 98 */
99 99
100#if defined(CONFIG_WLAN_80211) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) 100#if defined(CONFIG_WLAN_80211) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
101# if defined(CONFIG_MAC80211_MESH) 101# if defined(CONFIG_MAC80211_MESH)
102# define LL_MAX_HEADER 128 102# define LL_MAX_HEADER 128
@@ -124,7 +124,7 @@ struct wireless_dev;
124 * Network device statistics. Akin to the 2.0 ether stats but 124 * Network device statistics. Akin to the 2.0 ether stats but
125 * with byte counters. 125 * with byte counters.
126 */ 126 */
127 127
128struct net_device_stats 128struct net_device_stats
129{ 129{
130 unsigned long rx_packets; /* total packets received */ 130 unsigned long rx_packets; /* total packets received */
@@ -285,7 +285,7 @@ enum netdev_state_t
285 285
286/* 286/*
287 * This structure holds at boot time configured netdevice settings. They 287 * This structure holds at boot time configured netdevice settings. They
288 * are then used in the device probing. 288 * are then used in the device probing.
289 */ 289 */
290struct netdev_boot_setup { 290struct netdev_boot_setup {
291 char name[IFNAMSIZ]; 291 char name[IFNAMSIZ];
@@ -314,6 +314,9 @@ struct napi_struct {
314 spinlock_t poll_lock; 314 spinlock_t poll_lock;
315 int poll_owner; 315 int poll_owner;
316#endif 316#endif
317
318 unsigned int gro_count;
319
317 struct net_device *dev; 320 struct net_device *dev;
318 struct list_head dev_list; 321 struct list_head dev_list;
319 struct sk_buff *gro_list; 322 struct sk_buff *gro_list;
@@ -327,6 +330,14 @@ enum
327 NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */ 330 NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */
328}; 331};
329 332
333enum {
334 GRO_MERGED,
335 GRO_MERGED_FREE,
336 GRO_HELD,
337 GRO_NORMAL,
338 GRO_DROP,
339};
340
330extern void __napi_schedule(struct napi_struct *n); 341extern void __napi_schedule(struct napi_struct *n);
331 342
332static inline int napi_disable_pending(struct napi_struct *n) 343static inline int napi_disable_pending(struct napi_struct *n)
@@ -740,7 +751,7 @@ struct net_device
740 void *dsa_ptr; /* dsa specific data */ 751 void *dsa_ptr; /* dsa specific data */
741#endif 752#endif
742 void *atalk_ptr; /* AppleTalk link */ 753 void *atalk_ptr; /* AppleTalk link */
743 void *ip_ptr; /* IPv4 specific data */ 754 void *ip_ptr; /* IPv4 specific data */
744 void *dn_ptr; /* DECnet specific data */ 755 void *dn_ptr; /* DECnet specific data */
745 void *ip6_ptr; /* IPv6 specific data */ 756 void *ip6_ptr; /* IPv6 specific data */
746 void *ec_ptr; /* Econet specific data */ 757 void *ec_ptr; /* Econet specific data */
@@ -753,7 +764,7 @@ struct net_device
753 */ 764 */
754 unsigned long last_rx; /* Time of last Rx */ 765 unsigned long last_rx; /* Time of last Rx */
755 /* Interface address info used in eth_type_trans() */ 766 /* Interface address info used in eth_type_trans() */
756 unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast 767 unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast
757 because most packets are unicast) */ 768 because most packets are unicast) */
758 769
759 unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ 770 unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */
@@ -984,6 +995,9 @@ void netif_napi_add(struct net_device *dev, struct napi_struct *napi,
984void netif_napi_del(struct napi_struct *napi); 995void netif_napi_del(struct napi_struct *napi);
985 996
986struct napi_gro_cb { 997struct napi_gro_cb {
998 /* This indicates where we are processing relative to skb->data. */
999 int data_offset;
1000
987 /* This is non-zero if the packet may be of the same flow. */ 1001 /* This is non-zero if the packet may be of the same flow. */
988 int same_flow; 1002 int same_flow;
989 1003
@@ -1088,6 +1102,36 @@ extern int dev_restart(struct net_device *dev);
1088#ifdef CONFIG_NETPOLL_TRAP 1102#ifdef CONFIG_NETPOLL_TRAP
1089extern int netpoll_trap(void); 1103extern int netpoll_trap(void);
1090#endif 1104#endif
1105extern void *skb_gro_header(struct sk_buff *skb, unsigned int hlen);
1106extern int skb_gro_receive(struct sk_buff **head,
1107 struct sk_buff *skb);
1108
1109static inline unsigned int skb_gro_offset(const struct sk_buff *skb)
1110{
1111 return NAPI_GRO_CB(skb)->data_offset;
1112}
1113
1114static inline unsigned int skb_gro_len(const struct sk_buff *skb)
1115{
1116 return skb->len - NAPI_GRO_CB(skb)->data_offset;
1117}
1118
1119static inline void skb_gro_pull(struct sk_buff *skb, unsigned int len)
1120{
1121 NAPI_GRO_CB(skb)->data_offset += len;
1122}
1123
1124static inline void skb_gro_reset_offset(struct sk_buff *skb)
1125{
1126 NAPI_GRO_CB(skb)->data_offset = 0;
1127}
1128
1129static inline void *skb_gro_mac_header(struct sk_buff *skb)
1130{
1131 return skb_mac_header(skb) < skb->data ? skb_mac_header(skb) :
1132 page_address(skb_shinfo(skb)->frags[0].page) +
1133 skb_shinfo(skb)->frags[0].page_offset;
1134}
1091 1135
1092static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, 1136static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev,
1093 unsigned short type, 1137 unsigned short type,
@@ -1376,12 +1420,15 @@ extern int netif_receive_skb(struct sk_buff *skb);
1376extern void napi_gro_flush(struct napi_struct *napi); 1420extern void napi_gro_flush(struct napi_struct *napi);
1377extern int dev_gro_receive(struct napi_struct *napi, 1421extern int dev_gro_receive(struct napi_struct *napi,
1378 struct sk_buff *skb); 1422 struct sk_buff *skb);
1423extern int napi_skb_finish(int ret, struct sk_buff *skb);
1379extern int napi_gro_receive(struct napi_struct *napi, 1424extern int napi_gro_receive(struct napi_struct *napi,
1380 struct sk_buff *skb); 1425 struct sk_buff *skb);
1381extern void napi_reuse_skb(struct napi_struct *napi, 1426extern void napi_reuse_skb(struct napi_struct *napi,
1382 struct sk_buff *skb); 1427 struct sk_buff *skb);
1383extern struct sk_buff * napi_fraginfo_skb(struct napi_struct *napi, 1428extern struct sk_buff * napi_fraginfo_skb(struct napi_struct *napi,
1384 struct napi_gro_fraginfo *info); 1429 struct napi_gro_fraginfo *info);
1430extern int napi_frags_finish(struct napi_struct *napi,
1431 struct sk_buff *skb, int ret);
1385extern int napi_gro_frags(struct napi_struct *napi, 1432extern int napi_gro_frags(struct napi_struct *napi,
1386 struct napi_gro_fraginfo *info); 1433 struct napi_gro_fraginfo *info);
1387extern void netif_nit_deliver(struct sk_buff *skb); 1434extern void netif_nit_deliver(struct sk_buff *skb);
@@ -1575,56 +1622,6 @@ static inline u32 netif_msg_init(int debug_value, int default_msg_enable_bits)
1575 return (1 << debug_value) - 1; 1622 return (1 << debug_value) - 1;
1576} 1623}
1577 1624
1578/* Test if receive needs to be scheduled but only if up */
1579static inline int netif_rx_schedule_prep(struct napi_struct *napi)
1580{
1581 return napi_schedule_prep(napi);
1582}
1583
1584/* Add interface to tail of rx poll list. This assumes that _prep has
1585 * already been called and returned 1.
1586 */
1587static inline void __netif_rx_schedule(struct napi_struct *napi)
1588{
1589 __napi_schedule(napi);
1590}
1591
1592/* Try to reschedule poll. Called by irq handler. */
1593
1594static inline void netif_rx_schedule(struct napi_struct *napi)
1595{
1596 if (netif_rx_schedule_prep(napi))
1597 __netif_rx_schedule(napi);
1598}
1599
1600/* Try to reschedule poll. Called by dev->poll() after netif_rx_complete(). */
1601static inline int netif_rx_reschedule(struct napi_struct *napi)
1602{
1603 if (napi_schedule_prep(napi)) {
1604 __netif_rx_schedule(napi);
1605 return 1;
1606 }
1607 return 0;
1608}
1609
1610/* same as netif_rx_complete, except that local_irq_save(flags)
1611 * has already been issued
1612 */
1613static inline void __netif_rx_complete(struct napi_struct *napi)
1614{
1615 __napi_complete(napi);
1616}
1617
1618/* Remove interface from poll list: it must be in the poll list
1619 * on current cpu. This primitive is called by dev->poll(), when
1620 * it completes the work. The device cannot be out of poll list at this
1621 * moment, it is BUG().
1622 */
1623static inline void netif_rx_complete(struct napi_struct *napi)
1624{
1625 napi_complete(napi);
1626}
1627
1628static inline void __netif_tx_lock(struct netdev_queue *txq, int cpu) 1625static inline void __netif_tx_lock(struct netdev_queue *txq, int cpu)
1629{ 1626{
1630 spin_lock(&txq->_xmit_lock); 1627 spin_lock(&txq->_xmit_lock);
@@ -1875,7 +1872,7 @@ static inline int skb_bond_should_drop(struct sk_buff *skb)
1875 1872
1876 if (dev->priv_flags & IFF_SLAVE_INACTIVE) { 1873 if (dev->priv_flags & IFF_SLAVE_INACTIVE) {
1877 if ((dev->priv_flags & IFF_SLAVE_NEEDARP) && 1874 if ((dev->priv_flags & IFF_SLAVE_NEEDARP) &&
1878 skb->protocol == __constant_htons(ETH_P_ARP)) 1875 skb->protocol == __cpu_to_be16(ETH_P_ARP))
1879 return 0; 1876 return 0;
1880 1877
1881 if (master->priv_flags & IFF_MASTER_ALB) { 1878 if (master->priv_flags & IFF_MASTER_ALB) {
@@ -1884,7 +1881,7 @@ static inline int skb_bond_should_drop(struct sk_buff *skb)
1884 return 0; 1881 return 0;
1885 } 1882 }
1886 if (master->priv_flags & IFF_MASTER_8023AD && 1883 if (master->priv_flags & IFF_MASTER_8023AD &&
1887 skb->protocol == __constant_htons(ETH_P_SLOW)) 1884 skb->protocol == __cpu_to_be16(ETH_P_SLOW))
1888 return 0; 1885 return 0;
1889 1886
1890 return 1; 1887 return 1;
diff --git a/include/linux/netfilter/Kbuild b/include/linux/netfilter/Kbuild
index 5a8af875bce2..af9d2fb97212 100644
--- a/include/linux/netfilter/Kbuild
+++ b/include/linux/netfilter/Kbuild
@@ -7,16 +7,21 @@ header-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_DSCP.h 9header-y += xt_DSCP.h
10header-y += xt_LED.h
10header-y += xt_MARK.h 11header-y += xt_MARK.h
11header-y += xt_NFLOG.h 12header-y += xt_NFLOG.h
12header-y += xt_NFQUEUE.h 13header-y += xt_NFQUEUE.h
13header-y += xt_RATEEST.h 14header-y += xt_RATEEST.h
14header-y += xt_SECMARK.h 15header-y += xt_SECMARK.h
15header-y += xt_TCPMSS.h 16header-y += xt_TCPMSS.h
17header-y += xt_TCPOPTSTRIP.h
18header-y += xt_TPROXY.h
16header-y += xt_comment.h 19header-y += xt_comment.h
17header-y += xt_connbytes.h 20header-y += xt_connbytes.h
21header-y += xt_connlimit.h
18header-y += xt_connmark.h 22header-y += xt_connmark.h
19header-y += xt_conntrack.h 23header-y += xt_conntrack.h
24header-y += xt_cluster.h
20header-y += xt_dccp.h 25header-y += xt_dccp.h
21header-y += xt_dscp.h 26header-y += xt_dscp.h
22header-y += xt_esp.h 27header-y += xt_esp.h
@@ -30,6 +35,7 @@ header-y += xt_mark.h
30header-y += xt_multiport.h 35header-y += xt_multiport.h
31header-y += xt_owner.h 36header-y += xt_owner.h
32header-y += xt_pkttype.h 37header-y += xt_pkttype.h
38header-y += xt_quota.h
33header-y += xt_rateest.h 39header-y += xt_rateest.h
34header-y += xt_realm.h 40header-y += xt_realm.h
35header-y += xt_recent.h 41header-y += xt_recent.h
@@ -39,6 +45,8 @@ header-y += xt_statistic.h
39header-y += xt_string.h 45header-y += xt_string.h
40header-y += xt_tcpmss.h 46header-y += xt_tcpmss.h
41header-y += xt_tcpudp.h 47header-y += xt_tcpudp.h
48header-y += xt_time.h
49header-y += xt_u32.h
42 50
43unifdef-y += nf_conntrack_common.h 51unifdef-y += nf_conntrack_common.h
44unifdef-y += nf_conntrack_ftp.h 52unifdef-y += nf_conntrack_ftp.h
diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h
index 7d8e0455ccac..135e5cfe68a2 100644
--- a/include/linux/netfilter/nfnetlink.h
+++ b/include/linux/netfilter/nfnetlink.h
@@ -76,6 +76,7 @@ extern int nfnetlink_subsys_unregister(const struct nfnetlink_subsystem *n);
76extern int nfnetlink_has_listeners(unsigned int group); 76extern int nfnetlink_has_listeners(unsigned int group);
77extern int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group, 77extern int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group,
78 int echo); 78 int echo);
79extern void nfnetlink_set_err(u32 pid, u32 group, int error);
79extern int nfnetlink_unicast(struct sk_buff *skb, u_int32_t pid, int flags); 80extern int nfnetlink_unicast(struct sk_buff *skb, u_int32_t pid, int flags);
80 81
81extern void nfnl_lock(void); 82extern void nfnl_lock(void);
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h
index c7ee8744d26b..e8e08d036752 100644
--- a/include/linux/netfilter/x_tables.h
+++ b/include/linux/netfilter/x_tables.h
@@ -349,23 +349,22 @@ struct xt_table
349{ 349{
350 struct list_head list; 350 struct list_head list;
351 351
352 /* A unique name... */
353 const char name[XT_TABLE_MAXNAMELEN];
354
355 /* What hooks you will enter on */ 352 /* What hooks you will enter on */
356 unsigned int valid_hooks; 353 unsigned int valid_hooks;
357 354
358 /* Lock for the curtain */ 355 /* Lock for the curtain */
359 rwlock_t lock; 356 struct mutex lock;
360 357
361 /* Man behind the curtain... */ 358 /* Man behind the curtain... */
362 //struct ip6t_table_info *private; 359 struct xt_table_info *private;
363 void *private;
364 360
365 /* Set this to THIS_MODULE if you are a module, otherwise NULL */ 361 /* Set this to THIS_MODULE if you are a module, otherwise NULL */
366 struct module *me; 362 struct module *me;
367 363
368 u_int8_t af; /* address/protocol family */ 364 u_int8_t af; /* address/protocol family */
365
366 /* A unique name... */
367 const char name[XT_TABLE_MAXNAMELEN];
369}; 368};
370 369
371#include <linux/netfilter_ipv4.h> 370#include <linux/netfilter_ipv4.h>
@@ -386,7 +385,7 @@ struct xt_table_info
386 385
387 /* ipt_entry tables: one per CPU */ 386 /* ipt_entry tables: one per CPU */
388 /* Note : this field MUST be the last one, see XT_TABLE_INFO_SZ */ 387 /* Note : this field MUST be the last one, see XT_TABLE_INFO_SZ */
389 char *entries[1]; 388 void *entries[1];
390}; 389};
391 390
392#define XT_TABLE_INFO_SZ (offsetof(struct xt_table_info, entries) \ 391#define XT_TABLE_INFO_SZ (offsetof(struct xt_table_info, entries) \
@@ -433,6 +432,8 @@ extern void xt_proto_fini(struct net *net, u_int8_t af);
433 432
434extern struct xt_table_info *xt_alloc_table_info(unsigned int size); 433extern struct xt_table_info *xt_alloc_table_info(unsigned int size);
435extern void xt_free_table_info(struct xt_table_info *info); 434extern void xt_free_table_info(struct xt_table_info *info);
435extern void xt_table_entry_swap_rcu(struct xt_table_info *old,
436 struct xt_table_info *new);
436 437
437#ifdef CONFIG_COMPAT 438#ifdef CONFIG_COMPAT
438#include <net/compat.h> 439#include <net/compat.h>
diff --git a/include/linux/netfilter/xt_LED.h b/include/linux/netfilter/xt_LED.h
new file mode 100644
index 000000000000..4c91a0d770d0
--- /dev/null
+++ b/include/linux/netfilter/xt_LED.h
@@ -0,0 +1,13 @@
1#ifndef _XT_LED_H
2#define _XT_LED_H
3
4struct xt_led_info {
5 char id[27]; /* Unique ID for this trigger in the LED class */
6 __u8 always_blink; /* Blink even if the LED is already on */
7 __u32 delay; /* Delay until LED is switched off after trigger */
8
9 /* Kernel data used in the module */
10 void *internal_data __attribute__((aligned(8)));
11};
12
13#endif /* _XT_LED_H */
diff --git a/include/linux/netfilter/xt_cluster.h b/include/linux/netfilter/xt_cluster.h
new file mode 100644
index 000000000000..5e0a0d07b526
--- /dev/null
+++ b/include/linux/netfilter/xt_cluster.h
@@ -0,0 +1,15 @@
1#ifndef _XT_CLUSTER_MATCH_H
2#define _XT_CLUSTER_MATCH_H
3
4enum xt_cluster_flags {
5 XT_CLUSTER_F_INV = (1 << 0)
6};
7
8struct xt_cluster_match_info {
9 u_int32_t total_nodes;
10 u_int32_t node_mask;
11 u_int32_t hash_seed;
12 u_int32_t flags;
13};
14
15#endif /* _XT_CLUSTER_MATCH_H */
diff --git a/include/linux/netfilter/xt_limit.h b/include/linux/netfilter/xt_limit.h
index b3ce65375ecb..fda222c7953b 100644
--- a/include/linux/netfilter/xt_limit.h
+++ b/include/linux/netfilter/xt_limit.h
@@ -4,6 +4,8 @@
4/* timings are in milliseconds. */ 4/* timings are in milliseconds. */
5#define XT_LIMIT_SCALE 10000 5#define XT_LIMIT_SCALE 10000
6 6
7struct xt_limit_priv;
8
7/* 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
8 seconds, or one every 59 hours. */ 10 seconds, or one every 59 hours. */
9struct xt_rateinfo { 11struct xt_rateinfo {
@@ -11,11 +13,10 @@ struct xt_rateinfo {
11 u_int32_t burst; /* Period multiplier for upper limit. */ 13 u_int32_t burst; /* Period multiplier for upper limit. */
12 14
13 /* Used internally by the kernel */ 15 /* Used internally by the kernel */
14 unsigned long prev; 16 unsigned long prev; /* moved to xt_limit_priv */
15 u_int32_t credit; 17 u_int32_t credit; /* moved to xt_limit_priv */
16 u_int32_t credit_cap, cost; 18 u_int32_t credit_cap, cost;
17 19
18 /* Ugly, ugly fucker. */ 20 struct xt_limit_priv *master;
19 struct xt_rateinfo *master;
20}; 21};
21#endif /*_XT_RATE_H*/ 22#endif /*_XT_RATE_H*/
diff --git a/include/linux/netfilter/xt_quota.h b/include/linux/netfilter/xt_quota.h
index 4c8368d781e5..8dc89dfc1361 100644
--- a/include/linux/netfilter/xt_quota.h
+++ b/include/linux/netfilter/xt_quota.h
@@ -6,13 +6,15 @@ enum xt_quota_flags {
6}; 6};
7#define XT_QUOTA_MASK 0x1 7#define XT_QUOTA_MASK 0x1
8 8
9struct xt_quota_priv;
10
9struct xt_quota_info { 11struct xt_quota_info {
10 u_int32_t flags; 12 u_int32_t flags;
11 u_int32_t pad; 13 u_int32_t pad;
12 14
13 /* Used internally by the kernel */ 15 /* Used internally by the kernel */
14 aligned_u64 quota; 16 aligned_u64 quota;
15 struct xt_quota_info *master; 17 struct xt_quota_priv *master;
16}; 18};
17 19
18#endif /* _XT_QUOTA_H */ 20#endif /* _XT_QUOTA_H */
diff --git a/include/linux/netfilter/xt_statistic.h b/include/linux/netfilter/xt_statistic.h
index 3d38bc975048..8f521ab49ef7 100644
--- a/include/linux/netfilter/xt_statistic.h
+++ b/include/linux/netfilter/xt_statistic.h
@@ -13,6 +13,8 @@ enum xt_statistic_flags {
13}; 13};
14#define XT_STATISTIC_MASK 0x1 14#define XT_STATISTIC_MASK 0x1
15 15
16struct xt_statistic_priv;
17
16struct xt_statistic_info { 18struct xt_statistic_info {
17 u_int16_t mode; 19 u_int16_t mode;
18 u_int16_t flags; 20 u_int16_t flags;
@@ -23,11 +25,10 @@ struct xt_statistic_info {
23 struct { 25 struct {
24 u_int32_t every; 26 u_int32_t every;
25 u_int32_t packet; 27 u_int32_t packet;
26 /* Used internally by the kernel */ 28 u_int32_t count; /* unused */
27 u_int32_t count;
28 } nth; 29 } nth;
29 } u; 30 } u;
30 struct xt_statistic_info *master __attribute__((aligned(8))); 31 struct xt_statistic_priv *master __attribute__((aligned(8)));
31}; 32};
32 33
33#endif /* _XT_STATISTIC_H */ 34#endif /* _XT_STATISTIC_H */
diff --git a/include/linux/netfilter_bridge.h b/include/linux/netfilter_bridge.h
index 499aa9375901..f8105e54716a 100644
--- a/include/linux/netfilter_bridge.h
+++ b/include/linux/netfilter_bridge.h
@@ -59,9 +59,9 @@ static inline int nf_bridge_maybe_copy_header(struct sk_buff *skb)
59static inline unsigned int nf_bridge_encap_header_len(const struct sk_buff *skb) 59static inline unsigned int nf_bridge_encap_header_len(const struct sk_buff *skb)
60{ 60{
61 switch (skb->protocol) { 61 switch (skb->protocol) {
62 case __constant_htons(ETH_P_8021Q): 62 case __cpu_to_be16(ETH_P_8021Q):
63 return VLAN_HLEN; 63 return VLAN_HLEN;
64 case __constant_htons(ETH_P_PPP_SES): 64 case __cpu_to_be16(ETH_P_PPP_SES):
65 return PPPOE_SES_HLEN; 65 return PPPOE_SES_HLEN;
66 default: 66 default:
67 return 0; 67 return 0;
diff --git a/include/linux/netfilter_ipv6/Kbuild b/include/linux/netfilter_ipv6/Kbuild
index 8887a5fcd1d0..aca4bd1f6d7c 100644
--- a/include/linux/netfilter_ipv6/Kbuild
+++ b/include/linux/netfilter_ipv6/Kbuild
@@ -11,6 +11,7 @@ header-y += ip6t_length.h
11header-y += ip6t_limit.h 11header-y += ip6t_limit.h
12header-y += ip6t_mac.h 12header-y += ip6t_mac.h
13header-y += ip6t_mark.h 13header-y += ip6t_mark.h
14header-y += ip6t_mh.h
14header-y += ip6t_multiport.h 15header-y += ip6t_multiport.h
15header-y += ip6t_opts.h 16header-y += ip6t_opts.h
16header-y += ip6t_owner.h 17header-y += ip6t_owner.h
diff --git a/include/linux/netlink.h b/include/linux/netlink.h
index 51b09a1f46c3..5ba398e90304 100644
--- a/include/linux/netlink.h
+++ b/include/linux/netlink.h
@@ -103,6 +103,8 @@ struct nlmsgerr
103#define NETLINK_ADD_MEMBERSHIP 1 103#define NETLINK_ADD_MEMBERSHIP 1
104#define NETLINK_DROP_MEMBERSHIP 2 104#define NETLINK_DROP_MEMBERSHIP 2
105#define NETLINK_PKTINFO 3 105#define NETLINK_PKTINFO 3
106#define NETLINK_BROADCAST_ERROR 4
107#define NETLINK_NO_ENOBUFS 5
106 108
107struct nl_pktinfo 109struct nl_pktinfo
108{ 110{
diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h
index e38d3c9dccda..de99025f2c5d 100644
--- a/include/linux/netpoll.h
+++ b/include/linux/netpoll.h
@@ -63,6 +63,13 @@ static inline int netpoll_rx(struct sk_buff *skb)
63 return ret; 63 return ret;
64} 64}
65 65
66static inline int netpoll_rx_on(struct sk_buff *skb)
67{
68 struct netpoll_info *npinfo = skb->dev->npinfo;
69
70 return npinfo && (npinfo->rx_np || npinfo->rx_flags);
71}
72
66static inline int netpoll_receive_skb(struct sk_buff *skb) 73static inline int netpoll_receive_skb(struct sk_buff *skb)
67{ 74{
68 if (!list_empty(&skb->dev->napi_list)) 75 if (!list_empty(&skb->dev->napi_list))
@@ -99,6 +106,10 @@ static inline int netpoll_rx(struct sk_buff *skb)
99{ 106{
100 return 0; 107 return 0;
101} 108}
109static inline int netpoll_rx_on(struct sk_buff *skb)
110{
111 return 0;
112}
102static inline int netpoll_receive_skb(struct sk_buff *skb) 113static inline int netpoll_receive_skb(struct sk_buff *skb)
103{ 114{
104 return 0; 115 return 0;
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h
index e86ed59f9ad5..f33aa08dd9b3 100644
--- a/include/linux/nl80211.h
+++ b/include/linux/nl80211.h
@@ -47,7 +47,7 @@
47 * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or 47 * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or
48 * %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME, 48 * %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME,
49 * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ, and/or 49 * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ, and/or
50 * %NL80211_ATTR_WIPHY_SEC_CHAN_OFFSET. 50 * %NL80211_ATTR_WIPHY_CHANNEL_TYPE.
51 * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request 51 * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request
52 * or rename notification. Has attributes %NL80211_ATTR_WIPHY and 52 * or rename notification. Has attributes %NL80211_ATTR_WIPHY and
53 * %NL80211_ATTR_WIPHY_NAME. 53 * %NL80211_ATTR_WIPHY_NAME.
@@ -72,8 +72,8 @@
72 * 72 *
73 * @NL80211_CMD_GET_KEY: Get sequence counter information for a key specified 73 * @NL80211_CMD_GET_KEY: Get sequence counter information for a key specified
74 * by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC. 74 * by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC.
75 * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT or 75 * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT,
76 * %NL80211_ATTR_KEY_THRESHOLD. 76 * %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD.
77 * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA, 77 * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA,
78 * %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC and %NL80211_ATTR_KEY_CIPHER 78 * %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC and %NL80211_ATTR_KEY_CIPHER
79 * attributes. 79 * attributes.
@@ -84,7 +84,7 @@
84 * %NL80222_CMD_NEW_BEACON message) 84 * %NL80222_CMD_NEW_BEACON message)
85 * @NL80211_CMD_SET_BEACON: set the beacon on an access point interface 85 * @NL80211_CMD_SET_BEACON: set the beacon on an access point interface
86 * using the %NL80211_ATTR_BEACON_INTERVAL, %NL80211_ATTR_DTIM_PERIOD, 86 * using the %NL80211_ATTR_BEACON_INTERVAL, %NL80211_ATTR_DTIM_PERIOD,
87 * %NL80211_BEACON_HEAD and %NL80211_BEACON_TAIL attributes. 87 * %NL80211_ATTR_BEACON_HEAD and %NL80211_ATTR_BEACON_TAIL attributes.
88 * @NL80211_CMD_NEW_BEACON: add a new beacon to an access point interface, 88 * @NL80211_CMD_NEW_BEACON: add a new beacon to an access point interface,
89 * parameters are like for %NL80211_CMD_SET_BEACON. 89 * parameters are like for %NL80211_CMD_SET_BEACON.
90 * @NL80211_CMD_DEL_BEACON: remove the beacon, stop sending it 90 * @NL80211_CMD_DEL_BEACON: remove the beacon, stop sending it
@@ -113,6 +113,8 @@
113 * @NL80211_CMD_SET_BSS: Set BSS attributes for BSS identified by 113 * @NL80211_CMD_SET_BSS: Set BSS attributes for BSS identified by
114 * %NL80211_ATTR_IFINDEX. 114 * %NL80211_ATTR_IFINDEX.
115 * 115 *
116 * @NL80211_CMD_GET_REG: ask the wireless core to send us its currently set
117 * regulatory domain.
116 * @NL80211_CMD_SET_REG: Set current regulatory domain. CRDA sends this command 118 * @NL80211_CMD_SET_REG: Set current regulatory domain. CRDA sends this command
117 * after being queried by the kernel. CRDA replies by sending a regulatory 119 * after being queried by the kernel. CRDA replies by sending a regulatory
118 * domain structure which consists of %NL80211_ATTR_REG_ALPHA set to our 120 * domain structure which consists of %NL80211_ATTR_REG_ALPHA set to our
@@ -133,6 +135,32 @@
133 * @NL80211_CMD_SET_MESH_PARAMS: Set mesh networking properties for the 135 * @NL80211_CMD_SET_MESH_PARAMS: Set mesh networking properties for the
134 * interface identified by %NL80211_ATTR_IFINDEX 136 * interface identified by %NL80211_ATTR_IFINDEX
135 * 137 *
138 * @NL80211_CMD_SET_MGMT_EXTRA_IE: Set extra IEs for management frames. The
139 * interface is identified with %NL80211_ATTR_IFINDEX and the management
140 * frame subtype with %NL80211_ATTR_MGMT_SUBTYPE. The extra IE data to be
141 * added to the end of the specified management frame is specified with
142 * %NL80211_ATTR_IE. If the command succeeds, the requested data will be
143 * added to all specified management frames generated by
144 * kernel/firmware/driver.
145 *
146 * @NL80211_CMD_GET_SCAN: get scan results
147 * @NL80211_CMD_TRIGGER_SCAN: trigger a new scan with the given parameters
148 * @NL80211_CMD_NEW_SCAN_RESULTS: scan notification (as a reply to
149 * NL80211_CMD_GET_SCAN and on the "scan" multicast group)
150 * @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons,
151 * partial scan results may be available
152 *
153 * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain
154 * has been changed and provides details of the request information
155 * that caused the change such as who initiated the regulatory request
156 * (%NL80211_ATTR_REG_INITIATOR), the wiphy_idx
157 * (%NL80211_ATTR_REG_ALPHA2) on which the request was made from if
158 * the initiator was %NL80211_REGDOM_SET_BY_COUNTRY_IE or
159 * %NL80211_REGDOM_SET_BY_DRIVER, the type of regulatory domain
160 * set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is
161 * %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on
162 * to (%NL80211_ATTR_REG_ALPHA2).
163 *
136 * @NL80211_CMD_MAX: highest used command number 164 * @NL80211_CMD_MAX: highest used command number
137 * @__NL80211_CMD_AFTER_LAST: internal use 165 * @__NL80211_CMD_AFTER_LAST: internal use
138 */ 166 */
@@ -178,6 +206,17 @@ enum nl80211_commands {
178 NL80211_CMD_GET_MESH_PARAMS, 206 NL80211_CMD_GET_MESH_PARAMS,
179 NL80211_CMD_SET_MESH_PARAMS, 207 NL80211_CMD_SET_MESH_PARAMS,
180 208
209 NL80211_CMD_SET_MGMT_EXTRA_IE,
210
211 NL80211_CMD_GET_REG,
212
213 NL80211_CMD_GET_SCAN,
214 NL80211_CMD_TRIGGER_SCAN,
215 NL80211_CMD_NEW_SCAN_RESULTS,
216 NL80211_CMD_SCAN_ABORTED,
217
218 NL80211_CMD_REG_CHANGE,
219
181 /* add new commands above here */ 220 /* add new commands above here */
182 221
183 /* used to define NL80211_CMD_MAX below */ 222 /* used to define NL80211_CMD_MAX below */
@@ -190,6 +229,9 @@ enum nl80211_commands {
190 * here 229 * here
191 */ 230 */
192#define NL80211_CMD_SET_BSS NL80211_CMD_SET_BSS 231#define NL80211_CMD_SET_BSS NL80211_CMD_SET_BSS
232#define NL80211_CMD_SET_MGMT_EXTRA_IE NL80211_CMD_SET_MGMT_EXTRA_IE
233
234#define NL80211_CMD_REG_CHANGE NL80211_CMD_REG_CHANGE
193 235
194/** 236/**
195 * enum nl80211_attrs - nl80211 netlink attributes 237 * enum nl80211_attrs - nl80211 netlink attributes
@@ -284,6 +326,29 @@ enum nl80211_commands {
284 * supported interface types, each a flag attribute with the number 326 * supported interface types, each a flag attribute with the number
285 * of the interface mode. 327 * of the interface mode.
286 * 328 *
329 * @NL80211_ATTR_MGMT_SUBTYPE: Management frame subtype for
330 * %NL80211_CMD_SET_MGMT_EXTRA_IE.
331 *
332 * @NL80211_ATTR_IE: Information element(s) data (used, e.g., with
333 * %NL80211_CMD_SET_MGMT_EXTRA_IE).
334 *
335 * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with
336 * a single scan request, a wiphy attribute.
337 *
338 * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz)
339 * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive
340 * scanning and include a zero-length SSID (wildcard) for wildcard scan
341 * @NL80211_ATTR_SCAN_GENERATION: the scan generation increases whenever the
342 * scan result list changes (BSS expired or added) so that applications
343 * can verify that they got a single, consistent snapshot (when all dump
344 * messages carried the same generation number)
345 * @NL80211_ATTR_BSS: scan result BSS
346 *
347 * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain
348 * currently in effect. This could be any of the %NL80211_REGDOM_SET_BY_*
349 * @NL80211_ATTR_REG_TYPE: indicates the type of the regulatory domain currently
350 * set. This can be one of the nl80211_reg_type (%NL80211_REGDOM_TYPE_*)
351 *
287 * @NL80211_ATTR_MAX: highest attribute number currently defined 352 * @NL80211_ATTR_MAX: highest attribute number currently defined
288 * @__NL80211_ATTR_AFTER_LAST: internal use 353 * @__NL80211_ATTR_AFTER_LAST: internal use
289 */ 354 */
@@ -346,6 +411,21 @@ enum nl80211_attrs {
346 NL80211_ATTR_WIPHY_FREQ, 411 NL80211_ATTR_WIPHY_FREQ,
347 NL80211_ATTR_WIPHY_CHANNEL_TYPE, 412 NL80211_ATTR_WIPHY_CHANNEL_TYPE,
348 413
414 NL80211_ATTR_KEY_DEFAULT_MGMT,
415
416 NL80211_ATTR_MGMT_SUBTYPE,
417 NL80211_ATTR_IE,
418
419 NL80211_ATTR_MAX_NUM_SCAN_SSIDS,
420
421 NL80211_ATTR_SCAN_FREQUENCIES,
422 NL80211_ATTR_SCAN_SSIDS,
423 NL80211_ATTR_SCAN_GENERATION,
424 NL80211_ATTR_BSS,
425
426 NL80211_ATTR_REG_INITIATOR,
427 NL80211_ATTR_REG_TYPE,
428
349 /* add attributes here, update the policy in nl80211.c */ 429 /* add attributes here, update the policy in nl80211.c */
350 430
351 __NL80211_ATTR_AFTER_LAST, 431 __NL80211_ATTR_AFTER_LAST,
@@ -360,7 +440,11 @@ enum nl80211_attrs {
360#define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES 440#define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES
361#define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS 441#define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS
362#define NL80211_ATTR_WIPHY_FREQ NL80211_ATTR_WIPHY_FREQ 442#define NL80211_ATTR_WIPHY_FREQ NL80211_ATTR_WIPHY_FREQ
363#define NL80211_ATTR_WIPHY_SEC_CHAN_OFFSET NL80211_ATTR_WIPHY_SEC_CHAN_OFFSET 443#define NL80211_ATTR_WIPHY_CHANNEL_TYPE NL80211_ATTR_WIPHY_CHANNEL_TYPE
444#define NL80211_ATTR_MGMT_SUBTYPE NL80211_ATTR_MGMT_SUBTYPE
445#define NL80211_ATTR_IE NL80211_ATTR_IE
446#define NL80211_ATTR_REG_INITIATOR NL80211_ATTR_REG_INITIATOR
447#define NL80211_ATTR_REG_TYPE NL80211_ATTR_REG_TYPE
364 448
365#define NL80211_MAX_SUPP_RATES 32 449#define NL80211_MAX_SUPP_RATES 32
366#define NL80211_MAX_SUPP_REG_RULES 32 450#define NL80211_MAX_SUPP_REG_RULES 32
@@ -412,12 +496,14 @@ enum nl80211_iftype {
412 * @NL80211_STA_FLAG_SHORT_PREAMBLE: station is capable of receiving frames 496 * @NL80211_STA_FLAG_SHORT_PREAMBLE: station is capable of receiving frames
413 * with short barker preamble 497 * with short barker preamble
414 * @NL80211_STA_FLAG_WME: station is WME/QoS capable 498 * @NL80211_STA_FLAG_WME: station is WME/QoS capable
499 * @NL80211_STA_FLAG_MFP: station uses management frame protection
415 */ 500 */
416enum nl80211_sta_flags { 501enum nl80211_sta_flags {
417 __NL80211_STA_FLAG_INVALID, 502 __NL80211_STA_FLAG_INVALID,
418 NL80211_STA_FLAG_AUTHORIZED, 503 NL80211_STA_FLAG_AUTHORIZED,
419 NL80211_STA_FLAG_SHORT_PREAMBLE, 504 NL80211_STA_FLAG_SHORT_PREAMBLE,
420 NL80211_STA_FLAG_WME, 505 NL80211_STA_FLAG_WME,
506 NL80211_STA_FLAG_MFP,
421 507
422 /* keep last */ 508 /* keep last */
423 __NL80211_STA_FLAG_AFTER_LAST, 509 __NL80211_STA_FLAG_AFTER_LAST,
@@ -465,6 +551,9 @@ enum nl80211_rate_info {
465 * @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm) 551 * @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm)
466 * @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute 552 * @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute
467 * containing info as possible, see &enum nl80211_sta_info_txrate. 553 * containing info as possible, see &enum nl80211_sta_info_txrate.
554 * @NL80211_STA_INFO_RX_PACKETS: total received packet (u32, from this station)
555 * @NL80211_STA_INFO_TX_PACKETS: total transmitted packets (u32, to this
556 * station)
468 */ 557 */
469enum nl80211_sta_info { 558enum nl80211_sta_info {
470 __NL80211_STA_INFO_INVALID, 559 __NL80211_STA_INFO_INVALID,
@@ -476,6 +565,8 @@ enum nl80211_sta_info {
476 NL80211_STA_INFO_PLINK_STATE, 565 NL80211_STA_INFO_PLINK_STATE,
477 NL80211_STA_INFO_SIGNAL, 566 NL80211_STA_INFO_SIGNAL,
478 NL80211_STA_INFO_TX_BITRATE, 567 NL80211_STA_INFO_TX_BITRATE,
568 NL80211_STA_INFO_RX_PACKETS,
569 NL80211_STA_INFO_TX_PACKETS,
479 570
480 /* keep last */ 571 /* keep last */
481 __NL80211_STA_INFO_AFTER_LAST, 572 __NL80211_STA_INFO_AFTER_LAST,
@@ -607,6 +698,48 @@ enum nl80211_bitrate_attr {
607}; 698};
608 699
609/** 700/**
701 * enum nl80211_initiator - Indicates the initiator of a reg domain request
702 * @NL80211_REGDOM_SET_BY_CORE: Core queried CRDA for a dynamic world
703 * regulatory domain.
704 * @NL80211_REGDOM_SET_BY_USER: User asked the wireless core to set the
705 * regulatory domain.
706 * @NL80211_REGDOM_SET_BY_DRIVER: a wireless drivers has hinted to the
707 * wireless core it thinks its knows the regulatory domain we should be in.
708 * @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an
709 * 802.11 country information element with regulatory information it
710 * thinks we should consider.
711 */
712enum nl80211_reg_initiator {
713 NL80211_REGDOM_SET_BY_CORE,
714 NL80211_REGDOM_SET_BY_USER,
715 NL80211_REGDOM_SET_BY_DRIVER,
716 NL80211_REGDOM_SET_BY_COUNTRY_IE,
717};
718
719/**
720 * enum nl80211_reg_type - specifies the type of regulatory domain
721 * @NL80211_REGDOM_TYPE_COUNTRY: the regulatory domain set is one that pertains
722 * to a specific country. When this is set you can count on the
723 * ISO / IEC 3166 alpha2 country code being valid.
724 * @NL80211_REGDOM_TYPE_WORLD: the regulatory set domain is the world regulatory
725 * domain.
726 * @NL80211_REGDOM_TYPE_CUSTOM_WORLD: the regulatory domain set is a custom
727 * driver specific world regulatory domain. These do not apply system-wide
728 * and are only applicable to the individual devices which have requested
729 * them to be applied.
730 * @NL80211_REGDOM_TYPE_INTERSECTION: the regulatory domain set is the product
731 * of an intersection between two regulatory domains -- the previously
732 * set regulatory domain on the system and the last accepted regulatory
733 * domain request to be processed.
734 */
735enum nl80211_reg_type {
736 NL80211_REGDOM_TYPE_COUNTRY,
737 NL80211_REGDOM_TYPE_WORLD,
738 NL80211_REGDOM_TYPE_CUSTOM_WORLD,
739 NL80211_REGDOM_TYPE_INTERSECTION,
740};
741
742/**
610 * enum nl80211_reg_rule_attr - regulatory rule attributes 743 * enum nl80211_reg_rule_attr - regulatory rule attributes
611 * @NL80211_ATTR_REG_RULE_FLAGS: a set of flags which specify additional 744 * @NL80211_ATTR_REG_RULE_FLAGS: a set of flags which specify additional
612 * considerations for a given frequency range. These are the 745 * considerations for a given frequency range. These are the
@@ -811,4 +944,38 @@ enum nl80211_channel_type {
811 NL80211_CHAN_HT40MINUS, 944 NL80211_CHAN_HT40MINUS,
812 NL80211_CHAN_HT40PLUS 945 NL80211_CHAN_HT40PLUS
813}; 946};
947
948/**
949 * enum nl80211_bss - netlink attributes for a BSS
950 *
951 * @__NL80211_BSS_INVALID: invalid
952 * @NL80211_BSS_FREQUENCY: frequency in MHz (u32)
953 * @NL80211_BSS_TSF: TSF of the received probe response/beacon (u64)
954 * @NL80211_BSS_BEACON_INTERVAL: beacon interval of the (I)BSS (u16)
955 * @NL80211_BSS_CAPABILITY: capability field (CPU order, u16)
956 * @NL80211_BSS_INFORMATION_ELEMENTS: binary attribute containing the
957 * raw information elements from the probe response/beacon (bin)
958 * @NL80211_BSS_SIGNAL_MBM: signal strength of probe response/beacon
959 * in mBm (100 * dBm) (s32)
960 * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon
961 * in unspecified units, scaled to 0..100 (u8)
962 * @__NL80211_BSS_AFTER_LAST: internal
963 * @NL80211_BSS_MAX: highest BSS attribute
964 */
965enum nl80211_bss {
966 __NL80211_BSS_INVALID,
967 NL80211_BSS_BSSID,
968 NL80211_BSS_FREQUENCY,
969 NL80211_BSS_TSF,
970 NL80211_BSS_BEACON_INTERVAL,
971 NL80211_BSS_CAPABILITY,
972 NL80211_BSS_INFORMATION_ELEMENTS,
973 NL80211_BSS_SIGNAL_MBM,
974 NL80211_BSS_SIGNAL_UNSPEC,
975
976 /* keep last */
977 __NL80211_BSS_AFTER_LAST,
978 NL80211_BSS_MAX = __NL80211_BSS_AFTER_LAST - 1
979};
980
814#endif /* __LINUX_NL80211_H */ 981#endif /* __LINUX_NL80211_H */
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index aca8c458aa8a..097f410edefa 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -834,6 +834,8 @@
834#define PCI_DEVICE_ID_PROMISE_20276 0x5275 834#define PCI_DEVICE_ID_PROMISE_20276 0x5275
835#define PCI_DEVICE_ID_PROMISE_20277 0x7275 835#define PCI_DEVICE_ID_PROMISE_20277 0x7275
836 836
837#define PCI_VENDOR_ID_FOXCONN 0x105b
838
837#define PCI_VENDOR_ID_UMC 0x1060 839#define PCI_VENDOR_ID_UMC 0x1060
838#define PCI_DEVICE_ID_UMC_UM8673F 0x0101 840#define PCI_DEVICE_ID_UMC_UM8673F 0x0101
839#define PCI_DEVICE_ID_UMC_UM8886BF 0x673a 841#define PCI_DEVICE_ID_UMC_UM8886BF 0x673a
@@ -1971,6 +1973,8 @@
1971 1973
1972#define PCI_VENDOR_ID_SAMSUNG 0x144d 1974#define PCI_VENDOR_ID_SAMSUNG 0x144d
1973 1975
1976#define PCI_VENDOR_ID_AMBIT 0x1468
1977
1974#define PCI_VENDOR_ID_MYRICOM 0x14c1 1978#define PCI_VENDOR_ID_MYRICOM 0x14c1
1975 1979
1976#define PCI_VENDOR_ID_TITAN 0x14D2 1980#define PCI_VENDOR_ID_TITAN 0x14D2
@@ -2112,6 +2116,8 @@
2112#define PCI_DEVICE_ID_MELLANOX_SINAI_OLD 0x5e8c 2116#define PCI_DEVICE_ID_MELLANOX_SINAI_OLD 0x5e8c
2113#define PCI_DEVICE_ID_MELLANOX_SINAI 0x6274 2117#define PCI_DEVICE_ID_MELLANOX_SINAI 0x6274
2114 2118
2119#define PCI_VENDOR_ID_DFI 0x15bd
2120
2115#define PCI_VENDOR_ID_QUICKNET 0x15e2 2121#define PCI_VENDOR_ID_QUICKNET 0x15e2
2116#define PCI_DEVICE_ID_QUICKNET_XJ 0x0500 2122#define PCI_DEVICE_ID_QUICKNET_XJ 0x0500
2117 2123
@@ -2215,6 +2221,8 @@
2215 2221
2216#define PCI_VENDOR_ID_TOPSPIN 0x1867 2222#define PCI_VENDOR_ID_TOPSPIN 0x1867
2217 2223
2224#define PCI_VENDOR_ID_SILAN 0x1904
2225
2218#define PCI_VENDOR_ID_TDI 0x192E 2226#define PCI_VENDOR_ID_TDI 0x192E
2219#define PCI_DEVICE_ID_TDI_EHCI 0x0101 2227#define PCI_DEVICE_ID_TDI_EHCI 0x0101
2220 2228
diff --git a/include/linux/phy.h b/include/linux/phy.h
index d7e54d98869f..32cf14a4b034 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -315,8 +315,7 @@ struct phy_device {
315 315
316 /* Interrupt and Polling infrastructure */ 316 /* Interrupt and Polling infrastructure */
317 struct work_struct phy_queue; 317 struct work_struct phy_queue;
318 struct work_struct state_queue; 318 struct delayed_work state_queue;
319 struct timer_list phy_timer;
320 atomic_t irq_disable; 319 atomic_t irq_disable;
321 320
322 struct mutex lock; 321 struct mutex lock;
diff --git a/include/linux/pim.h b/include/linux/pim.h
index 1ba0661561a4..252bf6644c51 100644
--- a/include/linux/pim.h
+++ b/include/linux/pim.h
@@ -4,14 +4,14 @@
4#include <asm/byteorder.h> 4#include <asm/byteorder.h>
5 5
6/* Message types - V1 */ 6/* Message types - V1 */
7#define PIM_V1_VERSION __constant_htonl(0x10000000) 7#define PIM_V1_VERSION cpu_to_be32(0x10000000)
8#define PIM_V1_REGISTER 1 8#define PIM_V1_REGISTER 1
9 9
10/* Message types - V2 */ 10/* Message types - V2 */
11#define PIM_VERSION 2 11#define PIM_VERSION 2
12#define PIM_REGISTER 1 12#define PIM_REGISTER 1
13 13
14#define PIM_NULL_REGISTER __constant_htonl(0x40000000) 14#define PIM_NULL_REGISTER cpu_to_be32(0x40000000)
15 15
16/* PIMv2 register message header layout (ietf-draft-idmr-pimvsm-v2-00.ps */ 16/* PIMv2 register message header layout (ietf-draft-idmr-pimvsm-v2-00.ps */
17struct pimreghdr 17struct pimreghdr
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
index 9a342699c607..76e470a299bf 100644
--- a/include/linux/platform_device.h
+++ b/include/linux/platform_device.h
@@ -12,6 +12,7 @@
12#define _PLATFORM_DEVICE_H_ 12#define _PLATFORM_DEVICE_H_
13 13
14#include <linux/device.h> 14#include <linux/device.h>
15#include <linux/mod_devicetable.h>
15 16
16struct platform_device { 17struct platform_device {
17 const char * name; 18 const char * name;
@@ -19,8 +20,13 @@ struct platform_device {
19 struct device dev; 20 struct device dev;
20 u32 num_resources; 21 u32 num_resources;
21 struct resource * resource; 22 struct resource * resource;
23 void *platform_data;
24
25 struct platform_device_id *id_entry;
22}; 26};
23 27
28#define platform_get_device_id(pdev) ((pdev)->id_entry)
29
24#define to_platform_device(x) container_of((x), struct platform_device, dev) 30#define to_platform_device(x) container_of((x), struct platform_device, dev)
25 31
26extern int platform_device_register(struct platform_device *); 32extern int platform_device_register(struct platform_device *);
@@ -56,6 +62,7 @@ struct platform_driver {
56 int (*resume_early)(struct platform_device *); 62 int (*resume_early)(struct platform_device *);
57 int (*resume)(struct platform_device *); 63 int (*resume)(struct platform_device *);
58 struct device_driver driver; 64 struct device_driver driver;
65 struct platform_device_id *id_table;
59}; 66};
60 67
61extern int platform_driver_register(struct platform_driver *); 68extern int platform_driver_register(struct platform_driver *);
diff --git a/include/linux/plist.h b/include/linux/plist.h
index 85de2f055874..45926d77d6ac 100644
--- a/include/linux/plist.h
+++ b/include/linux/plist.h
@@ -96,6 +96,10 @@ struct plist_node {
96# define PLIST_HEAD_LOCK_INIT(_lock) 96# define PLIST_HEAD_LOCK_INIT(_lock)
97#endif 97#endif
98 98
99#define _PLIST_HEAD_INIT(head) \
100 .prio_list = LIST_HEAD_INIT((head).prio_list), \
101 .node_list = LIST_HEAD_INIT((head).node_list)
102
99/** 103/**
100 * PLIST_HEAD_INIT - static struct plist_head initializer 104 * PLIST_HEAD_INIT - static struct plist_head initializer
101 * @head: struct plist_head variable name 105 * @head: struct plist_head variable name
@@ -103,8 +107,7 @@ struct plist_node {
103 */ 107 */
104#define PLIST_HEAD_INIT(head, _lock) \ 108#define PLIST_HEAD_INIT(head, _lock) \
105{ \ 109{ \
106 .prio_list = LIST_HEAD_INIT((head).prio_list), \ 110 _PLIST_HEAD_INIT(head), \
107 .node_list = LIST_HEAD_INIT((head).node_list), \
108 PLIST_HEAD_LOCK_INIT(&(_lock)) \ 111 PLIST_HEAD_LOCK_INIT(&(_lock)) \
109} 112}
110 113
@@ -116,7 +119,7 @@ struct plist_node {
116#define PLIST_NODE_INIT(node, __prio) \ 119#define PLIST_NODE_INIT(node, __prio) \
117{ \ 120{ \
118 .prio = (__prio), \ 121 .prio = (__prio), \
119 .plist = PLIST_HEAD_INIT((node).plist, NULL), \ 122 .plist = { _PLIST_HEAD_INIT((node).plist) }, \
120} 123}
121 124
122/** 125/**
diff --git a/include/linux/pm.h b/include/linux/pm.h
index 24ba5f67b3a3..1d4e2d289821 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -400,6 +400,9 @@ extern void __suspend_report_result(const char *function, void *fn, int ret);
400 400
401#else /* !CONFIG_PM_SLEEP */ 401#else /* !CONFIG_PM_SLEEP */
402 402
403#define device_pm_lock() do {} while (0)
404#define device_pm_unlock() do {} while (0)
405
403static inline int device_suspend(pm_message_t state) 406static inline int device_suspend(pm_message_t state)
404{ 407{
405 return 0; 408 return 0;
@@ -409,6 +412,14 @@ static inline int device_suspend(pm_message_t state)
409 412
410#endif /* !CONFIG_PM_SLEEP */ 413#endif /* !CONFIG_PM_SLEEP */
411 414
415/* How to reorder dpm_list after device_move() */
416enum dpm_order {
417 DPM_ORDER_NONE,
418 DPM_ORDER_DEV_AFTER_PARENT,
419 DPM_ORDER_PARENT_BEFORE_DEV,
420 DPM_ORDER_DEV_LAST,
421};
422
412/* 423/*
413 * Global Power Management flags 424 * Global Power Management flags
414 * Used to keep APM and ACPI from both being active 425 * Used to keep APM and ACPI from both being active
diff --git a/include/linux/ppp_channel.h b/include/linux/ppp_channel.h
index a942892d6dfe..0d3fa63e90ea 100644
--- a/include/linux/ppp_channel.h
+++ b/include/linux/ppp_channel.h
@@ -22,6 +22,7 @@
22#include <linux/list.h> 22#include <linux/list.h>
23#include <linux/skbuff.h> 23#include <linux/skbuff.h>
24#include <linux/poll.h> 24#include <linux/poll.h>
25#include <net/net_namespace.h>
25 26
26struct ppp_channel; 27struct ppp_channel;
27 28
@@ -39,8 +40,8 @@ struct ppp_channel {
39 int mtu; /* max transmit packet size */ 40 int mtu; /* max transmit packet size */
40 int hdrlen; /* amount of headroom channel needs */ 41 int hdrlen; /* amount of headroom channel needs */
41 void *ppp; /* opaque to channel */ 42 void *ppp; /* opaque to channel */
42 /* the following are not used at present */
43 int speed; /* transfer rate (bytes/second) */ 43 int speed; /* transfer rate (bytes/second) */
44 /* the following is not used at present */
44 int latency; /* overhead time in milliseconds */ 45 int latency; /* overhead time in milliseconds */
45}; 46};
46 47
@@ -56,6 +57,9 @@ extern void ppp_input(struct ppp_channel *, struct sk_buff *);
56 that we may have missed a packet. */ 57 that we may have missed a packet. */
57extern void ppp_input_error(struct ppp_channel *, int code); 58extern void ppp_input_error(struct ppp_channel *, int code);
58 59
60/* Attach a channel to a given PPP unit in specified net. */
61extern int ppp_register_net_channel(struct net *, struct ppp_channel *);
62
59/* Attach a channel to a given PPP unit. */ 63/* Attach a channel to a given PPP unit. */
60extern int ppp_register_channel(struct ppp_channel *); 64extern int ppp_register_channel(struct ppp_channel *);
61 65
diff --git a/include/linux/rds.h b/include/linux/rds.h
new file mode 100644
index 000000000000..d91dc91f5443
--- /dev/null
+++ b/include/linux/rds.h
@@ -0,0 +1,250 @@
1/*
2 * Copyright (c) 2008 Oracle. All rights reserved.
3 *
4 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU
6 * General Public License (GPL) Version 2, available from the file
7 * COPYING in the main directory of this source tree, or the
8 * OpenIB.org BSD license below:
9 *
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
12 * conditions are met:
13 *
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer.
17 *
18 * - Redistributions in binary form must reproduce the above
19 * copyright notice, this list of conditions and the following
20 * disclaimer in the documentation and/or other materials
21 * provided with the distribution.
22 *
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 * SOFTWARE.
31 *
32 */
33
34#ifndef _LINUX_RDS_H
35#define _LINUX_RDS_H
36
37#include <linux/types.h>
38
39/* These sparse annotated types shouldn't be in any user
40 * visible header file. We should clean this up rather
41 * than kludging around them. */
42#ifndef __KERNEL__
43#define __be16 u_int16_t
44#define __be32 u_int32_t
45#define __be64 u_int64_t
46#endif
47
48#define RDS_IB_ABI_VERSION 0x301
49
50/*
51 * setsockopt/getsockopt for SOL_RDS
52 */
53#define RDS_CANCEL_SENT_TO 1
54#define RDS_GET_MR 2
55#define RDS_FREE_MR 3
56/* deprecated: RDS_BARRIER 4 */
57#define RDS_RECVERR 5
58#define RDS_CONG_MONITOR 6
59
60/*
61 * Control message types for SOL_RDS.
62 *
63 * CMSG_RDMA_ARGS (sendmsg)
64 * Request a RDMA transfer to/from the specified
65 * memory ranges.
66 * The cmsg_data is a struct rds_rdma_args.
67 * RDS_CMSG_RDMA_DEST (recvmsg, sendmsg)
68 * Kernel informs application about intended
69 * source/destination of a RDMA transfer
70 * RDS_CMSG_RDMA_MAP (sendmsg)
71 * Application asks kernel to map the given
72 * memory range into a IB MR, and send the
73 * R_Key along in an RDS extension header.
74 * The cmsg_data is a struct rds_get_mr_args,
75 * the same as for the GET_MR setsockopt.
76 * RDS_CMSG_RDMA_STATUS (recvmsg)
77 * Returns the status of a completed RDMA operation.
78 */
79#define RDS_CMSG_RDMA_ARGS 1
80#define RDS_CMSG_RDMA_DEST 2
81#define RDS_CMSG_RDMA_MAP 3
82#define RDS_CMSG_RDMA_STATUS 4
83#define RDS_CMSG_CONG_UPDATE 5
84
85#define RDS_INFO_FIRST 10000
86#define RDS_INFO_COUNTERS 10000
87#define RDS_INFO_CONNECTIONS 10001
88/* 10002 aka RDS_INFO_FLOWS is deprecated */
89#define RDS_INFO_SEND_MESSAGES 10003
90#define RDS_INFO_RETRANS_MESSAGES 10004
91#define RDS_INFO_RECV_MESSAGES 10005
92#define RDS_INFO_SOCKETS 10006
93#define RDS_INFO_TCP_SOCKETS 10007
94#define RDS_INFO_IB_CONNECTIONS 10008
95#define RDS_INFO_CONNECTION_STATS 10009
96#define RDS_INFO_IWARP_CONNECTIONS 10010
97#define RDS_INFO_LAST 10010
98
99struct rds_info_counter {
100 u_int8_t name[32];
101 u_int64_t value;
102} __attribute__((packed));
103
104#define RDS_INFO_CONNECTION_FLAG_SENDING 0x01
105#define RDS_INFO_CONNECTION_FLAG_CONNECTING 0x02
106#define RDS_INFO_CONNECTION_FLAG_CONNECTED 0x04
107
108#define TRANSNAMSIZ 16
109
110struct rds_info_connection {
111 u_int64_t next_tx_seq;
112 u_int64_t next_rx_seq;
113 __be32 laddr;
114 __be32 faddr;
115 u_int8_t transport[TRANSNAMSIZ]; /* null term ascii */
116 u_int8_t flags;
117} __attribute__((packed));
118
119struct rds_info_flow {
120 __be32 laddr;
121 __be32 faddr;
122 u_int32_t bytes;
123 __be16 lport;
124 __be16 fport;
125} __attribute__((packed));
126
127#define RDS_INFO_MESSAGE_FLAG_ACK 0x01
128#define RDS_INFO_MESSAGE_FLAG_FAST_ACK 0x02
129
130struct rds_info_message {
131 u_int64_t seq;
132 u_int32_t len;
133 __be32 laddr;
134 __be32 faddr;
135 __be16 lport;
136 __be16 fport;
137 u_int8_t flags;
138} __attribute__((packed));
139
140struct rds_info_socket {
141 u_int32_t sndbuf;
142 __be32 bound_addr;
143 __be32 connected_addr;
144 __be16 bound_port;
145 __be16 connected_port;
146 u_int32_t rcvbuf;
147 u_int64_t inum;
148} __attribute__((packed));
149
150#define RDS_IB_GID_LEN 16
151struct rds_info_rdma_connection {
152 __be32 src_addr;
153 __be32 dst_addr;
154 uint8_t src_gid[RDS_IB_GID_LEN];
155 uint8_t dst_gid[RDS_IB_GID_LEN];
156
157 uint32_t max_send_wr;
158 uint32_t max_recv_wr;
159 uint32_t max_send_sge;
160 uint32_t rdma_mr_max;
161 uint32_t rdma_mr_size;
162};
163
164/*
165 * Congestion monitoring.
166 * Congestion control in RDS happens at the host connection
167 * level by exchanging a bitmap marking congested ports.
168 * By default, a process sleeping in poll() is always woken
169 * up when the congestion map is updated.
170 * With explicit monitoring, an application can have more
171 * fine-grained control.
172 * The application installs a 64bit mask value in the socket,
173 * where each bit corresponds to a group of ports.
174 * When a congestion update arrives, RDS checks the set of
175 * ports that are now uncongested against the list bit mask
176 * installed in the socket, and if they overlap, we queue a
177 * cong_notification on the socket.
178 *
179 * To install the congestion monitor bitmask, use RDS_CONG_MONITOR
180 * with the 64bit mask.
181 * Congestion updates are received via RDS_CMSG_CONG_UPDATE
182 * control messages.
183 *
184 * The correspondence between bits and ports is
185 * 1 << (portnum % 64)
186 */
187#define RDS_CONG_MONITOR_SIZE 64
188#define RDS_CONG_MONITOR_BIT(port) (((unsigned int) port) % RDS_CONG_MONITOR_SIZE)
189#define RDS_CONG_MONITOR_MASK(port) (1ULL << RDS_CONG_MONITOR_BIT(port))
190
191/*
192 * RDMA related types
193 */
194
195/*
196 * This encapsulates a remote memory location.
197 * In the current implementation, it contains the R_Key
198 * of the remote memory region, and the offset into it
199 * (so that the application does not have to worry about
200 * alignment).
201 */
202typedef u_int64_t rds_rdma_cookie_t;
203
204struct rds_iovec {
205 u_int64_t addr;
206 u_int64_t bytes;
207};
208
209struct rds_get_mr_args {
210 struct rds_iovec vec;
211 u_int64_t cookie_addr;
212 uint64_t flags;
213};
214
215struct rds_free_mr_args {
216 rds_rdma_cookie_t cookie;
217 u_int64_t flags;
218};
219
220struct rds_rdma_args {
221 rds_rdma_cookie_t cookie;
222 struct rds_iovec remote_vec;
223 u_int64_t local_vec_addr;
224 u_int64_t nr_local;
225 u_int64_t flags;
226 u_int64_t user_token;
227};
228
229struct rds_rdma_notify {
230 u_int64_t user_token;
231 int32_t status;
232};
233
234#define RDS_RDMA_SUCCESS 0
235#define RDS_RDMA_REMOTE_ERROR 1
236#define RDS_RDMA_CANCELED 2
237#define RDS_RDMA_DROPPED 3
238#define RDS_RDMA_OTHER_ERROR 4
239
240/*
241 * Common set of flags for all RDMA related structs
242 */
243#define RDS_RDMA_READWRITE 0x0001
244#define RDS_RDMA_FENCE 0x0002 /* use FENCE for immediate send */
245#define RDS_RDMA_INVALIDATE 0x0004 /* invalidate R_Key after freeing MR */
246#define RDS_RDMA_USE_ONCE 0x0008 /* free MR after use */
247#define RDS_RDMA_DONTWAIT 0x0010 /* Don't wait in SET_BARRIER */
248#define RDS_RDMA_NOTIFY_ME 0x0020 /* Notify when operation completes */
249
250#endif /* IB_RDS_H */
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h
index 1e5f6730ff31..ba3254ecf7fb 100644
--- a/include/linux/rtnetlink.h
+++ b/include/linux/rtnetlink.h
@@ -217,6 +217,7 @@ enum
217#define RTPROT_DNROUTED 13 /* DECnet routing daemon */ 217#define RTPROT_DNROUTED 13 /* DECnet routing daemon */
218#define RTPROT_XORP 14 /* XORP */ 218#define RTPROT_XORP 14 /* XORP */
219#define RTPROT_NTK 15 /* Netsukuku */ 219#define RTPROT_NTK 15 /* Netsukuku */
220#define RTPROT_DHCP 16 /* DHCP client */
220 221
221/* rtm_scope 222/* rtm_scope
222 223
@@ -622,8 +623,8 @@ static __inline__ int rtattr_strcmp(const struct rtattr *rta, const char *str)
622 623
623extern int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, u32 group, int echo); 624extern int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, u32 group, int echo);
624extern int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid); 625extern int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid);
625extern int rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group, 626extern void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid,
626 struct nlmsghdr *nlh, gfp_t flags); 627 u32 group, struct nlmsghdr *nlh, gfp_t flags);
627extern void rtnl_set_sk_err(struct net *net, u32 group, int error); 628extern void rtnl_set_sk_err(struct net *net, u32 group, int error);
628extern int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics); 629extern int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics);
629extern int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, 630extern int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst,
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 011db2f4c94c..ff904b0606d4 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -998,6 +998,7 @@ struct sched_class {
998 struct rq *busiest, struct sched_domain *sd, 998 struct rq *busiest, struct sched_domain *sd,
999 enum cpu_idle_type idle); 999 enum cpu_idle_type idle);
1000 void (*pre_schedule) (struct rq *this_rq, struct task_struct *task); 1000 void (*pre_schedule) (struct rq *this_rq, struct task_struct *task);
1001 int (*needs_post_schedule) (struct rq *this_rq);
1001 void (*post_schedule) (struct rq *this_rq); 1002 void (*post_schedule) (struct rq *this_rq);
1002 void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); 1003 void (*task_wake_up) (struct rq *this_rq, struct task_struct *task);
1003 1004
@@ -1052,6 +1053,10 @@ struct sched_entity {
1052 u64 last_wakeup; 1053 u64 last_wakeup;
1053 u64 avg_overlap; 1054 u64 avg_overlap;
1054 1055
1056 u64 start_runtime;
1057 u64 avg_wakeup;
1058 u64 nr_migrations;
1059
1055#ifdef CONFIG_SCHEDSTATS 1060#ifdef CONFIG_SCHEDSTATS
1056 u64 wait_start; 1061 u64 wait_start;
1057 u64 wait_max; 1062 u64 wait_max;
@@ -1067,7 +1072,6 @@ struct sched_entity {
1067 u64 exec_max; 1072 u64 exec_max;
1068 u64 slice_max; 1073 u64 slice_max;
1069 1074
1070 u64 nr_migrations;
1071 u64 nr_migrations_cold; 1075 u64 nr_migrations_cold;
1072 u64 nr_failed_migrations_affine; 1076 u64 nr_failed_migrations_affine;
1073 u64 nr_failed_migrations_running; 1077 u64 nr_failed_migrations_running;
@@ -1164,6 +1168,7 @@ struct task_struct {
1164#endif 1168#endif
1165 1169
1166 struct list_head tasks; 1170 struct list_head tasks;
1171 struct plist_node pushable_tasks;
1167 1172
1168 struct mm_struct *mm, *active_mm; 1173 struct mm_struct *mm, *active_mm;
1169 1174
@@ -1175,6 +1180,8 @@ struct task_struct {
1175 /* ??? */ 1180 /* ??? */
1176 unsigned int personality; 1181 unsigned int personality;
1177 unsigned did_exec:1; 1182 unsigned did_exec:1;
1183 unsigned in_execve:1; /* Tell the LSMs that the process is doing an
1184 * execve */
1178 pid_t pid; 1185 pid_t pid;
1179 pid_t tgid; 1186 pid_t tgid;
1180 1187
@@ -1673,6 +1680,16 @@ static inline int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask)
1673 return set_cpus_allowed_ptr(p, &new_mask); 1680 return set_cpus_allowed_ptr(p, &new_mask);
1674} 1681}
1675 1682
1683/*
1684 * Architectures can set this to 1 if they have specified
1685 * CONFIG_HAVE_UNSTABLE_SCHED_CLOCK in their arch Kconfig,
1686 * but then during bootup it turns out that sched_clock()
1687 * is reliable after all:
1688 */
1689#ifdef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
1690extern int sched_clock_stable;
1691#endif
1692
1676extern unsigned long long sched_clock(void); 1693extern unsigned long long sched_clock(void);
1677 1694
1678extern void sched_clock_init(void); 1695extern void sched_clock_init(void);
diff --git a/include/linux/sctp.h b/include/linux/sctp.h
index 8ba1c320f975..c2731bfe04d8 100644
--- a/include/linux/sctp.h
+++ b/include/linux/sctp.h
@@ -60,7 +60,7 @@ typedef struct sctphdr {
60 __be16 source; 60 __be16 source;
61 __be16 dest; 61 __be16 dest;
62 __be32 vtag; 62 __be32 vtag;
63 __be32 checksum; 63 __le32 checksum;
64} __attribute__((packed)) sctp_sctphdr_t; 64} __attribute__((packed)) sctp_sctphdr_t;
65 65
66#ifdef __KERNEL__ 66#ifdef __KERNEL__
@@ -172,35 +172,35 @@ typedef struct sctp_paramhdr {
172typedef enum { 172typedef enum {
173 173
174 /* RFC 2960 Section 3.3.5 */ 174 /* RFC 2960 Section 3.3.5 */
175 SCTP_PARAM_HEARTBEAT_INFO = __constant_htons(1), 175 SCTP_PARAM_HEARTBEAT_INFO = cpu_to_be16(1),
176 /* RFC 2960 Section 3.3.2.1 */ 176 /* RFC 2960 Section 3.3.2.1 */
177 SCTP_PARAM_IPV4_ADDRESS = __constant_htons(5), 177 SCTP_PARAM_IPV4_ADDRESS = cpu_to_be16(5),
178 SCTP_PARAM_IPV6_ADDRESS = __constant_htons(6), 178 SCTP_PARAM_IPV6_ADDRESS = cpu_to_be16(6),
179 SCTP_PARAM_STATE_COOKIE = __constant_htons(7), 179 SCTP_PARAM_STATE_COOKIE = cpu_to_be16(7),
180 SCTP_PARAM_UNRECOGNIZED_PARAMETERS = __constant_htons(8), 180 SCTP_PARAM_UNRECOGNIZED_PARAMETERS = cpu_to_be16(8),
181 SCTP_PARAM_COOKIE_PRESERVATIVE = __constant_htons(9), 181 SCTP_PARAM_COOKIE_PRESERVATIVE = cpu_to_be16(9),
182 SCTP_PARAM_HOST_NAME_ADDRESS = __constant_htons(11), 182 SCTP_PARAM_HOST_NAME_ADDRESS = cpu_to_be16(11),
183 SCTP_PARAM_SUPPORTED_ADDRESS_TYPES = __constant_htons(12), 183 SCTP_PARAM_SUPPORTED_ADDRESS_TYPES = cpu_to_be16(12),
184 SCTP_PARAM_ECN_CAPABLE = __constant_htons(0x8000), 184 SCTP_PARAM_ECN_CAPABLE = cpu_to_be16(0x8000),
185 185
186 /* AUTH Extension Section 3 */ 186 /* AUTH Extension Section 3 */
187 SCTP_PARAM_RANDOM = __constant_htons(0x8002), 187 SCTP_PARAM_RANDOM = cpu_to_be16(0x8002),
188 SCTP_PARAM_CHUNKS = __constant_htons(0x8003), 188 SCTP_PARAM_CHUNKS = cpu_to_be16(0x8003),
189 SCTP_PARAM_HMAC_ALGO = __constant_htons(0x8004), 189 SCTP_PARAM_HMAC_ALGO = cpu_to_be16(0x8004),
190 190
191 /* Add-IP: Supported Extensions, Section 4.2 */ 191 /* Add-IP: Supported Extensions, Section 4.2 */
192 SCTP_PARAM_SUPPORTED_EXT = __constant_htons(0x8008), 192 SCTP_PARAM_SUPPORTED_EXT = cpu_to_be16(0x8008),
193 193
194 /* PR-SCTP Sec 3.1 */ 194 /* PR-SCTP Sec 3.1 */
195 SCTP_PARAM_FWD_TSN_SUPPORT = __constant_htons(0xc000), 195 SCTP_PARAM_FWD_TSN_SUPPORT = cpu_to_be16(0xc000),
196 196
197 /* Add-IP Extension. Section 3.2 */ 197 /* Add-IP Extension. Section 3.2 */
198 SCTP_PARAM_ADD_IP = __constant_htons(0xc001), 198 SCTP_PARAM_ADD_IP = cpu_to_be16(0xc001),
199 SCTP_PARAM_DEL_IP = __constant_htons(0xc002), 199 SCTP_PARAM_DEL_IP = cpu_to_be16(0xc002),
200 SCTP_PARAM_ERR_CAUSE = __constant_htons(0xc003), 200 SCTP_PARAM_ERR_CAUSE = cpu_to_be16(0xc003),
201 SCTP_PARAM_SET_PRIMARY = __constant_htons(0xc004), 201 SCTP_PARAM_SET_PRIMARY = cpu_to_be16(0xc004),
202 SCTP_PARAM_SUCCESS_REPORT = __constant_htons(0xc005), 202 SCTP_PARAM_SUCCESS_REPORT = cpu_to_be16(0xc005),
203 SCTP_PARAM_ADAPTATION_LAYER_IND = __constant_htons(0xc006), 203 SCTP_PARAM_ADAPTATION_LAYER_IND = cpu_to_be16(0xc006),
204 204
205} sctp_param_t; /* enum */ 205} sctp_param_t; /* enum */
206 206
@@ -212,13 +212,13 @@ typedef enum {
212 * 212 *
213 */ 213 */
214typedef enum { 214typedef enum {
215 SCTP_PARAM_ACTION_DISCARD = __constant_htons(0x0000), 215 SCTP_PARAM_ACTION_DISCARD = cpu_to_be16(0x0000),
216 SCTP_PARAM_ACTION_DISCARD_ERR = __constant_htons(0x4000), 216 SCTP_PARAM_ACTION_DISCARD_ERR = cpu_to_be16(0x4000),
217 SCTP_PARAM_ACTION_SKIP = __constant_htons(0x8000), 217 SCTP_PARAM_ACTION_SKIP = cpu_to_be16(0x8000),
218 SCTP_PARAM_ACTION_SKIP_ERR = __constant_htons(0xc000), 218 SCTP_PARAM_ACTION_SKIP_ERR = cpu_to_be16(0xc000),
219} sctp_param_action_t; 219} sctp_param_action_t;
220 220
221enum { SCTP_PARAM_ACTION_MASK = __constant_htons(0xc000), }; 221enum { SCTP_PARAM_ACTION_MASK = cpu_to_be16(0xc000), };
222 222
223/* RFC 2960 Section 3.3.1 Payload Data (DATA) (0) */ 223/* RFC 2960 Section 3.3.1 Payload Data (DATA) (0) */
224 224
@@ -457,17 +457,17 @@ typedef struct sctp_operr_chunk {
457 */ 457 */
458typedef enum { 458typedef enum {
459 459
460 SCTP_ERROR_NO_ERROR = __constant_htons(0x00), 460 SCTP_ERROR_NO_ERROR = cpu_to_be16(0x00),
461 SCTP_ERROR_INV_STRM = __constant_htons(0x01), 461 SCTP_ERROR_INV_STRM = cpu_to_be16(0x01),
462 SCTP_ERROR_MISS_PARAM = __constant_htons(0x02), 462 SCTP_ERROR_MISS_PARAM = cpu_to_be16(0x02),
463 SCTP_ERROR_STALE_COOKIE = __constant_htons(0x03), 463 SCTP_ERROR_STALE_COOKIE = cpu_to_be16(0x03),
464 SCTP_ERROR_NO_RESOURCE = __constant_htons(0x04), 464 SCTP_ERROR_NO_RESOURCE = cpu_to_be16(0x04),
465 SCTP_ERROR_DNS_FAILED = __constant_htons(0x05), 465 SCTP_ERROR_DNS_FAILED = cpu_to_be16(0x05),
466 SCTP_ERROR_UNKNOWN_CHUNK = __constant_htons(0x06), 466 SCTP_ERROR_UNKNOWN_CHUNK = cpu_to_be16(0x06),
467 SCTP_ERROR_INV_PARAM = __constant_htons(0x07), 467 SCTP_ERROR_INV_PARAM = cpu_to_be16(0x07),
468 SCTP_ERROR_UNKNOWN_PARAM = __constant_htons(0x08), 468 SCTP_ERROR_UNKNOWN_PARAM = cpu_to_be16(0x08),
469 SCTP_ERROR_NO_DATA = __constant_htons(0x09), 469 SCTP_ERROR_NO_DATA = cpu_to_be16(0x09),
470 SCTP_ERROR_COOKIE_IN_SHUTDOWN = __constant_htons(0x0a), 470 SCTP_ERROR_COOKIE_IN_SHUTDOWN = cpu_to_be16(0x0a),
471 471
472 472
473 /* SCTP Implementation Guide: 473 /* SCTP Implementation Guide:
@@ -476,9 +476,9 @@ typedef enum {
476 * 13 Protocol Violation 476 * 13 Protocol Violation
477 */ 477 */
478 478
479 SCTP_ERROR_RESTART = __constant_htons(0x0b), 479 SCTP_ERROR_RESTART = cpu_to_be16(0x0b),
480 SCTP_ERROR_USER_ABORT = __constant_htons(0x0c), 480 SCTP_ERROR_USER_ABORT = cpu_to_be16(0x0c),
481 SCTP_ERROR_PROTO_VIOLATION = __constant_htons(0x0d), 481 SCTP_ERROR_PROTO_VIOLATION = cpu_to_be16(0x0d),
482 482
483 /* ADDIP Section 3.3 New Error Causes 483 /* ADDIP Section 3.3 New Error Causes
484 * 484 *
@@ -493,11 +493,11 @@ typedef enum {
493 * 0x0103 Association Aborted due to illegal ASCONF-ACK 493 * 0x0103 Association Aborted due to illegal ASCONF-ACK
494 * 0x0104 Request refused - no authorization. 494 * 0x0104 Request refused - no authorization.
495 */ 495 */
496 SCTP_ERROR_DEL_LAST_IP = __constant_htons(0x0100), 496 SCTP_ERROR_DEL_LAST_IP = cpu_to_be16(0x0100),
497 SCTP_ERROR_RSRC_LOW = __constant_htons(0x0101), 497 SCTP_ERROR_RSRC_LOW = cpu_to_be16(0x0101),
498 SCTP_ERROR_DEL_SRC_IP = __constant_htons(0x0102), 498 SCTP_ERROR_DEL_SRC_IP = cpu_to_be16(0x0102),
499 SCTP_ERROR_ASCONF_ACK = __constant_htons(0x0103), 499 SCTP_ERROR_ASCONF_ACK = cpu_to_be16(0x0103),
500 SCTP_ERROR_REQ_REFUSED = __constant_htons(0x0104), 500 SCTP_ERROR_REQ_REFUSED = cpu_to_be16(0x0104),
501 501
502 /* AUTH Section 4. New Error Cause 502 /* AUTH Section 4. New Error Cause
503 * 503 *
@@ -509,7 +509,7 @@ typedef enum {
509 * -------------------------------------------------------------- 509 * --------------------------------------------------------------
510 * 0x0105 Unsupported HMAC Identifier 510 * 0x0105 Unsupported HMAC Identifier
511 */ 511 */
512 SCTP_ERROR_UNSUP_HMAC = __constant_htons(0x0105) 512 SCTP_ERROR_UNSUP_HMAC = cpu_to_be16(0x0105)
513} sctp_error_t; 513} sctp_error_t;
514 514
515 515
diff --git a/include/linux/sh_cmt.h b/include/linux/sh_cmt.h
new file mode 100644
index 000000000000..68cacde5954f
--- /dev/null
+++ b/include/linux/sh_cmt.h
@@ -0,0 +1,13 @@
1#ifndef __SH_CMT_H__
2#define __SH_CMT_H__
3
4struct sh_cmt_config {
5 char *name;
6 unsigned long channel_offset;
7 int timer_bit;
8 char *clk;
9 unsigned long clockevent_rating;
10 unsigned long clocksource_rating;
11};
12
13#endif /* __SH_CMT_H__ */
diff --git a/include/linux/sh_intc.h b/include/linux/sh_intc.h
index 68e212ff9dde..eb1423a0078d 100644
--- a/include/linux/sh_intc.h
+++ b/include/linux/sh_intc.h
@@ -85,6 +85,7 @@ struct intc_desc symbol __initdata = { \
85} 85}
86#endif 86#endif
87 87
88unsigned int intc_evt2irq(unsigned int vector);
88void __init register_intc_controller(struct intc_desc *desc); 89void __init register_intc_controller(struct intc_desc *desc);
89int intc_set_priority(unsigned int irq, unsigned int prio); 90int intc_set_priority(unsigned int irq, unsigned int prio);
90 91
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 9dcf956ad18a..bb1981fd60f3 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -29,9 +29,6 @@
29#include <linux/dmaengine.h> 29#include <linux/dmaengine.h>
30#include <linux/hrtimer.h> 30#include <linux/hrtimer.h>
31 31
32#define HAVE_ALLOC_SKB /* For the drivers to know */
33#define HAVE_ALIGNABLE_SKB /* Ditto 8) */
34
35/* Don't change this without changing skb_csum_unnecessary! */ 32/* Don't change this without changing skb_csum_unnecessary! */
36#define CHECKSUM_NONE 0 33#define CHECKSUM_NONE 0
37#define CHECKSUM_UNNECESSARY 1 34#define CHECKSUM_UNNECESSARY 1
@@ -135,6 +132,55 @@ struct skb_frag_struct {
135 __u32 size; 132 __u32 size;
136}; 133};
137 134
135#define HAVE_HW_TIME_STAMP
136
137/**
138 * struct skb_shared_hwtstamps - hardware time stamps
139 * @hwtstamp: hardware time stamp transformed into duration
140 * since arbitrary point in time
141 * @syststamp: hwtstamp transformed to system time base
142 *
143 * Software time stamps generated by ktime_get_real() are stored in
144 * skb->tstamp. The relation between the different kinds of time
145 * stamps is as follows:
146 *
147 * syststamp and tstamp can be compared against each other in
148 * arbitrary combinations. The accuracy of a
149 * syststamp/tstamp/"syststamp from other device" comparison is
150 * limited by the accuracy of the transformation into system time
151 * base. This depends on the device driver and its underlying
152 * hardware.
153 *
154 * hwtstamps can only be compared against other hwtstamps from
155 * the same device.
156 *
157 * This structure is attached to packets as part of the
158 * &skb_shared_info. Use skb_hwtstamps() to get a pointer.
159 */
160struct skb_shared_hwtstamps {
161 ktime_t hwtstamp;
162 ktime_t syststamp;
163};
164
165/**
166 * struct skb_shared_tx - instructions for time stamping of outgoing packets
167 * @hardware: generate hardware time stamp
168 * @software: generate software time stamp
169 * @in_progress: device driver is going to provide
170 * hardware time stamp
171 *
172 * These flags are attached to packets as part of the
173 * &skb_shared_info. Use skb_tx() to get a pointer.
174 */
175union skb_shared_tx {
176 struct {
177 __u8 hardware:1,
178 software:1,
179 in_progress:1;
180 };
181 __u8 flags;
182};
183
138/* This data is invariant across clones and lives at 184/* This data is invariant across clones and lives at
139 * the end of the header data, ie. at skb->end. 185 * the end of the header data, ie. at skb->end.
140 */ 186 */
@@ -146,10 +192,12 @@ struct skb_shared_info {
146 unsigned short gso_segs; 192 unsigned short gso_segs;
147 unsigned short gso_type; 193 unsigned short gso_type;
148 __be32 ip6_frag_id; 194 __be32 ip6_frag_id;
195 union skb_shared_tx tx_flags;
149#ifdef CONFIG_HAS_DMA 196#ifdef CONFIG_HAS_DMA
150 unsigned int num_dma_maps; 197 unsigned int num_dma_maps;
151#endif 198#endif
152 struct sk_buff *frag_list; 199 struct sk_buff *frag_list;
200 struct skb_shared_hwtstamps hwtstamps;
153 skb_frag_t frags[MAX_SKB_FRAGS]; 201 skb_frag_t frags[MAX_SKB_FRAGS];
154#ifdef CONFIG_HAS_DMA 202#ifdef CONFIG_HAS_DMA
155 dma_addr_t dma_maps[MAX_SKB_FRAGS + 1]; 203 dma_addr_t dma_maps[MAX_SKB_FRAGS + 1];
@@ -373,6 +421,7 @@ extern void skb_dma_unmap(struct device *dev, struct sk_buff *skb,
373#endif 421#endif
374 422
375extern void kfree_skb(struct sk_buff *skb); 423extern void kfree_skb(struct sk_buff *skb);
424extern void consume_skb(struct sk_buff *skb);
376extern void __kfree_skb(struct sk_buff *skb); 425extern void __kfree_skb(struct sk_buff *skb);
377extern struct sk_buff *__alloc_skb(unsigned int size, 426extern struct sk_buff *__alloc_skb(unsigned int size,
378 gfp_t priority, int fclone, int node); 427 gfp_t priority, int fclone, int node);
@@ -411,7 +460,8 @@ extern int skb_to_sgvec(struct sk_buff *skb,
411extern int skb_cow_data(struct sk_buff *skb, int tailbits, 460extern int skb_cow_data(struct sk_buff *skb, int tailbits,
412 struct sk_buff **trailer); 461 struct sk_buff **trailer);
413extern int skb_pad(struct sk_buff *skb, int pad); 462extern int skb_pad(struct sk_buff *skb, int pad);
414#define dev_kfree_skb(a) kfree_skb(a) 463#define dev_kfree_skb(a) consume_skb(a)
464#define dev_consume_skb(a) kfree_skb_clean(a)
415extern void skb_over_panic(struct sk_buff *skb, int len, 465extern void skb_over_panic(struct sk_buff *skb, int len,
416 void *here); 466 void *here);
417extern void skb_under_panic(struct sk_buff *skb, int len, 467extern void skb_under_panic(struct sk_buff *skb, int len,
@@ -459,6 +509,16 @@ static inline unsigned char *skb_end_pointer(const struct sk_buff *skb)
459/* Internal */ 509/* Internal */
460#define skb_shinfo(SKB) ((struct skb_shared_info *)(skb_end_pointer(SKB))) 510#define skb_shinfo(SKB) ((struct skb_shared_info *)(skb_end_pointer(SKB)))
461 511
512static inline struct skb_shared_hwtstamps *skb_hwtstamps(struct sk_buff *skb)
513{
514 return &skb_shinfo(skb)->hwtstamps;
515}
516
517static inline union skb_shared_tx *skb_tx(struct sk_buff *skb)
518{
519 return &skb_shinfo(skb)->tx_flags;
520}
521
462/** 522/**
463 * skb_queue_empty - check if a queue is empty 523 * skb_queue_empty - check if a queue is empty
464 * @list: queue head 524 * @list: queue head
@@ -1278,7 +1338,7 @@ static inline int skb_network_offset(const struct sk_buff *skb)
1278 * The networking layer reserves some headroom in skb data (via 1338 * The networking layer reserves some headroom in skb data (via
1279 * dev_alloc_skb). This is used to avoid having to reallocate skb data when 1339 * dev_alloc_skb). This is used to avoid having to reallocate skb data when
1280 * the header has to grow. In the default case, if the header has to grow 1340 * the header has to grow. In the default case, if the header has to grow
1281 * 16 bytes or less we avoid the reallocation. 1341 * 32 bytes or less we avoid the reallocation.
1282 * 1342 *
1283 * Unfortunately this headroom changes the DMA alignment of the resulting 1343 * Unfortunately this headroom changes the DMA alignment of the resulting
1284 * network packet. As for NET_IP_ALIGN, this unaligned DMA is expensive 1344 * network packet. As for NET_IP_ALIGN, this unaligned DMA is expensive
@@ -1286,11 +1346,11 @@ static inline int skb_network_offset(const struct sk_buff *skb)
1286 * perhaps setting it to a cacheline in size (since that will maintain 1346 * perhaps setting it to a cacheline in size (since that will maintain
1287 * cacheline alignment of the DMA). It must be a power of 2. 1347 * cacheline alignment of the DMA). It must be a power of 2.
1288 * 1348 *
1289 * Various parts of the networking layer expect at least 16 bytes of 1349 * Various parts of the networking layer expect at least 32 bytes of
1290 * headroom, you should not reduce this. 1350 * headroom, you should not reduce this.
1291 */ 1351 */
1292#ifndef NET_SKB_PAD 1352#ifndef NET_SKB_PAD
1293#define NET_SKB_PAD 16 1353#define NET_SKB_PAD 32
1294#endif 1354#endif
1295 1355
1296extern int ___pskb_trim(struct sk_buff *skb, unsigned int len); 1356extern int ___pskb_trim(struct sk_buff *skb, unsigned int len);
@@ -1678,8 +1738,6 @@ extern int skb_shift(struct sk_buff *tgt, struct sk_buff *skb,
1678 int shiftlen); 1738 int shiftlen);
1679 1739
1680extern struct sk_buff *skb_segment(struct sk_buff *skb, int features); 1740extern struct sk_buff *skb_segment(struct sk_buff *skb, int features);
1681extern int skb_gro_receive(struct sk_buff **head,
1682 struct sk_buff *skb);
1683 1741
1684static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, 1742static inline void *skb_header_pointer(const struct sk_buff *skb, int offset,
1685 int len, void *buffer) 1743 int len, void *buffer)
@@ -1726,6 +1784,11 @@ static inline void skb_copy_to_linear_data_offset(struct sk_buff *skb,
1726 1784
1727extern void skb_init(void); 1785extern void skb_init(void);
1728 1786
1787static inline ktime_t skb_get_ktime(const struct sk_buff *skb)
1788{
1789 return skb->tstamp;
1790}
1791
1729/** 1792/**
1730 * skb_get_timestamp - get timestamp from a skb 1793 * skb_get_timestamp - get timestamp from a skb
1731 * @skb: skb to get stamp from 1794 * @skb: skb to get stamp from
@@ -1735,11 +1798,18 @@ extern void skb_init(void);
1735 * This function converts the offset back to a struct timeval and stores 1798 * This function converts the offset back to a struct timeval and stores
1736 * it in stamp. 1799 * it in stamp.
1737 */ 1800 */
1738static inline void skb_get_timestamp(const struct sk_buff *skb, struct timeval *stamp) 1801static inline void skb_get_timestamp(const struct sk_buff *skb,
1802 struct timeval *stamp)
1739{ 1803{
1740 *stamp = ktime_to_timeval(skb->tstamp); 1804 *stamp = ktime_to_timeval(skb->tstamp);
1741} 1805}
1742 1806
1807static inline void skb_get_timestampns(const struct sk_buff *skb,
1808 struct timespec *stamp)
1809{
1810 *stamp = ktime_to_timespec(skb->tstamp);
1811}
1812
1743static inline void __net_timestamp(struct sk_buff *skb) 1813static inline void __net_timestamp(struct sk_buff *skb)
1744{ 1814{
1745 skb->tstamp = ktime_get_real(); 1815 skb->tstamp = ktime_get_real();
@@ -1755,6 +1825,20 @@ static inline ktime_t net_invalid_timestamp(void)
1755 return ktime_set(0, 0); 1825 return ktime_set(0, 0);
1756} 1826}
1757 1827
1828/**
1829 * skb_tstamp_tx - queue clone of skb with send time stamps
1830 * @orig_skb: the original outgoing packet
1831 * @hwtstamps: hardware time stamps, may be NULL if not available
1832 *
1833 * If the skb has a socket associated, then this function clones the
1834 * skb (thus sharing the actual data and optional structures), stores
1835 * the optional hardware time stamping information (if non NULL) or
1836 * generates a software time stamp (otherwise), then queues the clone
1837 * to the error queue of the socket. Errors are silently ignored.
1838 */
1839extern void skb_tstamp_tx(struct sk_buff *orig_skb,
1840 struct skb_shared_hwtstamps *hwtstamps);
1841
1758extern __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len); 1842extern __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len);
1759extern __sum16 __skb_checksum_complete(struct sk_buff *skb); 1843extern __sum16 __skb_checksum_complete(struct sk_buff *skb);
1760 1844
@@ -1885,7 +1969,7 @@ static inline void skb_set_queue_mapping(struct sk_buff *skb, u16 queue_mapping)
1885 skb->queue_mapping = queue_mapping; 1969 skb->queue_mapping = queue_mapping;
1886} 1970}
1887 1971
1888static inline u16 skb_get_queue_mapping(struct sk_buff *skb) 1972static inline u16 skb_get_queue_mapping(const struct sk_buff *skb)
1889{ 1973{
1890 return skb->queue_mapping; 1974 return skb->queue_mapping;
1891} 1975}
@@ -1895,6 +1979,24 @@ static inline void skb_copy_queue_mapping(struct sk_buff *to, const struct sk_bu
1895 to->queue_mapping = from->queue_mapping; 1979 to->queue_mapping = from->queue_mapping;
1896} 1980}
1897 1981
1982static inline void skb_record_rx_queue(struct sk_buff *skb, u16 rx_queue)
1983{
1984 skb->queue_mapping = rx_queue + 1;
1985}
1986
1987static inline u16 skb_get_rx_queue(const struct sk_buff *skb)
1988{
1989 return skb->queue_mapping - 1;
1990}
1991
1992static inline bool skb_rx_queue_recorded(const struct sk_buff *skb)
1993{
1994 return (skb->queue_mapping != 0);
1995}
1996
1997extern u16 skb_tx_hash(const struct net_device *dev,
1998 const struct sk_buff *skb);
1999
1898#ifdef CONFIG_XFRM 2000#ifdef CONFIG_XFRM
1899static inline struct sec_path *skb_sec_path(struct sk_buff *skb) 2001static inline struct sec_path *skb_sec_path(struct sk_buff *skb)
1900{ 2002{
diff --git a/include/linux/smsc911x.h b/include/linux/smsc911x.h
index 1cbf0313adde..b32725075d71 100644
--- a/include/linux/smsc911x.h
+++ b/include/linux/smsc911x.h
@@ -43,5 +43,8 @@ struct smsc911x_platform_config {
43/* Constants for flags */ 43/* Constants for flags */
44#define SMSC911X_USE_16BIT (BIT(0)) 44#define SMSC911X_USE_16BIT (BIT(0))
45#define SMSC911X_USE_32BIT (BIT(1)) 45#define SMSC911X_USE_32BIT (BIT(1))
46#define SMSC911X_FORCE_INTERNAL_PHY (BIT(2))
47#define SMSC911X_FORCE_EXTERNAL_PHY (BIT(3))
48#define SMSC911X_SAVE_MAC_ADDRESS (BIT(4))
46 49
47#endif /* __LINUX_SMSC911X_H__ */ 50#endif /* __LINUX_SMSC911X_H__ */
diff --git a/include/linux/socket.h b/include/linux/socket.h
index 20fc4bbfca42..9c90dc403efc 100644
--- a/include/linux/socket.h
+++ b/include/linux/socket.h
@@ -179,6 +179,7 @@ struct ucred {
179#define AF_ASH 18 /* Ash */ 179#define AF_ASH 18 /* Ash */
180#define AF_ECONET 19 /* Acorn Econet */ 180#define AF_ECONET 19 /* Acorn Econet */
181#define AF_ATMSVC 20 /* ATM SVCs */ 181#define AF_ATMSVC 20 /* ATM SVCs */
182#define AF_RDS 21 /* RDS sockets */
182#define AF_SNA 22 /* Linux SNA Project (nutters!) */ 183#define AF_SNA 22 /* Linux SNA Project (nutters!) */
183#define AF_IRDA 23 /* IRDA sockets */ 184#define AF_IRDA 23 /* IRDA sockets */
184#define AF_PPPOX 24 /* PPPoX sockets */ 185#define AF_PPPOX 24 /* PPPoX sockets */
@@ -217,6 +218,7 @@ struct ucred {
217#define PF_ASH AF_ASH 218#define PF_ASH AF_ASH
218#define PF_ECONET AF_ECONET 219#define PF_ECONET AF_ECONET
219#define PF_ATMSVC AF_ATMSVC 220#define PF_ATMSVC AF_ATMSVC
221#define PF_RDS AF_RDS
220#define PF_SNA AF_SNA 222#define PF_SNA AF_SNA
221#define PF_IRDA AF_IRDA 223#define PF_IRDA AF_IRDA
222#define PF_PPPOX AF_PPPOX 224#define PF_PPPOX AF_PPPOX
@@ -298,6 +300,7 @@ struct ucred {
298#define SOL_PPPOL2TP 273 300#define SOL_PPPOL2TP 273
299#define SOL_BLUETOOTH 274 301#define SOL_BLUETOOTH 274
300#define SOL_PNPIPE 275 302#define SOL_PNPIPE 275
303#define SOL_RDS 276
301 304
302/* IPX options */ 305/* IPX options */
303#define IPX_TYPE 1 306#define IPX_TYPE 1
diff --git a/include/linux/sockios.h b/include/linux/sockios.h
index abef7596655a..241f179347d9 100644
--- a/include/linux/sockios.h
+++ b/include/linux/sockios.h
@@ -122,6 +122,9 @@
122#define SIOCBRADDIF 0x89a2 /* add interface to bridge */ 122#define SIOCBRADDIF 0x89a2 /* add interface to bridge */
123#define SIOCBRDELIF 0x89a3 /* remove interface from bridge */ 123#define SIOCBRDELIF 0x89a3 /* remove interface from bridge */
124 124
125/* hardware time stamping: parameters in linux/net_tstamp.h */
126#define SIOCSHWTSTAMP 0x89b0
127
125/* Device private ioctl calls */ 128/* Device private ioctl calls */
126 129
127/* 130/*
diff --git a/include/linux/spi/libertas_spi.h b/include/linux/spi/libertas_spi.h
new file mode 100644
index 000000000000..79506f5f9e67
--- /dev/null
+++ b/include/linux/spi/libertas_spi.h
@@ -0,0 +1,32 @@
1/*
2 * board-specific data for the libertas_spi driver.
3 *
4 * Copyright 2008 Analog Devices Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or (at
9 * your option) any later version.
10 */
11#ifndef _LIBERTAS_SPI_H_
12#define _LIBERTAS_SPI_H_
13
14struct spi_device;
15
16struct libertas_spi_platform_data {
17 /* There are two ways to read data from the WLAN module's SPI
18 * interface. Setting 0 or 1 here controls which one is used.
19 *
20 * Usually you want to set use_dummy_writes = 1.
21 * However, if that doesn't work or if you are using a slow SPI clock
22 * speed, you may want to use 0 here. */
23 u16 use_dummy_writes;
24
25 /* GPIO number to use as chip select */
26 u16 gpio_cs;
27
28 /* Board specific setup/teardown */
29 int (*setup)(struct spi_device *spi);
30 int (*teardown)(struct spi_device *spi);
31};
32#endif
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h
index 17d9b58f6379..5ae8fa22d331 100644
--- a/include/linux/ssb/ssb.h
+++ b/include/linux/ssb/ssb.h
@@ -339,6 +339,10 @@ extern int ssb_bus_pcmciabus_register(struct ssb_bus *bus,
339 339
340extern void ssb_bus_unregister(struct ssb_bus *bus); 340extern void ssb_bus_unregister(struct ssb_bus *bus);
341 341
342/* Set a fallback SPROM.
343 * See kdoc at the function definition for complete documentation. */
344extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom);
345
342/* Suspend a SSB bus. 346/* Suspend a SSB bus.
343 * Call this from the parent bus suspend routine. */ 347 * Call this from the parent bus suspend routine. */
344extern int ssb_bus_suspend(struct ssb_bus *bus); 348extern int ssb_bus_suspend(struct ssb_bus *bus);
diff --git a/include/linux/ssb/ssb_driver_chipcommon.h b/include/linux/ssb/ssb_driver_chipcommon.h
index 7d7e03dcf77c..d3b1d18922f2 100644
--- a/include/linux/ssb/ssb_driver_chipcommon.h
+++ b/include/linux/ssb/ssb_driver_chipcommon.h
@@ -181,6 +181,16 @@
181#define SSB_CHIPCO_PROG_WAITCNT 0x0124 181#define SSB_CHIPCO_PROG_WAITCNT 0x0124
182#define SSB_CHIPCO_FLASH_CFG 0x0128 182#define SSB_CHIPCO_FLASH_CFG 0x0128
183#define SSB_CHIPCO_FLASH_WAITCNT 0x012C 183#define SSB_CHIPCO_FLASH_WAITCNT 0x012C
184#define SSB_CHIPCO_CLKCTLST 0x01E0 /* Clock control and status (rev >= 20) */
185#define SSB_CHIPCO_CLKCTLST_FORCEALP 0x00000001 /* Force ALP request */
186#define SSB_CHIPCO_CLKCTLST_FORCEHT 0x00000002 /* Force HT request */
187#define SSB_CHIPCO_CLKCTLST_FORCEILP 0x00000004 /* Force ILP request */
188#define SSB_CHIPCO_CLKCTLST_HAVEALPREQ 0x00000008 /* ALP available request */
189#define SSB_CHIPCO_CLKCTLST_HAVEHTREQ 0x00000010 /* HT available request */
190#define SSB_CHIPCO_CLKCTLST_HWCROFF 0x00000020 /* Force HW clock request off */
191#define SSB_CHIPCO_CLKCTLST_HAVEHT 0x00010000 /* HT available */
192#define SSB_CHIPCO_CLKCTLST_HAVEALP 0x00020000 /* APL available */
193#define SSB_CHIPCO_HW_WORKAROUND 0x01E4 /* Hardware workaround (rev >= 20) */
184#define SSB_CHIPCO_UART0_DATA 0x0300 194#define SSB_CHIPCO_UART0_DATA 0x0300
185#define SSB_CHIPCO_UART0_IMR 0x0304 195#define SSB_CHIPCO_UART0_IMR 0x0304
186#define SSB_CHIPCO_UART0_FCR 0x0308 196#define SSB_CHIPCO_UART0_FCR 0x0308
@@ -197,6 +207,196 @@
197#define SSB_CHIPCO_UART1_LSR 0x0414 207#define SSB_CHIPCO_UART1_LSR 0x0414
198#define SSB_CHIPCO_UART1_MSR 0x0418 208#define SSB_CHIPCO_UART1_MSR 0x0418
199#define SSB_CHIPCO_UART1_SCRATCH 0x041C 209#define SSB_CHIPCO_UART1_SCRATCH 0x041C
210/* PMU registers (rev >= 20) */
211#define SSB_CHIPCO_PMU_CTL 0x0600 /* PMU control */
212#define SSB_CHIPCO_PMU_CTL_ILP_DIV 0xFFFF0000 /* ILP div mask */
213#define SSB_CHIPCO_PMU_CTL_ILP_DIV_SHIFT 16
214#define SSB_CHIPCO_PMU_CTL_NOILPONW 0x00000200 /* No ILP on wait */
215#define SSB_CHIPCO_PMU_CTL_HTREQEN 0x00000100 /* HT req enable */
216#define SSB_CHIPCO_PMU_CTL_ALPREQEN 0x00000080 /* ALP req enable */
217#define SSB_CHIPCO_PMU_CTL_XTALFREQ 0x0000007C /* Crystal freq */
218#define SSB_CHIPCO_PMU_CTL_XTALFREQ_SHIFT 2
219#define SSB_CHIPCO_PMU_CTL_ILPDIVEN 0x00000002 /* ILP div enable */
220#define SSB_CHIPCO_PMU_CTL_LPOSEL 0x00000001 /* LPO sel */
221#define SSB_CHIPCO_PMU_CAP 0x0604 /* PMU capabilities */
222#define SSB_CHIPCO_PMU_CAP_REVISION 0x000000FF /* Revision mask */
223#define SSB_CHIPCO_PMU_STAT 0x0608 /* PMU status */
224#define SSB_CHIPCO_PMU_STAT_INTPEND 0x00000040 /* Interrupt pending */
225#define SSB_CHIPCO_PMU_STAT_SBCLKST 0x00000030 /* Backplane clock status? */
226#define SSB_CHIPCO_PMU_STAT_HAVEALP 0x00000008 /* ALP available */
227#define SSB_CHIPCO_PMU_STAT_HAVEHT 0x00000004 /* HT available */
228#define SSB_CHIPCO_PMU_STAT_RESINIT 0x00000003 /* Res init */
229#define SSB_CHIPCO_PMU_RES_STAT 0x060C /* PMU res status */
230#define SSB_CHIPCO_PMU_RES_PEND 0x0610 /* PMU res pending */
231#define SSB_CHIPCO_PMU_TIMER 0x0614 /* PMU timer */
232#define SSB_CHIPCO_PMU_MINRES_MSK 0x0618 /* PMU min res mask */
233#define SSB_CHIPCO_PMU_MAXRES_MSK 0x061C /* PMU max res mask */
234#define SSB_CHIPCO_PMU_RES_TABSEL 0x0620 /* PMU res table sel */
235#define SSB_CHIPCO_PMU_RES_DEPMSK 0x0624 /* PMU res dep mask */
236#define SSB_CHIPCO_PMU_RES_UPDNTM 0x0628 /* PMU res updown timer */
237#define SSB_CHIPCO_PMU_RES_TIMER 0x062C /* PMU res timer */
238#define SSB_CHIPCO_PMU_CLKSTRETCH 0x0630 /* PMU clockstretch */
239#define SSB_CHIPCO_PMU_WATCHDOG 0x0634 /* PMU watchdog */
240#define SSB_CHIPCO_PMU_RES_REQTS 0x0640 /* PMU res req timer sel */
241#define SSB_CHIPCO_PMU_RES_REQT 0x0644 /* PMU res req timer */
242#define SSB_CHIPCO_PMU_RES_REQM 0x0648 /* PMU res req mask */
243#define SSB_CHIPCO_CHIPCTL_ADDR 0x0650
244#define SSB_CHIPCO_CHIPCTL_DATA 0x0654
245#define SSB_CHIPCO_REGCTL_ADDR 0x0658
246#define SSB_CHIPCO_REGCTL_DATA 0x065C
247#define SSB_CHIPCO_PLLCTL_ADDR 0x0660
248#define SSB_CHIPCO_PLLCTL_DATA 0x0664
249
250
251
252/** PMU PLL registers */
253
254/* PMU rev 0 PLL registers */
255#define SSB_PMU0_PLLCTL0 0
256#define SSB_PMU0_PLLCTL0_PDIV_MSK 0x00000001
257#define SSB_PMU0_PLLCTL0_PDIV_FREQ 25000 /* kHz */
258#define SSB_PMU0_PLLCTL1 1
259#define SSB_PMU0_PLLCTL1_WILD_IMSK 0xF0000000 /* Wild int mask (low nibble) */
260#define SSB_PMU0_PLLCTL1_WILD_IMSK_SHIFT 28
261#define SSB_PMU0_PLLCTL1_WILD_FMSK 0x0FFFFF00 /* Wild frac mask */
262#define SSB_PMU0_PLLCTL1_WILD_FMSK_SHIFT 8
263#define SSB_PMU0_PLLCTL1_STOPMOD 0x00000040 /* Stop mod */
264#define SSB_PMU0_PLLCTL2 2
265#define SSB_PMU0_PLLCTL2_WILD_IMSKHI 0x0000000F /* Wild int mask (high nibble) */
266#define SSB_PMU0_PLLCTL2_WILD_IMSKHI_SHIFT 0
267
268/* PMU rev 1 PLL registers */
269#define SSB_PMU1_PLLCTL0 0
270#define SSB_PMU1_PLLCTL0_P1DIV 0x00F00000 /* P1 div */
271#define SSB_PMU1_PLLCTL0_P1DIV_SHIFT 20
272#define SSB_PMU1_PLLCTL0_P2DIV 0x0F000000 /* P2 div */
273#define SSB_PMU1_PLLCTL0_P2DIV_SHIFT 24
274#define SSB_PMU1_PLLCTL1 1
275#define SSB_PMU1_PLLCTL1_M1DIV 0x000000FF /* M1 div */
276#define SSB_PMU1_PLLCTL1_M1DIV_SHIFT 0
277#define SSB_PMU1_PLLCTL1_M2DIV 0x0000FF00 /* M2 div */
278#define SSB_PMU1_PLLCTL1_M2DIV_SHIFT 8
279#define SSB_PMU1_PLLCTL1_M3DIV 0x00FF0000 /* M3 div */
280#define SSB_PMU1_PLLCTL1_M3DIV_SHIFT 16
281#define SSB_PMU1_PLLCTL1_M4DIV 0xFF000000 /* M4 div */
282#define SSB_PMU1_PLLCTL1_M4DIV_SHIFT 24
283#define SSB_PMU1_PLLCTL2 2
284#define SSB_PMU1_PLLCTL2_M5DIV 0x000000FF /* M5 div */
285#define SSB_PMU1_PLLCTL2_M5DIV_SHIFT 0
286#define SSB_PMU1_PLLCTL2_M6DIV 0x0000FF00 /* M6 div */
287#define SSB_PMU1_PLLCTL2_M6DIV_SHIFT 8
288#define SSB_PMU1_PLLCTL2_NDIVMODE 0x000E0000 /* NDIV mode */
289#define SSB_PMU1_PLLCTL2_NDIVMODE_SHIFT 17
290#define SSB_PMU1_PLLCTL2_NDIVINT 0x1FF00000 /* NDIV int */
291#define SSB_PMU1_PLLCTL2_NDIVINT_SHIFT 20
292#define SSB_PMU1_PLLCTL3 3
293#define SSB_PMU1_PLLCTL3_NDIVFRAC 0x00FFFFFF /* NDIV frac */
294#define SSB_PMU1_PLLCTL3_NDIVFRAC_SHIFT 0
295#define SSB_PMU1_PLLCTL4 4
296#define SSB_PMU1_PLLCTL5 5
297#define SSB_PMU1_PLLCTL5_CLKDRV 0xFFFFFF00 /* clk drv */
298#define SSB_PMU1_PLLCTL5_CLKDRV_SHIFT 8
299
300/* BCM4312 PLL resource numbers. */
301#define SSB_PMURES_4312_SWITCHER_BURST 0
302#define SSB_PMURES_4312_SWITCHER_PWM 1
303#define SSB_PMURES_4312_PA_REF_LDO 2
304#define SSB_PMURES_4312_CORE_LDO_BURST 3
305#define SSB_PMURES_4312_CORE_LDO_PWM 4
306#define SSB_PMURES_4312_RADIO_LDO 5
307#define SSB_PMURES_4312_ILP_REQUEST 6
308#define SSB_PMURES_4312_BG_FILTBYP 7
309#define SSB_PMURES_4312_TX_FILTBYP 8
310#define SSB_PMURES_4312_RX_FILTBYP 9
311#define SSB_PMURES_4312_XTAL_PU 10
312#define SSB_PMURES_4312_ALP_AVAIL 11
313#define SSB_PMURES_4312_BB_PLL_FILTBYP 12
314#define SSB_PMURES_4312_RF_PLL_FILTBYP 13
315#define SSB_PMURES_4312_HT_AVAIL 14
316
317/* BCM4325 PLL resource numbers. */
318#define SSB_PMURES_4325_BUCK_BOOST_BURST 0
319#define SSB_PMURES_4325_CBUCK_BURST 1
320#define SSB_PMURES_4325_CBUCK_PWM 2
321#define SSB_PMURES_4325_CLDO_CBUCK_BURST 3
322#define SSB_PMURES_4325_CLDO_CBUCK_PWM 4
323#define SSB_PMURES_4325_BUCK_BOOST_PWM 5
324#define SSB_PMURES_4325_ILP_REQUEST 6
325#define SSB_PMURES_4325_ABUCK_BURST 7
326#define SSB_PMURES_4325_ABUCK_PWM 8
327#define SSB_PMURES_4325_LNLDO1_PU 9
328#define SSB_PMURES_4325_LNLDO2_PU 10
329#define SSB_PMURES_4325_LNLDO3_PU 11
330#define SSB_PMURES_4325_LNLDO4_PU 12
331#define SSB_PMURES_4325_XTAL_PU 13
332#define SSB_PMURES_4325_ALP_AVAIL 14
333#define SSB_PMURES_4325_RX_PWRSW_PU 15
334#define SSB_PMURES_4325_TX_PWRSW_PU 16
335#define SSB_PMURES_4325_RFPLL_PWRSW_PU 17
336#define SSB_PMURES_4325_LOGEN_PWRSW_PU 18
337#define SSB_PMURES_4325_AFE_PWRSW_PU 19
338#define SSB_PMURES_4325_BBPLL_PWRSW_PU 20
339#define SSB_PMURES_4325_HT_AVAIL 21
340
341/* BCM4328 PLL resource numbers. */
342#define SSB_PMURES_4328_EXT_SWITCHER_PWM 0
343#define SSB_PMURES_4328_BB_SWITCHER_PWM 1
344#define SSB_PMURES_4328_BB_SWITCHER_BURST 2
345#define SSB_PMURES_4328_BB_EXT_SWITCHER_BURST 3
346#define SSB_PMURES_4328_ILP_REQUEST 4
347#define SSB_PMURES_4328_RADIO_SWITCHER_PWM 5
348#define SSB_PMURES_4328_RADIO_SWITCHER_BURST 6
349#define SSB_PMURES_4328_ROM_SWITCH 7
350#define SSB_PMURES_4328_PA_REF_LDO 8
351#define SSB_PMURES_4328_RADIO_LDO 9
352#define SSB_PMURES_4328_AFE_LDO 10
353#define SSB_PMURES_4328_PLL_LDO 11
354#define SSB_PMURES_4328_BG_FILTBYP 12
355#define SSB_PMURES_4328_TX_FILTBYP 13
356#define SSB_PMURES_4328_RX_FILTBYP 14
357#define SSB_PMURES_4328_XTAL_PU 15
358#define SSB_PMURES_4328_XTAL_EN 16
359#define SSB_PMURES_4328_BB_PLL_FILTBYP 17
360#define SSB_PMURES_4328_RF_PLL_FILTBYP 18
361#define SSB_PMURES_4328_BB_PLL_PU 19
362
363/* BCM5354 PLL resource numbers. */
364#define SSB_PMURES_5354_EXT_SWITCHER_PWM 0
365#define SSB_PMURES_5354_BB_SWITCHER_PWM 1
366#define SSB_PMURES_5354_BB_SWITCHER_BURST 2
367#define SSB_PMURES_5354_BB_EXT_SWITCHER_BURST 3
368#define SSB_PMURES_5354_ILP_REQUEST 4
369#define SSB_PMURES_5354_RADIO_SWITCHER_PWM 5
370#define SSB_PMURES_5354_RADIO_SWITCHER_BURST 6
371#define SSB_PMURES_5354_ROM_SWITCH 7
372#define SSB_PMURES_5354_PA_REF_LDO 8
373#define SSB_PMURES_5354_RADIO_LDO 9
374#define SSB_PMURES_5354_AFE_LDO 10
375#define SSB_PMURES_5354_PLL_LDO 11
376#define SSB_PMURES_5354_BG_FILTBYP 12
377#define SSB_PMURES_5354_TX_FILTBYP 13
378#define SSB_PMURES_5354_RX_FILTBYP 14
379#define SSB_PMURES_5354_XTAL_PU 15
380#define SSB_PMURES_5354_XTAL_EN 16
381#define SSB_PMURES_5354_BB_PLL_FILTBYP 17
382#define SSB_PMURES_5354_RF_PLL_FILTBYP 18
383#define SSB_PMURES_5354_BB_PLL_PU 19
384
385
386
387/** Chip specific Chip-Status register contents. */
388#define SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL 0x00000003
389#define SSB_CHIPCO_CHST_4325_DEFCIS_SEL 0 /* OTP is powered up, use def. CIS, no SPROM */
390#define SSB_CHIPCO_CHST_4325_SPROM_SEL 1 /* OTP is powered up, SPROM is present */
391#define SSB_CHIPCO_CHST_4325_OTP_SEL 2 /* OTP is powered up, no SPROM */
392#define SSB_CHIPCO_CHST_4325_OTP_PWRDN 3 /* OTP is powered down, SPROM is present */
393#define SSB_CHIPCO_CHST_4325_SDIO_USB_MODE 0x00000004
394#define SSB_CHIPCO_CHST_4325_SDIO_USB_MODE_SHIFT 2
395#define SSB_CHIPCO_CHST_4325_RCAL_VALID 0x00000008
396#define SSB_CHIPCO_CHST_4325_RCAL_VALID_SHIFT 3
397#define SSB_CHIPCO_CHST_4325_RCAL_VALUE 0x000001F0
398#define SSB_CHIPCO_CHST_4325_RCAL_VALUE_SHIFT 4
399#define SSB_CHIPCO_CHST_4325_PMUTOP_2B 0x00000200 /* 1 for 2b, 0 for to 2a */
200 400
201 401
202 402
@@ -353,11 +553,20 @@
353struct ssb_device; 553struct ssb_device;
354struct ssb_serial_port; 554struct ssb_serial_port;
355 555
556/* Data for the PMU, if available.
557 * Check availability with ((struct ssb_chipcommon)->capabilities & SSB_CHIPCO_CAP_PMU)
558 */
559struct ssb_chipcommon_pmu {
560 u8 rev; /* PMU revision */
561 u32 crystalfreq; /* The active crystal frequency (in kHz) */
562};
563
356struct ssb_chipcommon { 564struct ssb_chipcommon {
357 struct ssb_device *dev; 565 struct ssb_device *dev;
358 u32 capabilities; 566 u32 capabilities;
359 /* Fast Powerup Delay constant */ 567 /* Fast Powerup Delay constant */
360 u16 fast_pwrup_delay; 568 u16 fast_pwrup_delay;
569 struct ssb_chipcommon_pmu pmu;
361}; 570};
362 571
363static inline bool ssb_chipco_available(struct ssb_chipcommon *cc) 572static inline bool ssb_chipco_available(struct ssb_chipcommon *cc)
@@ -365,6 +574,17 @@ static inline bool ssb_chipco_available(struct ssb_chipcommon *cc)
365 return (cc->dev != NULL); 574 return (cc->dev != NULL);
366} 575}
367 576
577/* Register access */
578#define chipco_read32(cc, offset) ssb_read32((cc)->dev, offset)
579#define chipco_write32(cc, offset, val) ssb_write32((cc)->dev, offset, val)
580
581#define chipco_mask32(cc, offset, mask) \
582 chipco_write32(cc, offset, chipco_read32(cc, offset) & (mask))
583#define chipco_set32(cc, offset, set) \
584 chipco_write32(cc, offset, chipco_read32(cc, offset) | (set))
585#define chipco_maskset32(cc, offset, mask, set) \
586 chipco_write32(cc, offset, (chipco_read32(cc, offset) & (mask)) | (set))
587
368extern void ssb_chipcommon_init(struct ssb_chipcommon *cc); 588extern void ssb_chipcommon_init(struct ssb_chipcommon *cc);
369 589
370extern void ssb_chipco_suspend(struct ssb_chipcommon *cc); 590extern void ssb_chipco_suspend(struct ssb_chipcommon *cc);
@@ -406,4 +626,8 @@ extern int ssb_chipco_serial_init(struct ssb_chipcommon *cc,
406 struct ssb_serial_port *ports); 626 struct ssb_serial_port *ports);
407#endif /* CONFIG_SSB_SERIAL */ 627#endif /* CONFIG_SSB_SERIAL */
408 628
629/* PMU support */
630extern void ssb_pmu_init(struct ssb_chipcommon *cc);
631
632
409#endif /* LINUX_SSB_CHIPCO_H_ */ 633#endif /* LINUX_SSB_CHIPCO_H_ */
diff --git a/include/linux/ssb/ssb_regs.h b/include/linux/ssb/ssb_regs.h
index 99a0f991e850..a01b982b5783 100644
--- a/include/linux/ssb/ssb_regs.h
+++ b/include/linux/ssb/ssb_regs.h
@@ -326,6 +326,42 @@
326#define SSB_SPROM5_GPIOB_P3 0xFF00 /* Pin 3 */ 326#define SSB_SPROM5_GPIOB_P3 0xFF00 /* Pin 3 */
327#define SSB_SPROM5_GPIOB_P3_SHIFT 8 327#define SSB_SPROM5_GPIOB_P3_SHIFT 8
328 328
329/* SPROM Revision 8 */
330#define SSB_SPROM8_BFLLO 0x1084 /* Boardflags (low 16 bits) */
331#define SSB_SPROM8_BFLHI 0x1086 /* Boardflags Hi */
332#define SSB_SPROM8_IL0MAC 0x108C /* 6 byte MAC address */
333#define SSB_SPROM8_CCODE 0x1092 /* 2 byte country code */
334#define SSB_SPROM8_ANTAVAIL 0x109C /* Antenna available bitfields*/
335#define SSB_SPROM8_ANTAVAIL_A 0xFF00 /* A-PHY bitfield */
336#define SSB_SPROM8_ANTAVAIL_A_SHIFT 8
337#define SSB_SPROM8_ANTAVAIL_BG 0x00FF /* B-PHY and G-PHY bitfield */
338#define SSB_SPROM8_ANTAVAIL_BG_SHIFT 0
339#define SSB_SPROM8_AGAIN01 0x109E /* Antenna Gain (in dBm Q5.2) */
340#define SSB_SPROM8_AGAIN0 0x00FF /* Antenna 0 */
341#define SSB_SPROM8_AGAIN0_SHIFT 0
342#define SSB_SPROM8_AGAIN1 0xFF00 /* Antenna 1 */
343#define SSB_SPROM8_AGAIN1_SHIFT 8
344#define SSB_SPROM8_AGAIN23 0x10A0
345#define SSB_SPROM8_AGAIN2 0x00FF /* Antenna 2 */
346#define SSB_SPROM8_AGAIN2_SHIFT 0
347#define SSB_SPROM8_AGAIN3 0xFF00 /* Antenna 3 */
348#define SSB_SPROM8_AGAIN3_SHIFT 8
349#define SSB_SPROM8_GPIOA 0x1096 /*Gen. Purpose IO # 0 and 1 */
350#define SSB_SPROM8_GPIOA_P0 0x00FF /* Pin 0 */
351#define SSB_SPROM8_GPIOA_P1 0xFF00 /* Pin 1 */
352#define SSB_SPROM8_GPIOA_P1_SHIFT 8
353#define SSB_SPROM8_GPIOB 0x1098 /* Gen. Purpose IO # 2 and 3 */
354#define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */
355#define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */
356#define SSB_SPROM8_GPIOB_P3_SHIFT 8
357#define SSB_SPROM8_MAXP_BG 0x10C0 /* Max Power BG in path 1 */
358#define SSB_SPROM8_MAXP_BG_MASK 0x00FF /* Mask for Max Power BG */
359#define SSB_SPROM8_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */
360#define SSB_SPROM8_ITSSI_BG_SHIFT 8
361#define SSB_SPROM8_MAXP_A 0x10C8 /* Max Power A in path 1 */
362#define SSB_SPROM8_MAXP_A_MASK 0x00FF /* Mask for Max Power A */
363#define SSB_SPROM8_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */
364#define SSB_SPROM8_ITSSI_A_SHIFT 8
329 365
330/* Values for SSB_SPROM1_BINF_CCODE */ 366/* Values for SSB_SPROM1_BINF_CCODE */
331enum { 367enum {
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index 39d471d1163b..e76d3b22a466 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -490,6 +490,7 @@ enum
490 NET_IPV4_CONF_ARP_IGNORE=19, 490 NET_IPV4_CONF_ARP_IGNORE=19,
491 NET_IPV4_CONF_PROMOTE_SECONDARIES=20, 491 NET_IPV4_CONF_PROMOTE_SECONDARIES=20,
492 NET_IPV4_CONF_ARP_ACCEPT=21, 492 NET_IPV4_CONF_ARP_ACCEPT=21,
493 NET_IPV4_CONF_ARP_NOTIFY=22,
493 __NET_IPV4_CONF_MAX 494 __NET_IPV4_CONF_MAX
494}; 495};
495 496
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
index fe77e1499ab7..9d5078bd23a3 100644
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
@@ -69,16 +69,16 @@ union tcp_word_hdr {
69#define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3]) 69#define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3])
70 70
71enum { 71enum {
72 TCP_FLAG_CWR = __constant_htonl(0x00800000), 72 TCP_FLAG_CWR = __cpu_to_be32(0x00800000),
73 TCP_FLAG_ECE = __constant_htonl(0x00400000), 73 TCP_FLAG_ECE = __cpu_to_be32(0x00400000),
74 TCP_FLAG_URG = __constant_htonl(0x00200000), 74 TCP_FLAG_URG = __cpu_to_be32(0x00200000),
75 TCP_FLAG_ACK = __constant_htonl(0x00100000), 75 TCP_FLAG_ACK = __cpu_to_be32(0x00100000),
76 TCP_FLAG_PSH = __constant_htonl(0x00080000), 76 TCP_FLAG_PSH = __cpu_to_be32(0x00080000),
77 TCP_FLAG_RST = __constant_htonl(0x00040000), 77 TCP_FLAG_RST = __cpu_to_be32(0x00040000),
78 TCP_FLAG_SYN = __constant_htonl(0x00020000), 78 TCP_FLAG_SYN = __cpu_to_be32(0x00020000),
79 TCP_FLAG_FIN = __constant_htonl(0x00010000), 79 TCP_FLAG_FIN = __cpu_to_be32(0x00010000),
80 TCP_RESERVED_BITS = __constant_htonl(0x0F000000), 80 TCP_RESERVED_BITS = __cpu_to_be32(0x0F000000),
81 TCP_DATA_OFFSET = __constant_htonl(0xF0000000) 81 TCP_DATA_OFFSET = __cpu_to_be32(0xF0000000)
82}; 82};
83 83
84/* TCP socket options */ 84/* TCP socket options */
@@ -218,7 +218,6 @@ struct tcp_options_received {
218 snd_wscale : 4, /* Window scaling received from sender */ 218 snd_wscale : 4, /* Window scaling received from sender */
219 rcv_wscale : 4; /* Window scaling to send to receiver */ 219 rcv_wscale : 4; /* Window scaling to send to receiver */
220/* SACKs data */ 220/* SACKs data */
221 u8 eff_sacks; /* Size of SACK array to send with next packet */
222 u8 num_sacks; /* Number of SACK blocks */ 221 u8 num_sacks; /* Number of SACK blocks */
223 u16 user_mss; /* mss requested by user in ioctl */ 222 u16 user_mss; /* mss requested by user in ioctl */
224 u16 mss_clamp; /* Maximal mss, negotiated at connection setup */ 223 u16 mss_clamp; /* Maximal mss, negotiated at connection setup */
@@ -249,7 +248,7 @@ struct tcp_sock {
249 /* inet_connection_sock has to be the first member of tcp_sock */ 248 /* inet_connection_sock has to be the first member of tcp_sock */
250 struct inet_connection_sock inet_conn; 249 struct inet_connection_sock inet_conn;
251 u16 tcp_header_len; /* Bytes of tcp header to send */ 250 u16 tcp_header_len; /* Bytes of tcp header to send */
252 u16 xmit_size_goal; /* Goal for segmenting output packets */ 251 u16 xmit_size_goal_segs; /* Goal for segmenting output packets */
253 252
254/* 253/*
255 * Header prediction flags 254 * Header prediction flags
diff --git a/include/linux/timecompare.h b/include/linux/timecompare.h
new file mode 100644
index 000000000000..546e2234e4b3
--- /dev/null
+++ b/include/linux/timecompare.h
@@ -0,0 +1,125 @@
1/*
2 * Utility code which helps transforming between two different time
3 * bases, called "source" and "target" time in this code.
4 *
5 * Source time has to be provided via the timecounter API while target
6 * time is accessed via a function callback whose prototype
7 * intentionally matches ktime_get() and ktime_get_real(). These
8 * interfaces where chosen like this so that the code serves its
9 * initial purpose without additional glue code.
10 *
11 * This purpose is synchronizing a hardware clock in a NIC with system
12 * time, in order to implement the Precision Time Protocol (PTP,
13 * IEEE1588) with more accurate hardware assisted time stamping. In
14 * that context only synchronization against system time (=
15 * ktime_get_real()) is currently needed. But this utility code might
16 * become useful in other situations, which is why it was written as
17 * general purpose utility code.
18 *
19 * The source timecounter is assumed to return monotonically
20 * increasing time (but this code does its best to compensate if that
21 * is not the case) whereas target time may jump.
22 *
23 * The target time corresponding to a source time is determined by
24 * reading target time, reading source time, reading target time
25 * again, then assuming that average target time corresponds to source
26 * time. In other words, the assumption is that reading the source
27 * time is slow and involves equal time for sending the request and
28 * receiving the reply, whereas reading target time is assumed to be
29 * fast.
30 *
31 * Copyright (C) 2009 Intel Corporation.
32 * Author: Patrick Ohly <patrick.ohly@intel.com>
33 *
34 * This program is free software; you can redistribute it and/or modify it
35 * under the terms and conditions of the GNU General Public License,
36 * version 2, as published by the Free Software Foundation.
37 *
38 * This program is distributed in the hope it will be useful, but WITHOUT
39 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
40 * FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for
41 * more details.
42 *
43 * You should have received a copy of the GNU General Public License along with
44 * this program; if not, write to the Free Software Foundation, Inc.,
45 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
46 */
47#ifndef _LINUX_TIMECOMPARE_H
48#define _LINUX_TIMECOMPARE_H
49
50#include <linux/clocksource.h>
51#include <linux/ktime.h>
52
53/**
54 * struct timecompare - stores state and configuration for the two clocks
55 *
56 * Initialize to zero, then set source/target/num_samples.
57 *
58 * Transformation between source time and target time is done with:
59 * target_time = source_time + offset +
60 * (source_time - last_update) * skew /
61 * TIMECOMPARE_SKEW_RESOLUTION
62 *
63 * @source: used to get source time stamps via timecounter_read()
64 * @target: function returning target time (for example, ktime_get
65 * for monotonic time, or ktime_get_real for wall clock)
66 * @num_samples: number of times that source time and target time are to
67 * be compared when determining their offset
68 * @offset: (target time - source time) at the time of the last update
69 * @skew: average (target time - source time) / delta source time *
70 * TIMECOMPARE_SKEW_RESOLUTION
71 * @last_update: last source time stamp when time offset was measured
72 */
73struct timecompare {
74 struct timecounter *source;
75 ktime_t (*target)(void);
76 int num_samples;
77
78 s64 offset;
79 s64 skew;
80 u64 last_update;
81};
82
83/**
84 * timecompare_transform - transform source time stamp into target time base
85 * @sync: context for time sync
86 * @source_tstamp: the result of timecounter_read() or
87 * timecounter_cyc2time()
88 */
89extern ktime_t timecompare_transform(struct timecompare *sync,
90 u64 source_tstamp);
91
92/**
93 * timecompare_offset - measure current (target time - source time) offset
94 * @sync: context for time sync
95 * @offset: average offset during sample period returned here
96 * @source_tstamp: average source time during sample period returned here
97 *
98 * Returns number of samples used. Might be zero (= no result) in the
99 * unlikely case that target time was monotonically decreasing for all
100 * samples (= broken).
101 */
102extern int timecompare_offset(struct timecompare *sync,
103 s64 *offset,
104 u64 *source_tstamp);
105
106extern void __timecompare_update(struct timecompare *sync,
107 u64 source_tstamp);
108
109/**
110 * timecompare_update - update offset and skew by measuring current offset
111 * @sync: context for time sync
112 * @source_tstamp: the result of timecounter_read() or
113 * timecounter_cyc2time(), pass zero to force update
114 *
115 * Updates are only done at most once per second.
116 */
117static inline void timecompare_update(struct timecompare *sync,
118 u64 source_tstamp)
119{
120 if (!source_tstamp ||
121 (s64)(source_tstamp - sync->last_update) >= NSEC_PER_SEC)
122 __timecompare_update(sync, source_tstamp);
123}
124
125#endif /* _LINUX_TIMECOMPARE_H */
diff --git a/include/linux/timer.h b/include/linux/timer.h
index daf9685b861c..e2d662e3416e 100644
--- a/include/linux/timer.h
+++ b/include/linux/timer.h
@@ -86,8 +86,8 @@ static inline int timer_pending(const struct timer_list * timer)
86 86
87extern void add_timer_on(struct timer_list *timer, int cpu); 87extern void add_timer_on(struct timer_list *timer, int cpu);
88extern int del_timer(struct timer_list * timer); 88extern int del_timer(struct timer_list * timer);
89extern int __mod_timer(struct timer_list *timer, unsigned long expires);
90extern int mod_timer(struct timer_list *timer, unsigned long expires); 89extern int mod_timer(struct timer_list *timer, unsigned long expires);
90extern int mod_timer_pending(struct timer_list *timer, unsigned long expires);
91 91
92/* 92/*
93 * The jiffies value which is added to now, when there is no timer 93 * The jiffies value which is added to now, when there is no timer
@@ -146,25 +146,7 @@ static inline void timer_stats_timer_clear_start_info(struct timer_list *timer)
146} 146}
147#endif 147#endif
148 148
149/** 149extern void add_timer(struct timer_list *timer);
150 * add_timer - start a timer
151 * @timer: the timer to be added
152 *
153 * The kernel will do a ->function(->data) callback from the
154 * timer interrupt at the ->expires point in the future. The
155 * current time is 'jiffies'.
156 *
157 * The timer's ->expires, ->function (and if the handler uses it, ->data)
158 * fields must be set prior calling this function.
159 *
160 * Timers with an ->expires field in the past will be executed in the next
161 * timer tick.
162 */
163static inline void add_timer(struct timer_list *timer)
164{
165 BUG_ON(timer_pending(timer));
166 __mod_timer(timer, timer->expires);
167}
168 150
169#ifdef CONFIG_SMP 151#ifdef CONFIG_SMP
170 extern int try_to_del_timer_sync(struct timer_list *timer); 152 extern int try_to_del_timer_sync(struct timer_list *timer);
diff --git a/include/linux/timeriomem-rng.h b/include/linux/timeriomem-rng.h
new file mode 100644
index 000000000000..dd253177f65f
--- /dev/null
+++ b/include/linux/timeriomem-rng.h
@@ -0,0 +1,21 @@
1/*
2 * linux/include/linux/timeriomem-rng.h
3 *
4 * Copyright (c) 2009 Alexander Clouter <alex@digriz.org.uk>
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#include <linux/completion.h>
12
13struct timeriomem_rng_data {
14 struct completion completion;
15 unsigned int present:1;
16
17 u32 __iomem *address;
18
19 /* measures in usecs */
20 unsigned int period;
21};
diff --git a/include/linux/timex.h b/include/linux/timex.h
index 998a55d80acf..aa3475fcff64 100644
--- a/include/linux/timex.h
+++ b/include/linux/timex.h
@@ -190,7 +190,7 @@ struct timex {
190 * offset and maximum frequency tolerance. 190 * offset and maximum frequency tolerance.
191 */ 191 */
192#define SHIFT_USEC 16 /* frequency offset scale (shift) */ 192#define SHIFT_USEC 16 /* frequency offset scale (shift) */
193#define PPM_SCALE (NSEC_PER_USEC << (NTP_SCALE_SHIFT - SHIFT_USEC)) 193#define PPM_SCALE ((s64)NSEC_PER_USEC << (NTP_SCALE_SHIFT - SHIFT_USEC))
194#define PPM_SCALE_INV_SHIFT 19 194#define PPM_SCALE_INV_SHIFT 19
195#define PPM_SCALE_INV ((1ll << (PPM_SCALE_INV_SHIFT + NTP_SCALE_SHIFT)) / \ 195#define PPM_SCALE_INV ((1ll << (PPM_SCALE_INV_SHIFT + NTP_SCALE_SHIFT)) / \
196 PPM_SCALE + 1) 196 PPM_SCALE + 1)
diff --git a/include/linux/tpm.h b/include/linux/tpm.h
new file mode 100644
index 000000000000..3338b3f5c21a
--- /dev/null
+++ b/include/linux/tpm.h
@@ -0,0 +1,35 @@
1/*
2 * Copyright (C) 2004,2007,2008 IBM Corporation
3 *
4 * Authors:
5 * Leendert van Doorn <leendert@watson.ibm.com>
6 * Dave Safford <safford@watson.ibm.com>
7 * Reiner Sailer <sailer@watson.ibm.com>
8 * Kylene Hall <kjhall@us.ibm.com>
9 * Debora Velarde <dvelarde@us.ibm.com>
10 *
11 * Maintained by: <tpmdd_devel@lists.sourceforge.net>
12 *
13 * Device driver for TCG/TCPA TPM (trusted platform module).
14 * Specifications at www.trustedcomputinggroup.org
15 *
16 * This program is free software; you can redistribute it and/or
17 * modify it under the terms of the GNU General Public License as
18 * published by the Free Software Foundation, version 2 of the
19 * License.
20 *
21 */
22#ifndef __LINUX_TPM_H__
23#define __LINUX_TPM_H__
24
25/*
26 * Chip num is this value or a valid tpm idx
27 */
28#define TPM_ANY_NUM 0xFFFF
29
30#if defined(CONFIG_TCG_TPM)
31
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);
34#endif
35#endif
diff --git a/include/linux/uio_driver.h b/include/linux/uio_driver.h
index a0bb6bd2e5c1..5dcc9ff72f69 100644
--- a/include/linux/uio_driver.h
+++ b/include/linux/uio_driver.h
@@ -22,6 +22,7 @@ struct uio_map;
22 22
23/** 23/**
24 * struct uio_mem - description of a UIO memory region 24 * struct uio_mem - description of a UIO memory region
25 * @name: name of the memory region for identification
25 * @addr: address of the device's memory 26 * @addr: address of the device's memory
26 * @size: size of IO 27 * @size: size of IO
27 * @memtype: type of memory addr points to 28 * @memtype: type of memory addr points to
@@ -29,6 +30,7 @@ struct uio_map;
29 * @map: for use by the UIO core only. 30 * @map: for use by the UIO core only.
30 */ 31 */
31struct uio_mem { 32struct uio_mem {
33 const char *name;
32 unsigned long addr; 34 unsigned long addr;
33 unsigned long size; 35 unsigned long size;
34 int memtype; 36 int memtype;
@@ -42,12 +44,14 @@ struct uio_portio;
42 44
43/** 45/**
44 * struct uio_port - description of a UIO port region 46 * struct uio_port - description of a UIO port region
47 * @name: name of the port region for identification
45 * @start: start of port region 48 * @start: start of port region
46 * @size: size of port region 49 * @size: size of port region
47 * @porttype: type of port (see UIO_PORT_* below) 50 * @porttype: type of port (see UIO_PORT_* below)
48 * @portio: for use by the UIO core only. 51 * @portio: for use by the UIO core only.
49 */ 52 */
50struct uio_port { 53struct uio_port {
54 const char *name;
51 unsigned long start; 55 unsigned long start;
52 unsigned long size; 56 unsigned long size;
53 int porttype; 57 int porttype;
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 88079fd60235..c6b2ab41b908 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -643,186 +643,6 @@ static inline int usb_make_path(struct usb_device *dev, char *buf, size_t size)
643 643
644/*-------------------------------------------------------------------------*/ 644/*-------------------------------------------------------------------------*/
645 645
646/**
647 * usb_endpoint_num - get the endpoint's number
648 * @epd: endpoint to be checked
649 *
650 * Returns @epd's number: 0 to 15.
651 */
652static inline int usb_endpoint_num(const struct usb_endpoint_descriptor *epd)
653{
654 return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
655}
656
657/**
658 * usb_endpoint_type - get the endpoint's transfer type
659 * @epd: endpoint to be checked
660 *
661 * Returns one of USB_ENDPOINT_XFER_{CONTROL, ISOC, BULK, INT} according
662 * to @epd's transfer type.
663 */
664static inline int usb_endpoint_type(const struct usb_endpoint_descriptor *epd)
665{
666 return epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
667}
668
669/**
670 * usb_endpoint_dir_in - check if the endpoint has IN direction
671 * @epd: endpoint to be checked
672 *
673 * Returns true if the endpoint is of type IN, otherwise it returns false.
674 */
675static inline int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
676{
677 return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN);
678}
679
680/**
681 * usb_endpoint_dir_out - check if the endpoint has OUT direction
682 * @epd: endpoint to be checked
683 *
684 * Returns true if the endpoint is of type OUT, otherwise it returns false.
685 */
686static inline int usb_endpoint_dir_out(
687 const struct usb_endpoint_descriptor *epd)
688{
689 return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT);
690}
691
692/**
693 * usb_endpoint_xfer_bulk - check if the endpoint has bulk transfer type
694 * @epd: endpoint to be checked
695 *
696 * Returns true if the endpoint is of type bulk, otherwise it returns false.
697 */
698static inline int usb_endpoint_xfer_bulk(
699 const struct usb_endpoint_descriptor *epd)
700{
701 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
702 USB_ENDPOINT_XFER_BULK);
703}
704
705/**
706 * usb_endpoint_xfer_control - check if the endpoint has control transfer type
707 * @epd: endpoint to be checked
708 *
709 * Returns true if the endpoint is of type control, otherwise it returns false.
710 */
711static inline int usb_endpoint_xfer_control(
712 const struct usb_endpoint_descriptor *epd)
713{
714 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
715 USB_ENDPOINT_XFER_CONTROL);
716}
717
718/**
719 * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type
720 * @epd: endpoint to be checked
721 *
722 * Returns true if the endpoint is of type interrupt, otherwise it returns
723 * false.
724 */
725static inline int usb_endpoint_xfer_int(
726 const struct usb_endpoint_descriptor *epd)
727{
728 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
729 USB_ENDPOINT_XFER_INT);
730}
731
732/**
733 * usb_endpoint_xfer_isoc - check if the endpoint has isochronous transfer type
734 * @epd: endpoint to be checked
735 *
736 * Returns true if the endpoint is of type isochronous, otherwise it returns
737 * false.
738 */
739static inline int usb_endpoint_xfer_isoc(
740 const struct usb_endpoint_descriptor *epd)
741{
742 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
743 USB_ENDPOINT_XFER_ISOC);
744}
745
746/**
747 * usb_endpoint_is_bulk_in - check if the endpoint is bulk IN
748 * @epd: endpoint to be checked
749 *
750 * Returns true if the endpoint has bulk transfer type and IN direction,
751 * otherwise it returns false.
752 */
753static inline int usb_endpoint_is_bulk_in(
754 const struct usb_endpoint_descriptor *epd)
755{
756 return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd));
757}
758
759/**
760 * usb_endpoint_is_bulk_out - check if the endpoint is bulk OUT
761 * @epd: endpoint to be checked
762 *
763 * Returns true if the endpoint has bulk transfer type and OUT direction,
764 * otherwise it returns false.
765 */
766static inline int usb_endpoint_is_bulk_out(
767 const struct usb_endpoint_descriptor *epd)
768{
769 return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd));
770}
771
772/**
773 * usb_endpoint_is_int_in - check if the endpoint is interrupt IN
774 * @epd: endpoint to be checked
775 *
776 * Returns true if the endpoint has interrupt transfer type and IN direction,
777 * otherwise it returns false.
778 */
779static inline int usb_endpoint_is_int_in(
780 const struct usb_endpoint_descriptor *epd)
781{
782 return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd));
783}
784
785/**
786 * usb_endpoint_is_int_out - check if the endpoint is interrupt OUT
787 * @epd: endpoint to be checked
788 *
789 * Returns true if the endpoint has interrupt transfer type and OUT direction,
790 * otherwise it returns false.
791 */
792static inline int usb_endpoint_is_int_out(
793 const struct usb_endpoint_descriptor *epd)
794{
795 return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd));
796}
797
798/**
799 * usb_endpoint_is_isoc_in - check if the endpoint is isochronous IN
800 * @epd: endpoint to be checked
801 *
802 * Returns true if the endpoint has isochronous transfer type and IN direction,
803 * otherwise it returns false.
804 */
805static inline int usb_endpoint_is_isoc_in(
806 const struct usb_endpoint_descriptor *epd)
807{
808 return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd));
809}
810
811/**
812 * usb_endpoint_is_isoc_out - check if the endpoint is isochronous OUT
813 * @epd: endpoint to be checked
814 *
815 * Returns true if the endpoint has isochronous transfer type and OUT direction,
816 * otherwise it returns false.
817 */
818static inline int usb_endpoint_is_isoc_out(
819 const struct usb_endpoint_descriptor *epd)
820{
821 return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd));
822}
823
824/*-------------------------------------------------------------------------*/
825
826#define USB_DEVICE_ID_MATCH_DEVICE \ 646#define USB_DEVICE_ID_MATCH_DEVICE \
827 (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT) 647 (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT)
828#define USB_DEVICE_ID_MATCH_DEV_RANGE \ 648#define USB_DEVICE_ID_MATCH_DEV_RANGE \
@@ -1357,8 +1177,8 @@ struct urb {
1357 unsigned int transfer_flags; /* (in) URB_SHORT_NOT_OK | ...*/ 1177 unsigned int transfer_flags; /* (in) URB_SHORT_NOT_OK | ...*/
1358 void *transfer_buffer; /* (in) associated data buffer */ 1178 void *transfer_buffer; /* (in) associated data buffer */
1359 dma_addr_t transfer_dma; /* (in) dma addr for transfer_buffer */ 1179 dma_addr_t transfer_dma; /* (in) dma addr for transfer_buffer */
1360 int transfer_buffer_length; /* (in) data buffer length */ 1180 u32 transfer_buffer_length; /* (in) data buffer length */
1361 int actual_length; /* (return) actual transfer length */ 1181 u32 actual_length; /* (return) actual transfer length */
1362 unsigned char *setup_packet; /* (in) setup packet (control only) */ 1182 unsigned char *setup_packet; /* (in) setup packet (control only) */
1363 dma_addr_t setup_dma; /* (in) dma addr for setup_packet */ 1183 dma_addr_t setup_dma; /* (in) dma addr for setup_packet */
1364 int start_frame; /* (modify) start frame (ISO) */ 1184 int start_frame; /* (modify) start frame (ISO) */
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h
index 9b42baed3900..b145119a90da 100644
--- a/include/linux/usb/ch9.h
+++ b/include/linux/usb/ch9.h
@@ -102,7 +102,7 @@
102#define USB_REQ_LOOPBACK_DATA_READ 0x16 102#define USB_REQ_LOOPBACK_DATA_READ 0x16
103#define USB_REQ_SET_INTERFACE_DS 0x17 103#define USB_REQ_SET_INTERFACE_DS 0x17
104 104
105/* The Link Power Mangement (LPM) ECN defines USB_REQ_TEST_AND_SET command, 105/* The Link Power Management (LPM) ECN defines USB_REQ_TEST_AND_SET command,
106 * used by hubs to put ports into a new L1 suspend state, except that it 106 * used by hubs to put ports into a new L1 suspend state, except that it
107 * forgot to define its number ... 107 * forgot to define its number ...
108 */ 108 */
@@ -353,6 +353,185 @@ struct usb_endpoint_descriptor {
353#define USB_ENDPOINT_XFER_INT 3 353#define USB_ENDPOINT_XFER_INT 3
354#define USB_ENDPOINT_MAX_ADJUSTABLE 0x80 354#define USB_ENDPOINT_MAX_ADJUSTABLE 0x80
355 355
356/*-------------------------------------------------------------------------*/
357
358/**
359 * usb_endpoint_num - get the endpoint's number
360 * @epd: endpoint to be checked
361 *
362 * Returns @epd's number: 0 to 15.
363 */
364static inline int usb_endpoint_num(const struct usb_endpoint_descriptor *epd)
365{
366 return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
367}
368
369/**
370 * usb_endpoint_type - get the endpoint's transfer type
371 * @epd: endpoint to be checked
372 *
373 * Returns one of USB_ENDPOINT_XFER_{CONTROL, ISOC, BULK, INT} according
374 * to @epd's transfer type.
375 */
376static inline int usb_endpoint_type(const struct usb_endpoint_descriptor *epd)
377{
378 return epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
379}
380
381/**
382 * usb_endpoint_dir_in - check if the endpoint has IN direction
383 * @epd: endpoint to be checked
384 *
385 * Returns true if the endpoint is of type IN, otherwise it returns false.
386 */
387static inline int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
388{
389 return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN);
390}
391
392/**
393 * usb_endpoint_dir_out - check if the endpoint has OUT direction
394 * @epd: endpoint to be checked
395 *
396 * Returns true if the endpoint is of type OUT, otherwise it returns false.
397 */
398static inline int usb_endpoint_dir_out(
399 const struct usb_endpoint_descriptor *epd)
400{
401 return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT);
402}
403
404/**
405 * usb_endpoint_xfer_bulk - check if the endpoint has bulk transfer type
406 * @epd: endpoint to be checked
407 *
408 * Returns true if the endpoint is of type bulk, otherwise it returns false.
409 */
410static inline int usb_endpoint_xfer_bulk(
411 const struct usb_endpoint_descriptor *epd)
412{
413 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
414 USB_ENDPOINT_XFER_BULK);
415}
416
417/**
418 * usb_endpoint_xfer_control - check if the endpoint has control transfer type
419 * @epd: endpoint to be checked
420 *
421 * Returns true if the endpoint is of type control, otherwise it returns false.
422 */
423static inline int usb_endpoint_xfer_control(
424 const struct usb_endpoint_descriptor *epd)
425{
426 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
427 USB_ENDPOINT_XFER_CONTROL);
428}
429
430/**
431 * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type
432 * @epd: endpoint to be checked
433 *
434 * Returns true if the endpoint is of type interrupt, otherwise it returns
435 * false.
436 */
437static inline int usb_endpoint_xfer_int(
438 const struct usb_endpoint_descriptor *epd)
439{
440 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
441 USB_ENDPOINT_XFER_INT);
442}
443
444/**
445 * usb_endpoint_xfer_isoc - check if the endpoint has isochronous transfer type
446 * @epd: endpoint to be checked
447 *
448 * Returns true if the endpoint is of type isochronous, otherwise it returns
449 * false.
450 */
451static inline int usb_endpoint_xfer_isoc(
452 const struct usb_endpoint_descriptor *epd)
453{
454 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
455 USB_ENDPOINT_XFER_ISOC);
456}
457
458/**
459 * usb_endpoint_is_bulk_in - check if the endpoint is bulk IN
460 * @epd: endpoint to be checked
461 *
462 * Returns true if the endpoint has bulk transfer type and IN direction,
463 * otherwise it returns false.
464 */
465static inline int usb_endpoint_is_bulk_in(
466 const struct usb_endpoint_descriptor *epd)
467{
468 return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd));
469}
470
471/**
472 * usb_endpoint_is_bulk_out - check if the endpoint is bulk OUT
473 * @epd: endpoint to be checked
474 *
475 * Returns true if the endpoint has bulk transfer type and OUT direction,
476 * otherwise it returns false.
477 */
478static inline int usb_endpoint_is_bulk_out(
479 const struct usb_endpoint_descriptor *epd)
480{
481 return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd));
482}
483
484/**
485 * usb_endpoint_is_int_in - check if the endpoint is interrupt IN
486 * @epd: endpoint to be checked
487 *
488 * Returns true if the endpoint has interrupt transfer type and IN direction,
489 * otherwise it returns false.
490 */
491static inline int usb_endpoint_is_int_in(
492 const struct usb_endpoint_descriptor *epd)
493{
494 return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd));
495}
496
497/**
498 * usb_endpoint_is_int_out - check if the endpoint is interrupt OUT
499 * @epd: endpoint to be checked
500 *
501 * Returns true if the endpoint has interrupt transfer type and OUT direction,
502 * otherwise it returns false.
503 */
504static inline int usb_endpoint_is_int_out(
505 const struct usb_endpoint_descriptor *epd)
506{
507 return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd));
508}
509
510/**
511 * usb_endpoint_is_isoc_in - check if the endpoint is isochronous IN
512 * @epd: endpoint to be checked
513 *
514 * Returns true if the endpoint has isochronous transfer type and IN direction,
515 * otherwise it returns false.
516 */
517static inline int usb_endpoint_is_isoc_in(
518 const struct usb_endpoint_descriptor *epd)
519{
520 return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd));
521}
522
523/**
524 * usb_endpoint_is_isoc_out - check if the endpoint is isochronous OUT
525 * @epd: endpoint to be checked
526 *
527 * Returns true if the endpoint has isochronous transfer type and OUT direction,
528 * otherwise it returns false.
529 */
530static inline int usb_endpoint_is_isoc_out(
531 const struct usb_endpoint_descriptor *epd)
532{
533 return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd));
534}
356 535
357/*-------------------------------------------------------------------------*/ 536/*-------------------------------------------------------------------------*/
358 537
@@ -584,8 +763,8 @@ enum usb_device_state {
584 /* chapter 9 and authentication (wireless) device states */ 763 /* chapter 9 and authentication (wireless) device states */
585 USB_STATE_ATTACHED, 764 USB_STATE_ATTACHED,
586 USB_STATE_POWERED, /* wired */ 765 USB_STATE_POWERED, /* wired */
587 USB_STATE_UNAUTHENTICATED, /* auth */
588 USB_STATE_RECONNECTING, /* auth */ 766 USB_STATE_RECONNECTING, /* auth */
767 USB_STATE_UNAUTHENTICATED, /* auth */
589 USB_STATE_DEFAULT, /* limited function */ 768 USB_STATE_DEFAULT, /* limited function */
590 USB_STATE_ADDRESS, 769 USB_STATE_ADDRESS,
591 USB_STATE_CONFIGURED, /* most functions */ 770 USB_STATE_CONFIGURED, /* most functions */
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
index 935c380ffe47..acd7b0f06c8a 100644
--- a/include/linux/usb/composite.h
+++ b/include/linux/usb/composite.h
@@ -244,6 +244,10 @@ int usb_add_config(struct usb_composite_dev *,
244 * value; it should return zero on successful initialization. 244 * value; it should return zero on successful initialization.
245 * @unbind: Reverses @bind(); called as a side effect of unregistering 245 * @unbind: Reverses @bind(); called as a side effect of unregistering
246 * this driver. 246 * this driver.
247 * @suspend: Notifies when the host stops sending USB traffic,
248 * after function notifications
249 * @resume: Notifies configuration when the host restarts USB traffic,
250 * before function notifications
247 * 251 *
248 * Devices default to reporting self powered operation. Devices which rely 252 * Devices default to reporting self powered operation. Devices which rely
249 * on bus powered operation should report this in their @bind() method. 253 * on bus powered operation should report this in their @bind() method.
@@ -268,6 +272,10 @@ struct usb_composite_driver {
268 272
269 int (*bind)(struct usb_composite_dev *); 273 int (*bind)(struct usb_composite_dev *);
270 int (*unbind)(struct usb_composite_dev *); 274 int (*unbind)(struct usb_composite_dev *);
275
276 /* global suspend hooks */
277 void (*suspend)(struct usb_composite_dev *);
278 void (*resume)(struct usb_composite_dev *);
271}; 279};
272 280
273extern int usb_composite_register(struct usb_composite_driver *); 281extern int usb_composite_register(struct usb_composite_driver *);
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 0460a746480c..bbf45d500b6d 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -598,6 +598,7 @@ static inline int usb_gadget_clear_selfpowered(struct usb_gadget *gadget)
598/** 598/**
599 * usb_gadget_vbus_connect - Notify controller that VBUS is powered 599 * usb_gadget_vbus_connect - Notify controller that VBUS is powered
600 * @gadget:The device which now has VBUS power. 600 * @gadget:The device which now has VBUS power.
601 * Context: can sleep
601 * 602 *
602 * This call is used by a driver for an external transceiver (or GPIO) 603 * This call is used by a driver for an external transceiver (or GPIO)
603 * that detects a VBUS power session starting. Common responses include 604 * that detects a VBUS power session starting. Common responses include
@@ -636,6 +637,7 @@ static inline int usb_gadget_vbus_draw(struct usb_gadget *gadget, unsigned mA)
636/** 637/**
637 * usb_gadget_vbus_disconnect - notify controller about VBUS session end 638 * usb_gadget_vbus_disconnect - notify controller about VBUS session end
638 * @gadget:the device whose VBUS supply is being described 639 * @gadget:the device whose VBUS supply is being described
640 * Context: can sleep
639 * 641 *
640 * This call is used by a driver for an external transceiver (or GPIO) 642 * This call is used by a driver for an external transceiver (or GPIO)
641 * that detects a VBUS power session ending. Common responses include 643 * that detects a VBUS power session ending. Common responses include
@@ -792,19 +794,20 @@ struct usb_gadget_driver {
792/** 794/**
793 * usb_gadget_register_driver - register a gadget driver 795 * usb_gadget_register_driver - register a gadget driver
794 * @driver:the driver being registered 796 * @driver:the driver being registered
797 * Context: can sleep
795 * 798 *
796 * Call this in your gadget driver's module initialization function, 799 * Call this in your gadget driver's module initialization function,
797 * to tell the underlying usb controller driver about your driver. 800 * to tell the underlying usb controller driver about your driver.
798 * The driver's bind() function will be called to bind it to a 801 * The driver's bind() function will be called to bind it to a
799 * gadget before this registration call returns. It's expected that 802 * gadget before this registration call returns. It's expected that
800 * the bind() functions will be in init sections. 803 * the bind() functions will be in init sections.
801 * This function must be called in a context that can sleep.
802 */ 804 */
803int usb_gadget_register_driver(struct usb_gadget_driver *driver); 805int usb_gadget_register_driver(struct usb_gadget_driver *driver);
804 806
805/** 807/**
806 * usb_gadget_unregister_driver - unregister a gadget driver 808 * usb_gadget_unregister_driver - unregister a gadget driver
807 * @driver:the driver being unregistered 809 * @driver:the driver being unregistered
810 * Context: can sleep
808 * 811 *
809 * Call this in your gadget driver's module cleanup function, 812 * Call this in your gadget driver's module cleanup function,
810 * to tell the underlying usb controller that your driver is 813 * to tell the underlying usb controller that your driver is
@@ -813,7 +816,6 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver);
813 * to unbind() and clean up any device state, before this procedure 816 * to unbind() and clean up any device state, before this procedure
814 * finally returns. It's expected that the unbind() functions 817 * finally returns. It's expected that the unbind() functions
815 * will in in exit sections, so may not be linked in some kernels. 818 * will in in exit sections, so may not be linked in some kernels.
816 * This function must be called in a context that can sleep.
817 */ 819 */
818int usb_gadget_unregister_driver(struct usb_gadget_driver *driver); 820int usb_gadget_unregister_driver(struct usb_gadget_driver *driver);
819 821
diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
index 94df4fe6c6c0..1aaa826396a1 100644
--- a/include/linux/usb/otg.h
+++ b/include/linux/usb/otg.h
@@ -80,12 +80,17 @@ struct otg_transceiver {
80 80
81/* for board-specific init logic */ 81/* for board-specific init logic */
82extern int otg_set_transceiver(struct otg_transceiver *); 82extern int otg_set_transceiver(struct otg_transceiver *);
83#ifdef CONFIG_NOP_USB_XCEIV
84extern void usb_nop_xceiv_register(void);
85extern void usb_nop_xceiv_unregister(void);
86#endif
83 87
84 88
85/* for usb host and peripheral controller drivers */ 89/* for usb host and peripheral controller drivers */
86extern struct otg_transceiver *otg_get_transceiver(void); 90extern struct otg_transceiver *otg_get_transceiver(void);
87extern void otg_put_transceiver(struct otg_transceiver *); 91extern void otg_put_transceiver(struct otg_transceiver *);
88 92
93/* Context: can sleep */
89static inline int 94static inline int
90otg_start_hnp(struct otg_transceiver *otg) 95otg_start_hnp(struct otg_transceiver *otg)
91{ 96{
@@ -102,6 +107,8 @@ otg_set_host(struct otg_transceiver *otg, struct usb_bus *host)
102 107
103 108
104/* for usb peripheral controller drivers */ 109/* for usb peripheral controller drivers */
110
111/* Context: can sleep */
105static inline int 112static inline int
106otg_set_peripheral(struct otg_transceiver *otg, struct usb_gadget *periph) 113otg_set_peripheral(struct otg_transceiver *otg, struct usb_gadget *periph)
107{ 114{
@@ -114,6 +121,7 @@ otg_set_power(struct otg_transceiver *otg, unsigned mA)
114 return otg->set_power(otg, mA); 121 return otg->set_power(otg, mA);
115} 122}
116 123
124/* Context: can sleep */
117static inline int 125static inline int
118otg_set_suspend(struct otg_transceiver *otg, int suspend) 126otg_set_suspend(struct otg_transceiver *otg, int suspend)
119{ 127{
diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h
index 7f6c603db654..2526f3bbd273 100644
--- a/include/linux/usb/quirks.h
+++ b/include/linux/usb/quirks.h
@@ -16,4 +16,7 @@
16/* device can't handle Set-Interface requests */ 16/* device can't handle Set-Interface requests */
17#define USB_QUIRK_NO_SET_INTF 0x00000004 17#define USB_QUIRK_NO_SET_INTF 0x00000004
18 18
19/* device can't handle its Configuration or Interface strings */
20#define USB_QUIRK_CONFIG_INTF_STRINGS 0x00000008
21
19#endif /* __LINUX_USB_QUIRKS_H */ 22#endif /* __LINUX_USB_QUIRKS_H */
diff --git a/include/linux/usb/rndis_host.h b/include/linux/usb/rndis_host.h
index 0a6e6d4b929a..37836b937d97 100644
--- a/include/linux/usb/rndis_host.h
+++ b/include/linux/usb/rndis_host.h
@@ -49,48 +49,45 @@ struct rndis_msg_hdr {
49 */ 49 */
50#define RNDIS_CONTROL_TIMEOUT_MS (5 * 1000) 50#define RNDIS_CONTROL_TIMEOUT_MS (5 * 1000)
51 51
52 52#define RNDIS_MSG_COMPLETION cpu_to_le32(0x80000000)
53#define ccpu2 __constant_cpu_to_le32
54
55#define RNDIS_MSG_COMPLETION ccpu2(0x80000000)
56 53
57/* codes for "msg_type" field of rndis messages; 54/* codes for "msg_type" field of rndis messages;
58 * only the data channel uses packet messages (maybe batched); 55 * only the data channel uses packet messages (maybe batched);
59 * everything else goes on the control channel. 56 * everything else goes on the control channel.
60 */ 57 */
61#define RNDIS_MSG_PACKET ccpu2(0x00000001) /* 1-N packets */ 58#define RNDIS_MSG_PACKET cpu_to_le32(0x00000001) /* 1-N packets */
62#define RNDIS_MSG_INIT ccpu2(0x00000002) 59#define RNDIS_MSG_INIT cpu_to_le32(0x00000002)
63#define RNDIS_MSG_INIT_C (RNDIS_MSG_INIT|RNDIS_MSG_COMPLETION) 60#define RNDIS_MSG_INIT_C (RNDIS_MSG_INIT|RNDIS_MSG_COMPLETION)
64#define RNDIS_MSG_HALT ccpu2(0x00000003) 61#define RNDIS_MSG_HALT cpu_to_le32(0x00000003)
65#define RNDIS_MSG_QUERY ccpu2(0x00000004) 62#define RNDIS_MSG_QUERY cpu_to_le32(0x00000004)
66#define RNDIS_MSG_QUERY_C (RNDIS_MSG_QUERY|RNDIS_MSG_COMPLETION) 63#define RNDIS_MSG_QUERY_C (RNDIS_MSG_QUERY|RNDIS_MSG_COMPLETION)
67#define RNDIS_MSG_SET ccpu2(0x00000005) 64#define RNDIS_MSG_SET cpu_to_le32(0x00000005)
68#define RNDIS_MSG_SET_C (RNDIS_MSG_SET|RNDIS_MSG_COMPLETION) 65#define RNDIS_MSG_SET_C (RNDIS_MSG_SET|RNDIS_MSG_COMPLETION)
69#define RNDIS_MSG_RESET ccpu2(0x00000006) 66#define RNDIS_MSG_RESET cpu_to_le32(0x00000006)
70#define RNDIS_MSG_RESET_C (RNDIS_MSG_RESET|RNDIS_MSG_COMPLETION) 67#define RNDIS_MSG_RESET_C (RNDIS_MSG_RESET|RNDIS_MSG_COMPLETION)
71#define RNDIS_MSG_INDICATE ccpu2(0x00000007) 68#define RNDIS_MSG_INDICATE cpu_to_le32(0x00000007)
72#define RNDIS_MSG_KEEPALIVE ccpu2(0x00000008) 69#define RNDIS_MSG_KEEPALIVE cpu_to_le32(0x00000008)
73#define RNDIS_MSG_KEEPALIVE_C (RNDIS_MSG_KEEPALIVE|RNDIS_MSG_COMPLETION) 70#define RNDIS_MSG_KEEPALIVE_C (RNDIS_MSG_KEEPALIVE|RNDIS_MSG_COMPLETION)
74 71
75/* codes for "status" field of completion messages */ 72/* codes for "status" field of completion messages */
76#define RNDIS_STATUS_SUCCESS ccpu2(0x00000000) 73#define RNDIS_STATUS_SUCCESS cpu_to_le32(0x00000000)
77#define RNDIS_STATUS_FAILURE ccpu2(0xc0000001) 74#define RNDIS_STATUS_FAILURE cpu_to_le32(0xc0000001)
78#define RNDIS_STATUS_INVALID_DATA ccpu2(0xc0010015) 75#define RNDIS_STATUS_INVALID_DATA cpu_to_le32(0xc0010015)
79#define RNDIS_STATUS_NOT_SUPPORTED ccpu2(0xc00000bb) 76#define RNDIS_STATUS_NOT_SUPPORTED cpu_to_le32(0xc00000bb)
80#define RNDIS_STATUS_MEDIA_CONNECT ccpu2(0x4001000b) 77#define RNDIS_STATUS_MEDIA_CONNECT cpu_to_le32(0x4001000b)
81#define RNDIS_STATUS_MEDIA_DISCONNECT ccpu2(0x4001000c) 78#define RNDIS_STATUS_MEDIA_DISCONNECT cpu_to_le32(0x4001000c)
82 79
83/* codes for OID_GEN_PHYSICAL_MEDIUM */ 80/* codes for OID_GEN_PHYSICAL_MEDIUM */
84#define RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED ccpu2(0x00000000) 81#define RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED cpu_to_le32(0x00000000)
85#define RNDIS_PHYSICAL_MEDIUM_WIRELESS_LAN ccpu2(0x00000001) 82#define RNDIS_PHYSICAL_MEDIUM_WIRELESS_LAN cpu_to_le32(0x00000001)
86#define RNDIS_PHYSICAL_MEDIUM_CABLE_MODEM ccpu2(0x00000002) 83#define RNDIS_PHYSICAL_MEDIUM_CABLE_MODEM cpu_to_le32(0x00000002)
87#define RNDIS_PHYSICAL_MEDIUM_PHONE_LINE ccpu2(0x00000003) 84#define RNDIS_PHYSICAL_MEDIUM_PHONE_LINE cpu_to_le32(0x00000003)
88#define RNDIS_PHYSICAL_MEDIUM_POWER_LINE ccpu2(0x00000004) 85#define RNDIS_PHYSICAL_MEDIUM_POWER_LINE cpu_to_le32(0x00000004)
89#define RNDIS_PHYSICAL_MEDIUM_DSL ccpu2(0x00000005) 86#define RNDIS_PHYSICAL_MEDIUM_DSL cpu_to_le32(0x00000005)
90#define RNDIS_PHYSICAL_MEDIUM_FIBRE_CHANNEL ccpu2(0x00000006) 87#define RNDIS_PHYSICAL_MEDIUM_FIBRE_CHANNEL cpu_to_le32(0x00000006)
91#define RNDIS_PHYSICAL_MEDIUM_1394 ccpu2(0x00000007) 88#define RNDIS_PHYSICAL_MEDIUM_1394 cpu_to_le32(0x00000007)
92#define RNDIS_PHYSICAL_MEDIUM_WIRELESS_WAN ccpu2(0x00000008) 89#define RNDIS_PHYSICAL_MEDIUM_WIRELESS_WAN cpu_to_le32(0x00000008)
93#define RNDIS_PHYSICAL_MEDIUM_MAX ccpu2(0x00000009) 90#define RNDIS_PHYSICAL_MEDIUM_MAX cpu_to_le32(0x00000009)
94 91
95struct rndis_data_hdr { 92struct rndis_data_hdr {
96 __le32 msg_type; /* RNDIS_MSG_PACKET */ 93 __le32 msg_type; /* RNDIS_MSG_PACKET */
@@ -228,24 +225,24 @@ struct rndis_keepalive_c { /* IN (optionally OUT) */
228 * there are gobs more that may optionally be supported. We'll avoid as much 225 * there are gobs more that may optionally be supported. We'll avoid as much
229 * of that mess as possible. 226 * of that mess as possible.
230 */ 227 */
231#define OID_802_3_PERMANENT_ADDRESS ccpu2(0x01010101) 228#define OID_802_3_PERMANENT_ADDRESS cpu_to_le32(0x01010101)
232#define OID_GEN_MAXIMUM_FRAME_SIZE ccpu2(0x00010106) 229#define OID_GEN_MAXIMUM_FRAME_SIZE cpu_to_le32(0x00010106)
233#define OID_GEN_CURRENT_PACKET_FILTER ccpu2(0x0001010e) 230#define OID_GEN_CURRENT_PACKET_FILTER cpu_to_le32(0x0001010e)
234#define OID_GEN_PHYSICAL_MEDIUM ccpu2(0x00010202) 231#define OID_GEN_PHYSICAL_MEDIUM cpu_to_le32(0x00010202)
235 232
236/* packet filter bits used by OID_GEN_CURRENT_PACKET_FILTER */ 233/* packet filter bits used by OID_GEN_CURRENT_PACKET_FILTER */
237#define RNDIS_PACKET_TYPE_DIRECTED ccpu2(0x00000001) 234#define RNDIS_PACKET_TYPE_DIRECTED cpu_to_le32(0x00000001)
238#define RNDIS_PACKET_TYPE_MULTICAST ccpu2(0x00000002) 235#define RNDIS_PACKET_TYPE_MULTICAST cpu_to_le32(0x00000002)
239#define RNDIS_PACKET_TYPE_ALL_MULTICAST ccpu2(0x00000004) 236#define RNDIS_PACKET_TYPE_ALL_MULTICAST cpu_to_le32(0x00000004)
240#define RNDIS_PACKET_TYPE_BROADCAST ccpu2(0x00000008) 237#define RNDIS_PACKET_TYPE_BROADCAST cpu_to_le32(0x00000008)
241#define RNDIS_PACKET_TYPE_SOURCE_ROUTING ccpu2(0x00000010) 238#define RNDIS_PACKET_TYPE_SOURCE_ROUTING cpu_to_le32(0x00000010)
242#define RNDIS_PACKET_TYPE_PROMISCUOUS ccpu2(0x00000020) 239#define RNDIS_PACKET_TYPE_PROMISCUOUS cpu_to_le32(0x00000020)
243#define RNDIS_PACKET_TYPE_SMT ccpu2(0x00000040) 240#define RNDIS_PACKET_TYPE_SMT cpu_to_le32(0x00000040)
244#define RNDIS_PACKET_TYPE_ALL_LOCAL ccpu2(0x00000080) 241#define RNDIS_PACKET_TYPE_ALL_LOCAL cpu_to_le32(0x00000080)
245#define RNDIS_PACKET_TYPE_GROUP ccpu2(0x00001000) 242#define RNDIS_PACKET_TYPE_GROUP cpu_to_le32(0x00001000)
246#define RNDIS_PACKET_TYPE_ALL_FUNCTIONAL ccpu2(0x00002000) 243#define RNDIS_PACKET_TYPE_ALL_FUNCTIONAL cpu_to_le32(0x00002000)
247#define RNDIS_PACKET_TYPE_FUNCTIONAL ccpu2(0x00004000) 244#define RNDIS_PACKET_TYPE_FUNCTIONAL cpu_to_le32(0x00004000)
248#define RNDIS_PACKET_TYPE_MAC_FRAME ccpu2(0x00008000) 245#define RNDIS_PACKET_TYPE_MAC_FRAME cpu_to_le32(0x00008000)
249 246
250/* default filter used with RNDIS devices */ 247/* default filter used with RNDIS devices */
251#define RNDIS_DEFAULT_FILTER ( \ 248#define RNDIS_DEFAULT_FILTER ( \
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h
index 0b8617a9176d..b95842542590 100644
--- a/include/linux/usb/serial.h
+++ b/include/linux/usb/serial.h
@@ -130,7 +130,8 @@ struct usb_serial {
130 struct usb_device *dev; 130 struct usb_device *dev;
131 struct usb_serial_driver *type; 131 struct usb_serial_driver *type;
132 struct usb_interface *interface; 132 struct usb_interface *interface;
133 unsigned char disconnected; 133 unsigned char disconnected:1;
134 unsigned char suspending:1;
134 unsigned char minor; 135 unsigned char minor;
135 unsigned char num_ports; 136 unsigned char num_ports;
136 unsigned char num_port_pointers; 137 unsigned char num_port_pointers;
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
index 7d3822243074..36fabb95c7d3 100644
--- a/include/linux/usb/usbnet.h
+++ b/include/linux/usb/usbnet.h
@@ -176,6 +176,11 @@ struct skb_data { /* skb->cb is one of these */
176 size_t length; 176 size_t length;
177}; 177};
178 178
179extern int usbnet_open (struct net_device *net);
180extern int usbnet_stop (struct net_device *net);
181extern int usbnet_start_xmit (struct sk_buff *skb, struct net_device *net);
182extern void usbnet_tx_timeout (struct net_device *net);
183extern int usbnet_change_mtu (struct net_device *net, int new_mtu);
179 184
180extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); 185extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *);
181extern void usbnet_defer_kevent (struct usbnet *, int); 186extern void usbnet_defer_kevent (struct usbnet *, int);
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h
index 1eea1ab68dc4..3d15fb9bc116 100644
--- a/include/linux/usb_usual.h
+++ b/include/linux/usb_usual.h
@@ -96,39 +96,26 @@ enum { US_DO_ALL_FLAGS };
96#define US_PR_CBI 0x00 /* Control/Bulk/Interrupt */ 96#define US_PR_CBI 0x00 /* Control/Bulk/Interrupt */
97#define US_PR_CB 0x01 /* Control/Bulk w/o interrupt */ 97#define US_PR_CB 0x01 /* Control/Bulk w/o interrupt */
98#define US_PR_BULK 0x50 /* bulk only */ 98#define US_PR_BULK 0x50 /* bulk only */
99#ifdef CONFIG_USB_STORAGE_USBAT 99
100#define US_PR_USBAT 0x80 /* SCM-ATAPI bridge */ 100#define US_PR_USBAT 0x80 /* SCM-ATAPI bridge */
101#endif
102#ifdef CONFIG_USB_STORAGE_SDDR09
103#define US_PR_EUSB_SDDR09 0x81 /* SCM-SCSI bridge for SDDR-09 */ 101#define US_PR_EUSB_SDDR09 0x81 /* SCM-SCSI bridge for SDDR-09 */
104#endif
105#ifdef CONFIG_USB_STORAGE_SDDR55
106#define US_PR_SDDR55 0x82 /* SDDR-55 (made up) */ 102#define US_PR_SDDR55 0x82 /* SDDR-55 (made up) */
107#endif
108#define US_PR_DPCM_USB 0xf0 /* Combination CB/SDDR09 */ 103#define US_PR_DPCM_USB 0xf0 /* Combination CB/SDDR09 */
109#ifdef CONFIG_USB_STORAGE_FREECOM
110#define US_PR_FREECOM 0xf1 /* Freecom */ 104#define US_PR_FREECOM 0xf1 /* Freecom */
111#endif
112#ifdef CONFIG_USB_STORAGE_DATAFAB
113#define US_PR_DATAFAB 0xf2 /* Datafab chipsets */ 105#define US_PR_DATAFAB 0xf2 /* Datafab chipsets */
114#endif
115#ifdef CONFIG_USB_STORAGE_JUMPSHOT
116#define US_PR_JUMPSHOT 0xf3 /* Lexar Jumpshot */ 106#define US_PR_JUMPSHOT 0xf3 /* Lexar Jumpshot */
117#endif
118#ifdef CONFIG_USB_STORAGE_ALAUDA
119#define US_PR_ALAUDA 0xf4 /* Alauda chipsets */ 107#define US_PR_ALAUDA 0xf4 /* Alauda chipsets */
120#endif
121#ifdef CONFIG_USB_STORAGE_KARMA
122#define US_PR_KARMA 0xf5 /* Rio Karma */ 108#define US_PR_KARMA 0xf5 /* Rio Karma */
123#endif
124 109
125#define US_PR_DEVICE 0xff /* Use device's value */ 110#define US_PR_DEVICE 0xff /* Use device's value */
126 111
127/* 112/*
128 */ 113 */
114extern int usb_usual_ignore_device(struct usb_interface *intf);
115extern struct usb_device_id usb_storage_usb_ids[];
116
129#ifdef CONFIG_USB_LIBUSUAL 117#ifdef CONFIG_USB_LIBUSUAL
130 118
131extern struct usb_device_id storage_usb_ids[];
132extern void usb_usual_set_present(int type); 119extern void usb_usual_set_present(int type);
133extern void usb_usual_clear_present(int type); 120extern void usb_usual_clear_present(int type);
134extern int usb_usual_check_type(const struct usb_device_id *, int type); 121extern int usb_usual_check_type(const struct usb_device_id *, int type);
diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h
index 3efa86c3ecb3..242348bb3766 100644
--- a/include/linux/virtio_net.h
+++ b/include/linux/virtio_net.h
@@ -22,11 +22,19 @@
22#define VIRTIO_NET_F_HOST_ECN 13 /* Host can handle TSO[6] w/ ECN in. */ 22#define VIRTIO_NET_F_HOST_ECN 13 /* Host can handle TSO[6] w/ ECN in. */
23#define VIRTIO_NET_F_HOST_UFO 14 /* Host can handle UFO in. */ 23#define VIRTIO_NET_F_HOST_UFO 14 /* Host can handle UFO in. */
24#define VIRTIO_NET_F_MRG_RXBUF 15 /* Host can merge receive buffers. */ 24#define VIRTIO_NET_F_MRG_RXBUF 15 /* Host can merge receive buffers. */
25#define VIRTIO_NET_F_STATUS 16 /* virtio_net_config.status available */
26#define VIRTIO_NET_F_CTRL_VQ 17 /* Control channel available */
27#define VIRTIO_NET_F_CTRL_RX 18 /* Control channel RX mode support */
28#define VIRTIO_NET_F_CTRL_VLAN 19 /* Control channel VLAN filtering */
29
30#define VIRTIO_NET_S_LINK_UP 1 /* Link is up */
25 31
26struct virtio_net_config 32struct virtio_net_config
27{ 33{
28 /* The config defining mac address (if VIRTIO_NET_F_MAC) */ 34 /* The config defining mac address (if VIRTIO_NET_F_MAC) */
29 __u8 mac[6]; 35 __u8 mac[6];
36 /* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */
37 __u16 status;
30} __attribute__((packed)); 38} __attribute__((packed));
31 39
32/* This is the first element of the scatter-gather list. If you don't 40/* This is the first element of the scatter-gather list. If you don't
@@ -54,4 +62,67 @@ struct virtio_net_hdr_mrg_rxbuf {
54 __u16 num_buffers; /* Number of merged rx buffers */ 62 __u16 num_buffers; /* Number of merged rx buffers */
55}; 63};
56 64
65/*
66 * Control virtqueue data structures
67 *
68 * The control virtqueue expects a header in the first sg entry
69 * and an ack/status response in the last entry. Data for the
70 * command goes in between.
71 */
72struct virtio_net_ctrl_hdr {
73 __u8 class;
74 __u8 cmd;
75} __attribute__((packed));
76
77typedef __u8 virtio_net_ctrl_ack;
78
79#define VIRTIO_NET_OK 0
80#define VIRTIO_NET_ERR 1
81
82/*
83 * Control the RX mode, ie. promisucous and allmulti. PROMISC and
84 * ALLMULTI commands require an "out" sg entry containing a 1 byte
85 * state value, zero = disable, non-zero = enable. These commands
86 * are supported with the VIRTIO_NET_F_CTRL_RX feature.
87 */
88#define VIRTIO_NET_CTRL_RX 0
89 #define VIRTIO_NET_CTRL_RX_PROMISC 0
90 #define VIRTIO_NET_CTRL_RX_ALLMULTI 1
91
92/*
93 * Control the MAC filter table.
94 *
95 * The MAC filter table is managed by the hypervisor, the guest should
96 * assume the size is infinite. Filtering should be considered
97 * non-perfect, ie. based on hypervisor resources, the guest may
98 * received packets from sources not specified in the filter list.
99 *
100 * In addition to the class/cmd header, the TABLE_SET command requires
101 * two out scatterlists. Each contains a 4 byte count of entries followed
102 * by a concatenated byte stream of the ETH_ALEN MAC addresses. The
103 * first sg list contains unicast addresses, the second is for multicast.
104 * This functionality is present if the VIRTIO_NET_F_CTRL_RX feature
105 * is available.
106 */
107struct virtio_net_ctrl_mac {
108 __u32 entries;
109 __u8 macs[][ETH_ALEN];
110} __attribute__((packed));
111
112#define VIRTIO_NET_CTRL_MAC 1
113 #define VIRTIO_NET_CTRL_MAC_TABLE_SET 0
114
115/*
116 * Control VLAN filtering
117 *
118 * The VLAN filter table is controlled via a simple ADD/DEL interface.
119 * VLAN IDs not added may be filterd by the hypervisor. Del is the
120 * opposite of add. Both commands expect an out entry containing a 2
121 * byte VLAN ID. VLAN filterting is available with the
122 * VIRTIO_NET_F_CTRL_VLAN feature bit.
123 */
124#define VIRTIO_NET_CTRL_VLAN 2
125 #define VIRTIO_NET_CTRL_VLAN_ADD 0
126 #define VIRTIO_NET_CTRL_VLAN_DEL 1
127
57#endif /* _LINUX_VIRTIO_NET_H */ 128#endif /* _LINUX_VIRTIO_NET_H */
diff --git a/include/linux/wimax/debug.h b/include/linux/wimax/debug.h
index ba0c49399a83..c703e0340423 100644
--- a/include/linux/wimax/debug.h
+++ b/include/linux/wimax/debug.h
@@ -178,7 +178,7 @@ void __d_head(char *head, size_t head_size,
178 WARN_ON(1); 178 WARN_ON(1);
179 } else 179 } else
180 snprintf(head, head_size, "%s %s: ", 180 snprintf(head, head_size, "%s %s: ",
181 dev_driver_string(dev), dev->bus_id); 181 dev_driver_string(dev), dev_name(dev));
182} 182}
183 183
184 184
diff --git a/include/linux/wimax/i2400m.h b/include/linux/wimax/i2400m.h
index 74198f5bb4dc..d5148a7889a6 100644
--- a/include/linux/wimax/i2400m.h
+++ b/include/linux/wimax/i2400m.h
@@ -207,6 +207,7 @@ enum i2400m_pt {
207 I2400M_PT_TRACE, /* For device debug */ 207 I2400M_PT_TRACE, /* For device debug */
208 I2400M_PT_RESET_WARM, /* device reset */ 208 I2400M_PT_RESET_WARM, /* device reset */
209 I2400M_PT_RESET_COLD, /* USB[transport] reset, like reconnect */ 209 I2400M_PT_RESET_COLD, /* USB[transport] reset, like reconnect */
210 I2400M_PT_EDATA, /* Extended RX data */
210 I2400M_PT_ILLEGAL 211 I2400M_PT_ILLEGAL
211}; 212};
212 213
@@ -221,6 +222,48 @@ struct i2400m_pl_data_hdr {
221} __attribute__((packed)); 222} __attribute__((packed));
222 223
223 224
225/*
226 * Payload for an extended data packet
227 *
228 * New in fw v1.4
229 *
230 * @reorder: if this payload has to be reorder or not (and how)
231 * @cs: the type of data in the packet, as defined per (802.16e
232 * T11.13.19.1). Currently only 2 (IPv4 packet) supported.
233 *
234 * This is prefixed to each and every INCOMING DATA packet.
235 */
236struct i2400m_pl_edata_hdr {
237 __le32 reorder; /* bits defined in i2400m_ro */
238 __u8 cs;
239 __u8 reserved[11];
240} __attribute__((packed));
241
242enum i2400m_cs {
243 I2400M_CS_IPV4_0 = 0,
244 I2400M_CS_IPV4 = 2,
245};
246
247enum i2400m_ro {
248 I2400M_RO_NEEDED = 0x01,
249 I2400M_RO_TYPE = 0x03,
250 I2400M_RO_TYPE_SHIFT = 1,
251 I2400M_RO_CIN = 0x0f,
252 I2400M_RO_CIN_SHIFT = 4,
253 I2400M_RO_FBN = 0x07ff,
254 I2400M_RO_FBN_SHIFT = 8,
255 I2400M_RO_SN = 0x07ff,
256 I2400M_RO_SN_SHIFT = 21,
257};
258
259enum i2400m_ro_type {
260 I2400M_RO_TYPE_RESET = 0,
261 I2400M_RO_TYPE_PACKET,
262 I2400M_RO_TYPE_WS,
263 I2400M_RO_TYPE_PACKET_WS,
264};
265
266
224/* Misc constants */ 267/* Misc constants */
225enum { 268enum {
226 I2400M_PL_PAD = 16, /* Payload data size alignment */ 269 I2400M_PL_PAD = 16, /* Payload data size alignment */
@@ -381,6 +424,9 @@ enum i2400m_tlv {
381 I2400M_TLV_RF_STATUS = 163, 424 I2400M_TLV_RF_STATUS = 163,
382 I2400M_TLV_DEVICE_RESET_TYPE = 132, 425 I2400M_TLV_DEVICE_RESET_TYPE = 132,
383 I2400M_TLV_CONFIG_IDLE_PARAMETERS = 601, 426 I2400M_TLV_CONFIG_IDLE_PARAMETERS = 601,
427 I2400M_TLV_CONFIG_IDLE_TIMEOUT = 611,
428 I2400M_TLV_CONFIG_D2H_DATA_FORMAT = 614,
429 I2400M_TLV_CONFIG_DL_HOST_REORDER = 615,
384}; 430};
385 431
386 432
@@ -509,4 +555,27 @@ struct i2400m_tlv_media_status {
509 __le32 media_status; 555 __le32 media_status;
510} __attribute__((packed)); 556} __attribute__((packed));
511 557
558
559/* New in v1.4 */
560struct i2400m_tlv_config_idle_timeout {
561 struct i2400m_tlv_hdr hdr;
562 __le32 timeout; /* 100 to 300000 ms [5min], 100 increments
563 * 0 disabled */
564} __attribute__((packed));
565
566/* New in v1.4 -- for backward compat, will be removed */
567struct i2400m_tlv_config_d2h_data_format {
568 struct i2400m_tlv_hdr hdr;
569 __u8 format; /* 0 old format, 1 enhanced */
570 __u8 reserved[3];
571} __attribute__((packed));
572
573/* New in v1.4 */
574struct i2400m_tlv_config_dl_host_reorder {
575 struct i2400m_tlv_hdr hdr;
576 __u8 reorder; /* 0 disabled, 1 enabled */
577 __u8 reserved[3];
578} __attribute__((packed));
579
580
512#endif /* #ifndef __LINUX__WIMAX__I2400M_H__ */ 581#endif /* #ifndef __LINUX__WIMAX__I2400M_H__ */
diff --git a/include/linux/wireless.h b/include/linux/wireless.h
index d7958f9b52cb..cb24204851f7 100644
--- a/include/linux/wireless.h
+++ b/include/linux/wireless.h
@@ -577,18 +577,22 @@
577#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8 577#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8
578#define IW_AUTH_ROAMING_CONTROL 9 578#define IW_AUTH_ROAMING_CONTROL 9
579#define IW_AUTH_PRIVACY_INVOKED 10 579#define IW_AUTH_PRIVACY_INVOKED 10
580#define IW_AUTH_CIPHER_GROUP_MGMT 11
581#define IW_AUTH_MFP 12
580 582
581/* IW_AUTH_WPA_VERSION values (bit field) */ 583/* IW_AUTH_WPA_VERSION values (bit field) */
582#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001 584#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001
583#define IW_AUTH_WPA_VERSION_WPA 0x00000002 585#define IW_AUTH_WPA_VERSION_WPA 0x00000002
584#define IW_AUTH_WPA_VERSION_WPA2 0x00000004 586#define IW_AUTH_WPA_VERSION_WPA2 0x00000004
585 587
586/* IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values (bit field) */ 588/* IW_AUTH_PAIRWISE_CIPHER, IW_AUTH_GROUP_CIPHER, and IW_AUTH_CIPHER_GROUP_MGMT
589 * values (bit field) */
587#define IW_AUTH_CIPHER_NONE 0x00000001 590#define IW_AUTH_CIPHER_NONE 0x00000001
588#define IW_AUTH_CIPHER_WEP40 0x00000002 591#define IW_AUTH_CIPHER_WEP40 0x00000002
589#define IW_AUTH_CIPHER_TKIP 0x00000004 592#define IW_AUTH_CIPHER_TKIP 0x00000004
590#define IW_AUTH_CIPHER_CCMP 0x00000008 593#define IW_AUTH_CIPHER_CCMP 0x00000008
591#define IW_AUTH_CIPHER_WEP104 0x00000010 594#define IW_AUTH_CIPHER_WEP104 0x00000010
595#define IW_AUTH_CIPHER_AES_CMAC 0x00000020
592 596
593/* IW_AUTH_KEY_MGMT values (bit field) */ 597/* IW_AUTH_KEY_MGMT values (bit field) */
594#define IW_AUTH_KEY_MGMT_802_1X 1 598#define IW_AUTH_KEY_MGMT_802_1X 1
@@ -604,6 +608,11 @@
604#define IW_AUTH_ROAMING_DISABLE 1 /* user space program used for roaming 608#define IW_AUTH_ROAMING_DISABLE 1 /* user space program used for roaming
605 * control */ 609 * control */
606 610
611/* IW_AUTH_MFP (management frame protection) values */
612#define IW_AUTH_MFP_DISABLED 0 /* MFP disabled */
613#define IW_AUTH_MFP_OPTIONAL 1 /* MFP optional */
614#define IW_AUTH_MFP_REQUIRED 2 /* MFP required */
615
607/* SIOCSIWENCODEEXT definitions */ 616/* SIOCSIWENCODEEXT definitions */
608#define IW_ENCODE_SEQ_MAX_SIZE 8 617#define IW_ENCODE_SEQ_MAX_SIZE 8
609/* struct iw_encode_ext ->alg */ 618/* struct iw_encode_ext ->alg */
@@ -612,6 +621,7 @@
612#define IW_ENCODE_ALG_TKIP 2 621#define IW_ENCODE_ALG_TKIP 2
613#define IW_ENCODE_ALG_CCMP 3 622#define IW_ENCODE_ALG_CCMP 3
614#define IW_ENCODE_ALG_PMK 4 623#define IW_ENCODE_ALG_PMK 4
624#define IW_ENCODE_ALG_AES_CMAC 5
615/* struct iw_encode_ext ->ext_flags */ 625/* struct iw_encode_ext ->ext_flags */
616#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001 626#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001
617#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002 627#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
index c216de528b08..7b55ab215a64 100644
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -88,8 +88,8 @@ extern int ipv6_dev_get_saddr(struct net *net,
88extern int ipv6_get_lladdr(struct net_device *dev, 88extern int ipv6_get_lladdr(struct net_device *dev,
89 struct in6_addr *addr, 89 struct in6_addr *addr,
90 unsigned char banned_flags); 90 unsigned char banned_flags);
91extern int ipv6_rcv_saddr_equal(const struct sock *sk, 91extern int ipv6_rcv_saddr_equal(const struct sock *sk,
92 const struct sock *sk2); 92 const struct sock *sk2);
93extern void addrconf_join_solict(struct net_device *dev, 93extern void addrconf_join_solict(struct net_device *dev,
94 struct in6_addr *addr); 94 struct in6_addr *addr);
95extern void addrconf_leave_solict(struct inet6_dev *idev, 95extern void addrconf_leave_solict(struct inet6_dev *idev,
diff --git a/include/net/atmclip.h b/include/net/atmclip.h
index b5a51a7bb364..467c531b8a7e 100644
--- a/include/net/atmclip.h
+++ b/include/net/atmclip.h
@@ -50,7 +50,6 @@ struct atmarp_entry {
50struct clip_priv { 50struct clip_priv {
51 int number; /* for convenience ... */ 51 int number; /* for convenience ... */
52 spinlock_t xoff_lock; /* ensures that pop is atomic (SMP) */ 52 spinlock_t xoff_lock; /* ensures that pop is atomic (SMP) */
53 struct net_device_stats stats;
54 struct net_device *next; /* next CLIP interface */ 53 struct net_device *next; /* next CLIP interface */
55}; 54};
56 55
diff --git a/include/net/ax88796.h b/include/net/ax88796.h
index 51329dae44e6..b9a3beca0ce4 100644
--- a/include/net/ax88796.h
+++ b/include/net/ax88796.h
@@ -15,14 +15,17 @@
15#define AXFLG_HAS_EEPROM (1<<0) 15#define AXFLG_HAS_EEPROM (1<<0)
16#define AXFLG_MAC_FROMDEV (1<<1) /* device already has MAC */ 16#define AXFLG_MAC_FROMDEV (1<<1) /* device already has MAC */
17#define AXFLG_HAS_93CX6 (1<<2) /* use eeprom_93cx6 driver */ 17#define AXFLG_HAS_93CX6 (1<<2) /* use eeprom_93cx6 driver */
18#define AXFLG_MAC_FROMPLATFORM (1<<3) /* MAC given by platform data */
18 19
19struct ax_plat_data { 20struct ax_plat_data {
20 unsigned int flags; 21 unsigned int flags;
21 unsigned char wordlength; /* 1 or 2 */ 22 unsigned char wordlength; /* 1 or 2 */
22 unsigned char dcr_val; /* default value for DCR */ 23 unsigned char dcr_val; /* default value for DCR */
23 unsigned char rcr_val; /* default value for RCR */ 24 unsigned char rcr_val; /* default value for RCR */
24 unsigned char gpoc_val; /* default value for GPOC */ 25 unsigned char gpoc_val; /* default value for GPOC */
25 u32 *reg_offsets; /* register offsets */ 26 u32 *reg_offsets; /* register offsets */
27 u8 *mac_addr; /* MAC addr (only used when
28 AXFLG_MAC_FROMPLATFORM is used */
26}; 29};
27 30
28#endif /* __NET_AX88796_PLAT_H */ 31#endif /* __NET_AX88796_PLAT_H */
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
index a04f8463ac7e..3ad5390a4dd5 100644
--- a/include/net/bluetooth/bluetooth.h
+++ b/include/net/bluetooth/bluetooth.h
@@ -53,6 +53,17 @@
53#define SOL_SCO 17 53#define SOL_SCO 17
54#define SOL_RFCOMM 18 54#define SOL_RFCOMM 18
55 55
56#define BT_SECURITY 4
57struct bt_security {
58 __u8 level;
59};
60#define BT_SECURITY_SDP 0
61#define BT_SECURITY_LOW 1
62#define BT_SECURITY_MEDIUM 2
63#define BT_SECURITY_HIGH 3
64
65#define BT_DEFER_SETUP 7
66
56#define BT_INFO(fmt, arg...) printk(KERN_INFO "Bluetooth: " fmt "\n" , ## arg) 67#define BT_INFO(fmt, arg...) printk(KERN_INFO "Bluetooth: " fmt "\n" , ## arg)
57#define BT_ERR(fmt, arg...) printk(KERN_ERR "%s: " fmt "\n" , __func__ , ## arg) 68#define BT_ERR(fmt, arg...) printk(KERN_ERR "%s: " fmt "\n" , __func__ , ## arg)
58#define BT_DBG(fmt, arg...) pr_debug("%s: " fmt "\n" , __func__ , ## arg) 69#define BT_DBG(fmt, arg...) pr_debug("%s: " fmt "\n" , __func__ , ## arg)
@@ -108,6 +119,7 @@ struct bt_sock {
108 bdaddr_t dst; 119 bdaddr_t dst;
109 struct list_head accept_q; 120 struct list_head accept_q;
110 struct sock *parent; 121 struct sock *parent;
122 u32 defer_setup;
111}; 123};
112 124
113struct bt_sock_list { 125struct bt_sock_list {
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 3645139e68c7..f69f015bbcc0 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -133,8 +133,13 @@ enum {
133#define ESCO_EV3 0x0008 133#define ESCO_EV3 0x0008
134#define ESCO_EV4 0x0010 134#define ESCO_EV4 0x0010
135#define ESCO_EV5 0x0020 135#define ESCO_EV5 0x0020
136#define ESCO_2EV3 0x0040
137#define ESCO_3EV3 0x0080
138#define ESCO_2EV5 0x0100
139#define ESCO_3EV5 0x0200
136 140
137#define SCO_ESCO_MASK (ESCO_HV1 | ESCO_HV2 | ESCO_HV3) 141#define SCO_ESCO_MASK (ESCO_HV1 | ESCO_HV2 | ESCO_HV3)
142#define EDR_ESCO_MASK (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5)
138 143
139/* ACL flags */ 144/* ACL flags */
140#define ACL_CONT 0x01 145#define ACL_CONT 0x01
@@ -176,6 +181,9 @@ enum {
176#define LMP_EV5 0x02 181#define LMP_EV5 0x02
177 182
178#define LMP_SNIFF_SUBR 0x02 183#define LMP_SNIFF_SUBR 0x02
184#define LMP_EDR_ESCO_2M 0x20
185#define LMP_EDR_ESCO_3M 0x40
186#define LMP_EDR_3S_ESCO 0x80
179 187
180#define LMP_SIMPLE_PAIR 0x08 188#define LMP_SIMPLE_PAIR 0x08
181 189
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 46a43b721dd6..01f9316b4c23 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -169,6 +169,7 @@ struct hci_conn {
169 __u16 link_policy; 169 __u16 link_policy;
170 __u32 link_mode; 170 __u32 link_mode;
171 __u8 auth_type; 171 __u8 auth_type;
172 __u8 sec_level;
172 __u8 power_save; 173 __u8 power_save;
173 unsigned long pend; 174 unsigned long pend;
174 175
@@ -325,12 +326,11 @@ int hci_conn_del(struct hci_conn *conn);
325void hci_conn_hash_flush(struct hci_dev *hdev); 326void hci_conn_hash_flush(struct hci_dev *hdev);
326void hci_conn_check_pending(struct hci_dev *hdev); 327void hci_conn_check_pending(struct hci_dev *hdev);
327 328
328struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, __u8 auth_type); 329struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, __u8 sec_level, __u8 auth_type);
329int hci_conn_check_link_mode(struct hci_conn *conn); 330int hci_conn_check_link_mode(struct hci_conn *conn);
330int hci_conn_auth(struct hci_conn *conn); 331int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type);
331int hci_conn_encrypt(struct hci_conn *conn);
332int hci_conn_change_link_key(struct hci_conn *conn); 332int hci_conn_change_link_key(struct hci_conn *conn);
333int hci_conn_switch_role(struct hci_conn *conn, uint8_t role); 333int hci_conn_switch_role(struct hci_conn *conn, __u8 role);
334 334
335void hci_conn_enter_active_mode(struct hci_conn *conn); 335void hci_conn_enter_active_mode(struct hci_conn *conn);
336void hci_conn_enter_sniff_mode(struct hci_conn *conn); 336void hci_conn_enter_sniff_mode(struct hci_conn *conn);
@@ -470,26 +470,26 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
470 470
471/* ----- HCI protocols ----- */ 471/* ----- HCI protocols ----- */
472struct hci_proto { 472struct hci_proto {
473 char *name; 473 char *name;
474 unsigned int id; 474 unsigned int id;
475 unsigned long flags; 475 unsigned long flags;
476 476
477 void *priv; 477 void *priv;
478 478
479 int (*connect_ind) (struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type); 479 int (*connect_ind) (struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type);
480 int (*connect_cfm) (struct hci_conn *conn, __u8 status); 480 int (*connect_cfm) (struct hci_conn *conn, __u8 status);
481 int (*disconn_ind) (struct hci_conn *conn, __u8 reason); 481 int (*disconn_ind) (struct hci_conn *conn);
482 int (*disconn_cfm) (struct hci_conn *conn, __u8 reason);
482 int (*recv_acldata) (struct hci_conn *conn, struct sk_buff *skb, __u16 flags); 483 int (*recv_acldata) (struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
483 int (*recv_scodata) (struct hci_conn *conn, struct sk_buff *skb); 484 int (*recv_scodata) (struct hci_conn *conn, struct sk_buff *skb);
484 int (*auth_cfm) (struct hci_conn *conn, __u8 status); 485 int (*security_cfm) (struct hci_conn *conn, __u8 status, __u8 encrypt);
485 int (*encrypt_cfm) (struct hci_conn *conn, __u8 status, __u8 encrypt);
486}; 486};
487 487
488static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type) 488static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
489{ 489{
490 register struct hci_proto *hp; 490 register struct hci_proto *hp;
491 int mask = 0; 491 int mask = 0;
492 492
493 hp = hci_proto[HCI_PROTO_L2CAP]; 493 hp = hci_proto[HCI_PROTO_L2CAP];
494 if (hp && hp->connect_ind) 494 if (hp && hp->connect_ind)
495 mask |= hp->connect_ind(hdev, bdaddr, type); 495 mask |= hp->connect_ind(hdev, bdaddr, type);
@@ -514,30 +514,52 @@ static inline void hci_proto_connect_cfm(struct hci_conn *conn, __u8 status)
514 hp->connect_cfm(conn, status); 514 hp->connect_cfm(conn, status);
515} 515}
516 516
517static inline void hci_proto_disconn_ind(struct hci_conn *conn, __u8 reason) 517static inline int hci_proto_disconn_ind(struct hci_conn *conn)
518{ 518{
519 register struct hci_proto *hp; 519 register struct hci_proto *hp;
520 int reason = 0x13;
520 521
521 hp = hci_proto[HCI_PROTO_L2CAP]; 522 hp = hci_proto[HCI_PROTO_L2CAP];
522 if (hp && hp->disconn_ind) 523 if (hp && hp->disconn_ind)
523 hp->disconn_ind(conn, reason); 524 reason = hp->disconn_ind(conn);
524 525
525 hp = hci_proto[HCI_PROTO_SCO]; 526 hp = hci_proto[HCI_PROTO_SCO];
526 if (hp && hp->disconn_ind) 527 if (hp && hp->disconn_ind)
527 hp->disconn_ind(conn, reason); 528 reason = hp->disconn_ind(conn);
529
530 return reason;
531}
532
533static inline void hci_proto_disconn_cfm(struct hci_conn *conn, __u8 reason)
534{
535 register struct hci_proto *hp;
536
537 hp = hci_proto[HCI_PROTO_L2CAP];
538 if (hp && hp->disconn_cfm)
539 hp->disconn_cfm(conn, reason);
540
541 hp = hci_proto[HCI_PROTO_SCO];
542 if (hp && hp->disconn_cfm)
543 hp->disconn_cfm(conn, reason);
528} 544}
529 545
530static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status) 546static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status)
531{ 547{
532 register struct hci_proto *hp; 548 register struct hci_proto *hp;
549 __u8 encrypt;
550
551 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend))
552 return;
553
554 encrypt = (conn->link_mode & HCI_LM_ENCRYPT) ? 0x01 : 0x00;
533 555
534 hp = hci_proto[HCI_PROTO_L2CAP]; 556 hp = hci_proto[HCI_PROTO_L2CAP];
535 if (hp && hp->auth_cfm) 557 if (hp && hp->security_cfm)
536 hp->auth_cfm(conn, status); 558 hp->security_cfm(conn, status, encrypt);
537 559
538 hp = hci_proto[HCI_PROTO_SCO]; 560 hp = hci_proto[HCI_PROTO_SCO];
539 if (hp && hp->auth_cfm) 561 if (hp && hp->security_cfm)
540 hp->auth_cfm(conn, status); 562 hp->security_cfm(conn, status, encrypt);
541} 563}
542 564
543static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status, __u8 encrypt) 565static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status, __u8 encrypt)
@@ -545,12 +567,12 @@ static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status, __u
545 register struct hci_proto *hp; 567 register struct hci_proto *hp;
546 568
547 hp = hci_proto[HCI_PROTO_L2CAP]; 569 hp = hci_proto[HCI_PROTO_L2CAP];
548 if (hp && hp->encrypt_cfm) 570 if (hp && hp->security_cfm)
549 hp->encrypt_cfm(conn, status, encrypt); 571 hp->security_cfm(conn, status, encrypt);
550 572
551 hp = hci_proto[HCI_PROTO_SCO]; 573 hp = hci_proto[HCI_PROTO_SCO];
552 if (hp && hp->encrypt_cfm) 574 if (hp && hp->security_cfm)
553 hp->encrypt_cfm(conn, status, encrypt); 575 hp->security_cfm(conn, status, encrypt);
554} 576}
555 577
556int hci_register_proto(struct hci_proto *hproto); 578int hci_register_proto(struct hci_proto *hproto);
@@ -562,8 +584,7 @@ struct hci_cb {
562 584
563 char *name; 585 char *name;
564 586
565 void (*auth_cfm) (struct hci_conn *conn, __u8 status); 587 void (*security_cfm) (struct hci_conn *conn, __u8 status, __u8 encrypt);
566 void (*encrypt_cfm) (struct hci_conn *conn, __u8 status, __u8 encrypt);
567 void (*key_change_cfm) (struct hci_conn *conn, __u8 status); 588 void (*key_change_cfm) (struct hci_conn *conn, __u8 status);
568 void (*role_switch_cfm) (struct hci_conn *conn, __u8 status, __u8 role); 589 void (*role_switch_cfm) (struct hci_conn *conn, __u8 status, __u8 role);
569}; 590};
@@ -571,14 +592,20 @@ struct hci_cb {
571static inline void hci_auth_cfm(struct hci_conn *conn, __u8 status) 592static inline void hci_auth_cfm(struct hci_conn *conn, __u8 status)
572{ 593{
573 struct list_head *p; 594 struct list_head *p;
595 __u8 encrypt;
574 596
575 hci_proto_auth_cfm(conn, status); 597 hci_proto_auth_cfm(conn, status);
576 598
599 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend))
600 return;
601
602 encrypt = (conn->link_mode & HCI_LM_ENCRYPT) ? 0x01 : 0x00;
603
577 read_lock_bh(&hci_cb_list_lock); 604 read_lock_bh(&hci_cb_list_lock);
578 list_for_each(p, &hci_cb_list) { 605 list_for_each(p, &hci_cb_list) {
579 struct hci_cb *cb = list_entry(p, struct hci_cb, list); 606 struct hci_cb *cb = list_entry(p, struct hci_cb, list);
580 if (cb->auth_cfm) 607 if (cb->security_cfm)
581 cb->auth_cfm(conn, status); 608 cb->security_cfm(conn, status, encrypt);
582 } 609 }
583 read_unlock_bh(&hci_cb_list_lock); 610 read_unlock_bh(&hci_cb_list_lock);
584} 611}
@@ -587,13 +614,16 @@ static inline void hci_encrypt_cfm(struct hci_conn *conn, __u8 status, __u8 encr
587{ 614{
588 struct list_head *p; 615 struct list_head *p;
589 616
617 if (conn->sec_level == BT_SECURITY_SDP)
618 conn->sec_level = BT_SECURITY_LOW;
619
590 hci_proto_encrypt_cfm(conn, status, encrypt); 620 hci_proto_encrypt_cfm(conn, status, encrypt);
591 621
592 read_lock_bh(&hci_cb_list_lock); 622 read_lock_bh(&hci_cb_list_lock);
593 list_for_each(p, &hci_cb_list) { 623 list_for_each(p, &hci_cb_list) {
594 struct hci_cb *cb = list_entry(p, struct hci_cb, list); 624 struct hci_cb *cb = list_entry(p, struct hci_cb, list);
595 if (cb->encrypt_cfm) 625 if (cb->security_cfm)
596 cb->encrypt_cfm(conn, status, encrypt); 626 cb->security_cfm(conn, status, encrypt);
597 } 627 }
598 read_unlock_bh(&hci_cb_list_lock); 628 read_unlock_bh(&hci_cb_list_lock);
599} 629}
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index 73e115bc12dd..f566aa1f0a4c 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -37,6 +37,7 @@ struct sockaddr_l2 {
37 sa_family_t l2_family; 37 sa_family_t l2_family;
38 __le16 l2_psm; 38 __le16 l2_psm;
39 bdaddr_t l2_bdaddr; 39 bdaddr_t l2_bdaddr;
40 __le16 l2_cid;
40}; 41};
41 42
42/* L2CAP socket options */ 43/* L2CAP socket options */
@@ -185,6 +186,7 @@ struct l2cap_info_rsp {
185/* info type */ 186/* info type */
186#define L2CAP_IT_CL_MTU 0x0001 187#define L2CAP_IT_CL_MTU 0x0001
187#define L2CAP_IT_FEAT_MASK 0x0002 188#define L2CAP_IT_FEAT_MASK 0x0002
189#define L2CAP_IT_FIXED_CHAN 0x0003
188 190
189/* info result */ 191/* info result */
190#define L2CAP_IR_SUCCESS 0x0000 192#define L2CAP_IR_SUCCESS 0x0000
@@ -219,11 +221,14 @@ struct l2cap_conn {
219 __u8 rx_ident; 221 __u8 rx_ident;
220 __u8 tx_ident; 222 __u8 tx_ident;
221 223
224 __u8 disc_reason;
225
222 struct l2cap_chan_list chan_list; 226 struct l2cap_chan_list chan_list;
223}; 227};
224 228
225#define L2CAP_INFO_CL_MTU_REQ_SENT 0x01 229#define L2CAP_INFO_CL_MTU_REQ_SENT 0x01
226#define L2CAP_INFO_FEAT_MASK_REQ_SENT 0x02 230#define L2CAP_INFO_FEAT_MASK_REQ_SENT 0x04
231#define L2CAP_INFO_FEAT_MASK_REQ_DONE 0x08
227 232
228/* ----- L2CAP channel and socket info ----- */ 233/* ----- L2CAP channel and socket info ----- */
229#define l2cap_pi(sk) ((struct l2cap_pinfo *) sk) 234#define l2cap_pi(sk) ((struct l2cap_pinfo *) sk)
@@ -237,8 +242,9 @@ struct l2cap_pinfo {
237 __u16 imtu; 242 __u16 imtu;
238 __u16 omtu; 243 __u16 omtu;
239 __u16 flush_to; 244 __u16 flush_to;
240 245 __u8 sec_level;
241 __u32 link_mode; 246 __u8 role_switch;
247 __u8 force_reliable;
242 248
243 __u8 conf_req[64]; 249 __u8 conf_req[64];
244 __u8 conf_len; 250 __u8 conf_len;
@@ -257,6 +263,7 @@ struct l2cap_pinfo {
257#define L2CAP_CONF_REQ_SENT 0x01 263#define L2CAP_CONF_REQ_SENT 0x01
258#define L2CAP_CONF_INPUT_DONE 0x02 264#define L2CAP_CONF_INPUT_DONE 0x02
259#define L2CAP_CONF_OUTPUT_DONE 0x04 265#define L2CAP_CONF_OUTPUT_DONE 0x04
266#define L2CAP_CONF_CONNECT_PEND 0x80
260 267
261#define L2CAP_CONF_MAX_RETRIES 2 268#define L2CAP_CONF_MAX_RETRIES 2
262 269
diff --git a/include/net/bluetooth/rfcomm.h b/include/net/bluetooth/rfcomm.h
index 4dc8d92a4638..80072611d26a 100644
--- a/include/net/bluetooth/rfcomm.h
+++ b/include/net/bluetooth/rfcomm.h
@@ -183,8 +183,9 @@ struct rfcomm_dlc {
183 u8 remote_v24_sig; 183 u8 remote_v24_sig;
184 u8 mscex; 184 u8 mscex;
185 u8 out; 185 u8 out;
186 186 u8 sec_level;
187 u32 link_mode; 187 u8 role_switch;
188 u32 defer_setup;
188 189
189 uint mtu; 190 uint mtu;
190 uint cfc; 191 uint cfc;
@@ -202,10 +203,12 @@ struct rfcomm_dlc {
202#define RFCOMM_RX_THROTTLED 0 203#define RFCOMM_RX_THROTTLED 0
203#define RFCOMM_TX_THROTTLED 1 204#define RFCOMM_TX_THROTTLED 1
204#define RFCOMM_TIMED_OUT 2 205#define RFCOMM_TIMED_OUT 2
205#define RFCOMM_MSC_PENDING 3 206#define RFCOMM_MSC_PENDING 3
206#define RFCOMM_AUTH_PENDING 4 207#define RFCOMM_SEC_PENDING 4
207#define RFCOMM_AUTH_ACCEPT 5 208#define RFCOMM_AUTH_PENDING 5
208#define RFCOMM_AUTH_REJECT 6 209#define RFCOMM_AUTH_ACCEPT 6
210#define RFCOMM_AUTH_REJECT 7
211#define RFCOMM_DEFER_SETUP 8
209 212
210/* Scheduling flags and events */ 213/* Scheduling flags and events */
211#define RFCOMM_SCHED_STATE 0 214#define RFCOMM_SCHED_STATE 0
@@ -239,6 +242,7 @@ int rfcomm_dlc_close(struct rfcomm_dlc *d, int reason);
239int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb); 242int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb);
240int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig); 243int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig);
241int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig); 244int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig);
245void rfcomm_dlc_accept(struct rfcomm_dlc *d);
242 246
243#define rfcomm_dlc_lock(d) spin_lock(&d->lock) 247#define rfcomm_dlc_lock(d) spin_lock(&d->lock)
244#define rfcomm_dlc_unlock(d) spin_unlock(&d->lock) 248#define rfcomm_dlc_unlock(d) spin_unlock(&d->lock)
@@ -304,7 +308,8 @@ struct rfcomm_pinfo {
304 struct bt_sock bt; 308 struct bt_sock bt;
305 struct rfcomm_dlc *dlc; 309 struct rfcomm_dlc *dlc;
306 u8 channel; 310 u8 channel;
307 u32 link_mode; 311 u8 sec_level;
312 u8 role_switch;
308}; 313};
309 314
310int rfcomm_init_sockets(void); 315int rfcomm_init_sockets(void);
@@ -333,7 +338,6 @@ struct rfcomm_dev_req {
333 bdaddr_t src; 338 bdaddr_t src;
334 bdaddr_t dst; 339 bdaddr_t dst;
335 u8 channel; 340 u8 channel;
336
337}; 341};
338 342
339struct rfcomm_dev_info { 343struct rfcomm_dev_info {
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 23c0ab74ded6..50f3fd9ff524 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -4,6 +4,10 @@
4#include <linux/netlink.h> 4#include <linux/netlink.h>
5#include <linux/skbuff.h> 5#include <linux/skbuff.h>
6#include <linux/nl80211.h> 6#include <linux/nl80211.h>
7#include <linux/if_ether.h>
8#include <linux/ieee80211.h>
9#include <linux/wireless.h>
10#include <net/iw_handler.h>
7#include <net/genetlink.h> 11#include <net/genetlink.h>
8/* remove once we remove the wext stuff */ 12/* remove once we remove the wext stuff */
9#include <net/iw_handler.h> 13#include <net/iw_handler.h>
@@ -112,12 +116,14 @@ struct beacon_parameters {
112 * @STATION_FLAG_SHORT_PREAMBLE: station is capable of receiving frames 116 * @STATION_FLAG_SHORT_PREAMBLE: station is capable of receiving frames
113 * with short preambles 117 * with short preambles
114 * @STATION_FLAG_WME: station is WME/QoS capable 118 * @STATION_FLAG_WME: station is WME/QoS capable
119 * @STATION_FLAG_MFP: station uses management frame protection
115 */ 120 */
116enum station_flags { 121enum station_flags {
117 STATION_FLAG_CHANGED = 1<<0, 122 STATION_FLAG_CHANGED = 1<<0,
118 STATION_FLAG_AUTHORIZED = 1<<NL80211_STA_FLAG_AUTHORIZED, 123 STATION_FLAG_AUTHORIZED = 1<<NL80211_STA_FLAG_AUTHORIZED,
119 STATION_FLAG_SHORT_PREAMBLE = 1<<NL80211_STA_FLAG_SHORT_PREAMBLE, 124 STATION_FLAG_SHORT_PREAMBLE = 1<<NL80211_STA_FLAG_SHORT_PREAMBLE,
120 STATION_FLAG_WME = 1<<NL80211_STA_FLAG_WME, 125 STATION_FLAG_WME = 1<<NL80211_STA_FLAG_WME,
126 STATION_FLAG_MFP = 1<<NL80211_STA_FLAG_MFP,
121}; 127};
122 128
123/** 129/**
@@ -172,6 +178,8 @@ struct station_parameters {
172 * @STATION_INFO_SIGNAL: @signal filled 178 * @STATION_INFO_SIGNAL: @signal filled
173 * @STATION_INFO_TX_BITRATE: @tx_bitrate fields are filled 179 * @STATION_INFO_TX_BITRATE: @tx_bitrate fields are filled
174 * (tx_bitrate, tx_bitrate_flags and tx_bitrate_mcs) 180 * (tx_bitrate, tx_bitrate_flags and tx_bitrate_mcs)
181 * @STATION_INFO_RX_PACKETS: @rx_packets filled
182 * @STATION_INFO_TX_PACKETS: @tx_packets filled
175 */ 183 */
176enum station_info_flags { 184enum station_info_flags {
177 STATION_INFO_INACTIVE_TIME = 1<<0, 185 STATION_INFO_INACTIVE_TIME = 1<<0,
@@ -182,6 +190,8 @@ enum station_info_flags {
182 STATION_INFO_PLINK_STATE = 1<<5, 190 STATION_INFO_PLINK_STATE = 1<<5,
183 STATION_INFO_SIGNAL = 1<<6, 191 STATION_INFO_SIGNAL = 1<<6,
184 STATION_INFO_TX_BITRATE = 1<<7, 192 STATION_INFO_TX_BITRATE = 1<<7,
193 STATION_INFO_RX_PACKETS = 1<<8,
194 STATION_INFO_TX_PACKETS = 1<<9,
185}; 195};
186 196
187/** 197/**
@@ -229,6 +239,8 @@ struct rate_info {
229 * @plink_state: mesh peer link state 239 * @plink_state: mesh peer link state
230 * @signal: signal strength of last received packet in dBm 240 * @signal: signal strength of last received packet in dBm
231 * @txrate: current unicast bitrate to this station 241 * @txrate: current unicast bitrate to this station
242 * @rx_packets: packets received from this station
243 * @tx_packets: packets transmitted to this station
232 */ 244 */
233struct station_info { 245struct station_info {
234 u32 filled; 246 u32 filled;
@@ -240,6 +252,8 @@ struct station_info {
240 u8 plink_state; 252 u8 plink_state;
241 s8 signal; 253 s8 signal;
242 struct rate_info txrate; 254 struct rate_info txrate;
255 u32 rx_packets;
256 u32 tx_packets;
243}; 257};
244 258
245/** 259/**
@@ -335,24 +349,50 @@ struct bss_parameters {
335}; 349};
336 350
337/** 351/**
338 * enum reg_set_by - Indicates who is trying to set the regulatory domain 352 * enum environment_cap - Environment parsed from country IE
339 * @REGDOM_SET_BY_INIT: regulatory domain was set by initialization. We will be 353 * @ENVIRON_ANY: indicates country IE applies to both indoor and
340 * using a static world regulatory domain by default. 354 * outdoor operation.
341 * @REGDOM_SET_BY_CORE: Core queried CRDA for a dynamic world regulatory domain. 355 * @ENVIRON_INDOOR: indicates country IE applies only to indoor operation
342 * @REGDOM_SET_BY_USER: User asked the wireless core to set the 356 * @ENVIRON_OUTDOOR: indicates country IE applies only to outdoor operation
343 * regulatory domain.
344 * @REGDOM_SET_BY_DRIVER: a wireless drivers has hinted to the wireless core
345 * it thinks its knows the regulatory domain we should be in.
346 * @REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an 802.11 country
347 * information element with regulatory information it thinks we
348 * should consider.
349 */ 357 */
350enum reg_set_by { 358enum environment_cap {
351 REGDOM_SET_BY_INIT, 359 ENVIRON_ANY,
352 REGDOM_SET_BY_CORE, 360 ENVIRON_INDOOR,
353 REGDOM_SET_BY_USER, 361 ENVIRON_OUTDOOR,
354 REGDOM_SET_BY_DRIVER, 362};
355 REGDOM_SET_BY_COUNTRY_IE, 363
364/**
365 * struct regulatory_request - used to keep track of regulatory requests
366 *
367 * @wiphy_idx: this is set if this request's initiator is
368 * %REGDOM_SET_BY_COUNTRY_IE or %REGDOM_SET_BY_DRIVER. This
369 * can be used by the wireless core to deal with conflicts
370 * and potentially inform users of which devices specifically
371 * cased the conflicts.
372 * @initiator: indicates who sent this request, could be any of
373 * of those set in nl80211_reg_initiator (%NL80211_REGDOM_SET_BY_*)
374 * @alpha2: the ISO / IEC 3166 alpha2 country code of the requested
375 * regulatory domain. We have a few special codes:
376 * 00 - World regulatory domain
377 * 99 - built by driver but a specific alpha2 cannot be determined
378 * 98 - result of an intersection between two regulatory domains
379 * @intersect: indicates whether the wireless core should intersect
380 * the requested regulatory domain with the presently set regulatory
381 * domain.
382 * @country_ie_checksum: checksum of the last processed and accepted
383 * country IE
384 * @country_ie_env: lets us know if the AP is telling us we are outdoor,
385 * indoor, or if it doesn't matter
386 * @list: used to insert into the reg_requests_list linked list
387 */
388struct regulatory_request {
389 int wiphy_idx;
390 enum nl80211_reg_initiator initiator;
391 char alpha2[2];
392 bool intersect;
393 u32 country_ie_checksum;
394 enum environment_cap country_ie_env;
395 struct list_head list;
356}; 396};
357 397
358struct ieee80211_freq_range { 398struct ieee80211_freq_range {
@@ -431,6 +471,26 @@ struct ieee80211_txq_params {
431 u8 aifs; 471 u8 aifs;
432}; 472};
433 473
474/**
475 * struct mgmt_extra_ie_params - Extra management frame IE parameters
476 *
477 * Used to add extra IE(s) into management frames. If the driver cannot add the
478 * requested data into all management frames of the specified subtype that are
479 * generated in kernel or firmware/hardware, it must reject the configuration
480 * call. The IE data buffer is added to the end of the specified management
481 * frame body after all other IEs. This addition is not applied to frames that
482 * are injected through a monitor interface.
483 *
484 * @subtype: Management frame subtype
485 * @ies: IE data buffer or %NULL to remove previous data
486 * @ies_len: Length of @ies in octets
487 */
488struct mgmt_extra_ie_params {
489 u8 subtype;
490 u8 *ies;
491 int ies_len;
492};
493
434/* from net/wireless.h */ 494/* from net/wireless.h */
435struct wiphy; 495struct wiphy;
436 496
@@ -438,6 +498,87 @@ struct wiphy;
438struct ieee80211_channel; 498struct ieee80211_channel;
439 499
440/** 500/**
501 * struct cfg80211_ssid - SSID description
502 * @ssid: the SSID
503 * @ssid_len: length of the ssid
504 */
505struct cfg80211_ssid {
506 u8 ssid[IEEE80211_MAX_SSID_LEN];
507 u8 ssid_len;
508};
509
510/**
511 * struct cfg80211_scan_request - scan request description
512 *
513 * @ssids: SSIDs to scan for (active scan only)
514 * @n_ssids: number of SSIDs
515 * @channels: channels to scan on.
516 * @n_channels: number of channels for each band
517 * @ie: optional information element(s) to add into Probe Request or %NULL
518 * @ie_len: length of ie in octets
519 * @wiphy: the wiphy this was for
520 * @ifidx: the interface index
521 */
522struct cfg80211_scan_request {
523 struct cfg80211_ssid *ssids;
524 int n_ssids;
525 struct ieee80211_channel **channels;
526 u32 n_channels;
527 u8 *ie;
528 size_t ie_len;
529
530 /* internal */
531 struct wiphy *wiphy;
532 int ifidx;
533};
534
535/**
536 * enum cfg80211_signal_type - signal type
537 *
538 * @CFG80211_SIGNAL_TYPE_NONE: no signal strength information available
539 * @CFG80211_SIGNAL_TYPE_MBM: signal strength in mBm (100*dBm)
540 * @CFG80211_SIGNAL_TYPE_UNSPEC: signal strength, increasing from 0 through 100
541 */
542enum cfg80211_signal_type {
543 CFG80211_SIGNAL_TYPE_NONE,
544 CFG80211_SIGNAL_TYPE_MBM,
545 CFG80211_SIGNAL_TYPE_UNSPEC,
546};
547
548/**
549 * struct cfg80211_bss - BSS description
550 *
551 * This structure describes a BSS (which may also be a mesh network)
552 * for use in scan results and similar.
553 *
554 * @bssid: BSSID of the BSS
555 * @tsf: timestamp of last received update
556 * @beacon_interval: the beacon interval as from the frame
557 * @capability: the capability field in host byte order
558 * @information_elements: the information elements (Note that there
559 * is no guarantee that these are well-formed!)
560 * @len_information_elements: total length of the information elements
561 * @signal: signal strength value (type depends on the wiphy's signal_type)
562 * @free_priv: function pointer to free private data
563 * @priv: private area for driver use, has at least wiphy->bss_priv_size bytes
564 */
565struct cfg80211_bss {
566 struct ieee80211_channel *channel;
567
568 u8 bssid[ETH_ALEN];
569 u64 tsf;
570 u16 beacon_interval;
571 u16 capability;
572 u8 *information_elements;
573 size_t len_information_elements;
574
575 s32 signal;
576
577 void (*free_priv)(struct cfg80211_bss *bss);
578 u8 priv[0] __attribute__((__aligned__(sizeof(void *))));
579};
580
581/**
441 * struct cfg80211_ops - backend description for wireless configuration 582 * struct cfg80211_ops - backend description for wireless configuration
442 * 583 *
443 * This struct is registered by fullmac card drivers and/or wireless stacks 584 * This struct is registered by fullmac card drivers and/or wireless stacks
@@ -450,6 +591,9 @@ struct ieee80211_channel;
450 * wireless extensions but this is subject to reevaluation as soon as this 591 * wireless extensions but this is subject to reevaluation as soon as this
451 * code is used more widely and we have a first user without wext. 592 * code is used more widely and we have a first user without wext.
452 * 593 *
594 * @suspend: wiphy device needs to be suspended
595 * @resume: wiphy device needs to be resumed
596 *
453 * @add_virtual_intf: create a new virtual interface with the given name, 597 * @add_virtual_intf: create a new virtual interface with the given name,
454 * must set the struct wireless_dev's iftype. 598 * must set the struct wireless_dev's iftype.
455 * 599 *
@@ -471,6 +615,8 @@ struct ieee80211_channel;
471 * 615 *
472 * @set_default_key: set the default key on an interface 616 * @set_default_key: set the default key on an interface
473 * 617 *
618 * @set_default_mgmt_key: set the default management frame key on an interface
619 *
474 * @add_beacon: Add a beacon with given parameters, @head, @interval 620 * @add_beacon: Add a beacon with given parameters, @head, @interval
475 * and @dtim_period will be valid, @tail is optional. 621 * and @dtim_period will be valid, @tail is optional.
476 * @set_beacon: Change the beacon parameters for an access point mode 622 * @set_beacon: Change the beacon parameters for an access point mode
@@ -497,8 +643,18 @@ struct ieee80211_channel;
497 * @set_txq_params: Set TX queue parameters 643 * @set_txq_params: Set TX queue parameters
498 * 644 *
499 * @set_channel: Set channel 645 * @set_channel: Set channel
646 *
647 * @set_mgmt_extra_ie: Set extra IE data for management frames
648 *
649 * @scan: Request to do a scan. If returning zero, the scan request is given
650 * the driver, and will be valid until passed to cfg80211_scan_done().
651 * For scan results, call cfg80211_inform_bss(); you can call this outside
652 * the scan/scan_done bracket too.
500 */ 653 */
501struct cfg80211_ops { 654struct cfg80211_ops {
655 int (*suspend)(struct wiphy *wiphy);
656 int (*resume)(struct wiphy *wiphy);
657
502 int (*add_virtual_intf)(struct wiphy *wiphy, char *name, 658 int (*add_virtual_intf)(struct wiphy *wiphy, char *name,
503 enum nl80211_iftype type, u32 *flags, 659 enum nl80211_iftype type, u32 *flags,
504 struct vif_params *params); 660 struct vif_params *params);
@@ -518,6 +674,9 @@ struct cfg80211_ops {
518 int (*set_default_key)(struct wiphy *wiphy, 674 int (*set_default_key)(struct wiphy *wiphy,
519 struct net_device *netdev, 675 struct net_device *netdev,
520 u8 key_index); 676 u8 key_index);
677 int (*set_default_mgmt_key)(struct wiphy *wiphy,
678 struct net_device *netdev,
679 u8 key_index);
521 680
522 int (*add_beacon)(struct wiphy *wiphy, struct net_device *dev, 681 int (*add_beacon)(struct wiphy *wiphy, struct net_device *dev,
523 struct beacon_parameters *info); 682 struct beacon_parameters *info);
@@ -564,6 +723,13 @@ struct cfg80211_ops {
564 int (*set_channel)(struct wiphy *wiphy, 723 int (*set_channel)(struct wiphy *wiphy,
565 struct ieee80211_channel *chan, 724 struct ieee80211_channel *chan,
566 enum nl80211_channel_type channel_type); 725 enum nl80211_channel_type channel_type);
726
727 int (*set_mgmt_extra_ie)(struct wiphy *wiphy,
728 struct net_device *dev,
729 struct mgmt_extra_ie_params *params);
730
731 int (*scan)(struct wiphy *wiphy, struct net_device *dev,
732 struct cfg80211_scan_request *request);
567}; 733};
568 734
569/* temporary wext handlers */ 735/* temporary wext handlers */
@@ -574,5 +740,71 @@ int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info,
574 u32 *mode, char *extra); 740 u32 *mode, char *extra);
575int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info, 741int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info,
576 u32 *mode, char *extra); 742 u32 *mode, char *extra);
743int cfg80211_wext_siwscan(struct net_device *dev,
744 struct iw_request_info *info,
745 union iwreq_data *wrqu, char *extra);
746int cfg80211_wext_giwscan(struct net_device *dev,
747 struct iw_request_info *info,
748 struct iw_point *data, char *extra);
749int cfg80211_wext_giwrange(struct net_device *dev,
750 struct iw_request_info *info,
751 struct iw_point *data, char *extra);
752
753/**
754 * cfg80211_scan_done - notify that scan finished
755 *
756 * @request: the corresponding scan request
757 * @aborted: set to true if the scan was aborted for any reason,
758 * userspace will be notified of that
759 */
760void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted);
761
762/**
763 * cfg80211_inform_bss - inform cfg80211 of a new BSS
764 *
765 * @wiphy: the wiphy reporting the BSS
766 * @bss: the found BSS
767 * @signal: the signal strength, type depends on the wiphy's signal_type
768 * @gfp: context flags
769 *
770 * This informs cfg80211 that BSS information was found and
771 * the BSS should be updated/added.
772 */
773struct cfg80211_bss*
774cfg80211_inform_bss_frame(struct wiphy *wiphy,
775 struct ieee80211_channel *channel,
776 struct ieee80211_mgmt *mgmt, size_t len,
777 s32 signal, gfp_t gfp);
778
779struct cfg80211_bss *cfg80211_get_bss(struct wiphy *wiphy,
780 struct ieee80211_channel *channel,
781 const u8 *bssid,
782 const u8 *ssid, size_t ssid_len,
783 u16 capa_mask, u16 capa_val);
784static inline struct cfg80211_bss *
785cfg80211_get_ibss(struct wiphy *wiphy,
786 struct ieee80211_channel *channel,
787 const u8 *ssid, size_t ssid_len)
788{
789 return cfg80211_get_bss(wiphy, channel, NULL, ssid, ssid_len,
790 WLAN_CAPABILITY_IBSS, WLAN_CAPABILITY_IBSS);
791}
792
793struct cfg80211_bss *cfg80211_get_mesh(struct wiphy *wiphy,
794 struct ieee80211_channel *channel,
795 const u8 *meshid, size_t meshidlen,
796 const u8 *meshcfg);
797void cfg80211_put_bss(struct cfg80211_bss *bss);
798/**
799 * cfg80211_unlink_bss - unlink BSS from internal data structures
800 * @wiphy: the wiphy
801 * @bss: the bss to remove
802 *
803 * This function removes the given BSS from the internal data structures
804 * thereby making it no longer show up in scan results etc. Use this
805 * function when you detect a BSS is gone. Normally BSSes will also time
806 * out, so it is not necessary to use this function at all.
807 */
808void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss);
577 809
578#endif /* __NET_CFG80211_H */ 810#endif /* __NET_CFG80211_H */
diff --git a/include/net/dsa.h b/include/net/dsa.h
index 52e97bfca5a1..839f768f9e35 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -1,6 +1,6 @@
1/* 1/*
2 * include/net/dsa.h - Driver for Distributed Switch Architecture switch chips 2 * include/net/dsa.h - Driver for Distributed Switch Architecture switch chips
3 * Copyright (c) 2008 Marvell Semiconductor 3 * Copyright (c) 2008-2009 Marvell Semiconductor
4 * 4 *
5 * This program is free software; you can redistribute it and/or modify 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 6 * it under the terms of the GNU General Public License as published by
@@ -11,23 +11,47 @@
11#ifndef __LINUX_NET_DSA_H 11#ifndef __LINUX_NET_DSA_H
12#define __LINUX_NET_DSA_H 12#define __LINUX_NET_DSA_H
13 13
14#define DSA_MAX_PORTS 12 14#define DSA_MAX_SWITCHES 4
15#define DSA_MAX_PORTS 12
16
17struct dsa_chip_data {
18 /*
19 * How to access the switch configuration registers.
20 */
21 struct device *mii_bus;
22 int sw_addr;
23
24 /*
25 * The names of the switch's ports. Use "cpu" to
26 * designate the switch port that the cpu is connected to,
27 * "dsa" to indicate that this port is a DSA link to
28 * another switch, NULL to indicate the port is unused,
29 * or any other string to indicate this is a physical port.
30 */
31 char *port_names[DSA_MAX_PORTS];
32
33 /*
34 * An array (with nr_chips elements) of which element [a]
35 * indicates which port on this switch should be used to
36 * send packets to that are destined for switch a. Can be
37 * NULL if there is only one switch chip.
38 */
39 s8 *rtable;
40};
15 41
16struct dsa_platform_data { 42struct dsa_platform_data {
17 /* 43 /*
18 * Reference to a Linux network interface that connects 44 * Reference to a Linux network interface that connects
19 * to the switch chip. 45 * to the root switch chip of the tree.
20 */ 46 */
21 struct device *netdev; 47 struct device *netdev;
22 48
23 /* 49 /*
24 * How to access the switch configuration registers, and 50 * Info structs describing each of the switch chips
25 * the names of the switch ports (use "cpu" to designate 51 * connected via this network interface.
26 * the switch port that the cpu is connected to).
27 */ 52 */
28 struct device *mii_bus; 53 int nr_chips;
29 int sw_addr; 54 struct dsa_chip_data *chip;
30 char *port_names[DSA_MAX_PORTS];
31}; 55};
32 56
33extern bool dsa_uses_dsa_tags(void *dsa_ptr); 57extern bool dsa_uses_dsa_tags(void *dsa_ptr);
diff --git a/include/net/ieee80211.h b/include/net/ieee80211.h
deleted file mode 100644
index adb7cf31f781..000000000000
--- a/include/net/ieee80211.h
+++ /dev/null
@@ -1,1185 +0,0 @@
1/*
2 * Merged with mainline ieee80211.h in Aug 2004. Original ieee802_11
3 * remains copyright by the original authors
4 *
5 * Portions of the merged code are based on Host AP (software wireless
6 * LAN access point) driver for Intersil Prism2/2.5/3.
7 *
8 * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen
9 * <j@w1.fi>
10 * Copyright (c) 2002-2003, Jouni Malinen <j@w1.fi>
11 *
12 * Adaption to a generic IEEE 802.11 stack by James Ketrenos
13 * <jketreno@linux.intel.com>
14 * Copyright (c) 2004-2005, Intel Corporation
15 *
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License version 2 as
18 * published by the Free Software Foundation. See README and COPYING for
19 * more details.
20 *
21 * API Version History
22 * 1.0.x -- Initial version
23 * 1.1.x -- Added radiotap, QoS, TIM, ieee80211_geo APIs,
24 * various structure changes, and crypto API init method
25 */
26#ifndef IEEE80211_H
27#define IEEE80211_H
28#include <linux/if_ether.h> /* ETH_ALEN */
29#include <linux/kernel.h> /* ARRAY_SIZE */
30#include <linux/wireless.h>
31#include <linux/ieee80211.h>
32
33#include <net/lib80211.h>
34
35#define IEEE80211_VERSION "git-1.1.13"
36
37#define IEEE80211_DATA_LEN 2304
38/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section
39 6.2.1.1.2.
40
41 The figure in section 7.1.2 suggests a body size of up to 2312
42 bytes is allowed, which is a bit confusing, I suspect this
43 represents the 2304 bytes of real data, plus a possible 8 bytes of
44 WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) */
45
46#define IEEE80211_1ADDR_LEN 10
47#define IEEE80211_2ADDR_LEN 16
48#define IEEE80211_3ADDR_LEN 24
49#define IEEE80211_4ADDR_LEN 30
50#define IEEE80211_FCS_LEN 4
51#define IEEE80211_HLEN (IEEE80211_4ADDR_LEN)
52#define IEEE80211_FRAME_LEN (IEEE80211_DATA_LEN + IEEE80211_HLEN)
53
54#define MIN_FRAG_THRESHOLD 256U
55#define MAX_FRAG_THRESHOLD 2346U
56
57/* Frame control field constants */
58#define IEEE80211_FCTL_VERS 0x0003
59#define IEEE80211_FCTL_FTYPE 0x000c
60#define IEEE80211_FCTL_STYPE 0x00f0
61#define IEEE80211_FCTL_TODS 0x0100
62#define IEEE80211_FCTL_FROMDS 0x0200
63#define IEEE80211_FCTL_MOREFRAGS 0x0400
64#define IEEE80211_FCTL_RETRY 0x0800
65#define IEEE80211_FCTL_PM 0x1000
66#define IEEE80211_FCTL_MOREDATA 0x2000
67#define IEEE80211_FCTL_PROTECTED 0x4000
68#define IEEE80211_FCTL_ORDER 0x8000
69
70#define IEEE80211_FTYPE_MGMT 0x0000
71#define IEEE80211_FTYPE_CTL 0x0004
72#define IEEE80211_FTYPE_DATA 0x0008
73
74/* management */
75#define IEEE80211_STYPE_ASSOC_REQ 0x0000
76#define IEEE80211_STYPE_ASSOC_RESP 0x0010
77#define IEEE80211_STYPE_REASSOC_REQ 0x0020
78#define IEEE80211_STYPE_REASSOC_RESP 0x0030
79#define IEEE80211_STYPE_PROBE_REQ 0x0040
80#define IEEE80211_STYPE_PROBE_RESP 0x0050
81#define IEEE80211_STYPE_BEACON 0x0080
82#define IEEE80211_STYPE_ATIM 0x0090
83#define IEEE80211_STYPE_DISASSOC 0x00A0
84#define IEEE80211_STYPE_AUTH 0x00B0
85#define IEEE80211_STYPE_DEAUTH 0x00C0
86#define IEEE80211_STYPE_ACTION 0x00D0
87
88/* control */
89#define IEEE80211_STYPE_PSPOLL 0x00A0
90#define IEEE80211_STYPE_RTS 0x00B0
91#define IEEE80211_STYPE_CTS 0x00C0
92#define IEEE80211_STYPE_ACK 0x00D0
93#define IEEE80211_STYPE_CFEND 0x00E0
94#define IEEE80211_STYPE_CFENDACK 0x00F0
95
96/* data */
97#define IEEE80211_STYPE_DATA 0x0000
98#define IEEE80211_STYPE_DATA_CFACK 0x0010
99#define IEEE80211_STYPE_DATA_CFPOLL 0x0020
100#define IEEE80211_STYPE_DATA_CFACKPOLL 0x0030
101#define IEEE80211_STYPE_NULLFUNC 0x0040
102#define IEEE80211_STYPE_CFACK 0x0050
103#define IEEE80211_STYPE_CFPOLL 0x0060
104#define IEEE80211_STYPE_CFACKPOLL 0x0070
105#define IEEE80211_STYPE_QOS_DATA 0x0080
106
107#define IEEE80211_SCTL_FRAG 0x000F
108#define IEEE80211_SCTL_SEQ 0xFFF0
109
110/* QOS control */
111#define IEEE80211_QCTL_TID 0x000F
112
113/* debug macros */
114
115#ifdef CONFIG_IEEE80211_DEBUG
116extern u32 ieee80211_debug_level;
117#define IEEE80211_DEBUG(level, fmt, args...) \
118do { if (ieee80211_debug_level & (level)) \
119 printk(KERN_DEBUG "ieee80211: %c %s " fmt, \
120 in_interrupt() ? 'I' : 'U', __func__ , ## args); } while (0)
121static inline bool ieee80211_ratelimit_debug(u32 level)
122{
123 return (ieee80211_debug_level & level) && net_ratelimit();
124}
125#else
126#define IEEE80211_DEBUG(level, fmt, args...) do {} while (0)
127static inline bool ieee80211_ratelimit_debug(u32 level)
128{
129 return false;
130}
131#endif /* CONFIG_IEEE80211_DEBUG */
132
133/*
134 * To use the debug system:
135 *
136 * If you are defining a new debug classification, simply add it to the #define
137 * list here in the form of:
138 *
139 * #define IEEE80211_DL_xxxx VALUE
140 *
141 * shifting value to the left one bit from the previous entry. xxxx should be
142 * the name of the classification (for example, WEP)
143 *
144 * You then need to either add a IEEE80211_xxxx_DEBUG() macro definition for your
145 * classification, or use IEEE80211_DEBUG(IEEE80211_DL_xxxx, ...) whenever you want
146 * to send output to that classification.
147 *
148 * To add your debug level to the list of levels seen when you perform
149 *
150 * % cat /proc/net/ieee80211/debug_level
151 *
152 * you simply need to add your entry to the ieee80211_debug_level array.
153 *
154 * If you do not see debug_level in /proc/net/ieee80211 then you do not have
155 * CONFIG_IEEE80211_DEBUG defined in your kernel configuration
156 *
157 */
158
159#define IEEE80211_DL_INFO (1<<0)
160#define IEEE80211_DL_WX (1<<1)
161#define IEEE80211_DL_SCAN (1<<2)
162#define IEEE80211_DL_STATE (1<<3)
163#define IEEE80211_DL_MGMT (1<<4)
164#define IEEE80211_DL_FRAG (1<<5)
165#define IEEE80211_DL_DROP (1<<7)
166
167#define IEEE80211_DL_TX (1<<8)
168#define IEEE80211_DL_RX (1<<9)
169#define IEEE80211_DL_QOS (1<<31)
170
171#define IEEE80211_ERROR(f, a...) printk(KERN_ERR "ieee80211: " f, ## a)
172#define IEEE80211_WARNING(f, a...) printk(KERN_WARNING "ieee80211: " f, ## a)
173#define IEEE80211_DEBUG_INFO(f, a...) IEEE80211_DEBUG(IEEE80211_DL_INFO, f, ## a)
174
175#define IEEE80211_DEBUG_WX(f, a...) IEEE80211_DEBUG(IEEE80211_DL_WX, f, ## a)
176#define IEEE80211_DEBUG_SCAN(f, a...) IEEE80211_DEBUG(IEEE80211_DL_SCAN, f, ## a)
177#define IEEE80211_DEBUG_STATE(f, a...) IEEE80211_DEBUG(IEEE80211_DL_STATE, f, ## a)
178#define IEEE80211_DEBUG_MGMT(f, a...) IEEE80211_DEBUG(IEEE80211_DL_MGMT, f, ## a)
179#define IEEE80211_DEBUG_FRAG(f, a...) IEEE80211_DEBUG(IEEE80211_DL_FRAG, f, ## a)
180#define IEEE80211_DEBUG_DROP(f, a...) IEEE80211_DEBUG(IEEE80211_DL_DROP, f, ## a)
181#define IEEE80211_DEBUG_TX(f, a...) IEEE80211_DEBUG(IEEE80211_DL_TX, f, ## a)
182#define IEEE80211_DEBUG_RX(f, a...) IEEE80211_DEBUG(IEEE80211_DL_RX, f, ## a)
183#define IEEE80211_DEBUG_QOS(f, a...) IEEE80211_DEBUG(IEEE80211_DL_QOS, f, ## a)
184#include <linux/netdevice.h>
185#include <linux/if_arp.h> /* ARPHRD_ETHER */
186
187#ifndef WIRELESS_SPY
188#define WIRELESS_SPY /* enable iwspy support */
189#endif
190#include <net/iw_handler.h> /* new driver API */
191
192#define ETH_P_PREAUTH 0x88C7 /* IEEE 802.11i pre-authentication */
193
194#ifndef ETH_P_80211_RAW
195#define ETH_P_80211_RAW (ETH_P_ECONET + 1)
196#endif
197
198/* IEEE 802.11 defines */
199
200#define P80211_OUI_LEN 3
201
202struct ieee80211_snap_hdr {
203
204 u8 dsap; /* always 0xAA */
205 u8 ssap; /* always 0xAA */
206 u8 ctrl; /* always 0x03 */
207 u8 oui[P80211_OUI_LEN]; /* organizational universal id */
208
209} __attribute__ ((packed));
210
211#define SNAP_SIZE sizeof(struct ieee80211_snap_hdr)
212
213#define WLAN_FC_GET_VERS(fc) ((fc) & IEEE80211_FCTL_VERS)
214#define WLAN_FC_GET_TYPE(fc) ((fc) & IEEE80211_FCTL_FTYPE)
215#define WLAN_FC_GET_STYPE(fc) ((fc) & IEEE80211_FCTL_STYPE)
216
217#define WLAN_GET_SEQ_FRAG(seq) ((seq) & IEEE80211_SCTL_FRAG)
218#define WLAN_GET_SEQ_SEQ(seq) (((seq) & IEEE80211_SCTL_SEQ) >> 4)
219
220/* Action categories - 802.11h */
221enum ieee80211_actioncategories {
222 WLAN_ACTION_SPECTRUM_MGMT = 0,
223 /* Reserved 1-127 */
224 /* Error 128-255 */
225};
226
227/* Action details - 802.11h */
228enum ieee80211_actiondetails {
229 WLAN_ACTION_CATEGORY_MEASURE_REQUEST = 0,
230 WLAN_ACTION_CATEGORY_MEASURE_REPORT = 1,
231 WLAN_ACTION_CATEGORY_TPC_REQUEST = 2,
232 WLAN_ACTION_CATEGORY_TPC_REPORT = 3,
233 WLAN_ACTION_CATEGORY_CHANNEL_SWITCH = 4,
234 /* 5 - 255 Reserved */
235};
236
237#define IEEE80211_STATMASK_SIGNAL (1<<0)
238#define IEEE80211_STATMASK_RSSI (1<<1)
239#define IEEE80211_STATMASK_NOISE (1<<2)
240#define IEEE80211_STATMASK_RATE (1<<3)
241#define IEEE80211_STATMASK_WEMASK 0x7
242
243#define IEEE80211_CCK_MODULATION (1<<0)
244#define IEEE80211_OFDM_MODULATION (1<<1)
245
246#define IEEE80211_24GHZ_BAND (1<<0)
247#define IEEE80211_52GHZ_BAND (1<<1)
248
249#define IEEE80211_CCK_RATE_1MB 0x02
250#define IEEE80211_CCK_RATE_2MB 0x04
251#define IEEE80211_CCK_RATE_5MB 0x0B
252#define IEEE80211_CCK_RATE_11MB 0x16
253#define IEEE80211_OFDM_RATE_6MB 0x0C
254#define IEEE80211_OFDM_RATE_9MB 0x12
255#define IEEE80211_OFDM_RATE_12MB 0x18
256#define IEEE80211_OFDM_RATE_18MB 0x24
257#define IEEE80211_OFDM_RATE_24MB 0x30
258#define IEEE80211_OFDM_RATE_36MB 0x48
259#define IEEE80211_OFDM_RATE_48MB 0x60
260#define IEEE80211_OFDM_RATE_54MB 0x6C
261#define IEEE80211_BASIC_RATE_MASK 0x80
262
263#define IEEE80211_CCK_RATE_1MB_MASK (1<<0)
264#define IEEE80211_CCK_RATE_2MB_MASK (1<<1)
265#define IEEE80211_CCK_RATE_5MB_MASK (1<<2)
266#define IEEE80211_CCK_RATE_11MB_MASK (1<<3)
267#define IEEE80211_OFDM_RATE_6MB_MASK (1<<4)
268#define IEEE80211_OFDM_RATE_9MB_MASK (1<<5)
269#define IEEE80211_OFDM_RATE_12MB_MASK (1<<6)
270#define IEEE80211_OFDM_RATE_18MB_MASK (1<<7)
271#define IEEE80211_OFDM_RATE_24MB_MASK (1<<8)
272#define IEEE80211_OFDM_RATE_36MB_MASK (1<<9)
273#define IEEE80211_OFDM_RATE_48MB_MASK (1<<10)
274#define IEEE80211_OFDM_RATE_54MB_MASK (1<<11)
275
276#define IEEE80211_CCK_RATES_MASK 0x0000000F
277#define IEEE80211_CCK_BASIC_RATES_MASK (IEEE80211_CCK_RATE_1MB_MASK | \
278 IEEE80211_CCK_RATE_2MB_MASK)
279#define IEEE80211_CCK_DEFAULT_RATES_MASK (IEEE80211_CCK_BASIC_RATES_MASK | \
280 IEEE80211_CCK_RATE_5MB_MASK | \
281 IEEE80211_CCK_RATE_11MB_MASK)
282
283#define IEEE80211_OFDM_RATES_MASK 0x00000FF0
284#define IEEE80211_OFDM_BASIC_RATES_MASK (IEEE80211_OFDM_RATE_6MB_MASK | \
285 IEEE80211_OFDM_RATE_12MB_MASK | \
286 IEEE80211_OFDM_RATE_24MB_MASK)
287#define IEEE80211_OFDM_DEFAULT_RATES_MASK (IEEE80211_OFDM_BASIC_RATES_MASK | \
288 IEEE80211_OFDM_RATE_9MB_MASK | \
289 IEEE80211_OFDM_RATE_18MB_MASK | \
290 IEEE80211_OFDM_RATE_36MB_MASK | \
291 IEEE80211_OFDM_RATE_48MB_MASK | \
292 IEEE80211_OFDM_RATE_54MB_MASK)
293#define IEEE80211_DEFAULT_RATES_MASK (IEEE80211_OFDM_DEFAULT_RATES_MASK | \
294 IEEE80211_CCK_DEFAULT_RATES_MASK)
295
296#define IEEE80211_NUM_OFDM_RATES 8
297#define IEEE80211_NUM_CCK_RATES 4
298#define IEEE80211_OFDM_SHIFT_MASK_A 4
299
300/* NOTE: This data is for statistical purposes; not all hardware provides this
301 * information for frames received.
302 * For ieee80211_rx_mgt, you need to set at least the 'len' parameter.
303 */
304struct ieee80211_rx_stats {
305 u32 mac_time;
306 s8 rssi;
307 u8 signal;
308 u8 noise;
309 u16 rate; /* in 100 kbps */
310 u8 received_channel;
311 u8 control;
312 u8 mask;
313 u8 freq;
314 u16 len;
315 u64 tsf;
316 u32 beacon_time;
317};
318
319/* IEEE 802.11 requires that STA supports concurrent reception of at least
320 * three fragmented frames. This define can be increased to support more
321 * concurrent frames, but it should be noted that each entry can consume about
322 * 2 kB of RAM and increasing cache size will slow down frame reassembly. */
323#define IEEE80211_FRAG_CACHE_LEN 4
324
325struct ieee80211_frag_entry {
326 unsigned long first_frag_time;
327 unsigned int seq;
328 unsigned int last_frag;
329 struct sk_buff *skb;
330 u8 src_addr[ETH_ALEN];
331 u8 dst_addr[ETH_ALEN];
332};
333
334struct ieee80211_stats {
335 unsigned int tx_unicast_frames;
336 unsigned int tx_multicast_frames;
337 unsigned int tx_fragments;
338 unsigned int tx_unicast_octets;
339 unsigned int tx_multicast_octets;
340 unsigned int tx_deferred_transmissions;
341 unsigned int tx_single_retry_frames;
342 unsigned int tx_multiple_retry_frames;
343 unsigned int tx_retry_limit_exceeded;
344 unsigned int tx_discards;
345 unsigned int rx_unicast_frames;
346 unsigned int rx_multicast_frames;
347 unsigned int rx_fragments;
348 unsigned int rx_unicast_octets;
349 unsigned int rx_multicast_octets;
350 unsigned int rx_fcs_errors;
351 unsigned int rx_discards_no_buffer;
352 unsigned int tx_discards_wrong_sa;
353 unsigned int rx_discards_undecryptable;
354 unsigned int rx_message_in_msg_fragments;
355 unsigned int rx_message_in_bad_msg_fragments;
356};
357
358struct ieee80211_device;
359
360#define SEC_KEY_1 (1<<0)
361#define SEC_KEY_2 (1<<1)
362#define SEC_KEY_3 (1<<2)
363#define SEC_KEY_4 (1<<3)
364#define SEC_ACTIVE_KEY (1<<4)
365#define SEC_AUTH_MODE (1<<5)
366#define SEC_UNICAST_GROUP (1<<6)
367#define SEC_LEVEL (1<<7)
368#define SEC_ENABLED (1<<8)
369#define SEC_ENCRYPT (1<<9)
370
371#define SEC_LEVEL_0 0 /* None */
372#define SEC_LEVEL_1 1 /* WEP 40 and 104 bit */
373#define SEC_LEVEL_2 2 /* Level 1 + TKIP */
374#define SEC_LEVEL_2_CKIP 3 /* Level 1 + CKIP */
375#define SEC_LEVEL_3 4 /* Level 2 + CCMP */
376
377#define SEC_ALG_NONE 0
378#define SEC_ALG_WEP 1
379#define SEC_ALG_TKIP 2
380#define SEC_ALG_CCMP 3
381
382#define WEP_KEYS 4
383#define WEP_KEY_LEN 13
384#define SCM_KEY_LEN 32
385#define SCM_TEMPORAL_KEY_LENGTH 16
386
387struct ieee80211_security {
388 u16 active_key:2, enabled:1, unicast_uses_group:1, encrypt:1;
389 u8 auth_mode;
390 u8 encode_alg[WEP_KEYS];
391 u8 key_sizes[WEP_KEYS];
392 u8 keys[WEP_KEYS][SCM_KEY_LEN];
393 u8 level;
394 u16 flags;
395} __attribute__ ((packed));
396
397/*
398
399 802.11 data frame from AP
400
401 ,-------------------------------------------------------------------.
402Bytes | 2 | 2 | 6 | 6 | 6 | 2 | 0..2312 | 4 |
403 |------|------|---------|---------|---------|------|---------|------|
404Desc. | ctrl | dura | DA/RA | TA | SA | Sequ | frame | fcs |
405 | | tion | (BSSID) | | | ence | data | |
406 `-------------------------------------------------------------------'
407
408Total: 28-2340 bytes
409
410*/
411
412#define BEACON_PROBE_SSID_ID_POSITION 12
413
414/* Management Frame Information Element Types */
415enum ieee80211_mfie {
416 MFIE_TYPE_SSID = 0,
417 MFIE_TYPE_RATES = 1,
418 MFIE_TYPE_FH_SET = 2,
419 MFIE_TYPE_DS_SET = 3,
420 MFIE_TYPE_CF_SET = 4,
421 MFIE_TYPE_TIM = 5,
422 MFIE_TYPE_IBSS_SET = 6,
423 MFIE_TYPE_COUNTRY = 7,
424 MFIE_TYPE_HOP_PARAMS = 8,
425 MFIE_TYPE_HOP_TABLE = 9,
426 MFIE_TYPE_REQUEST = 10,
427 MFIE_TYPE_CHALLENGE = 16,
428 MFIE_TYPE_POWER_CONSTRAINT = 32,
429 MFIE_TYPE_POWER_CAPABILITY = 33,
430 MFIE_TYPE_TPC_REQUEST = 34,
431 MFIE_TYPE_TPC_REPORT = 35,
432 MFIE_TYPE_SUPP_CHANNELS = 36,
433 MFIE_TYPE_CSA = 37,
434 MFIE_TYPE_MEASURE_REQUEST = 38,
435 MFIE_TYPE_MEASURE_REPORT = 39,
436 MFIE_TYPE_QUIET = 40,
437 MFIE_TYPE_IBSS_DFS = 41,
438 MFIE_TYPE_ERP_INFO = 42,
439 MFIE_TYPE_RSN = 48,
440 MFIE_TYPE_RATES_EX = 50,
441 MFIE_TYPE_GENERIC = 221,
442 MFIE_TYPE_QOS_PARAMETER = 222,
443};
444
445struct ieee80211_hdr_1addr {
446 __le16 frame_ctl;
447 __le16 duration_id;
448 u8 addr1[ETH_ALEN];
449 u8 payload[0];
450} __attribute__ ((packed));
451
452struct ieee80211_hdr_2addr {
453 __le16 frame_ctl;
454 __le16 duration_id;
455 u8 addr1[ETH_ALEN];
456 u8 addr2[ETH_ALEN];
457 u8 payload[0];
458} __attribute__ ((packed));
459
460struct ieee80211_hdr_3addr {
461 __le16 frame_ctl;
462 __le16 duration_id;
463 u8 addr1[ETH_ALEN];
464 u8 addr2[ETH_ALEN];
465 u8 addr3[ETH_ALEN];
466 __le16 seq_ctl;
467 u8 payload[0];
468} __attribute__ ((packed));
469
470struct ieee80211_hdr_4addr {
471 __le16 frame_ctl;
472 __le16 duration_id;
473 u8 addr1[ETH_ALEN];
474 u8 addr2[ETH_ALEN];
475 u8 addr3[ETH_ALEN];
476 __le16 seq_ctl;
477 u8 addr4[ETH_ALEN];
478 u8 payload[0];
479} __attribute__ ((packed));
480
481struct ieee80211_hdr_3addrqos {
482 __le16 frame_ctl;
483 __le16 duration_id;
484 u8 addr1[ETH_ALEN];
485 u8 addr2[ETH_ALEN];
486 u8 addr3[ETH_ALEN];
487 __le16 seq_ctl;
488 u8 payload[0];
489 __le16 qos_ctl;
490} __attribute__ ((packed));
491
492struct ieee80211_info_element {
493 u8 id;
494 u8 len;
495 u8 data[0];
496} __attribute__ ((packed));
497
498/*
499 * These are the data types that can make up management packets
500 *
501 u16 auth_algorithm;
502 u16 auth_sequence;
503 u16 beacon_interval;
504 u16 capability;
505 u8 current_ap[ETH_ALEN];
506 u16 listen_interval;
507 struct {
508 u16 association_id:14, reserved:2;
509 } __attribute__ ((packed));
510 u32 time_stamp[2];
511 u16 reason;
512 u16 status;
513*/
514
515struct ieee80211_auth {
516 struct ieee80211_hdr_3addr header;
517 __le16 algorithm;
518 __le16 transaction;
519 __le16 status;
520 /* challenge */
521 struct ieee80211_info_element info_element[0];
522} __attribute__ ((packed));
523
524struct ieee80211_channel_switch {
525 u8 id;
526 u8 len;
527 u8 mode;
528 u8 channel;
529 u8 count;
530} __attribute__ ((packed));
531
532struct ieee80211_action {
533 struct ieee80211_hdr_3addr header;
534 u8 category;
535 u8 action;
536 union {
537 struct ieee80211_action_exchange {
538 u8 token;
539 struct ieee80211_info_element info_element[0];
540 } exchange;
541 struct ieee80211_channel_switch channel_switch;
542
543 } format;
544} __attribute__ ((packed));
545
546struct ieee80211_disassoc {
547 struct ieee80211_hdr_3addr header;
548 __le16 reason;
549} __attribute__ ((packed));
550
551/* Alias deauth for disassoc */
552#define ieee80211_deauth ieee80211_disassoc
553
554struct ieee80211_probe_request {
555 struct ieee80211_hdr_3addr header;
556 /* SSID, supported rates */
557 struct ieee80211_info_element info_element[0];
558} __attribute__ ((packed));
559
560struct ieee80211_probe_response {
561 struct ieee80211_hdr_3addr header;
562 __le32 time_stamp[2];
563 __le16 beacon_interval;
564 __le16 capability;
565 /* SSID, supported rates, FH params, DS params,
566 * CF params, IBSS params, TIM (if beacon), RSN */
567 struct ieee80211_info_element info_element[0];
568} __attribute__ ((packed));
569
570/* Alias beacon for probe_response */
571#define ieee80211_beacon ieee80211_probe_response
572
573struct ieee80211_assoc_request {
574 struct ieee80211_hdr_3addr header;
575 __le16 capability;
576 __le16 listen_interval;
577 /* SSID, supported rates, RSN */
578 struct ieee80211_info_element info_element[0];
579} __attribute__ ((packed));
580
581struct ieee80211_reassoc_request {
582 struct ieee80211_hdr_3addr header;
583 __le16 capability;
584 __le16 listen_interval;
585 u8 current_ap[ETH_ALEN];
586 struct ieee80211_info_element info_element[0];
587} __attribute__ ((packed));
588
589struct ieee80211_assoc_response {
590 struct ieee80211_hdr_3addr header;
591 __le16 capability;
592 __le16 status;
593 __le16 aid;
594 /* supported rates */
595 struct ieee80211_info_element info_element[0];
596} __attribute__ ((packed));
597
598struct ieee80211_txb {
599 u8 nr_frags;
600 u8 encrypted;
601 u8 rts_included;
602 u8 reserved;
603 u16 frag_size;
604 u16 payload_size;
605 struct sk_buff *fragments[0];
606};
607
608/* SWEEP TABLE ENTRIES NUMBER */
609#define MAX_SWEEP_TAB_ENTRIES 42
610#define MAX_SWEEP_TAB_ENTRIES_PER_PACKET 7
611/* MAX_RATES_LENGTH needs to be 12. The spec says 8, and many APs
612 * only use 8, and then use extended rates for the remaining supported
613 * rates. Other APs, however, stick all of their supported rates on the
614 * main rates information element... */
615#define MAX_RATES_LENGTH ((u8)12)
616#define MAX_RATES_EX_LENGTH ((u8)16)
617#define MAX_NETWORK_COUNT 128
618
619#define CRC_LENGTH 4U
620
621#define MAX_WPA_IE_LEN 64
622
623#define NETWORK_HAS_OFDM (1<<1)
624#define NETWORK_HAS_CCK (1<<2)
625
626/* QoS structure */
627#define NETWORK_HAS_QOS_PARAMETERS (1<<3)
628#define NETWORK_HAS_QOS_INFORMATION (1<<4)
629#define NETWORK_HAS_QOS_MASK (NETWORK_HAS_QOS_PARAMETERS | \
630 NETWORK_HAS_QOS_INFORMATION)
631
632/* 802.11h */
633#define NETWORK_HAS_POWER_CONSTRAINT (1<<5)
634#define NETWORK_HAS_CSA (1<<6)
635#define NETWORK_HAS_QUIET (1<<7)
636#define NETWORK_HAS_IBSS_DFS (1<<8)
637#define NETWORK_HAS_TPC_REPORT (1<<9)
638
639#define NETWORK_HAS_ERP_VALUE (1<<10)
640
641#define QOS_QUEUE_NUM 4
642#define QOS_OUI_LEN 3
643#define QOS_OUI_TYPE 2
644#define QOS_ELEMENT_ID 221
645#define QOS_OUI_INFO_SUB_TYPE 0
646#define QOS_OUI_PARAM_SUB_TYPE 1
647#define QOS_VERSION_1 1
648#define QOS_AIFSN_MIN_VALUE 2
649
650struct ieee80211_qos_information_element {
651 u8 elementID;
652 u8 length;
653 u8 qui[QOS_OUI_LEN];
654 u8 qui_type;
655 u8 qui_subtype;
656 u8 version;
657 u8 ac_info;
658} __attribute__ ((packed));
659
660struct ieee80211_qos_ac_parameter {
661 u8 aci_aifsn;
662 u8 ecw_min_max;
663 __le16 tx_op_limit;
664} __attribute__ ((packed));
665
666struct ieee80211_qos_parameter_info {
667 struct ieee80211_qos_information_element info_element;
668 u8 reserved;
669 struct ieee80211_qos_ac_parameter ac_params_record[QOS_QUEUE_NUM];
670} __attribute__ ((packed));
671
672struct ieee80211_qos_parameters {
673 __le16 cw_min[QOS_QUEUE_NUM];
674 __le16 cw_max[QOS_QUEUE_NUM];
675 u8 aifs[QOS_QUEUE_NUM];
676 u8 flag[QOS_QUEUE_NUM];
677 __le16 tx_op_limit[QOS_QUEUE_NUM];
678} __attribute__ ((packed));
679
680struct ieee80211_qos_data {
681 struct ieee80211_qos_parameters parameters;
682 int active;
683 int supported;
684 u8 param_count;
685 u8 old_param_count;
686};
687
688struct ieee80211_tim_parameters {
689 u8 tim_count;
690 u8 tim_period;
691} __attribute__ ((packed));
692
693/*******************************************************/
694
695enum { /* ieee80211_basic_report.map */
696 IEEE80211_BASIC_MAP_BSS = (1 << 0),
697 IEEE80211_BASIC_MAP_OFDM = (1 << 1),
698 IEEE80211_BASIC_MAP_UNIDENTIFIED = (1 << 2),
699 IEEE80211_BASIC_MAP_RADAR = (1 << 3),
700 IEEE80211_BASIC_MAP_UNMEASURED = (1 << 4),
701 /* Bits 5-7 are reserved */
702
703};
704struct ieee80211_basic_report {
705 u8 channel;
706 __le64 start_time;
707 __le16 duration;
708 u8 map;
709} __attribute__ ((packed));
710
711enum { /* ieee80211_measurement_request.mode */
712 /* Bit 0 is reserved */
713 IEEE80211_MEASUREMENT_ENABLE = (1 << 1),
714 IEEE80211_MEASUREMENT_REQUEST = (1 << 2),
715 IEEE80211_MEASUREMENT_REPORT = (1 << 3),
716 /* Bits 4-7 are reserved */
717};
718
719enum {
720 IEEE80211_REPORT_BASIC = 0, /* required */
721 IEEE80211_REPORT_CCA = 1, /* optional */
722 IEEE80211_REPORT_RPI = 2, /* optional */
723 /* 3-255 reserved */
724};
725
726struct ieee80211_measurement_params {
727 u8 channel;
728 __le64 start_time;
729 __le16 duration;
730} __attribute__ ((packed));
731
732struct ieee80211_measurement_request {
733 struct ieee80211_info_element ie;
734 u8 token;
735 u8 mode;
736 u8 type;
737 struct ieee80211_measurement_params params[0];
738} __attribute__ ((packed));
739
740struct ieee80211_measurement_report {
741 struct ieee80211_info_element ie;
742 u8 token;
743 u8 mode;
744 u8 type;
745 union {
746 struct ieee80211_basic_report basic[0];
747 } u;
748} __attribute__ ((packed));
749
750struct ieee80211_tpc_report {
751 u8 transmit_power;
752 u8 link_margin;
753} __attribute__ ((packed));
754
755struct ieee80211_channel_map {
756 u8 channel;
757 u8 map;
758} __attribute__ ((packed));
759
760struct ieee80211_ibss_dfs {
761 struct ieee80211_info_element ie;
762 u8 owner[ETH_ALEN];
763 u8 recovery_interval;
764 struct ieee80211_channel_map channel_map[0];
765};
766
767struct ieee80211_csa {
768 u8 mode;
769 u8 channel;
770 u8 count;
771} __attribute__ ((packed));
772
773struct ieee80211_quiet {
774 u8 count;
775 u8 period;
776 u8 duration;
777 u8 offset;
778} __attribute__ ((packed));
779
780struct ieee80211_network {
781 /* These entries are used to identify a unique network */
782 u8 bssid[ETH_ALEN];
783 u8 channel;
784 /* Ensure null-terminated for any debug msgs */
785 u8 ssid[IW_ESSID_MAX_SIZE + 1];
786 u8 ssid_len;
787
788 struct ieee80211_qos_data qos_data;
789
790 /* These are network statistics */
791 struct ieee80211_rx_stats stats;
792 u16 capability;
793 u8 rates[MAX_RATES_LENGTH];
794 u8 rates_len;
795 u8 rates_ex[MAX_RATES_EX_LENGTH];
796 u8 rates_ex_len;
797 unsigned long last_scanned;
798 u8 mode;
799 u32 flags;
800 u32 last_associate;
801 u32 time_stamp[2];
802 u16 beacon_interval;
803 u16 listen_interval;
804 u16 atim_window;
805 u8 erp_value;
806 u8 wpa_ie[MAX_WPA_IE_LEN];
807 size_t wpa_ie_len;
808 u8 rsn_ie[MAX_WPA_IE_LEN];
809 size_t rsn_ie_len;
810 struct ieee80211_tim_parameters tim;
811
812 /* 802.11h info */
813
814 /* Power Constraint - mandatory if spctrm mgmt required */
815 u8 power_constraint;
816
817 /* TPC Report - mandatory if spctrm mgmt required */
818 struct ieee80211_tpc_report tpc_report;
819
820 /* IBSS DFS - mandatory if spctrm mgmt required and IBSS
821 * NOTE: This is variable length and so must be allocated dynamically */
822 struct ieee80211_ibss_dfs *ibss_dfs;
823
824 /* Channel Switch Announcement - optional if spctrm mgmt required */
825 struct ieee80211_csa csa;
826
827 /* Quiet - optional if spctrm mgmt required */
828 struct ieee80211_quiet quiet;
829
830 struct list_head list;
831};
832
833enum ieee80211_state {
834 IEEE80211_UNINITIALIZED = 0,
835 IEEE80211_INITIALIZED,
836 IEEE80211_ASSOCIATING,
837 IEEE80211_ASSOCIATED,
838 IEEE80211_AUTHENTICATING,
839 IEEE80211_AUTHENTICATED,
840 IEEE80211_SHUTDOWN
841};
842
843#define DEFAULT_MAX_SCAN_AGE (15 * HZ)
844#define DEFAULT_FTS 2346
845
846#define CFG_IEEE80211_RESERVE_FCS (1<<0)
847#define CFG_IEEE80211_COMPUTE_FCS (1<<1)
848#define CFG_IEEE80211_RTS (1<<2)
849
850#define IEEE80211_24GHZ_MIN_CHANNEL 1
851#define IEEE80211_24GHZ_MAX_CHANNEL 14
852#define IEEE80211_24GHZ_CHANNELS (IEEE80211_24GHZ_MAX_CHANNEL - \
853 IEEE80211_24GHZ_MIN_CHANNEL + 1)
854
855#define IEEE80211_52GHZ_MIN_CHANNEL 34
856#define IEEE80211_52GHZ_MAX_CHANNEL 165
857#define IEEE80211_52GHZ_CHANNELS (IEEE80211_52GHZ_MAX_CHANNEL - \
858 IEEE80211_52GHZ_MIN_CHANNEL + 1)
859
860enum {
861 IEEE80211_CH_PASSIVE_ONLY = (1 << 0),
862 IEEE80211_CH_80211H_RULES = (1 << 1),
863 IEEE80211_CH_B_ONLY = (1 << 2),
864 IEEE80211_CH_NO_IBSS = (1 << 3),
865 IEEE80211_CH_UNIFORM_SPREADING = (1 << 4),
866 IEEE80211_CH_RADAR_DETECT = (1 << 5),
867 IEEE80211_CH_INVALID = (1 << 6),
868};
869
870struct ieee80211_channel {
871 u32 freq; /* in MHz */
872 u8 channel;
873 u8 flags;
874 u8 max_power; /* in dBm */
875};
876
877struct ieee80211_geo {
878 u8 name[4];
879 u8 bg_channels;
880 u8 a_channels;
881 struct ieee80211_channel bg[IEEE80211_24GHZ_CHANNELS];
882 struct ieee80211_channel a[IEEE80211_52GHZ_CHANNELS];
883};
884
885struct ieee80211_device {
886 struct net_device *dev;
887 struct ieee80211_security sec;
888
889 /* Bookkeeping structures */
890 struct net_device_stats stats;
891 struct ieee80211_stats ieee_stats;
892
893 struct ieee80211_geo geo;
894
895 /* Probe / Beacon management */
896 struct list_head network_free_list;
897 struct list_head network_list;
898 struct ieee80211_network *networks;
899 int scans;
900 int scan_age;
901
902 int iw_mode; /* operating mode (IW_MODE_*) */
903 struct iw_spy_data spy_data; /* iwspy support */
904
905 spinlock_t lock;
906
907 int tx_headroom; /* Set to size of any additional room needed at front
908 * of allocated Tx SKBs */
909 u32 config;
910
911 /* WEP and other encryption related settings at the device level */
912 int open_wep; /* Set to 1 to allow unencrypted frames */
913
914 int reset_on_keychange; /* Set to 1 if the HW needs to be reset on
915 * WEP key changes */
916
917 /* If the host performs {en,de}cryption, then set to 1 */
918 int host_encrypt;
919 int host_encrypt_msdu;
920 int host_decrypt;
921 /* host performs multicast decryption */
922 int host_mc_decrypt;
923
924 /* host should strip IV and ICV from protected frames */
925 /* meaningful only when hardware decryption is being used */
926 int host_strip_iv_icv;
927
928 int host_open_frag;
929 int host_build_iv;
930 int ieee802_1x; /* is IEEE 802.1X used */
931
932 /* WPA data */
933 int wpa_enabled;
934 int drop_unencrypted;
935 int privacy_invoked;
936 size_t wpa_ie_len;
937 u8 *wpa_ie;
938
939 struct lib80211_crypt_info crypt_info;
940
941 int bcrx_sta_key; /* use individual keys to override default keys even
942 * with RX of broad/multicast frames */
943
944 /* Fragmentation structures */
945 struct ieee80211_frag_entry frag_cache[IEEE80211_FRAG_CACHE_LEN];
946 unsigned int frag_next_idx;
947 u16 fts; /* Fragmentation Threshold */
948 u16 rts; /* RTS threshold */
949
950 /* Association info */
951 u8 bssid[ETH_ALEN];
952
953 enum ieee80211_state state;
954
955 int mode; /* A, B, G */
956 int modulation; /* CCK, OFDM */
957 int freq_band; /* 2.4Ghz, 5.2Ghz, Mixed */
958 int abg_true; /* ABG flag */
959
960 int perfect_rssi;
961 int worst_rssi;
962
963 u16 prev_seq_ctl; /* used to drop duplicate frames */
964
965 /* Callback functions */
966 void (*set_security) (struct net_device * dev,
967 struct ieee80211_security * sec);
968 int (*hard_start_xmit) (struct ieee80211_txb * txb,
969 struct net_device * dev, int pri);
970 int (*reset_port) (struct net_device * dev);
971 int (*is_queue_full) (struct net_device * dev, int pri);
972
973 int (*handle_management) (struct net_device * dev,
974 struct ieee80211_network * network, u16 type);
975 int (*is_qos_active) (struct net_device *dev, struct sk_buff *skb);
976
977 /* Typical STA methods */
978 int (*handle_auth) (struct net_device * dev,
979 struct ieee80211_auth * auth);
980 int (*handle_deauth) (struct net_device * dev,
981 struct ieee80211_deauth * auth);
982 int (*handle_action) (struct net_device * dev,
983 struct ieee80211_action * action,
984 struct ieee80211_rx_stats * stats);
985 int (*handle_disassoc) (struct net_device * dev,
986 struct ieee80211_disassoc * assoc);
987 int (*handle_beacon) (struct net_device * dev,
988 struct ieee80211_beacon * beacon,
989 struct ieee80211_network * network);
990 int (*handle_probe_response) (struct net_device * dev,
991 struct ieee80211_probe_response * resp,
992 struct ieee80211_network * network);
993 int (*handle_probe_request) (struct net_device * dev,
994 struct ieee80211_probe_request * req,
995 struct ieee80211_rx_stats * stats);
996 int (*handle_assoc_response) (struct net_device * dev,
997 struct ieee80211_assoc_response * resp,
998 struct ieee80211_network * network);
999
1000 /* Typical AP methods */
1001 int (*handle_assoc_request) (struct net_device * dev);
1002 int (*handle_reassoc_request) (struct net_device * dev,
1003 struct ieee80211_reassoc_request * req);
1004
1005 /* This must be the last item so that it points to the data
1006 * allocated beyond this structure by alloc_ieee80211 */
1007 u8 priv[0];
1008};
1009
1010#define IEEE_A (1<<0)
1011#define IEEE_B (1<<1)
1012#define IEEE_G (1<<2)
1013#define IEEE_MODE_MASK (IEEE_A|IEEE_B|IEEE_G)
1014
1015static inline void *ieee80211_priv(struct net_device *dev)
1016{
1017 return ((struct ieee80211_device *)netdev_priv(dev))->priv;
1018}
1019
1020static inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee,
1021 int mode)
1022{
1023 /*
1024 * It is possible for both access points and our device to support
1025 * combinations of modes, so as long as there is one valid combination
1026 * of ap/device supported modes, then return success
1027 *
1028 */
1029 if ((mode & IEEE_A) &&
1030 (ieee->modulation & IEEE80211_OFDM_MODULATION) &&
1031 (ieee->freq_band & IEEE80211_52GHZ_BAND))
1032 return 1;
1033
1034 if ((mode & IEEE_G) &&
1035 (ieee->modulation & IEEE80211_OFDM_MODULATION) &&
1036 (ieee->freq_band & IEEE80211_24GHZ_BAND))
1037 return 1;
1038
1039 if ((mode & IEEE_B) &&
1040 (ieee->modulation & IEEE80211_CCK_MODULATION) &&
1041 (ieee->freq_band & IEEE80211_24GHZ_BAND))
1042 return 1;
1043
1044 return 0;
1045}
1046
1047static inline int ieee80211_get_hdrlen(u16 fc)
1048{
1049 int hdrlen = IEEE80211_3ADDR_LEN;
1050 u16 stype = WLAN_FC_GET_STYPE(fc);
1051
1052 switch (WLAN_FC_GET_TYPE(fc)) {
1053 case IEEE80211_FTYPE_DATA:
1054 if ((fc & IEEE80211_FCTL_FROMDS) && (fc & IEEE80211_FCTL_TODS))
1055 hdrlen = IEEE80211_4ADDR_LEN;
1056 if (stype & IEEE80211_STYPE_QOS_DATA)
1057 hdrlen += 2;
1058 break;
1059 case IEEE80211_FTYPE_CTL:
1060 switch (WLAN_FC_GET_STYPE(fc)) {
1061 case IEEE80211_STYPE_CTS:
1062 case IEEE80211_STYPE_ACK:
1063 hdrlen = IEEE80211_1ADDR_LEN;
1064 break;
1065 default:
1066 hdrlen = IEEE80211_2ADDR_LEN;
1067 break;
1068 }
1069 break;
1070 }
1071
1072 return hdrlen;
1073}
1074
1075static inline u8 *ieee80211_get_payload(struct ieee80211_hdr *hdr)
1076{
1077 switch (ieee80211_get_hdrlen(le16_to_cpu(hdr->frame_control))) {
1078 case IEEE80211_1ADDR_LEN:
1079 return ((struct ieee80211_hdr_1addr *)hdr)->payload;
1080 case IEEE80211_2ADDR_LEN:
1081 return ((struct ieee80211_hdr_2addr *)hdr)->payload;
1082 case IEEE80211_3ADDR_LEN:
1083 return ((struct ieee80211_hdr_3addr *)hdr)->payload;
1084 case IEEE80211_4ADDR_LEN:
1085 return ((struct ieee80211_hdr_4addr *)hdr)->payload;
1086 }
1087 return NULL;
1088}
1089
1090static inline int ieee80211_is_ofdm_rate(u8 rate)
1091{
1092 switch (rate & ~IEEE80211_BASIC_RATE_MASK) {
1093 case IEEE80211_OFDM_RATE_6MB:
1094 case IEEE80211_OFDM_RATE_9MB:
1095 case IEEE80211_OFDM_RATE_12MB:
1096 case IEEE80211_OFDM_RATE_18MB:
1097 case IEEE80211_OFDM_RATE_24MB:
1098 case IEEE80211_OFDM_RATE_36MB:
1099 case IEEE80211_OFDM_RATE_48MB:
1100 case IEEE80211_OFDM_RATE_54MB:
1101 return 1;
1102 }
1103 return 0;
1104}
1105
1106static inline int ieee80211_is_cck_rate(u8 rate)
1107{
1108 switch (rate & ~IEEE80211_BASIC_RATE_MASK) {
1109 case IEEE80211_CCK_RATE_1MB:
1110 case IEEE80211_CCK_RATE_2MB:
1111 case IEEE80211_CCK_RATE_5MB:
1112 case IEEE80211_CCK_RATE_11MB:
1113 return 1;
1114 }
1115 return 0;
1116}
1117
1118/* ieee80211.c */
1119extern void free_ieee80211(struct net_device *dev);
1120extern struct net_device *alloc_ieee80211(int sizeof_priv);
1121
1122extern int ieee80211_set_encryption(struct ieee80211_device *ieee);
1123
1124/* ieee80211_tx.c */
1125extern int ieee80211_xmit(struct sk_buff *skb, struct net_device *dev);
1126extern void ieee80211_txb_free(struct ieee80211_txb *);
1127
1128/* ieee80211_rx.c */
1129extern void ieee80211_rx_any(struct ieee80211_device *ieee,
1130 struct sk_buff *skb, struct ieee80211_rx_stats *stats);
1131extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
1132 struct ieee80211_rx_stats *rx_stats);
1133/* make sure to set stats->len */
1134extern void ieee80211_rx_mgt(struct ieee80211_device *ieee,
1135 struct ieee80211_hdr_4addr *header,
1136 struct ieee80211_rx_stats *stats);
1137extern void ieee80211_network_reset(struct ieee80211_network *network);
1138
1139/* ieee80211_geo.c */
1140extern const struct ieee80211_geo *ieee80211_get_geo(struct ieee80211_device
1141 *ieee);
1142extern int ieee80211_set_geo(struct ieee80211_device *ieee,
1143 const struct ieee80211_geo *geo);
1144
1145extern int ieee80211_is_valid_channel(struct ieee80211_device *ieee,
1146 u8 channel);
1147extern int ieee80211_channel_to_index(struct ieee80211_device *ieee,
1148 u8 channel);
1149extern u8 ieee80211_freq_to_channel(struct ieee80211_device *ieee, u32 freq);
1150extern u8 ieee80211_get_channel_flags(struct ieee80211_device *ieee,
1151 u8 channel);
1152extern const struct ieee80211_channel *ieee80211_get_channel(struct
1153 ieee80211_device
1154 *ieee, u8 channel);
1155extern u32 ieee80211_channel_to_freq(struct ieee80211_device * ieee,
1156 u8 channel);
1157
1158/* ieee80211_wx.c */
1159extern int ieee80211_wx_get_scan(struct ieee80211_device *ieee,
1160 struct iw_request_info *info,
1161 union iwreq_data *wrqu, char *key);
1162extern int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
1163 struct iw_request_info *info,
1164 union iwreq_data *wrqu, char *key);
1165extern int ieee80211_wx_get_encode(struct ieee80211_device *ieee,
1166 struct iw_request_info *info,
1167 union iwreq_data *wrqu, char *key);
1168extern int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee,
1169 struct iw_request_info *info,
1170 union iwreq_data *wrqu, char *extra);
1171extern int ieee80211_wx_get_encodeext(struct ieee80211_device *ieee,
1172 struct iw_request_info *info,
1173 union iwreq_data *wrqu, char *extra);
1174
1175static inline void ieee80211_increment_scans(struct ieee80211_device *ieee)
1176{
1177 ieee->scans++;
1178}
1179
1180static inline int ieee80211_get_scans(struct ieee80211_device *ieee)
1181{
1182 return ieee->scans;
1183}
1184
1185#endif /* IEEE80211_H */
diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h
index c8effa4b1feb..38b78132019b 100644
--- a/include/net/if_inet6.h
+++ b/include/net/if_inet6.h
@@ -39,8 +39,6 @@ struct inet6_ifaddr
39 39
40 __u32 valid_lft; 40 __u32 valid_lft;
41 __u32 prefered_lft; 41 __u32 prefered_lft;
42 unsigned long cstamp; /* created timestamp */
43 unsigned long tstamp; /* updated timestamp */
44 atomic_t refcnt; 42 atomic_t refcnt;
45 spinlock_t lock; 43 spinlock_t lock;
46 44
@@ -49,6 +47,9 @@ struct inet6_ifaddr
49 47
50 __u16 scope; 48 __u16 scope;
51 49
50 unsigned long cstamp; /* created timestamp */
51 unsigned long tstamp; /* updated timestamp */
52
52 struct timer_list timer; 53 struct timer_list timer;
53 54
54 struct inet6_dev *idev; 55 struct inet6_dev *idev;
diff --git a/include/net/inet_ecn.h b/include/net/inet_ecn.h
index 7040a782c656..9b5d08f4f6e8 100644
--- a/include/net/inet_ecn.h
+++ b/include/net/inet_ecn.h
@@ -113,12 +113,12 @@ static inline void ipv6_copy_dscp(unsigned int dscp, struct ipv6hdr *inner)
113static inline int INET_ECN_set_ce(struct sk_buff *skb) 113static inline int INET_ECN_set_ce(struct sk_buff *skb)
114{ 114{
115 switch (skb->protocol) { 115 switch (skb->protocol) {
116 case __constant_htons(ETH_P_IP): 116 case cpu_to_be16(ETH_P_IP):
117 if (skb->network_header + sizeof(struct iphdr) <= skb->tail) 117 if (skb->network_header + sizeof(struct iphdr) <= skb->tail)
118 return IP_ECN_set_ce(ip_hdr(skb)); 118 return IP_ECN_set_ce(ip_hdr(skb));
119 break; 119 break;
120 120
121 case __constant_htons(ETH_P_IPV6): 121 case cpu_to_be16(ETH_P_IPV6):
122 if (skb->network_header + sizeof(struct ipv6hdr) <= skb->tail) 122 if (skb->network_header + sizeof(struct ipv6hdr) <= skb->tail)
123 return IP6_ECN_set_ce(ipv6_hdr(skb)); 123 return IP6_ECN_set_ce(ipv6_hdr(skb));
124 break; 124 break;
diff --git a/include/net/inet_frag.h b/include/net/inet_frag.h
index e081eefd6f47..39f2dc943908 100644
--- a/include/net/inet_frag.h
+++ b/include/net/inet_frag.h
@@ -61,7 +61,8 @@ void inet_frag_destroy(struct inet_frag_queue *q,
61 struct inet_frags *f, int *work); 61 struct inet_frags *f, int *work);
62int inet_frag_evictor(struct netns_frags *nf, struct inet_frags *f); 62int inet_frag_evictor(struct netns_frags *nf, struct inet_frags *f);
63struct inet_frag_queue *inet_frag_find(struct netns_frags *nf, 63struct inet_frag_queue *inet_frag_find(struct netns_frags *nf,
64 struct inet_frags *f, void *key, unsigned int hash); 64 struct inet_frags *f, void *key, unsigned int hash)
65 __releases(&f->lock);
65 66
66static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f) 67static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f)
67{ 68{
diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h
index d0a043153cc6..a44e2248b2ef 100644
--- a/include/net/inet_hashtables.h
+++ b/include/net/inet_hashtables.h
@@ -82,6 +82,7 @@ struct inet_bind_bucket {
82#endif 82#endif
83 unsigned short port; 83 unsigned short port;
84 signed short fastreuse; 84 signed short fastreuse;
85 int num_owners;
85 struct hlist_node node; 86 struct hlist_node node;
86 struct hlist_head owners; 87 struct hlist_head owners;
87}; 88};
@@ -133,7 +134,7 @@ struct inet_hashinfo {
133 struct inet_bind_hashbucket *bhash; 134 struct inet_bind_hashbucket *bhash;
134 135
135 unsigned int bhash_size; 136 unsigned int bhash_size;
136 /* Note : 4 bytes padding on 64 bit arches */ 137 /* 4 bytes hole on 64 bit */
137 138
138 struct kmem_cache *bind_bucket_cachep; 139 struct kmem_cache *bind_bucket_cachep;
139 140
@@ -150,6 +151,7 @@ struct inet_hashinfo {
150 struct inet_listen_hashbucket listening_hash[INET_LHTABLE_SIZE] 151 struct inet_listen_hashbucket listening_hash[INET_LHTABLE_SIZE]
151 ____cacheline_aligned_in_smp; 152 ____cacheline_aligned_in_smp;
152 153
154 atomic_t bsockets;
153}; 155};
154 156
155static inline struct inet_ehash_bucket *inet_ehash_bucket( 157static inline struct inet_ehash_bucket *inet_ehash_bucket(
diff --git a/include/net/ip.h b/include/net/ip.h
index 10868139e656..4ac7577f98d0 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -55,6 +55,7 @@ struct ipcm_cookie
55 __be32 addr; 55 __be32 addr;
56 int oif; 56 int oif;
57 struct ip_options *opt; 57 struct ip_options *opt;
58 union skb_shared_tx shtx;
58}; 59};
59 60
60#define IPCB(skb) ((struct inet_skb_parm*)((skb)->cb)) 61#define IPCB(skb) ((struct inet_skb_parm*)((skb)->cb))
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
index ab9b003ab671..bbae1e87efcd 100644
--- a/include/net/ip_vs.h
+++ b/include/net/ip_vs.h
@@ -184,8 +184,8 @@ static inline const char *ip_vs_dbg_addr(int af, char *buf, size_t buf_len,
184/* 184/*
185 * The port number of FTP service (in network order). 185 * The port number of FTP service (in network order).
186 */ 186 */
187#define FTPPORT __constant_htons(21) 187#define FTPPORT cpu_to_be16(21)
188#define FTPDATA __constant_htons(20) 188#define FTPDATA cpu_to_be16(20)
189 189
190/* 190/*
191 * TCP State Values 191 * TCP State Values
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index 6d5b58a1c743..c1f16fc49ade 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -196,8 +196,8 @@ struct ip6_flowlabel
196 struct net *fl_net; 196 struct net *fl_net;
197}; 197};
198 198
199#define IPV6_FLOWINFO_MASK __constant_htonl(0x0FFFFFFF) 199#define IPV6_FLOWINFO_MASK cpu_to_be32(0x0FFFFFFF)
200#define IPV6_FLOWLABEL_MASK __constant_htonl(0x000FFFFF) 200#define IPV6_FLOWLABEL_MASK cpu_to_be32(0x000FFFFF)
201 201
202struct ipv6_fl_socklist 202struct ipv6_fl_socklist
203{ 203{
diff --git a/include/net/ipx.h b/include/net/ipx.h
index 4cc0b4eca948..a14121dd1932 100644
--- a/include/net/ipx.h
+++ b/include/net/ipx.h
@@ -27,7 +27,7 @@ struct ipx_address {
27 27
28struct ipxhdr { 28struct ipxhdr {
29 __be16 ipx_checksum __attribute__ ((packed)); 29 __be16 ipx_checksum __attribute__ ((packed));
30#define IPX_NO_CHECKSUM __constant_htons(0xFFFF) 30#define IPX_NO_CHECKSUM cpu_to_be16(0xFFFF)
31 __be16 ipx_pktsize __attribute__ ((packed)); 31 __be16 ipx_pktsize __attribute__ ((packed));
32 __u8 ipx_tctrl; 32 __u8 ipx_tctrl;
33 __u8 ipx_type; 33 __u8 ipx_type;
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 559422fc0943..12a52efcd0d1 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -207,7 +207,7 @@ struct ieee80211_bss_conf {
207 u16 beacon_int; 207 u16 beacon_int;
208 u16 assoc_capability; 208 u16 assoc_capability;
209 u64 timestamp; 209 u64 timestamp;
210 u64 basic_rates; 210 u32 basic_rates;
211 struct ieee80211_bss_ht_conf ht; 211 struct ieee80211_bss_ht_conf ht;
212}; 212};
213 213
@@ -262,6 +262,26 @@ enum mac80211_tx_control_flags {
262 IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12), 262 IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12),
263}; 263};
264 264
265/**
266 * enum mac80211_rate_control_flags - per-rate flags set by the
267 * Rate Control algorithm.
268 *
269 * These flags are set by the Rate control algorithm for each rate during tx,
270 * in the @flags member of struct ieee80211_tx_rate.
271 *
272 * @IEEE80211_TX_RC_USE_RTS_CTS: Use RTS/CTS exchange for this rate.
273 * @IEEE80211_TX_RC_USE_CTS_PROTECT: CTS-to-self protection is required.
274 * This is set if the current BSS requires ERP protection.
275 * @IEEE80211_TX_RC_USE_SHORT_PREAMBLE: Use short preamble.
276 * @IEEE80211_TX_RC_MCS: HT rate.
277 * @IEEE80211_TX_RC_GREEN_FIELD: Indicates whether this rate should be used in
278 * Greenfield mode.
279 * @IEEE80211_TX_RC_40_MHZ_WIDTH: Indicates if the Channel Width should be 40 MHz.
280 * @IEEE80211_TX_RC_DUP_DATA: The frame should be transmitted on both of the
281 * adjacent 20 MHz channels, if the current channel type is
282 * NL80211_CHAN_HT40MINUS or NL80211_CHAN_HT40PLUS.
283 * @IEEE80211_TX_RC_SHORT_GI: Short Guard interval should be used for this rate.
284 */
265enum mac80211_rate_control_flags { 285enum mac80211_rate_control_flags {
266 IEEE80211_TX_RC_USE_RTS_CTS = BIT(0), 286 IEEE80211_TX_RC_USE_RTS_CTS = BIT(0),
267 IEEE80211_TX_RC_USE_CTS_PROTECT = BIT(1), 287 IEEE80211_TX_RC_USE_CTS_PROTECT = BIT(1),
@@ -507,11 +527,6 @@ static inline int __deprecated __IEEE80211_CONF_SHORT_SLOT_TIME(void)
507} 527}
508#define IEEE80211_CONF_SHORT_SLOT_TIME (__IEEE80211_CONF_SHORT_SLOT_TIME()) 528#define IEEE80211_CONF_SHORT_SLOT_TIME (__IEEE80211_CONF_SHORT_SLOT_TIME())
509 529
510struct ieee80211_ht_conf {
511 bool enabled;
512 enum nl80211_channel_type channel_type;
513};
514
515/** 530/**
516 * enum ieee80211_conf_changed - denotes which configuration changed 531 * enum ieee80211_conf_changed - denotes which configuration changed
517 * 532 *
@@ -520,10 +535,10 @@ struct ieee80211_ht_conf {
520 * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed 535 * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed
521 * @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed 536 * @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed
522 * @IEEE80211_CONF_CHANGE_PS: the PS flag changed 537 * @IEEE80211_CONF_CHANGE_PS: the PS flag changed
538 * @IEEE80211_CONF_CHANGE_DYNPS_TIMEOUT: the dynamic PS timeout changed
523 * @IEEE80211_CONF_CHANGE_POWER: the TX power changed 539 * @IEEE80211_CONF_CHANGE_POWER: the TX power changed
524 * @IEEE80211_CONF_CHANGE_CHANNEL: the channel changed 540 * @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed
525 * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed 541 * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed
526 * @IEEE80211_CONF_CHANGE_HT: HT configuration changed
527 */ 542 */
528enum ieee80211_conf_changed { 543enum ieee80211_conf_changed {
529 IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0), 544 IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0),
@@ -531,10 +546,10 @@ enum ieee80211_conf_changed {
531 IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2), 546 IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2),
532 IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3), 547 IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3),
533 IEEE80211_CONF_CHANGE_PS = BIT(4), 548 IEEE80211_CONF_CHANGE_PS = BIT(4),
534 IEEE80211_CONF_CHANGE_POWER = BIT(5), 549 IEEE80211_CONF_CHANGE_DYNPS_TIMEOUT = BIT(5),
535 IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), 550 IEEE80211_CONF_CHANGE_POWER = BIT(6),
536 IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), 551 IEEE80211_CONF_CHANGE_CHANNEL = BIT(7),
537 IEEE80211_CONF_CHANGE_HT = BIT(8), 552 IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(8),
538}; 553};
539 554
540/** 555/**
@@ -547,8 +562,9 @@ enum ieee80211_conf_changed {
547 * @listen_interval: listen interval in units of beacon interval 562 * @listen_interval: listen interval in units of beacon interval
548 * @flags: configuration flags defined above 563 * @flags: configuration flags defined above
549 * @power_level: requested transmit power (in dBm) 564 * @power_level: requested transmit power (in dBm)
565 * @dynamic_ps_timeout: dynamic powersave timeout (in ms)
550 * @channel: the channel to tune to 566 * @channel: the channel to tune to
551 * @ht: the HT configuration for the device 567 * @channel_type: the channel (HT) type
552 * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame 568 * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame
553 * (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11, 569 * (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11,
554 * but actually means the number of transmissions not the number of retries 570 * but actually means the number of transmissions not the number of retries
@@ -559,7 +575,7 @@ enum ieee80211_conf_changed {
559struct ieee80211_conf { 575struct ieee80211_conf {
560 int beacon_int; 576 int beacon_int;
561 u32 flags; 577 u32 flags;
562 int power_level; 578 int power_level, dynamic_ps_timeout;
563 579
564 u16 listen_interval; 580 u16 listen_interval;
565 bool radio_enabled; 581 bool radio_enabled;
@@ -567,7 +583,7 @@ struct ieee80211_conf {
567 u8 long_frame_max_tx_count, short_frame_max_tx_count; 583 u8 long_frame_max_tx_count, short_frame_max_tx_count;
568 584
569 struct ieee80211_channel *channel; 585 struct ieee80211_channel *channel;
570 struct ieee80211_ht_conf ht; 586 enum nl80211_channel_type channel_type;
571}; 587};
572 588
573/** 589/**
@@ -630,10 +646,12 @@ struct ieee80211_if_init_conf {
630 * @IEEE80211_IFCC_BSSID: The BSSID changed. 646 * @IEEE80211_IFCC_BSSID: The BSSID changed.
631 * @IEEE80211_IFCC_BEACON: The beacon for this interface changed 647 * @IEEE80211_IFCC_BEACON: The beacon for this interface changed
632 * (currently AP and MESH only), use ieee80211_beacon_get(). 648 * (currently AP and MESH only), use ieee80211_beacon_get().
649 * @IEEE80211_IFCC_BEACON_ENABLED: The enable_beacon value changed.
633 */ 650 */
634enum ieee80211_if_conf_change { 651enum ieee80211_if_conf_change {
635 IEEE80211_IFCC_BSSID = BIT(0), 652 IEEE80211_IFCC_BSSID = BIT(0),
636 IEEE80211_IFCC_BEACON = BIT(1), 653 IEEE80211_IFCC_BEACON = BIT(1),
654 IEEE80211_IFCC_BEACON_ENABLED = BIT(2),
637}; 655};
638 656
639/** 657/**
@@ -641,13 +659,16 @@ enum ieee80211_if_conf_change {
641 * 659 *
642 * @changed: parameters that have changed, see &enum ieee80211_if_conf_change. 660 * @changed: parameters that have changed, see &enum ieee80211_if_conf_change.
643 * @bssid: BSSID of the network we are associated to/creating. 661 * @bssid: BSSID of the network we are associated to/creating.
662 * @enable_beacon: Indicates whether beacons can be sent.
663 * This is valid only for AP/IBSS/MESH modes.
644 * 664 *
645 * This structure is passed to the config_interface() callback of 665 * This structure is passed to the config_interface() callback of
646 * &struct ieee80211_hw. 666 * &struct ieee80211_hw.
647 */ 667 */
648struct ieee80211_if_conf { 668struct ieee80211_if_conf {
649 u32 changed; 669 u32 changed;
650 u8 *bssid; 670 const u8 *bssid;
671 bool enable_beacon;
651}; 672};
652 673
653/** 674/**
@@ -655,11 +676,13 @@ struct ieee80211_if_conf {
655 * @ALG_WEP: WEP40 or WEP104 676 * @ALG_WEP: WEP40 or WEP104
656 * @ALG_TKIP: TKIP 677 * @ALG_TKIP: TKIP
657 * @ALG_CCMP: CCMP (AES) 678 * @ALG_CCMP: CCMP (AES)
679 * @ALG_AES_CMAC: AES-128-CMAC
658 */ 680 */
659enum ieee80211_key_alg { 681enum ieee80211_key_alg {
660 ALG_WEP, 682 ALG_WEP,
661 ALG_TKIP, 683 ALG_TKIP,
662 ALG_CCMP, 684 ALG_CCMP,
685 ALG_AES_CMAC,
663}; 686};
664 687
665/** 688/**
@@ -688,12 +711,16 @@ enum ieee80211_key_len {
688 * generation in software. 711 * generation in software.
689 * @IEEE80211_KEY_FLAG_PAIRWISE: Set by mac80211, this flag indicates 712 * @IEEE80211_KEY_FLAG_PAIRWISE: Set by mac80211, this flag indicates
690 * that the key is pairwise rather then a shared key. 713 * that the key is pairwise rather then a shared key.
714 * @IEEE80211_KEY_FLAG_SW_MGMT: This flag should be set by the driver for a
715 * CCMP key if it requires CCMP encryption of management frames (MFP) to
716 * be done in software.
691 */ 717 */
692enum ieee80211_key_flags { 718enum ieee80211_key_flags {
693 IEEE80211_KEY_FLAG_WMM_STA = 1<<0, 719 IEEE80211_KEY_FLAG_WMM_STA = 1<<0,
694 IEEE80211_KEY_FLAG_GENERATE_IV = 1<<1, 720 IEEE80211_KEY_FLAG_GENERATE_IV = 1<<1,
695 IEEE80211_KEY_FLAG_GENERATE_MMIC= 1<<2, 721 IEEE80211_KEY_FLAG_GENERATE_MMIC= 1<<2,
696 IEEE80211_KEY_FLAG_PAIRWISE = 1<<3, 722 IEEE80211_KEY_FLAG_PAIRWISE = 1<<3,
723 IEEE80211_KEY_FLAG_SW_MGMT = 1<<4,
697}; 724};
698 725
699/** 726/**
@@ -714,8 +741,8 @@ enum ieee80211_key_flags {
714 * - Temporal Encryption Key (128 bits) 741 * - Temporal Encryption Key (128 bits)
715 * - Temporal Authenticator Tx MIC Key (64 bits) 742 * - Temporal Authenticator Tx MIC Key (64 bits)
716 * - Temporal Authenticator Rx MIC Key (64 bits) 743 * - Temporal Authenticator Rx MIC Key (64 bits)
717 * @icv_len: FIXME 744 * @icv_len: The ICV length for this key type
718 * @iv_len: FIXME 745 * @iv_len: The IV length for this key type
719 */ 746 */
720struct ieee80211_key_conf { 747struct ieee80211_key_conf {
721 enum ieee80211_key_alg alg; 748 enum ieee80211_key_alg alg;
@@ -759,7 +786,7 @@ enum set_key_cmd {
759 * sizeof(void *), size is determined in hw information. 786 * sizeof(void *), size is determined in hw information.
760 */ 787 */
761struct ieee80211_sta { 788struct ieee80211_sta {
762 u64 supp_rates[IEEE80211_NUM_BANDS]; 789 u32 supp_rates[IEEE80211_NUM_BANDS];
763 u8 addr[ETH_ALEN]; 790 u8 addr[ETH_ALEN];
764 u16 aid; 791 u16 aid;
765 struct ieee80211_sta_ht_cap ht_cap; 792 struct ieee80211_sta_ht_cap ht_cap;
@@ -833,11 +860,6 @@ enum ieee80211_tkip_key_type {
833 * expect values between 0 and @max_signal. 860 * expect values between 0 and @max_signal.
834 * If possible please provide dB or dBm instead. 861 * If possible please provide dB or dBm instead.
835 * 862 *
836 * @IEEE80211_HW_SIGNAL_DB:
837 * Hardware gives signal values in dB, decibel difference from an
838 * arbitrary, fixed reference. We expect values between 0 and @max_signal.
839 * If possible please provide dBm instead.
840 *
841 * @IEEE80211_HW_SIGNAL_DBM: 863 * @IEEE80211_HW_SIGNAL_DBM:
842 * Hardware gives signal values in dBm, decibel difference from 864 * Hardware gives signal values in dBm, decibel difference from
843 * one milliwatt. This is the preferred method since it is standardized 865 * one milliwatt. This is the preferred method since it is standardized
@@ -854,10 +876,18 @@ enum ieee80211_tkip_key_type {
854 * @IEEE80211_HW_AMPDU_AGGREGATION: 876 * @IEEE80211_HW_AMPDU_AGGREGATION:
855 * Hardware supports 11n A-MPDU aggregation. 877 * Hardware supports 11n A-MPDU aggregation.
856 * 878 *
857 * @IEEE80211_HW_NO_STACK_DYNAMIC_PS: 879 * @IEEE80211_HW_SUPPORTS_PS:
858 * Hardware which has dynamic power save support, meaning 880 * Hardware has power save support (i.e. can go to sleep).
859 * that power save is enabled in idle periods, and don't need support 881 *
860 * from stack. 882 * @IEEE80211_HW_PS_NULLFUNC_STACK:
883 * Hardware requires nullfunc frame handling in stack, implies
884 * stack support for dynamic PS.
885 *
886 * @IEEE80211_HW_SUPPORTS_DYNAMIC_PS:
887 * Hardware has support for dynamic PS.
888 *
889 * @IEEE80211_HW_MFP_CAPABLE:
890 * Hardware supports management frame protection (MFP, IEEE 802.11w).
861 */ 891 */
862enum ieee80211_hw_flags { 892enum ieee80211_hw_flags {
863 IEEE80211_HW_RX_INCLUDES_FCS = 1<<1, 893 IEEE80211_HW_RX_INCLUDES_FCS = 1<<1,
@@ -865,12 +895,14 @@ enum ieee80211_hw_flags {
865 IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3, 895 IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3,
866 IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4, 896 IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4,
867 IEEE80211_HW_SIGNAL_UNSPEC = 1<<5, 897 IEEE80211_HW_SIGNAL_UNSPEC = 1<<5,
868 IEEE80211_HW_SIGNAL_DB = 1<<6, 898 IEEE80211_HW_SIGNAL_DBM = 1<<6,
869 IEEE80211_HW_SIGNAL_DBM = 1<<7, 899 IEEE80211_HW_NOISE_DBM = 1<<7,
870 IEEE80211_HW_NOISE_DBM = 1<<8, 900 IEEE80211_HW_SPECTRUM_MGMT = 1<<8,
871 IEEE80211_HW_SPECTRUM_MGMT = 1<<9, 901 IEEE80211_HW_AMPDU_AGGREGATION = 1<<9,
872 IEEE80211_HW_AMPDU_AGGREGATION = 1<<10, 902 IEEE80211_HW_SUPPORTS_PS = 1<<10,
873 IEEE80211_HW_NO_STACK_DYNAMIC_PS = 1<<11, 903 IEEE80211_HW_PS_NULLFUNC_STACK = 1<<11,
904 IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<12,
905 IEEE80211_HW_MFP_CAPABLE = 1<<13,
874}; 906};
875 907
876/** 908/**
@@ -890,9 +922,8 @@ enum ieee80211_hw_flags {
890 * @workqueue: single threaded workqueue available for driver use, 922 * @workqueue: single threaded workqueue available for driver use,
891 * allocated by mac80211 on registration and flushed when an 923 * allocated by mac80211 on registration and flushed when an
892 * interface is removed. 924 * interface is removed.
893 * NOTICE: All work performed on this workqueue should NEVER 925 * NOTICE: All work performed on this workqueue must not
894 * acquire the RTNL lock (i.e. Don't use the function 926 * acquire the RTNL lock.
895 * ieee80211_iterate_active_interfaces())
896 * 927 *
897 * @priv: pointer to private area that was allocated for driver use 928 * @priv: pointer to private area that was allocated for driver use
898 * along with this structure. 929 * along with this structure.
@@ -952,6 +983,19 @@ struct ieee80211_hw {
952}; 983};
953 984
954/** 985/**
986 * wiphy_to_ieee80211_hw - return a mac80211 driver hw struct from a wiphy
987 *
988 * @wiphy: the &struct wiphy which we want to query
989 *
990 * mac80211 drivers can use this to get to their respective
991 * &struct ieee80211_hw. Drivers wishing to get to their own private
992 * structure can then access it via hw->priv. Note that mac802111 drivers should
993 * not use wiphy_priv() to try to get their private driver structure as this
994 * is already used internally by mac80211.
995 */
996struct ieee80211_hw *wiphy_to_ieee80211_hw(struct wiphy *wiphy);
997
998/**
955 * SET_IEEE80211_DEV - set device for 802.11 hardware 999 * SET_IEEE80211_DEV - set device for 802.11 hardware
956 * 1000 *
957 * @hw: the &struct ieee80211_hw to set the device for 1001 * @hw: the &struct ieee80211_hw to set the device for
@@ -978,11 +1022,6 @@ static inline int ieee80211_num_regular_queues(struct ieee80211_hw *hw)
978 return hw->queues; 1022 return hw->queues;
979} 1023}
980 1024
981static inline int ieee80211_num_queues(struct ieee80211_hw *hw)
982{
983 return hw->queues + hw->ampdu_queues;
984}
985
986static inline struct ieee80211_rate * 1025static inline struct ieee80211_rate *
987ieee80211_get_tx_rate(const struct ieee80211_hw *hw, 1026ieee80211_get_tx_rate(const struct ieee80211_hw *hw,
988 const struct ieee80211_tx_info *c) 1027 const struct ieee80211_tx_info *c)
@@ -1018,16 +1057,12 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,
1018 * 1057 *
1019 * The set_key() callback in the &struct ieee80211_ops for a given 1058 * The set_key() callback in the &struct ieee80211_ops for a given
1020 * device is called to enable hardware acceleration of encryption and 1059 * device is called to enable hardware acceleration of encryption and
1021 * decryption. The callback takes an @address parameter that will be 1060 * decryption. The callback takes a @sta parameter that will be NULL
1022 * the broadcast address for default keys, the other station's hardware 1061 * for default keys or keys used for transmission only, or point to
1023 * address for individual keys or the zero address for keys that will 1062 * the station information for the peer for individual keys.
1024 * be used only for transmission.
1025 * Multiple transmission keys with the same key index may be used when 1063 * Multiple transmission keys with the same key index may be used when
1026 * VLANs are configured for an access point. 1064 * VLANs are configured for an access point.
1027 * 1065 *
1028 * The @local_address parameter will always be set to our own address,
1029 * this is only relevant if you support multiple local addresses.
1030 *
1031 * When transmitting, the TX control data will use the @hw_key_idx 1066 * When transmitting, the TX control data will use the @hw_key_idx
1032 * selected by the driver by modifying the &struct ieee80211_key_conf 1067 * selected by the driver by modifying the &struct ieee80211_key_conf
1033 * pointed to by the @key parameter to the set_key() function. 1068 * pointed to by the @key parameter to the set_key() function.
@@ -1061,6 +1096,42 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,
1061 */ 1096 */
1062 1097
1063/** 1098/**
1099 * DOC: Powersave support
1100 *
1101 * mac80211 has support for various powersave implementations.
1102 *
1103 * First, it can support hardware that handles all powersaving by
1104 * itself, such hardware should simply set the %IEEE80211_HW_SUPPORTS_PS
1105 * hardware flag. In that case, it will be told about the desired
1106 * powersave mode depending on the association status, and the driver
1107 * must take care of sending nullfunc frames when necessary, i.e. when
1108 * entering and leaving powersave mode. The driver is required to look at
1109 * the AID in beacons and signal to the AP that it woke up when it finds
1110 * traffic directed to it. This mode supports dynamic PS by simply
1111 * enabling/disabling PS.
1112 *
1113 * Additionally, such hardware may set the %IEEE80211_HW_SUPPORTS_DYNAMIC_PS
1114 * flag to indicate that it can support dynamic PS mode itself (see below).
1115 *
1116 * Other hardware designs cannot send nullfunc frames by themselves and also
1117 * need software support for parsing the TIM bitmap. This is also supported
1118 * by mac80211 by combining the %IEEE80211_HW_SUPPORTS_PS and
1119 * %IEEE80211_HW_PS_NULLFUNC_STACK flags. The hardware is of course still
1120 * required to pass up beacons. Additionally, in this case, mac80211 will
1121 * wake up the hardware when multicast traffic is announced in the beacon.
1122 *
1123 * FIXME: I don't think we can be fast enough in software when we want to
1124 * receive multicast traffic?
1125 *
1126 * Dynamic powersave mode is an extension to normal powersave mode in which
1127 * the hardware stays awake for a user-specified period of time after sending
1128 * a frame so that reply frames need not be buffered and therefore delayed
1129 * to the next wakeup. This can either be supported by hardware, in which case
1130 * the driver needs to look at the @dynamic_ps_timeout hardware configuration
1131 * value, or by the stack if all nullfunc handling is in the stack.
1132 */
1133
1134/**
1064 * DOC: Frame filtering 1135 * DOC: Frame filtering
1065 * 1136 *
1066 * mac80211 requires to see many management frames for proper 1137 * mac80211 requires to see many management frames for proper
@@ -1172,6 +1243,8 @@ enum ieee80211_ampdu_mlme_action {
1172 * configuration in the TX control data. This handler should, 1243 * configuration in the TX control data. This handler should,
1173 * preferably, never fail and stop queues appropriately, more 1244 * preferably, never fail and stop queues appropriately, more
1174 * importantly, however, it must never fail for A-MPDU-queues. 1245 * importantly, however, it must never fail for A-MPDU-queues.
1246 * This function should return NETDEV_TX_OK except in very
1247 * limited cases.
1175 * Must be implemented and atomic. 1248 * Must be implemented and atomic.
1176 * 1249 *
1177 * @start: Called before the first netdevice attached to the hardware 1250 * @start: Called before the first netdevice attached to the hardware
@@ -1212,9 +1285,12 @@ enum ieee80211_ampdu_mlme_action {
1212 * 1285 *
1213 * @config: Handler for configuration requests. IEEE 802.11 code calls this 1286 * @config: Handler for configuration requests. IEEE 802.11 code calls this
1214 * function to change hardware configuration, e.g., channel. 1287 * function to change hardware configuration, e.g., channel.
1288 * This function should never fail but returns a negative error code
1289 * if it does.
1215 * 1290 *
1216 * @config_interface: Handler for configuration requests related to interfaces 1291 * @config_interface: Handler for configuration requests related to interfaces
1217 * (e.g. BSSID changes.) 1292 * (e.g. BSSID changes.)
1293 * Returns a negative error code which will be seen in userspace.
1218 * 1294 *
1219 * @bss_info_changed: Handler for configuration requests related to BSS 1295 * @bss_info_changed: Handler for configuration requests related to BSS
1220 * parameters that may vary during BSS's lifespan, and may affect low 1296 * parameters that may vary during BSS's lifespan, and may affect low
@@ -1232,8 +1308,9 @@ enum ieee80211_ampdu_mlme_action {
1232 * 1308 *
1233 * @set_key: See the section "Hardware crypto acceleration" 1309 * @set_key: See the section "Hardware crypto acceleration"
1234 * This callback can sleep, and is only called between add_interface 1310 * This callback can sleep, and is only called between add_interface
1235 * and remove_interface calls, i.e. while the interface with the 1311 * and remove_interface calls, i.e. while the given virtual interface
1236 * given local_address is enabled. 1312 * is enabled.
1313 * Returns a negative error code if the key can't be added.
1237 * 1314 *
1238 * @update_tkip_key: See the section "Hardware crypto acceleration" 1315 * @update_tkip_key: See the section "Hardware crypto acceleration"
1239 * This callback will be called in the context of Rx. Called for drivers 1316 * This callback will be called in the context of Rx. Called for drivers
@@ -1245,8 +1322,16 @@ enum ieee80211_ampdu_mlme_action {
1245 * bands. When the scan finishes, ieee80211_scan_completed() must be 1322 * bands. When the scan finishes, ieee80211_scan_completed() must be
1246 * called; note that it also must be called when the scan cannot finish 1323 * called; note that it also must be called when the scan cannot finish
1247 * because the hardware is turned off! Anything else is a bug! 1324 * because the hardware is turned off! Anything else is a bug!
1325 * Returns a negative error code which will be seen in userspace.
1326 *
1327 * @sw_scan_start: Notifier function that is called just before a software scan
1328 * is started. Can be NULL, if the driver doesn't need this notification.
1248 * 1329 *
1249 * @get_stats: return low-level statistics 1330 * @sw_scan_complete: Notifier function that is called just after a software scan
1331 * finished. Can be NULL, if the driver doesn't need this notification.
1332 *
1333 * @get_stats: Return low-level statistics.
1334 * Returns zero if statistics are available.
1250 * 1335 *
1251 * @get_tkip_seq: If your device implements TKIP encryption in hardware this 1336 * @get_tkip_seq: If your device implements TKIP encryption in hardware this
1252 * callback should be provided to read the TKIP transmit IVs (both IV32 1337 * callback should be provided to read the TKIP transmit IVs (both IV32
@@ -1260,6 +1345,7 @@ enum ieee80211_ampdu_mlme_action {
1260 * 1345 *
1261 * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max), 1346 * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
1262 * bursting) for a hardware TX queue. 1347 * bursting) for a hardware TX queue.
1348 * Returns a negative error code on failure.
1263 * 1349 *
1264 * @get_tx_stats: Get statistics of the current TX queue status. This is used 1350 * @get_tx_stats: Get statistics of the current TX queue status. This is used
1265 * to get number of currently queued packets (queue length), maximum queue 1351 * to get number of currently queued packets (queue length), maximum queue
@@ -1268,8 +1354,12 @@ enum ieee80211_ampdu_mlme_action {
1268 * hw->ampdu_queues items. 1354 * hw->ampdu_queues items.
1269 * 1355 *
1270 * @get_tsf: Get the current TSF timer value from firmware/hardware. Currently, 1356 * @get_tsf: Get the current TSF timer value from firmware/hardware. Currently,
1271 * this is only used for IBSS mode debugging and, as such, is not a 1357 * this is only used for IBSS mode BSSID merging and debugging. Is not a
1272 * required function. Must be atomic. 1358 * required function.
1359 *
1360 * @set_tsf: Set the TSF timer to the specified value in the firmware/hardware.
1361 * Currently, this is only used for IBSS mode debugging. Is not a
1362 * required function.
1273 * 1363 *
1274 * @reset_tsf: Reset the TSF timer and allow firmware/hardware to synchronize 1364 * @reset_tsf: Reset the TSF timer and allow firmware/hardware to synchronize
1275 * with other STAs in the IBSS. This is only used in IBSS mode. This 1365 * with other STAs in the IBSS. This is only used in IBSS mode. This
@@ -1279,13 +1369,15 @@ enum ieee80211_ampdu_mlme_action {
1279 * @tx_last_beacon: Determine whether the last IBSS beacon was sent by us. 1369 * @tx_last_beacon: Determine whether the last IBSS beacon was sent by us.
1280 * This is needed only for IBSS mode and the result of this function is 1370 * This is needed only for IBSS mode and the result of this function is
1281 * used to determine whether to reply to Probe Requests. 1371 * used to determine whether to reply to Probe Requests.
1372 * Returns non-zero if this device sent the last beacon.
1282 * 1373 *
1283 * @ampdu_action: Perform a certain A-MPDU action 1374 * @ampdu_action: Perform a certain A-MPDU action
1284 * The RA/TID combination determines the destination and TID we want 1375 * The RA/TID combination determines the destination and TID we want
1285 * the ampdu action to be performed for. The action is defined through 1376 * the ampdu action to be performed for. The action is defined through
1286 * ieee80211_ampdu_mlme_action. Starting sequence number (@ssn) 1377 * ieee80211_ampdu_mlme_action. Starting sequence number (@ssn)
1287 * is the first frame we expect to perform the action on. notice 1378 * is the first frame we expect to perform the action on. Notice
1288 * that TX/RX_STOP can pass NULL for this parameter. 1379 * that TX/RX_STOP can pass NULL for this parameter.
1380 * Returns a negative error code on failure.
1289 */ 1381 */
1290struct ieee80211_ops { 1382struct ieee80211_ops {
1291 int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); 1383 int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
@@ -1310,12 +1402,15 @@ struct ieee80211_ops {
1310 int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta, 1402 int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
1311 bool set); 1403 bool set);
1312 int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd, 1404 int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1313 const u8 *local_address, const u8 *address, 1405 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
1314 struct ieee80211_key_conf *key); 1406 struct ieee80211_key_conf *key);
1315 void (*update_tkip_key)(struct ieee80211_hw *hw, 1407 void (*update_tkip_key)(struct ieee80211_hw *hw,
1316 struct ieee80211_key_conf *conf, const u8 *address, 1408 struct ieee80211_key_conf *conf, const u8 *address,
1317 u32 iv32, u16 *phase1key); 1409 u32 iv32, u16 *phase1key);
1318 int (*hw_scan)(struct ieee80211_hw *hw, u8 *ssid, size_t len); 1410 int (*hw_scan)(struct ieee80211_hw *hw,
1411 struct cfg80211_scan_request *req);
1412 void (*sw_scan_start)(struct ieee80211_hw *hw);
1413 void (*sw_scan_complete)(struct ieee80211_hw *hw);
1319 int (*get_stats)(struct ieee80211_hw *hw, 1414 int (*get_stats)(struct ieee80211_hw *hw,
1320 struct ieee80211_low_level_stats *stats); 1415 struct ieee80211_low_level_stats *stats);
1321 void (*get_tkip_seq)(struct ieee80211_hw *hw, u8 hw_key_idx, 1416 void (*get_tkip_seq)(struct ieee80211_hw *hw, u8 hw_key_idx,
@@ -1328,6 +1423,7 @@ struct ieee80211_ops {
1328 int (*get_tx_stats)(struct ieee80211_hw *hw, 1423 int (*get_tx_stats)(struct ieee80211_hw *hw,
1329 struct ieee80211_tx_queue_stats *stats); 1424 struct ieee80211_tx_queue_stats *stats);
1330 u64 (*get_tsf)(struct ieee80211_hw *hw); 1425 u64 (*get_tsf)(struct ieee80211_hw *hw);
1426 void (*set_tsf)(struct ieee80211_hw *hw, u64 tsf);
1331 void (*reset_tsf)(struct ieee80211_hw *hw); 1427 void (*reset_tsf)(struct ieee80211_hw *hw);
1332 int (*tx_last_beacon)(struct ieee80211_hw *hw); 1428 int (*tx_last_beacon)(struct ieee80211_hw *hw);
1333 int (*ampdu_action)(struct ieee80211_hw *hw, 1429 int (*ampdu_action)(struct ieee80211_hw *hw,
@@ -1752,8 +1848,9 @@ void ieee80211_wake_queues(struct ieee80211_hw *hw);
1752 * mac80211 that the scan finished. 1848 * mac80211 that the scan finished.
1753 * 1849 *
1754 * @hw: the hardware that finished the scan 1850 * @hw: the hardware that finished the scan
1851 * @aborted: set to true if scan was aborted
1755 */ 1852 */
1756void ieee80211_scan_completed(struct ieee80211_hw *hw); 1853void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted);
1757 1854
1758/** 1855/**
1759 * ieee80211_iterate_active_interfaces - iterate active interfaces 1856 * ieee80211_iterate_active_interfaces - iterate active interfaces
@@ -1886,6 +1983,16 @@ struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_hw *hw,
1886/* Rate control API */ 1983/* Rate control API */
1887 1984
1888/** 1985/**
1986 * enum rate_control_changed - flags to indicate which parameter changed
1987 *
1988 * @IEEE80211_RC_HT_CHANGED: The HT parameters of the operating channel have
1989 * changed, rate control algorithm can update its internal state if needed.
1990 */
1991enum rate_control_changed {
1992 IEEE80211_RC_HT_CHANGED = BIT(0)
1993};
1994
1995/**
1889 * struct ieee80211_tx_rate_control - rate control information for/from RC algo 1996 * struct ieee80211_tx_rate_control - rate control information for/from RC algo
1890 * 1997 *
1891 * @hw: The hardware the algorithm is invoked for. 1998 * @hw: The hardware the algorithm is invoked for.
@@ -1921,6 +2028,9 @@ struct rate_control_ops {
1921 void *(*alloc_sta)(void *priv, struct ieee80211_sta *sta, gfp_t gfp); 2028 void *(*alloc_sta)(void *priv, struct ieee80211_sta *sta, gfp_t gfp);
1922 void (*rate_init)(void *priv, struct ieee80211_supported_band *sband, 2029 void (*rate_init)(void *priv, struct ieee80211_supported_band *sband,
1923 struct ieee80211_sta *sta, void *priv_sta); 2030 struct ieee80211_sta *sta, void *priv_sta);
2031 void (*rate_update)(void *priv, struct ieee80211_supported_band *sband,
2032 struct ieee80211_sta *sta,
2033 void *priv_sta, u32 changed);
1924 void (*free_sta)(void *priv, struct ieee80211_sta *sta, 2034 void (*free_sta)(void *priv, struct ieee80211_sta *sta,
1925 void *priv_sta); 2035 void *priv_sta);
1926 2036
@@ -1962,4 +2072,34 @@ rate_lowest_index(struct ieee80211_supported_band *sband,
1962int ieee80211_rate_control_register(struct rate_control_ops *ops); 2072int ieee80211_rate_control_register(struct rate_control_ops *ops);
1963void ieee80211_rate_control_unregister(struct rate_control_ops *ops); 2073void ieee80211_rate_control_unregister(struct rate_control_ops *ops);
1964 2074
2075static inline bool
2076conf_is_ht20(struct ieee80211_conf *conf)
2077{
2078 return conf->channel_type == NL80211_CHAN_HT20;
2079}
2080
2081static inline bool
2082conf_is_ht40_minus(struct ieee80211_conf *conf)
2083{
2084 return conf->channel_type == NL80211_CHAN_HT40MINUS;
2085}
2086
2087static inline bool
2088conf_is_ht40_plus(struct ieee80211_conf *conf)
2089{
2090 return conf->channel_type == NL80211_CHAN_HT40PLUS;
2091}
2092
2093static inline bool
2094conf_is_ht40(struct ieee80211_conf *conf)
2095{
2096 return conf_is_ht40_minus(conf) || conf_is_ht40_plus(conf);
2097}
2098
2099static inline bool
2100conf_is_ht(struct ieee80211_conf *conf)
2101{
2102 return conf->channel_type != NL80211_CHAN_NO_HT;
2103}
2104
1965#endif /* MAC80211_H */ 2105#endif /* MAC80211_H */
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h
index 2e0c53641cbe..4dfb793c3f15 100644
--- a/include/net/netfilter/nf_conntrack.h
+++ b/include/net/netfilter/nf_conntrack.h
@@ -287,7 +287,7 @@ static inline int nf_ct_is_untracked(const struct sk_buff *skb)
287 287
288extern int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp); 288extern int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp);
289extern unsigned int nf_conntrack_htable_size; 289extern unsigned int nf_conntrack_htable_size;
290extern int nf_conntrack_max; 290extern unsigned int nf_conntrack_max;
291 291
292#define NF_CT_STAT_INC(net, count) \ 292#define NF_CT_STAT_INC(net, count) \
293 (per_cpu_ptr((net)->ct.stat, raw_smp_processor_id())->count++) 293 (per_cpu_ptr((net)->ct.stat, raw_smp_processor_id())->count++)
diff --git a/include/net/netfilter/nf_conntrack_core.h b/include/net/netfilter/nf_conntrack_core.h
index c25068e38516..5a449b44ba33 100644
--- a/include/net/netfilter/nf_conntrack_core.h
+++ b/include/net/netfilter/nf_conntrack_core.h
@@ -62,7 +62,8 @@ static inline int nf_conntrack_confirm(struct sk_buff *skb)
62 if (ct && ct != &nf_conntrack_untracked) { 62 if (ct && ct != &nf_conntrack_untracked) {
63 if (!nf_ct_is_confirmed(ct) && !nf_ct_is_dying(ct)) 63 if (!nf_ct_is_confirmed(ct) && !nf_ct_is_dying(ct))
64 ret = __nf_conntrack_confirm(skb); 64 ret = __nf_conntrack_confirm(skb);
65 nf_ct_deliver_cached_events(ct); 65 if (likely(ret == NF_ACCEPT))
66 nf_ct_deliver_cached_events(ct);
66 } 67 }
67 return ret; 68 return ret;
68} 69}
diff --git a/include/net/netfilter/nf_conntrack_l4proto.h b/include/net/netfilter/nf_conntrack_l4proto.h
index debdaf75cecf..b01070bf2f84 100644
--- a/include/net/netfilter/nf_conntrack_l4proto.h
+++ b/include/net/netfilter/nf_conntrack_l4proto.h
@@ -90,10 +90,7 @@ struct nf_conntrack_l4proto
90 struct module *me; 90 struct module *me;
91}; 91};
92 92
93/* Existing built-in protocols */ 93/* Existing built-in generic protocol */
94extern struct nf_conntrack_l4proto nf_conntrack_l4proto_tcp6;
95extern struct nf_conntrack_l4proto nf_conntrack_l4proto_udp4;
96extern struct nf_conntrack_l4proto nf_conntrack_l4proto_udp6;
97extern struct nf_conntrack_l4proto nf_conntrack_l4proto_generic; 94extern struct nf_conntrack_l4proto nf_conntrack_l4proto_generic;
98 95
99#define MAX_NF_CT_PROTO 256 96#define MAX_NF_CT_PROTO 256
@@ -101,11 +98,6 @@ extern struct nf_conntrack_l4proto nf_conntrack_l4proto_generic;
101extern struct nf_conntrack_l4proto * 98extern struct nf_conntrack_l4proto *
102__nf_ct_l4proto_find(u_int16_t l3proto, u_int8_t l4proto); 99__nf_ct_l4proto_find(u_int16_t l3proto, u_int8_t l4proto);
103 100
104extern struct nf_conntrack_l4proto *
105nf_ct_l4proto_find_get(u_int16_t l3proto, u_int8_t protocol);
106
107extern void nf_ct_l4proto_put(struct nf_conntrack_l4proto *p);
108
109/* Protocol registration. */ 101/* Protocol registration. */
110extern int nf_conntrack_l4proto_register(struct nf_conntrack_l4proto *proto); 102extern int nf_conntrack_l4proto_register(struct nf_conntrack_l4proto *proto);
111extern void nf_conntrack_l4proto_unregister(struct nf_conntrack_l4proto *proto); 103extern void nf_conntrack_l4proto_unregister(struct nf_conntrack_l4proto *proto);
diff --git a/include/net/netfilter/nf_log.h b/include/net/netfilter/nf_log.h
index 7182c06974f4..920997f1aff0 100644
--- a/include/net/netfilter/nf_log.h
+++ b/include/net/netfilter/nf_log.h
@@ -1,6 +1,8 @@
1#ifndef _NF_LOG_H 1#ifndef _NF_LOG_H
2#define _NF_LOG_H 2#define _NF_LOG_H
3 3
4#include <linux/netfilter.h>
5
4/* those NF_LOG_* defines and struct nf_loginfo are legacy definitios that will 6/* those NF_LOG_* defines and struct nf_loginfo are legacy definitios that will
5 * disappear once iptables is replaced with pkttables. Please DO NOT use them 7 * disappear once iptables is replaced with pkttables. Please DO NOT use them
6 * for any new code! */ 8 * for any new code! */
@@ -40,12 +42,15 @@ struct nf_logger {
40 struct module *me; 42 struct module *me;
41 nf_logfn *logfn; 43 nf_logfn *logfn;
42 char *name; 44 char *name;
45 struct list_head list[NFPROTO_NUMPROTO];
43}; 46};
44 47
45/* Function to register/unregister log function. */ 48/* Function to register/unregister log function. */
46int nf_log_register(u_int8_t pf, const struct nf_logger *logger); 49int nf_log_register(u_int8_t pf, struct nf_logger *logger);
47void nf_log_unregister(const struct nf_logger *logger); 50void nf_log_unregister(struct nf_logger *logger);
48void nf_log_unregister_pf(u_int8_t pf); 51
52int nf_log_bind_pf(u_int8_t pf, const struct nf_logger *logger);
53void nf_log_unbind_pf(u_int8_t pf);
49 54
50/* Calls the registered backend logging function */ 55/* Calls the registered backend logging function */
51void nf_log_packet(u_int8_t pf, 56void nf_log_packet(u_int8_t pf,
diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
index 977f482d97a9..2eb3814d6258 100644
--- a/include/net/netns/ipv4.h
+++ b/include/net/netns/ipv4.h
@@ -54,5 +54,18 @@ struct netns_ipv4 {
54 54
55 struct timer_list rt_secret_timer; 55 struct timer_list rt_secret_timer;
56 atomic_t rt_genid; 56 atomic_t rt_genid;
57
58#ifdef CONFIG_IP_MROUTE
59 struct sock *mroute_sk;
60 struct mfc_cache **mfc_cache_array;
61 struct vif_device *vif_table;
62 int maxvif;
63 atomic_t cache_resolve_queue_len;
64 int mroute_do_assert;
65 int mroute_do_pim;
66#if defined(CONFIG_IP_PIMSM_V1) || defined(CONFIG_IP_PIMSM_V2)
67 int mroute_reg_vif_num;
68#endif
69#endif
57}; 70};
58#endif 71#endif
diff --git a/include/net/netrom.h b/include/net/netrom.h
index f06852bba62a..15696b1fd30f 100644
--- a/include/net/netrom.h
+++ b/include/net/netrom.h
@@ -59,10 +59,6 @@ enum {
59#define NR_MAX_WINDOW_SIZE 127 /* Maximum Window Allowable - 127 */ 59#define NR_MAX_WINDOW_SIZE 127 /* Maximum Window Allowable - 127 */
60#define NR_MAX_PACKET_SIZE 236 /* Maximum Packet Length - 236 */ 60#define NR_MAX_PACKET_SIZE 236 /* Maximum Packet Length - 236 */
61 61
62struct nr_private {
63 struct net_device_stats stats;
64};
65
66struct nr_sock { 62struct nr_sock {
67 struct sock sock; 63 struct sock sock;
68 ax25_address user_addr, source_addr, dest_addr; 64 ax25_address user_addr, source_addr, dest_addr;
diff --git a/include/net/phonet/phonet.h b/include/net/phonet/phonet.h
index 057b0a8a2885..d43f71b5ec00 100644
--- a/include/net/phonet/phonet.h
+++ b/include/net/phonet/phonet.h
@@ -105,7 +105,6 @@ void phonet_proto_unregister(int protocol, struct phonet_protocol *pp);
105 105
106int phonet_sysctl_init(void); 106int phonet_sysctl_init(void);
107void phonet_sysctl_exit(void); 107void phonet_sysctl_exit(void);
108void phonet_netlink_register(void);
109int isi_register(void); 108int isi_register(void);
110void isi_unregister(void); 109void isi_unregister(void);
111 110
diff --git a/include/net/phonet/pn_dev.h b/include/net/phonet/pn_dev.h
index aa1c59a1d33f..5054dc5ea2c2 100644
--- a/include/net/phonet/pn_dev.h
+++ b/include/net/phonet/pn_dev.h
@@ -28,7 +28,7 @@ struct phonet_device_list {
28 spinlock_t lock; 28 spinlock_t lock;
29}; 29};
30 30
31extern struct phonet_device_list pndevs; 31struct phonet_device_list *phonet_device_list(struct net *net);
32 32
33struct phonet_device { 33struct phonet_device {
34 struct list_head list; 34 struct list_head list;
@@ -36,8 +36,9 @@ struct phonet_device {
36 DECLARE_BITMAP(addrs, 64); 36 DECLARE_BITMAP(addrs, 64);
37}; 37};
38 38
39void phonet_device_init(void); 39int phonet_device_init(void);
40void phonet_device_exit(void); 40void phonet_device_exit(void);
41int phonet_netlink_register(void);
41struct net_device *phonet_device_get(struct net *net); 42struct net_device *phonet_device_get(struct net *net);
42 43
43int phonet_address_add(struct net_device *dev, u8 addr); 44int phonet_address_add(struct net_device *dev, u8 addr);
diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h
index 4082f39f5079..e37fe3129c17 100644
--- a/include/net/pkt_sched.h
+++ b/include/net/pkt_sched.h
@@ -85,6 +85,7 @@ extern struct qdisc_rate_table *qdisc_get_rtab(struct tc_ratespec *r,
85 struct nlattr *tab); 85 struct nlattr *tab);
86extern void qdisc_put_rtab(struct qdisc_rate_table *tab); 86extern void qdisc_put_rtab(struct qdisc_rate_table *tab);
87extern void qdisc_put_stab(struct qdisc_size_table *tab); 87extern void qdisc_put_stab(struct qdisc_size_table *tab);
88extern void qdisc_warn_nonwc(char *txt, struct Qdisc *qdisc);
88 89
89extern void __qdisc_run(struct Qdisc *q); 90extern void __qdisc_run(struct Qdisc *q);
90 91
diff --git a/include/net/psnap.h b/include/net/psnap.h
index b2e01cc3fc8a..fe456c295b04 100644
--- a/include/net/psnap.h
+++ b/include/net/psnap.h
@@ -1,7 +1,11 @@
1#ifndef _NET_PSNAP_H 1#ifndef _NET_PSNAP_H
2#define _NET_PSNAP_H 2#define _NET_PSNAP_H
3 3
4extern struct datalink_proto *register_snap_client(unsigned char *desc, int (*rcvfunc)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *orig_dev)); 4extern struct datalink_proto *
5register_snap_client(const unsigned char *desc,
6 int (*rcvfunc)(struct sk_buff *, struct net_device *,
7 struct packet_type *,
8 struct net_device *orig_dev));
5extern void unregister_snap_client(struct datalink_proto *proto); 9extern void unregister_snap_client(struct datalink_proto *proto);
6 10
7#endif 11#endif
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index f8c47429044a..964ffa0d8815 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -42,24 +42,17 @@ struct Qdisc
42 int (*enqueue)(struct sk_buff *skb, struct Qdisc *dev); 42 int (*enqueue)(struct sk_buff *skb, struct Qdisc *dev);
43 struct sk_buff * (*dequeue)(struct Qdisc *dev); 43 struct sk_buff * (*dequeue)(struct Qdisc *dev);
44 unsigned flags; 44 unsigned flags;
45#define TCQ_F_BUILTIN 1 45#define TCQ_F_BUILTIN 1
46#define TCQ_F_THROTTLED 2 46#define TCQ_F_THROTTLED 2
47#define TCQ_F_INGRESS 4 47#define TCQ_F_INGRESS 4
48#define TCQ_F_WARN_NONWC (1 << 16)
48 int padded; 49 int padded;
49 struct Qdisc_ops *ops; 50 struct Qdisc_ops *ops;
50 struct qdisc_size_table *stab; 51 struct qdisc_size_table *stab;
52 struct list_head list;
51 u32 handle; 53 u32 handle;
52 u32 parent; 54 u32 parent;
53 atomic_t refcnt; 55 atomic_t refcnt;
54 unsigned long state;
55 struct sk_buff *gso_skb;
56 struct sk_buff_head q;
57 struct netdev_queue *dev_queue;
58 struct Qdisc *next_sched;
59 struct list_head list;
60
61 struct gnet_stats_basic bstats;
62 struct gnet_stats_queue qstats;
63 struct gnet_stats_rate_est rate_est; 56 struct gnet_stats_rate_est rate_est;
64 int (*reshape_fail)(struct sk_buff *skb, 57 int (*reshape_fail)(struct sk_buff *skb,
65 struct Qdisc *q); 58 struct Qdisc *q);
@@ -70,6 +63,17 @@ struct Qdisc
70 * and it will live until better solution will be invented. 63 * and it will live until better solution will be invented.
71 */ 64 */
72 struct Qdisc *__parent; 65 struct Qdisc *__parent;
66 struct netdev_queue *dev_queue;
67 struct Qdisc *next_sched;
68
69 struct sk_buff *gso_skb;
70 /*
71 * For performance sake on SMP, we put highly modified fields at the end
72 */
73 unsigned long state;
74 struct sk_buff_head q;
75 struct gnet_stats_basic bstats;
76 struct gnet_stats_queue qstats;
73}; 77};
74 78
75struct Qdisc_class_ops 79struct Qdisc_class_ops
diff --git a/include/net/sctp/checksum.h b/include/net/sctp/checksum.h
index 2fec3c366e81..befc8d2a1b9f 100644
--- a/include/net/sctp/checksum.h
+++ b/include/net/sctp/checksum.h
@@ -46,14 +46,14 @@
46#include <net/sctp/sctp.h> 46#include <net/sctp/sctp.h>
47#include <linux/crc32c.h> 47#include <linux/crc32c.h>
48 48
49static inline __be32 sctp_crc32c(__be32 crc, u8 *buffer, u16 length) 49static inline __u32 sctp_crc32c(__u32 crc, u8 *buffer, u16 length)
50{ 50{
51 return (__force __be32)crc32c((__force u32)crc, buffer, length); 51 return crc32c(crc, buffer, length);
52} 52}
53 53
54static inline __be32 sctp_start_cksum(__u8 *buffer, __u16 length) 54static inline __u32 sctp_start_cksum(__u8 *buffer, __u16 length)
55{ 55{
56 __be32 crc = ~cpu_to_be32(0); 56 __u32 crc = ~(__u32)0;
57 __u8 zero[sizeof(__u32)] = {0}; 57 __u8 zero[sizeof(__u32)] = {0};
58 58
59 /* Optimize this routine to be SCTP specific, knowing how 59 /* Optimize this routine to be SCTP specific, knowing how
@@ -72,12 +72,12 @@ static inline __be32 sctp_start_cksum(__u8 *buffer, __u16 length)
72 return crc; 72 return crc;
73} 73}
74 74
75static inline __be32 sctp_update_cksum(__u8 *buffer, __u16 length, __be32 crc32) 75static inline __u32 sctp_update_cksum(__u8 *buffer, __u16 length, __u32 crc32)
76{ 76{
77 return sctp_crc32c(crc32, buffer, length); 77 return sctp_crc32c(crc32, buffer, length);
78} 78}
79 79
80static inline __be32 sctp_end_cksum(__be32 crc32) 80static inline __le32 sctp_end_cksum(__be32 crc32)
81{ 81{
82 return (__force __be32)~cpu_to_le32((__force u32)crc32); 82 return cpu_to_le32(~crc32);
83} 83}
diff --git a/include/net/sctp/command.h b/include/net/sctp/command.h
index 88988ab03d75..3b966802e05d 100644
--- a/include/net/sctp/command.h
+++ b/include/net/sctp/command.h
@@ -77,7 +77,8 @@ typedef enum {
77 SCTP_CMD_HB_TIMERS_START, /* Start the heartbeat timers. */ 77 SCTP_CMD_HB_TIMERS_START, /* Start the heartbeat timers. */
78 SCTP_CMD_HB_TIMER_UPDATE, /* Update a heartbeat timers. */ 78 SCTP_CMD_HB_TIMER_UPDATE, /* Update a heartbeat timers. */
79 SCTP_CMD_HB_TIMERS_STOP, /* Stop the heartbeat timers. */ 79 SCTP_CMD_HB_TIMERS_STOP, /* Stop the heartbeat timers. */
80 SCTP_CMD_TRANSPORT_RESET, /* Reset the status of a transport. */ 80 SCTP_CMD_TRANSPORT_HB_SENT, /* Reset the status of a transport. */
81 SCTP_CMD_TRANSPORT_IDLE, /* Do manipulations on idle transport */
81 SCTP_CMD_TRANSPORT_ON, /* Mark the transport as active. */ 82 SCTP_CMD_TRANSPORT_ON, /* Mark the transport as active. */
82 SCTP_CMD_REPORT_ERROR, /* Pass this error back out of the sm. */ 83 SCTP_CMD_REPORT_ERROR, /* Pass this error back out of the sm. */
83 SCTP_CMD_REPORT_BAD_TAG, /* Verification tags didn't match. */ 84 SCTP_CMD_REPORT_BAD_TAG, /* Verification tags didn't match. */
diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h
index bbb7742195b0..9f80a7668289 100644
--- a/include/net/sctp/sctp.h
+++ b/include/net/sctp/sctp.h
@@ -62,13 +62,6 @@
62 * and will continue to evolve. 62 * and will continue to evolve.
63 */ 63 */
64 64
65
66
67#ifdef TEST_FRAME
68#undef CONFIG_SCTP_DBG_OBJCNT
69#undef CONFIG_SYSCTL
70#endif /* TEST_FRAME */
71
72#include <linux/types.h> 65#include <linux/types.h>
73#include <linux/slab.h> 66#include <linux/slab.h>
74#include <linux/in.h> 67#include <linux/in.h>
@@ -138,6 +131,8 @@ void sctp_write_space(struct sock *sk);
138unsigned int sctp_poll(struct file *file, struct socket *sock, 131unsigned int sctp_poll(struct file *file, struct socket *sock,
139 poll_table *wait); 132 poll_table *wait);
140void sctp_sock_rfree(struct sk_buff *skb); 133void sctp_sock_rfree(struct sk_buff *skb);
134void sctp_copy_sock(struct sock *newsk, struct sock *sk,
135 struct sctp_association *asoc);
141extern struct percpu_counter sctp_sockets_allocated; 136extern struct percpu_counter sctp_sockets_allocated;
142 137
143/* 138/*
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index 9661d7b765f0..23f08fe1d50a 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -218,6 +218,10 @@ extern struct sctp_globals {
218 218
219 /* Flag to idicate if SCTP-AUTH is enabled */ 219 /* Flag to idicate if SCTP-AUTH is enabled */
220 int auth_enable; 220 int auth_enable;
221
222 /* Flag to indicate whether computing and verifying checksum
223 * is disabled. */
224 int checksum_disable;
221} sctp_globals; 225} sctp_globals;
222 226
223#define sctp_rto_initial (sctp_globals.rto_initial) 227#define sctp_rto_initial (sctp_globals.rto_initial)
@@ -252,6 +256,7 @@ extern struct sctp_globals {
252#define sctp_addip_noauth (sctp_globals.addip_noauth_enable) 256#define sctp_addip_noauth (sctp_globals.addip_noauth_enable)
253#define sctp_prsctp_enable (sctp_globals.prsctp_enable) 257#define sctp_prsctp_enable (sctp_globals.prsctp_enable)
254#define sctp_auth_enable (sctp_globals.auth_enable) 258#define sctp_auth_enable (sctp_globals.auth_enable)
259#define sctp_checksum_disable (sctp_globals.checksum_disable)
255 260
256/* SCTP Socket type: UDP or TCP style. */ 261/* SCTP Socket type: UDP or TCP style. */
257typedef enum { 262typedef enum {
@@ -905,8 +910,10 @@ struct sctp_transport {
905 * should be set. Every time the RTT 910 * should be set. Every time the RTT
906 * calculation completes (i.e. the DATA chunk 911 * calculation completes (i.e. the DATA chunk
907 * is SACK'd) clear this flag. 912 * is SACK'd) clear this flag.
913 * hb_sent : a flag that signals that we have a pending heartbeat.
908 */ 914 */
909 __u8 rto_pending; 915 __u8 rto_pending;
916 __u8 hb_sent;
910 917
911 /* Flag to track the current fast recovery state */ 918 /* Flag to track the current fast recovery state */
912 __u8 fast_recovery; 919 __u8 fast_recovery;
diff --git a/include/net/sock.h b/include/net/sock.h
index eefeeaf7fc46..4bb1ff9fd15b 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -158,7 +158,7 @@ struct sock_common {
158 * @sk_allocation: allocation mode 158 * @sk_allocation: allocation mode
159 * @sk_sndbuf: size of send buffer in bytes 159 * @sk_sndbuf: size of send buffer in bytes
160 * @sk_flags: %SO_LINGER (l_onoff), %SO_BROADCAST, %SO_KEEPALIVE, 160 * @sk_flags: %SO_LINGER (l_onoff), %SO_BROADCAST, %SO_KEEPALIVE,
161 * %SO_OOBINLINE settings 161 * %SO_OOBINLINE settings, %SO_TIMESTAMPING settings
162 * @sk_no_check: %SO_NO_CHECK setting, wether or not checkup packets 162 * @sk_no_check: %SO_NO_CHECK setting, wether or not checkup packets
163 * @sk_route_caps: route capabilities (e.g. %NETIF_F_TSO) 163 * @sk_route_caps: route capabilities (e.g. %NETIF_F_TSO)
164 * @sk_gso_type: GSO type (e.g. %SKB_GSO_TCPV4) 164 * @sk_gso_type: GSO type (e.g. %SKB_GSO_TCPV4)
@@ -488,6 +488,13 @@ enum sock_flags {
488 SOCK_RCVTSTAMPNS, /* %SO_TIMESTAMPNS setting */ 488 SOCK_RCVTSTAMPNS, /* %SO_TIMESTAMPNS setting */
489 SOCK_LOCALROUTE, /* route locally only, %SO_DONTROUTE setting */ 489 SOCK_LOCALROUTE, /* route locally only, %SO_DONTROUTE setting */
490 SOCK_QUEUE_SHRUNK, /* write queue has been shrunk recently */ 490 SOCK_QUEUE_SHRUNK, /* write queue has been shrunk recently */
491 SOCK_TIMESTAMPING_TX_HARDWARE, /* %SOF_TIMESTAMPING_TX_HARDWARE */
492 SOCK_TIMESTAMPING_TX_SOFTWARE, /* %SOF_TIMESTAMPING_TX_SOFTWARE */
493 SOCK_TIMESTAMPING_RX_HARDWARE, /* %SOF_TIMESTAMPING_RX_HARDWARE */
494 SOCK_TIMESTAMPING_RX_SOFTWARE, /* %SOF_TIMESTAMPING_RX_SOFTWARE */
495 SOCK_TIMESTAMPING_SOFTWARE, /* %SOF_TIMESTAMPING_SOFTWARE */
496 SOCK_TIMESTAMPING_RAW_HARDWARE, /* %SOF_TIMESTAMPING_RAW_HARDWARE */
497 SOCK_TIMESTAMPING_SYS_HARDWARE, /* %SOF_TIMESTAMPING_SYS_HARDWARE */
491}; 498};
492 499
493static inline void sock_copy_flags(struct sock *nsk, struct sock *osk) 500static inline void sock_copy_flags(struct sock *nsk, struct sock *osk)
@@ -944,6 +951,11 @@ extern struct sk_buff *sock_alloc_send_skb(struct sock *sk,
944 unsigned long size, 951 unsigned long size,
945 int noblock, 952 int noblock,
946 int *errcode); 953 int *errcode);
954extern struct sk_buff *sock_alloc_send_pskb(struct sock *sk,
955 unsigned long header_len,
956 unsigned long data_len,
957 int noblock,
958 int *errcode);
947extern void *sock_kmalloc(struct sock *sk, int size, 959extern void *sock_kmalloc(struct sock *sk, int size,
948 gfp_t priority); 960 gfp_t priority);
949extern void sock_kfree_s(struct sock *sk, void *mem, int size); 961extern void sock_kfree_s(struct sock *sk, void *mem, int size);
@@ -1340,14 +1352,45 @@ static __inline__ void
1340sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb) 1352sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb)
1341{ 1353{
1342 ktime_t kt = skb->tstamp; 1354 ktime_t kt = skb->tstamp;
1355 struct skb_shared_hwtstamps *hwtstamps = skb_hwtstamps(skb);
1343 1356
1344 if (sock_flag(sk, SOCK_RCVTSTAMP)) 1357 /*
1358 * generate control messages if
1359 * - receive time stamping in software requested (SOCK_RCVTSTAMP
1360 * or SOCK_TIMESTAMPING_RX_SOFTWARE)
1361 * - software time stamp available and wanted
1362 * (SOCK_TIMESTAMPING_SOFTWARE)
1363 * - hardware time stamps available and wanted
1364 * (SOCK_TIMESTAMPING_SYS_HARDWARE or
1365 * SOCK_TIMESTAMPING_RAW_HARDWARE)
1366 */
1367 if (sock_flag(sk, SOCK_RCVTSTAMP) ||
1368 sock_flag(sk, SOCK_TIMESTAMPING_RX_SOFTWARE) ||
1369 (kt.tv64 && sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE)) ||
1370 (hwtstamps->hwtstamp.tv64 &&
1371 sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE)) ||
1372 (hwtstamps->syststamp.tv64 &&
1373 sock_flag(sk, SOCK_TIMESTAMPING_SYS_HARDWARE)))
1345 __sock_recv_timestamp(msg, sk, skb); 1374 __sock_recv_timestamp(msg, sk, skb);
1346 else 1375 else
1347 sk->sk_stamp = kt; 1376 sk->sk_stamp = kt;
1348} 1377}
1349 1378
1350/** 1379/**
1380 * sock_tx_timestamp - checks whether the outgoing packet is to be time stamped
1381 * @msg: outgoing packet
1382 * @sk: socket sending this packet
1383 * @shtx: filled with instructions for time stamping
1384 *
1385 * Currently only depends on SOCK_TIMESTAMPING* flags. Returns error code if
1386 * parameters are invalid.
1387 */
1388extern int sock_tx_timestamp(struct msghdr *msg,
1389 struct sock *sk,
1390 union skb_shared_tx *shtx);
1391
1392
1393/**
1351 * sk_eat_skb - Release a skb if it is no longer needed 1394 * sk_eat_skb - Release a skb if it is no longer needed
1352 * @sk: socket to eat this skb from 1395 * @sk: socket to eat this skb from
1353 * @skb: socket buffer to eat 1396 * @skb: socket buffer to eat
@@ -1415,7 +1458,7 @@ static inline struct sock *skb_steal_sock(struct sk_buff *skb)
1415 return NULL; 1458 return NULL;
1416} 1459}
1417 1460
1418extern void sock_enable_timestamp(struct sock *sk); 1461extern void sock_enable_timestamp(struct sock *sk, int flag);
1419extern int sock_get_timestamp(struct sock *, struct timeval __user *); 1462extern int sock_get_timestamp(struct sock *, struct timeval __user *);
1420extern int sock_get_timestampns(struct sock *, struct timespec __user *); 1463extern int sock_get_timestampns(struct sock *, struct timespec __user *);
1421 1464
diff --git a/include/net/tcp.h b/include/net/tcp.h
index 218235de8963..e54c76d75495 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -481,7 +481,16 @@ static inline void tcp_clear_xmit_timers(struct sock *sk)
481} 481}
482 482
483extern unsigned int tcp_sync_mss(struct sock *sk, u32 pmtu); 483extern unsigned int tcp_sync_mss(struct sock *sk, u32 pmtu);
484extern unsigned int tcp_current_mss(struct sock *sk, int large); 484extern unsigned int tcp_current_mss(struct sock *sk);
485
486/* Bound MSS / TSO packet size with the half of the window */
487static inline int tcp_bound_to_half_wnd(struct tcp_sock *tp, int pktsize)
488{
489 if (tp->max_window && pktsize > (tp->max_window >> 1))
490 return max(tp->max_window >> 1, 68U - tp->tcp_header_len);
491 else
492 return pktsize;
493}
485 494
486/* tcp.c */ 495/* tcp.c */
487extern void tcp_get_info(struct sock *, struct tcp_info *); 496extern void tcp_get_info(struct sock *, struct tcp_info *);
@@ -685,6 +694,7 @@ extern void tcp_get_allowed_congestion_control(char *buf, size_t len);
685extern int tcp_set_allowed_congestion_control(char *allowed); 694extern int tcp_set_allowed_congestion_control(char *allowed);
686extern int tcp_set_congestion_control(struct sock *sk, const char *name); 695extern int tcp_set_congestion_control(struct sock *sk, const char *name);
687extern void tcp_slow_start(struct tcp_sock *tp); 696extern void tcp_slow_start(struct tcp_sock *tp);
697extern void tcp_cong_avoid_ai(struct tcp_sock *tp, u32 w);
688 698
689extern struct tcp_congestion_ops tcp_init_congestion_ops; 699extern struct tcp_congestion_ops tcp_init_congestion_ops;
690extern u32 tcp_reno_ssthresh(struct sock *sk); 700extern u32 tcp_reno_ssthresh(struct sock *sk);
@@ -821,15 +831,15 @@ static inline void tcp_push_pending_frames(struct sock *sk)
821{ 831{
822 struct tcp_sock *tp = tcp_sk(sk); 832 struct tcp_sock *tp = tcp_sk(sk);
823 833
824 __tcp_push_pending_frames(sk, tcp_current_mss(sk, 1), tp->nonagle); 834 __tcp_push_pending_frames(sk, tcp_current_mss(sk), tp->nonagle);
825} 835}
826 836
827static inline void tcp_init_wl(struct tcp_sock *tp, u32 ack, u32 seq) 837static inline void tcp_init_wl(struct tcp_sock *tp, u32 seq)
828{ 838{
829 tp->snd_wl1 = seq; 839 tp->snd_wl1 = seq;
830} 840}
831 841
832static inline void tcp_update_wl(struct tcp_sock *tp, u32 ack, u32 seq) 842static inline void tcp_update_wl(struct tcp_sock *tp, u32 seq)
833{ 843{
834 tp->snd_wl1 = seq; 844 tp->snd_wl1 = seq;
835} 845}
@@ -925,7 +935,6 @@ extern void tcp_done(struct sock *sk);
925static inline void tcp_sack_reset(struct tcp_options_received *rx_opt) 935static inline void tcp_sack_reset(struct tcp_options_received *rx_opt)
926{ 936{
927 rx_opt->dsack = 0; 937 rx_opt->dsack = 0;
928 rx_opt->eff_sacks = 0;
929 rx_opt->num_sacks = 0; 938 rx_opt->num_sacks = 0;
930} 939}
931 940
@@ -997,11 +1006,21 @@ static inline int tcp_fin_time(const struct sock *sk)
997 return fin_timeout; 1006 return fin_timeout;
998} 1007}
999 1008
1000static inline int tcp_paws_check(const struct tcp_options_received *rx_opt, int rst) 1009static inline int tcp_paws_check(const struct tcp_options_received *rx_opt,
1010 int paws_win)
1001{ 1011{
1002 if ((s32)(rx_opt->rcv_tsval - rx_opt->ts_recent) >= 0) 1012 if ((s32)(rx_opt->ts_recent - rx_opt->rcv_tsval) <= paws_win)
1003 return 0; 1013 return 1;
1004 if (get_seconds() >= rx_opt->ts_recent_stamp + TCP_PAWS_24DAYS) 1014 if (unlikely(get_seconds() >= rx_opt->ts_recent_stamp + TCP_PAWS_24DAYS))
1015 return 1;
1016
1017 return 0;
1018}
1019
1020static inline int tcp_paws_reject(const struct tcp_options_received *rx_opt,
1021 int rst)
1022{
1023 if (tcp_paws_check(rx_opt, 0))
1005 return 0; 1024 return 0;
1006 1025
1007 /* RST segments are not recommended to carry timestamp, 1026 /* RST segments are not recommended to carry timestamp,
diff --git a/include/net/transp_v6.h b/include/net/transp_v6.h
index 876b6f2bb4fd..bfb240c6cf79 100644
--- a/include/net/transp_v6.h
+++ b/include/net/transp_v6.h
@@ -46,7 +46,7 @@ extern int datagram_send_ctl(struct net *net,
46 struct ipv6_txoptions *opt, 46 struct ipv6_txoptions *opt,
47 int *hlimit, int *tclass); 47 int *hlimit, int *tclass);
48 48
49#define LOOPBACK4_IPV6 __constant_htonl(0x7f000006) 49#define LOOPBACK4_IPV6 cpu_to_be32(0x7f000006)
50 50
51/* 51/*
52 * address family specific functions 52 * address family specific functions
diff --git a/include/net/udp.h b/include/net/udp.h
index 90e6ce56be65..93dbe294d459 100644
--- a/include/net/udp.h
+++ b/include/net/udp.h
@@ -124,6 +124,8 @@ static inline void udp_lib_close(struct sock *sk, long timeout)
124 sk_common_release(sk); 124 sk_common_release(sk);
125} 125}
126 126
127extern int ipv4_rcv_saddr_equal(const struct sock *sk1,
128 const struct sock *sk2);
127extern int udp_lib_get_port(struct sock *sk, unsigned short snum, 129extern int udp_lib_get_port(struct sock *sk, unsigned short snum,
128 int (*)(const struct sock*,const struct sock*)); 130 int (*)(const struct sock*,const struct sock*));
129 131
diff --git a/include/net/wireless.h b/include/net/wireless.h
index 21c5d966142d..64a76208580c 100644
--- a/include/net/wireless.h
+++ b/include/net/wireless.h
@@ -69,6 +69,9 @@ enum ieee80211_channel_flags {
69 * @band: band this channel belongs to. 69 * @band: band this channel belongs to.
70 * @max_antenna_gain: maximum antenna gain in dBi 70 * @max_antenna_gain: maximum antenna gain in dBi
71 * @max_power: maximum transmission power (in dBm) 71 * @max_power: maximum transmission power (in dBm)
72 * @beacon_found: helper to regulatory code to indicate when a beacon
73 * has been found on this channel. Use regulatory_hint_found_beacon()
74 * to enable this, this is is useful only on 5 GHz band.
72 * @orig_mag: internal use 75 * @orig_mag: internal use
73 * @orig_mpwr: internal use 76 * @orig_mpwr: internal use
74 */ 77 */
@@ -80,6 +83,7 @@ struct ieee80211_channel {
80 u32 flags; 83 u32 flags;
81 int max_antenna_gain; 84 int max_antenna_gain;
82 int max_power; 85 int max_power;
86 bool beacon_found;
83 u32 orig_flags; 87 u32 orig_flags;
84 int orig_mag, orig_mpwr; 88 int orig_mag, orig_mpwr;
85}; 89};
@@ -181,12 +185,26 @@ struct ieee80211_supported_band {
181 * struct wiphy - wireless hardware description 185 * struct wiphy - wireless hardware description
182 * @idx: the wiphy index assigned to this item 186 * @idx: the wiphy index assigned to this item
183 * @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name> 187 * @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name>
184 * @fw_handles_regulatory: tells us the firmware for this device 188 * @custom_regulatory: tells us the driver for this device
185 * has its own regulatory solution and cannot identify the 189 * has its own custom regulatory domain and cannot identify the
186 * ISO / IEC 3166 alpha2 it belongs to. When this is enabled 190 * ISO / IEC 3166 alpha2 it belongs to. When this is enabled
187 * we will disregard the first regulatory hint (when the 191 * we will disregard the first regulatory hint (when the
188 * initiator is %REGDOM_SET_BY_CORE). 192 * initiator is %REGDOM_SET_BY_CORE).
193 * @strict_regulatory: tells us the driver for this device will ignore
194 * regulatory domain settings until it gets its own regulatory domain
195 * via its regulatory_hint(). After its gets its own regulatory domain
196 * it will only allow further regulatory domain settings to further
197 * enhance compliance. For example if channel 13 and 14 are disabled
198 * by this regulatory domain no user regulatory domain can enable these
199 * channels at a later time. This can be used for devices which do not
200 * have calibration information gauranteed for frequencies or settings
201 * outside of its regulatory domain.
189 * @reg_notifier: the driver's regulatory notification callback 202 * @reg_notifier: the driver's regulatory notification callback
203 * @regd: the driver's regulatory domain, if one was requested via
204 * the regulatory_hint() API. This can be used by the driver
205 * on the reg_notifier() if it chooses to ignore future
206 * regulatory domain changes caused by other drivers.
207 * @signal_type: signal type reported in &struct cfg80211_bss.
190 */ 208 */
191struct wiphy { 209struct wiphy {
192 /* assign these fields before you register the wiphy */ 210 /* assign these fields before you register the wiphy */
@@ -197,7 +215,13 @@ struct wiphy {
197 /* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */ 215 /* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */
198 u16 interface_modes; 216 u16 interface_modes;
199 217
200 bool fw_handles_regulatory; 218 bool custom_regulatory;
219 bool strict_regulatory;
220
221 enum cfg80211_signal_type signal_type;
222
223 int bss_priv_size;
224 u8 max_scan_ssids;
201 225
202 /* If multiple wiphys are registered and you're handed e.g. 226 /* If multiple wiphys are registered and you're handed e.g.
203 * a regular netdev with assigned ieee80211_ptr, you won't 227 * a regular netdev with assigned ieee80211_ptr, you won't
@@ -209,10 +233,13 @@ struct wiphy {
209 struct ieee80211_supported_band *bands[IEEE80211_NUM_BANDS]; 233 struct ieee80211_supported_band *bands[IEEE80211_NUM_BANDS];
210 234
211 /* Lets us get back the wiphy on the callback */ 235 /* Lets us get back the wiphy on the callback */
212 int (*reg_notifier)(struct wiphy *wiphy, enum reg_set_by setby); 236 int (*reg_notifier)(struct wiphy *wiphy,
237 struct regulatory_request *request);
213 238
214 /* fields below are read-only, assigned by cfg80211 */ 239 /* fields below are read-only, assigned by cfg80211 */
215 240
241 const struct ieee80211_regdomain *regd;
242
216 /* the item in /sys/class/ieee80211/ points to this, 243 /* the item in /sys/class/ieee80211/ points to this,
217 * you need use set_wiphy_dev() (see below) */ 244 * you need use set_wiphy_dev() (see below) */
218 struct device dev; 245 struct device dev;
@@ -361,7 +388,7 @@ ieee80211_get_channel(struct wiphy *wiphy, int freq)
361 */ 388 */
362struct ieee80211_rate * 389struct ieee80211_rate *
363ieee80211_get_response_rate(struct ieee80211_supported_band *sband, 390ieee80211_get_response_rate(struct ieee80211_supported_band *sband,
364 u64 basic_rates, int bitrate); 391 u32 basic_rates, int bitrate);
365 392
366/** 393/**
367 * regulatory_hint - driver hint to the wireless core a regulatory domain 394 * regulatory_hint - driver hint to the wireless core a regulatory domain
@@ -378,8 +405,15 @@ ieee80211_get_response_rate(struct ieee80211_supported_band *sband,
378 * domain should be in or by providing a completely build regulatory domain. 405 * domain should be in or by providing a completely build regulatory domain.
379 * If the driver provides an ISO/IEC 3166 alpha2 userspace will be queried 406 * If the driver provides an ISO/IEC 3166 alpha2 userspace will be queried
380 * for a regulatory domain structure for the respective country. 407 * for a regulatory domain structure for the respective country.
408 *
409 * The wiphy must have been registered to cfg80211 prior to this call.
410 * For cfg80211 drivers this means you must first use wiphy_register(),
411 * for mac80211 drivers you must first use ieee80211_register_hw().
412 *
413 * Drivers should check the return value, its possible you can get
414 * an -ENOMEM.
381 */ 415 */
382extern void regulatory_hint(struct wiphy *wiphy, const char *alpha2); 416extern int regulatory_hint(struct wiphy *wiphy, const char *alpha2);
383 417
384/** 418/**
385 * regulatory_hint_11d - hints a country IE as a regulatory domain 419 * regulatory_hint_11d - hints a country IE as a regulatory domain
@@ -395,4 +429,44 @@ extern void regulatory_hint(struct wiphy *wiphy, const char *alpha2);
395extern void regulatory_hint_11d(struct wiphy *wiphy, 429extern void regulatory_hint_11d(struct wiphy *wiphy,
396 u8 *country_ie, 430 u8 *country_ie,
397 u8 country_ie_len); 431 u8 country_ie_len);
432/**
433 * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain
434 * @wiphy: the wireless device we want to process the regulatory domain on
435 * @regd: the custom regulatory domain to use for this wiphy
436 *
437 * Drivers can sometimes have custom regulatory domains which do not apply
438 * to a specific country. Drivers can use this to apply such custom regulatory
439 * domains. This routine must be called prior to wiphy registration. The
440 * custom regulatory domain will be trusted completely and as such previous
441 * default channel settings will be disregarded. If no rule is found for a
442 * channel on the regulatory domain the channel will be disabled.
443 */
444extern void wiphy_apply_custom_regulatory(
445 struct wiphy *wiphy,
446 const struct ieee80211_regdomain *regd);
447
448/**
449 * freq_reg_info - get regulatory information for the given frequency
450 * @wiphy: the wiphy for which we want to process this rule for
451 * @center_freq: Frequency in KHz for which we want regulatory information for
452 * @bandwidth: the bandwidth requirement you have in KHz, if you do not have one
453 * you can set this to 0. If this frequency is allowed we then set
454 * this value to the maximum allowed bandwidth.
455 * @reg_rule: the regulatory rule which we have for this frequency
456 *
457 * Use this function to get the regulatory rule for a specific frequency on
458 * a given wireless device. If the device has a specific regulatory domain
459 * it wants to follow we respect that unless a country IE has been received
460 * and processed already.
461 *
462 * Returns 0 if it was able to find a valid regulatory rule which does
463 * apply to the given center_freq otherwise it returns non-zero. It will
464 * also return -ERANGE if we determine the given center_freq does not even have
465 * a regulatory rule for a frequency range in the center_freq's band. See
466 * freq_in_rule_band() for our current definition of a band -- this is purely
467 * subjective and right now its 802.11 specific.
468 */
469extern int freq_reg_info(struct wiphy *wiphy, u32 center_freq, u32 *bandwidth,
470 const struct ieee80211_reg_rule **reg_rule);
471
398#endif /* __NET_WIRELESS_H */ 472#endif /* __NET_WIRELESS_H */
diff --git a/include/rdma/ib_cm.h b/include/rdma/ib_cm.h
index ec7c6d99ed3f..938858304300 100644
--- a/include/rdma/ib_cm.h
+++ b/include/rdma/ib_cm.h
@@ -314,12 +314,12 @@ struct ib_cm_id *ib_create_cm_id(struct ib_device *device,
314 */ 314 */
315void ib_destroy_cm_id(struct ib_cm_id *cm_id); 315void ib_destroy_cm_id(struct ib_cm_id *cm_id);
316 316
317#define IB_SERVICE_ID_AGN_MASK __constant_cpu_to_be64(0xFF00000000000000ULL) 317#define IB_SERVICE_ID_AGN_MASK cpu_to_be64(0xFF00000000000000ULL)
318#define IB_CM_ASSIGN_SERVICE_ID __constant_cpu_to_be64(0x0200000000000000ULL) 318#define IB_CM_ASSIGN_SERVICE_ID cpu_to_be64(0x0200000000000000ULL)
319#define IB_CMA_SERVICE_ID __constant_cpu_to_be64(0x0000000001000000ULL) 319#define IB_CMA_SERVICE_ID cpu_to_be64(0x0000000001000000ULL)
320#define IB_CMA_SERVICE_ID_MASK __constant_cpu_to_be64(0xFFFFFFFFFF000000ULL) 320#define IB_CMA_SERVICE_ID_MASK cpu_to_be64(0xFFFFFFFFFF000000ULL)
321#define IB_SDP_SERVICE_ID __constant_cpu_to_be64(0x0000000000010000ULL) 321#define IB_SDP_SERVICE_ID cpu_to_be64(0x0000000000010000ULL)
322#define IB_SDP_SERVICE_ID_MASK __constant_cpu_to_be64(0xFFFFFFFFFFFF0000ULL) 322#define IB_SDP_SERVICE_ID_MASK cpu_to_be64(0xFFFFFFFFFFFF0000ULL)
323 323
324struct ib_cm_compare_data { 324struct ib_cm_compare_data {
325 u8 data[IB_CM_COMPARE_SIZE]; 325 u8 data[IB_CM_COMPARE_SIZE];
diff --git a/include/rdma/ib_mad.h b/include/rdma/ib_mad.h
index 5f6c40fffcf4..d3b9401b77b0 100644
--- a/include/rdma/ib_mad.h
+++ b/include/rdma/ib_mad.h
@@ -107,7 +107,7 @@
107#define IB_MGMT_RMPP_STATUS_ABORT_MAX 127 107#define IB_MGMT_RMPP_STATUS_ABORT_MAX 127
108 108
109#define IB_QP0 0 109#define IB_QP0 0
110#define IB_QP1 __constant_htonl(1) 110#define IB_QP1 cpu_to_be32(1)
111#define IB_QP1_QKEY 0x80010000 111#define IB_QP1_QKEY 0x80010000
112#define IB_QP_SET_QKEY 0x80000000 112#define IB_QP_SET_QKEY 0x80000000
113 113
@@ -290,7 +290,7 @@ static inline void ib_set_rmpp_resptime(struct ib_rmpp_hdr *rmpp_hdr, u8 rtime)
290 */ 290 */
291static inline void ib_set_rmpp_flags(struct ib_rmpp_hdr *rmpp_hdr, u8 flags) 291static inline void ib_set_rmpp_flags(struct ib_rmpp_hdr *rmpp_hdr, u8 flags)
292{ 292{
293 rmpp_hdr->rmpp_rtime_flags = (rmpp_hdr->rmpp_rtime_flags & 0xF1) | 293 rmpp_hdr->rmpp_rtime_flags = (rmpp_hdr->rmpp_rtime_flags & 0xF8) |
294 (flags & 0x7); 294 (flags & 0x7);
295} 295}
296 296
diff --git a/include/rdma/ib_smi.h b/include/rdma/ib_smi.h
index aaca0878668f..98b9086d769a 100644
--- a/include/rdma/ib_smi.h
+++ b/include/rdma/ib_smi.h
@@ -63,25 +63,25 @@ struct ib_smp {
63 u8 return_path[IB_SMP_MAX_PATH_HOPS]; 63 u8 return_path[IB_SMP_MAX_PATH_HOPS];
64} __attribute__ ((packed)); 64} __attribute__ ((packed));
65 65
66#define IB_SMP_DIRECTION __constant_htons(0x8000) 66#define IB_SMP_DIRECTION cpu_to_be16(0x8000)
67 67
68/* Subnet management attributes */ 68/* Subnet management attributes */
69#define IB_SMP_ATTR_NOTICE __constant_htons(0x0002) 69#define IB_SMP_ATTR_NOTICE cpu_to_be16(0x0002)
70#define IB_SMP_ATTR_NODE_DESC __constant_htons(0x0010) 70#define IB_SMP_ATTR_NODE_DESC cpu_to_be16(0x0010)
71#define IB_SMP_ATTR_NODE_INFO __constant_htons(0x0011) 71#define IB_SMP_ATTR_NODE_INFO cpu_to_be16(0x0011)
72#define IB_SMP_ATTR_SWITCH_INFO __constant_htons(0x0012) 72#define IB_SMP_ATTR_SWITCH_INFO cpu_to_be16(0x0012)
73#define IB_SMP_ATTR_GUID_INFO __constant_htons(0x0014) 73#define IB_SMP_ATTR_GUID_INFO cpu_to_be16(0x0014)
74#define IB_SMP_ATTR_PORT_INFO __constant_htons(0x0015) 74#define IB_SMP_ATTR_PORT_INFO cpu_to_be16(0x0015)
75#define IB_SMP_ATTR_PKEY_TABLE __constant_htons(0x0016) 75#define IB_SMP_ATTR_PKEY_TABLE cpu_to_be16(0x0016)
76#define IB_SMP_ATTR_SL_TO_VL_TABLE __constant_htons(0x0017) 76#define IB_SMP_ATTR_SL_TO_VL_TABLE cpu_to_be16(0x0017)
77#define IB_SMP_ATTR_VL_ARB_TABLE __constant_htons(0x0018) 77#define IB_SMP_ATTR_VL_ARB_TABLE cpu_to_be16(0x0018)
78#define IB_SMP_ATTR_LINEAR_FORWARD_TABLE __constant_htons(0x0019) 78#define IB_SMP_ATTR_LINEAR_FORWARD_TABLE cpu_to_be16(0x0019)
79#define IB_SMP_ATTR_RANDOM_FORWARD_TABLE __constant_htons(0x001A) 79#define IB_SMP_ATTR_RANDOM_FORWARD_TABLE cpu_to_be16(0x001A)
80#define IB_SMP_ATTR_MCAST_FORWARD_TABLE __constant_htons(0x001B) 80#define IB_SMP_ATTR_MCAST_FORWARD_TABLE cpu_to_be16(0x001B)
81#define IB_SMP_ATTR_SM_INFO __constant_htons(0x0020) 81#define IB_SMP_ATTR_SM_INFO cpu_to_be16(0x0020)
82#define IB_SMP_ATTR_VENDOR_DIAG __constant_htons(0x0030) 82#define IB_SMP_ATTR_VENDOR_DIAG cpu_to_be16(0x0030)
83#define IB_SMP_ATTR_LED_INFO __constant_htons(0x0031) 83#define IB_SMP_ATTR_LED_INFO cpu_to_be16(0x0031)
84#define IB_SMP_ATTR_VENDOR_MASK __constant_htons(0xFF00) 84#define IB_SMP_ATTR_VENDOR_MASK cpu_to_be16(0xFF00)
85 85
86struct ib_port_info { 86struct ib_port_info {
87 __be64 mkey; 87 __be64 mkey;
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 936e333e7ce5..c179318edd92 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -388,7 +388,7 @@ enum {
388 IB_MULTICAST_QPN = 0xffffff 388 IB_MULTICAST_QPN = 0xffffff
389}; 389};
390 390
391#define IB_LID_PERMISSIVE __constant_htons(0xFFFF) 391#define IB_LID_PERMISSIVE cpu_to_be16(0xFFFF)
392 392
393enum ib_ah_flags { 393enum ib_ah_flags {
394 IB_AH_GRH = 1 394 IB_AH_GRH = 1
diff --git a/include/sound/ad1816a.h b/include/sound/ad1816a.h
index b3aa62ee3c8d..d010858c33c2 100644
--- a/include/sound/ad1816a.h
+++ b/include/sound/ad1816a.h
@@ -169,5 +169,7 @@ extern int snd_ad1816a_create(struct snd_card *card, unsigned long port,
169 169
170extern int snd_ad1816a_pcm(struct snd_ad1816a *chip, int device, struct snd_pcm **rpcm); 170extern int snd_ad1816a_pcm(struct snd_ad1816a *chip, int device, struct snd_pcm **rpcm);
171extern int snd_ad1816a_mixer(struct snd_ad1816a *chip); 171extern int snd_ad1816a_mixer(struct snd_ad1816a *chip);
172extern int snd_ad1816a_timer(struct snd_ad1816a *chip, int device,
173 struct snd_timer **rtimer);
172 174
173#endif /* __SOUND_AD1816A_H */ 175#endif /* __SOUND_AD1816A_H */
diff --git a/include/sound/asound.h b/include/sound/asound.h
index 1c02ed1d7c4a..fad3e0c7b932 100644
--- a/include/sound/asound.h
+++ b/include/sound/asound.h
@@ -126,12 +126,10 @@ struct snd_hwdep_dsp_image {
126 unsigned long driver_data; /* W: driver-specific data */ 126 unsigned long driver_data; /* W: driver-specific data */
127}; 127};
128 128
129enum { 129#define SNDRV_HWDEP_IOCTL_PVERSION _IOR ('H', 0x00, int)
130 SNDRV_HWDEP_IOCTL_PVERSION = _IOR ('H', 0x00, int), 130#define SNDRV_HWDEP_IOCTL_INFO _IOR ('H', 0x01, struct snd_hwdep_info)
131 SNDRV_HWDEP_IOCTL_INFO = _IOR ('H', 0x01, struct snd_hwdep_info), 131#define SNDRV_HWDEP_IOCTL_DSP_STATUS _IOR('H', 0x02, struct snd_hwdep_dsp_status)
132 SNDRV_HWDEP_IOCTL_DSP_STATUS = _IOR('H', 0x02, struct snd_hwdep_dsp_status), 132#define SNDRV_HWDEP_IOCTL_DSP_LOAD _IOW('H', 0x03, struct snd_hwdep_dsp_image)
133 SNDRV_HWDEP_IOCTL_DSP_LOAD = _IOW('H', 0x03, struct snd_hwdep_dsp_image)
134};
135 133
136/***************************************************************************** 134/*****************************************************************************
137 * * 135 * *
@@ -451,40 +449,35 @@ enum {
451 SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC, 449 SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC,
452}; 450};
453 451
454enum { 452#define SNDRV_PCM_IOCTL_PVERSION _IOR('A', 0x00, int)
455 SNDRV_PCM_IOCTL_PVERSION = _IOR('A', 0x00, int), 453#define SNDRV_PCM_IOCTL_INFO _IOR('A', 0x01, struct snd_pcm_info)
456 SNDRV_PCM_IOCTL_INFO = _IOR('A', 0x01, struct snd_pcm_info), 454#define SNDRV_PCM_IOCTL_TSTAMP _IOW('A', 0x02, int)
457 SNDRV_PCM_IOCTL_TSTAMP = _IOW('A', 0x02, int), 455#define SNDRV_PCM_IOCTL_TTSTAMP _IOW('A', 0x03, int)
458 SNDRV_PCM_IOCTL_TTSTAMP = _IOW('A', 0x03, int), 456#define SNDRV_PCM_IOCTL_HW_REFINE _IOWR('A', 0x10, struct snd_pcm_hw_params)
459 SNDRV_PCM_IOCTL_HW_REFINE = _IOWR('A', 0x10, struct snd_pcm_hw_params), 457#define SNDRV_PCM_IOCTL_HW_PARAMS _IOWR('A', 0x11, struct snd_pcm_hw_params)
460 SNDRV_PCM_IOCTL_HW_PARAMS = _IOWR('A', 0x11, struct snd_pcm_hw_params), 458#define SNDRV_PCM_IOCTL_HW_FREE _IO('A', 0x12)
461 SNDRV_PCM_IOCTL_HW_FREE = _IO('A', 0x12), 459#define SNDRV_PCM_IOCTL_SW_PARAMS _IOWR('A', 0x13, struct snd_pcm_sw_params)
462 SNDRV_PCM_IOCTL_SW_PARAMS = _IOWR('A', 0x13, struct snd_pcm_sw_params), 460#define SNDRV_PCM_IOCTL_STATUS _IOR('A', 0x20, struct snd_pcm_status)
463 SNDRV_PCM_IOCTL_STATUS = _IOR('A', 0x20, struct snd_pcm_status), 461#define SNDRV_PCM_IOCTL_DELAY _IOR('A', 0x21, snd_pcm_sframes_t)
464 SNDRV_PCM_IOCTL_DELAY = _IOR('A', 0x21, snd_pcm_sframes_t), 462#define SNDRV_PCM_IOCTL_HWSYNC _IO('A', 0x22)
465 SNDRV_PCM_IOCTL_HWSYNC = _IO('A', 0x22), 463#define SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct snd_pcm_sync_ptr)
466 SNDRV_PCM_IOCTL_SYNC_PTR = _IOWR('A', 0x23, struct snd_pcm_sync_ptr), 464#define SNDRV_PCM_IOCTL_CHANNEL_INFO _IOR('A', 0x32, struct snd_pcm_channel_info)
467 SNDRV_PCM_IOCTL_CHANNEL_INFO = _IOR('A', 0x32, struct snd_pcm_channel_info), 465#define SNDRV_PCM_IOCTL_PREPARE _IO('A', 0x40)
468 SNDRV_PCM_IOCTL_PREPARE = _IO('A', 0x40), 466#define SNDRV_PCM_IOCTL_RESET _IO('A', 0x41)
469 SNDRV_PCM_IOCTL_RESET = _IO('A', 0x41), 467#define SNDRV_PCM_IOCTL_START _IO('A', 0x42)
470 SNDRV_PCM_IOCTL_START = _IO('A', 0x42), 468#define SNDRV_PCM_IOCTL_DROP _IO('A', 0x43)
471 SNDRV_PCM_IOCTL_DROP = _IO('A', 0x43), 469#define SNDRV_PCM_IOCTL_DRAIN _IO('A', 0x44)
472 SNDRV_PCM_IOCTL_DRAIN = _IO('A', 0x44), 470#define SNDRV_PCM_IOCTL_PAUSE _IOW('A', 0x45, int)
473 SNDRV_PCM_IOCTL_PAUSE = _IOW('A', 0x45, int), 471#define SNDRV_PCM_IOCTL_REWIND _IOW('A', 0x46, snd_pcm_uframes_t)
474 SNDRV_PCM_IOCTL_REWIND = _IOW('A', 0x46, snd_pcm_uframes_t), 472#define SNDRV_PCM_IOCTL_RESUME _IO('A', 0x47)
475 SNDRV_PCM_IOCTL_RESUME = _IO('A', 0x47), 473#define SNDRV_PCM_IOCTL_XRUN _IO('A', 0x48)
476 SNDRV_PCM_IOCTL_XRUN = _IO('A', 0x48), 474#define SNDRV_PCM_IOCTL_FORWARD _IOW('A', 0x49, snd_pcm_uframes_t)
477 SNDRV_PCM_IOCTL_FORWARD = _IOW('A', 0x49, snd_pcm_uframes_t), 475#define SNDRV_PCM_IOCTL_WRITEI_FRAMES _IOW('A', 0x50, struct snd_xferi)
478 SNDRV_PCM_IOCTL_WRITEI_FRAMES = _IOW('A', 0x50, struct snd_xferi), 476#define SNDRV_PCM_IOCTL_READI_FRAMES _IOR('A', 0x51, struct snd_xferi)
479 SNDRV_PCM_IOCTL_READI_FRAMES = _IOR('A', 0x51, struct snd_xferi), 477#define SNDRV_PCM_IOCTL_WRITEN_FRAMES _IOW('A', 0x52, struct snd_xfern)
480 SNDRV_PCM_IOCTL_WRITEN_FRAMES = _IOW('A', 0x52, struct snd_xfern), 478#define SNDRV_PCM_IOCTL_READN_FRAMES _IOR('A', 0x53, struct snd_xfern)
481 SNDRV_PCM_IOCTL_READN_FRAMES = _IOR('A', 0x53, struct snd_xfern), 479#define SNDRV_PCM_IOCTL_LINK _IOW('A', 0x60, int)
482 SNDRV_PCM_IOCTL_LINK = _IOW('A', 0x60, int), 480#define SNDRV_PCM_IOCTL_UNLINK _IO('A', 0x61)
483 SNDRV_PCM_IOCTL_UNLINK = _IO('A', 0x61),
484};
485
486/* Trick to make alsa-lib/acinclude.m4 happy */
487#define SNDRV_PCM_IOCTL_REWIND SNDRV_PCM_IOCTL_REWIND
488 481
489/***************************************************************************** 482/*****************************************************************************
490 * * 483 * *
@@ -538,14 +531,12 @@ struct snd_rawmidi_status {
538 unsigned char reserved[16]; /* reserved for future use */ 531 unsigned char reserved[16]; /* reserved for future use */
539}; 532};
540 533
541enum { 534#define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int)
542 SNDRV_RAWMIDI_IOCTL_PVERSION = _IOR('W', 0x00, int), 535#define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info)
543 SNDRV_RAWMIDI_IOCTL_INFO = _IOR('W', 0x01, struct snd_rawmidi_info), 536#define SNDRV_RAWMIDI_IOCTL_PARAMS _IOWR('W', 0x10, struct snd_rawmidi_params)
544 SNDRV_RAWMIDI_IOCTL_PARAMS = _IOWR('W', 0x10, struct snd_rawmidi_params), 537#define SNDRV_RAWMIDI_IOCTL_STATUS _IOWR('W', 0x20, struct snd_rawmidi_status)
545 SNDRV_RAWMIDI_IOCTL_STATUS = _IOWR('W', 0x20, struct snd_rawmidi_status), 538#define SNDRV_RAWMIDI_IOCTL_DROP _IOW('W', 0x30, int)
546 SNDRV_RAWMIDI_IOCTL_DROP = _IOW('W', 0x30, int), 539#define SNDRV_RAWMIDI_IOCTL_DRAIN _IOW('W', 0x31, int)
547 SNDRV_RAWMIDI_IOCTL_DRAIN = _IOW('W', 0x31, int),
548};
549 540
550/* 541/*
551 * Timer section - /dev/snd/timer 542 * Timer section - /dev/snd/timer
@@ -654,23 +645,21 @@ struct snd_timer_status {
654 unsigned char reserved[64]; /* reserved */ 645 unsigned char reserved[64]; /* reserved */
655}; 646};
656 647
657enum { 648#define SNDRV_TIMER_IOCTL_PVERSION _IOR('T', 0x00, int)
658 SNDRV_TIMER_IOCTL_PVERSION = _IOR('T', 0x00, int), 649#define SNDRV_TIMER_IOCTL_NEXT_DEVICE _IOWR('T', 0x01, struct snd_timer_id)
659 SNDRV_TIMER_IOCTL_NEXT_DEVICE = _IOWR('T', 0x01, struct snd_timer_id), 650#define SNDRV_TIMER_IOCTL_TREAD _IOW('T', 0x02, int)
660 SNDRV_TIMER_IOCTL_TREAD = _IOW('T', 0x02, int), 651#define SNDRV_TIMER_IOCTL_GINFO _IOWR('T', 0x03, struct snd_timer_ginfo)
661 SNDRV_TIMER_IOCTL_GINFO = _IOWR('T', 0x03, struct snd_timer_ginfo), 652#define SNDRV_TIMER_IOCTL_GPARAMS _IOW('T', 0x04, struct snd_timer_gparams)
662 SNDRV_TIMER_IOCTL_GPARAMS = _IOW('T', 0x04, struct snd_timer_gparams), 653#define SNDRV_TIMER_IOCTL_GSTATUS _IOWR('T', 0x05, struct snd_timer_gstatus)
663 SNDRV_TIMER_IOCTL_GSTATUS = _IOWR('T', 0x05, struct snd_timer_gstatus), 654#define SNDRV_TIMER_IOCTL_SELECT _IOW('T', 0x10, struct snd_timer_select)
664 SNDRV_TIMER_IOCTL_SELECT = _IOW('T', 0x10, struct snd_timer_select), 655#define SNDRV_TIMER_IOCTL_INFO _IOR('T', 0x11, struct snd_timer_info)
665 SNDRV_TIMER_IOCTL_INFO = _IOR('T', 0x11, struct snd_timer_info), 656#define SNDRV_TIMER_IOCTL_PARAMS _IOW('T', 0x12, struct snd_timer_params)
666 SNDRV_TIMER_IOCTL_PARAMS = _IOW('T', 0x12, struct snd_timer_params), 657#define SNDRV_TIMER_IOCTL_STATUS _IOR('T', 0x14, struct snd_timer_status)
667 SNDRV_TIMER_IOCTL_STATUS = _IOR('T', 0x14, struct snd_timer_status), 658/* The following four ioctls are changed since 1.0.9 due to confliction */
668 /* The following four ioctls are changed since 1.0.9 due to confliction */ 659#define SNDRV_TIMER_IOCTL_START _IO('T', 0xa0)
669 SNDRV_TIMER_IOCTL_START = _IO('T', 0xa0), 660#define SNDRV_TIMER_IOCTL_STOP _IO('T', 0xa1)
670 SNDRV_TIMER_IOCTL_STOP = _IO('T', 0xa1), 661#define SNDRV_TIMER_IOCTL_CONTINUE _IO('T', 0xa2)
671 SNDRV_TIMER_IOCTL_CONTINUE = _IO('T', 0xa2), 662#define SNDRV_TIMER_IOCTL_PAUSE _IO('T', 0xa3)
672 SNDRV_TIMER_IOCTL_PAUSE = _IO('T', 0xa3),
673};
674 663
675struct snd_timer_read { 664struct snd_timer_read {
676 unsigned int resolution; 665 unsigned int resolution;
@@ -847,33 +836,31 @@ struct snd_ctl_tlv {
847 unsigned int tlv[0]; /* first TLV */ 836 unsigned int tlv[0]; /* first TLV */
848}; 837};
849 838
850enum { 839#define SNDRV_CTL_IOCTL_PVERSION _IOR('U', 0x00, int)
851 SNDRV_CTL_IOCTL_PVERSION = _IOR('U', 0x00, int), 840#define SNDRV_CTL_IOCTL_CARD_INFO _IOR('U', 0x01, struct snd_ctl_card_info)
852 SNDRV_CTL_IOCTL_CARD_INFO = _IOR('U', 0x01, struct snd_ctl_card_info), 841#define SNDRV_CTL_IOCTL_ELEM_LIST _IOWR('U', 0x10, struct snd_ctl_elem_list)
853 SNDRV_CTL_IOCTL_ELEM_LIST = _IOWR('U', 0x10, struct snd_ctl_elem_list), 842#define SNDRV_CTL_IOCTL_ELEM_INFO _IOWR('U', 0x11, struct snd_ctl_elem_info)
854 SNDRV_CTL_IOCTL_ELEM_INFO = _IOWR('U', 0x11, struct snd_ctl_elem_info), 843#define SNDRV_CTL_IOCTL_ELEM_READ _IOWR('U', 0x12, struct snd_ctl_elem_value)
855 SNDRV_CTL_IOCTL_ELEM_READ = _IOWR('U', 0x12, struct snd_ctl_elem_value), 844#define SNDRV_CTL_IOCTL_ELEM_WRITE _IOWR('U', 0x13, struct snd_ctl_elem_value)
856 SNDRV_CTL_IOCTL_ELEM_WRITE = _IOWR('U', 0x13, struct snd_ctl_elem_value), 845#define SNDRV_CTL_IOCTL_ELEM_LOCK _IOW('U', 0x14, struct snd_ctl_elem_id)
857 SNDRV_CTL_IOCTL_ELEM_LOCK = _IOW('U', 0x14, struct snd_ctl_elem_id), 846#define SNDRV_CTL_IOCTL_ELEM_UNLOCK _IOW('U', 0x15, struct snd_ctl_elem_id)
858 SNDRV_CTL_IOCTL_ELEM_UNLOCK = _IOW('U', 0x15, struct snd_ctl_elem_id), 847#define SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS _IOWR('U', 0x16, int)
859 SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS = _IOWR('U', 0x16, int), 848#define SNDRV_CTL_IOCTL_ELEM_ADD _IOWR('U', 0x17, struct snd_ctl_elem_info)
860 SNDRV_CTL_IOCTL_ELEM_ADD = _IOWR('U', 0x17, struct snd_ctl_elem_info), 849#define SNDRV_CTL_IOCTL_ELEM_REPLACE _IOWR('U', 0x18, struct snd_ctl_elem_info)
861 SNDRV_CTL_IOCTL_ELEM_REPLACE = _IOWR('U', 0x18, struct snd_ctl_elem_info), 850#define SNDRV_CTL_IOCTL_ELEM_REMOVE _IOWR('U', 0x19, struct snd_ctl_elem_id)
862 SNDRV_CTL_IOCTL_ELEM_REMOVE = _IOWR('U', 0x19, struct snd_ctl_elem_id), 851#define SNDRV_CTL_IOCTL_TLV_READ _IOWR('U', 0x1a, struct snd_ctl_tlv)
863 SNDRV_CTL_IOCTL_TLV_READ = _IOWR('U', 0x1a, struct snd_ctl_tlv), 852#define SNDRV_CTL_IOCTL_TLV_WRITE _IOWR('U', 0x1b, struct snd_ctl_tlv)
864 SNDRV_CTL_IOCTL_TLV_WRITE = _IOWR('U', 0x1b, struct snd_ctl_tlv), 853#define SNDRV_CTL_IOCTL_TLV_COMMAND _IOWR('U', 0x1c, struct snd_ctl_tlv)
865 SNDRV_CTL_IOCTL_TLV_COMMAND = _IOWR('U', 0x1c, struct snd_ctl_tlv), 854#define SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE _IOWR('U', 0x20, int)
866 SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE = _IOWR('U', 0x20, int), 855#define SNDRV_CTL_IOCTL_HWDEP_INFO _IOR('U', 0x21, struct snd_hwdep_info)
867 SNDRV_CTL_IOCTL_HWDEP_INFO = _IOR('U', 0x21, struct snd_hwdep_info), 856#define SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE _IOR('U', 0x30, int)
868 SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE = _IOR('U', 0x30, int), 857#define SNDRV_CTL_IOCTL_PCM_INFO _IOWR('U', 0x31, struct snd_pcm_info)
869 SNDRV_CTL_IOCTL_PCM_INFO = _IOWR('U', 0x31, struct snd_pcm_info), 858#define SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE _IOW('U', 0x32, int)
870 SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE = _IOW('U', 0x32, int), 859#define SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE _IOWR('U', 0x40, int)
871 SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE = _IOWR('U', 0x40, int), 860#define SNDRV_CTL_IOCTL_RAWMIDI_INFO _IOWR('U', 0x41, struct snd_rawmidi_info)
872 SNDRV_CTL_IOCTL_RAWMIDI_INFO = _IOWR('U', 0x41, struct snd_rawmidi_info), 861#define SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE _IOW('U', 0x42, int)
873 SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE = _IOW('U', 0x42, int), 862#define SNDRV_CTL_IOCTL_POWER _IOWR('U', 0xd0, int)
874 SNDRV_CTL_IOCTL_POWER = _IOWR('U', 0xd0, int), 863#define SNDRV_CTL_IOCTL_POWER_STATE _IOR('U', 0xd1, int)
875 SNDRV_CTL_IOCTL_POWER_STATE = _IOR('U', 0xd1, int),
876};
877 864
878/* 865/*
879 * Read interface. 866 * Read interface.
@@ -919,18 +906,4 @@ struct snd_ctl_event {
919#define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream" 906#define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream"
920#define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what 907#define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what
921 908
922/*
923 *
924 */
925
926struct snd_xferv {
927 const struct iovec *vector;
928 unsigned long count;
929};
930
931enum {
932 SNDRV_IOCTL_READV = _IOW('K', 0x00, struct snd_xferv),
933 SNDRV_IOCTL_WRITEV = _IOW('K', 0x01, struct snd_xferv),
934};
935
936#endif /* __SOUND_ASOUND_H */ 909#endif /* __SOUND_ASOUND_H */
diff --git a/include/sound/atmel-abdac.h b/include/sound/atmel-abdac.h
new file mode 100644
index 000000000000..edff6a8ba1b5
--- /dev/null
+++ b/include/sound/atmel-abdac.h
@@ -0,0 +1,23 @@
1/*
2 * Driver for the Atmel Audio Bitstream DAC (ABDAC)
3 *
4 * Copyright (C) 2009 Atmel Corporation
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 as published
8 * by the Free Software Foundation.
9 */
10#ifndef __INCLUDE_SOUND_ATMEL_ABDAC_H
11#define __INCLUDE_SOUND_ATMEL_ABDAC_H
12
13#include <linux/dw_dmac.h>
14
15/**
16 * struct atmel_abdac_pdata - board specific ABDAC configuration
17 * @dws: DMA slave interface to use for sound playback.
18 */
19struct atmel_abdac_pdata {
20 struct dw_dma_slave dws;
21};
22
23#endif /* __INCLUDE_SOUND_ATMEL_ABDAC_H */
diff --git a/include/sound/atmel-ac97c.h b/include/sound/atmel-ac97c.h
new file mode 100644
index 000000000000..e6aabdb45865
--- /dev/null
+++ b/include/sound/atmel-ac97c.h
@@ -0,0 +1,40 @@
1/*
2 * Driver for the Atmel AC97C controller
3 *
4 * Copyright (C) 2005-2009 Atmel Corporation
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 as published
8 * by the Free Software Foundation.
9 */
10#ifndef __INCLUDE_SOUND_ATMEL_AC97C_H
11#define __INCLUDE_SOUND_ATMEL_AC97C_H
12
13#include <linux/dw_dmac.h>
14
15#define AC97C_CAPTURE 0x01
16#define AC97C_PLAYBACK 0x02
17#define AC97C_BOTH (AC97C_CAPTURE | AC97C_PLAYBACK)
18
19/**
20 * struct atmel_ac97c_pdata - board specific AC97C configuration
21 * @rx_dws: DMA slave interface to use for sound capture.
22 * @tx_dws: DMA slave interface to use for sound playback.
23 * @reset_pin: GPIO pin wired to the reset input on the external AC97 codec,
24 * optional to use, set to -ENODEV if not in use. AC97 layer will
25 * try to do a software reset of the external codec anyway.
26 * @flags: Flags for which directions should be enabled.
27 *
28 * If the user do not want to use a DMA channel for playback or capture, i.e.
29 * only one feature is required on the board. The slave for playback or capture
30 * can be set to NULL. The AC97C driver will take use of this when setting up
31 * the sound streams.
32 */
33struct ac97c_platform_data {
34 struct dw_dma_slave rx_dws;
35 struct dw_dma_slave tx_dws;
36 unsigned int flags;
37 int reset_pin;
38};
39
40#endif /* __INCLUDE_SOUND_ATMEL_AC97C_H */
diff --git a/include/sound/control.h b/include/sound/control.h
index 4721b4bba053..ef96f07aa03b 100644
--- a/include/sound/control.h
+++ b/include/sound/control.h
@@ -171,6 +171,54 @@ int snd_ctl_boolean_stereo_info(struct snd_kcontrol *kcontrol,
171 */ 171 */
172struct snd_kcontrol *snd_ctl_make_virtual_master(char *name, 172struct snd_kcontrol *snd_ctl_make_virtual_master(char *name,
173 const unsigned int *tlv); 173 const unsigned int *tlv);
174int snd_ctl_add_slave(struct snd_kcontrol *master, struct snd_kcontrol *slave); 174int _snd_ctl_add_slave(struct snd_kcontrol *master, struct snd_kcontrol *slave,
175 175 unsigned int flags);
176/* optional flags for slave */
177#define SND_CTL_SLAVE_NEED_UPDATE (1 << 0)
178
179/**
180 * snd_ctl_add_slave - Add a virtual slave control
181 * @master: vmaster element
182 * @slave: slave element to add
183 *
184 * Add a virtual slave control to the given master element created via
185 * snd_ctl_create_virtual_master() beforehand.
186 * Returns zero if successful or a negative error code.
187 *
188 * All slaves must be the same type (returning the same information
189 * via info callback). The fucntion doesn't check it, so it's your
190 * responsibility.
191 *
192 * Also, some additional limitations:
193 * at most two channels,
194 * logarithmic volume control (dB level) thus no linear volume,
195 * master can only attenuate the volume without gain
196 */
197static inline int
198snd_ctl_add_slave(struct snd_kcontrol *master, struct snd_kcontrol *slave)
199{
200 return _snd_ctl_add_slave(master, slave, 0);
201}
202
203/**
204 * snd_ctl_add_slave_uncached - Add a virtual slave control
205 * @master: vmaster element
206 * @slave: slave element to add
207 *
208 * Add a virtual slave control to the given master.
209 * Unlike snd_ctl_add_slave(), the element added via this function
210 * is supposed to have volatile values, and get callback is called
211 * at each time quried from the master.
212 *
213 * When the control peeks the hardware values directly and the value
214 * can be changed by other means than the put callback of the element,
215 * this function should be used to keep the value always up-to-date.
216 */
217static inline int
218snd_ctl_add_slave_uncached(struct snd_kcontrol *master,
219 struct snd_kcontrol *slave)
220{
221 return _snd_ctl_add_slave(master, slave, SND_CTL_SLAVE_NEED_UPDATE);
222}
223
176#endif /* __SOUND_CONTROL_H */ 224#endif /* __SOUND_CONTROL_H */
diff --git a/include/sound/core.h b/include/sound/core.h
index f632484bc743..3dea79829acc 100644
--- a/include/sound/core.h
+++ b/include/sound/core.h
@@ -97,9 +97,9 @@ struct snd_device {
97 97
98struct snd_monitor_file { 98struct snd_monitor_file {
99 struct file *file; 99 struct file *file;
100 struct snd_monitor_file *next;
101 const struct file_operations *disconnected_f_op; 100 const struct file_operations *disconnected_f_op;
102 struct list_head shutdown_list; 101 struct list_head shutdown_list; /* still need to shutdown */
102 struct list_head list; /* link of monitor files */
103}; 103};
104 104
105/* main structure for soundcard */ 105/* main structure for soundcard */
@@ -134,7 +134,7 @@ struct snd_card {
134 struct snd_info_entry *proc_id; /* the card id */ 134 struct snd_info_entry *proc_id; /* the card id */
135 struct proc_dir_entry *proc_root_link; /* number link to real id */ 135 struct proc_dir_entry *proc_root_link; /* number link to real id */
136 136
137 struct snd_monitor_file *files; /* all files associated to this card */ 137 struct list_head files_list; /* all files associated to this card */
138 struct snd_shutdown_f_ops *s_f_ops; /* file operations in the shutdown 138 struct snd_shutdown_f_ops *s_f_ops; /* file operations in the shutdown
139 state */ 139 state */
140 spinlock_t files_lock; /* lock the files for this card */ 140 spinlock_t files_lock; /* lock the files for this card */
@@ -296,8 +296,20 @@ int snd_card_locked(int card);
296extern int (*snd_mixer_oss_notify_callback)(struct snd_card *card, int cmd); 296extern int (*snd_mixer_oss_notify_callback)(struct snd_card *card, int cmd);
297#endif 297#endif
298 298
299int snd_card_create(int idx, const char *id,
300 struct module *module, int extra_size,
301 struct snd_card **card_ret);
302
303static inline __deprecated
299struct snd_card *snd_card_new(int idx, const char *id, 304struct snd_card *snd_card_new(int idx, const char *id,
300 struct module *module, int extra_size); 305 struct module *module, int extra_size)
306{
307 struct snd_card *card;
308 if (snd_card_create(idx, id, module, extra_size, &card) < 0)
309 return NULL;
310 return card;
311}
312
301int snd_card_disconnect(struct snd_card *card); 313int snd_card_disconnect(struct snd_card *card);
302int snd_card_free(struct snd_card *card); 314int snd_card_free(struct snd_card *card);
303int snd_card_free_when_closed(struct snd_card *card); 315int snd_card_free_when_closed(struct snd_card *card);
@@ -446,21 +458,33 @@ static inline int __snd_bug_on(int cond)
446struct snd_pci_quirk { 458struct snd_pci_quirk {
447 unsigned short subvendor; /* PCI subvendor ID */ 459 unsigned short subvendor; /* PCI subvendor ID */
448 unsigned short subdevice; /* PCI subdevice ID */ 460 unsigned short subdevice; /* PCI subdevice ID */
461 unsigned short subdevice_mask; /* bitmask to match */
449 int value; /* value */ 462 int value; /* value */
450#ifdef CONFIG_SND_DEBUG_VERBOSE 463#ifdef CONFIG_SND_DEBUG_VERBOSE
451 const char *name; /* name of the device (optional) */ 464 const char *name; /* name of the device (optional) */
452#endif 465#endif
453}; 466};
454 467
455#define _SND_PCI_QUIRK_ID(vend,dev) \ 468#define _SND_PCI_QUIRK_ID_MASK(vend, mask, dev) \
456 .subvendor = (vend), .subdevice = (dev) 469 .subvendor = (vend), .subdevice = (dev), .subdevice_mask = (mask)
470#define _SND_PCI_QUIRK_ID(vend, dev) \
471 _SND_PCI_QUIRK_ID_MASK(vend, 0xffff, dev)
457#define SND_PCI_QUIRK_ID(vend,dev) {_SND_PCI_QUIRK_ID(vend, dev)} 472#define SND_PCI_QUIRK_ID(vend,dev) {_SND_PCI_QUIRK_ID(vend, dev)}
458#ifdef CONFIG_SND_DEBUG_VERBOSE 473#ifdef CONFIG_SND_DEBUG_VERBOSE
459#define SND_PCI_QUIRK(vend,dev,xname,val) \ 474#define SND_PCI_QUIRK(vend,dev,xname,val) \
460 {_SND_PCI_QUIRK_ID(vend, dev), .value = (val), .name = (xname)} 475 {_SND_PCI_QUIRK_ID(vend, dev), .value = (val), .name = (xname)}
476#define SND_PCI_QUIRK_VENDOR(vend, xname, val) \
477 {_SND_PCI_QUIRK_ID_MASK(vend, 0, 0), .value = (val), .name = (xname)}
478#define SND_PCI_QUIRK_MASK(vend, mask, dev, xname, val) \
479 {_SND_PCI_QUIRK_ID_MASK(vend, mask, dev), \
480 .value = (val), .name = (xname)}
461#else 481#else
462#define SND_PCI_QUIRK(vend,dev,xname,val) \ 482#define SND_PCI_QUIRK(vend,dev,xname,val) \
463 {_SND_PCI_QUIRK_ID(vend, dev), .value = (val)} 483 {_SND_PCI_QUIRK_ID(vend, dev), .value = (val)}
484#define SND_PCI_QUIRK_MASK(vend, mask, dev, xname, val) \
485 {_SND_PCI_QUIRK_ID_MASK(vend, mask, dev), .value = (val)}
486#define SND_PCI_QUIRK_VENDOR(vend, xname, val) \
487 {_SND_PCI_QUIRK_ID_MASK(vend, 0, 0), .value = (val)}
464#endif 488#endif
465 489
466const struct snd_pci_quirk * 490const struct snd_pci_quirk *
diff --git a/include/sound/hwdep.h b/include/sound/hwdep.h
index d9eea013c753..8c05e47a4090 100644
--- a/include/sound/hwdep.h
+++ b/include/sound/hwdep.h
@@ -27,18 +27,28 @@
27 27
28struct snd_hwdep; 28struct snd_hwdep;
29 29
30/* hwdep file ops; all ops can be NULL */
30struct snd_hwdep_ops { 31struct snd_hwdep_ops {
31 long long (*llseek) (struct snd_hwdep *hw, struct file * file, long long offset, int orig); 32 long long (*llseek)(struct snd_hwdep *hw, struct file *file,
32 long (*read) (struct snd_hwdep *hw, char __user *buf, long count, loff_t *offset); 33 long long offset, int orig);
33 long (*write) (struct snd_hwdep *hw, const char __user *buf, long count, loff_t *offset); 34 long (*read)(struct snd_hwdep *hw, char __user *buf,
34 int (*open) (struct snd_hwdep * hw, struct file * file); 35 long count, loff_t *offset);
35 int (*release) (struct snd_hwdep *hw, struct file * file); 36 long (*write)(struct snd_hwdep *hw, const char __user *buf,
36 unsigned int (*poll) (struct snd_hwdep *hw, struct file * file, poll_table * wait); 37 long count, loff_t *offset);
37 int (*ioctl) (struct snd_hwdep *hw, struct file * file, unsigned int cmd, unsigned long arg); 38 int (*open)(struct snd_hwdep *hw, struct file * file);
38 int (*ioctl_compat) (struct snd_hwdep *hw, struct file * file, unsigned int cmd, unsigned long arg); 39 int (*release)(struct snd_hwdep *hw, struct file * file);
39 int (*mmap) (struct snd_hwdep *hw, struct file * file, struct vm_area_struct * vma); 40 unsigned int (*poll)(struct snd_hwdep *hw, struct file *file,
40 int (*dsp_status) (struct snd_hwdep *hw, struct snd_hwdep_dsp_status *status); 41 poll_table *wait);
41 int (*dsp_load) (struct snd_hwdep *hw, struct snd_hwdep_dsp_image *image); 42 int (*ioctl)(struct snd_hwdep *hw, struct file *file,
43 unsigned int cmd, unsigned long arg);
44 int (*ioctl_compat)(struct snd_hwdep *hw, struct file *file,
45 unsigned int cmd, unsigned long arg);
46 int (*mmap)(struct snd_hwdep *hw, struct file *file,
47 struct vm_area_struct *vma);
48 int (*dsp_status)(struct snd_hwdep *hw,
49 struct snd_hwdep_dsp_status *status);
50 int (*dsp_load)(struct snd_hwdep *hw,
51 struct snd_hwdep_dsp_image *image);
42}; 52};
43 53
44struct snd_hwdep { 54struct snd_hwdep {
@@ -61,9 +71,9 @@ struct snd_hwdep {
61 void (*private_free) (struct snd_hwdep *hwdep); 71 void (*private_free) (struct snd_hwdep *hwdep);
62 72
63 struct mutex open_mutex; 73 struct mutex open_mutex;
64 int used; 74 int used; /* reference counter */
65 unsigned int dsp_loaded; 75 unsigned int dsp_loaded; /* bit fields of loaded dsp indices */
66 unsigned int exclusive: 1; 76 unsigned int exclusive:1; /* exclusive access mode */
67}; 77};
68 78
69extern int snd_hwdep_new(struct snd_card *card, char *id, int device, 79extern int snd_hwdep_new(struct snd_card *card, char *id, int device,
diff --git a/include/sound/jack.h b/include/sound/jack.h
index 2e0315cdd0d6..6b013c6f6a04 100644
--- a/include/sound/jack.h
+++ b/include/sound/jack.h
@@ -30,6 +30,9 @@ struct input_dev;
30/** 30/**
31 * Jack types which can be reported. These values are used as a 31 * Jack types which can be reported. These values are used as a
32 * bitmask. 32 * bitmask.
33 *
34 * Note that this must be kept in sync with the lookup table in
35 * sound/core/jack.c.
33 */ 36 */
34enum snd_jack_types { 37enum snd_jack_types {
35 SND_JACK_HEADPHONE = 0x0001, 38 SND_JACK_HEADPHONE = 0x0001,
@@ -37,6 +40,8 @@ enum snd_jack_types {
37 SND_JACK_HEADSET = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE, 40 SND_JACK_HEADSET = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE,
38 SND_JACK_LINEOUT = 0x0004, 41 SND_JACK_LINEOUT = 0x0004,
39 SND_JACK_MECHANICAL = 0x0008, /* If detected separately */ 42 SND_JACK_MECHANICAL = 0x0008, /* If detected separately */
43 SND_JACK_VIDEOOUT = 0x0010,
44 SND_JACK_AVOUT = SND_JACK_LINEOUT | SND_JACK_VIDEOOUT,
40}; 45};
41 46
42struct snd_jack { 47struct snd_jack {
diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index 40c5a6fa6bcd..8904b1900d7f 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -364,7 +364,6 @@ struct snd_pcm_substream {
364 /* -- timer section -- */ 364 /* -- timer section -- */
365 struct snd_timer *timer; /* timer */ 365 struct snd_timer *timer; /* timer */
366 unsigned timer_running: 1; /* time is running */ 366 unsigned timer_running: 1; /* time is running */
367 spinlock_t timer_lock;
368 /* -- next substream -- */ 367 /* -- next substream -- */
369 struct snd_pcm_substream *next; 368 struct snd_pcm_substream *next;
370 /* -- linked substreams -- */ 369 /* -- linked substreams -- */
@@ -451,7 +450,7 @@ struct snd_pcm_notify {
451 450
452extern const struct file_operations snd_pcm_f_ops[2]; 451extern const struct file_operations snd_pcm_f_ops[2];
453 452
454int snd_pcm_new(struct snd_card *card, char *id, int device, 453int snd_pcm_new(struct snd_card *card, const char *id, int device,
455 int playback_count, int capture_count, 454 int playback_count, int capture_count,
456 struct snd_pcm **rpcm); 455 struct snd_pcm **rpcm);
457int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count); 456int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count);
diff --git a/include/sound/pxa2xx-lib.h b/include/sound/pxa2xx-lib.h
index 2fd3d251d9a5..2c894b600e5b 100644
--- a/include/sound/pxa2xx-lib.h
+++ b/include/sound/pxa2xx-lib.h
@@ -42,4 +42,19 @@ extern int pxa2xx_ac97_hw_resume(void);
42extern int pxa2xx_ac97_hw_probe(struct platform_device *dev); 42extern int pxa2xx_ac97_hw_probe(struct platform_device *dev);
43extern void pxa2xx_ac97_hw_remove(struct platform_device *dev); 43extern void pxa2xx_ac97_hw_remove(struct platform_device *dev);
44 44
45/* AC97 platform_data */
46/**
47 * struct pxa2xx_ac97_platform_data - pxa ac97 platform data
48 * @reset_gpio: AC97 reset gpio (normally gpio113 or gpio95)
49 * a -1 value means no gpio will be used for reset
50 *
51 * Platform data should only be specified for pxa27x CPUs where a silicon bug
52 * prevents correct operation of the reset line. If not specified, the default
53 * behaviour is to consider gpio 113 as the AC97 reset line, which is the
54 * default on most boards.
55 */
56struct pxa2xx_ac97_platform_data {
57 int reset_gpio;
58};
59
45#endif 60#endif
diff --git a/include/sound/rawmidi.h b/include/sound/rawmidi.h
index b550a416d075..c23c26585700 100644
--- a/include/sound/rawmidi.h
+++ b/include/sound/rawmidi.h
@@ -42,7 +42,6 @@
42#define SNDRV_RAWMIDI_LFLG_INPUT (1<<1) 42#define SNDRV_RAWMIDI_LFLG_INPUT (1<<1)
43#define SNDRV_RAWMIDI_LFLG_OPEN (3<<0) 43#define SNDRV_RAWMIDI_LFLG_OPEN (3<<0)
44#define SNDRV_RAWMIDI_LFLG_APPEND (1<<2) 44#define SNDRV_RAWMIDI_LFLG_APPEND (1<<2)
45#define SNDRV_RAWMIDI_LFLG_NOOPENLOCK (1<<3)
46 45
47struct snd_rawmidi; 46struct snd_rawmidi;
48struct snd_rawmidi_substream; 47struct snd_rawmidi_substream;
diff --git a/include/sound/sb.h b/include/sound/sb.h
index 85f93c5fe1e4..4e62ee1e4115 100644
--- a/include/sound/sb.h
+++ b/include/sound/sb.h
@@ -249,6 +249,7 @@ struct snd_sb {
249#define SB_ALS4000_3D_AUTO_MUTE 0x52 249#define SB_ALS4000_3D_AUTO_MUTE 0x52
250#define SB_ALS4000_ANALOG_BLOCK_CTRL 0x53 250#define SB_ALS4000_ANALOG_BLOCK_CTRL 0x53
251#define SB_ALS4000_3D_DELAYLINE_PATTERN 0x54 251#define SB_ALS4000_3D_DELAYLINE_PATTERN 0x54
252#define SB_ALS4000_CR3_CONFIGURATION 0xc3 /* bit 7 is Digital Loop Enable */
252#define SB_ALS4000_QSOUND 0xdb 253#define SB_ALS4000_QSOUND 0xdb
253 254
254/* IRQ setting bitmap */ 255/* IRQ setting bitmap */
@@ -330,7 +331,8 @@ enum {
330 SB_MIX_DOUBLE, 331 SB_MIX_DOUBLE,
331 SB_MIX_INPUT_SW, 332 SB_MIX_INPUT_SW,
332 SB_MIX_CAPTURE_PRO, 333 SB_MIX_CAPTURE_PRO,
333 SB_MIX_CAPTURE_DT019X 334 SB_MIX_CAPTURE_DT019X,
335 SB_MIX_MONO_CAPTURE_ALS4K
334}; 336};
335 337
336#define SB_MIXVAL_DOUBLE(left_reg, right_reg, left_shift, right_shift, mask) \ 338#define SB_MIXVAL_DOUBLE(left_reg, right_reg, left_shift, right_shift, mask) \
diff --git a/include/sound/sfnt_info.h b/include/sound/sfnt_info.h
index 5d1ab9c4950f..1bce7fd1725f 100644
--- a/include/sound/sfnt_info.h
+++ b/include/sound/sfnt_info.h
@@ -202,13 +202,11 @@ struct snd_emux_misc_mode {
202 int value2; /* reserved */ 202 int value2; /* reserved */
203}; 203};
204 204
205enum { 205#define SNDRV_EMUX_IOCTL_VERSION _IOR('H', 0x80, unsigned int)
206 SNDRV_EMUX_IOCTL_VERSION = _IOR('H', 0x80, unsigned int), 206#define SNDRV_EMUX_IOCTL_LOAD_PATCH _IOWR('H', 0x81, struct soundfont_patch_info)
207 SNDRV_EMUX_IOCTL_LOAD_PATCH = _IOWR('H', 0x81, struct soundfont_patch_info), 207#define SNDRV_EMUX_IOCTL_RESET_SAMPLES _IO('H', 0x82)
208 SNDRV_EMUX_IOCTL_RESET_SAMPLES = _IO('H', 0x82), 208#define SNDRV_EMUX_IOCTL_REMOVE_LAST_SAMPLES _IO('H', 0x83)
209 SNDRV_EMUX_IOCTL_REMOVE_LAST_SAMPLES = _IO('H', 0x83), 209#define SNDRV_EMUX_IOCTL_MEM_AVAIL _IOW('H', 0x84, int)
210 SNDRV_EMUX_IOCTL_MEM_AVAIL = _IOW('H', 0x84, int), 210#define SNDRV_EMUX_IOCTL_MISC_MODE _IOWR('H', 0x84, struct snd_emux_misc_mode)
211 SNDRV_EMUX_IOCTL_MISC_MODE = _IOWR('H', 0x84, struct snd_emux_misc_mode),
212};
213 211
214#endif /* __SOUND_SFNT_INFO_H */ 212#endif /* __SOUND_SFNT_INFO_H */
diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
index 24247f763608..13676472ddfc 100644
--- a/include/sound/soc-dai.h
+++ b/include/sound/soc-dai.h
@@ -203,7 +203,7 @@ struct snd_soc_dai {
203 int (*resume)(struct snd_soc_dai *dai); 203 int (*resume)(struct snd_soc_dai *dai);
204 204
205 /* ops */ 205 /* ops */
206 struct snd_soc_dai_ops ops; 206 struct snd_soc_dai_ops *ops;
207 207
208 /* DAI capabilities */ 208 /* DAI capabilities */
209 struct snd_soc_pcm_stream capture; 209 struct snd_soc_pcm_stream capture;
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h
index dfa804958820..a7def6a9a030 100644
--- a/include/sound/soc-dapm.h
+++ b/include/sound/soc-dapm.h
@@ -76,6 +76,11 @@
76 wcontrols, wncontrols)\ 76 wcontrols, wncontrols)\
77{ .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ 77{ .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
78 .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols} 78 .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols}
79#define SND_SOC_DAPM_MIXER_NAMED_CTL(wname, wreg, wshift, winvert, \
80 wcontrols, wncontrols)\
81{ .id = snd_soc_dapm_mixer_named_ctl, .name = wname, .reg = wreg, \
82 .shift = wshift, .invert = winvert, .kcontrols = wcontrols, \
83 .num_kcontrols = wncontrols}
79#define SND_SOC_DAPM_MICBIAS(wname, wreg, wshift, winvert) \ 84#define SND_SOC_DAPM_MICBIAS(wname, wreg, wshift, winvert) \
80{ .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift = wshift, \ 85{ .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift = wshift, \
81 .invert = winvert, .kcontrols = NULL, .num_kcontrols = 0} 86 .invert = winvert, .kcontrols = NULL, .num_kcontrols = 0}
@@ -101,6 +106,11 @@
101{ .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ 106{ .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
102 .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols, \ 107 .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols, \
103 .event = wevent, .event_flags = wflags} 108 .event = wevent, .event_flags = wflags}
109#define SND_SOC_DAPM_MIXER_NAMED_CTL_E(wname, wreg, wshift, winvert, \
110 wcontrols, wncontrols, wevent, wflags) \
111{ .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
112 .invert = winvert, .kcontrols = wcontrols, \
113 .num_kcontrols = wncontrols, .event = wevent, .event_flags = wflags}
104#define SND_SOC_DAPM_MICBIAS_E(wname, wreg, wshift, winvert, wevent, wflags) \ 114#define SND_SOC_DAPM_MICBIAS_E(wname, wreg, wshift, winvert, wevent, wflags) \
105{ .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift = wshift, \ 115{ .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift = wshift, \
106 .invert = winvert, .kcontrols = NULL, .num_kcontrols = 0, \ 116 .invert = winvert, .kcontrols = NULL, .num_kcontrols = 0, \
@@ -182,6 +192,12 @@
182 .get = snd_soc_dapm_get_value_enum_double, \ 192 .get = snd_soc_dapm_get_value_enum_double, \
183 .put = snd_soc_dapm_put_value_enum_double, \ 193 .put = snd_soc_dapm_put_value_enum_double, \
184 .private_value = (unsigned long)&xenum } 194 .private_value = (unsigned long)&xenum }
195#define SOC_DAPM_PIN_SWITCH(xname) \
196{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname " Switch", \
197 .info = snd_soc_dapm_info_pin_switch, \
198 .get = snd_soc_dapm_get_pin_switch, \
199 .put = snd_soc_dapm_put_pin_switch, \
200 .private_value = (unsigned long)xname }
185 201
186/* dapm stream operations */ 202/* dapm stream operations */
187#define SND_SOC_DAPM_STREAM_NOP 0x0 203#define SND_SOC_DAPM_STREAM_NOP 0x0
@@ -228,6 +244,12 @@ int snd_soc_dapm_get_value_enum_double(struct snd_kcontrol *kcontrol,
228 struct snd_ctl_elem_value *ucontrol); 244 struct snd_ctl_elem_value *ucontrol);
229int snd_soc_dapm_put_value_enum_double(struct snd_kcontrol *kcontrol, 245int snd_soc_dapm_put_value_enum_double(struct snd_kcontrol *kcontrol,
230 struct snd_ctl_elem_value *ucontrol); 246 struct snd_ctl_elem_value *ucontrol);
247int snd_soc_dapm_info_pin_switch(struct snd_kcontrol *kcontrol,
248 struct snd_ctl_elem_info *uinfo);
249int snd_soc_dapm_get_pin_switch(struct snd_kcontrol *kcontrol,
250 struct snd_ctl_elem_value *uncontrol);
251int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol,
252 struct snd_ctl_elem_value *uncontrol);
231int snd_soc_dapm_new_control(struct snd_soc_codec *codec, 253int snd_soc_dapm_new_control(struct snd_soc_codec *codec,
232 const struct snd_soc_dapm_widget *widget); 254 const struct snd_soc_dapm_widget *widget);
233int snd_soc_dapm_new_controls(struct snd_soc_codec *codec, 255int snd_soc_dapm_new_controls(struct snd_soc_codec *codec,
@@ -250,10 +272,10 @@ int snd_soc_dapm_set_bias_level(struct snd_soc_device *socdev,
250int snd_soc_dapm_sys_add(struct device *dev); 272int snd_soc_dapm_sys_add(struct device *dev);
251 273
252/* dapm audio pin control and status */ 274/* dapm audio pin control and status */
253int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, char *pin); 275int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, const char *pin);
254int snd_soc_dapm_disable_pin(struct snd_soc_codec *codec, char *pin); 276int snd_soc_dapm_disable_pin(struct snd_soc_codec *codec, const char *pin);
255int snd_soc_dapm_nc_pin(struct snd_soc_codec *codec, char *pin); 277int snd_soc_dapm_nc_pin(struct snd_soc_codec *codec, const char *pin);
256int snd_soc_dapm_get_pin_status(struct snd_soc_codec *codec, char *pin); 278int snd_soc_dapm_get_pin_status(struct snd_soc_codec *codec, const char *pin);
257int snd_soc_dapm_sync(struct snd_soc_codec *codec); 279int snd_soc_dapm_sync(struct snd_soc_codec *codec);
258 280
259/* dapm widget types */ 281/* dapm widget types */
@@ -263,6 +285,7 @@ enum snd_soc_dapm_type {
263 snd_soc_dapm_mux, /* selects 1 analog signal from many inputs */ 285 snd_soc_dapm_mux, /* selects 1 analog signal from many inputs */
264 snd_soc_dapm_value_mux, /* selects 1 analog signal from many inputs */ 286 snd_soc_dapm_value_mux, /* selects 1 analog signal from many inputs */
265 snd_soc_dapm_mixer, /* mixes several analog signals together */ 287 snd_soc_dapm_mixer, /* mixes several analog signals together */
288 snd_soc_dapm_mixer_named_ctl, /* mixer with named controls */
266 snd_soc_dapm_pga, /* programmable gain/attenuation (volume) */ 289 snd_soc_dapm_pga, /* programmable gain/attenuation (volume) */
267 snd_soc_dapm_adc, /* analog to digital converter */ 290 snd_soc_dapm_adc, /* analog to digital converter */
268 snd_soc_dapm_dac, /* digital to analog converter */ 291 snd_soc_dapm_dac, /* digital to analog converter */
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 24593ac3ea19..a40bc6f316fc 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -16,6 +16,8 @@
16#include <linux/platform_device.h> 16#include <linux/platform_device.h>
17#include <linux/types.h> 17#include <linux/types.h>
18#include <linux/workqueue.h> 18#include <linux/workqueue.h>
19#include <linux/interrupt.h>
20#include <linux/kernel.h>
19#include <sound/core.h> 21#include <sound/core.h>
20#include <sound/pcm.h> 22#include <sound/pcm.h>
21#include <sound/control.h> 23#include <sound/control.h>
@@ -154,6 +156,8 @@ enum snd_soc_bias_level {
154 SND_SOC_BIAS_OFF, 156 SND_SOC_BIAS_OFF,
155}; 157};
156 158
159struct snd_jack;
160struct snd_soc_card;
157struct snd_soc_device; 161struct snd_soc_device;
158struct snd_soc_pcm_stream; 162struct snd_soc_pcm_stream;
159struct snd_soc_ops; 163struct snd_soc_ops;
@@ -164,6 +168,11 @@ struct snd_soc_platform;
164struct snd_soc_codec; 168struct snd_soc_codec;
165struct soc_enum; 169struct soc_enum;
166struct snd_soc_ac97_ops; 170struct snd_soc_ac97_ops;
171struct snd_soc_jack;
172struct snd_soc_jack_pin;
173#ifdef CONFIG_GPIOLIB
174struct snd_soc_jack_gpio;
175#endif
167 176
168typedef int (*hw_write_t)(void *,const char* ,int); 177typedef int (*hw_write_t)(void *,const char* ,int);
169typedef int (*hw_read_t)(void *,char* ,int); 178typedef int (*hw_read_t)(void *,char* ,int);
@@ -184,6 +193,19 @@ int snd_soc_init_card(struct snd_soc_device *socdev);
184int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream, 193int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream,
185 const struct snd_pcm_hardware *hw); 194 const struct snd_pcm_hardware *hw);
186 195
196/* Jack reporting */
197int snd_soc_jack_new(struct snd_soc_card *card, const char *id, int type,
198 struct snd_soc_jack *jack);
199void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask);
200int snd_soc_jack_add_pins(struct snd_soc_jack *jack, int count,
201 struct snd_soc_jack_pin *pins);
202#ifdef CONFIG_GPIOLIB
203int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,
204 struct snd_soc_jack_gpio *gpios);
205void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count,
206 struct snd_soc_jack_gpio *gpios);
207#endif
208
187/* codec IO */ 209/* codec IO */
188#define snd_soc_read(codec, reg) codec->read(codec, reg) 210#define snd_soc_read(codec, reg) codec->read(codec, reg)
189#define snd_soc_write(codec, reg, value) codec->write(codec, reg, value) 211#define snd_soc_write(codec, reg, value) codec->write(codec, reg, value)
@@ -203,6 +225,8 @@ void snd_soc_free_ac97_codec(struct snd_soc_codec *codec);
203 */ 225 */
204struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template, 226struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template,
205 void *data, char *long_name); 227 void *data, char *long_name);
228int snd_soc_add_controls(struct snd_soc_codec *codec,
229 const struct snd_kcontrol_new *controls, int num_controls);
206int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol, 230int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol,
207 struct snd_ctl_elem_info *uinfo); 231 struct snd_ctl_elem_info *uinfo);
208int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol, 232int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol,
@@ -237,6 +261,48 @@ int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol,
237int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol, 261int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol,
238 struct snd_ctl_elem_value *ucontrol); 262 struct snd_ctl_elem_value *ucontrol);
239 263
264/**
265 * struct snd_soc_jack_pin - Describes a pin to update based on jack detection
266 *
267 * @pin: name of the pin to update
268 * @mask: bits to check for in reported jack status
269 * @invert: if non-zero then pin is enabled when status is not reported
270 */
271struct snd_soc_jack_pin {
272 struct list_head list;
273 const char *pin;
274 int mask;
275 bool invert;
276};
277
278/**
279 * struct snd_soc_jack_gpio - Describes a gpio pin for jack detection
280 *
281 * @gpio: gpio number
282 * @name: gpio name
283 * @report: value to report when jack detected
284 * @invert: report presence in low state
285 * @debouce_time: debouce time in ms
286 */
287#ifdef CONFIG_GPIOLIB
288struct snd_soc_jack_gpio {
289 unsigned int gpio;
290 const char *name;
291 int report;
292 int invert;
293 int debounce_time;
294 struct snd_soc_jack *jack;
295 struct work_struct work;
296};
297#endif
298
299struct snd_soc_jack {
300 struct snd_jack *jack;
301 struct snd_soc_card *card;
302 struct list_head pins;
303 int status;
304};
305
240/* SoC PCM stream information */ 306/* SoC PCM stream information */
241struct snd_soc_pcm_stream { 307struct snd_soc_pcm_stream {
242 char *stream_name; 308 char *stream_name;
@@ -384,6 +450,8 @@ struct snd_soc_card {
384 450
385 struct snd_soc_device *socdev; 451 struct snd_soc_device *socdev;
386 452
453 struct snd_soc_codec *codec;
454
387 struct snd_soc_platform *platform; 455 struct snd_soc_platform *platform;
388 struct delayed_work delayed_work; 456 struct delayed_work delayed_work;
389 struct work_struct deferred_resume_work; 457 struct work_struct deferred_resume_work;
@@ -393,7 +461,6 @@ struct snd_soc_card {
393struct snd_soc_device { 461struct snd_soc_device {
394 struct device *dev; 462 struct device *dev;
395 struct snd_soc_card *card; 463 struct snd_soc_card *card;
396 struct snd_soc_codec *codec;
397 struct snd_soc_codec_device *codec_dev; 464 struct snd_soc_codec_device *codec_dev;
398 void *codec_data; 465 void *codec_data;
399}; 466};
diff --git a/include/sound/uda1341.h b/include/sound/uda1341.h
deleted file mode 100644
index 110d5dc3a2be..000000000000
--- a/include/sound/uda1341.h
+++ /dev/null
@@ -1,126 +0,0 @@
1/*
2 * linux/include/linux/l3/uda1341.h
3 *
4 * Philips UDA1341 mixer device driver for ALSA
5 *
6 * Copyright (c) 2002 Tomas Kasparek <tomas.kasparek@seznam.cz>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License.
10 *
11 * History:
12 *
13 * 2002-03-13 Tomas Kasparek Initial release - based on uda1341.h from OSS
14 * 2002-03-30 Tomas Kasparek Proc filesystem support, complete mixer and DSP
15 * features support
16 */
17
18#define UDA1341_ALSA_NAME "snd-uda1341"
19
20/*
21 * Default rate set after inicialization
22 */
23#define AUDIO_RATE_DEFAULT 44100
24
25/*
26 * UDA1341 L3 address and command types
27 */
28#define UDA1341_L3ADDR 5
29#define UDA1341_DATA0 (UDA1341_L3ADDR << 2 | 0)
30#define UDA1341_DATA1 (UDA1341_L3ADDR << 2 | 1)
31#define UDA1341_STATUS (UDA1341_L3ADDR << 2 | 2)
32
33enum uda1341_onoff {
34 OFF=0,
35 ON,
36};
37
38enum uda1341_format {
39 I2S=0,
40 LSB16,
41 LSB18,
42 LSB20,
43 MSB,
44 LSB16MSB,
45 LSB18MSB,
46 LSB20MSB,
47};
48
49enum uda1341_fs {
50 F512=0,
51 F384,
52 F256,
53 Funused,
54};
55
56enum uda1341_peak {
57 BEFORE=0,
58 AFTER,
59};
60
61enum uda1341_filter {
62 FLAT=0,
63 MIN,
64 MIN2,
65 MAX,
66};
67
68enum uda1341_mixer {
69 DOUBLE,
70 LINE,
71 MIC,
72 MIXER,
73};
74
75enum uda1341_deemp {
76 NONE,
77 D32,
78 D44,
79 D48,
80};
81
82enum uda1341_config {
83 CMD_READ_REG = 0,
84 CMD_RESET,
85 CMD_FS,
86 CMD_FORMAT,
87 CMD_OGAIN,
88 CMD_IGAIN,
89 CMD_DAC,
90 CMD_ADC,
91 CMD_VOLUME,
92 CMD_BASS,
93 CMD_TREBBLE,
94 CMD_PEAK,
95 CMD_DEEMP,
96 CMD_MUTE,
97 CMD_FILTER,
98 CMD_CH1,
99 CMD_CH2,
100 CMD_MIC,
101 CMD_MIXER,
102 CMD_AGC,
103 CMD_IG,
104 CMD_AGC_TIME,
105 CMD_AGC_LEVEL,
106#ifdef CONFIG_PM
107 CMD_SUSPEND,
108 CMD_RESUME,
109#endif
110 CMD_LAST,
111};
112
113enum write_through {
114 //used in update_bits (write_cfg) to avoid l3_write - just update local copy of regs.
115 REGS_ONLY=0,
116 //update local regs and write value to uda1341 - do l3_write
117 FLUSH,
118};
119
120int __init snd_chip_uda1341_mixer_new(struct snd_card *card, struct l3_client **clnt);
121
122/*
123 * Local variables:
124 * indent-tabs-mode: t
125 * End:
126 */
diff --git a/include/sound/version.h b/include/sound/version.h
index 2b48237e23bf..a7e74e23ad2e 100644
--- a/include/sound/version.h
+++ b/include/sound/version.h
@@ -1,3 +1,3 @@
1/* include/version.h */ 1/* include/version.h */
2#define CONFIG_SND_VERSION "1.0.18a" 2#define CONFIG_SND_VERSION "1.0.19"
3#define CONFIG_SND_DATE "" 3#define CONFIG_SND_DATE ""
diff --git a/include/sound/wss.h b/include/sound/wss.h
index fd01f22825cd..6d65f322f1d5 100644
--- a/include/sound/wss.h
+++ b/include/sound/wss.h
@@ -154,6 +154,7 @@ int snd_wss_create(struct snd_card *card,
154 unsigned short hardware, 154 unsigned short hardware,
155 unsigned short hwshare, 155 unsigned short hwshare,
156 struct snd_wss **rchip); 156 struct snd_wss **rchip);
157int snd_wss_free(struct snd_wss *chip);
157int snd_wss_pcm(struct snd_wss *chip, int device, struct snd_pcm **rpcm); 158int snd_wss_pcm(struct snd_wss *chip, int device, struct snd_pcm **rpcm);
158int snd_wss_timer(struct snd_wss *chip, int device, struct snd_timer **rtimer); 159int snd_wss_timer(struct snd_wss *chip, int device, struct snd_timer **rtimer);
159int snd_wss_mixer(struct snd_wss *chip); 160int snd_wss_mixer(struct snd_wss *chip);
diff --git a/include/trace/skb.h b/include/trace/skb.h
new file mode 100644
index 000000000000..a96610f92f69
--- /dev/null
+++ b/include/trace/skb.h
@@ -0,0 +1,11 @@
1#ifndef _TRACE_SKB_H_
2#define _TRACE_SKB_H_
3
4#include <linux/skbuff.h>
5#include <linux/tracepoint.h>
6
7DECLARE_TRACE(kfree_skb,
8 TPPROTO(struct sk_buff *skb, void *location),
9 TPARGS(skb, location));
10
11#endif