diff options
Diffstat (limited to 'include')
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 | ||
124 | static 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 | */ | ||
20 | struct crypto_aes_ctx { | 24 | struct 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 | ||
26 | extern const u32 crypto_ft_tab[4][256]; | 30 | extern 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 | |||
26 | struct 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 | |||
33 | enum 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 | |||
45 | enum 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 | |||
53 | struct crypto_pcomp { | ||
54 | struct crypto_tfm base; | ||
55 | }; | ||
56 | |||
57 | struct 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 | |||
76 | extern struct crypto_pcomp *crypto_alloc_pcomp(const char *alg_name, u32 type, | ||
77 | u32 mask); | ||
78 | |||
79 | static inline struct crypto_tfm *crypto_pcomp_tfm(struct crypto_pcomp *tfm) | ||
80 | { | ||
81 | return &tfm->base; | ||
82 | } | ||
83 | |||
84 | static inline void crypto_free_pcomp(struct crypto_pcomp *tfm) | ||
85 | { | ||
86 | crypto_destroy_tfm(tfm, crypto_pcomp_tfm(tfm)); | ||
87 | } | ||
88 | |||
89 | static inline struct pcomp_alg *__crypto_pcomp_alg(struct crypto_alg *alg) | ||
90 | { | ||
91 | return container_of(alg, struct pcomp_alg, base); | ||
92 | } | ||
93 | |||
94 | static 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 | |||
99 | static 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 | |||
105 | static inline int crypto_compress_init(struct crypto_pcomp *tfm) | ||
106 | { | ||
107 | return crypto_pcomp_alg(tfm)->compress_init(tfm); | ||
108 | } | ||
109 | |||
110 | static 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 | |||
116 | static 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 | |||
122 | static 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 | |||
128 | static inline int crypto_decompress_init(struct crypto_pcomp *tfm) | ||
129 | { | ||
130 | return crypto_pcomp_alg(tfm)->decompress_init(tfm); | ||
131 | } | ||
132 | |||
133 | static 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 | |||
139 | static 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 | |||
11 | struct cryptd_ablkcipher { | ||
12 | struct crypto_ablkcipher base; | ||
13 | }; | ||
14 | |||
15 | static 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 */ | ||
22 | struct cryptd_ablkcipher *cryptd_alloc_ablkcipher(const char *alg_name, | ||
23 | u32 type, u32 mask); | ||
24 | struct crypto_blkcipher *cryptd_ablkcipher_child(struct cryptd_ablkcipher *tfm); | ||
25 | void 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 | |||
6 | extern 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 | ||
234 | static inline unsigned int crypto_shash_blocksize(struct crypto_shash *tfm) | ||
235 | { | ||
236 | return crypto_tfm_alg_blocksize(crypto_shash_tfm(tfm)); | ||
237 | } | ||
238 | |||
234 | static inline struct shash_alg *__crypto_shash_alg(struct crypto_alg *alg) | 239 | static 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 | |||
25 | extern int crypto_register_pcomp(struct pcomp_alg *alg); | ||
26 | extern 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 | |||
115 | header-y += mtio.h | 115 | header-y += mtio.h |
116 | header-y += ncp_no.h | 116 | header-y += ncp_no.h |
117 | header-y += neighbour.h | 117 | header-y += neighbour.h |
118 | header-y += net_dropmon.h | ||
118 | header-y += netfilter_arp.h | 119 | header-y += netfilter_arp.h |
119 | header-y += netrom.h | 120 | header-y += netrom.h |
120 | header-y += nfs2.h | 121 | header-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 | ||
237 | struct arcnet_local { | 237 | struct 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 | ||
336 | void arcnet_unregister_proto(struct ArcProto *proto); | 334 | void arcnet_unregister_proto(struct ArcProto *proto); |
337 | irqreturn_t arcnet_interrupt(int irq, void *dev_id); | 335 | irqreturn_t arcnet_interrupt(int irq, void *dev_id); |
338 | struct net_device *alloc_arcdev(char *name); | 336 | struct net_device *alloc_arcdev(const char *name); |
337 | |||
338 | int arcnet_open(struct net_device *dev); | ||
339 | int arcnet_close(struct net_device *dev); | ||
340 | int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev); | ||
341 | void 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 | |||
24 | struct 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 | ||
522 | extern struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *, gfp_t, unsigned int, struct bio_set *); | ||
523 | extern struct bio_integrity_payload *bio_integrity_alloc(struct bio *, gfp_t, unsigned int); | 519 | extern struct bio_integrity_payload *bio_integrity_alloc(struct bio *, gfp_t, unsigned int); |
524 | extern void bio_integrity_free(struct bio *, struct bio_set *); | 520 | extern void bio_integrity_free(struct bio *); |
525 | extern int bio_integrity_add_page(struct bio *, struct page *, unsigned int, unsigned int); | 521 | extern int bio_integrity_add_page(struct bio *, struct page *, unsigned int, unsigned int); |
526 | extern int bio_integrity_enabled(struct bio *bio); | 522 | extern int bio_integrity_enabled(struct bio *bio); |
527 | extern int bio_integrity_set_tag(struct bio *, void *, unsigned int); | 523 | extern int bio_integrity_set_tag(struct bio *, void *, unsigned int); |
@@ -531,27 +527,21 @@ extern void bio_integrity_endio(struct bio *, int); | |||
531 | extern void bio_integrity_advance(struct bio *, unsigned int); | 527 | extern void bio_integrity_advance(struct bio *, unsigned int); |
532 | extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int); | 528 | extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int); |
533 | extern void bio_integrity_split(struct bio *, struct bio_pair *, int); | 529 | extern void bio_integrity_split(struct bio *, struct bio_pair *, int); |
534 | extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t, struct bio_set *); | 530 | extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t); |
535 | extern int bioset_integrity_create(struct bio_set *, int); | ||
536 | extern void bioset_integrity_free(struct bio_set *); | ||
537 | extern 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 | |||
10 | struct sg_io_v4 { | 18 | struct 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; | |||
22 | struct clocksource; | 22 | struct 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 | */ | ||
38 | struct 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 | */ | ||
61 | struct 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 | */ | ||
75 | static 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 | */ | ||
93 | extern 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 | */ | ||
105 | extern 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 | */ | ||
121 | extern 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 | ||
30 | int com20020_check(struct net_device *dev); | 30 | int com20020_check(struct net_device *dev); |
31 | int com20020_found(struct net_device *dev, int shared); | 31 | int com20020_found(struct net_device *dev, int shared); |
32 | extern 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); | |||
164 | int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(void *)); | 170 | int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(void *)); |
165 | void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id); | 171 | void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id); |
166 | 172 | ||
173 | int queue_cn_work(struct cn_callback_entry *cbq, struct work_struct *work); | ||
174 | |||
167 | struct cn_queue_dev *cn_queue_alloc_dev(char *name, struct sock *); | 175 | struct cn_queue_dev *cn_queue_alloc_dev(char *name, struct sock *); |
168 | void cn_queue_free_dev(struct cn_queue_dev *dev); | 176 | void 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); | |||
137 | int mda_console_init(void); | 137 | int mda_console_init(void); |
138 | void prom_con_init(void); | 138 | void prom_con_init(void); |
139 | 139 | ||
140 | void vcs_make_sysfs(struct tty_struct *tty); | 140 | void vcs_make_sysfs(int index); |
141 | void vcs_remove_sysfs(struct tty_struct *tty); | 141 | void 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 | ||
551 | struct crypto_tfm *crypto_alloc_tfm(const char *alg_name, | ||
552 | const struct crypto_type *frontend, | ||
553 | u32 type, u32 mask); | ||
554 | struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask); | 552 | struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask); |
555 | void crypto_destroy_tfm(void *mem, struct crypto_tfm *tfm); | 553 | void 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 | */ | ||
375 | struct dccp_minisock { | ||
376 | __u64 dccpms_sequence_window; | ||
377 | struct list_head dccpms_pending; | ||
378 | struct list_head dccpms_conf; | ||
379 | }; | ||
380 | |||
381 | struct dccp_opt_conf { | ||
382 | __u8 *dccpoc_val; | ||
383 | __u8 dccpoc_len; | ||
384 | }; | ||
385 | |||
386 | struct 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 | |||
396 | extern 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 | ||
549 | static inline struct dccp_minisock *dccp_msk(const struct sock *sk) | ||
550 | { | ||
551 | return (struct dccp_minisock *)&dccp_sk(sk)->dccps_minisock; | ||
552 | } | ||
553 | |||
554 | static inline const char *dccp_role(const struct sock *sk) | 511 | static 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 | ||
30 | struct device; | 30 | struct device; |
31 | struct device_private; | ||
31 | struct device_driver; | 32 | struct device_driver; |
32 | struct driver_private; | 33 | struct driver_private; |
33 | struct class; | 34 | struct class; |
@@ -147,7 +148,7 @@ extern void put_driver(struct device_driver *drv); | |||
147 | extern struct device_driver *driver_find(const char *name, | 148 | extern struct device_driver *driver_find(const char *name, |
148 | struct bus_type *bus); | 149 | struct bus_type *bus); |
149 | extern int driver_probe_done(void); | 150 | extern int driver_probe_done(void); |
150 | extern int wait_for_device_probe(void); | 151 | extern 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 | ||
369 | struct device { | 370 | struct 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 | ||
428 | static inline const char *dev_name(const struct device *dev) | 430 | static 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 | ||
434 | extern int dev_set_name(struct device *dev, const char *name, ...) | 435 | extern 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 | ||
467 | static inline unsigned int dev_get_uevent_suppress(const struct device *dev) | ||
468 | { | ||
469 | return dev->kobj.uevent_suppress; | ||
470 | } | ||
471 | |||
472 | static inline void dev_set_uevent_suppress(struct device *dev, int val) | ||
473 | { | ||
474 | dev->kobj.uevent_suppress = val; | ||
475 | } | ||
476 | |||
466 | static inline int device_is_registered(struct device *dev) | 477 | static 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, | |||
483 | extern struct device *device_find_child(struct device *dev, void *data, | 494 | extern 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)); |
485 | extern int device_rename(struct device *dev, char *new_name); | 496 | extern int device_rename(struct device *dev, char *new_name); |
486 | extern int device_move(struct device *dev, struct device *new_parent); | 497 | extern 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 | */ | ||
8 | extern long long dynamic_debug_enabled; | ||
9 | extern 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 | */ | ||
16 | struct _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 | |||
39 | int ddebug_add_module(struct _ddebug *tab, unsigned int n, | ||
40 | const char *modname); | ||
41 | |||
42 | #if defined(CONFIG_DYNAMIC_DEBUG) | ||
43 | extern 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 | |||
79 | static 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 | |||
13 | extern 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 | */ | ||
19 | extern long long dynamic_printk_enabled; | ||
20 | extern long long dynamic_printk_enabled2; | ||
21 | |||
22 | struct 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 | |||
31 | int 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) | ||
35 | extern int unregister_dynamic_debug_module(char *mod_name); | ||
36 | extern 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 | |||
78 | static inline int unregister_dynamic_debug_module(const char *mod_name) | ||
79 | { | ||
80 | return 0; | ||
81 | } | ||
82 | static 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 | |||
199 | static 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 | ||
290 | struct 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 | */ | ||
296 | struct ethtool_tcpip4_spec { | ||
297 | __be32 ip4src; | ||
298 | __be32 ip4dst; | ||
299 | __be16 psrc; | ||
300 | __be16 pdst; | ||
301 | __u8 tos; | ||
302 | }; | ||
303 | |||
304 | struct ethtool_ah_espip4_spec { | ||
305 | __be32 ip4src; | ||
306 | __be32 ip4dst; | ||
307 | __be32 spi; | ||
308 | __u8 tos; | ||
309 | }; | ||
310 | |||
311 | struct ethtool_rawip4_spec { | ||
312 | __be32 ip4src; | ||
313 | __be32 ip4dst; | ||
314 | __u8 hdata[64]; | ||
315 | }; | ||
316 | |||
317 | struct 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 | |||
326 | struct 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 | |||
335 | struct 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 | |||
352 | struct 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 */ |
337 | extern void part_round_stats(int cpu, struct hd_struct *part); | 337 | extern void part_round_stats(int cpu, struct hd_struct *part); |
338 | 338 | ||
339 | /* drivers/block/genhd.c */ | 339 | /* block/genhd.c */ |
340 | extern int get_blkdev_list(char *, int); | ||
341 | extern void add_disk(struct gendisk *disk); | 340 | extern void add_disk(struct gendisk *disk); |
342 | extern void del_gendisk(struct gendisk *gp); | 341 | extern void del_gendisk(struct gendisk *gp); |
343 | extern void unlink_gendisk(struct gendisk *gp); | 342 | extern 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) | |||
102 | int hdlc_open(struct net_device *dev); | 103 | int 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 */ |
104 | void hdlc_close(struct net_device *dev); | 105 | void hdlc_close(struct net_device *dev); |
106 | /* May be used by hardware driver */ | ||
107 | int 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 */ | ||
109 | int hdlc_start_xmit(struct sk_buff *skb, struct net_device *dev); | ||
105 | 110 | ||
106 | int attach_hdlc_protocol(struct net_device *dev, struct hdlc_proto *proto, | 111 | int 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) || \ |
197 | static 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 | |||
1146 | extern int ide_vlb_clk; | 1130 | extern int ide_vlb_clk; |
1147 | extern int ide_pci_clk; | 1131 | extern int ide_pci_clk; |
1148 | 1132 | ||
1149 | extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs); | 1133 | int ide_end_request(ide_drive_t *, int, int); |
1150 | int ide_end_dequeued_request(ide_drive_t *drive, struct request *rq, | 1134 | int ide_end_dequeued_request(ide_drive_t *, struct request *, int, int); |
1151 | int uptodate, int nr_sectors); | 1135 | void ide_kill_rq(ide_drive_t *, struct request *); |
1152 | 1136 | ||
1153 | extern void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry); | 1137 | void __ide_set_handler(ide_drive_t *, ide_handler_t *, unsigned int, |
1138 | ide_expiry_t *); | ||
1139 | void ide_set_handler(ide_drive_t *, ide_handler_t *, unsigned int, | ||
1140 | ide_expiry_t *); | ||
1154 | 1141 | ||
1155 | void ide_execute_command(ide_drive_t *, u8, ide_handler_t *, unsigned int, | 1142 | void 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 | ||
1170 | int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); | 1157 | int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); |
1171 | 1158 | ||
1159 | ide_startstop_t ide_do_park_unpark(ide_drive_t *, struct request *); | ||
1160 | ide_startstop_t ide_do_devset(ide_drive_t *, struct request *); | ||
1161 | |||
1172 | extern ide_startstop_t ide_do_reset (ide_drive_t *); | 1162 | extern ide_startstop_t ide_do_reset (ide_drive_t *); |
1173 | 1163 | ||
1174 | extern int ide_devset_execute(ide_drive_t *drive, | 1164 | extern 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 | ||
1177 | extern void ide_do_drive_cmd(ide_drive_t *, struct request *); | ||
1178 | |||
1179 | extern void ide_end_drive_cmd(ide_drive_t *, u8, u8); | 1167 | extern void ide_end_drive_cmd(ide_drive_t *, u8, u8); |
1180 | 1168 | ||
1181 | void ide_tf_dump(const char *, struct ide_taskfile *); | 1169 | void ide_tf_dump(const char *, struct ide_taskfile *); |
@@ -1200,10 +1188,6 @@ void SELECT_MASK(ide_drive_t *, int); | |||
1200 | u8 ide_read_error(ide_drive_t *); | 1188 | u8 ide_read_error(ide_drive_t *); |
1201 | void ide_read_bcount_and_ireason(ide_drive_t *, u16 *, u8 *); | 1189 | void ide_read_bcount_and_ireason(ide_drive_t *, u16 *, u8 *); |
1202 | 1190 | ||
1203 | extern int drive_is_ready(ide_drive_t *); | ||
1204 | |||
1205 | void ide_pktcmd_tf_load(ide_drive_t *, u32, u16, u8); | ||
1206 | |||
1207 | int ide_check_atapi_device(ide_drive_t *, const char *); | 1191 | int ide_check_atapi_device(ide_drive_t *, const char *); |
1208 | 1192 | ||
1209 | void ide_init_pc(struct ide_atapi_pc *); | 1193 | void ide_init_pc(struct ide_atapi_pc *); |
@@ -1251,6 +1235,8 @@ int ide_no_data_taskfile(ide_drive_t *, ide_task_t *); | |||
1251 | 1235 | ||
1252 | int ide_taskfile_ioctl(ide_drive_t *, unsigned int, unsigned long); | 1236 | int ide_taskfile_ioctl(ide_drive_t *, unsigned int, unsigned long); |
1253 | 1237 | ||
1238 | int ide_dev_read_id(ide_drive_t *, u8, u16 *); | ||
1239 | |||
1254 | extern int ide_driveid_update(ide_drive_t *); | 1240 | extern int ide_driveid_update(ide_drive_t *); |
1255 | extern int ide_config_drive_speed(ide_drive_t *, u8); | 1241 | extern int ide_config_drive_speed(ide_drive_t *, u8); |
1256 | extern u8 eighty_ninty_three (ide_drive_t *); | 1242 | extern 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 | ||
1283 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, | 1269 | void 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 **); |
1285 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); | 1271 | void 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 | ||
1381 | struct ide_port_info { | 1363 | struct 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 | ||
1472 | void ide_dma_lost_irq(ide_drive_t *); | 1454 | void ide_dma_lost_irq(ide_drive_t *); |
1473 | void ide_dma_timeout(ide_drive_t *); | 1455 | void ide_dma_timeout(ide_drive_t *); |
1456 | ide_startstop_t ide_dma_timeout_retry(ide_drive_t *, int); | ||
1474 | 1457 | ||
1475 | #else | 1458 | #else |
1476 | static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; } | 1459 | static 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) { ; } | |||
1482 | static inline void ide_dma_verbose(ide_drive_t *drive) { ; } | 1465 | static inline void ide_dma_verbose(ide_drive_t *drive) { ; } |
1483 | static inline int ide_set_dma(ide_drive_t *drive) { return 1; } | 1466 | static inline int ide_set_dma(ide_drive_t *drive) { return 1; } |
1484 | static inline void ide_check_dma_crc(ide_drive_t *drive) { ; } | 1467 | static inline void ide_check_dma_crc(ide_drive_t *drive) { ; } |
1468 | static inline ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error) { return ide_stopped; } | ||
1485 | static inline void ide_release_dma_engine(ide_hwif_t *hwif) { ; } | 1469 | static 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 |
1473 | int ide_acpi_init(void); | ||
1489 | extern int ide_acpi_exec_tfs(ide_drive_t *drive); | 1474 | extern int ide_acpi_exec_tfs(ide_drive_t *drive); |
1490 | extern void ide_acpi_get_timing(ide_hwif_t *hwif); | 1475 | extern void ide_acpi_get_timing(ide_hwif_t *hwif); |
1491 | extern void ide_acpi_push_timing(ide_hwif_t *hwif); | 1476 | extern void ide_acpi_push_timing(ide_hwif_t *hwif); |
1492 | extern void ide_acpi_init(ide_hwif_t *hwif); | 1477 | void ide_acpi_init_port(ide_hwif_t *); |
1493 | void ide_acpi_port_init_devices(ide_hwif_t *); | 1478 | void ide_acpi_port_init_devices(ide_hwif_t *); |
1494 | extern void ide_acpi_set_state(ide_hwif_t *hwif, int on); | 1479 | extern void ide_acpi_set_state(ide_hwif_t *hwif, int on); |
1495 | #else | 1480 | #else |
1481 | static inline int ide_acpi_init(void) { return 0; } | ||
1496 | static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; } | 1482 | static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; } |
1497 | static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; } | 1483 | static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; } |
1498 | static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; } | 1484 | static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; } |
1499 | static inline void ide_acpi_init(ide_hwif_t *hwif) { ; } | 1485 | static inline void ide_acpi_init_port(ide_hwif_t *hwif) { ; } |
1500 | static inline void ide_acpi_port_init_devices(ide_hwif_t *hwif) { ; } | 1486 | static inline void ide_acpi_port_init_devices(ide_hwif_t *hwif) { ; } |
1501 | static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {} | 1487 | static 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 | ||
1533 | const char *ide_xfer_verbose(u8 mode); | ||
1534 | extern void ide_toggle_bounce(ide_drive_t *drive, int on); | 1519 | extern void ide_toggle_bounce(ide_drive_t *drive, int on); |
1535 | extern int ide_set_xfer_rate(ide_drive_t *drive, u8 rate); | ||
1536 | 1520 | ||
1537 | u64 ide_get_lba_addr(struct ide_taskfile *, int); | 1521 | u64 ide_get_lba_addr(struct ide_taskfile *, int); |
1538 | u8 ide_dump_status(ide_drive_t *, const char *, u8); | 1522 | u8 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); |
1572 | int ide_timing_compute(ide_drive_t *, u8, struct ide_timing *, int, int); | 1556 | int ide_timing_compute(ide_drive_t *, u8, struct ide_timing *, int, int); |
1573 | 1557 | ||
1558 | #ifdef CONFIG_IDE_XFER_MODE | ||
1574 | int ide_scan_pio_blacklist(char *); | 1559 | int ide_scan_pio_blacklist(char *); |
1575 | 1560 | const char *ide_xfer_verbose(u8); | |
1576 | u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8); | 1561 | u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8); |
1577 | |||
1578 | int ide_set_pio_mode(ide_drive_t *, u8); | 1562 | int ide_set_pio_mode(ide_drive_t *, u8); |
1579 | int ide_set_dma_mode(ide_drive_t *, u8); | 1563 | int ide_set_dma_mode(ide_drive_t *, u8); |
1580 | |||
1581 | void ide_set_pio(ide_drive_t *, u8); | 1564 | void ide_set_pio(ide_drive_t *, u8); |
1565 | int ide_set_xfer_rate(ide_drive_t *, u8); | ||
1566 | #else | ||
1567 | static inline void ide_set_pio(ide_drive_t *drive, u8 pio) { ; } | ||
1568 | static inline int ide_set_xfer_rate(ide_drive_t *drive, u8 rate) { return -1; } | ||
1569 | #endif | ||
1582 | 1570 | ||
1583 | static inline void ide_set_max_pio(ide_drive_t *drive) | 1571 | static 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 | |||
530 | struct ieee80211_mgmt { | 532 | struct 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) */ | ||
665 | struct 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 */ |
659 | struct ieee80211_rts { | 674 | struct 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 | ||
1129 | enum 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 */ |
1108 | enum ieee80211_back_actioncode { | 1136 | enum 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 */ | ||
1150 | enum 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 | */ | ||
1228 | static 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 | */ | ||
1260 | static 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 | */ | ||
1275 | static 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 | */ | ||
1290 | static 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 | */ | ||
1309 | static 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 | */ | ||
1341 | static 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 | */ | ||
1360 | static 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 | ||
113 | struct ethhdr { | 113 | struct 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 | ||
109 | struct pppoe_hdr { | 109 | struct 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 | ||
28 | struct ip_tunnel_parm | 28 | struct 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> | ||
14 | struct linux_binprm; | ||
15 | |||
16 | #ifdef CONFIG_IMA | ||
17 | extern int ima_bprm_check(struct linux_binprm *bprm); | ||
18 | extern int ima_inode_alloc(struct inode *inode); | ||
19 | extern void ima_inode_free(struct inode *inode); | ||
20 | extern int ima_path_check(struct path *path, int mask); | ||
21 | extern void ima_file_free(struct file *file); | ||
22 | extern int ima_file_mmap(struct file *file, unsigned long prot); | ||
23 | extern void ima_shm_check(struct file *file); | ||
24 | |||
25 | #else | ||
26 | static inline int ima_bprm_check(struct linux_binprm *bprm) | ||
27 | { | ||
28 | return 0; | ||
29 | } | ||
30 | |||
31 | static inline int ima_inode_alloc(struct inode *inode) | ||
32 | { | ||
33 | return 0; | ||
34 | } | ||
35 | |||
36 | static inline void ima_inode_free(struct inode *inode) | ||
37 | { | ||
38 | return; | ||
39 | } | ||
40 | |||
41 | static inline int ima_path_check(struct path *path, int mask) | ||
42 | { | ||
43 | return 0; | ||
44 | } | ||
45 | |||
46 | static inline void ima_file_free(struct file *file) | ||
47 | { | ||
48 | return; | ||
49 | } | ||
50 | |||
51 | static inline int ima_file_mmap(struct file *file, unsigned long prot) | ||
52 | { | ||
53 | return 0; | ||
54 | } | ||
55 | |||
56 | static 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 | ||
112 | struct in_ifaddr | 113 | struct 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 | ||
73 | extern int kobject_set_name(struct kobject *kobj, const char *name, ...) | 74 | extern int kobject_set_name(struct kobject *kobj, const char *name, ...) |
74 | __attribute__((format(printf, 2, 3))); | 75 | __attribute__((format(printf, 2, 3))); |
76 | extern int kobject_set_name_vargs(struct kobject *kobj, const char *fmt, | ||
77 | va_list vargs); | ||
75 | 78 | ||
76 | static inline const char *kobject_name(const struct kobject *kobj) | 79 | static 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 | ||
220 | struct kvm_breakpoint { | ||
221 | __u32 enabled; | ||
222 | __u32 padding; | ||
223 | __u64 address; | ||
224 | }; | ||
225 | |||
226 | /* for KVM_DEBUG_GUEST */ | ||
227 | struct 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 */ |
236 | struct kvm_dirty_log { | 225 | struct 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 | |||
289 | struct 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 | |||
415 | struct kvm_irq_routing_irqchip { | ||
416 | __u32 irqchip; | ||
417 | __u32 pin; | ||
418 | }; | ||
419 | |||
420 | struct 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 | |||
431 | struct 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 | |||
443 | struct 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 | */ | ||
535 | struct kvm_breakpoint { | ||
536 | __u32 enabled; | ||
537 | __u32 padding; | ||
538 | __u64 address; | ||
539 | }; | ||
540 | |||
541 | struct 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 | ||
111 | struct 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 | |||
110 | struct kvm { | 125 | struct 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); |
238 | long kvm_arch_vm_ioctl(struct file *filp, | 258 | long kvm_arch_vm_ioctl(struct file *filp, |
239 | unsigned int ioctl, unsigned long arg); | 259 | unsigned int ioctl, unsigned long arg); |
240 | void kvm_arch_destroy_vm(struct kvm *kvm); | ||
241 | 260 | ||
242 | int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu); | 261 | int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu); |
243 | int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu); | 262 | int 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); |
256 | int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, | 275 | int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, |
257 | struct kvm_mp_state *mp_state); | 276 | struct kvm_mp_state *mp_state); |
258 | int kvm_arch_vcpu_ioctl_debug_guest(struct kvm_vcpu *vcpu, | 277 | int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, |
259 | struct kvm_debug_guest *dbg); | 278 | struct kvm_guest_debug *dbg); |
260 | int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run); | 279 | int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run); |
261 | 280 | ||
262 | int kvm_arch_init(void *opaque); | 281 | int 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 | }; |
324 | void kvm_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level); | 342 | |
325 | void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi); | 343 | struct 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 | |||
349 | void kvm_register_irq_mask_notifier(struct kvm *kvm, int irq, | ||
350 | struct kvm_irq_mask_notifier *kimn); | ||
351 | void kvm_unregister_irq_mask_notifier(struct kvm *kvm, int irq, | ||
352 | struct kvm_irq_mask_notifier *kimn); | ||
353 | void kvm_fire_mask_notifiers(struct kvm *kvm, int irq, bool mask); | ||
354 | |||
355 | int kvm_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level); | ||
356 | void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin); | ||
326 | void kvm_register_irq_ack_notifier(struct kvm *kvm, | 357 | void kvm_register_irq_ack_notifier(struct kvm *kvm, |
327 | struct kvm_irq_ack_notifier *kian); | 358 | struct kvm_irq_ack_notifier *kian); |
328 | void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian); | 359 | void 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 | |||
502 | int kvm_setup_default_irq_routing(struct kvm *kvm); | ||
503 | int kvm_set_irq_routing(struct kvm *kvm, | ||
504 | const struct kvm_irq_routing_entry *entries, | ||
505 | unsigned nr, | ||
506 | unsigned flags); | ||
507 | void kvm_free_irq_routing(struct kvm *kvm); | ||
508 | |||
509 | #else | ||
510 | |||
511 | static 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 | ||
41 | typedef hfn_t pfn_t; | 41 | typedef hfn_t pfn_t; |
42 | 42 | ||
43 | struct 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 | ||
25 | struct task_struct; | 26 | struct task_struct; |
26 | 27 | ||
27 | void account_scheduler_latency(struct task_struct *task, int usecs, int inter); | 28 | extern int latencytop_enabled; |
29 | void __account_scheduler_latency(struct task_struct *task, int usecs, int inter); | ||
30 | static inline void | ||
31 | account_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 | ||
29 | void clear_all_latency_tracing(struct task_struct *p); | 37 | void 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); | |||
1008 | extern int ata_cable_ignore(struct ata_port *ap); | 1011 | extern int ata_cable_ignore(struct ata_port *ap); |
1009 | extern int ata_cable_unknown(struct ata_port *ap); | 1012 | extern int ata_cable_unknown(struct ata_port *ap); |
1010 | 1013 | ||
1014 | extern void ata_pio_queue_task(struct ata_port *ap, void *data, | ||
1015 | unsigned long delay); | ||
1016 | |||
1011 | /* Timing helpers */ | 1017 | /* Timing helpers */ |
1012 | extern unsigned int ata_pio_need_iordy(const struct ata_device *); | 1018 | extern unsigned int ata_pio_need_iordy(const struct ata_device *); |
1013 | extern const struct ata_timing *ata_timing_find_mode(u8 xfer_mode); | 1019 | extern 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); | |||
1572 | extern unsigned int ata_sff_host_intr(struct ata_port *ap, | 1578 | extern unsigned int ata_sff_host_intr(struct ata_port *ap, |
1573 | struct ata_queued_cmd *qc); | 1579 | struct ata_queued_cmd *qc); |
1574 | extern irqreturn_t ata_sff_interrupt(int irq, void *dev_instance); | 1580 | extern irqreturn_t ata_sff_interrupt(int irq, void *dev_instance); |
1581 | extern void ata_sff_lost_interrupt(struct ata_port *ap); | ||
1575 | extern void ata_sff_freeze(struct ata_port *ap); | 1582 | extern void ata_sff_freeze(struct ata_port *ap); |
1576 | extern void ata_sff_thaw(struct ata_port *ap); | 1583 | extern void ata_sff_thaw(struct ata_port *ap); |
1577 | extern int ata_sff_prereset(struct ata_link *link, unsigned long deadline); | 1584 | extern 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, | |||
1584 | extern int sata_sff_hardreset(struct ata_link *link, unsigned int *class, | 1591 | extern int sata_sff_hardreset(struct ata_link *link, unsigned int *class, |
1585 | unsigned long deadline); | 1592 | unsigned long deadline); |
1586 | extern void ata_sff_postreset(struct ata_link *link, unsigned int *classes); | 1593 | extern void ata_sff_postreset(struct ata_link *link, unsigned int *classes); |
1594 | extern void ata_sff_drain_fifo(struct ata_queued_cmd *qc); | ||
1587 | extern void ata_sff_error_handler(struct ata_port *ap); | 1595 | extern void ata_sff_error_handler(struct ata_port *ap); |
1588 | extern void ata_sff_post_internal_cmd(struct ata_queued_cmd *qc); | 1596 | extern void ata_sff_post_internal_cmd(struct ata_queued_cmd *qc); |
1589 | extern int ata_sff_port_start(struct ata_port *ap); | 1597 | extern 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 | |||
14 | typedef 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 | |||
157 | struct 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 | |||
166 | struct lm_async_cb { | ||
167 | struct lm_lockname lc_name; | ||
168 | int lc_ret; | ||
169 | }; | ||
170 | |||
171 | struct lm_lockstruct; | ||
172 | |||
173 | struct 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 | |||
244 | struct 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 | |||
258 | int gfs2_register_lockproto(const struct lm_lockops *proto); | ||
259 | void 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 | |||
266 | int 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 | |||
272 | void gfs2_unmount_lockproto(struct lm_lockstruct *lockstruct); | ||
273 | |||
274 | void 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 */ |
10 | enum maple_code { | 10 | enum 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 | |||
33 | enum 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 | |||
42 | struct maple_buffer { | ||
43 | char bufx[0x400]; | ||
44 | void *buf; | ||
29 | }; | 45 | }; |
30 | 46 | ||
31 | struct mapleq { | 47 | struct 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 | ||
40 | struct maple_devinfo { | 56 | struct 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, | |||
72 | int maple_driver_register(struct maple_driver *); | 92 | int maple_driver_register(struct maple_driver *); |
73 | void maple_driver_unregister(struct maple_driver *); | 93 | void maple_driver_unregister(struct maple_driver *); |
74 | 94 | ||
75 | int maple_add_packet_sleeps(struct maple_device *mdev, u32 function, | 95 | int maple_add_packet(struct maple_device *mdev, u32 function, |
76 | u32 command, u32 length, void *data); | 96 | u32 command, u32 length, void *data); |
77 | void maple_clear_dev(struct maple_device *mdev); | 97 | void 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 | ||
1184 | struct wm8400; | ||
1184 | void wm8400_reset_codec_reg_cache(struct wm8400 *wm8400); | 1185 | void 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 | ||
157 | enum mlx4_port_type { | 157 | enum 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 | ||
162 | enum mlx4_special_vlan_idx { | 163 | enum 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 | ||
242 | struct mlx4_buf_list { | 244 | struct 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 | |||
460 | struct 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 | |||
193 | struct mfc_cache | 193 | struct 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 | ||
221 | static inline | ||
222 | struct net *mfc_net(const struct mfc_cache *mfc) | ||
223 | { | ||
224 | return read_pnet(&mfc->mfc_net); | ||
225 | } | ||
226 | |||
227 | static inline | ||
228 | void 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__ |
243 | struct rtmsg; | 258 | struct rtmsg; |
244 | extern int ipmr_get_route(struct sk_buff *skb, struct rtmsg *rtm, int nowait); | 259 | extern 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 | ||
139 | struct vm_area_struct; | 143 | struct 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 | |||
6 | struct 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 | |||
16 | struct net_dm_config_entry { | ||
17 | __u32 type; | ||
18 | __u64 data __attribute__((aligned(8))); | ||
19 | }; | ||
20 | |||
21 | struct net_dm_config_msg { | ||
22 | __u32 entries; | ||
23 | struct net_dm_config_entry options[0]; | ||
24 | }; | ||
25 | |||
26 | struct net_dm_alert_msg { | ||
27 | __u32 entries; | ||
28 | struct net_dm_drop_point points[0]; | ||
29 | }; | ||
30 | |||
31 | struct 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 | |||
41 | enum { | ||
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 */ | ||
15 | enum { | ||
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 | */ | ||
41 | struct hwtstamp_config { | ||
42 | int flags; | ||
43 | int tx_type; | ||
44 | int rx_filter; | ||
45 | }; | ||
46 | |||
47 | /* possible values for hwtstamp_config->tx_type */ | ||
48 | enum { | ||
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 */ | ||
66 | enum { | ||
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 | ||
128 | struct net_device_stats | 128 | struct 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 | */ |
290 | struct netdev_boot_setup { | 290 | struct 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 | ||
333 | enum { | ||
334 | GRO_MERGED, | ||
335 | GRO_MERGED_FREE, | ||
336 | GRO_HELD, | ||
337 | GRO_NORMAL, | ||
338 | GRO_DROP, | ||
339 | }; | ||
340 | |||
330 | extern void __napi_schedule(struct napi_struct *n); | 341 | extern void __napi_schedule(struct napi_struct *n); |
331 | 342 | ||
332 | static inline int napi_disable_pending(struct napi_struct *n) | 343 | static 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, | |||
984 | void netif_napi_del(struct napi_struct *napi); | 995 | void netif_napi_del(struct napi_struct *napi); |
985 | 996 | ||
986 | struct napi_gro_cb { | 997 | struct 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 |
1089 | extern int netpoll_trap(void); | 1103 | extern int netpoll_trap(void); |
1090 | #endif | 1104 | #endif |
1105 | extern void *skb_gro_header(struct sk_buff *skb, unsigned int hlen); | ||
1106 | extern int skb_gro_receive(struct sk_buff **head, | ||
1107 | struct sk_buff *skb); | ||
1108 | |||
1109 | static inline unsigned int skb_gro_offset(const struct sk_buff *skb) | ||
1110 | { | ||
1111 | return NAPI_GRO_CB(skb)->data_offset; | ||
1112 | } | ||
1113 | |||
1114 | static inline unsigned int skb_gro_len(const struct sk_buff *skb) | ||
1115 | { | ||
1116 | return skb->len - NAPI_GRO_CB(skb)->data_offset; | ||
1117 | } | ||
1118 | |||
1119 | static inline void skb_gro_pull(struct sk_buff *skb, unsigned int len) | ||
1120 | { | ||
1121 | NAPI_GRO_CB(skb)->data_offset += len; | ||
1122 | } | ||
1123 | |||
1124 | static inline void skb_gro_reset_offset(struct sk_buff *skb) | ||
1125 | { | ||
1126 | NAPI_GRO_CB(skb)->data_offset = 0; | ||
1127 | } | ||
1128 | |||
1129 | static 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 | ||
1092 | static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, | 1136 | static 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); | |||
1376 | extern void napi_gro_flush(struct napi_struct *napi); | 1420 | extern void napi_gro_flush(struct napi_struct *napi); |
1377 | extern int dev_gro_receive(struct napi_struct *napi, | 1421 | extern int dev_gro_receive(struct napi_struct *napi, |
1378 | struct sk_buff *skb); | 1422 | struct sk_buff *skb); |
1423 | extern int napi_skb_finish(int ret, struct sk_buff *skb); | ||
1379 | extern int napi_gro_receive(struct napi_struct *napi, | 1424 | extern int napi_gro_receive(struct napi_struct *napi, |
1380 | struct sk_buff *skb); | 1425 | struct sk_buff *skb); |
1381 | extern void napi_reuse_skb(struct napi_struct *napi, | 1426 | extern void napi_reuse_skb(struct napi_struct *napi, |
1382 | struct sk_buff *skb); | 1427 | struct sk_buff *skb); |
1383 | extern struct sk_buff * napi_fraginfo_skb(struct napi_struct *napi, | 1428 | extern struct sk_buff * napi_fraginfo_skb(struct napi_struct *napi, |
1384 | struct napi_gro_fraginfo *info); | 1429 | struct napi_gro_fraginfo *info); |
1430 | extern int napi_frags_finish(struct napi_struct *napi, | ||
1431 | struct sk_buff *skb, int ret); | ||
1385 | extern int napi_gro_frags(struct napi_struct *napi, | 1432 | extern int napi_gro_frags(struct napi_struct *napi, |
1386 | struct napi_gro_fraginfo *info); | 1433 | struct napi_gro_fraginfo *info); |
1387 | extern void netif_nit_deliver(struct sk_buff *skb); | 1434 | extern 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 */ | ||
1579 | static 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 | */ | ||
1587 | static 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 | |||
1594 | static 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(). */ | ||
1601 | static 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 | */ | ||
1613 | static 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 | */ | ||
1623 | static inline void netif_rx_complete(struct napi_struct *napi) | ||
1624 | { | ||
1625 | napi_complete(napi); | ||
1626 | } | ||
1627 | |||
1628 | static inline void __netif_tx_lock(struct netdev_queue *txq, int cpu) | 1625 | static 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 | |||
7 | header-y += xt_CONNMARK.h | 7 | header-y += xt_CONNMARK.h |
8 | header-y += xt_CONNSECMARK.h | 8 | header-y += xt_CONNSECMARK.h |
9 | header-y += xt_DSCP.h | 9 | header-y += xt_DSCP.h |
10 | header-y += xt_LED.h | ||
10 | header-y += xt_MARK.h | 11 | header-y += xt_MARK.h |
11 | header-y += xt_NFLOG.h | 12 | header-y += xt_NFLOG.h |
12 | header-y += xt_NFQUEUE.h | 13 | header-y += xt_NFQUEUE.h |
13 | header-y += xt_RATEEST.h | 14 | header-y += xt_RATEEST.h |
14 | header-y += xt_SECMARK.h | 15 | header-y += xt_SECMARK.h |
15 | header-y += xt_TCPMSS.h | 16 | header-y += xt_TCPMSS.h |
17 | header-y += xt_TCPOPTSTRIP.h | ||
18 | header-y += xt_TPROXY.h | ||
16 | header-y += xt_comment.h | 19 | header-y += xt_comment.h |
17 | header-y += xt_connbytes.h | 20 | header-y += xt_connbytes.h |
21 | header-y += xt_connlimit.h | ||
18 | header-y += xt_connmark.h | 22 | header-y += xt_connmark.h |
19 | header-y += xt_conntrack.h | 23 | header-y += xt_conntrack.h |
24 | header-y += xt_cluster.h | ||
20 | header-y += xt_dccp.h | 25 | header-y += xt_dccp.h |
21 | header-y += xt_dscp.h | 26 | header-y += xt_dscp.h |
22 | header-y += xt_esp.h | 27 | header-y += xt_esp.h |
@@ -30,6 +35,7 @@ header-y += xt_mark.h | |||
30 | header-y += xt_multiport.h | 35 | header-y += xt_multiport.h |
31 | header-y += xt_owner.h | 36 | header-y += xt_owner.h |
32 | header-y += xt_pkttype.h | 37 | header-y += xt_pkttype.h |
38 | header-y += xt_quota.h | ||
33 | header-y += xt_rateest.h | 39 | header-y += xt_rateest.h |
34 | header-y += xt_realm.h | 40 | header-y += xt_realm.h |
35 | header-y += xt_recent.h | 41 | header-y += xt_recent.h |
@@ -39,6 +45,8 @@ header-y += xt_statistic.h | |||
39 | header-y += xt_string.h | 45 | header-y += xt_string.h |
40 | header-y += xt_tcpmss.h | 46 | header-y += xt_tcpmss.h |
41 | header-y += xt_tcpudp.h | 47 | header-y += xt_tcpudp.h |
48 | header-y += xt_time.h | ||
49 | header-y += xt_u32.h | ||
42 | 50 | ||
43 | unifdef-y += nf_conntrack_common.h | 51 | unifdef-y += nf_conntrack_common.h |
44 | unifdef-y += nf_conntrack_ftp.h | 52 | unifdef-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); | |||
76 | extern int nfnetlink_has_listeners(unsigned int group); | 76 | extern int nfnetlink_has_listeners(unsigned int group); |
77 | extern int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group, | 77 | extern int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group, |
78 | int echo); | 78 | int echo); |
79 | extern void nfnetlink_set_err(u32 pid, u32 group, int error); | ||
79 | extern int nfnetlink_unicast(struct sk_buff *skb, u_int32_t pid, int flags); | 80 | extern int nfnetlink_unicast(struct sk_buff *skb, u_int32_t pid, int flags); |
80 | 81 | ||
81 | extern void nfnl_lock(void); | 82 | extern 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 | ||
434 | extern struct xt_table_info *xt_alloc_table_info(unsigned int size); | 433 | extern struct xt_table_info *xt_alloc_table_info(unsigned int size); |
435 | extern void xt_free_table_info(struct xt_table_info *info); | 434 | extern void xt_free_table_info(struct xt_table_info *info); |
435 | extern 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 | |||
4 | struct 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 | |||
4 | enum xt_cluster_flags { | ||
5 | XT_CLUSTER_F_INV = (1 << 0) | ||
6 | }; | ||
7 | |||
8 | struct 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 | ||
7 | struct 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. */ |
9 | struct xt_rateinfo { | 11 | struct 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 | ||
9 | struct xt_quota_priv; | ||
10 | |||
9 | struct xt_quota_info { | 11 | struct 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 | ||
16 | struct xt_statistic_priv; | ||
17 | |||
16 | struct xt_statistic_info { | 18 | struct 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) | |||
59 | static inline unsigned int nf_bridge_encap_header_len(const struct sk_buff *skb) | 59 | static 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 | |||
11 | header-y += ip6t_limit.h | 11 | header-y += ip6t_limit.h |
12 | header-y += ip6t_mac.h | 12 | header-y += ip6t_mac.h |
13 | header-y += ip6t_mark.h | 13 | header-y += ip6t_mark.h |
14 | header-y += ip6t_mh.h | ||
14 | header-y += ip6t_multiport.h | 15 | header-y += ip6t_multiport.h |
15 | header-y += ip6t_opts.h | 16 | header-y += ip6t_opts.h |
16 | header-y += ip6t_owner.h | 17 | header-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 | ||
107 | struct nl_pktinfo | 109 | struct 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 | ||
66 | static 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 | |||
66 | static inline int netpoll_receive_skb(struct sk_buff *skb) | 73 | static 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 | } |
109 | static inline int netpoll_rx_on(struct sk_buff *skb) | ||
110 | { | ||
111 | return 0; | ||
112 | } | ||
102 | static inline int netpoll_receive_skb(struct sk_buff *skb) | 113 | static 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 | */ |
416 | enum nl80211_sta_flags { | 501 | enum 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 | */ |
469 | enum nl80211_sta_info { | 558 | enum 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 | */ | ||
712 | enum 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 | */ | ||
735 | enum 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 | */ | ||
965 | enum 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 */ |
17 | struct pimreghdr | 17 | struct 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 | ||
16 | struct platform_device { | 17 | struct 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 | ||
26 | extern int platform_device_register(struct platform_device *); | 32 | extern 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 | ||
61 | extern int platform_driver_register(struct platform_driver *); | 68 | extern 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 | |||
403 | static inline int device_suspend(pm_message_t state) | 406 | static 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() */ | ||
416 | enum 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 | ||
26 | struct ppp_channel; | 27 | struct 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. */ |
57 | extern void ppp_input_error(struct ppp_channel *, int code); | 58 | extern void ppp_input_error(struct ppp_channel *, int code); |
58 | 59 | ||
60 | /* Attach a channel to a given PPP unit in specified net. */ | ||
61 | extern 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. */ |
60 | extern int ppp_register_channel(struct ppp_channel *); | 64 | extern 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 | |||
99 | struct 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 | |||
110 | struct 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 | |||
119 | struct 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 | |||
130 | struct 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 | |||
140 | struct 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 | ||
151 | struct 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 | */ | ||
202 | typedef u_int64_t rds_rdma_cookie_t; | ||
203 | |||
204 | struct rds_iovec { | ||
205 | u_int64_t addr; | ||
206 | u_int64_t bytes; | ||
207 | }; | ||
208 | |||
209 | struct rds_get_mr_args { | ||
210 | struct rds_iovec vec; | ||
211 | u_int64_t cookie_addr; | ||
212 | uint64_t flags; | ||
213 | }; | ||
214 | |||
215 | struct rds_free_mr_args { | ||
216 | rds_rdma_cookie_t cookie; | ||
217 | u_int64_t flags; | ||
218 | }; | ||
219 | |||
220 | struct 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 | |||
229 | struct 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 | ||
623 | extern int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, u32 group, int echo); | 624 | extern int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, u32 group, int echo); |
624 | extern int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid); | 625 | extern int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid); |
625 | extern int rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group, | 626 | extern 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); |
627 | extern void rtnl_set_sk_err(struct net *net, u32 group, int error); | 628 | extern void rtnl_set_sk_err(struct net *net, u32 group, int error); |
628 | extern int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics); | 629 | extern int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics); |
629 | extern int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, | 630 | extern 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 | ||
1690 | extern int sched_clock_stable; | ||
1691 | #endif | ||
1692 | |||
1676 | extern unsigned long long sched_clock(void); | 1693 | extern unsigned long long sched_clock(void); |
1677 | 1694 | ||
1678 | extern void sched_clock_init(void); | 1695 | extern 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 { | |||
172 | typedef enum { | 172 | typedef 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 | */ |
214 | typedef enum { | 214 | typedef 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 | ||
221 | enum { SCTP_PARAM_ACTION_MASK = __constant_htons(0xc000), }; | 221 | enum { 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 | */ |
458 | typedef enum { | 458 | typedef 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 | |||
4 | struct 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 | ||
88 | unsigned int intc_evt2irq(unsigned int vector); | ||
88 | void __init register_intc_controller(struct intc_desc *desc); | 89 | void __init register_intc_controller(struct intc_desc *desc); |
89 | int intc_set_priority(unsigned int irq, unsigned int prio); | 90 | int 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 | */ | ||
160 | struct 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 | */ | ||
175 | union 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 | ||
375 | extern void kfree_skb(struct sk_buff *skb); | 423 | extern void kfree_skb(struct sk_buff *skb); |
424 | extern void consume_skb(struct sk_buff *skb); | ||
376 | extern void __kfree_skb(struct sk_buff *skb); | 425 | extern void __kfree_skb(struct sk_buff *skb); |
377 | extern struct sk_buff *__alloc_skb(unsigned int size, | 426 | extern 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, | |||
411 | extern int skb_cow_data(struct sk_buff *skb, int tailbits, | 460 | extern int skb_cow_data(struct sk_buff *skb, int tailbits, |
412 | struct sk_buff **trailer); | 461 | struct sk_buff **trailer); |
413 | extern int skb_pad(struct sk_buff *skb, int pad); | 462 | extern 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) | ||
415 | extern void skb_over_panic(struct sk_buff *skb, int len, | 465 | extern void skb_over_panic(struct sk_buff *skb, int len, |
416 | void *here); | 466 | void *here); |
417 | extern void skb_under_panic(struct sk_buff *skb, int len, | 467 | extern 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 | ||
512 | static inline struct skb_shared_hwtstamps *skb_hwtstamps(struct sk_buff *skb) | ||
513 | { | ||
514 | return &skb_shinfo(skb)->hwtstamps; | ||
515 | } | ||
516 | |||
517 | static 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 | ||
1296 | extern int ___pskb_trim(struct sk_buff *skb, unsigned int len); | 1356 | extern 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 | ||
1680 | extern struct sk_buff *skb_segment(struct sk_buff *skb, int features); | 1740 | extern struct sk_buff *skb_segment(struct sk_buff *skb, int features); |
1681 | extern int skb_gro_receive(struct sk_buff **head, | ||
1682 | struct sk_buff *skb); | ||
1683 | 1741 | ||
1684 | static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, | 1742 | static 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 | ||
1727 | extern void skb_init(void); | 1785 | extern void skb_init(void); |
1728 | 1786 | ||
1787 | static 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 | */ |
1738 | static inline void skb_get_timestamp(const struct sk_buff *skb, struct timeval *stamp) | 1801 | static 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 | ||
1807 | static inline void skb_get_timestampns(const struct sk_buff *skb, | ||
1808 | struct timespec *stamp) | ||
1809 | { | ||
1810 | *stamp = ktime_to_timespec(skb->tstamp); | ||
1811 | } | ||
1812 | |||
1743 | static inline void __net_timestamp(struct sk_buff *skb) | 1813 | static 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 | */ | ||
1839 | extern void skb_tstamp_tx(struct sk_buff *orig_skb, | ||
1840 | struct skb_shared_hwtstamps *hwtstamps); | ||
1841 | |||
1758 | extern __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len); | 1842 | extern __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len); |
1759 | extern __sum16 __skb_checksum_complete(struct sk_buff *skb); | 1843 | extern __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 | ||
1888 | static inline u16 skb_get_queue_mapping(struct sk_buff *skb) | 1972 | static 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 | ||
1982 | static inline void skb_record_rx_queue(struct sk_buff *skb, u16 rx_queue) | ||
1983 | { | ||
1984 | skb->queue_mapping = rx_queue + 1; | ||
1985 | } | ||
1986 | |||
1987 | static inline u16 skb_get_rx_queue(const struct sk_buff *skb) | ||
1988 | { | ||
1989 | return skb->queue_mapping - 1; | ||
1990 | } | ||
1991 | |||
1992 | static inline bool skb_rx_queue_recorded(const struct sk_buff *skb) | ||
1993 | { | ||
1994 | return (skb->queue_mapping != 0); | ||
1995 | } | ||
1996 | |||
1997 | extern u16 skb_tx_hash(const struct net_device *dev, | ||
1998 | const struct sk_buff *skb); | ||
1999 | |||
1898 | #ifdef CONFIG_XFRM | 2000 | #ifdef CONFIG_XFRM |
1899 | static inline struct sec_path *skb_sec_path(struct sk_buff *skb) | 2001 | static 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 | |||
14 | struct spi_device; | ||
15 | |||
16 | struct 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 | ||
340 | extern void ssb_bus_unregister(struct ssb_bus *bus); | 340 | extern 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. */ | ||
344 | extern 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. */ |
344 | extern int ssb_bus_suspend(struct ssb_bus *bus); | 348 | extern 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 @@ | |||
353 | struct ssb_device; | 553 | struct ssb_device; |
354 | struct ssb_serial_port; | 554 | struct 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 | */ | ||
559 | struct ssb_chipcommon_pmu { | ||
560 | u8 rev; /* PMU revision */ | ||
561 | u32 crystalfreq; /* The active crystal frequency (in kHz) */ | ||
562 | }; | ||
563 | |||
356 | struct ssb_chipcommon { | 564 | struct 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 | ||
363 | static inline bool ssb_chipco_available(struct ssb_chipcommon *cc) | 572 | static 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 | |||
368 | extern void ssb_chipcommon_init(struct ssb_chipcommon *cc); | 588 | extern void ssb_chipcommon_init(struct ssb_chipcommon *cc); |
369 | 589 | ||
370 | extern void ssb_chipco_suspend(struct ssb_chipcommon *cc); | 590 | extern 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 */ | ||
630 | extern 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 */ |
331 | enum { | 367 | enum { |
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 | ||
71 | enum { | 71 | enum { |
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 | */ | ||
73 | struct 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 | */ | ||
89 | extern 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 | */ | ||
102 | extern int timecompare_offset(struct timecompare *sync, | ||
103 | s64 *offset, | ||
104 | u64 *source_tstamp); | ||
105 | |||
106 | extern 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 | */ | ||
117 | static 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 | ||
87 | extern void add_timer_on(struct timer_list *timer, int cpu); | 87 | extern void add_timer_on(struct timer_list *timer, int cpu); |
88 | extern int del_timer(struct timer_list * timer); | 88 | extern int del_timer(struct timer_list * timer); |
89 | extern int __mod_timer(struct timer_list *timer, unsigned long expires); | ||
90 | extern int mod_timer(struct timer_list *timer, unsigned long expires); | 89 | extern int mod_timer(struct timer_list *timer, unsigned long expires); |
90 | extern 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 | /** | 149 | extern 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 | */ | ||
163 | static 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 | |||
13 | struct 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 | |||
32 | extern int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf); | ||
33 | extern 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 | */ |
31 | struct uio_mem { | 32 | struct 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 | */ |
50 | struct uio_port { | 53 | struct 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 | */ | ||
652 | static 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 | */ | ||
664 | static 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 | */ | ||
675 | static 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 | */ | ||
686 | static 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 | */ | ||
698 | static 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 | */ | ||
711 | static 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 | */ | ||
725 | static 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 | */ | ||
739 | static 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 | */ | ||
753 | static 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 | */ | ||
766 | static 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 | */ | ||
779 | static 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 | */ | ||
792 | static 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 | */ | ||
805 | static 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 | */ | ||
818 | static 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 | */ | ||
364 | static 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 | */ | ||
376 | static 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 | */ | ||
387 | static 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 | */ | ||
398 | static 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 | */ | ||
410 | static 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 | */ | ||
423 | static 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 | */ | ||
437 | static 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 | */ | ||
451 | static 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 | */ | ||
465 | static 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 | */ | ||
478 | static 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 | */ | ||
491 | static 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 | */ | ||
504 | static 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 | */ | ||
517 | static 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 | */ | ||
530 | static 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 | ||
273 | extern int usb_composite_register(struct usb_composite_driver *); | 281 | extern 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 | */ |
803 | int usb_gadget_register_driver(struct usb_gadget_driver *driver); | 805 | int 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 | */ |
818 | int usb_gadget_unregister_driver(struct usb_gadget_driver *driver); | 820 | int 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 */ |
82 | extern int otg_set_transceiver(struct otg_transceiver *); | 82 | extern int otg_set_transceiver(struct otg_transceiver *); |
83 | #ifdef CONFIG_NOP_USB_XCEIV | ||
84 | extern void usb_nop_xceiv_register(void); | ||
85 | extern 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 */ |
86 | extern struct otg_transceiver *otg_get_transceiver(void); | 90 | extern struct otg_transceiver *otg_get_transceiver(void); |
87 | extern void otg_put_transceiver(struct otg_transceiver *); | 91 | extern void otg_put_transceiver(struct otg_transceiver *); |
88 | 92 | ||
93 | /* Context: can sleep */ | ||
89 | static inline int | 94 | static inline int |
90 | otg_start_hnp(struct otg_transceiver *otg) | 95 | otg_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 */ | ||
105 | static inline int | 112 | static inline int |
106 | otg_set_peripheral(struct otg_transceiver *otg, struct usb_gadget *periph) | 113 | otg_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 */ | ||
117 | static inline int | 125 | static inline int |
118 | otg_set_suspend(struct otg_transceiver *otg, int suspend) | 126 | otg_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 | ||
95 | struct rndis_data_hdr { | 92 | struct 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 | ||
179 | extern int usbnet_open (struct net_device *net); | ||
180 | extern int usbnet_stop (struct net_device *net); | ||
181 | extern int usbnet_start_xmit (struct sk_buff *skb, struct net_device *net); | ||
182 | extern void usbnet_tx_timeout (struct net_device *net); | ||
183 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); | ||
179 | 184 | ||
180 | extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); | 185 | extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); |
181 | extern void usbnet_defer_kevent (struct usbnet *, int); | 186 | extern 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 | */ |
114 | extern int usb_usual_ignore_device(struct usb_interface *intf); | ||
115 | extern struct usb_device_id usb_storage_usb_ids[]; | ||
116 | |||
129 | #ifdef CONFIG_USB_LIBUSUAL | 117 | #ifdef CONFIG_USB_LIBUSUAL |
130 | 118 | ||
131 | extern struct usb_device_id storage_usb_ids[]; | ||
132 | extern void usb_usual_set_present(int type); | 119 | extern void usb_usual_set_present(int type); |
133 | extern void usb_usual_clear_present(int type); | 120 | extern void usb_usual_clear_present(int type); |
134 | extern int usb_usual_check_type(const struct usb_device_id *, int type); | 121 | extern 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 | ||
26 | struct virtio_net_config | 32 | struct 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 | */ | ||
72 | struct virtio_net_ctrl_hdr { | ||
73 | __u8 class; | ||
74 | __u8 cmd; | ||
75 | } __attribute__((packed)); | ||
76 | |||
77 | typedef __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 | */ | ||
107 | struct 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 | */ | ||
236 | struct i2400m_pl_edata_hdr { | ||
237 | __le32 reorder; /* bits defined in i2400m_ro */ | ||
238 | __u8 cs; | ||
239 | __u8 reserved[11]; | ||
240 | } __attribute__((packed)); | ||
241 | |||
242 | enum i2400m_cs { | ||
243 | I2400M_CS_IPV4_0 = 0, | ||
244 | I2400M_CS_IPV4 = 2, | ||
245 | }; | ||
246 | |||
247 | enum 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 | |||
259 | enum 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 */ |
225 | enum { | 268 | enum { |
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 */ | ||
560 | struct 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 */ | ||
567 | struct 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 */ | ||
574 | struct 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, | |||
88 | extern int ipv6_get_lladdr(struct net_device *dev, | 88 | extern 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); |
91 | extern int ipv6_rcv_saddr_equal(const struct sock *sk, | 91 | extern int ipv6_rcv_saddr_equal(const struct sock *sk, |
92 | const struct sock *sk2); | 92 | const struct sock *sk2); |
93 | extern void addrconf_join_solict(struct net_device *dev, | 93 | extern void addrconf_join_solict(struct net_device *dev, |
94 | struct in6_addr *addr); | 94 | struct in6_addr *addr); |
95 | extern void addrconf_leave_solict(struct inet6_dev *idev, | 95 | extern 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 { | |||
50 | struct clip_priv { | 50 | struct 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 | ||
19 | struct ax_plat_data { | 20 | struct 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 | ||
57 | struct 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 | ||
113 | struct bt_sock_list { | 125 | struct 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); | |||
325 | void hci_conn_hash_flush(struct hci_dev *hdev); | 326 | void hci_conn_hash_flush(struct hci_dev *hdev); |
326 | void hci_conn_check_pending(struct hci_dev *hdev); | 327 | void hci_conn_check_pending(struct hci_dev *hdev); |
327 | 328 | ||
328 | struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, __u8 auth_type); | 329 | struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, __u8 sec_level, __u8 auth_type); |
329 | int hci_conn_check_link_mode(struct hci_conn *conn); | 330 | int hci_conn_check_link_mode(struct hci_conn *conn); |
330 | int hci_conn_auth(struct hci_conn *conn); | 331 | int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type); |
331 | int hci_conn_encrypt(struct hci_conn *conn); | ||
332 | int hci_conn_change_link_key(struct hci_conn *conn); | 332 | int hci_conn_change_link_key(struct hci_conn *conn); |
333 | int hci_conn_switch_role(struct hci_conn *conn, uint8_t role); | 333 | int hci_conn_switch_role(struct hci_conn *conn, __u8 role); |
334 | 334 | ||
335 | void hci_conn_enter_active_mode(struct hci_conn *conn); | 335 | void hci_conn_enter_active_mode(struct hci_conn *conn); |
336 | void hci_conn_enter_sniff_mode(struct hci_conn *conn); | 336 | void 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 ----- */ |
472 | struct hci_proto { | 472 | struct 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 | ||
488 | static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type) | 488 | static 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 | ||
517 | static inline void hci_proto_disconn_ind(struct hci_conn *conn, __u8 reason) | 517 | static 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 | |||
533 | static 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 | ||
530 | static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status) | 546 | static 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 | ||
543 | static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status, __u8 encrypt) | 565 | static 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 | ||
556 | int hci_register_proto(struct hci_proto *hproto); | 578 | int 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 { | |||
571 | static inline void hci_auth_cfm(struct hci_conn *conn, __u8 status) | 592 | static 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); | |||
239 | int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb); | 242 | int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb); |
240 | int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig); | 243 | int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig); |
241 | int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig); | 244 | int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig); |
245 | void 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 | ||
310 | int rfcomm_init_sockets(void); | 315 | int 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 | ||
339 | struct rfcomm_dev_info { | 343 | struct 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 | */ |
116 | enum station_flags { | 121 | enum 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 | */ |
176 | enum station_info_flags { | 184 | enum 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 | */ |
233 | struct station_info { | 245 | struct 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 | */ |
350 | enum reg_set_by { | 358 | enum 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 | */ | ||
388 | struct 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 | ||
358 | struct ieee80211_freq_range { | 398 | struct 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 | */ | ||
488 | struct 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 */ |
435 | struct wiphy; | 495 | struct wiphy; |
436 | 496 | ||
@@ -438,6 +498,87 @@ struct wiphy; | |||
438 | struct ieee80211_channel; | 498 | struct ieee80211_channel; |
439 | 499 | ||
440 | /** | 500 | /** |
501 | * struct cfg80211_ssid - SSID description | ||
502 | * @ssid: the SSID | ||
503 | * @ssid_len: length of the ssid | ||
504 | */ | ||
505 | struct 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 | */ | ||
522 | struct 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 | */ | ||
542 | enum 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 | */ | ||
565 | struct 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 | */ |
501 | struct cfg80211_ops { | 654 | struct 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); |
575 | int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info, | 741 | int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info, |
576 | u32 *mode, char *extra); | 742 | u32 *mode, char *extra); |
743 | int cfg80211_wext_siwscan(struct net_device *dev, | ||
744 | struct iw_request_info *info, | ||
745 | union iwreq_data *wrqu, char *extra); | ||
746 | int cfg80211_wext_giwscan(struct net_device *dev, | ||
747 | struct iw_request_info *info, | ||
748 | struct iw_point *data, char *extra); | ||
749 | int 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 | */ | ||
760 | void 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 | */ | ||
773 | struct cfg80211_bss* | ||
774 | cfg80211_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 | |||
779 | struct 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); | ||
784 | static inline struct cfg80211_bss * | ||
785 | cfg80211_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 | |||
793 | struct cfg80211_bss *cfg80211_get_mesh(struct wiphy *wiphy, | ||
794 | struct ieee80211_channel *channel, | ||
795 | const u8 *meshid, size_t meshidlen, | ||
796 | const u8 *meshcfg); | ||
797 | void 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 | */ | ||
808 | void 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 | |||
17 | struct 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 | ||
16 | struct dsa_platform_data { | 42 | struct 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 | ||
33 | extern bool dsa_uses_dsa_tags(void *dsa_ptr); | 57 | extern 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 | ||
116 | extern u32 ieee80211_debug_level; | ||
117 | #define IEEE80211_DEBUG(level, fmt, args...) \ | ||
118 | do { if (ieee80211_debug_level & (level)) \ | ||
119 | printk(KERN_DEBUG "ieee80211: %c %s " fmt, \ | ||
120 | in_interrupt() ? 'I' : 'U', __func__ , ## args); } while (0) | ||
121 | static 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) | ||
127 | static 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 | |||
202 | struct 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 */ | ||
221 | enum ieee80211_actioncategories { | ||
222 | WLAN_ACTION_SPECTRUM_MGMT = 0, | ||
223 | /* Reserved 1-127 */ | ||
224 | /* Error 128-255 */ | ||
225 | }; | ||
226 | |||
227 | /* Action details - 802.11h */ | ||
228 | enum 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 | */ | ||
304 | struct 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 | |||
325 | struct 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 | |||
334 | struct 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 | |||
358 | struct 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 | |||
387 | struct 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 | ,-------------------------------------------------------------------. | ||
402 | Bytes | 2 | 2 | 6 | 6 | 6 | 2 | 0..2312 | 4 | | ||
403 | |------|------|---------|---------|---------|------|---------|------| | ||
404 | Desc. | ctrl | dura | DA/RA | TA | SA | Sequ | frame | fcs | | ||
405 | | | tion | (BSSID) | | | ence | data | | | ||
406 | `-------------------------------------------------------------------' | ||
407 | |||
408 | Total: 28-2340 bytes | ||
409 | |||
410 | */ | ||
411 | |||
412 | #define BEACON_PROBE_SSID_ID_POSITION 12 | ||
413 | |||
414 | /* Management Frame Information Element Types */ | ||
415 | enum 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 | |||
445 | struct ieee80211_hdr_1addr { | ||
446 | __le16 frame_ctl; | ||
447 | __le16 duration_id; | ||
448 | u8 addr1[ETH_ALEN]; | ||
449 | u8 payload[0]; | ||
450 | } __attribute__ ((packed)); | ||
451 | |||
452 | struct 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 | |||
460 | struct 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 | |||
470 | struct 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 | |||
481 | struct 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 | |||
492 | struct 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 | |||
515 | struct 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 | |||
524 | struct ieee80211_channel_switch { | ||
525 | u8 id; | ||
526 | u8 len; | ||
527 | u8 mode; | ||
528 | u8 channel; | ||
529 | u8 count; | ||
530 | } __attribute__ ((packed)); | ||
531 | |||
532 | struct 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 | |||
546 | struct 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 | |||
554 | struct 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 | |||
560 | struct 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 | |||
573 | struct 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 | |||
581 | struct 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 | |||
589 | struct 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 | |||
598 | struct 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 | |||
650 | struct 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 | |||
660 | struct ieee80211_qos_ac_parameter { | ||
661 | u8 aci_aifsn; | ||
662 | u8 ecw_min_max; | ||
663 | __le16 tx_op_limit; | ||
664 | } __attribute__ ((packed)); | ||
665 | |||
666 | struct 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 | |||
672 | struct 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 | |||
680 | struct 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 | |||
688 | struct ieee80211_tim_parameters { | ||
689 | u8 tim_count; | ||
690 | u8 tim_period; | ||
691 | } __attribute__ ((packed)); | ||
692 | |||
693 | /*******************************************************/ | ||
694 | |||
695 | enum { /* 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 | }; | ||
704 | struct ieee80211_basic_report { | ||
705 | u8 channel; | ||
706 | __le64 start_time; | ||
707 | __le16 duration; | ||
708 | u8 map; | ||
709 | } __attribute__ ((packed)); | ||
710 | |||
711 | enum { /* 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 | |||
719 | enum { | ||
720 | IEEE80211_REPORT_BASIC = 0, /* required */ | ||
721 | IEEE80211_REPORT_CCA = 1, /* optional */ | ||
722 | IEEE80211_REPORT_RPI = 2, /* optional */ | ||
723 | /* 3-255 reserved */ | ||
724 | }; | ||
725 | |||
726 | struct ieee80211_measurement_params { | ||
727 | u8 channel; | ||
728 | __le64 start_time; | ||
729 | __le16 duration; | ||
730 | } __attribute__ ((packed)); | ||
731 | |||
732 | struct 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 | |||
740 | struct 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 | |||
750 | struct ieee80211_tpc_report { | ||
751 | u8 transmit_power; | ||
752 | u8 link_margin; | ||
753 | } __attribute__ ((packed)); | ||
754 | |||
755 | struct ieee80211_channel_map { | ||
756 | u8 channel; | ||
757 | u8 map; | ||
758 | } __attribute__ ((packed)); | ||
759 | |||
760 | struct 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 | |||
767 | struct ieee80211_csa { | ||
768 | u8 mode; | ||
769 | u8 channel; | ||
770 | u8 count; | ||
771 | } __attribute__ ((packed)); | ||
772 | |||
773 | struct ieee80211_quiet { | ||
774 | u8 count; | ||
775 | u8 period; | ||
776 | u8 duration; | ||
777 | u8 offset; | ||
778 | } __attribute__ ((packed)); | ||
779 | |||
780 | struct 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 | |||
833 | enum 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 | |||
860 | enum { | ||
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 | |||
870 | struct ieee80211_channel { | ||
871 | u32 freq; /* in MHz */ | ||
872 | u8 channel; | ||
873 | u8 flags; | ||
874 | u8 max_power; /* in dBm */ | ||
875 | }; | ||
876 | |||
877 | struct 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 | |||
885 | struct 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 | |||
1015 | static inline void *ieee80211_priv(struct net_device *dev) | ||
1016 | { | ||
1017 | return ((struct ieee80211_device *)netdev_priv(dev))->priv; | ||
1018 | } | ||
1019 | |||
1020 | static 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 | |||
1047 | static 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 | |||
1075 | static 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 | |||
1090 | static 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 | |||
1106 | static 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 */ | ||
1119 | extern void free_ieee80211(struct net_device *dev); | ||
1120 | extern struct net_device *alloc_ieee80211(int sizeof_priv); | ||
1121 | |||
1122 | extern int ieee80211_set_encryption(struct ieee80211_device *ieee); | ||
1123 | |||
1124 | /* ieee80211_tx.c */ | ||
1125 | extern int ieee80211_xmit(struct sk_buff *skb, struct net_device *dev); | ||
1126 | extern void ieee80211_txb_free(struct ieee80211_txb *); | ||
1127 | |||
1128 | /* ieee80211_rx.c */ | ||
1129 | extern void ieee80211_rx_any(struct ieee80211_device *ieee, | ||
1130 | struct sk_buff *skb, struct ieee80211_rx_stats *stats); | ||
1131 | extern 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 */ | ||
1134 | extern void ieee80211_rx_mgt(struct ieee80211_device *ieee, | ||
1135 | struct ieee80211_hdr_4addr *header, | ||
1136 | struct ieee80211_rx_stats *stats); | ||
1137 | extern void ieee80211_network_reset(struct ieee80211_network *network); | ||
1138 | |||
1139 | /* ieee80211_geo.c */ | ||
1140 | extern const struct ieee80211_geo *ieee80211_get_geo(struct ieee80211_device | ||
1141 | *ieee); | ||
1142 | extern int ieee80211_set_geo(struct ieee80211_device *ieee, | ||
1143 | const struct ieee80211_geo *geo); | ||
1144 | |||
1145 | extern int ieee80211_is_valid_channel(struct ieee80211_device *ieee, | ||
1146 | u8 channel); | ||
1147 | extern int ieee80211_channel_to_index(struct ieee80211_device *ieee, | ||
1148 | u8 channel); | ||
1149 | extern u8 ieee80211_freq_to_channel(struct ieee80211_device *ieee, u32 freq); | ||
1150 | extern u8 ieee80211_get_channel_flags(struct ieee80211_device *ieee, | ||
1151 | u8 channel); | ||
1152 | extern const struct ieee80211_channel *ieee80211_get_channel(struct | ||
1153 | ieee80211_device | ||
1154 | *ieee, u8 channel); | ||
1155 | extern u32 ieee80211_channel_to_freq(struct ieee80211_device * ieee, | ||
1156 | u8 channel); | ||
1157 | |||
1158 | /* ieee80211_wx.c */ | ||
1159 | extern int ieee80211_wx_get_scan(struct ieee80211_device *ieee, | ||
1160 | struct iw_request_info *info, | ||
1161 | union iwreq_data *wrqu, char *key); | ||
1162 | extern int ieee80211_wx_set_encode(struct ieee80211_device *ieee, | ||
1163 | struct iw_request_info *info, | ||
1164 | union iwreq_data *wrqu, char *key); | ||
1165 | extern int ieee80211_wx_get_encode(struct ieee80211_device *ieee, | ||
1166 | struct iw_request_info *info, | ||
1167 | union iwreq_data *wrqu, char *key); | ||
1168 | extern int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee, | ||
1169 | struct iw_request_info *info, | ||
1170 | union iwreq_data *wrqu, char *extra); | ||
1171 | extern int ieee80211_wx_get_encodeext(struct ieee80211_device *ieee, | ||
1172 | struct iw_request_info *info, | ||
1173 | union iwreq_data *wrqu, char *extra); | ||
1174 | |||
1175 | static inline void ieee80211_increment_scans(struct ieee80211_device *ieee) | ||
1176 | { | ||
1177 | ieee->scans++; | ||
1178 | } | ||
1179 | |||
1180 | static 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) | |||
113 | static inline int INET_ECN_set_ce(struct sk_buff *skb) | 113 | static 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); |
62 | int inet_frag_evictor(struct netns_frags *nf, struct inet_frags *f); | 62 | int inet_frag_evictor(struct netns_frags *nf, struct inet_frags *f); |
63 | struct inet_frag_queue *inet_frag_find(struct netns_frags *nf, | 63 | struct 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 | ||
66 | static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f) | 67 | static 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 | ||
155 | static inline struct inet_ehash_bucket *inet_ehash_bucket( | 157 | static 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 | ||
202 | struct ipv6_fl_socklist | 202 | struct 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 | ||
28 | struct ipxhdr { | 28 | struct 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 | */ | ||
265 | enum mac80211_rate_control_flags { | 285 | enum 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 | ||
510 | struct 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 | */ |
528 | enum ieee80211_conf_changed { | 543 | enum 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 { | |||
559 | struct ieee80211_conf { | 575 | struct 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 | */ |
634 | enum ieee80211_if_conf_change { | 651 | enum 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 | */ |
648 | struct ieee80211_if_conf { | 668 | struct 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 | */ |
659 | enum ieee80211_key_alg { | 681 | enum 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 | */ |
692 | enum ieee80211_key_flags { | 718 | enum 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 | */ |
720 | struct ieee80211_key_conf { | 747 | struct 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 | */ |
761 | struct ieee80211_sta { | 788 | struct 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 | */ |
862 | enum ieee80211_hw_flags { | 892 | enum 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 | */ | ||
996 | struct 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 | ||
981 | static inline int ieee80211_num_queues(struct ieee80211_hw *hw) | ||
982 | { | ||
983 | return hw->queues + hw->ampdu_queues; | ||
984 | } | ||
985 | |||
986 | static inline struct ieee80211_rate * | 1025 | static inline struct ieee80211_rate * |
987 | ieee80211_get_tx_rate(const struct ieee80211_hw *hw, | 1026 | ieee80211_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 | */ |
1290 | struct ieee80211_ops { | 1382 | struct 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 | */ |
1756 | void ieee80211_scan_completed(struct ieee80211_hw *hw); | 1853 | void 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 | */ | ||
1991 | enum 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, | |||
1962 | int ieee80211_rate_control_register(struct rate_control_ops *ops); | 2072 | int ieee80211_rate_control_register(struct rate_control_ops *ops); |
1963 | void ieee80211_rate_control_unregister(struct rate_control_ops *ops); | 2073 | void ieee80211_rate_control_unregister(struct rate_control_ops *ops); |
1964 | 2074 | ||
2075 | static inline bool | ||
2076 | conf_is_ht20(struct ieee80211_conf *conf) | ||
2077 | { | ||
2078 | return conf->channel_type == NL80211_CHAN_HT20; | ||
2079 | } | ||
2080 | |||
2081 | static inline bool | ||
2082 | conf_is_ht40_minus(struct ieee80211_conf *conf) | ||
2083 | { | ||
2084 | return conf->channel_type == NL80211_CHAN_HT40MINUS; | ||
2085 | } | ||
2086 | |||
2087 | static inline bool | ||
2088 | conf_is_ht40_plus(struct ieee80211_conf *conf) | ||
2089 | { | ||
2090 | return conf->channel_type == NL80211_CHAN_HT40PLUS; | ||
2091 | } | ||
2092 | |||
2093 | static inline bool | ||
2094 | conf_is_ht40(struct ieee80211_conf *conf) | ||
2095 | { | ||
2096 | return conf_is_ht40_minus(conf) || conf_is_ht40_plus(conf); | ||
2097 | } | ||
2098 | |||
2099 | static inline bool | ||
2100 | conf_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 | ||
288 | extern int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp); | 288 | extern int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp); |
289 | extern unsigned int nf_conntrack_htable_size; | 289 | extern unsigned int nf_conntrack_htable_size; |
290 | extern int nf_conntrack_max; | 290 | extern 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 */ |
94 | extern struct nf_conntrack_l4proto nf_conntrack_l4proto_tcp6; | ||
95 | extern struct nf_conntrack_l4proto nf_conntrack_l4proto_udp4; | ||
96 | extern struct nf_conntrack_l4proto nf_conntrack_l4proto_udp6; | ||
97 | extern struct nf_conntrack_l4proto nf_conntrack_l4proto_generic; | 94 | extern 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; | |||
101 | extern struct nf_conntrack_l4proto * | 98 | extern 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 | ||
104 | extern struct nf_conntrack_l4proto * | ||
105 | nf_ct_l4proto_find_get(u_int16_t l3proto, u_int8_t protocol); | ||
106 | |||
107 | extern void nf_ct_l4proto_put(struct nf_conntrack_l4proto *p); | ||
108 | |||
109 | /* Protocol registration. */ | 101 | /* Protocol registration. */ |
110 | extern int nf_conntrack_l4proto_register(struct nf_conntrack_l4proto *proto); | 102 | extern int nf_conntrack_l4proto_register(struct nf_conntrack_l4proto *proto); |
111 | extern void nf_conntrack_l4proto_unregister(struct nf_conntrack_l4proto *proto); | 103 | extern 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. */ |
46 | int nf_log_register(u_int8_t pf, const struct nf_logger *logger); | 49 | int nf_log_register(u_int8_t pf, struct nf_logger *logger); |
47 | void nf_log_unregister(const struct nf_logger *logger); | 50 | void nf_log_unregister(struct nf_logger *logger); |
48 | void nf_log_unregister_pf(u_int8_t pf); | 51 | |
52 | int nf_log_bind_pf(u_int8_t pf, const struct nf_logger *logger); | ||
53 | void nf_log_unbind_pf(u_int8_t pf); | ||
49 | 54 | ||
50 | /* Calls the registered backend logging function */ | 55 | /* Calls the registered backend logging function */ |
51 | void nf_log_packet(u_int8_t pf, | 56 | void 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 | ||
62 | struct nr_private { | ||
63 | struct net_device_stats stats; | ||
64 | }; | ||
65 | |||
66 | struct nr_sock { | 62 | struct 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 | ||
106 | int phonet_sysctl_init(void); | 106 | int phonet_sysctl_init(void); |
107 | void phonet_sysctl_exit(void); | 107 | void phonet_sysctl_exit(void); |
108 | void phonet_netlink_register(void); | ||
109 | int isi_register(void); | 108 | int isi_register(void); |
110 | void isi_unregister(void); | 109 | void 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 | ||
31 | extern struct phonet_device_list pndevs; | 31 | struct phonet_device_list *phonet_device_list(struct net *net); |
32 | 32 | ||
33 | struct phonet_device { | 33 | struct 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 | ||
39 | void phonet_device_init(void); | 39 | int phonet_device_init(void); |
40 | void phonet_device_exit(void); | 40 | void phonet_device_exit(void); |
41 | int phonet_netlink_register(void); | ||
41 | struct net_device *phonet_device_get(struct net *net); | 42 | struct net_device *phonet_device_get(struct net *net); |
42 | 43 | ||
43 | int phonet_address_add(struct net_device *dev, u8 addr); | 44 | int 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); |
86 | extern void qdisc_put_rtab(struct qdisc_rate_table *tab); | 86 | extern void qdisc_put_rtab(struct qdisc_rate_table *tab); |
87 | extern void qdisc_put_stab(struct qdisc_size_table *tab); | 87 | extern void qdisc_put_stab(struct qdisc_size_table *tab); |
88 | extern void qdisc_warn_nonwc(char *txt, struct Qdisc *qdisc); | ||
88 | 89 | ||
89 | extern void __qdisc_run(struct Qdisc *q); | 90 | extern 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 | ||
4 | extern 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)); | 4 | extern struct datalink_proto * |
5 | register_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)); | ||
5 | extern void unregister_snap_client(struct datalink_proto *proto); | 9 | extern 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 | ||
75 | struct Qdisc_class_ops | 79 | struct 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 | ||
49 | static inline __be32 sctp_crc32c(__be32 crc, u8 *buffer, u16 length) | 49 | static 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 | ||
54 | static inline __be32 sctp_start_cksum(__u8 *buffer, __u16 length) | 54 | static 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 | ||
75 | static inline __be32 sctp_update_cksum(__u8 *buffer, __u16 length, __be32 crc32) | 75 | static 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 | ||
80 | static inline __be32 sctp_end_cksum(__be32 crc32) | 80 | static 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); | |||
138 | unsigned int sctp_poll(struct file *file, struct socket *sock, | 131 | unsigned int sctp_poll(struct file *file, struct socket *sock, |
139 | poll_table *wait); | 132 | poll_table *wait); |
140 | void sctp_sock_rfree(struct sk_buff *skb); | 133 | void sctp_sock_rfree(struct sk_buff *skb); |
134 | void sctp_copy_sock(struct sock *newsk, struct sock *sk, | ||
135 | struct sctp_association *asoc); | ||
141 | extern struct percpu_counter sctp_sockets_allocated; | 136 | extern 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. */ |
257 | typedef enum { | 262 | typedef 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 | ||
493 | static inline void sock_copy_flags(struct sock *nsk, struct sock *osk) | 500 | static 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); |
954 | extern 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); | ||
947 | extern void *sock_kmalloc(struct sock *sk, int size, | 959 | extern void *sock_kmalloc(struct sock *sk, int size, |
948 | gfp_t priority); | 960 | gfp_t priority); |
949 | extern void sock_kfree_s(struct sock *sk, void *mem, int size); | 961 | extern void sock_kfree_s(struct sock *sk, void *mem, int size); |
@@ -1340,14 +1352,45 @@ static __inline__ void | |||
1340 | sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb) | 1352 | sock_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 | */ | ||
1388 | extern 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 | ||
1418 | extern void sock_enable_timestamp(struct sock *sk); | 1461 | extern void sock_enable_timestamp(struct sock *sk, int flag); |
1419 | extern int sock_get_timestamp(struct sock *, struct timeval __user *); | 1462 | extern int sock_get_timestamp(struct sock *, struct timeval __user *); |
1420 | extern int sock_get_timestampns(struct sock *, struct timespec __user *); | 1463 | extern 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 | ||
483 | extern unsigned int tcp_sync_mss(struct sock *sk, u32 pmtu); | 483 | extern unsigned int tcp_sync_mss(struct sock *sk, u32 pmtu); |
484 | extern unsigned int tcp_current_mss(struct sock *sk, int large); | 484 | extern unsigned int tcp_current_mss(struct sock *sk); |
485 | |||
486 | /* Bound MSS / TSO packet size with the half of the window */ | ||
487 | static 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 */ |
487 | extern void tcp_get_info(struct sock *, struct tcp_info *); | 496 | extern 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); | |||
685 | extern int tcp_set_allowed_congestion_control(char *allowed); | 694 | extern int tcp_set_allowed_congestion_control(char *allowed); |
686 | extern int tcp_set_congestion_control(struct sock *sk, const char *name); | 695 | extern int tcp_set_congestion_control(struct sock *sk, const char *name); |
687 | extern void tcp_slow_start(struct tcp_sock *tp); | 696 | extern void tcp_slow_start(struct tcp_sock *tp); |
697 | extern void tcp_cong_avoid_ai(struct tcp_sock *tp, u32 w); | ||
688 | 698 | ||
689 | extern struct tcp_congestion_ops tcp_init_congestion_ops; | 699 | extern struct tcp_congestion_ops tcp_init_congestion_ops; |
690 | extern u32 tcp_reno_ssthresh(struct sock *sk); | 700 | extern 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 | ||
827 | static inline void tcp_init_wl(struct tcp_sock *tp, u32 ack, u32 seq) | 837 | static 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 | ||
832 | static inline void tcp_update_wl(struct tcp_sock *tp, u32 ack, u32 seq) | 842 | static 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); | |||
925 | static inline void tcp_sack_reset(struct tcp_options_received *rx_opt) | 935 | static 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 | ||
1000 | static inline int tcp_paws_check(const struct tcp_options_received *rx_opt, int rst) | 1009 | static 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 | |||
1020 | static 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 | ||
127 | extern int ipv4_rcv_saddr_equal(const struct sock *sk1, | ||
128 | const struct sock *sk2); | ||
127 | extern int udp_lib_get_port(struct sock *sk, unsigned short snum, | 129 | extern 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 | */ |
191 | struct wiphy { | 209 | struct 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 | */ |
362 | struct ieee80211_rate * | 389 | struct ieee80211_rate * |
363 | ieee80211_get_response_rate(struct ieee80211_supported_band *sband, | 390 | ieee80211_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 | */ |
382 | extern void regulatory_hint(struct wiphy *wiphy, const char *alpha2); | 416 | extern 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); | |||
395 | extern void regulatory_hint_11d(struct wiphy *wiphy, | 429 | extern 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 | */ | ||
444 | extern 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 | */ | ||
469 | extern 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 | */ |
315 | void ib_destroy_cm_id(struct ib_cm_id *cm_id); | 315 | void 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 | ||
324 | struct ib_cm_compare_data { | 324 | struct 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 | */ |
291 | static inline void ib_set_rmpp_flags(struct ib_rmpp_hdr *rmpp_hdr, u8 flags) | 291 | static 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 | ||
86 | struct ib_port_info { | 86 | struct 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 | ||
393 | enum ib_ah_flags { | 393 | enum 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 | ||
170 | extern int snd_ad1816a_pcm(struct snd_ad1816a *chip, int device, struct snd_pcm **rpcm); | 170 | extern int snd_ad1816a_pcm(struct snd_ad1816a *chip, int device, struct snd_pcm **rpcm); |
171 | extern int snd_ad1816a_mixer(struct snd_ad1816a *chip); | 171 | extern int snd_ad1816a_mixer(struct snd_ad1816a *chip); |
172 | extern 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 | ||
129 | enum { | 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 | ||
454 | enum { | 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 | ||
541 | enum { | 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 | ||
657 | enum { | 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 | ||
675 | struct snd_timer_read { | 664 | struct 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 | ||
850 | enum { | 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 | |||
926 | struct snd_xferv { | ||
927 | const struct iovec *vector; | ||
928 | unsigned long count; | ||
929 | }; | ||
930 | |||
931 | enum { | ||
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 | */ | ||
19 | struct 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 | */ | ||
33 | struct 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 | */ |
172 | struct snd_kcontrol *snd_ctl_make_virtual_master(char *name, | 172 | struct snd_kcontrol *snd_ctl_make_virtual_master(char *name, |
173 | const unsigned int *tlv); | 173 | const unsigned int *tlv); |
174 | int snd_ctl_add_slave(struct snd_kcontrol *master, struct snd_kcontrol *slave); | 174 | int _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 | */ | ||
197 | static inline int | ||
198 | snd_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 | */ | ||
217 | static inline int | ||
218 | snd_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 | ||
98 | struct snd_monitor_file { | 98 | struct 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); | |||
296 | extern int (*snd_mixer_oss_notify_callback)(struct snd_card *card, int cmd); | 296 | extern int (*snd_mixer_oss_notify_callback)(struct snd_card *card, int cmd); |
297 | #endif | 297 | #endif |
298 | 298 | ||
299 | int snd_card_create(int idx, const char *id, | ||
300 | struct module *module, int extra_size, | ||
301 | struct snd_card **card_ret); | ||
302 | |||
303 | static inline __deprecated | ||
299 | struct snd_card *snd_card_new(int idx, const char *id, | 304 | struct 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 | |||
301 | int snd_card_disconnect(struct snd_card *card); | 313 | int snd_card_disconnect(struct snd_card *card); |
302 | int snd_card_free(struct snd_card *card); | 314 | int snd_card_free(struct snd_card *card); |
303 | int snd_card_free_when_closed(struct snd_card *card); | 315 | int snd_card_free_when_closed(struct snd_card *card); |
@@ -446,21 +458,33 @@ static inline int __snd_bug_on(int cond) | |||
446 | struct snd_pci_quirk { | 458 | struct 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 | ||
466 | const struct snd_pci_quirk * | 490 | const 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 | ||
28 | struct snd_hwdep; | 28 | struct snd_hwdep; |
29 | 29 | ||
30 | /* hwdep file ops; all ops can be NULL */ | ||
30 | struct snd_hwdep_ops { | 31 | struct 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 | ||
44 | struct snd_hwdep { | 54 | struct 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 | ||
69 | extern int snd_hwdep_new(struct snd_card *card, char *id, int device, | 79 | extern 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 | */ |
34 | enum snd_jack_types { | 37 | enum 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 | ||
42 | struct snd_jack { | 47 | struct 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 | ||
452 | extern const struct file_operations snd_pcm_f_ops[2]; | 451 | extern const struct file_operations snd_pcm_f_ops[2]; |
453 | 452 | ||
454 | int snd_pcm_new(struct snd_card *card, char *id, int device, | 453 | int 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); |
457 | int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count); | 456 | int 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); | |||
42 | extern int pxa2xx_ac97_hw_probe(struct platform_device *dev); | 42 | extern int pxa2xx_ac97_hw_probe(struct platform_device *dev); |
43 | extern void pxa2xx_ac97_hw_remove(struct platform_device *dev); | 43 | extern 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 | */ | ||
56 | struct 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 | ||
47 | struct snd_rawmidi; | 46 | struct snd_rawmidi; |
48 | struct snd_rawmidi_substream; | 47 | struct 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 | ||
205 | enum { | 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); |
229 | int snd_soc_dapm_put_value_enum_double(struct snd_kcontrol *kcontrol, | 245 | int 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); |
247 | int snd_soc_dapm_info_pin_switch(struct snd_kcontrol *kcontrol, | ||
248 | struct snd_ctl_elem_info *uinfo); | ||
249 | int snd_soc_dapm_get_pin_switch(struct snd_kcontrol *kcontrol, | ||
250 | struct snd_ctl_elem_value *uncontrol); | ||
251 | int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol, | ||
252 | struct snd_ctl_elem_value *uncontrol); | ||
231 | int snd_soc_dapm_new_control(struct snd_soc_codec *codec, | 253 | int 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); |
233 | int snd_soc_dapm_new_controls(struct snd_soc_codec *codec, | 255 | int 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, | |||
250 | int snd_soc_dapm_sys_add(struct device *dev); | 272 | int snd_soc_dapm_sys_add(struct device *dev); |
251 | 273 | ||
252 | /* dapm audio pin control and status */ | 274 | /* dapm audio pin control and status */ |
253 | int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, char *pin); | 275 | int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, const char *pin); |
254 | int snd_soc_dapm_disable_pin(struct snd_soc_codec *codec, char *pin); | 276 | int snd_soc_dapm_disable_pin(struct snd_soc_codec *codec, const char *pin); |
255 | int snd_soc_dapm_nc_pin(struct snd_soc_codec *codec, char *pin); | 277 | int snd_soc_dapm_nc_pin(struct snd_soc_codec *codec, const char *pin); |
256 | int snd_soc_dapm_get_pin_status(struct snd_soc_codec *codec, char *pin); | 278 | int snd_soc_dapm_get_pin_status(struct snd_soc_codec *codec, const char *pin); |
257 | int snd_soc_dapm_sync(struct snd_soc_codec *codec); | 279 | int 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 | ||
159 | struct snd_jack; | ||
160 | struct snd_soc_card; | ||
157 | struct snd_soc_device; | 161 | struct snd_soc_device; |
158 | struct snd_soc_pcm_stream; | 162 | struct snd_soc_pcm_stream; |
159 | struct snd_soc_ops; | 163 | struct snd_soc_ops; |
@@ -164,6 +168,11 @@ struct snd_soc_platform; | |||
164 | struct snd_soc_codec; | 168 | struct snd_soc_codec; |
165 | struct soc_enum; | 169 | struct soc_enum; |
166 | struct snd_soc_ac97_ops; | 170 | struct snd_soc_ac97_ops; |
171 | struct snd_soc_jack; | ||
172 | struct snd_soc_jack_pin; | ||
173 | #ifdef CONFIG_GPIOLIB | ||
174 | struct snd_soc_jack_gpio; | ||
175 | #endif | ||
167 | 176 | ||
168 | typedef int (*hw_write_t)(void *,const char* ,int); | 177 | typedef int (*hw_write_t)(void *,const char* ,int); |
169 | typedef int (*hw_read_t)(void *,char* ,int); | 178 | typedef int (*hw_read_t)(void *,char* ,int); |
@@ -184,6 +193,19 @@ int snd_soc_init_card(struct snd_soc_device *socdev); | |||
184 | int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream, | 193 | int 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 */ | ||
197 | int snd_soc_jack_new(struct snd_soc_card *card, const char *id, int type, | ||
198 | struct snd_soc_jack *jack); | ||
199 | void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask); | ||
200 | int snd_soc_jack_add_pins(struct snd_soc_jack *jack, int count, | ||
201 | struct snd_soc_jack_pin *pins); | ||
202 | #ifdef CONFIG_GPIOLIB | ||
203 | int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count, | ||
204 | struct snd_soc_jack_gpio *gpios); | ||
205 | void 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 | */ |
204 | struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template, | 226 | struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template, |
205 | void *data, char *long_name); | 227 | void *data, char *long_name); |
228 | int snd_soc_add_controls(struct snd_soc_codec *codec, | ||
229 | const struct snd_kcontrol_new *controls, int num_controls); | ||
206 | int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol, | 230 | int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol, |
207 | struct snd_ctl_elem_info *uinfo); | 231 | struct snd_ctl_elem_info *uinfo); |
208 | int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol, | 232 | int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol, |
@@ -237,6 +261,48 @@ int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol, | |||
237 | int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol, | 261 | int 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 | */ | ||
271 | struct 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 | ||
288 | struct 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 | |||
299 | struct 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 */ |
241 | struct snd_soc_pcm_stream { | 307 | struct 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 { | |||
393 | struct snd_soc_device { | 461 | struct 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 | |||
33 | enum uda1341_onoff { | ||
34 | OFF=0, | ||
35 | ON, | ||
36 | }; | ||
37 | |||
38 | enum uda1341_format { | ||
39 | I2S=0, | ||
40 | LSB16, | ||
41 | LSB18, | ||
42 | LSB20, | ||
43 | MSB, | ||
44 | LSB16MSB, | ||
45 | LSB18MSB, | ||
46 | LSB20MSB, | ||
47 | }; | ||
48 | |||
49 | enum uda1341_fs { | ||
50 | F512=0, | ||
51 | F384, | ||
52 | F256, | ||
53 | Funused, | ||
54 | }; | ||
55 | |||
56 | enum uda1341_peak { | ||
57 | BEFORE=0, | ||
58 | AFTER, | ||
59 | }; | ||
60 | |||
61 | enum uda1341_filter { | ||
62 | FLAT=0, | ||
63 | MIN, | ||
64 | MIN2, | ||
65 | MAX, | ||
66 | }; | ||
67 | |||
68 | enum uda1341_mixer { | ||
69 | DOUBLE, | ||
70 | LINE, | ||
71 | MIC, | ||
72 | MIXER, | ||
73 | }; | ||
74 | |||
75 | enum uda1341_deemp { | ||
76 | NONE, | ||
77 | D32, | ||
78 | D44, | ||
79 | D48, | ||
80 | }; | ||
81 | |||
82 | enum 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 | |||
113 | enum 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 | |||
120 | int __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); |
157 | int snd_wss_free(struct snd_wss *chip); | ||
157 | int snd_wss_pcm(struct snd_wss *chip, int device, struct snd_pcm **rpcm); | 158 | int snd_wss_pcm(struct snd_wss *chip, int device, struct snd_pcm **rpcm); |
158 | int snd_wss_timer(struct snd_wss *chip, int device, struct snd_timer **rtimer); | 159 | int snd_wss_timer(struct snd_wss *chip, int device, struct snd_timer **rtimer); |
159 | int snd_wss_mixer(struct snd_wss *chip); | 160 | int 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 | |||
7 | DECLARE_TRACE(kfree_skb, | ||
8 | TPPROTO(struct sk_buff *skb, void *location), | ||
9 | TPARGS(skb, location)); | ||
10 | |||
11 | #endif | ||