diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-03-30 17:53:32 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-03-30 17:53:32 -0400 |
| commit | 65fb0d23fcddd8697c871047b700c78817bdaa43 (patch) | |
| tree | 119e6e5f276622c4c862f6c9b6d795264ba1603a /include | |
| parent | 8c083f081d0014057901c68a0a3e0f8ca7ac8d23 (diff) | |
| parent | dfbbe89e197a77f2c8046a51c74e33e35f878080 (diff) | |
Merge branch 'linus' into cpumask-for-linus
Conflicts:
arch/x86/kernel/cpu/common.c
Diffstat (limited to 'include')
368 files changed, 9405 insertions, 4662 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/fcntl.h b/include/asm-generic/fcntl.h index b8477414c5c8..4d3e48373e74 100644 --- a/include/asm-generic/fcntl.h +++ b/include/asm-generic/fcntl.h | |||
| @@ -117,9 +117,9 @@ | |||
| 117 | struct flock { | 117 | struct flock { |
| 118 | short l_type; | 118 | short l_type; |
| 119 | short l_whence; | 119 | short l_whence; |
| 120 | off_t l_start; | 120 | __kernel_off_t l_start; |
| 121 | off_t l_len; | 121 | __kernel_off_t l_len; |
| 122 | pid_t l_pid; | 122 | __kernel_pid_t l_pid; |
| 123 | __ARCH_FLOCK_PAD | 123 | __ARCH_FLOCK_PAD |
| 124 | }; | 124 | }; |
| 125 | #endif | 125 | #endif |
| @@ -140,9 +140,9 @@ struct flock { | |||
| 140 | struct flock64 { | 140 | struct flock64 { |
| 141 | short l_type; | 141 | short l_type; |
| 142 | short l_whence; | 142 | short l_whence; |
| 143 | loff_t l_start; | 143 | __kernel_loff_t l_start; |
| 144 | loff_t l_len; | 144 | __kernel_loff_t l_len; |
| 145 | pid_t l_pid; | 145 | __kernel_pid_t l_pid; |
| 146 | __ARCH_FLOCK64_PAD | 146 | __ARCH_FLOCK64_PAD |
| 147 | }; | 147 | }; |
| 148 | #endif | 148 | #endif |
diff --git a/include/asm-generic/siginfo.h b/include/asm-generic/siginfo.h index 969570167e9e..35752dadd6df 100644 --- a/include/asm-generic/siginfo.h +++ b/include/asm-generic/siginfo.h | |||
| @@ -23,7 +23,7 @@ typedef union sigval { | |||
| 23 | #endif | 23 | #endif |
| 24 | 24 | ||
| 25 | #ifndef __ARCH_SI_UID_T | 25 | #ifndef __ARCH_SI_UID_T |
| 26 | #define __ARCH_SI_UID_T uid_t | 26 | #define __ARCH_SI_UID_T __kernel_uid32_t |
| 27 | #endif | 27 | #endif |
| 28 | 28 | ||
| 29 | /* | 29 | /* |
| @@ -47,13 +47,13 @@ typedef struct siginfo { | |||
| 47 | 47 | ||
| 48 | /* kill() */ | 48 | /* kill() */ |
| 49 | struct { | 49 | struct { |
| 50 | pid_t _pid; /* sender's pid */ | 50 | __kernel_pid_t _pid; /* sender's pid */ |
| 51 | __ARCH_SI_UID_T _uid; /* sender's uid */ | 51 | __ARCH_SI_UID_T _uid; /* sender's uid */ |
| 52 | } _kill; | 52 | } _kill; |
| 53 | 53 | ||
| 54 | /* POSIX.1b timers */ | 54 | /* POSIX.1b timers */ |
| 55 | struct { | 55 | struct { |
| 56 | timer_t _tid; /* timer id */ | 56 | __kernel_timer_t _tid; /* timer id */ |
| 57 | int _overrun; /* overrun count */ | 57 | int _overrun; /* overrun count */ |
| 58 | char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)]; | 58 | char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)]; |
| 59 | sigval_t _sigval; /* same as below */ | 59 | sigval_t _sigval; /* same as below */ |
| @@ -62,18 +62,18 @@ typedef struct siginfo { | |||
| 62 | 62 | ||
| 63 | /* POSIX.1b signals */ | 63 | /* POSIX.1b signals */ |
| 64 | struct { | 64 | struct { |
| 65 | pid_t _pid; /* sender's pid */ | 65 | __kernel_pid_t _pid; /* sender's pid */ |
| 66 | __ARCH_SI_UID_T _uid; /* sender's uid */ | 66 | __ARCH_SI_UID_T _uid; /* sender's uid */ |
| 67 | sigval_t _sigval; | 67 | sigval_t _sigval; |
| 68 | } _rt; | 68 | } _rt; |
| 69 | 69 | ||
| 70 | /* SIGCHLD */ | 70 | /* SIGCHLD */ |
| 71 | struct { | 71 | struct { |
| 72 | pid_t _pid; /* which child */ | 72 | __kernel_pid_t _pid; /* which child */ |
| 73 | __ARCH_SI_UID_T _uid; /* sender's uid */ | 73 | __ARCH_SI_UID_T _uid; /* sender's uid */ |
| 74 | int _status; /* exit code */ | 74 | int _status; /* exit code */ |
| 75 | clock_t _utime; | 75 | __kernel_clock_t _utime; |
| 76 | clock_t _stime; | 76 | __kernel_clock_t _stime; |
| 77 | } _sigchld; | 77 | } _sigchld; |
| 78 | 78 | ||
| 79 | /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ | 79 | /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ |
diff --git a/include/asm-generic/statfs.h b/include/asm-generic/statfs.h index 6129d6802149..3b4fb3e52f0d 100644 --- a/include/asm-generic/statfs.h +++ b/include/asm-generic/statfs.h | |||
| @@ -1,8 +1,9 @@ | |||
| 1 | #ifndef _GENERIC_STATFS_H | 1 | #ifndef _GENERIC_STATFS_H |
| 2 | #define _GENERIC_STATFS_H | 2 | #define _GENERIC_STATFS_H |
| 3 | 3 | ||
| 4 | #ifndef __KERNEL_STRICT_NAMES | 4 | #include <linux/types.h> |
| 5 | # include <linux/types.h> | 5 | |
| 6 | #ifdef __KERNEL__ | ||
| 6 | typedef __kernel_fsid_t fsid_t; | 7 | typedef __kernel_fsid_t fsid_t; |
| 7 | #endif | 8 | #endif |
| 8 | 9 | ||
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 5406e70aba86..a654d724d3b0 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/drm/drm.h b/include/drm/drm.h index 8e77357334ad..7cb50bdde46d 100644 --- a/include/drm/drm.h +++ b/include/drm/drm.h | |||
| @@ -36,8 +36,7 @@ | |||
| 36 | #ifndef _DRM_H_ | 36 | #ifndef _DRM_H_ |
| 37 | #define _DRM_H_ | 37 | #define _DRM_H_ |
| 38 | 38 | ||
| 39 | #if defined(__KERNEL__) | 39 | #include <linux/types.h> |
| 40 | #endif | ||
| 41 | #include <asm/ioctl.h> /* For _IO* macros */ | 40 | #include <asm/ioctl.h> /* For _IO* macros */ |
| 42 | #define DRM_IOCTL_NR(n) _IOC_NR(n) | 41 | #define DRM_IOCTL_NR(n) _IOC_NR(n) |
| 43 | #define DRM_IOC_VOID _IOC_NONE | 42 | #define DRM_IOC_VOID _IOC_NONE |
| @@ -497,8 +496,8 @@ union drm_wait_vblank { | |||
| 497 | * \sa drmModesetCtl(). | 496 | * \sa drmModesetCtl(). |
| 498 | */ | 497 | */ |
| 499 | struct drm_modeset_ctl { | 498 | struct drm_modeset_ctl { |
| 500 | uint32_t crtc; | 499 | __u32 crtc; |
| 501 | uint32_t cmd; | 500 | __u32 cmd; |
| 502 | }; | 501 | }; |
| 503 | 502 | ||
| 504 | /** | 503 | /** |
| @@ -574,29 +573,29 @@ struct drm_set_version { | |||
| 574 | /** DRM_IOCTL_GEM_CLOSE ioctl argument type */ | 573 | /** DRM_IOCTL_GEM_CLOSE ioctl argument type */ |
| 575 | struct drm_gem_close { | 574 | struct drm_gem_close { |
| 576 | /** Handle of the object to be closed. */ | 575 | /** Handle of the object to be closed. */ |
| 577 | uint32_t handle; | 576 | __u32 handle; |
| 578 | uint32_t pad; | 577 | __u32 pad; |
| 579 | }; | 578 | }; |
| 580 | 579 | ||
| 581 | /** DRM_IOCTL_GEM_FLINK ioctl argument type */ | 580 | /** DRM_IOCTL_GEM_FLINK ioctl argument type */ |
| 582 | struct drm_gem_flink { | 581 | struct drm_gem_flink { |
| 583 | /** Handle for the object being named */ | 582 | /** Handle for the object being named */ |
| 584 | uint32_t handle; | 583 | __u32 handle; |
| 585 | 584 | ||
| 586 | /** Returned global name */ | 585 | /** Returned global name */ |
| 587 | uint32_t name; | 586 | __u32 name; |
| 588 | }; | 587 | }; |
| 589 | 588 | ||
| 590 | /** DRM_IOCTL_GEM_OPEN ioctl argument type */ | 589 | /** DRM_IOCTL_GEM_OPEN ioctl argument type */ |
| 591 | struct drm_gem_open { | 590 | struct drm_gem_open { |
| 592 | /** Name of object being opened */ | 591 | /** Name of object being opened */ |
| 593 | uint32_t name; | 592 | __u32 name; |
| 594 | 593 | ||
| 595 | /** Returned handle for the object */ | 594 | /** Returned handle for the object */ |
| 596 | uint32_t handle; | 595 | __u32 handle; |
| 597 | 596 | ||
| 598 | /** Returned size of the object */ | 597 | /** Returned size of the object */ |
| 599 | uint64_t size; | 598 | __u64 size; |
| 600 | }; | 599 | }; |
| 601 | 600 | ||
| 602 | #include "drm_mode.h" | 601 | #include "drm_mode.h" |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index e5f4ae989abf..c8c422151431 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
| @@ -281,16 +281,16 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd, | |||
| 281 | 281 | ||
| 282 | struct drm_ioctl_desc { | 282 | struct drm_ioctl_desc { |
| 283 | unsigned int cmd; | 283 | unsigned int cmd; |
| 284 | drm_ioctl_t *func; | ||
| 285 | int flags; | 284 | int flags; |
| 285 | drm_ioctl_t *func; | ||
| 286 | }; | 286 | }; |
| 287 | 287 | ||
| 288 | /** | 288 | /** |
| 289 | * Creates a driver or general drm_ioctl_desc array entry for the given | 289 | * Creates a driver or general drm_ioctl_desc array entry for the given |
| 290 | * ioctl, for use by drm_ioctl(). | 290 | * ioctl, for use by drm_ioctl(). |
| 291 | */ | 291 | */ |
| 292 | #define DRM_IOCTL_DEF(ioctl, func, flags) \ | 292 | #define DRM_IOCTL_DEF(ioctl, _func, _flags) \ |
| 293 | [DRM_IOCTL_NR(ioctl)] = {ioctl, func, flags} | 293 | [DRM_IOCTL_NR(ioctl)] = {.cmd = ioctl, .func = _func, .flags = _flags} |
| 294 | 294 | ||
| 295 | struct drm_magic_entry { | 295 | struct drm_magic_entry { |
| 296 | struct list_head head; | 296 | struct list_head head; |
| @@ -523,19 +523,32 @@ struct drm_mm { | |||
| 523 | 523 | ||
| 524 | 524 | ||
| 525 | /** | 525 | /** |
| 526 | * Kernel side of a mapping | ||
| 527 | */ | ||
| 528 | struct drm_local_map { | ||
| 529 | resource_size_t offset; /**< Requested physical address (0 for SAREA)*/ | ||
| 530 | unsigned long size; /**< Requested physical size (bytes) */ | ||
| 531 | enum drm_map_type type; /**< Type of memory to map */ | ||
| 532 | enum drm_map_flags flags; /**< Flags */ | ||
| 533 | void *handle; /**< User-space: "Handle" to pass to mmap() */ | ||
| 534 | /**< Kernel-space: kernel-virtual address */ | ||
| 535 | int mtrr; /**< MTRR slot used */ | ||
| 536 | }; | ||
| 537 | |||
| 538 | typedef struct drm_local_map drm_local_map_t; | ||
| 539 | |||
| 540 | /** | ||
| 526 | * Mappings list | 541 | * Mappings list |
| 527 | */ | 542 | */ |
| 528 | struct drm_map_list { | 543 | struct drm_map_list { |
| 529 | struct list_head head; /**< list head */ | 544 | struct list_head head; /**< list head */ |
| 530 | struct drm_hash_item hash; | 545 | struct drm_hash_item hash; |
| 531 | struct drm_map *map; /**< mapping */ | 546 | struct drm_local_map *map; /**< mapping */ |
| 532 | uint64_t user_token; | 547 | uint64_t user_token; |
| 533 | struct drm_master *master; | 548 | struct drm_master *master; |
| 534 | struct drm_mm_node *file_offset_node; /**< fake offset */ | 549 | struct drm_mm_node *file_offset_node; /**< fake offset */ |
| 535 | }; | 550 | }; |
| 536 | 551 | ||
| 537 | typedef struct drm_map drm_local_map_t; | ||
| 538 | |||
| 539 | /** | 552 | /** |
| 540 | * Context handle list | 553 | * Context handle list |
| 541 | */ | 554 | */ |
| @@ -560,7 +573,7 @@ struct drm_ati_pcigart_info { | |||
| 560 | dma_addr_t bus_addr; | 573 | dma_addr_t bus_addr; |
| 561 | dma_addr_t table_mask; | 574 | dma_addr_t table_mask; |
| 562 | struct drm_dma_handle *table_handle; | 575 | struct drm_dma_handle *table_handle; |
| 563 | drm_local_map_t mapping; | 576 | struct drm_local_map mapping; |
| 564 | int table_size; | 577 | int table_size; |
| 565 | }; | 578 | }; |
| 566 | 579 | ||
| @@ -675,7 +688,6 @@ struct drm_driver { | |||
| 675 | int (*kernel_context_switch) (struct drm_device *dev, int old, | 688 | int (*kernel_context_switch) (struct drm_device *dev, int old, |
| 676 | int new); | 689 | int new); |
| 677 | void (*kernel_context_switch_unlock) (struct drm_device *dev); | 690 | void (*kernel_context_switch_unlock) (struct drm_device *dev); |
| 678 | int (*dri_library_name) (struct drm_device *dev, char *buf); | ||
| 679 | 691 | ||
| 680 | /** | 692 | /** |
| 681 | * get_vblank_counter - get raw hardware vblank counter | 693 | * get_vblank_counter - get raw hardware vblank counter |
| @@ -747,8 +759,8 @@ struct drm_driver { | |||
| 747 | struct drm_file *file_priv); | 759 | struct drm_file *file_priv); |
| 748 | void (*reclaim_buffers_idlelocked) (struct drm_device *dev, | 760 | void (*reclaim_buffers_idlelocked) (struct drm_device *dev, |
| 749 | struct drm_file *file_priv); | 761 | struct drm_file *file_priv); |
| 750 | unsigned long (*get_map_ofs) (struct drm_map * map); | 762 | resource_size_t (*get_map_ofs) (struct drm_local_map * map); |
| 751 | unsigned long (*get_reg_ofs) (struct drm_device *dev); | 763 | resource_size_t (*get_reg_ofs) (struct drm_device *dev); |
| 752 | void (*set_version) (struct drm_device *dev, | 764 | void (*set_version) (struct drm_device *dev, |
| 753 | struct drm_set_version *sv); | 765 | struct drm_set_version *sv); |
| 754 | 766 | ||
| @@ -758,6 +770,8 @@ struct drm_driver { | |||
| 758 | 770 | ||
| 759 | int (*proc_init)(struct drm_minor *minor); | 771 | int (*proc_init)(struct drm_minor *minor); |
| 760 | void (*proc_cleanup)(struct drm_minor *minor); | 772 | void (*proc_cleanup)(struct drm_minor *minor); |
| 773 | int (*debugfs_init)(struct drm_minor *minor); | ||
| 774 | void (*debugfs_cleanup)(struct drm_minor *minor); | ||
| 761 | 775 | ||
| 762 | /** | 776 | /** |
| 763 | * Driver-specific constructor for drm_gem_objects, to set up | 777 | * Driver-specific constructor for drm_gem_objects, to set up |
| @@ -793,6 +807,48 @@ struct drm_driver { | |||
| 793 | #define DRM_MINOR_CONTROL 2 | 807 | #define DRM_MINOR_CONTROL 2 |
| 794 | #define DRM_MINOR_RENDER 3 | 808 | #define DRM_MINOR_RENDER 3 |
| 795 | 809 | ||
| 810 | |||
| 811 | /** | ||
| 812 | * debugfs node list. This structure represents a debugfs file to | ||
| 813 | * be created by the drm core | ||
| 814 | */ | ||
| 815 | struct drm_debugfs_list { | ||
| 816 | const char *name; /** file name */ | ||
| 817 | int (*show)(struct seq_file*, void*); /** show callback */ | ||
| 818 | u32 driver_features; /**< Required driver features for this entry */ | ||
| 819 | }; | ||
| 820 | |||
| 821 | /** | ||
| 822 | * debugfs node structure. This structure represents a debugfs file. | ||
| 823 | */ | ||
| 824 | struct drm_debugfs_node { | ||
| 825 | struct list_head list; | ||
| 826 | struct drm_minor *minor; | ||
| 827 | struct drm_debugfs_list *debugfs_ent; | ||
| 828 | struct dentry *dent; | ||
| 829 | }; | ||
| 830 | |||
| 831 | /** | ||
| 832 | * Info file list entry. This structure represents a debugfs or proc file to | ||
| 833 | * be created by the drm core | ||
| 834 | */ | ||
| 835 | struct drm_info_list { | ||
| 836 | const char *name; /** file name */ | ||
| 837 | int (*show)(struct seq_file*, void*); /** show callback */ | ||
| 838 | u32 driver_features; /**< Required driver features for this entry */ | ||
| 839 | void *data; | ||
| 840 | }; | ||
| 841 | |||
| 842 | /** | ||
| 843 | * debugfs node structure. This structure represents a debugfs file. | ||
| 844 | */ | ||
| 845 | struct drm_info_node { | ||
| 846 | struct list_head list; | ||
| 847 | struct drm_minor *minor; | ||
| 848 | struct drm_info_list *info_ent; | ||
| 849 | struct dentry *dent; | ||
| 850 | }; | ||
| 851 | |||
| 796 | /** | 852 | /** |
| 797 | * DRM minor structure. This structure represents a drm minor number. | 853 | * DRM minor structure. This structure represents a drm minor number. |
| 798 | */ | 854 | */ |
| @@ -802,7 +858,12 @@ struct drm_minor { | |||
| 802 | dev_t device; /**< Device number for mknod */ | 858 | dev_t device; /**< Device number for mknod */ |
| 803 | struct device kdev; /**< Linux device */ | 859 | struct device kdev; /**< Linux device */ |
| 804 | struct drm_device *dev; | 860 | struct drm_device *dev; |
| 805 | struct proc_dir_entry *dev_root; /**< proc directory entry */ | 861 | |
| 862 | struct proc_dir_entry *proc_root; /**< proc directory entry */ | ||
| 863 | struct drm_info_node proc_nodes; | ||
| 864 | struct dentry *debugfs_root; | ||
| 865 | struct drm_info_node debugfs_nodes; | ||
| 866 | |||
| 806 | struct drm_master *master; /* currently active master for this node */ | 867 | struct drm_master *master; /* currently active master for this node */ |
| 807 | struct list_head master_list; | 868 | struct list_head master_list; |
| 808 | struct drm_mode_group mode_group; | 869 | struct drm_mode_group mode_group; |
| @@ -932,7 +993,7 @@ struct drm_device { | |||
| 932 | sigset_t sigmask; | 993 | sigset_t sigmask; |
| 933 | 994 | ||
| 934 | struct drm_driver *driver; | 995 | struct drm_driver *driver; |
| 935 | drm_local_map_t *agp_buffer_map; | 996 | struct drm_local_map *agp_buffer_map; |
| 936 | unsigned int agp_buffer_token; | 997 | unsigned int agp_buffer_token; |
| 937 | struct drm_minor *control; /**< Control node for card */ | 998 | struct drm_minor *control; /**< Control node for card */ |
| 938 | struct drm_minor *primary; /**< render type primary screen head */ | 999 | struct drm_minor *primary; /**< render type primary screen head */ |
| @@ -1049,8 +1110,8 @@ extern int drm_release(struct inode *inode, struct file *filp); | |||
| 1049 | extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); | 1110 | extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); |
| 1050 | extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma); | 1111 | extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma); |
| 1051 | extern void drm_vm_open_locked(struct vm_area_struct *vma); | 1112 | extern void drm_vm_open_locked(struct vm_area_struct *vma); |
| 1052 | extern unsigned long drm_core_get_map_ofs(struct drm_map * map); | 1113 | extern resource_size_t drm_core_get_map_ofs(struct drm_local_map * map); |
| 1053 | extern unsigned long drm_core_get_reg_ofs(struct drm_device *dev); | 1114 | extern resource_size_t drm_core_get_reg_ofs(struct drm_device *dev); |
| 1054 | extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); | 1115 | extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); |
| 1055 | 1116 | ||
| 1056 | /* Memory management support (drm_memory.h) */ | 1117 | /* Memory management support (drm_memory.h) */ |
| @@ -1153,13 +1214,13 @@ extern int drm_i_have_hw_lock(struct drm_device *dev, struct drm_file *file_priv | |||
| 1153 | /* Buffer management support (drm_bufs.h) */ | 1214 | /* Buffer management support (drm_bufs.h) */ |
| 1154 | extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request); | 1215 | extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request); |
| 1155 | extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request); | 1216 | extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request); |
| 1156 | extern int drm_addmap(struct drm_device *dev, unsigned int offset, | 1217 | extern int drm_addmap(struct drm_device *dev, resource_size_t offset, |
| 1157 | unsigned int size, enum drm_map_type type, | 1218 | unsigned int size, enum drm_map_type type, |
| 1158 | enum drm_map_flags flags, drm_local_map_t ** map_ptr); | 1219 | enum drm_map_flags flags, struct drm_local_map **map_ptr); |
| 1159 | extern int drm_addmap_ioctl(struct drm_device *dev, void *data, | 1220 | extern int drm_addmap_ioctl(struct drm_device *dev, void *data, |
| 1160 | struct drm_file *file_priv); | 1221 | struct drm_file *file_priv); |
| 1161 | extern int drm_rmmap(struct drm_device *dev, drm_local_map_t *map); | 1222 | extern int drm_rmmap(struct drm_device *dev, struct drm_local_map *map); |
| 1162 | extern int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t *map); | 1223 | extern int drm_rmmap_locked(struct drm_device *dev, struct drm_local_map *map); |
| 1163 | extern int drm_rmmap_ioctl(struct drm_device *dev, void *data, | 1224 | extern int drm_rmmap_ioctl(struct drm_device *dev, void *data, |
| 1164 | struct drm_file *file_priv); | 1225 | struct drm_file *file_priv); |
| 1165 | extern int drm_addbufs(struct drm_device *dev, void *data, | 1226 | extern int drm_addbufs(struct drm_device *dev, void *data, |
| @@ -1173,10 +1234,10 @@ extern int drm_freebufs(struct drm_device *dev, void *data, | |||
| 1173 | extern int drm_mapbufs(struct drm_device *dev, void *data, | 1234 | extern int drm_mapbufs(struct drm_device *dev, void *data, |
| 1174 | struct drm_file *file_priv); | 1235 | struct drm_file *file_priv); |
| 1175 | extern int drm_order(unsigned long size); | 1236 | extern int drm_order(unsigned long size); |
| 1176 | extern unsigned long drm_get_resource_start(struct drm_device *dev, | 1237 | extern resource_size_t drm_get_resource_start(struct drm_device *dev, |
| 1238 | unsigned int resource); | ||
| 1239 | extern resource_size_t drm_get_resource_len(struct drm_device *dev, | ||
| 1177 | unsigned int resource); | 1240 | unsigned int resource); |
| 1178 | extern unsigned long drm_get_resource_len(struct drm_device *dev, | ||
| 1179 | unsigned int resource); | ||
| 1180 | 1241 | ||
| 1181 | /* DMA support (drm_dma.h) */ | 1242 | /* DMA support (drm_dma.h) */ |
| 1182 | extern int drm_dma_setup(struct drm_device *dev); | 1243 | extern int drm_dma_setup(struct drm_device *dev); |
| @@ -1252,22 +1313,48 @@ extern struct drm_master *drm_master_get(struct drm_master *master); | |||
| 1252 | extern void drm_master_put(struct drm_master **master); | 1313 | extern void drm_master_put(struct drm_master **master); |
| 1253 | extern int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent, | 1314 | extern int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent, |
| 1254 | struct drm_driver *driver); | 1315 | struct drm_driver *driver); |
| 1255 | extern int drm_put_dev(struct drm_device *dev); | 1316 | extern void drm_put_dev(struct drm_device *dev); |
| 1256 | extern int drm_put_minor(struct drm_minor **minor); | 1317 | extern int drm_put_minor(struct drm_minor **minor); |
| 1257 | extern unsigned int drm_debug; | 1318 | extern unsigned int drm_debug; |
| 1258 | 1319 | ||
| 1259 | extern struct class *drm_class; | 1320 | extern struct class *drm_class; |
| 1260 | extern struct proc_dir_entry *drm_proc_root; | 1321 | extern struct proc_dir_entry *drm_proc_root; |
| 1322 | extern struct dentry *drm_debugfs_root; | ||
| 1261 | 1323 | ||
| 1262 | extern struct idr drm_minors_idr; | 1324 | extern struct idr drm_minors_idr; |
| 1263 | 1325 | ||
| 1264 | extern drm_local_map_t *drm_getsarea(struct drm_device *dev); | 1326 | extern struct drm_local_map *drm_getsarea(struct drm_device *dev); |
| 1265 | 1327 | ||
| 1266 | /* Proc support (drm_proc.h) */ | 1328 | /* Proc support (drm_proc.h) */ |
| 1267 | extern int drm_proc_init(struct drm_minor *minor, int minor_id, | 1329 | extern int drm_proc_init(struct drm_minor *minor, int minor_id, |
| 1268 | struct proc_dir_entry *root); | 1330 | struct proc_dir_entry *root); |
| 1269 | extern int drm_proc_cleanup(struct drm_minor *minor, struct proc_dir_entry *root); | 1331 | extern int drm_proc_cleanup(struct drm_minor *minor, struct proc_dir_entry *root); |
| 1270 | 1332 | ||
| 1333 | /* Debugfs support */ | ||
| 1334 | #if defined(CONFIG_DEBUG_FS) | ||
| 1335 | extern int drm_debugfs_init(struct drm_minor *minor, int minor_id, | ||
| 1336 | struct dentry *root); | ||
| 1337 | extern int drm_debugfs_create_files(struct drm_info_list *files, int count, | ||
| 1338 | struct dentry *root, struct drm_minor *minor); | ||
| 1339 | extern int drm_debugfs_remove_files(struct drm_info_list *files, int count, | ||
| 1340 | struct drm_minor *minor); | ||
| 1341 | extern int drm_debugfs_cleanup(struct drm_minor *minor); | ||
| 1342 | #endif | ||
| 1343 | |||
| 1344 | /* Info file support */ | ||
| 1345 | extern int drm_name_info(struct seq_file *m, void *data); | ||
| 1346 | extern int drm_vm_info(struct seq_file *m, void *data); | ||
| 1347 | extern int drm_queues_info(struct seq_file *m, void *data); | ||
| 1348 | extern int drm_bufs_info(struct seq_file *m, void *data); | ||
| 1349 | extern int drm_vblank_info(struct seq_file *m, void *data); | ||
| 1350 | extern int drm_clients_info(struct seq_file *m, void* data); | ||
| 1351 | extern int drm_gem_name_info(struct seq_file *m, void *data); | ||
| 1352 | extern int drm_gem_object_info(struct seq_file *m, void* data); | ||
| 1353 | |||
| 1354 | #if DRM_DEBUG_CODE | ||
| 1355 | extern int drm_vma_info(struct seq_file *m, void *data); | ||
| 1356 | #endif | ||
| 1357 | |||
| 1271 | /* Scatter Gather Support (drm_scatter.h) */ | 1358 | /* Scatter Gather Support (drm_scatter.h) */ |
| 1272 | extern void drm_sg_cleanup(struct drm_sg_mem * entry); | 1359 | extern void drm_sg_cleanup(struct drm_sg_mem * entry); |
| 1273 | extern int drm_sg_alloc_ioctl(struct drm_device *dev, void *data, | 1360 | extern int drm_sg_alloc_ioctl(struct drm_device *dev, void *data, |
| @@ -1378,12 +1465,12 @@ int drm_gem_open_ioctl(struct drm_device *dev, void *data, | |||
| 1378 | void drm_gem_open(struct drm_device *dev, struct drm_file *file_private); | 1465 | void drm_gem_open(struct drm_device *dev, struct drm_file *file_private); |
| 1379 | void drm_gem_release(struct drm_device *dev, struct drm_file *file_private); | 1466 | void drm_gem_release(struct drm_device *dev, struct drm_file *file_private); |
| 1380 | 1467 | ||
| 1381 | extern void drm_core_ioremap(struct drm_map *map, struct drm_device *dev); | 1468 | extern void drm_core_ioremap(struct drm_local_map *map, struct drm_device *dev); |
| 1382 | extern void drm_core_ioremap_wc(struct drm_map *map, struct drm_device *dev); | 1469 | extern void drm_core_ioremap_wc(struct drm_local_map *map, struct drm_device *dev); |
| 1383 | extern void drm_core_ioremapfree(struct drm_map *map, struct drm_device *dev); | 1470 | extern void drm_core_ioremapfree(struct drm_local_map *map, struct drm_device *dev); |
| 1384 | 1471 | ||
| 1385 | static __inline__ struct drm_map *drm_core_findmap(struct drm_device *dev, | 1472 | static __inline__ struct drm_local_map *drm_core_findmap(struct drm_device *dev, |
| 1386 | unsigned int token) | 1473 | unsigned int token) |
| 1387 | { | 1474 | { |
| 1388 | struct drm_map_list *_entry; | 1475 | struct drm_map_list *_entry; |
| 1389 | list_for_each_entry(_entry, &dev->maplist, head) | 1476 | list_for_each_entry(_entry, &dev->maplist, head) |
| @@ -1410,7 +1497,7 @@ static __inline__ int drm_device_is_pcie(struct drm_device *dev) | |||
| 1410 | return pci_find_capability(dev->pdev, PCI_CAP_ID_EXP); | 1497 | return pci_find_capability(dev->pdev, PCI_CAP_ID_EXP); |
| 1411 | } | 1498 | } |
| 1412 | 1499 | ||
| 1413 | static __inline__ void drm_core_dropmap(struct drm_map *map) | 1500 | static __inline__ void drm_core_dropmap(struct drm_local_map *map) |
| 1414 | { | 1501 | { |
| 1415 | } | 1502 | } |
| 1416 | 1503 | ||
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 5ded1acfb543..3c1924c010e8 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
| @@ -550,7 +550,7 @@ struct drm_mode_config { | |||
| 550 | int min_width, min_height; | 550 | int min_width, min_height; |
| 551 | int max_width, max_height; | 551 | int max_width, max_height; |
| 552 | struct drm_mode_config_funcs *funcs; | 552 | struct drm_mode_config_funcs *funcs; |
| 553 | unsigned long fb_base; | 553 | resource_size_t fb_base; |
| 554 | 554 | ||
| 555 | /* pointers to standard properties */ | 555 | /* pointers to standard properties */ |
| 556 | struct list_head property_blob_list; | 556 | struct list_head property_blob_list; |
| @@ -613,7 +613,8 @@ extern void drm_fb_release(struct drm_file *file_priv); | |||
| 613 | extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group); | 613 | extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group); |
| 614 | extern struct edid *drm_get_edid(struct drm_connector *connector, | 614 | extern struct edid *drm_get_edid(struct drm_connector *connector, |
| 615 | struct i2c_adapter *adapter); | 615 | struct i2c_adapter *adapter); |
| 616 | extern unsigned char *drm_do_probe_ddc_edid(struct i2c_adapter *adapter); | 616 | extern int drm_do_probe_ddc_edid(struct i2c_adapter *adapter, |
| 617 | unsigned char *buf, int len); | ||
| 617 | extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid); | 618 | extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid); |
| 618 | extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode); | 619 | extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode); |
| 619 | extern void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode); | 620 | extern void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode); |
| @@ -731,4 +732,5 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev, | |||
| 731 | void *data, struct drm_file *file_priv); | 732 | void *data, struct drm_file *file_priv); |
| 732 | extern int drm_mode_gamma_set_ioctl(struct drm_device *dev, | 733 | extern int drm_mode_gamma_set_ioctl(struct drm_device *dev, |
| 733 | void *data, struct drm_file *file_priv); | 734 | void *data, struct drm_file *file_priv); |
| 735 | extern bool drm_detect_hdmi_monitor(struct edid *edid); | ||
| 734 | #endif /* __DRM_CRTC_H__ */ | 736 | #endif /* __DRM_CRTC_H__ */ |
diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h index 601d2bd839f6..ae304cc73c90 100644 --- a/include/drm/drm_mode.h +++ b/include/drm/drm_mode.h | |||
| @@ -27,11 +27,8 @@ | |||
| 27 | #ifndef _DRM_MODE_H | 27 | #ifndef _DRM_MODE_H |
| 28 | #define _DRM_MODE_H | 28 | #define _DRM_MODE_H |
| 29 | 29 | ||
| 30 | #if !defined(__KERNEL__) && !defined(_KERNEL) | ||
| 31 | #include <stdint.h> | ||
| 32 | #else | ||
| 33 | #include <linux/kernel.h> | 30 | #include <linux/kernel.h> |
| 34 | #endif | 31 | #include <linux/types.h> |
| 35 | 32 | ||
| 36 | #define DRM_DISPLAY_INFO_LEN 32 | 33 | #define DRM_DISPLAY_INFO_LEN 32 |
| 37 | #define DRM_CONNECTOR_NAME_LEN 32 | 34 | #define DRM_CONNECTOR_NAME_LEN 32 |
| @@ -81,41 +78,41 @@ | |||
| 81 | #define DRM_MODE_DITHERING_ON 1 | 78 | #define DRM_MODE_DITHERING_ON 1 |
| 82 | 79 | ||
| 83 | struct drm_mode_modeinfo { | 80 | struct drm_mode_modeinfo { |
| 84 | uint32_t clock; | 81 | __u32 clock; |
| 85 | uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew; | 82 | __u16 hdisplay, hsync_start, hsync_end, htotal, hskew; |
| 86 | uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan; | 83 | __u16 vdisplay, vsync_start, vsync_end, vtotal, vscan; |
| 87 | 84 | ||
| 88 | uint32_t vrefresh; /* vertical refresh * 1000 */ | 85 | __u32 vrefresh; /* vertical refresh * 1000 */ |
| 89 | 86 | ||
| 90 | uint32_t flags; | 87 | __u32 flags; |
| 91 | uint32_t type; | 88 | __u32 type; |
| 92 | char name[DRM_DISPLAY_MODE_LEN]; | 89 | char name[DRM_DISPLAY_MODE_LEN]; |
| 93 | }; | 90 | }; |
| 94 | 91 | ||
| 95 | struct drm_mode_card_res { | 92 | struct drm_mode_card_res { |
| 96 | uint64_t fb_id_ptr; | 93 | __u64 fb_id_ptr; |
| 97 | uint64_t crtc_id_ptr; | 94 | __u64 crtc_id_ptr; |
| 98 | uint64_t connector_id_ptr; | 95 | __u64 connector_id_ptr; |
| 99 | uint64_t encoder_id_ptr; | 96 | __u64 encoder_id_ptr; |
| 100 | uint32_t count_fbs; | 97 | __u32 count_fbs; |
| 101 | uint32_t count_crtcs; | 98 | __u32 count_crtcs; |
| 102 | uint32_t count_connectors; | 99 | __u32 count_connectors; |
| 103 | uint32_t count_encoders; | 100 | __u32 count_encoders; |
| 104 | uint32_t min_width, max_width; | 101 | __u32 min_width, max_width; |
| 105 | uint32_t min_height, max_height; | 102 | __u32 min_height, max_height; |
| 106 | }; | 103 | }; |
| 107 | 104 | ||
| 108 | struct drm_mode_crtc { | 105 | struct drm_mode_crtc { |
| 109 | uint64_t set_connectors_ptr; | 106 | __u64 set_connectors_ptr; |
| 110 | uint32_t count_connectors; | 107 | __u32 count_connectors; |
| 111 | 108 | ||
| 112 | uint32_t crtc_id; /**< Id */ | 109 | __u32 crtc_id; /**< Id */ |
| 113 | uint32_t fb_id; /**< Id of framebuffer */ | 110 | __u32 fb_id; /**< Id of framebuffer */ |
| 114 | 111 | ||
| 115 | uint32_t x, y; /**< Position on the frameuffer */ | 112 | __u32 x, y; /**< Position on the frameuffer */ |
| 116 | 113 | ||
| 117 | uint32_t gamma_size; | 114 | __u32 gamma_size; |
| 118 | uint32_t mode_valid; | 115 | __u32 mode_valid; |
| 119 | struct drm_mode_modeinfo mode; | 116 | struct drm_mode_modeinfo mode; |
| 120 | }; | 117 | }; |
| 121 | 118 | ||
| @@ -126,13 +123,13 @@ struct drm_mode_crtc { | |||
| 126 | #define DRM_MODE_ENCODER_TVDAC 4 | 123 | #define DRM_MODE_ENCODER_TVDAC 4 |
| 127 | 124 | ||
| 128 | struct drm_mode_get_encoder { | 125 | struct drm_mode_get_encoder { |
| 129 | uint32_t encoder_id; | 126 | __u32 encoder_id; |
| 130 | uint32_t encoder_type; | 127 | __u32 encoder_type; |
| 131 | 128 | ||
| 132 | uint32_t crtc_id; /**< Id of crtc */ | 129 | __u32 crtc_id; /**< Id of crtc */ |
| 133 | 130 | ||
| 134 | uint32_t possible_crtcs; | 131 | __u32 possible_crtcs; |
| 135 | uint32_t possible_clones; | 132 | __u32 possible_clones; |
| 136 | }; | 133 | }; |
| 137 | 134 | ||
| 138 | /* This is for connectors with multiple signal types. */ | 135 | /* This is for connectors with multiple signal types. */ |
| @@ -161,23 +158,23 @@ struct drm_mode_get_encoder { | |||
| 161 | 158 | ||
| 162 | struct drm_mode_get_connector { | 159 | struct drm_mode_get_connector { |
| 163 | 160 | ||
| 164 | uint64_t encoders_ptr; | 161 | __u64 encoders_ptr; |
| 165 | uint64_t modes_ptr; | 162 | __u64 modes_ptr; |
| 166 | uint64_t props_ptr; | 163 | __u64 props_ptr; |
| 167 | uint64_t prop_values_ptr; | 164 | __u64 prop_values_ptr; |
| 168 | 165 | ||
| 169 | uint32_t count_modes; | 166 | __u32 count_modes; |
| 170 | uint32_t count_props; | 167 | __u32 count_props; |
| 171 | uint32_t count_encoders; | 168 | __u32 count_encoders; |
| 172 | 169 | ||
| 173 | uint32_t encoder_id; /**< Current Encoder */ | 170 | __u32 encoder_id; /**< Current Encoder */ |
| 174 | uint32_t connector_id; /**< Id */ | 171 | __u32 connector_id; /**< Id */ |
| 175 | uint32_t connector_type; | 172 | __u32 connector_type; |
| 176 | uint32_t connector_type_id; | 173 | __u32 connector_type_id; |
| 177 | 174 | ||
| 178 | uint32_t connection; | 175 | __u32 connection; |
| 179 | uint32_t mm_width, mm_height; /**< HxW in millimeters */ | 176 | __u32 mm_width, mm_height; /**< HxW in millimeters */ |
| 180 | uint32_t subpixel; | 177 | __u32 subpixel; |
| 181 | }; | 178 | }; |
| 182 | 179 | ||
| 183 | #define DRM_MODE_PROP_PENDING (1<<0) | 180 | #define DRM_MODE_PROP_PENDING (1<<0) |
| @@ -187,46 +184,46 @@ struct drm_mode_get_connector { | |||
| 187 | #define DRM_MODE_PROP_BLOB (1<<4) | 184 | #define DRM_MODE_PROP_BLOB (1<<4) |
| 188 | 185 | ||
| 189 | struct drm_mode_property_enum { | 186 | struct drm_mode_property_enum { |
| 190 | uint64_t value; | 187 | __u64 value; |
| 191 | char name[DRM_PROP_NAME_LEN]; | 188 | char name[DRM_PROP_NAME_LEN]; |
| 192 | }; | 189 | }; |
| 193 | 190 | ||
| 194 | struct drm_mode_get_property { | 191 | struct drm_mode_get_property { |
| 195 | uint64_t values_ptr; /* values and blob lengths */ | 192 | __u64 values_ptr; /* values and blob lengths */ |
| 196 | uint64_t enum_blob_ptr; /* enum and blob id ptrs */ | 193 | __u64 enum_blob_ptr; /* enum and blob id ptrs */ |
| 197 | 194 | ||
| 198 | uint32_t prop_id; | 195 | __u32 prop_id; |
| 199 | uint32_t flags; | 196 | __u32 flags; |
| 200 | char name[DRM_PROP_NAME_LEN]; | 197 | char name[DRM_PROP_NAME_LEN]; |
| 201 | 198 | ||
| 202 | uint32_t count_values; | 199 | __u32 count_values; |
| 203 | uint32_t count_enum_blobs; | 200 | __u32 count_enum_blobs; |
| 204 | }; | 201 | }; |
| 205 | 202 | ||
| 206 | struct drm_mode_connector_set_property { | 203 | struct drm_mode_connector_set_property { |
| 207 | uint64_t value; | 204 | __u64 value; |
| 208 | uint32_t prop_id; | 205 | __u32 prop_id; |
| 209 | uint32_t connector_id; | 206 | __u32 connector_id; |
| 210 | }; | 207 | }; |
| 211 | 208 | ||
| 212 | struct drm_mode_get_blob { | 209 | struct drm_mode_get_blob { |
| 213 | uint32_t blob_id; | 210 | __u32 blob_id; |
| 214 | uint32_t length; | 211 | __u32 length; |
| 215 | uint64_t data; | 212 | __u64 data; |
| 216 | }; | 213 | }; |
| 217 | 214 | ||
| 218 | struct drm_mode_fb_cmd { | 215 | struct drm_mode_fb_cmd { |
| 219 | uint32_t fb_id; | 216 | __u32 fb_id; |
| 220 | uint32_t width, height; | 217 | __u32 width, height; |
| 221 | uint32_t pitch; | 218 | __u32 pitch; |
| 222 | uint32_t bpp; | 219 | __u32 bpp; |
| 223 | uint32_t depth; | 220 | __u32 depth; |
| 224 | /* driver specific handle */ | 221 | /* driver specific handle */ |
| 225 | uint32_t handle; | 222 | __u32 handle; |
| 226 | }; | 223 | }; |
| 227 | 224 | ||
| 228 | struct drm_mode_mode_cmd { | 225 | struct drm_mode_mode_cmd { |
| 229 | uint32_t connector_id; | 226 | __u32 connector_id; |
| 230 | struct drm_mode_modeinfo mode; | 227 | struct drm_mode_modeinfo mode; |
| 231 | }; | 228 | }; |
| 232 | 229 | ||
| @@ -248,24 +245,24 @@ struct drm_mode_mode_cmd { | |||
| 248 | * y | 245 | * y |
| 249 | */ | 246 | */ |
| 250 | struct drm_mode_cursor { | 247 | struct drm_mode_cursor { |
| 251 | uint32_t flags; | 248 | __u32 flags; |
| 252 | uint32_t crtc_id; | 249 | __u32 crtc_id; |
| 253 | int32_t x; | 250 | __s32 x; |
| 254 | int32_t y; | 251 | __s32 y; |
| 255 | uint32_t width; | 252 | __u32 width; |
| 256 | uint32_t height; | 253 | __u32 height; |
| 257 | /* driver specific handle */ | 254 | /* driver specific handle */ |
| 258 | uint32_t handle; | 255 | __u32 handle; |
| 259 | }; | 256 | }; |
| 260 | 257 | ||
| 261 | struct drm_mode_crtc_lut { | 258 | struct drm_mode_crtc_lut { |
| 262 | uint32_t crtc_id; | 259 | __u32 crtc_id; |
| 263 | uint32_t gamma_size; | 260 | __u32 gamma_size; |
| 264 | 261 | ||
| 265 | /* pointers to arrays */ | 262 | /* pointers to arrays */ |
| 266 | uint64_t red; | 263 | __u64 red; |
| 267 | uint64_t green; | 264 | __u64 green; |
| 268 | uint64_t blue; | 265 | __u64 blue; |
| 269 | }; | 266 | }; |
| 270 | 267 | ||
| 271 | #endif | 268 | #endif |
diff --git a/include/drm/drm_os_linux.h b/include/drm/drm_os_linux.h index 8dbd2572b7c3..013551d03c03 100644 --- a/include/drm/drm_os_linux.h +++ b/include/drm/drm_os_linux.h | |||
| @@ -6,6 +6,19 @@ | |||
| 6 | #include <linux/interrupt.h> /* For task queue support */ | 6 | #include <linux/interrupt.h> /* For task queue support */ |
| 7 | #include <linux/delay.h> | 7 | #include <linux/delay.h> |
| 8 | 8 | ||
| 9 | #ifndef readq | ||
| 10 | static u64 readq(void __iomem *reg) | ||
| 11 | { | ||
| 12 | return ((u64) readl(reg)) | (((u64) readl(reg + 4UL)) << 32); | ||
| 13 | } | ||
| 14 | |||
| 15 | static void writeq(u64 val, void __iomem *reg) | ||
| 16 | { | ||
| 17 | writel(val & 0xffffffff, reg); | ||
| 18 | writel(val >> 32, reg + 0x4UL); | ||
| 19 | } | ||
| 20 | #endif | ||
| 21 | |||
| 9 | /** Current process ID */ | 22 | /** Current process ID */ |
| 10 | #define DRM_CURRENTPID task_pid_nr(current) | 23 | #define DRM_CURRENTPID task_pid_nr(current) |
| 11 | #define DRM_SUSER(p) capable(CAP_SYS_ADMIN) | 24 | #define DRM_SUSER(p) capable(CAP_SYS_ADMIN) |
| @@ -23,6 +36,12 @@ | |||
| 23 | /** Write a dword into a MMIO region */ | 36 | /** Write a dword into a MMIO region */ |
| 24 | #define DRM_WRITE32(map, offset, val) writel(val, ((void __iomem *)(map)->handle) + (offset)) | 37 | #define DRM_WRITE32(map, offset, val) writel(val, ((void __iomem *)(map)->handle) + (offset)) |
| 25 | /** Read memory barrier */ | 38 | /** Read memory barrier */ |
| 39 | |||
| 40 | /** Read a qword from a MMIO region - be careful using these unless you really understand them */ | ||
| 41 | #define DRM_READ64(map, offset) readq(((void __iomem *)(map)->handle) + (offset)) | ||
| 42 | /** Write a qword into a MMIO region */ | ||
| 43 | #define DRM_WRITE64(map, offset, val) writeq(val, ((void __iomem *)(map)->handle) + (offset)) | ||
| 44 | |||
| 26 | #define DRM_READMEMORYBARRIER() rmb() | 45 | #define DRM_READMEMORYBARRIER() rmb() |
| 27 | /** Write memory barrier */ | 46 | /** Write memory barrier */ |
| 28 | #define DRM_WRITEMEMORYBARRIER() wmb() | 47 | #define DRM_WRITEMEMORYBARRIER() wmb() |
diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h index 5165f240aa68..2df74eb09563 100644 --- a/include/drm/drm_pciids.h +++ b/include/drm/drm_pciids.h | |||
| @@ -239,10 +239,123 @@ | |||
| 239 | {0x1002, 0x7835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 239 | {0x1002, 0x7835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
| 240 | {0x1002, 0x791e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | 240 | {0x1002, 0x791e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ |
| 241 | {0x1002, 0x791f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | 241 | {0x1002, 0x791f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ |
| 242 | {0x1002, 0x793f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS600|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \ | ||
| 243 | {0x1002, 0x7941, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS600|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \ | ||
| 244 | {0x1002, 0x7942, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS600|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \ | ||
| 242 | {0x1002, 0x796c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | 245 | {0x1002, 0x796c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ |
| 243 | {0x1002, 0x796d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | 246 | {0x1002, 0x796d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ |
| 244 | {0x1002, 0x796e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | 247 | {0x1002, 0x796e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ |
| 245 | {0x1002, 0x796f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | 248 | {0x1002, 0x796f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ |
| 249 | {0x1002, 0x9400, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \ | ||
| 250 | {0x1002, 0x9401, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \ | ||
| 251 | {0x1002, 0x9402, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \ | ||
| 252 | {0x1002, 0x9403, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \ | ||
| 253 | {0x1002, 0x9405, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \ | ||
| 254 | {0x1002, 0x940A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \ | ||
| 255 | {0x1002, 0x940B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \ | ||
| 256 | {0x1002, 0x940F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \ | ||
| 257 | {0x1002, 0x9440, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | ||
| 258 | {0x1002, 0x9441, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | ||
| 259 | {0x1002, 0x9442, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | ||
| 260 | {0x1002, 0x9444, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | ||
| 261 | {0x1002, 0x9446, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | ||
| 262 | {0x1002, 0x944A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 263 | {0x1002, 0x944B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 264 | {0x1002, 0x944C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | ||
| 265 | {0x1002, 0x944E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | ||
| 266 | {0x1002, 0x9450, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | ||
| 267 | {0x1002, 0x9452, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | ||
| 268 | {0x1002, 0x9456, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | ||
| 269 | {0x1002, 0x945A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 270 | {0x1002, 0x945B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 271 | {0x1002, 0x946A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 272 | {0x1002, 0x946B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 273 | {0x1002, 0x947A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 274 | {0x1002, 0x947B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 275 | {0x1002, 0x9480, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 276 | {0x1002, 0x9487, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ | ||
| 277 | {0x1002, 0x9488, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 278 | {0x1002, 0x9489, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 279 | {0x1002, 0x948F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ | ||
| 280 | {0x1002, 0x9490, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ | ||
| 281 | {0x1002, 0x9491, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 282 | {0x1002, 0x9498, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ | ||
| 283 | {0x1002, 0x949C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ | ||
| 284 | {0x1002, 0x949E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ | ||
| 285 | {0x1002, 0x949F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ | ||
| 286 | {0x1002, 0x94C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \ | ||
| 287 | {0x1002, 0x94C1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \ | ||
| 288 | {0x1002, 0x94C3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \ | ||
| 289 | {0x1002, 0x94C4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \ | ||
| 290 | {0x1002, 0x94C5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \ | ||
| 291 | {0x1002, 0x94C6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \ | ||
| 292 | {0x1002, 0x94C7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \ | ||
| 293 | {0x1002, 0x94C8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 294 | {0x1002, 0x94C9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 295 | {0x1002, 0x94CB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 296 | {0x1002, 0x94CC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \ | ||
| 297 | {0x1002, 0x94CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \ | ||
| 298 | {0x1002, 0x9500, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \ | ||
| 299 | {0x1002, 0x9501, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \ | ||
| 300 | {0x1002, 0x9504, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 301 | {0x1002, 0x9505, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \ | ||
| 302 | {0x1002, 0x9506, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 303 | {0x1002, 0x9507, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \ | ||
| 304 | {0x1002, 0x9508, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 305 | {0x1002, 0x9509, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 306 | {0x1002, 0x950F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \ | ||
| 307 | {0x1002, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \ | ||
| 308 | {0x1002, 0x9515, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \ | ||
| 309 | {0x1002, 0x9517, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \ | ||
| 310 | {0x1002, 0x9519, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \ | ||
| 311 | {0x1002, 0x9540, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \ | ||
| 312 | {0x1002, 0x9541, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \ | ||
| 313 | {0x1002, 0x9542, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \ | ||
| 314 | {0x1002, 0x954E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \ | ||
| 315 | {0x1002, 0x954F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \ | ||
| 316 | {0x1002, 0x9552, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 317 | {0x1002, 0x9553, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 318 | {0x1002, 0x9555, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 319 | {0x1002, 0x9580, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \ | ||
| 320 | {0x1002, 0x9581, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 321 | {0x1002, 0x9583, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 322 | {0x1002, 0x9586, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \ | ||
| 323 | {0x1002, 0x9587, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \ | ||
| 324 | {0x1002, 0x9588, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \ | ||
| 325 | {0x1002, 0x9589, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \ | ||
| 326 | {0x1002, 0x958A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \ | ||
| 327 | {0x1002, 0x958B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 328 | {0x1002, 0x958C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \ | ||
| 329 | {0x1002, 0x958D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \ | ||
| 330 | {0x1002, 0x958E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \ | ||
| 331 | {0x1002, 0x958F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 332 | {0x1002, 0x9590, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \ | ||
| 333 | {0x1002, 0x9591, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 334 | {0x1002, 0x9593, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 335 | {0x1002, 0x9595, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 336 | {0x1002, 0x9596, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \ | ||
| 337 | {0x1002, 0x9597, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \ | ||
| 338 | {0x1002, 0x9598, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \ | ||
| 339 | {0x1002, 0x9599, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \ | ||
| 340 | {0x1002, 0x959B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 341 | {0x1002, 0x95C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | ||
| 342 | {0x1002, 0x95C5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | ||
| 343 | {0x1002, 0x95C6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | ||
| 344 | {0x1002, 0x95C7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | ||
| 345 | {0x1002, 0x95C9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | ||
| 346 | {0x1002, 0x95C2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 347 | {0x1002, 0x95C4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 348 | {0x1002, 0x95CC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | ||
| 349 | {0x1002, 0x95CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | ||
| 350 | {0x1002, 0x95CE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | ||
| 351 | {0x1002, 0x95CF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | ||
| 352 | {0x1002, 0x9610, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
| 353 | {0x1002, 0x9611, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
| 354 | {0x1002, 0x9612, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
| 355 | {0x1002, 0x9613, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
| 356 | {0x1002, 0x9614, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
| 357 | {0x1002, 0x9615, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
| 358 | {0x1002, 0x9616, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ | ||
| 246 | {0, 0, 0} | 359 | {0, 0, 0} |
| 247 | 360 | ||
| 248 | #define r128_PCI_IDS \ | 361 | #define r128_PCI_IDS \ |
| @@ -418,4 +531,6 @@ | |||
| 418 | {0x8086, 0x2e02, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ | 531 | {0x8086, 0x2e02, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 419 | {0x8086, 0x2e12, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ | 532 | {0x8086, 0x2e12, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 420 | {0x8086, 0x2e22, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ | 533 | {0x8086, 0x2e22, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 534 | {0x8086, 0xa001, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ | ||
| 535 | {0x8086, 0xa011, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ | ||
| 421 | {0, 0, 0} | 536 | {0, 0, 0} |
diff --git a/include/drm/i915_drm.h b/include/drm/i915_drm.h index 912cd52db965..67e3353a56d6 100644 --- a/include/drm/i915_drm.h +++ b/include/drm/i915_drm.h | |||
| @@ -30,7 +30,7 @@ | |||
| 30 | /* Please note that modifications to all structs defined here are | 30 | /* Please note that modifications to all structs defined here are |
| 31 | * subject to backwards-compatibility constraints. | 31 | * subject to backwards-compatibility constraints. |
| 32 | */ | 32 | */ |
| 33 | 33 | #include <linux/types.h> | |
| 34 | #include "drm.h" | 34 | #include "drm.h" |
| 35 | 35 | ||
| 36 | /* Each region is a minimum of 16k, and there are at most 255 of them. | 36 | /* Each region is a minimum of 16k, and there are at most 255 of them. |
| @@ -116,15 +116,15 @@ typedef struct _drm_i915_sarea { | |||
| 116 | 116 | ||
| 117 | /* fill out some space for old userspace triple buffer */ | 117 | /* fill out some space for old userspace triple buffer */ |
| 118 | drm_handle_t unused_handle; | 118 | drm_handle_t unused_handle; |
| 119 | uint32_t unused1, unused2, unused3; | 119 | __u32 unused1, unused2, unused3; |
| 120 | 120 | ||
| 121 | /* buffer object handles for static buffers. May change | 121 | /* buffer object handles for static buffers. May change |
| 122 | * over the lifetime of the client. | 122 | * over the lifetime of the client. |
| 123 | */ | 123 | */ |
| 124 | uint32_t front_bo_handle; | 124 | __u32 front_bo_handle; |
| 125 | uint32_t back_bo_handle; | 125 | __u32 back_bo_handle; |
| 126 | uint32_t unused_bo_handle; | 126 | __u32 unused_bo_handle; |
| 127 | uint32_t depth_bo_handle; | 127 | __u32 depth_bo_handle; |
| 128 | 128 | ||
| 129 | } drm_i915_sarea_t; | 129 | } drm_i915_sarea_t; |
| 130 | 130 | ||
| @@ -327,7 +327,7 @@ typedef struct drm_i915_vblank_swap { | |||
| 327 | } drm_i915_vblank_swap_t; | 327 | } drm_i915_vblank_swap_t; |
| 328 | 328 | ||
| 329 | typedef struct drm_i915_hws_addr { | 329 | typedef struct drm_i915_hws_addr { |
| 330 | uint64_t addr; | 330 | __u64 addr; |
| 331 | } drm_i915_hws_addr_t; | 331 | } drm_i915_hws_addr_t; |
| 332 | 332 | ||
| 333 | struct drm_i915_gem_init { | 333 | struct drm_i915_gem_init { |
| @@ -335,12 +335,12 @@ struct drm_i915_gem_init { | |||
| 335 | * Beginning offset in the GTT to be managed by the DRM memory | 335 | * Beginning offset in the GTT to be managed by the DRM memory |
| 336 | * manager. | 336 | * manager. |
| 337 | */ | 337 | */ |
| 338 | uint64_t gtt_start; | 338 | __u64 gtt_start; |
| 339 | /** | 339 | /** |
| 340 | * Ending offset in the GTT to be managed by the DRM memory | 340 | * Ending offset in the GTT to be managed by the DRM memory |
| 341 | * manager. | 341 | * manager. |
| 342 | */ | 342 | */ |
| 343 | uint64_t gtt_end; | 343 | __u64 gtt_end; |
| 344 | }; | 344 | }; |
| 345 | 345 | ||
| 346 | struct drm_i915_gem_create { | 346 | struct drm_i915_gem_create { |
| @@ -349,94 +349,94 @@ struct drm_i915_gem_create { | |||
| 349 | * | 349 | * |
| 350 | * The (page-aligned) allocated size for the object will be returned. | 350 | * The (page-aligned) allocated size for the object will be returned. |
| 351 | */ | 351 | */ |
| 352 | uint64_t size; | 352 | __u64 size; |
| 353 | /** | 353 | /** |
| 354 | * Returned handle for the object. | 354 | * Returned handle for the object. |
| 355 | * | 355 | * |
| 356 | * Object handles are nonzero. | 356 | * Object handles are nonzero. |
| 357 | */ | 357 | */ |
| 358 | uint32_t handle; | 358 | __u32 handle; |
| 359 | uint32_t pad; | 359 | __u32 pad; |
| 360 | }; | 360 | }; |
| 361 | 361 | ||
| 362 | struct drm_i915_gem_pread { | 362 | struct drm_i915_gem_pread { |
| 363 | /** Handle for the object being read. */ | 363 | /** Handle for the object being read. */ |
| 364 | uint32_t handle; | 364 | __u32 handle; |
| 365 | uint32_t pad; | 365 | __u32 pad; |
| 366 | /** Offset into the object to read from */ | 366 | /** Offset into the object to read from */ |
| 367 | uint64_t offset; | 367 | __u64 offset; |
| 368 | /** Length of data to read */ | 368 | /** Length of data to read */ |
| 369 | uint64_t size; | 369 | __u64 size; |
| 370 | /** | 370 | /** |
| 371 | * Pointer to write the data into. | 371 | * Pointer to write the data into. |
| 372 | * | 372 | * |
| 373 | * This is a fixed-size type for 32/64 compatibility. | 373 | * This is a fixed-size type for 32/64 compatibility. |
| 374 | */ | 374 | */ |
| 375 | uint64_t data_ptr; | 375 | __u64 data_ptr; |
| 376 | }; | 376 | }; |
| 377 | 377 | ||
| 378 | struct drm_i915_gem_pwrite { | 378 | struct drm_i915_gem_pwrite { |
| 379 | /** Handle for the object being written to. */ | 379 | /** Handle for the object being written to. */ |
| 380 | uint32_t handle; | 380 | __u32 handle; |
| 381 | uint32_t pad; | 381 | __u32 pad; |
| 382 | /** Offset into the object to write to */ | 382 | /** Offset into the object to write to */ |
| 383 | uint64_t offset; | 383 | __u64 offset; |
| 384 | /** Length of data to write */ | 384 | /** Length of data to write */ |
| 385 | uint64_t size; | 385 | __u64 size; |
| 386 | /** | 386 | /** |
| 387 | * Pointer to read the data from. | 387 | * Pointer to read the data from. |
| 388 | * | 388 | * |
| 389 | * This is a fixed-size type for 32/64 compatibility. | 389 | * This is a fixed-size type for 32/64 compatibility. |
| 390 | */ | 390 | */ |
| 391 | uint64_t data_ptr; | 391 | __u64 data_ptr; |
| 392 | }; | 392 | }; |
| 393 | 393 | ||
| 394 | struct drm_i915_gem_mmap { | 394 | struct drm_i915_gem_mmap { |
| 395 | /** Handle for the object being mapped. */ | 395 | /** Handle for the object being mapped. */ |
| 396 | uint32_t handle; | 396 | __u32 handle; |
| 397 | uint32_t pad; | 397 | __u32 pad; |
| 398 | /** Offset in the object to map. */ | 398 | /** Offset in the object to map. */ |
| 399 | uint64_t offset; | 399 | __u64 offset; |
| 400 | /** | 400 | /** |
| 401 | * Length of data to map. | 401 | * Length of data to map. |
| 402 | * | 402 | * |
| 403 | * The value will be page-aligned. | 403 | * The value will be page-aligned. |
| 404 | */ | 404 | */ |
| 405 | uint64_t size; | 405 | __u64 size; |
| 406 | /** | 406 | /** |
| 407 | * Returned pointer the data was mapped at. | 407 | * Returned pointer the data was mapped at. |
| 408 | * | 408 | * |
| 409 | * This is a fixed-size type for 32/64 compatibility. | 409 | * This is a fixed-size type for 32/64 compatibility. |
| 410 | */ | 410 | */ |
| 411 | uint64_t addr_ptr; | 411 | __u64 addr_ptr; |
| 412 | }; | 412 | }; |
| 413 | 413 | ||
| 414 | struct drm_i915_gem_mmap_gtt { | 414 | struct drm_i915_gem_mmap_gtt { |
| 415 | /** Handle for the object being mapped. */ | 415 | /** Handle for the object being mapped. */ |
| 416 | uint32_t handle; | 416 | __u32 handle; |
| 417 | uint32_t pad; | 417 | __u32 pad; |
| 418 | /** | 418 | /** |
| 419 | * Fake offset to use for subsequent mmap call | 419 | * Fake offset to use for subsequent mmap call |
| 420 | * | 420 | * |
| 421 | * This is a fixed-size type for 32/64 compatibility. | 421 | * This is a fixed-size type for 32/64 compatibility. |
| 422 | */ | 422 | */ |
| 423 | uint64_t offset; | 423 | __u64 offset; |
| 424 | }; | 424 | }; |
| 425 | 425 | ||
| 426 | struct drm_i915_gem_set_domain { | 426 | struct drm_i915_gem_set_domain { |
| 427 | /** Handle for the object */ | 427 | /** Handle for the object */ |
| 428 | uint32_t handle; | 428 | __u32 handle; |
| 429 | 429 | ||
| 430 | /** New read domains */ | 430 | /** New read domains */ |
| 431 | uint32_t read_domains; | 431 | __u32 read_domains; |
| 432 | 432 | ||
| 433 | /** New write domain */ | 433 | /** New write domain */ |
| 434 | uint32_t write_domain; | 434 | __u32 write_domain; |
| 435 | }; | 435 | }; |
| 436 | 436 | ||
| 437 | struct drm_i915_gem_sw_finish { | 437 | struct drm_i915_gem_sw_finish { |
| 438 | /** Handle for the object */ | 438 | /** Handle for the object */ |
| 439 | uint32_t handle; | 439 | __u32 handle; |
| 440 | }; | 440 | }; |
| 441 | 441 | ||
| 442 | struct drm_i915_gem_relocation_entry { | 442 | struct drm_i915_gem_relocation_entry { |
| @@ -448,16 +448,16 @@ struct drm_i915_gem_relocation_entry { | |||
| 448 | * a relocation list for state buffers and not re-write it per | 448 | * a relocation list for state buffers and not re-write it per |
| 449 | * exec using the buffer. | 449 | * exec using the buffer. |
| 450 | */ | 450 | */ |
| 451 | uint32_t target_handle; | 451 | __u32 target_handle; |
| 452 | 452 | ||
| 453 | /** | 453 | /** |
| 454 | * Value to be added to the offset of the target buffer to make up | 454 | * Value to be added to the offset of the target buffer to make up |
| 455 | * the relocation entry. | 455 | * the relocation entry. |
| 456 | */ | 456 | */ |
| 457 | uint32_t delta; | 457 | __u32 delta; |
| 458 | 458 | ||
| 459 | /** Offset in the buffer the relocation entry will be written into */ | 459 | /** Offset in the buffer the relocation entry will be written into */ |
| 460 | uint64_t offset; | 460 | __u64 offset; |
| 461 | 461 | ||
| 462 | /** | 462 | /** |
| 463 | * Offset value of the target buffer that the relocation entry was last | 463 | * Offset value of the target buffer that the relocation entry was last |
| @@ -467,12 +467,12 @@ struct drm_i915_gem_relocation_entry { | |||
| 467 | * and writing the relocation. This value is written back out by | 467 | * and writing the relocation. This value is written back out by |
| 468 | * the execbuffer ioctl when the relocation is written. | 468 | * the execbuffer ioctl when the relocation is written. |
| 469 | */ | 469 | */ |
| 470 | uint64_t presumed_offset; | 470 | __u64 presumed_offset; |
| 471 | 471 | ||
| 472 | /** | 472 | /** |
| 473 | * Target memory domains read by this operation. | 473 | * Target memory domains read by this operation. |
| 474 | */ | 474 | */ |
| 475 | uint32_t read_domains; | 475 | __u32 read_domains; |
| 476 | 476 | ||
| 477 | /** | 477 | /** |
| 478 | * Target memory domains written by this operation. | 478 | * Target memory domains written by this operation. |
| @@ -481,7 +481,7 @@ struct drm_i915_gem_relocation_entry { | |||
| 481 | * execbuffer operation, so that where there are conflicts, | 481 | * execbuffer operation, so that where there are conflicts, |
| 482 | * the application will get -EINVAL back. | 482 | * the application will get -EINVAL back. |
| 483 | */ | 483 | */ |
| 484 | uint32_t write_domain; | 484 | __u32 write_domain; |
| 485 | }; | 485 | }; |
| 486 | 486 | ||
| 487 | /** @{ | 487 | /** @{ |
| @@ -512,24 +512,24 @@ struct drm_i915_gem_exec_object { | |||
| 512 | * User's handle for a buffer to be bound into the GTT for this | 512 | * User's handle for a buffer to be bound into the GTT for this |
| 513 | * operation. | 513 | * operation. |
| 514 | */ | 514 | */ |
| 515 | uint32_t handle; | 515 | __u32 handle; |
| 516 | 516 | ||
| 517 | /** Number of relocations to be performed on this buffer */ | 517 | /** Number of relocations to be performed on this buffer */ |
| 518 | uint32_t relocation_count; | 518 | __u32 relocation_count; |
| 519 | /** | 519 | /** |
| 520 | * Pointer to array of struct drm_i915_gem_relocation_entry containing | 520 | * Pointer to array of struct drm_i915_gem_relocation_entry containing |
| 521 | * the relocations to be performed in this buffer. | 521 | * the relocations to be performed in this buffer. |
| 522 | */ | 522 | */ |
| 523 | uint64_t relocs_ptr; | 523 | __u64 relocs_ptr; |
| 524 | 524 | ||
| 525 | /** Required alignment in graphics aperture */ | 525 | /** Required alignment in graphics aperture */ |
| 526 | uint64_t alignment; | 526 | __u64 alignment; |
| 527 | 527 | ||
| 528 | /** | 528 | /** |
| 529 | * Returned value of the updated offset of the object, for future | 529 | * Returned value of the updated offset of the object, for future |
| 530 | * presumed_offset writes. | 530 | * presumed_offset writes. |
| 531 | */ | 531 | */ |
| 532 | uint64_t offset; | 532 | __u64 offset; |
| 533 | }; | 533 | }; |
| 534 | 534 | ||
| 535 | struct drm_i915_gem_execbuffer { | 535 | struct drm_i915_gem_execbuffer { |
| @@ -543,44 +543,44 @@ struct drm_i915_gem_execbuffer { | |||
| 543 | * a buffer is performing refer to buffers that have already appeared | 543 | * a buffer is performing refer to buffers that have already appeared |
| 544 | * in the validate list. | 544 | * in the validate list. |
| 545 | */ | 545 | */ |
| 546 | uint64_t buffers_ptr; | 546 | __u64 buffers_ptr; |
| 547 | uint32_t buffer_count; | 547 | __u32 buffer_count; |
| 548 | 548 | ||
| 549 | /** Offset in the batchbuffer to start execution from. */ | 549 | /** Offset in the batchbuffer to start execution from. */ |
| 550 | uint32_t batch_start_offset; | 550 | __u32 batch_start_offset; |
| 551 | /** Bytes used in batchbuffer from batch_start_offset */ | 551 | /** Bytes used in batchbuffer from batch_start_offset */ |
| 552 | uint32_t batch_len; | 552 | __u32 batch_len; |
| 553 | uint32_t DR1; | 553 | __u32 DR1; |
| 554 | uint32_t DR4; | 554 | __u32 DR4; |
| 555 | uint32_t num_cliprects; | 555 | __u32 num_cliprects; |
| 556 | /** This is a struct drm_clip_rect *cliprects */ | 556 | /** This is a struct drm_clip_rect *cliprects */ |
| 557 | uint64_t cliprects_ptr; | 557 | __u64 cliprects_ptr; |
| 558 | }; | 558 | }; |
| 559 | 559 | ||
| 560 | struct drm_i915_gem_pin { | 560 | struct drm_i915_gem_pin { |
| 561 | /** Handle of the buffer to be pinned. */ | 561 | /** Handle of the buffer to be pinned. */ |
| 562 | uint32_t handle; | 562 | __u32 handle; |
| 563 | uint32_t pad; | 563 | __u32 pad; |
| 564 | 564 | ||
| 565 | /** alignment required within the aperture */ | 565 | /** alignment required within the aperture */ |
| 566 | uint64_t alignment; | 566 | __u64 alignment; |
| 567 | 567 | ||
| 568 | /** Returned GTT offset of the buffer. */ | 568 | /** Returned GTT offset of the buffer. */ |
| 569 | uint64_t offset; | 569 | __u64 offset; |
| 570 | }; | 570 | }; |
| 571 | 571 | ||
| 572 | struct drm_i915_gem_unpin { | 572 | struct drm_i915_gem_unpin { |
| 573 | /** Handle of the buffer to be unpinned. */ | 573 | /** Handle of the buffer to be unpinned. */ |
| 574 | uint32_t handle; | 574 | __u32 handle; |
| 575 | uint32_t pad; | 575 | __u32 pad; |
| 576 | }; | 576 | }; |
| 577 | 577 | ||
| 578 | struct drm_i915_gem_busy { | 578 | struct drm_i915_gem_busy { |
| 579 | /** Handle of the buffer to check for busy */ | 579 | /** Handle of the buffer to check for busy */ |
| 580 | uint32_t handle; | 580 | __u32 handle; |
| 581 | 581 | ||
| 582 | /** Return busy status (1 if busy, 0 if idle) */ | 582 | /** Return busy status (1 if busy, 0 if idle) */ |
| 583 | uint32_t busy; | 583 | __u32 busy; |
| 584 | }; | 584 | }; |
| 585 | 585 | ||
| 586 | #define I915_TILING_NONE 0 | 586 | #define I915_TILING_NONE 0 |
| @@ -597,7 +597,7 @@ struct drm_i915_gem_busy { | |||
| 597 | 597 | ||
| 598 | struct drm_i915_gem_set_tiling { | 598 | struct drm_i915_gem_set_tiling { |
| 599 | /** Handle of the buffer to have its tiling state updated */ | 599 | /** Handle of the buffer to have its tiling state updated */ |
| 600 | uint32_t handle; | 600 | __u32 handle; |
| 601 | 601 | ||
| 602 | /** | 602 | /** |
| 603 | * Tiling mode for the object (I915_TILING_NONE, I915_TILING_X, | 603 | * Tiling mode for the object (I915_TILING_NONE, I915_TILING_X, |
| @@ -611,47 +611,47 @@ struct drm_i915_gem_set_tiling { | |||
| 611 | * | 611 | * |
| 612 | * Buffer contents become undefined when changing tiling_mode. | 612 | * Buffer contents become undefined when changing tiling_mode. |
| 613 | */ | 613 | */ |
| 614 | uint32_t tiling_mode; | 614 | __u32 tiling_mode; |
| 615 | 615 | ||
| 616 | /** | 616 | /** |
| 617 | * Stride in bytes for the object when in I915_TILING_X or | 617 | * Stride in bytes for the object when in I915_TILING_X or |
| 618 | * I915_TILING_Y. | 618 | * I915_TILING_Y. |
| 619 | */ | 619 | */ |
| 620 | uint32_t stride; | 620 | __u32 stride; |
| 621 | 621 | ||
| 622 | /** | 622 | /** |
| 623 | * Returned address bit 6 swizzling required for CPU access through | 623 | * Returned address bit 6 swizzling required for CPU access through |
| 624 | * mmap mapping. | 624 | * mmap mapping. |
| 625 | */ | 625 | */ |
| 626 | uint32_t swizzle_mode; | 626 | __u32 swizzle_mode; |
| 627 | }; | 627 | }; |
| 628 | 628 | ||
| 629 | struct drm_i915_gem_get_tiling { | 629 | struct drm_i915_gem_get_tiling { |
| 630 | /** Handle of the buffer to get tiling state for. */ | 630 | /** Handle of the buffer to get tiling state for. */ |
| 631 | uint32_t handle; | 631 | __u32 handle; |
| 632 | 632 | ||
| 633 | /** | 633 | /** |
| 634 | * Current tiling mode for the object (I915_TILING_NONE, I915_TILING_X, | 634 | * Current tiling mode for the object (I915_TILING_NONE, I915_TILING_X, |
| 635 | * I915_TILING_Y). | 635 | * I915_TILING_Y). |
| 636 | */ | 636 | */ |
| 637 | uint32_t tiling_mode; | 637 | __u32 tiling_mode; |
| 638 | 638 | ||
| 639 | /** | 639 | /** |
| 640 | * Returned address bit 6 swizzling required for CPU access through | 640 | * Returned address bit 6 swizzling required for CPU access through |
| 641 | * mmap mapping. | 641 | * mmap mapping. |
| 642 | */ | 642 | */ |
| 643 | uint32_t swizzle_mode; | 643 | __u32 swizzle_mode; |
| 644 | }; | 644 | }; |
| 645 | 645 | ||
| 646 | struct drm_i915_gem_get_aperture { | 646 | struct drm_i915_gem_get_aperture { |
| 647 | /** Total size of the aperture used by i915_gem_execbuffer, in bytes */ | 647 | /** Total size of the aperture used by i915_gem_execbuffer, in bytes */ |
| 648 | uint64_t aper_size; | 648 | __u64 aper_size; |
| 649 | 649 | ||
| 650 | /** | 650 | /** |
| 651 | * Available space in the aperture used by i915_gem_execbuffer, in | 651 | * Available space in the aperture used by i915_gem_execbuffer, in |
| 652 | * bytes | 652 | * bytes |
| 653 | */ | 653 | */ |
| 654 | uint64_t aper_available_size; | 654 | __u64 aper_available_size; |
| 655 | }; | 655 | }; |
| 656 | 656 | ||
| 657 | #endif /* _I915_DRM_H_ */ | 657 | #endif /* _I915_DRM_H_ */ |
diff --git a/include/drm/mga_drm.h b/include/drm/mga_drm.h index 944b50a5ff24..325fd6fb4a42 100644 --- a/include/drm/mga_drm.h +++ b/include/drm/mga_drm.h | |||
| @@ -35,6 +35,8 @@ | |||
| 35 | #ifndef __MGA_DRM_H__ | 35 | #ifndef __MGA_DRM_H__ |
| 36 | #define __MGA_DRM_H__ | 36 | #define __MGA_DRM_H__ |
| 37 | 37 | ||
| 38 | #include <linux/types.h> | ||
| 39 | |||
| 38 | /* WARNING: If you change any of these defines, make sure to change the | 40 | /* WARNING: If you change any of these defines, make sure to change the |
| 39 | * defines in the Xserver file (mga_sarea.h) | 41 | * defines in the Xserver file (mga_sarea.h) |
| 40 | */ | 42 | */ |
| @@ -255,8 +257,8 @@ typedef struct _drm_mga_sarea { | |||
| 255 | #define DRM_IOCTL_MGA_ILOAD DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_ILOAD, drm_mga_iload_t) | 257 | #define DRM_IOCTL_MGA_ILOAD DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_ILOAD, drm_mga_iload_t) |
| 256 | #define DRM_IOCTL_MGA_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_BLIT, drm_mga_blit_t) | 258 | #define DRM_IOCTL_MGA_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_BLIT, drm_mga_blit_t) |
| 257 | #define DRM_IOCTL_MGA_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_GETPARAM, drm_mga_getparam_t) | 259 | #define DRM_IOCTL_MGA_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_GETPARAM, drm_mga_getparam_t) |
| 258 | #define DRM_IOCTL_MGA_SET_FENCE DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_SET_FENCE, uint32_t) | 260 | #define DRM_IOCTL_MGA_SET_FENCE DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_SET_FENCE, __u32) |
| 259 | #define DRM_IOCTL_MGA_WAIT_FENCE DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_WAIT_FENCE, uint32_t) | 261 | #define DRM_IOCTL_MGA_WAIT_FENCE DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_WAIT_FENCE, __u32) |
| 260 | #define DRM_IOCTL_MGA_DMA_BOOTSTRAP DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_DMA_BOOTSTRAP, drm_mga_dma_bootstrap_t) | 262 | #define DRM_IOCTL_MGA_DMA_BOOTSTRAP DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_DMA_BOOTSTRAP, drm_mga_dma_bootstrap_t) |
| 261 | 263 | ||
| 262 | typedef struct _drm_mga_warp_index { | 264 | typedef struct _drm_mga_warp_index { |
| @@ -310,7 +312,7 @@ typedef struct drm_mga_dma_bootstrap { | |||
| 310 | */ | 312 | */ |
| 311 | /*@{ */ | 313 | /*@{ */ |
| 312 | unsigned long texture_handle; /**< Handle used to map AGP textures. */ | 314 | unsigned long texture_handle; /**< Handle used to map AGP textures. */ |
| 313 | uint32_t texture_size; /**< Size of the AGP texture region. */ | 315 | __u32 texture_size; /**< Size of the AGP texture region. */ |
| 314 | /*@} */ | 316 | /*@} */ |
| 315 | 317 | ||
| 316 | /** | 318 | /** |
| @@ -319,7 +321,7 @@ typedef struct drm_mga_dma_bootstrap { | |||
| 319 | * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be | 321 | * On return from the DRM_MGA_DMA_BOOTSTRAP ioctl, this field will be |
| 320 | * filled in with the actual AGP mode. If AGP was not available | 322 | * filled in with the actual AGP mode. If AGP was not available |
| 321 | */ | 323 | */ |
| 322 | uint32_t primary_size; | 324 | __u32 primary_size; |
| 323 | 325 | ||
| 324 | /** | 326 | /** |
| 325 | * Requested number of secondary DMA buffers. | 327 | * Requested number of secondary DMA buffers. |
| @@ -329,7 +331,7 @@ typedef struct drm_mga_dma_bootstrap { | |||
| 329 | * allocated. Particularly when PCI DMA is used, this may be | 331 | * allocated. Particularly when PCI DMA is used, this may be |
| 330 | * (subtantially) less than the number requested. | 332 | * (subtantially) less than the number requested. |
| 331 | */ | 333 | */ |
| 332 | uint32_t secondary_bin_count; | 334 | __u32 secondary_bin_count; |
| 333 | 335 | ||
| 334 | /** | 336 | /** |
| 335 | * Requested size of each secondary DMA buffer. | 337 | * Requested size of each secondary DMA buffer. |
| @@ -338,7 +340,7 @@ typedef struct drm_mga_dma_bootstrap { | |||
| 338 | * dma_mga_dma_bootstrap::secondary_bin_count, it is \b not allowed | 340 | * dma_mga_dma_bootstrap::secondary_bin_count, it is \b not allowed |
| 339 | * to reduce dma_mga_dma_bootstrap::secondary_bin_size. | 341 | * to reduce dma_mga_dma_bootstrap::secondary_bin_size. |
| 340 | */ | 342 | */ |
| 341 | uint32_t secondary_bin_size; | 343 | __u32 secondary_bin_size; |
| 342 | 344 | ||
| 343 | /** | 345 | /** |
| 344 | * Bit-wise mask of AGPSTAT2_* values. Currently only \c AGPSTAT2_1X, | 346 | * Bit-wise mask of AGPSTAT2_* values. Currently only \c AGPSTAT2_1X, |
| @@ -350,12 +352,12 @@ typedef struct drm_mga_dma_bootstrap { | |||
| 350 | * filled in with the actual AGP mode. If AGP was not available | 352 | * filled in with the actual AGP mode. If AGP was not available |
| 351 | * (i.e., PCI DMA was used), this value will be zero. | 353 | * (i.e., PCI DMA was used), this value will be zero. |
| 352 | */ | 354 | */ |
| 353 | uint32_t agp_mode; | 355 | __u32 agp_mode; |
| 354 | 356 | ||
| 355 | /** | 357 | /** |
| 356 | * Desired AGP GART size, measured in megabytes. | 358 | * Desired AGP GART size, measured in megabytes. |
| 357 | */ | 359 | */ |
| 358 | uint8_t agp_size; | 360 | __u8 agp_size; |
| 359 | } drm_mga_dma_bootstrap_t; | 361 | } drm_mga_dma_bootstrap_t; |
| 360 | 362 | ||
| 361 | typedef struct drm_mga_clear { | 363 | typedef struct drm_mga_clear { |
diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h index 73ff51f12311..fe3e3a4b4aed 100644 --- a/include/drm/radeon_drm.h +++ b/include/drm/radeon_drm.h | |||
| @@ -33,6 +33,8 @@ | |||
| 33 | #ifndef __RADEON_DRM_H__ | 33 | #ifndef __RADEON_DRM_H__ |
| 34 | #define __RADEON_DRM_H__ | 34 | #define __RADEON_DRM_H__ |
| 35 | 35 | ||
| 36 | #include <linux/types.h> | ||
| 37 | |||
| 36 | /* WARNING: If you change any of these defines, make sure to change the | 38 | /* WARNING: If you change any of these defines, make sure to change the |
| 37 | * defines in the X server file (radeon_sarea.h) | 39 | * defines in the X server file (radeon_sarea.h) |
| 38 | */ | 40 | */ |
| @@ -304,6 +306,8 @@ typedef union { | |||
| 304 | 306 | ||
| 305 | #define RADEON_SCRATCH_REG_OFFSET 32 | 307 | #define RADEON_SCRATCH_REG_OFFSET 32 |
| 306 | 308 | ||
| 309 | #define R600_SCRATCH_REG_OFFSET 256 | ||
| 310 | |||
| 307 | #define RADEON_NR_SAREA_CLIPRECTS 12 | 311 | #define RADEON_NR_SAREA_CLIPRECTS 12 |
| 308 | 312 | ||
| 309 | /* There are 2 heaps (local/GART). Each region within a heap is a | 313 | /* There are 2 heaps (local/GART). Each region within a heap is a |
| @@ -526,7 +530,8 @@ typedef struct drm_radeon_init { | |||
| 526 | RADEON_INIT_CP = 0x01, | 530 | RADEON_INIT_CP = 0x01, |
| 527 | RADEON_CLEANUP_CP = 0x02, | 531 | RADEON_CLEANUP_CP = 0x02, |
| 528 | RADEON_INIT_R200_CP = 0x03, | 532 | RADEON_INIT_R200_CP = 0x03, |
| 529 | RADEON_INIT_R300_CP = 0x04 | 533 | RADEON_INIT_R300_CP = 0x04, |
| 534 | RADEON_INIT_R600_CP = 0x05 | ||
| 530 | } func; | 535 | } func; |
| 531 | unsigned long sarea_priv_offset; | 536 | unsigned long sarea_priv_offset; |
| 532 | int is_pci; | 537 | int is_pci; |
| @@ -722,7 +727,7 @@ typedef struct drm_radeon_irq_wait { | |||
| 722 | 727 | ||
| 723 | typedef struct drm_radeon_setparam { | 728 | typedef struct drm_radeon_setparam { |
| 724 | unsigned int param; | 729 | unsigned int param; |
| 725 | int64_t value; | 730 | __s64 value; |
| 726 | } drm_radeon_setparam_t; | 731 | } drm_radeon_setparam_t; |
| 727 | 732 | ||
| 728 | #define RADEON_SETPARAM_FB_LOCATION 1 /* determined framebuffer location */ | 733 | #define RADEON_SETPARAM_FB_LOCATION 1 /* determined framebuffer location */ |
diff --git a/include/drm/via_drm.h b/include/drm/via_drm.h index a3b5c102b067..170786e5c2ff 100644 --- a/include/drm/via_drm.h +++ b/include/drm/via_drm.h | |||
| @@ -24,6 +24,8 @@ | |||
| 24 | #ifndef _VIA_DRM_H_ | 24 | #ifndef _VIA_DRM_H_ |
| 25 | #define _VIA_DRM_H_ | 25 | #define _VIA_DRM_H_ |
| 26 | 26 | ||
| 27 | #include <linux/types.h> | ||
| 28 | |||
| 27 | /* WARNING: These defines must be the same as what the Xserver uses. | 29 | /* WARNING: These defines must be the same as what the Xserver uses. |
| 28 | * if you change them, you must change the defines in the Xserver. | 30 | * if you change them, you must change the defines in the Xserver. |
| 29 | */ | 31 | */ |
| @@ -114,19 +116,19 @@ | |||
| 114 | #define VIA_MEM_UNKNOWN 4 | 116 | #define VIA_MEM_UNKNOWN 4 |
| 115 | 117 | ||
| 116 | typedef struct { | 118 | typedef struct { |
| 117 | uint32_t offset; | 119 | __u32 offset; |
| 118 | uint32_t size; | 120 | __u32 size; |
| 119 | } drm_via_agp_t; | 121 | } drm_via_agp_t; |
| 120 | 122 | ||
| 121 | typedef struct { | 123 | typedef struct { |
| 122 | uint32_t offset; | 124 | __u32 offset; |
| 123 | uint32_t size; | 125 | __u32 size; |
| 124 | } drm_via_fb_t; | 126 | } drm_via_fb_t; |
| 125 | 127 | ||
| 126 | typedef struct { | 128 | typedef struct { |
| 127 | uint32_t context; | 129 | __u32 context; |
| 128 | uint32_t type; | 130 | __u32 type; |
| 129 | uint32_t size; | 131 | __u32 size; |
| 130 | unsigned long index; | 132 | unsigned long index; |
| 131 | unsigned long offset; | 133 | unsigned long offset; |
| 132 | } drm_via_mem_t; | 134 | } drm_via_mem_t; |
| @@ -148,9 +150,9 @@ typedef struct _drm_via_futex { | |||
| 148 | VIA_FUTEX_WAIT = 0x00, | 150 | VIA_FUTEX_WAIT = 0x00, |
| 149 | VIA_FUTEX_WAKE = 0X01 | 151 | VIA_FUTEX_WAKE = 0X01 |
| 150 | } func; | 152 | } func; |
| 151 | uint32_t ms; | 153 | __u32 ms; |
| 152 | uint32_t lock; | 154 | __u32 lock; |
| 153 | uint32_t val; | 155 | __u32 val; |
| 154 | } drm_via_futex_t; | 156 | } drm_via_futex_t; |
| 155 | 157 | ||
| 156 | typedef struct _drm_via_dma_init { | 158 | typedef struct _drm_via_dma_init { |
| @@ -211,7 +213,7 @@ typedef struct _drm_via_cmdbuf_size { | |||
| 211 | VIA_CMDBUF_LAG = 0x02 | 213 | VIA_CMDBUF_LAG = 0x02 |
| 212 | } func; | 214 | } func; |
| 213 | int wait; | 215 | int wait; |
| 214 | uint32_t size; | 216 | __u32 size; |
| 215 | } drm_via_cmdbuf_size_t; | 217 | } drm_via_cmdbuf_size_t; |
| 216 | 218 | ||
| 217 | typedef enum { | 219 | typedef enum { |
| @@ -236,8 +238,8 @@ enum drm_via_irqs { | |||
| 236 | struct drm_via_wait_irq_request { | 238 | struct drm_via_wait_irq_request { |
| 237 | unsigned irq; | 239 | unsigned irq; |
| 238 | via_irq_seq_type_t type; | 240 | via_irq_seq_type_t type; |
| 239 | uint32_t sequence; | 241 | __u32 sequence; |
| 240 | uint32_t signal; | 242 | __u32 signal; |
| 241 | }; | 243 | }; |
| 242 | 244 | ||
| 243 | typedef union drm_via_irqwait { | 245 | typedef union drm_via_irqwait { |
| @@ -246,7 +248,7 @@ typedef union drm_via_irqwait { | |||
| 246 | } drm_via_irqwait_t; | 248 | } drm_via_irqwait_t; |
| 247 | 249 | ||
| 248 | typedef struct drm_via_blitsync { | 250 | typedef struct drm_via_blitsync { |
| 249 | uint32_t sync_handle; | 251 | __u32 sync_handle; |
| 250 | unsigned engine; | 252 | unsigned engine; |
| 251 | } drm_via_blitsync_t; | 253 | } drm_via_blitsync_t; |
| 252 | 254 | ||
| @@ -257,16 +259,16 @@ typedef struct drm_via_blitsync { | |||
| 257 | */ | 259 | */ |
| 258 | 260 | ||
| 259 | typedef struct drm_via_dmablit { | 261 | typedef struct drm_via_dmablit { |
| 260 | uint32_t num_lines; | 262 | __u32 num_lines; |
| 261 | uint32_t line_length; | 263 | __u32 line_length; |
| 262 | 264 | ||
| 263 | uint32_t fb_addr; | 265 | __u32 fb_addr; |
| 264 | uint32_t fb_stride; | 266 | __u32 fb_stride; |
| 265 | 267 | ||
| 266 | unsigned char *mem_addr; | 268 | unsigned char *mem_addr; |
| 267 | uint32_t mem_stride; | 269 | __u32 mem_stride; |
| 268 | 270 | ||
| 269 | uint32_t flags; | 271 | __u32 flags; |
| 270 | int to_fb; | 272 | int to_fb; |
| 271 | 273 | ||
| 272 | drm_via_blitsync_t sync; | 274 | drm_via_blitsync_t sync; |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 106c3ba50844..a67b6227d272 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 |
| @@ -157,8 +158,6 @@ header-y += ultrasound.h | |||
| 157 | header-y += un.h | 158 | header-y += un.h |
| 158 | header-y += utime.h | 159 | header-y += utime.h |
| 159 | header-y += veth.h | 160 | header-y += veth.h |
| 160 | header-y += video_decoder.h | ||
| 161 | header-y += video_encoder.h | ||
| 162 | header-y += videotext.h | 161 | header-y += videotext.h |
| 163 | header-y += x25.h | 162 | header-y += x25.h |
| 164 | 163 | ||
diff --git a/include/linux/agpgart.h b/include/linux/agpgart.h index 110c600c885f..f6778eceb8f4 100644 --- a/include/linux/agpgart.h +++ b/include/linux/agpgart.h | |||
| @@ -77,20 +77,20 @@ typedef struct _agp_setup { | |||
| 77 | * The "prot" down below needs still a "sleep" flag somehow ... | 77 | * The "prot" down below needs still a "sleep" flag somehow ... |
| 78 | */ | 78 | */ |
| 79 | typedef struct _agp_segment { | 79 | typedef struct _agp_segment { |
| 80 | off_t pg_start; /* starting page to populate */ | 80 | __kernel_off_t pg_start; /* starting page to populate */ |
| 81 | size_t pg_count; /* number of pages */ | 81 | __kernel_size_t pg_count; /* number of pages */ |
| 82 | int prot; /* prot flags for mmap */ | 82 | int prot; /* prot flags for mmap */ |
| 83 | } agp_segment; | 83 | } agp_segment; |
| 84 | 84 | ||
| 85 | typedef struct _agp_region { | 85 | typedef struct _agp_region { |
| 86 | pid_t pid; /* pid of process */ | 86 | __kernel_pid_t pid; /* pid of process */ |
| 87 | size_t seg_count; /* number of segments */ | 87 | __kernel_size_t seg_count; /* number of segments */ |
| 88 | struct _agp_segment *seg_list; | 88 | struct _agp_segment *seg_list; |
| 89 | } agp_region; | 89 | } agp_region; |
| 90 | 90 | ||
| 91 | typedef struct _agp_allocate { | 91 | typedef struct _agp_allocate { |
| 92 | int key; /* tag of allocation */ | 92 | int key; /* tag of allocation */ |
| 93 | size_t pg_count; /* number of pages */ | 93 | __kernel_size_t pg_count;/* number of pages */ |
| 94 | __u32 type; /* 0 == normal, other devspec */ | 94 | __u32 type; /* 0 == normal, other devspec */ |
| 95 | __u32 physical; /* device specific (some devices | 95 | __u32 physical; /* device specific (some devices |
| 96 | * need a phys address of the | 96 | * need a phys address of the |
| @@ -100,7 +100,7 @@ typedef struct _agp_allocate { | |||
| 100 | 100 | ||
| 101 | typedef struct _agp_bind { | 101 | typedef struct _agp_bind { |
| 102 | int key; /* tag of allocation */ | 102 | int key; /* tag of allocation */ |
| 103 | off_t pg_start; /* starting page to populate */ | 103 | __kernel_off_t pg_start;/* starting page to populate */ |
| 104 | } agp_bind; | 104 | } agp_bind; |
| 105 | 105 | ||
| 106 | typedef struct _agp_unbind { | 106 | typedef struct _agp_unbind { |
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/atmlec.h b/include/linux/atmlec.h index 6f5a1bab8f50..39c917fd1b96 100644 --- a/include/linux/atmlec.h +++ b/include/linux/atmlec.h | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include <linux/atmioc.h> | 11 | #include <linux/atmioc.h> |
| 12 | #include <linux/atm.h> | 12 | #include <linux/atm.h> |
| 13 | #include <linux/if_ether.h> | 13 | #include <linux/if_ether.h> |
| 14 | #include <linux/types.h> | ||
| 14 | 15 | ||
| 15 | /* ATM lec daemon control socket */ | 16 | /* ATM lec daemon control socket */ |
| 16 | #define ATMLEC_CTRL _IO('a', ATMIOC_LANE) | 17 | #define ATMLEC_CTRL _IO('a', ATMIOC_LANE) |
| @@ -78,8 +79,8 @@ struct atmlec_msg { | |||
| 78 | } normal; | 79 | } normal; |
| 79 | struct atmlec_config_msg config; | 80 | struct atmlec_config_msg config; |
| 80 | struct { | 81 | struct { |
| 81 | uint16_t lec_id; /* requestor lec_id */ | 82 | __u16 lec_id; /* requestor lec_id */ |
| 82 | uint32_t tran_id; /* transaction id */ | 83 | __u32 tran_id; /* transaction id */ |
| 83 | unsigned char mac_addr[ETH_ALEN]; /* dst mac addr */ | 84 | unsigned char mac_addr[ETH_ALEN]; /* dst mac addr */ |
| 84 | unsigned char atm_addr[ATM_ESA_LEN]; /* reqestor ATM addr */ | 85 | unsigned char atm_addr[ATM_ESA_LEN]; /* reqestor ATM addr */ |
| 85 | } proxy; /* | 86 | } proxy; /* |
diff --git a/include/linux/atmmpc.h b/include/linux/atmmpc.h index ea1650425a12..2aba5787fa63 100644 --- a/include/linux/atmmpc.h +++ b/include/linux/atmmpc.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #include <linux/atmapi.h> | 4 | #include <linux/atmapi.h> |
| 5 | #include <linux/atmioc.h> | 5 | #include <linux/atmioc.h> |
| 6 | #include <linux/atm.h> | 6 | #include <linux/atm.h> |
| 7 | #include <linux/types.h> | ||
| 7 | 8 | ||
| 8 | #define ATMMPC_CTRL _IO('a', ATMIOC_MPOA) | 9 | #define ATMMPC_CTRL _IO('a', ATMIOC_MPOA) |
| 9 | #define ATMMPC_DATA _IO('a', ATMIOC_MPOA+1) | 10 | #define ATMMPC_DATA _IO('a', ATMIOC_MPOA+1) |
| @@ -18,39 +19,39 @@ struct atmmpc_ioc { | |||
| 18 | }; | 19 | }; |
| 19 | 20 | ||
| 20 | typedef struct in_ctrl_info { | 21 | typedef struct in_ctrl_info { |
| 21 | uint8_t Last_NHRP_CIE_code; | 22 | __u8 Last_NHRP_CIE_code; |
| 22 | uint8_t Last_Q2931_cause_value; | 23 | __u8 Last_Q2931_cause_value; |
| 23 | uint8_t eg_MPC_ATM_addr[ATM_ESA_LEN]; | 24 | __u8 eg_MPC_ATM_addr[ATM_ESA_LEN]; |
| 24 | __be32 tag; | 25 | __be32 tag; |
| 25 | __be32 in_dst_ip; /* IP address this ingress MPC sends packets to */ | 26 | __be32 in_dst_ip; /* IP address this ingress MPC sends packets to */ |
| 26 | uint16_t holding_time; | 27 | __u16 holding_time; |
| 27 | uint32_t request_id; | 28 | __u32 request_id; |
| 28 | } in_ctrl_info; | 29 | } in_ctrl_info; |
| 29 | 30 | ||
| 30 | typedef struct eg_ctrl_info { | 31 | typedef struct eg_ctrl_info { |
| 31 | uint8_t DLL_header[256]; | 32 | __u8 DLL_header[256]; |
| 32 | uint8_t DH_length; | 33 | __u8 DH_length; |
| 33 | __be32 cache_id; | 34 | __be32 cache_id; |
| 34 | __be32 tag; | 35 | __be32 tag; |
| 35 | __be32 mps_ip; | 36 | __be32 mps_ip; |
| 36 | __be32 eg_dst_ip; /* IP address to which ingress MPC sends packets */ | 37 | __be32 eg_dst_ip; /* IP address to which ingress MPC sends packets */ |
| 37 | uint8_t in_MPC_data_ATM_addr[ATM_ESA_LEN]; | 38 | __u8 in_MPC_data_ATM_addr[ATM_ESA_LEN]; |
| 38 | uint16_t holding_time; | 39 | __u16 holding_time; |
| 39 | } eg_ctrl_info; | 40 | } eg_ctrl_info; |
| 40 | 41 | ||
| 41 | struct mpc_parameters { | 42 | struct mpc_parameters { |
| 42 | uint16_t mpc_p1; /* Shortcut-Setup Frame Count */ | 43 | __u16 mpc_p1; /* Shortcut-Setup Frame Count */ |
| 43 | uint16_t mpc_p2; /* Shortcut-Setup Frame Time */ | 44 | __u16 mpc_p2; /* Shortcut-Setup Frame Time */ |
| 44 | uint8_t mpc_p3[8]; /* Flow-detection Protocols */ | 45 | __u8 mpc_p3[8]; /* Flow-detection Protocols */ |
| 45 | uint16_t mpc_p4; /* MPC Initial Retry Time */ | 46 | __u16 mpc_p4; /* MPC Initial Retry Time */ |
| 46 | uint16_t mpc_p5; /* MPC Retry Time Maximum */ | 47 | __u16 mpc_p5; /* MPC Retry Time Maximum */ |
| 47 | uint16_t mpc_p6; /* Hold Down Time */ | 48 | __u16 mpc_p6; /* Hold Down Time */ |
| 48 | } ; | 49 | } ; |
| 49 | 50 | ||
| 50 | struct k_message { | 51 | struct k_message { |
| 51 | uint16_t type; | 52 | __u16 type; |
| 52 | __be32 ip_mask; | 53 | __be32 ip_mask; |
| 53 | uint8_t MPS_ctrl[ATM_ESA_LEN]; | 54 | __u8 MPS_ctrl[ATM_ESA_LEN]; |
| 54 | union { | 55 | union { |
| 55 | in_ctrl_info in_info; | 56 | in_ctrl_info in_info; |
| 56 | eg_ctrl_info eg_info; | 57 | eg_ctrl_info eg_info; |
| @@ -61,11 +62,11 @@ struct k_message { | |||
| 61 | 62 | ||
| 62 | struct llc_snap_hdr { | 63 | struct llc_snap_hdr { |
| 63 | /* RFC 1483 LLC/SNAP encapsulation for routed IP PDUs */ | 64 | /* RFC 1483 LLC/SNAP encapsulation for routed IP PDUs */ |
| 64 | uint8_t dsap; /* Destination Service Access Point (0xAA) */ | 65 | __u8 dsap; /* Destination Service Access Point (0xAA) */ |
| 65 | uint8_t ssap; /* Source Service Access Point (0xAA) */ | 66 | __u8 ssap; /* Source Service Access Point (0xAA) */ |
| 66 | uint8_t ui; /* Unnumbered Information (0x03) */ | 67 | __u8 ui; /* Unnumbered Information (0x03) */ |
| 67 | uint8_t org[3]; /* Organizational identification (0x000000) */ | 68 | __u8 org[3]; /* Organizational identification (0x000000) */ |
| 68 | uint8_t type[2]; /* Ether type (for IP) (0x0800) */ | 69 | __u8 type[2]; /* Ether type (for IP) (0x0800) */ |
| 69 | }; | 70 | }; |
| 70 | 71 | ||
| 71 | /* TLVs this MPC recognizes */ | 72 | /* TLVs this MPC recognizes */ |
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 1b16108a5417..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 *, 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) (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..ecb4730d0868 100644 --- a/include/linux/bsg.h +++ b/include/linux/bsg.h | |||
| @@ -1,12 +1,22 @@ | |||
| 1 | #ifndef BSG_H | 1 | #ifndef BSG_H |
| 2 | #define BSG_H | 2 | #define BSG_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | #define BSG_PROTOCOL_SCSI 0 | 6 | #define BSG_PROTOCOL_SCSI 0 |
| 5 | 7 | ||
| 6 | #define BSG_SUB_PROTOCOL_SCSI_CMD 0 | 8 | #define BSG_SUB_PROTOCOL_SCSI_CMD 0 |
| 7 | #define BSG_SUB_PROTOCOL_SCSI_TMF 1 | 9 | #define BSG_SUB_PROTOCOL_SCSI_TMF 1 |
| 8 | #define BSG_SUB_PROTOCOL_SCSI_TRANSPORT 2 | 10 | #define BSG_SUB_PROTOCOL_SCSI_TRANSPORT 2 |
| 9 | 11 | ||
| 12 | /* | ||
| 13 | * For flags member below | ||
| 14 | * sg.h sg_io_hdr also has bits defined for it's flags member. However | ||
| 15 | * none of these bits are implemented/used by bsg. The bits below are | ||
| 16 | * allocated to not conflict with sg.h ones anyway. | ||
| 17 | */ | ||
| 18 | #define BSG_FLAG_Q_AT_TAIL 0x10 /* default, == 0 at this bit, is Q_AT_HEAD */ | ||
| 19 | |||
| 10 | struct sg_io_v4 { | 20 | struct sg_io_v4 { |
| 11 | __s32 guard; /* [i] 'Q' to differentiate from v3 */ | 21 | __s32 guard; /* [i] 'Q' to differentiate from v3 */ |
| 12 | __u32 protocol; /* [i] 0 -> SCSI , .... */ | 22 | __u32 protocol; /* [i] 0 -> SCSI , .... */ |
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index bd7ac793be19..f19fd9045ea0 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h | |||
| @@ -165,15 +165,8 @@ int sync_mapping_buffers(struct address_space *mapping); | |||
| 165 | void unmap_underlying_metadata(struct block_device *bdev, sector_t block); | 165 | void unmap_underlying_metadata(struct block_device *bdev, sector_t block); |
| 166 | 166 | ||
| 167 | void mark_buffer_async_write(struct buffer_head *bh); | 167 | void mark_buffer_async_write(struct buffer_head *bh); |
| 168 | void invalidate_bdev(struct block_device *); | ||
| 169 | int sync_blockdev(struct block_device *bdev); | ||
| 170 | void __wait_on_buffer(struct buffer_head *); | 168 | void __wait_on_buffer(struct buffer_head *); |
| 171 | wait_queue_head_t *bh_waitq_head(struct buffer_head *bh); | 169 | wait_queue_head_t *bh_waitq_head(struct buffer_head *bh); |
| 172 | int fsync_bdev(struct block_device *); | ||
| 173 | struct super_block *freeze_bdev(struct block_device *); | ||
| 174 | int thaw_bdev(struct block_device *, struct super_block *); | ||
| 175 | int fsync_super(struct super_block *); | ||
| 176 | int fsync_no_super(struct block_device *); | ||
| 177 | struct buffer_head *__find_get_block(struct block_device *bdev, sector_t block, | 170 | struct buffer_head *__find_get_block(struct block_device *bdev, sector_t block, |
| 178 | unsigned size); | 171 | unsigned size); |
| 179 | struct buffer_head *__getblk(struct block_device *bdev, sector_t block, | 172 | struct buffer_head *__getblk(struct block_device *bdev, sector_t block, |
diff --git a/include/linux/capability.h b/include/linux/capability.h index 1b9872556131..4864a43b2b45 100644 --- a/include/linux/capability.h +++ b/include/linux/capability.h | |||
| @@ -393,8 +393,10 @@ struct cpu_vfs_cap_data { | |||
| 393 | # define CAP_FULL_SET ((kernel_cap_t){{ ~0, ~0 }}) | 393 | # define CAP_FULL_SET ((kernel_cap_t){{ ~0, ~0 }}) |
| 394 | # define CAP_INIT_EFF_SET ((kernel_cap_t){{ ~CAP_TO_MASK(CAP_SETPCAP), ~0 }}) | 394 | # define CAP_INIT_EFF_SET ((kernel_cap_t){{ ~CAP_TO_MASK(CAP_SETPCAP), ~0 }}) |
| 395 | # define CAP_FS_SET ((kernel_cap_t){{ CAP_FS_MASK_B0, CAP_FS_MASK_B1 } }) | 395 | # define CAP_FS_SET ((kernel_cap_t){{ CAP_FS_MASK_B0, CAP_FS_MASK_B1 } }) |
| 396 | # define CAP_NFSD_SET ((kernel_cap_t){{ CAP_FS_MASK_B0|CAP_TO_MASK(CAP_SYS_RESOURCE), \ | 396 | # define CAP_NFSD_SET ((kernel_cap_t){{ CAP_FS_MASK_B0 \ |
| 397 | CAP_FS_MASK_B1 } }) | 397 | | CAP_TO_MASK(CAP_SYS_RESOURCE) \ |
| 398 | | CAP_TO_MASK(CAP_MKNOD), \ | ||
| 399 | CAP_FS_MASK_B1 } }) | ||
| 398 | 400 | ||
| 399 | #endif /* _KERNEL_CAPABILITY_U32S != 2 */ | 401 | #endif /* _KERNEL_CAPABILITY_U32S != 2 */ |
| 400 | 402 | ||
diff --git a/include/linux/clk.h b/include/linux/clk.h index 778777316ea4..1db9bbf444a3 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h | |||
| @@ -125,4 +125,21 @@ int clk_set_parent(struct clk *clk, struct clk *parent); | |||
| 125 | */ | 125 | */ |
| 126 | struct clk *clk_get_parent(struct clk *clk); | 126 | struct clk *clk_get_parent(struct clk *clk); |
| 127 | 127 | ||
| 128 | /** | ||
| 129 | * clk_get_sys - get a clock based upon the device name | ||
| 130 | * @dev_id: device name | ||
| 131 | * @con_id: connection ID | ||
| 132 | * | ||
| 133 | * Returns a struct clk corresponding to the clock producer, or | ||
| 134 | * valid IS_ERR() condition containing errno. The implementation | ||
| 135 | * uses @dev_id and @con_id to determine the clock consumer, and | ||
| 136 | * thereby the clock producer. In contrast to clk_get() this function | ||
| 137 | * takes the device name instead of the device itself for identification. | ||
| 138 | * | ||
| 139 | * Drivers must assume that the clock source is not enabled. | ||
| 140 | * | ||
| 141 | * clk_get_sys should not be called from within interrupt context. | ||
| 142 | */ | ||
| 143 | struct clk *clk_get_sys(const char *dev_id, const char *con_id); | ||
| 144 | |||
| 128 | #endif | 145 | #endif |
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/cm4000_cs.h b/include/linux/cm4000_cs.h index 605ebe24bb2e..72bfefdbd767 100644 --- a/include/linux/cm4000_cs.h +++ b/include/linux/cm4000_cs.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _CM4000_H_ | 1 | #ifndef _CM4000_H_ |
| 2 | #define _CM4000_H_ | 2 | #define _CM4000_H_ |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | #define MAX_ATR 33 | 6 | #define MAX_ATR 33 |
| 5 | 7 | ||
| 6 | #define CM4000_MAX_DEV 4 | 8 | #define CM4000_MAX_DEV 4 |
| @@ -10,9 +12,9 @@ | |||
| 10 | * not to break compilation of userspace apps. -HW */ | 12 | * not to break compilation of userspace apps. -HW */ |
| 11 | 13 | ||
| 12 | typedef struct atreq { | 14 | typedef struct atreq { |
| 13 | int32_t atr_len; | 15 | __s32 atr_len; |
| 14 | unsigned char atr[64]; | 16 | unsigned char atr[64]; |
| 15 | int32_t power_act; | 17 | __s32 power_act; |
| 16 | unsigned char bIFSD; | 18 | unsigned char bIFSD; |
| 17 | unsigned char bIFSC; | 19 | unsigned char bIFSC; |
| 18 | } atreq_t; | 20 | } atreq_t; |
| @@ -22,13 +24,13 @@ typedef struct atreq { | |||
| 22 | * member sizes. This leads to CONFIG_COMPAT breakage, since 32bit userspace | 24 | * member sizes. This leads to CONFIG_COMPAT breakage, since 32bit userspace |
| 23 | * will lay out the structure members differently than the 64bit kernel. | 25 | * will lay out the structure members differently than the 64bit kernel. |
| 24 | * | 26 | * |
| 25 | * I've changed "ptsreq.protocol" from "unsigned long" to "u_int32_t". | 27 | * I've changed "ptsreq.protocol" from "unsigned long" to "__u32". |
| 26 | * On 32bit this will make no difference. With 64bit kernels, it will make | 28 | * On 32bit this will make no difference. With 64bit kernels, it will make |
| 27 | * 32bit apps work, too. | 29 | * 32bit apps work, too. |
| 28 | */ | 30 | */ |
| 29 | 31 | ||
| 30 | typedef struct ptsreq { | 32 | typedef struct ptsreq { |
| 31 | u_int32_t protocol; /*T=0: 2^0, T=1: 2^1*/ | 33 | __u32 protocol; /*T=0: 2^0, T=1: 2^1*/ |
| 32 | unsigned char flags; | 34 | unsigned char flags; |
| 33 | unsigned char pts1; | 35 | unsigned char pts1; |
| 34 | unsigned char pts2; | 36 | unsigned char pts2; |
diff --git a/include/linux/cn_proc.h b/include/linux/cn_proc.h index 1c86d65bc4b9..b8125b2eb665 100644 --- a/include/linux/cn_proc.h +++ b/include/linux/cn_proc.h | |||
| @@ -65,20 +65,20 @@ struct proc_event { | |||
| 65 | } ack; | 65 | } ack; |
| 66 | 66 | ||
| 67 | struct fork_proc_event { | 67 | struct fork_proc_event { |
| 68 | pid_t parent_pid; | 68 | __kernel_pid_t parent_pid; |
| 69 | pid_t parent_tgid; | 69 | __kernel_pid_t parent_tgid; |
| 70 | pid_t child_pid; | 70 | __kernel_pid_t child_pid; |
| 71 | pid_t child_tgid; | 71 | __kernel_pid_t child_tgid; |
| 72 | } fork; | 72 | } fork; |
| 73 | 73 | ||
| 74 | struct exec_proc_event { | 74 | struct exec_proc_event { |
| 75 | pid_t process_pid; | 75 | __kernel_pid_t process_pid; |
| 76 | pid_t process_tgid; | 76 | __kernel_pid_t process_tgid; |
| 77 | } exec; | 77 | } exec; |
| 78 | 78 | ||
| 79 | struct id_proc_event { | 79 | struct id_proc_event { |
| 80 | pid_t process_pid; | 80 | __kernel_pid_t process_pid; |
| 81 | pid_t process_tgid; | 81 | __kernel_pid_t process_tgid; |
| 82 | union { | 82 | union { |
| 83 | __u32 ruid; /* task uid */ | 83 | __u32 ruid; /* task uid */ |
| 84 | __u32 rgid; /* task gid */ | 84 | __u32 rgid; /* task gid */ |
| @@ -90,8 +90,8 @@ struct proc_event { | |||
| 90 | } id; | 90 | } id; |
| 91 | 91 | ||
| 92 | struct exit_proc_event { | 92 | struct exit_proc_event { |
| 93 | pid_t process_pid; | 93 | __kernel_pid_t process_pid; |
| 94 | pid_t process_tgid; | 94 | __kernel_pid_t process_tgid; |
| 95 | __u32 exit_code, exit_signal; | 95 | __u32 exit_code, exit_signal; |
| 96 | } exit; | 96 | } exit; |
| 97 | } event_data; | 97 | } event_data; |
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/compat.h b/include/linux/compat.h index 3fd2194ff573..b880864672de 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
| @@ -125,6 +125,13 @@ struct compat_dirent { | |||
| 125 | char d_name[256]; | 125 | char d_name[256]; |
| 126 | }; | 126 | }; |
| 127 | 127 | ||
| 128 | struct compat_ustat { | ||
| 129 | compat_daddr_t f_tfree; | ||
| 130 | compat_ino_t f_tinode; | ||
| 131 | char f_fname[6]; | ||
| 132 | char f_fpack[6]; | ||
| 133 | }; | ||
| 134 | |||
| 128 | typedef union compat_sigval { | 135 | typedef union compat_sigval { |
| 129 | compat_int_t sival_int; | 136 | compat_int_t sival_int; |
| 130 | compat_uptr_t sival_ptr; | 137 | compat_uptr_t sival_ptr; |
| @@ -178,6 +185,7 @@ long compat_sys_semtimedop(int semid, struct sembuf __user *tsems, | |||
| 178 | unsigned nsems, const struct compat_timespec __user *timeout); | 185 | unsigned nsems, const struct compat_timespec __user *timeout); |
| 179 | asmlinkage long compat_sys_keyctl(u32 option, | 186 | asmlinkage long compat_sys_keyctl(u32 option, |
| 180 | u32 arg2, u32 arg3, u32 arg4, u32 arg5); | 187 | u32 arg2, u32 arg3, u32 arg4, u32 arg5); |
| 188 | asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user *u32); | ||
| 181 | 189 | ||
| 182 | asmlinkage ssize_t compat_sys_readv(unsigned long fd, | 190 | asmlinkage ssize_t compat_sys_readv(unsigned long fd, |
| 183 | const struct compat_iovec __user *vec, unsigned long vlen); | 191 | const struct compat_iovec __user *vec, unsigned long vlen); |
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index 1514d534deeb..a3ed7cb8ca34 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h | |||
| @@ -52,7 +52,15 @@ | |||
| 52 | #define __deprecated __attribute__((deprecated)) | 52 | #define __deprecated __attribute__((deprecated)) |
| 53 | #define __packed __attribute__((packed)) | 53 | #define __packed __attribute__((packed)) |
| 54 | #define __weak __attribute__((weak)) | 54 | #define __weak __attribute__((weak)) |
| 55 | #define __naked __attribute__((naked)) | 55 | |
| 56 | /* | ||
| 57 | * it doesn't make sense on ARM (currently the only user of __naked) to trace | ||
| 58 | * naked functions because then mcount is called without stack and frame pointer | ||
| 59 | * being set up and there is no chance to restore the lr register to the value | ||
| 60 | * before mcount was called. | ||
| 61 | */ | ||
| 62 | #define __naked __attribute__((naked)) notrace | ||
| 63 | |||
| 56 | #define __noreturn __attribute__((noreturn)) | 64 | #define __noreturn __attribute__((noreturn)) |
| 57 | 65 | ||
| 58 | /* | 66 | /* |
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h index 09992718f9e8..450fa597c94d 100644 --- a/include/linux/compiler-gcc4.h +++ b/include/linux/compiler-gcc4.h | |||
| @@ -3,8 +3,10 @@ | |||
| 3 | #endif | 3 | #endif |
| 4 | 4 | ||
| 5 | /* GCC 4.1.[01] miscompiles __weak */ | 5 | /* GCC 4.1.[01] miscompiles __weak */ |
| 6 | #if __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ <= 1 | 6 | #ifdef __KERNEL__ |
| 7 | # error Your version of gcc miscompiles the __weak directive | 7 | # if __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ <= 1 |
| 8 | # error Your version of gcc miscompiles the __weak directive | ||
| 9 | # endif | ||
| 8 | #endif | 10 | #endif |
| 9 | 11 | ||
| 10 | #define __used __attribute__((__used__)) | 12 | #define __used __attribute__((__used__)) |
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/cyclades.h b/include/linux/cyclades.h index d06fbf286346..788850ba4e75 100644 --- a/include/linux/cyclades.h +++ b/include/linux/cyclades.h | |||
| @@ -82,9 +82,9 @@ struct cyclades_monitor { | |||
| 82 | * open) | 82 | * open) |
| 83 | */ | 83 | */ |
| 84 | struct cyclades_idle_stats { | 84 | struct cyclades_idle_stats { |
| 85 | time_t in_use; /* Time device has been in use (secs) */ | 85 | __kernel_time_t in_use; /* Time device has been in use (secs) */ |
| 86 | time_t recv_idle; /* Time since last char received (secs) */ | 86 | __kernel_time_t recv_idle; /* Time since last char received (secs) */ |
| 87 | time_t xmit_idle; /* Time since last char transmitted (secs) */ | 87 | __kernel_time_t xmit_idle; /* Time since last char transmitted (secs) */ |
| 88 | unsigned long recv_bytes; /* Bytes received */ | 88 | unsigned long recv_bytes; /* Bytes received */ |
| 89 | unsigned long xmit_bytes; /* Bytes transmitted */ | 89 | unsigned long xmit_bytes; /* Bytes transmitted */ |
| 90 | unsigned long overruns; /* Input overruns */ | 90 | unsigned long overruns; /* Input overruns */ |
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/dcache.h b/include/linux/dcache.h index c66d22487bf8..15156364d196 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
| @@ -112,7 +112,7 @@ struct dentry { | |||
| 112 | struct list_head d_subdirs; /* our children */ | 112 | struct list_head d_subdirs; /* our children */ |
| 113 | struct list_head d_alias; /* inode alias list */ | 113 | struct list_head d_alias; /* inode alias list */ |
| 114 | unsigned long d_time; /* used by d_revalidate */ | 114 | unsigned long d_time; /* used by d_revalidate */ |
| 115 | struct dentry_operations *d_op; | 115 | const struct dentry_operations *d_op; |
| 116 | struct super_block *d_sb; /* The root of the dentry tree */ | 116 | struct super_block *d_sb; /* The root of the dentry tree */ |
| 117 | void *d_fsdata; /* fs-specific data */ | 117 | void *d_fsdata; /* fs-specific data */ |
| 118 | 118 | ||
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/dlm_netlink.h b/include/linux/dlm_netlink.h index 19276332707a..647c8ef27227 100644 --- a/include/linux/dlm_netlink.h +++ b/include/linux/dlm_netlink.h | |||
| @@ -9,6 +9,8 @@ | |||
| 9 | #ifndef _DLM_NETLINK_H | 9 | #ifndef _DLM_NETLINK_H |
| 10 | #define _DLM_NETLINK_H | 10 | #define _DLM_NETLINK_H |
| 11 | 11 | ||
| 12 | #include <linux/types.h> | ||
| 13 | |||
| 12 | enum { | 14 | enum { |
| 13 | DLM_STATUS_WAITING = 1, | 15 | DLM_STATUS_WAITING = 1, |
| 14 | DLM_STATUS_GRANTED = 2, | 16 | DLM_STATUS_GRANTED = 2, |
| @@ -18,16 +20,16 @@ enum { | |||
| 18 | #define DLM_LOCK_DATA_VERSION 1 | 20 | #define DLM_LOCK_DATA_VERSION 1 |
| 19 | 21 | ||
| 20 | struct dlm_lock_data { | 22 | struct dlm_lock_data { |
| 21 | uint16_t version; | 23 | __u16 version; |
| 22 | uint32_t lockspace_id; | 24 | __u32 lockspace_id; |
| 23 | int nodeid; | 25 | int nodeid; |
| 24 | int ownpid; | 26 | int ownpid; |
| 25 | uint32_t id; | 27 | __u32 id; |
| 26 | uint32_t remid; | 28 | __u32 remid; |
| 27 | uint64_t xid; | 29 | __u64 xid; |
| 28 | int8_t status; | 30 | __s8 status; |
| 29 | int8_t grmode; | 31 | __s8 grmode; |
| 30 | int8_t rqmode; | 32 | __s8 rqmode; |
| 31 | unsigned long timestamp; | 33 | unsigned long timestamp; |
| 32 | int resource_namelen; | 34 | int resource_namelen; |
| 33 | char resource_name[DLM_RESNAME_MAXLEN]; | 35 | char resource_name[DLM_RESNAME_MAXLEN]; |
diff --git a/include/linux/dm-ioctl.h b/include/linux/dm-ioctl.h index 28c2940eb30d..48e44ee2b466 100644 --- a/include/linux/dm-ioctl.h +++ b/include/linux/dm-ioctl.h | |||
| @@ -113,20 +113,20 @@ struct dm_ioctl { | |||
| 113 | * return -ENOTTY) fill out this field, even if the | 113 | * return -ENOTTY) fill out this field, even if the |
| 114 | * command failed. | 114 | * command failed. |
| 115 | */ | 115 | */ |
| 116 | uint32_t version[3]; /* in/out */ | 116 | __u32 version[3]; /* in/out */ |
| 117 | uint32_t data_size; /* total size of data passed in | 117 | __u32 data_size; /* total size of data passed in |
| 118 | * including this struct */ | 118 | * including this struct */ |
| 119 | 119 | ||
| 120 | uint32_t data_start; /* offset to start of data | 120 | __u32 data_start; /* offset to start of data |
| 121 | * relative to start of this struct */ | 121 | * relative to start of this struct */ |
| 122 | 122 | ||
| 123 | uint32_t target_count; /* in/out */ | 123 | __u32 target_count; /* in/out */ |
| 124 | int32_t open_count; /* out */ | 124 | __s32 open_count; /* out */ |
| 125 | uint32_t flags; /* in/out */ | 125 | __u32 flags; /* in/out */ |
| 126 | uint32_t event_nr; /* in/out */ | 126 | __u32 event_nr; /* in/out */ |
| 127 | uint32_t padding; | 127 | __u32 padding; |
| 128 | 128 | ||
| 129 | uint64_t dev; /* in/out */ | 129 | __u64 dev; /* in/out */ |
| 130 | 130 | ||
| 131 | char name[DM_NAME_LEN]; /* device name */ | 131 | char name[DM_NAME_LEN]; /* device name */ |
| 132 | char uuid[DM_UUID_LEN]; /* unique identifier for | 132 | char uuid[DM_UUID_LEN]; /* unique identifier for |
| @@ -139,9 +139,9 @@ struct dm_ioctl { | |||
| 139 | * dm_ioctl. | 139 | * dm_ioctl. |
| 140 | */ | 140 | */ |
| 141 | struct dm_target_spec { | 141 | struct dm_target_spec { |
| 142 | uint64_t sector_start; | 142 | __u64 sector_start; |
| 143 | uint64_t length; | 143 | __u64 length; |
| 144 | int32_t status; /* used when reading from kernel only */ | 144 | __s32 status; /* used when reading from kernel only */ |
| 145 | 145 | ||
| 146 | /* | 146 | /* |
| 147 | * Location of the next dm_target_spec. | 147 | * Location of the next dm_target_spec. |
| @@ -153,7 +153,7 @@ struct dm_target_spec { | |||
| 153 | * (that follows the dm_ioctl struct) to the start of the "next" | 153 | * (that follows the dm_ioctl struct) to the start of the "next" |
| 154 | * dm_target_spec. | 154 | * dm_target_spec. |
| 155 | */ | 155 | */ |
| 156 | uint32_t next; | 156 | __u32 next; |
| 157 | 157 | ||
| 158 | char target_type[DM_MAX_TYPE_NAME]; | 158 | char target_type[DM_MAX_TYPE_NAME]; |
| 159 | 159 | ||
| @@ -168,17 +168,17 @@ struct dm_target_spec { | |||
| 168 | * Used to retrieve the target dependencies. | 168 | * Used to retrieve the target dependencies. |
| 169 | */ | 169 | */ |
| 170 | struct dm_target_deps { | 170 | struct dm_target_deps { |
| 171 | uint32_t count; /* Array size */ | 171 | __u32 count; /* Array size */ |
| 172 | uint32_t padding; /* unused */ | 172 | __u32 padding; /* unused */ |
| 173 | uint64_t dev[0]; /* out */ | 173 | __u64 dev[0]; /* out */ |
| 174 | }; | 174 | }; |
| 175 | 175 | ||
| 176 | /* | 176 | /* |
| 177 | * Used to get a list of all dm devices. | 177 | * Used to get a list of all dm devices. |
| 178 | */ | 178 | */ |
| 179 | struct dm_name_list { | 179 | struct dm_name_list { |
| 180 | uint64_t dev; | 180 | __u64 dev; |
| 181 | uint32_t next; /* offset to the next record from | 181 | __u32 next; /* offset to the next record from |
| 182 | the _start_ of this */ | 182 | the _start_ of this */ |
| 183 | char name[0]; | 183 | char name[0]; |
| 184 | }; | 184 | }; |
| @@ -187,8 +187,8 @@ struct dm_name_list { | |||
| 187 | * Used to retrieve the target versions | 187 | * Used to retrieve the target versions |
| 188 | */ | 188 | */ |
| 189 | struct dm_target_versions { | 189 | struct dm_target_versions { |
| 190 | uint32_t next; | 190 | __u32 next; |
| 191 | uint32_t version[3]; | 191 | __u32 version[3]; |
| 192 | 192 | ||
| 193 | char name[0]; | 193 | char name[0]; |
| 194 | }; | 194 | }; |
| @@ -197,7 +197,7 @@ struct dm_target_versions { | |||
| 197 | * Used to pass message to a target | 197 | * Used to pass message to a target |
| 198 | */ | 198 | */ |
| 199 | struct dm_target_msg { | 199 | struct dm_target_msg { |
| 200 | uint64_t sector; /* Device sector */ | 200 | __u64 sector; /* Device sector */ |
| 201 | 201 | ||
| 202 | char message[0]; | 202 | char message[0]; |
| 203 | }; | 203 | }; |
diff --git a/include/linux/dma-debug.h b/include/linux/dma-debug.h new file mode 100644 index 000000000000..28d53cb7b5a2 --- /dev/null +++ b/include/linux/dma-debug.h | |||
| @@ -0,0 +1,174 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2008 Advanced Micro Devices, Inc. | ||
| 3 | * | ||
| 4 | * Author: Joerg Roedel <joerg.roedel@amd.com> | ||
| 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 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License | ||
| 16 | * along with this program; if not, write to the Free Software | ||
| 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef __DMA_DEBUG_H | ||
| 21 | #define __DMA_DEBUG_H | ||
| 22 | |||
| 23 | #include <linux/types.h> | ||
| 24 | |||
| 25 | struct device; | ||
| 26 | struct scatterlist; | ||
| 27 | struct bus_type; | ||
| 28 | |||
| 29 | #ifdef CONFIG_DMA_API_DEBUG | ||
| 30 | |||
| 31 | extern void dma_debug_add_bus(struct bus_type *bus); | ||
| 32 | |||
| 33 | extern void dma_debug_init(u32 num_entries); | ||
| 34 | |||
| 35 | extern void debug_dma_map_page(struct device *dev, struct page *page, | ||
| 36 | size_t offset, size_t size, | ||
| 37 | int direction, dma_addr_t dma_addr, | ||
| 38 | bool map_single); | ||
| 39 | |||
| 40 | extern void debug_dma_unmap_page(struct device *dev, dma_addr_t addr, | ||
| 41 | size_t size, int direction, bool map_single); | ||
| 42 | |||
| 43 | extern void debug_dma_map_sg(struct device *dev, struct scatterlist *sg, | ||
| 44 | int nents, int mapped_ents, int direction); | ||
| 45 | |||
| 46 | extern void debug_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, | ||
| 47 | int nelems, int dir); | ||
| 48 | |||
| 49 | extern void debug_dma_alloc_coherent(struct device *dev, size_t size, | ||
| 50 | dma_addr_t dma_addr, void *virt); | ||
| 51 | |||
| 52 | extern void debug_dma_free_coherent(struct device *dev, size_t size, | ||
| 53 | void *virt, dma_addr_t addr); | ||
| 54 | |||
| 55 | extern void debug_dma_sync_single_for_cpu(struct device *dev, | ||
| 56 | dma_addr_t dma_handle, size_t size, | ||
| 57 | int direction); | ||
| 58 | |||
| 59 | extern void debug_dma_sync_single_for_device(struct device *dev, | ||
| 60 | dma_addr_t dma_handle, | ||
| 61 | size_t size, int direction); | ||
| 62 | |||
| 63 | extern void debug_dma_sync_single_range_for_cpu(struct device *dev, | ||
| 64 | dma_addr_t dma_handle, | ||
| 65 | unsigned long offset, | ||
| 66 | size_t size, | ||
| 67 | int direction); | ||
| 68 | |||
| 69 | extern void debug_dma_sync_single_range_for_device(struct device *dev, | ||
| 70 | dma_addr_t dma_handle, | ||
| 71 | unsigned long offset, | ||
| 72 | size_t size, int direction); | ||
| 73 | |||
| 74 | extern void debug_dma_sync_sg_for_cpu(struct device *dev, | ||
| 75 | struct scatterlist *sg, | ||
| 76 | int nelems, int direction); | ||
| 77 | |||
| 78 | extern void debug_dma_sync_sg_for_device(struct device *dev, | ||
| 79 | struct scatterlist *sg, | ||
| 80 | int nelems, int direction); | ||
| 81 | |||
| 82 | extern void debug_dma_dump_mappings(struct device *dev); | ||
| 83 | |||
| 84 | #else /* CONFIG_DMA_API_DEBUG */ | ||
| 85 | |||
| 86 | static inline void dma_debug_add_bus(struct bus_type *bus) | ||
| 87 | { | ||
| 88 | } | ||
| 89 | |||
| 90 | static inline void dma_debug_init(u32 num_entries) | ||
| 91 | { | ||
| 92 | } | ||
| 93 | |||
| 94 | static inline void debug_dma_map_page(struct device *dev, struct page *page, | ||
| 95 | size_t offset, size_t size, | ||
| 96 | int direction, dma_addr_t dma_addr, | ||
| 97 | bool map_single) | ||
| 98 | { | ||
| 99 | } | ||
| 100 | |||
| 101 | static inline void debug_dma_unmap_page(struct device *dev, dma_addr_t addr, | ||
| 102 | size_t size, int direction, | ||
| 103 | bool map_single) | ||
| 104 | { | ||
| 105 | } | ||
| 106 | |||
| 107 | static inline void debug_dma_map_sg(struct device *dev, struct scatterlist *sg, | ||
| 108 | int nents, int mapped_ents, int direction) | ||
| 109 | { | ||
| 110 | } | ||
| 111 | |||
| 112 | static inline void debug_dma_unmap_sg(struct device *dev, | ||
| 113 | struct scatterlist *sglist, | ||
| 114 | int nelems, int dir) | ||
| 115 | { | ||
| 116 | } | ||
| 117 | |||
| 118 | static inline void debug_dma_alloc_coherent(struct device *dev, size_t size, | ||
| 119 | dma_addr_t dma_addr, void *virt) | ||
| 120 | { | ||
| 121 | } | ||
| 122 | |||
| 123 | static inline void debug_dma_free_coherent(struct device *dev, size_t size, | ||
| 124 | void *virt, dma_addr_t addr) | ||
| 125 | { | ||
| 126 | } | ||
| 127 | |||
| 128 | static inline void debug_dma_sync_single_for_cpu(struct device *dev, | ||
| 129 | dma_addr_t dma_handle, | ||
| 130 | size_t size, int direction) | ||
| 131 | { | ||
| 132 | } | ||
| 133 | |||
| 134 | static inline void debug_dma_sync_single_for_device(struct device *dev, | ||
| 135 | dma_addr_t dma_handle, | ||
| 136 | size_t size, int direction) | ||
| 137 | { | ||
| 138 | } | ||
| 139 | |||
| 140 | static inline void debug_dma_sync_single_range_for_cpu(struct device *dev, | ||
| 141 | dma_addr_t dma_handle, | ||
| 142 | unsigned long offset, | ||
| 143 | size_t size, | ||
| 144 | int direction) | ||
| 145 | { | ||
| 146 | } | ||
| 147 | |||
| 148 | static inline void debug_dma_sync_single_range_for_device(struct device *dev, | ||
| 149 | dma_addr_t dma_handle, | ||
| 150 | unsigned long offset, | ||
| 151 | size_t size, | ||
| 152 | int direction) | ||
| 153 | { | ||
| 154 | } | ||
| 155 | |||
| 156 | static inline void debug_dma_sync_sg_for_cpu(struct device *dev, | ||
| 157 | struct scatterlist *sg, | ||
| 158 | int nelems, int direction) | ||
| 159 | { | ||
| 160 | } | ||
| 161 | |||
| 162 | static inline void debug_dma_sync_sg_for_device(struct device *dev, | ||
| 163 | struct scatterlist *sg, | ||
| 164 | int nelems, int direction) | ||
| 165 | { | ||
| 166 | } | ||
| 167 | |||
| 168 | static inline void debug_dma_dump_mappings(struct device *dev) | ||
| 169 | { | ||
| 170 | } | ||
| 171 | |||
| 172 | #endif /* CONFIG_DMA_API_DEBUG */ | ||
| 173 | |||
| 174 | #endif /* __DMA_DEBUG_H */ | ||
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index ba9114ec5d3a..d7d090d21031 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h | |||
| @@ -3,6 +3,8 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/device.h> | 4 | #include <linux/device.h> |
| 5 | #include <linux/err.h> | 5 | #include <linux/err.h> |
| 6 | #include <linux/dma-attrs.h> | ||
| 7 | #include <linux/scatterlist.h> | ||
| 6 | 8 | ||
| 7 | /* These definitions mirror those in pci.h, so they can be used | 9 | /* These definitions mirror those in pci.h, so they can be used |
| 8 | * interchangeably with their PCI_ counterparts */ | 10 | * interchangeably with their PCI_ counterparts */ |
| @@ -13,6 +15,52 @@ enum dma_data_direction { | |||
| 13 | DMA_NONE = 3, | 15 | DMA_NONE = 3, |
| 14 | }; | 16 | }; |
| 15 | 17 | ||
| 18 | struct dma_map_ops { | ||
| 19 | void* (*alloc_coherent)(struct device *dev, size_t size, | ||
| 20 | dma_addr_t *dma_handle, gfp_t gfp); | ||
| 21 | void (*free_coherent)(struct device *dev, size_t size, | ||
| 22 | void *vaddr, dma_addr_t dma_handle); | ||
| 23 | dma_addr_t (*map_page)(struct device *dev, struct page *page, | ||
| 24 | unsigned long offset, size_t size, | ||
| 25 | enum dma_data_direction dir, | ||
| 26 | struct dma_attrs *attrs); | ||
| 27 | void (*unmap_page)(struct device *dev, dma_addr_t dma_handle, | ||
| 28 | size_t size, enum dma_data_direction dir, | ||
| 29 | struct dma_attrs *attrs); | ||
| 30 | int (*map_sg)(struct device *dev, struct scatterlist *sg, | ||
| 31 | int nents, enum dma_data_direction dir, | ||
| 32 | struct dma_attrs *attrs); | ||
| 33 | void (*unmap_sg)(struct device *dev, | ||
| 34 | struct scatterlist *sg, int nents, | ||
| 35 | enum dma_data_direction dir, | ||
| 36 | struct dma_attrs *attrs); | ||
| 37 | void (*sync_single_for_cpu)(struct device *dev, | ||
| 38 | dma_addr_t dma_handle, size_t size, | ||
| 39 | enum dma_data_direction dir); | ||
| 40 | void (*sync_single_for_device)(struct device *dev, | ||
| 41 | dma_addr_t dma_handle, size_t size, | ||
| 42 | enum dma_data_direction dir); | ||
| 43 | void (*sync_single_range_for_cpu)(struct device *dev, | ||
| 44 | dma_addr_t dma_handle, | ||
| 45 | unsigned long offset, | ||
| 46 | size_t size, | ||
| 47 | enum dma_data_direction dir); | ||
| 48 | void (*sync_single_range_for_device)(struct device *dev, | ||
| 49 | dma_addr_t dma_handle, | ||
| 50 | unsigned long offset, | ||
| 51 | size_t size, | ||
| 52 | enum dma_data_direction dir); | ||
| 53 | void (*sync_sg_for_cpu)(struct device *dev, | ||
| 54 | struct scatterlist *sg, int nents, | ||
| 55 | enum dma_data_direction dir); | ||
| 56 | void (*sync_sg_for_device)(struct device *dev, | ||
| 57 | struct scatterlist *sg, int nents, | ||
| 58 | enum dma_data_direction dir); | ||
| 59 | int (*mapping_error)(struct device *dev, dma_addr_t dma_addr); | ||
| 60 | int (*dma_supported)(struct device *dev, u64 mask); | ||
| 61 | int is_phys; | ||
| 62 | }; | ||
| 63 | |||
| 16 | #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1)) | 64 | #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1)) |
| 17 | 65 | ||
| 18 | /* | 66 | /* |
diff --git a/include/linux/dmar.h b/include/linux/dmar.h index f28440784cf0..2f3427468956 100644 --- a/include/linux/dmar.h +++ b/include/linux/dmar.h | |||
| @@ -24,10 +24,10 @@ | |||
| 24 | #include <linux/acpi.h> | 24 | #include <linux/acpi.h> |
| 25 | #include <linux/types.h> | 25 | #include <linux/types.h> |
| 26 | #include <linux/msi.h> | 26 | #include <linux/msi.h> |
| 27 | #include <linux/irqreturn.h> | ||
| 27 | 28 | ||
| 28 | #if defined(CONFIG_DMAR) || defined(CONFIG_INTR_REMAP) | ||
| 29 | struct intel_iommu; | 29 | struct intel_iommu; |
| 30 | 30 | #if defined(CONFIG_DMAR) || defined(CONFIG_INTR_REMAP) | |
| 31 | struct dmar_drhd_unit { | 31 | struct dmar_drhd_unit { |
| 32 | struct list_head list; /* list of drhd units */ | 32 | struct list_head list; /* list of drhd units */ |
| 33 | struct acpi_dmar_header *hdr; /* ACPI header */ | 33 | struct acpi_dmar_header *hdr; /* ACPI header */ |
| @@ -49,7 +49,7 @@ extern int dmar_dev_scope_init(void); | |||
| 49 | 49 | ||
| 50 | /* Intel IOMMU detection */ | 50 | /* Intel IOMMU detection */ |
| 51 | extern void detect_intel_iommu(void); | 51 | extern void detect_intel_iommu(void); |
| 52 | 52 | extern int enable_drhd_fault_handling(void); | |
| 53 | 53 | ||
| 54 | extern int parse_ioapics_under_ir(void); | 54 | extern int parse_ioapics_under_ir(void); |
| 55 | extern int alloc_iommu(struct dmar_drhd_unit *); | 55 | extern int alloc_iommu(struct dmar_drhd_unit *); |
| @@ -63,12 +63,12 @@ static inline int dmar_table_init(void) | |||
| 63 | { | 63 | { |
| 64 | return -ENODEV; | 64 | return -ENODEV; |
| 65 | } | 65 | } |
| 66 | static inline int enable_drhd_fault_handling(void) | ||
| 67 | { | ||
| 68 | return -1; | ||
| 69 | } | ||
| 66 | #endif /* !CONFIG_DMAR && !CONFIG_INTR_REMAP */ | 70 | #endif /* !CONFIG_DMAR && !CONFIG_INTR_REMAP */ |
| 67 | 71 | ||
| 68 | #ifdef CONFIG_INTR_REMAP | ||
| 69 | extern int intr_remapping_enabled; | ||
| 70 | extern int enable_intr_remapping(int); | ||
| 71 | |||
| 72 | struct irte { | 72 | struct irte { |
| 73 | union { | 73 | union { |
| 74 | struct { | 74 | struct { |
| @@ -97,6 +97,10 @@ struct irte { | |||
| 97 | __u64 high; | 97 | __u64 high; |
| 98 | }; | 98 | }; |
| 99 | }; | 99 | }; |
| 100 | #ifdef CONFIG_INTR_REMAP | ||
| 101 | extern int intr_remapping_enabled; | ||
| 102 | extern int enable_intr_remapping(int); | ||
| 103 | |||
| 100 | extern int get_irte(int irq, struct irte *entry); | 104 | extern int get_irte(int irq, struct irte *entry); |
| 101 | extern int modify_irte(int irq, struct irte *irte_modified); | 105 | extern int modify_irte(int irq, struct irte *irte_modified); |
| 102 | extern int alloc_irte(struct intel_iommu *iommu, int irq, u16 count); | 106 | extern int alloc_irte(struct intel_iommu *iommu, int irq, u16 count); |
| @@ -111,14 +115,40 @@ extern int irq_remapped(int irq); | |||
| 111 | extern struct intel_iommu *map_dev_to_ir(struct pci_dev *dev); | 115 | extern struct intel_iommu *map_dev_to_ir(struct pci_dev *dev); |
| 112 | extern struct intel_iommu *map_ioapic_to_ir(int apic); | 116 | extern struct intel_iommu *map_ioapic_to_ir(int apic); |
| 113 | #else | 117 | #else |
| 118 | static inline int alloc_irte(struct intel_iommu *iommu, int irq, u16 count) | ||
| 119 | { | ||
| 120 | return -1; | ||
| 121 | } | ||
| 122 | static inline int modify_irte(int irq, struct irte *irte_modified) | ||
| 123 | { | ||
| 124 | return -1; | ||
| 125 | } | ||
| 126 | static inline int free_irte(int irq) | ||
| 127 | { | ||
| 128 | return -1; | ||
| 129 | } | ||
| 130 | static inline int map_irq_to_irte_handle(int irq, u16 *sub_handle) | ||
| 131 | { | ||
| 132 | return -1; | ||
| 133 | } | ||
| 134 | static inline int set_irte_irq(int irq, struct intel_iommu *iommu, u16 index, | ||
| 135 | u16 sub_handle) | ||
| 136 | { | ||
| 137 | return -1; | ||
| 138 | } | ||
| 139 | static inline struct intel_iommu *map_dev_to_ir(struct pci_dev *dev) | ||
| 140 | { | ||
| 141 | return NULL; | ||
| 142 | } | ||
| 143 | static inline struct intel_iommu *map_ioapic_to_ir(int apic) | ||
| 144 | { | ||
| 145 | return NULL; | ||
| 146 | } | ||
| 114 | #define irq_remapped(irq) (0) | 147 | #define irq_remapped(irq) (0) |
| 115 | #define enable_intr_remapping(mode) (-1) | 148 | #define enable_intr_remapping(mode) (-1) |
| 116 | #define intr_remapping_enabled (0) | 149 | #define intr_remapping_enabled (0) |
| 117 | #endif | 150 | #endif |
| 118 | 151 | ||
| 119 | #ifdef CONFIG_DMAR | ||
| 120 | extern const char *dmar_get_fault_reason(u8 fault_reason); | ||
| 121 | |||
| 122 | /* Can't use the common MSI interrupt functions | 152 | /* Can't use the common MSI interrupt functions |
| 123 | * since DMAR is not a pci device | 153 | * since DMAR is not a pci device |
| 124 | */ | 154 | */ |
| @@ -127,8 +157,10 @@ extern void dmar_msi_mask(unsigned int irq); | |||
| 127 | extern void dmar_msi_read(int irq, struct msi_msg *msg); | 157 | extern void dmar_msi_read(int irq, struct msi_msg *msg); |
| 128 | extern void dmar_msi_write(int irq, struct msi_msg *msg); | 158 | extern void dmar_msi_write(int irq, struct msi_msg *msg); |
| 129 | extern int dmar_set_interrupt(struct intel_iommu *iommu); | 159 | extern int dmar_set_interrupt(struct intel_iommu *iommu); |
| 160 | extern irqreturn_t dmar_fault(int irq, void *dev_id); | ||
| 130 | extern int arch_setup_dmar_msi(unsigned int irq); | 161 | extern int arch_setup_dmar_msi(unsigned int irq); |
| 131 | 162 | ||
| 163 | #ifdef CONFIG_DMAR | ||
| 132 | extern int iommu_detected, no_iommu; | 164 | extern int iommu_detected, no_iommu; |
| 133 | extern struct list_head dmar_rmrr_units; | 165 | extern struct list_head dmar_rmrr_units; |
| 134 | struct dmar_rmrr_unit { | 166 | struct dmar_rmrr_unit { |
diff --git a/include/linux/dvb/audio.h b/include/linux/dvb/audio.h index bb0df2aaebfa..fec66bd24f22 100644 --- a/include/linux/dvb/audio.h +++ b/include/linux/dvb/audio.h | |||
| @@ -76,7 +76,7 @@ struct audio_karaoke{ /* if Vocal1 or Vocal2 are non-zero, they get mixed */ | |||
| 76 | } audio_karaoke_t; /* into left and right */ | 76 | } audio_karaoke_t; /* into left and right */ |
| 77 | 77 | ||
| 78 | 78 | ||
| 79 | typedef uint16_t audio_attributes_t; | 79 | typedef __u16 audio_attributes_t; |
| 80 | /* bits: descr. */ | 80 | /* bits: descr. */ |
| 81 | /* 15-13 audio coding mode (0=ac3, 2=mpeg1, 3=mpeg2ext, 4=LPCM, 6=DTS, */ | 81 | /* 15-13 audio coding mode (0=ac3, 2=mpeg1, 3=mpeg2ext, 4=LPCM, 6=DTS, */ |
| 82 | /* 12 multichannel extension */ | 82 | /* 12 multichannel extension */ |
diff --git a/include/linux/dvb/video.h b/include/linux/dvb/video.h index bd49c3ebf916..1d750c0fd86e 100644 --- a/include/linux/dvb/video.h +++ b/include/linux/dvb/video.h | |||
| @@ -132,12 +132,12 @@ struct video_command { | |||
| 132 | #define VIDEO_VSYNC_FIELD_PROGRESSIVE (3) | 132 | #define VIDEO_VSYNC_FIELD_PROGRESSIVE (3) |
| 133 | 133 | ||
| 134 | struct video_event { | 134 | struct video_event { |
| 135 | int32_t type; | 135 | __s32 type; |
| 136 | #define VIDEO_EVENT_SIZE_CHANGED 1 | 136 | #define VIDEO_EVENT_SIZE_CHANGED 1 |
| 137 | #define VIDEO_EVENT_FRAME_RATE_CHANGED 2 | 137 | #define VIDEO_EVENT_FRAME_RATE_CHANGED 2 |
| 138 | #define VIDEO_EVENT_DECODER_STOPPED 3 | 138 | #define VIDEO_EVENT_DECODER_STOPPED 3 |
| 139 | #define VIDEO_EVENT_VSYNC 4 | 139 | #define VIDEO_EVENT_VSYNC 4 |
| 140 | time_t timestamp; | 140 | __kernel_time_t timestamp; |
| 141 | union { | 141 | union { |
| 142 | video_size_t size; | 142 | video_size_t size; |
| 143 | unsigned int frame_rate; /* in frames per 1000sec */ | 143 | unsigned int frame_rate; /* in frames per 1000sec */ |
| @@ -157,25 +157,25 @@ struct video_status { | |||
| 157 | 157 | ||
| 158 | struct video_still_picture { | 158 | struct video_still_picture { |
| 159 | char __user *iFrame; /* pointer to a single iframe in memory */ | 159 | char __user *iFrame; /* pointer to a single iframe in memory */ |
| 160 | int32_t size; | 160 | __s32 size; |
| 161 | }; | 161 | }; |
| 162 | 162 | ||
| 163 | 163 | ||
| 164 | typedef | 164 | typedef |
| 165 | struct video_highlight { | 165 | struct video_highlight { |
| 166 | int active; /* 1=show highlight, 0=hide highlight */ | 166 | int active; /* 1=show highlight, 0=hide highlight */ |
| 167 | uint8_t contrast1; /* 7- 4 Pattern pixel contrast */ | 167 | __u8 contrast1; /* 7- 4 Pattern pixel contrast */ |
| 168 | /* 3- 0 Background pixel contrast */ | 168 | /* 3- 0 Background pixel contrast */ |
| 169 | uint8_t contrast2; /* 7- 4 Emphasis pixel-2 contrast */ | 169 | __u8 contrast2; /* 7- 4 Emphasis pixel-2 contrast */ |
| 170 | /* 3- 0 Emphasis pixel-1 contrast */ | 170 | /* 3- 0 Emphasis pixel-1 contrast */ |
| 171 | uint8_t color1; /* 7- 4 Pattern pixel color */ | 171 | __u8 color1; /* 7- 4 Pattern pixel color */ |
| 172 | /* 3- 0 Background pixel color */ | 172 | /* 3- 0 Background pixel color */ |
| 173 | uint8_t color2; /* 7- 4 Emphasis pixel-2 color */ | 173 | __u8 color2; /* 7- 4 Emphasis pixel-2 color */ |
| 174 | /* 3- 0 Emphasis pixel-1 color */ | 174 | /* 3- 0 Emphasis pixel-1 color */ |
| 175 | uint32_t ypos; /* 23-22 auto action mode */ | 175 | __u32 ypos; /* 23-22 auto action mode */ |
| 176 | /* 21-12 start y */ | 176 | /* 21-12 start y */ |
| 177 | /* 9- 0 end y */ | 177 | /* 9- 0 end y */ |
| 178 | uint32_t xpos; /* 23-22 button color number */ | 178 | __u32 xpos; /* 23-22 button color number */ |
| 179 | /* 21-12 start x */ | 179 | /* 21-12 start x */ |
| 180 | /* 9- 0 end x */ | 180 | /* 9- 0 end x */ |
| 181 | } video_highlight_t; | 181 | } video_highlight_t; |
| @@ -189,17 +189,17 @@ typedef struct video_spu { | |||
| 189 | 189 | ||
| 190 | typedef struct video_spu_palette { /* SPU Palette information */ | 190 | typedef struct video_spu_palette { /* SPU Palette information */ |
| 191 | int length; | 191 | int length; |
| 192 | uint8_t __user *palette; | 192 | __u8 __user *palette; |
| 193 | } video_spu_palette_t; | 193 | } video_spu_palette_t; |
| 194 | 194 | ||
| 195 | 195 | ||
| 196 | typedef struct video_navi_pack { | 196 | typedef struct video_navi_pack { |
| 197 | int length; /* 0 ... 1024 */ | 197 | int length; /* 0 ... 1024 */ |
| 198 | uint8_t data[1024]; | 198 | __u8 data[1024]; |
| 199 | } video_navi_pack_t; | 199 | } video_navi_pack_t; |
| 200 | 200 | ||
| 201 | 201 | ||
| 202 | typedef uint16_t video_attributes_t; | 202 | typedef __u16 video_attributes_t; |
| 203 | /* bits: descr. */ | 203 | /* bits: descr. */ |
| 204 | /* 15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) */ | 204 | /* 15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) */ |
| 205 | /* 13-12 TV system (0=525/60, 1=625/50) */ | 205 | /* 13-12 TV system (0=525/60, 1=625/50) */ |
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/eventpoll.h b/include/linux/eventpoll.h index f1e1d3c47125..f6856a5a1d4b 100644 --- a/include/linux/eventpoll.h +++ b/include/linux/eventpoll.h | |||
| @@ -61,7 +61,6 @@ struct file; | |||
| 61 | static inline void eventpoll_init_file(struct file *file) | 61 | static inline void eventpoll_init_file(struct file *file) |
| 62 | { | 62 | { |
| 63 | INIT_LIST_HEAD(&file->f_ep_links); | 63 | INIT_LIST_HEAD(&file->f_ep_links); |
| 64 | spin_lock_init(&file->f_ep_lock); | ||
| 65 | } | 64 | } |
| 66 | 65 | ||
| 67 | 66 | ||
diff --git a/include/linux/firewire-cdev.h b/include/linux/firewire-cdev.h index 4d078e99c017..c6b3ca3af6df 100644 --- a/include/linux/firewire-cdev.h +++ b/include/linux/firewire-cdev.h | |||
| @@ -25,10 +25,12 @@ | |||
| 25 | #include <linux/types.h> | 25 | #include <linux/types.h> |
| 26 | #include <linux/firewire-constants.h> | 26 | #include <linux/firewire-constants.h> |
| 27 | 27 | ||
| 28 | #define FW_CDEV_EVENT_BUS_RESET 0x00 | 28 | #define FW_CDEV_EVENT_BUS_RESET 0x00 |
| 29 | #define FW_CDEV_EVENT_RESPONSE 0x01 | 29 | #define FW_CDEV_EVENT_RESPONSE 0x01 |
| 30 | #define FW_CDEV_EVENT_REQUEST 0x02 | 30 | #define FW_CDEV_EVENT_REQUEST 0x02 |
| 31 | #define FW_CDEV_EVENT_ISO_INTERRUPT 0x03 | 31 | #define FW_CDEV_EVENT_ISO_INTERRUPT 0x03 |
| 32 | #define FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED 0x04 | ||
| 33 | #define FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED 0x05 | ||
| 32 | 34 | ||
| 33 | /** | 35 | /** |
| 34 | * struct fw_cdev_event_common - Common part of all fw_cdev_event_ types | 36 | * struct fw_cdev_event_common - Common part of all fw_cdev_event_ types |
| @@ -136,7 +138,24 @@ struct fw_cdev_event_request { | |||
| 136 | * This event is sent when the controller has completed an &fw_cdev_iso_packet | 138 | * This event is sent when the controller has completed an &fw_cdev_iso_packet |
| 137 | * with the %FW_CDEV_ISO_INTERRUPT bit set. In the receive case, the headers | 139 | * with the %FW_CDEV_ISO_INTERRUPT bit set. In the receive case, the headers |
| 138 | * stripped of all packets up until and including the interrupt packet are | 140 | * stripped of all packets up until and including the interrupt packet are |
| 139 | * returned in the @header field. | 141 | * returned in the @header field. The amount of header data per packet is as |
| 142 | * specified at iso context creation by &fw_cdev_create_iso_context.header_size. | ||
| 143 | * | ||
| 144 | * In version 1 of this ABI, header data consisted of the 1394 isochronous | ||
| 145 | * packet header, followed by quadlets from the packet payload if | ||
| 146 | * &fw_cdev_create_iso_context.header_size > 4. | ||
| 147 | * | ||
| 148 | * In version 2 of this ABI, header data consist of the 1394 isochronous | ||
| 149 | * packet header, followed by a timestamp quadlet if | ||
| 150 | * &fw_cdev_create_iso_context.header_size > 4, followed by quadlets from the | ||
| 151 | * packet payload if &fw_cdev_create_iso_context.header_size > 8. | ||
| 152 | * | ||
| 153 | * Behaviour of ver. 1 of this ABI is no longer available since ABI ver. 2. | ||
| 154 | * | ||
| 155 | * Format of 1394 iso packet header: 16 bits len, 2 bits tag, 6 bits channel, | ||
| 156 | * 4 bits tcode, 4 bits sy, in big endian byte order. Format of timestamp: | ||
| 157 | * 16 bits invalid, 3 bits cycleSeconds, 13 bits cycleCount, in big endian byte | ||
| 158 | * order. | ||
| 140 | */ | 159 | */ |
| 141 | struct fw_cdev_event_iso_interrupt { | 160 | struct fw_cdev_event_iso_interrupt { |
| 142 | __u64 closure; | 161 | __u64 closure; |
| @@ -147,12 +166,44 @@ struct fw_cdev_event_iso_interrupt { | |||
| 147 | }; | 166 | }; |
| 148 | 167 | ||
| 149 | /** | 168 | /** |
| 169 | * struct fw_cdev_event_iso_resource - Iso resources were allocated or freed | ||
| 170 | * @closure: See &fw_cdev_event_common; | ||
| 171 | * set by %FW_CDEV_IOC_(DE)ALLOCATE_ISO_RESOURCE(_ONCE) ioctl | ||
| 172 | * @type: %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED or | ||
| 173 | * %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED | ||
| 174 | * @handle: Reference by which an allocated resource can be deallocated | ||
| 175 | * @channel: Isochronous channel which was (de)allocated, if any | ||
| 176 | * @bandwidth: Bandwidth allocation units which were (de)allocated, if any | ||
| 177 | * | ||
| 178 | * An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED event is sent after an isochronous | ||
| 179 | * resource was allocated at the IRM. The client has to check @channel and | ||
| 180 | * @bandwidth for whether the allocation actually succeeded. | ||
| 181 | * | ||
| 182 | * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event is sent after an isochronous | ||
| 183 | * resource was deallocated at the IRM. It is also sent when automatic | ||
| 184 | * reallocation after a bus reset failed. | ||
| 185 | * | ||
| 186 | * @channel is <0 if no channel was (de)allocated or if reallocation failed. | ||
| 187 | * @bandwidth is 0 if no bandwidth was (de)allocated or if reallocation failed. | ||
| 188 | */ | ||
| 189 | struct fw_cdev_event_iso_resource { | ||
| 190 | __u64 closure; | ||
| 191 | __u32 type; | ||
| 192 | __u32 handle; | ||
| 193 | __s32 channel; | ||
| 194 | __s32 bandwidth; | ||
| 195 | }; | ||
| 196 | |||
| 197 | /** | ||
| 150 | * union fw_cdev_event - Convenience union of fw_cdev_event_ types | 198 | * union fw_cdev_event - Convenience union of fw_cdev_event_ types |
| 151 | * @common: Valid for all types | 199 | * @common: Valid for all types |
| 152 | * @bus_reset: Valid if @common.type == %FW_CDEV_EVENT_BUS_RESET | 200 | * @bus_reset: Valid if @common.type == %FW_CDEV_EVENT_BUS_RESET |
| 153 | * @response: Valid if @common.type == %FW_CDEV_EVENT_RESPONSE | 201 | * @response: Valid if @common.type == %FW_CDEV_EVENT_RESPONSE |
| 154 | * @request: Valid if @common.type == %FW_CDEV_EVENT_REQUEST | 202 | * @request: Valid if @common.type == %FW_CDEV_EVENT_REQUEST |
| 155 | * @iso_interrupt: Valid if @common.type == %FW_CDEV_EVENT_ISO_INTERRUPT | 203 | * @iso_interrupt: Valid if @common.type == %FW_CDEV_EVENT_ISO_INTERRUPT |
| 204 | * @iso_resource: Valid if @common.type == | ||
| 205 | * %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED or | ||
| 206 | * %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED | ||
| 156 | * | 207 | * |
| 157 | * Convenience union for userspace use. Events could be read(2) into an | 208 | * Convenience union for userspace use. Events could be read(2) into an |
| 158 | * appropriately aligned char buffer and then cast to this union for further | 209 | * appropriately aligned char buffer and then cast to this union for further |
| @@ -163,33 +214,47 @@ struct fw_cdev_event_iso_interrupt { | |||
| 163 | * not fit will be discarded so that the next read(2) will return a new event. | 214 | * not fit will be discarded so that the next read(2) will return a new event. |
| 164 | */ | 215 | */ |
| 165 | union fw_cdev_event { | 216 | union fw_cdev_event { |
| 166 | struct fw_cdev_event_common common; | 217 | struct fw_cdev_event_common common; |
| 167 | struct fw_cdev_event_bus_reset bus_reset; | 218 | struct fw_cdev_event_bus_reset bus_reset; |
| 168 | struct fw_cdev_event_response response; | 219 | struct fw_cdev_event_response response; |
| 169 | struct fw_cdev_event_request request; | 220 | struct fw_cdev_event_request request; |
| 170 | struct fw_cdev_event_iso_interrupt iso_interrupt; | 221 | struct fw_cdev_event_iso_interrupt iso_interrupt; |
| 222 | struct fw_cdev_event_iso_resource iso_resource; | ||
| 171 | }; | 223 | }; |
| 172 | 224 | ||
| 173 | #define FW_CDEV_IOC_GET_INFO _IOWR('#', 0x00, struct fw_cdev_get_info) | 225 | /* available since kernel version 2.6.22 */ |
| 174 | #define FW_CDEV_IOC_SEND_REQUEST _IOW('#', 0x01, struct fw_cdev_send_request) | 226 | #define FW_CDEV_IOC_GET_INFO _IOWR('#', 0x00, struct fw_cdev_get_info) |
| 175 | #define FW_CDEV_IOC_ALLOCATE _IOWR('#', 0x02, struct fw_cdev_allocate) | 227 | #define FW_CDEV_IOC_SEND_REQUEST _IOW('#', 0x01, struct fw_cdev_send_request) |
| 176 | #define FW_CDEV_IOC_DEALLOCATE _IOW('#', 0x03, struct fw_cdev_deallocate) | 228 | #define FW_CDEV_IOC_ALLOCATE _IOWR('#', 0x02, struct fw_cdev_allocate) |
| 177 | #define FW_CDEV_IOC_SEND_RESPONSE _IOW('#', 0x04, struct fw_cdev_send_response) | 229 | #define FW_CDEV_IOC_DEALLOCATE _IOW('#', 0x03, struct fw_cdev_deallocate) |
| 178 | #define FW_CDEV_IOC_INITIATE_BUS_RESET _IOW('#', 0x05, struct fw_cdev_initiate_bus_reset) | 230 | #define FW_CDEV_IOC_SEND_RESPONSE _IOW('#', 0x04, struct fw_cdev_send_response) |
| 179 | #define FW_CDEV_IOC_ADD_DESCRIPTOR _IOWR('#', 0x06, struct fw_cdev_add_descriptor) | 231 | #define FW_CDEV_IOC_INITIATE_BUS_RESET _IOW('#', 0x05, struct fw_cdev_initiate_bus_reset) |
| 180 | #define FW_CDEV_IOC_REMOVE_DESCRIPTOR _IOW('#', 0x07, struct fw_cdev_remove_descriptor) | 232 | #define FW_CDEV_IOC_ADD_DESCRIPTOR _IOWR('#', 0x06, struct fw_cdev_add_descriptor) |
| 233 | #define FW_CDEV_IOC_REMOVE_DESCRIPTOR _IOW('#', 0x07, struct fw_cdev_remove_descriptor) | ||
| 234 | #define FW_CDEV_IOC_CREATE_ISO_CONTEXT _IOWR('#', 0x08, struct fw_cdev_create_iso_context) | ||
| 235 | #define FW_CDEV_IOC_QUEUE_ISO _IOWR('#', 0x09, struct fw_cdev_queue_iso) | ||
| 236 | #define FW_CDEV_IOC_START_ISO _IOW('#', 0x0a, struct fw_cdev_start_iso) | ||
| 237 | #define FW_CDEV_IOC_STOP_ISO _IOW('#', 0x0b, struct fw_cdev_stop_iso) | ||
| 181 | 238 | ||
| 182 | #define FW_CDEV_IOC_CREATE_ISO_CONTEXT _IOWR('#', 0x08, struct fw_cdev_create_iso_context) | 239 | /* available since kernel version 2.6.24 */ |
| 183 | #define FW_CDEV_IOC_QUEUE_ISO _IOWR('#', 0x09, struct fw_cdev_queue_iso) | 240 | #define FW_CDEV_IOC_GET_CYCLE_TIMER _IOR('#', 0x0c, struct fw_cdev_get_cycle_timer) |
| 184 | #define FW_CDEV_IOC_START_ISO _IOW('#', 0x0a, struct fw_cdev_start_iso) | ||
| 185 | #define FW_CDEV_IOC_STOP_ISO _IOW('#', 0x0b, struct fw_cdev_stop_iso) | ||
| 186 | #define FW_CDEV_IOC_GET_CYCLE_TIMER _IOR('#', 0x0c, struct fw_cdev_get_cycle_timer) | ||
| 187 | 241 | ||
| 188 | /* FW_CDEV_VERSION History | 242 | /* available since kernel version 2.6.30 */ |
| 189 | * | 243 | #define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE _IOWR('#', 0x0d, struct fw_cdev_allocate_iso_resource) |
| 190 | * 1 Feb 18, 2007: Initial version. | 244 | #define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE _IOW('#', 0x0e, struct fw_cdev_deallocate) |
| 245 | #define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE _IOW('#', 0x0f, struct fw_cdev_allocate_iso_resource) | ||
| 246 | #define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE _IOW('#', 0x10, struct fw_cdev_allocate_iso_resource) | ||
| 247 | #define FW_CDEV_IOC_GET_SPEED _IO('#', 0x11) /* returns speed code */ | ||
| 248 | #define FW_CDEV_IOC_SEND_BROADCAST_REQUEST _IOW('#', 0x12, struct fw_cdev_send_request) | ||
| 249 | #define FW_CDEV_IOC_SEND_STREAM_PACKET _IOW('#', 0x13, struct fw_cdev_send_stream_packet) | ||
| 250 | |||
| 251 | /* | ||
| 252 | * FW_CDEV_VERSION History | ||
| 253 | * 1 (2.6.22) - initial version | ||
| 254 | * 2 (2.6.30) - changed &fw_cdev_event_iso_interrupt.header if | ||
| 255 | * &fw_cdev_create_iso_context.header_size is 8 or more | ||
| 191 | */ | 256 | */ |
| 192 | #define FW_CDEV_VERSION 1 | 257 | #define FW_CDEV_VERSION 2 |
| 193 | 258 | ||
| 194 | /** | 259 | /** |
| 195 | * struct fw_cdev_get_info - General purpose information ioctl | 260 | * struct fw_cdev_get_info - General purpose information ioctl |
| @@ -201,7 +266,7 @@ union fw_cdev_event { | |||
| 201 | * case, @rom_length is updated with the actual length of the | 266 | * case, @rom_length is updated with the actual length of the |
| 202 | * configuration ROM. | 267 | * configuration ROM. |
| 203 | * @rom: If non-zero, address of a buffer to be filled by a copy of the | 268 | * @rom: If non-zero, address of a buffer to be filled by a copy of the |
| 204 | * local node's configuration ROM | 269 | * device's configuration ROM |
| 205 | * @bus_reset: If non-zero, address of a buffer to be filled by a | 270 | * @bus_reset: If non-zero, address of a buffer to be filled by a |
| 206 | * &struct fw_cdev_event_bus_reset with the current state | 271 | * &struct fw_cdev_event_bus_reset with the current state |
| 207 | * of the bus. This does not cause a bus reset to happen. | 272 | * of the bus. This does not cause a bus reset to happen. |
| @@ -229,7 +294,7 @@ struct fw_cdev_get_info { | |||
| 229 | * Send a request to the device. This ioctl implements all outgoing requests. | 294 | * Send a request to the device. This ioctl implements all outgoing requests. |
| 230 | * Both quadlet and block request specify the payload as a pointer to the data | 295 | * Both quadlet and block request specify the payload as a pointer to the data |
| 231 | * in the @data field. Once the transaction completes, the kernel writes an | 296 | * in the @data field. Once the transaction completes, the kernel writes an |
| 232 | * &fw_cdev_event_request event back. The @closure field is passed back to | 297 | * &fw_cdev_event_response event back. The @closure field is passed back to |
| 233 | * user space in the response event. | 298 | * user space in the response event. |
| 234 | */ | 299 | */ |
| 235 | struct fw_cdev_send_request { | 300 | struct fw_cdev_send_request { |
| @@ -284,9 +349,9 @@ struct fw_cdev_allocate { | |||
| 284 | }; | 349 | }; |
| 285 | 350 | ||
| 286 | /** | 351 | /** |
| 287 | * struct fw_cdev_deallocate - Free an address range allocation | 352 | * struct fw_cdev_deallocate - Free a CSR address range or isochronous resource |
| 288 | * @handle: Handle to the address range, as returned by the kernel when the | 353 | * @handle: Handle to the address range or iso resource, as returned by the |
| 289 | * range was allocated | 354 | * kernel when the range or resource was allocated |
| 290 | */ | 355 | */ |
| 291 | struct fw_cdev_deallocate { | 356 | struct fw_cdev_deallocate { |
| 292 | __u32 handle; | 357 | __u32 handle; |
| @@ -329,6 +394,9 @@ struct fw_cdev_initiate_bus_reset { | |||
| 329 | * If successful, the kernel adds the descriptor and writes back a handle to the | 394 | * If successful, the kernel adds the descriptor and writes back a handle to the |
| 330 | * kernel-side object to be used for later removal of the descriptor block and | 395 | * kernel-side object to be used for later removal of the descriptor block and |
| 331 | * immediate key. | 396 | * immediate key. |
| 397 | * | ||
| 398 | * This ioctl affects the configuration ROMs of all local nodes. | ||
| 399 | * The ioctl only succeeds on device files which represent a local node. | ||
| 332 | */ | 400 | */ |
| 333 | struct fw_cdev_add_descriptor { | 401 | struct fw_cdev_add_descriptor { |
| 334 | __u32 immediate; | 402 | __u32 immediate; |
| @@ -344,7 +412,7 @@ struct fw_cdev_add_descriptor { | |||
| 344 | * descriptor was added | 412 | * descriptor was added |
| 345 | * | 413 | * |
| 346 | * Remove a descriptor block and accompanying immediate key from the local | 414 | * Remove a descriptor block and accompanying immediate key from the local |
| 347 | * node's configuration ROM. | 415 | * nodes' configuration ROMs. |
| 348 | */ | 416 | */ |
| 349 | struct fw_cdev_remove_descriptor { | 417 | struct fw_cdev_remove_descriptor { |
| 350 | __u32 handle; | 418 | __u32 handle; |
| @@ -370,6 +438,9 @@ struct fw_cdev_remove_descriptor { | |||
| 370 | * | 438 | * |
| 371 | * If a context was successfully created, the kernel writes back a handle to the | 439 | * If a context was successfully created, the kernel writes back a handle to the |
| 372 | * context, which must be passed in for subsequent operations on that context. | 440 | * context, which must be passed in for subsequent operations on that context. |
| 441 | * | ||
| 442 | * Note that the effect of a @header_size > 4 depends on | ||
| 443 | * &fw_cdev_get_info.version, as documented at &fw_cdev_event_iso_interrupt. | ||
| 373 | */ | 444 | */ |
| 374 | struct fw_cdev_create_iso_context { | 445 | struct fw_cdev_create_iso_context { |
| 375 | __u32 type; | 446 | __u32 type; |
| @@ -473,10 +544,91 @@ struct fw_cdev_stop_iso { | |||
| 473 | * The %FW_CDEV_IOC_GET_CYCLE_TIMER ioctl reads the isochronous cycle timer | 544 | * The %FW_CDEV_IOC_GET_CYCLE_TIMER ioctl reads the isochronous cycle timer |
| 474 | * and also the system clock. This allows to express the receive time of an | 545 | * and also the system clock. This allows to express the receive time of an |
| 475 | * isochronous packet as a system time with microsecond accuracy. | 546 | * isochronous packet as a system time with microsecond accuracy. |
| 547 | * | ||
| 548 | * @cycle_timer consists of 7 bits cycleSeconds, 13 bits cycleCount, and | ||
| 549 | * 12 bits cycleOffset, in host byte order. | ||
| 476 | */ | 550 | */ |
| 477 | struct fw_cdev_get_cycle_timer { | 551 | struct fw_cdev_get_cycle_timer { |
| 478 | __u64 local_time; | 552 | __u64 local_time; |
| 479 | __u32 cycle_timer; | 553 | __u32 cycle_timer; |
| 480 | }; | 554 | }; |
| 481 | 555 | ||
| 556 | /** | ||
| 557 | * struct fw_cdev_allocate_iso_resource - (De)allocate a channel or bandwidth | ||
| 558 | * @closure: Passed back to userspace in correponding iso resource events | ||
| 559 | * @channels: Isochronous channels of which one is to be (de)allocated | ||
| 560 | * @bandwidth: Isochronous bandwidth units to be (de)allocated | ||
| 561 | * @handle: Handle to the allocation, written by the kernel (only valid in | ||
| 562 | * case of %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctls) | ||
| 563 | * | ||
| 564 | * The %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctl initiates allocation of an | ||
| 565 | * isochronous channel and/or of isochronous bandwidth at the isochronous | ||
| 566 | * resource manager (IRM). Only one of the channels specified in @channels is | ||
| 567 | * allocated. An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED is sent after | ||
| 568 | * communication with the IRM, indicating success or failure in the event data. | ||
| 569 | * The kernel will automatically reallocate the resources after bus resets. | ||
| 570 | * Should a reallocation fail, an %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event | ||
| 571 | * will be sent. The kernel will also automatically deallocate the resources | ||
| 572 | * when the file descriptor is closed. | ||
| 573 | * | ||
| 574 | * The %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE ioctl can be used to initiate | ||
| 575 | * deallocation of resources which were allocated as described above. | ||
| 576 | * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation. | ||
| 577 | * | ||
| 578 | * The %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE ioctl is a variant of allocation | ||
| 579 | * without automatic re- or deallocation. | ||
| 580 | * An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED event concludes this operation, | ||
| 581 | * indicating success or failure in its data. | ||
| 582 | * | ||
| 583 | * The %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE ioctl works like | ||
| 584 | * %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE except that resources are freed | ||
| 585 | * instead of allocated. | ||
| 586 | * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation. | ||
| 587 | * | ||
| 588 | * To summarize, %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE allocates iso resources | ||
| 589 | * for the lifetime of the fd or handle. | ||
| 590 | * In contrast, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE allocates iso resources | ||
| 591 | * for the duration of a bus generation. | ||
| 592 | * | ||
| 593 | * @channels is a host-endian bitfield with the least significant bit | ||
| 594 | * representing channel 0 and the most significant bit representing channel 63: | ||
| 595 | * 1ULL << c for each channel c that is a candidate for (de)allocation. | ||
| 596 | * | ||
| 597 | * @bandwidth is expressed in bandwidth allocation units, i.e. the time to send | ||
| 598 | * one quadlet of data (payload or header data) at speed S1600. | ||
| 599 | */ | ||
| 600 | struct fw_cdev_allocate_iso_resource { | ||
| 601 | __u64 closure; | ||
| 602 | __u64 channels; | ||
| 603 | __u32 bandwidth; | ||
| 604 | __u32 handle; | ||
| 605 | }; | ||
| 606 | |||
| 607 | /** | ||
| 608 | * struct fw_cdev_send_stream_packet - send an asynchronous stream packet | ||
| 609 | * @length: Length of outgoing payload, in bytes | ||
| 610 | * @tag: Data format tag | ||
| 611 | * @channel: Isochronous channel to transmit to | ||
| 612 | * @sy: Synchronization code | ||
| 613 | * @closure: Passed back to userspace in the response event | ||
| 614 | * @data: Userspace pointer to payload | ||
| 615 | * @generation: The bus generation where packet is valid | ||
| 616 | * @speed: Speed to transmit at | ||
| 617 | * | ||
| 618 | * The %FW_CDEV_IOC_SEND_STREAM_PACKET ioctl sends an asynchronous stream packet | ||
| 619 | * to every device which is listening to the specified channel. The kernel | ||
| 620 | * writes an &fw_cdev_event_response event which indicates success or failure of | ||
| 621 | * the transmission. | ||
| 622 | */ | ||
| 623 | struct fw_cdev_send_stream_packet { | ||
| 624 | __u32 length; | ||
| 625 | __u32 tag; | ||
| 626 | __u32 channel; | ||
| 627 | __u32 sy; | ||
| 628 | __u64 closure; | ||
| 629 | __u64 data; | ||
| 630 | __u32 generation; | ||
| 631 | __u32 speed; | ||
| 632 | }; | ||
| 633 | |||
| 482 | #endif /* _LINUX_FIREWIRE_CDEV_H */ | 634 | #endif /* _LINUX_FIREWIRE_CDEV_H */ |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 92734c0012e6..87e7bfc5ebd7 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 | ||
| @@ -848,6 +849,7 @@ struct file { | |||
| 848 | #define f_dentry f_path.dentry | 849 | #define f_dentry f_path.dentry |
| 849 | #define f_vfsmnt f_path.mnt | 850 | #define f_vfsmnt f_path.mnt |
| 850 | const struct file_operations *f_op; | 851 | const struct file_operations *f_op; |
| 852 | spinlock_t f_lock; /* f_ep_links, f_flags, no IRQ */ | ||
| 851 | atomic_long_t f_count; | 853 | atomic_long_t f_count; |
| 852 | unsigned int f_flags; | 854 | unsigned int f_flags; |
| 853 | fmode_t f_mode; | 855 | fmode_t f_mode; |
| @@ -866,7 +868,6 @@ struct file { | |||
| 866 | #ifdef CONFIG_EPOLL | 868 | #ifdef CONFIG_EPOLL |
| 867 | /* Used by fs/eventpoll.c to link all the hooks to this file */ | 869 | /* Used by fs/eventpoll.c to link all the hooks to this file */ |
| 868 | struct list_head f_ep_links; | 870 | struct list_head f_ep_links; |
| 869 | spinlock_t f_ep_lock; | ||
| 870 | #endif /* #ifdef CONFIG_EPOLL */ | 871 | #endif /* #ifdef CONFIG_EPOLL */ |
| 871 | struct address_space *f_mapping; | 872 | struct address_space *f_mapping; |
| 872 | #ifdef CONFIG_DEBUG_WRITECOUNT | 873 | #ifdef CONFIG_DEBUG_WRITECOUNT |
| @@ -1063,34 +1064,147 @@ extern int lease_modify(struct file_lock **, int); | |||
| 1063 | extern int lock_may_read(struct inode *, loff_t start, unsigned long count); | 1064 | extern int lock_may_read(struct inode *, loff_t start, unsigned long count); |
| 1064 | extern int lock_may_write(struct inode *, loff_t start, unsigned long count); | 1065 | extern int lock_may_write(struct inode *, loff_t start, unsigned long count); |
| 1065 | #else /* !CONFIG_FILE_LOCKING */ | 1066 | #else /* !CONFIG_FILE_LOCKING */ |
| 1066 | #define fcntl_getlk(a, b) ({ -EINVAL; }) | 1067 | static inline int fcntl_getlk(struct file *file, struct flock __user *user) |
| 1067 | #define fcntl_setlk(a, b, c, d) ({ -EACCES; }) | 1068 | { |
| 1069 | return -EINVAL; | ||
| 1070 | } | ||
| 1071 | |||
| 1072 | static inline int fcntl_setlk(unsigned int fd, struct file *file, | ||
| 1073 | unsigned int cmd, struct flock __user *user) | ||
| 1074 | { | ||
| 1075 | return -EACCES; | ||
| 1076 | } | ||
| 1077 | |||
| 1068 | #if BITS_PER_LONG == 32 | 1078 | #if BITS_PER_LONG == 32 |
| 1069 | #define fcntl_getlk64(a, b) ({ -EINVAL; }) | 1079 | static inline int fcntl_getlk64(struct file *file, struct flock64 __user *user) |
| 1070 | #define fcntl_setlk64(a, b, c, d) ({ -EACCES; }) | 1080 | { |
| 1081 | return -EINVAL; | ||
| 1082 | } | ||
| 1083 | |||
| 1084 | static inline int fcntl_setlk64(unsigned int fd, struct file *file, | ||
| 1085 | unsigned int cmd, struct flock64 __user *user) | ||
| 1086 | { | ||
| 1087 | return -EACCES; | ||
| 1088 | } | ||
| 1071 | #endif | 1089 | #endif |
| 1072 | #define fcntl_setlease(a, b, c) ({ 0; }) | 1090 | static inline int fcntl_setlease(unsigned int fd, struct file *filp, long arg) |
| 1073 | #define fcntl_getlease(a) ({ 0; }) | 1091 | { |
| 1074 | #define locks_init_lock(a) ({ }) | 1092 | return 0; |
| 1075 | #define __locks_copy_lock(a, b) ({ }) | 1093 | } |
| 1076 | #define locks_copy_lock(a, b) ({ }) | 1094 | |
| 1077 | #define locks_remove_posix(a, b) ({ }) | 1095 | static inline int fcntl_getlease(struct file *filp) |
| 1078 | #define locks_remove_flock(a) ({ }) | 1096 | { |
| 1079 | #define posix_test_lock(a, b) ({ 0; }) | 1097 | return 0; |
| 1080 | #define posix_lock_file(a, b, c) ({ -ENOLCK; }) | 1098 | } |
| 1081 | #define posix_lock_file_wait(a, b) ({ -ENOLCK; }) | 1099 | |
| 1082 | #define posix_unblock_lock(a, b) (-ENOENT) | 1100 | static inline void locks_init_lock(struct file_lock *fl) |
| 1083 | #define vfs_test_lock(a, b) ({ 0; }) | 1101 | { |
| 1084 | #define vfs_lock_file(a, b, c, d) (-ENOLCK) | 1102 | return; |
| 1085 | #define vfs_cancel_lock(a, b) ({ 0; }) | 1103 | } |
| 1086 | #define flock_lock_file_wait(a, b) ({ -ENOLCK; }) | 1104 | |
| 1087 | #define __break_lease(a, b) ({ 0; }) | 1105 | static inline void __locks_copy_lock(struct file_lock *new, struct file_lock *fl) |
| 1088 | #define lease_get_mtime(a, b) ({ }) | 1106 | { |
| 1089 | #define generic_setlease(a, b, c) ({ -EINVAL; }) | 1107 | return; |
| 1090 | #define vfs_setlease(a, b, c) ({ -EINVAL; }) | 1108 | } |
| 1091 | #define lease_modify(a, b) ({ -EINVAL; }) | 1109 | |
| 1092 | #define lock_may_read(a, b, c) ({ 1; }) | 1110 | static inline void locks_copy_lock(struct file_lock *new, struct file_lock *fl) |
| 1093 | #define lock_may_write(a, b, c) ({ 1; }) | 1111 | { |
| 1112 | return; | ||
| 1113 | } | ||
| 1114 | |||
| 1115 | static inline void locks_remove_posix(struct file *filp, fl_owner_t owner) | ||
| 1116 | { | ||
| 1117 | return; | ||
| 1118 | } | ||
| 1119 | |||
| 1120 | static inline void locks_remove_flock(struct file *filp) | ||
| 1121 | { | ||
| 1122 | return; | ||
| 1123 | } | ||
| 1124 | |||
| 1125 | static inline void posix_test_lock(struct file *filp, struct file_lock *fl) | ||
| 1126 | { | ||
| 1127 | return; | ||
| 1128 | } | ||
| 1129 | |||
| 1130 | static inline int posix_lock_file(struct file *filp, struct file_lock *fl, | ||
| 1131 | struct file_lock *conflock) | ||
| 1132 | { | ||
| 1133 | return -ENOLCK; | ||
| 1134 | } | ||
| 1135 | |||
| 1136 | static inline int posix_lock_file_wait(struct file *filp, struct file_lock *fl) | ||
| 1137 | { | ||
| 1138 | return -ENOLCK; | ||
| 1139 | } | ||
| 1140 | |||
| 1141 | static inline int posix_unblock_lock(struct file *filp, | ||
| 1142 | struct file_lock *waiter) | ||
| 1143 | { | ||
| 1144 | return -ENOENT; | ||
| 1145 | } | ||
| 1146 | |||
| 1147 | static inline int vfs_test_lock(struct file *filp, struct file_lock *fl) | ||
| 1148 | { | ||
| 1149 | return 0; | ||
| 1150 | } | ||
| 1151 | |||
| 1152 | static inline int vfs_lock_file(struct file *filp, unsigned int cmd, | ||
| 1153 | struct file_lock *fl, struct file_lock *conf) | ||
| 1154 | { | ||
| 1155 | return -ENOLCK; | ||
| 1156 | } | ||
| 1157 | |||
| 1158 | static inline int vfs_cancel_lock(struct file *filp, struct file_lock *fl) | ||
| 1159 | { | ||
| 1160 | return 0; | ||
| 1161 | } | ||
| 1162 | |||
| 1163 | static inline int flock_lock_file_wait(struct file *filp, | ||
| 1164 | struct file_lock *request) | ||
| 1165 | { | ||
| 1166 | return -ENOLCK; | ||
| 1167 | } | ||
| 1168 | |||
| 1169 | static inline int __break_lease(struct inode *inode, unsigned int mode) | ||
| 1170 | { | ||
| 1171 | return 0; | ||
| 1172 | } | ||
| 1173 | |||
| 1174 | static inline void lease_get_mtime(struct inode *inode, struct timespec *time) | ||
| 1175 | { | ||
| 1176 | return; | ||
| 1177 | } | ||
| 1178 | |||
| 1179 | static inline int generic_setlease(struct file *filp, long arg, | ||
| 1180 | struct file_lock **flp) | ||
| 1181 | { | ||
| 1182 | return -EINVAL; | ||
| 1183 | } | ||
| 1184 | |||
| 1185 | static inline int vfs_setlease(struct file *filp, long arg, | ||
| 1186 | struct file_lock **lease) | ||
| 1187 | { | ||
| 1188 | return -EINVAL; | ||
| 1189 | } | ||
| 1190 | |||
| 1191 | static inline int lease_modify(struct file_lock **before, int arg) | ||
| 1192 | { | ||
| 1193 | return -EINVAL; | ||
| 1194 | } | ||
| 1195 | |||
| 1196 | static inline int lock_may_read(struct inode *inode, loff_t start, | ||
| 1197 | unsigned long len) | ||
| 1198 | { | ||
| 1199 | return 1; | ||
| 1200 | } | ||
| 1201 | |||
| 1202 | static inline int lock_may_write(struct inode *inode, loff_t start, | ||
| 1203 | unsigned long len) | ||
| 1204 | { | ||
| 1205 | return 1; | ||
| 1206 | } | ||
| 1207 | |||
| 1094 | #endif /* !CONFIG_FILE_LOCKING */ | 1208 | #endif /* !CONFIG_FILE_LOCKING */ |
| 1095 | 1209 | ||
| 1096 | 1210 | ||
| @@ -1606,7 +1720,7 @@ struct super_block *sget(struct file_system_type *type, | |||
| 1606 | extern int get_sb_pseudo(struct file_system_type *, char *, | 1720 | extern int get_sb_pseudo(struct file_system_type *, char *, |
| 1607 | const struct super_operations *ops, unsigned long, | 1721 | const struct super_operations *ops, unsigned long, |
| 1608 | struct vfsmount *mnt); | 1722 | struct vfsmount *mnt); |
| 1609 | extern int simple_set_mnt(struct vfsmount *mnt, struct super_block *sb); | 1723 | extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb); |
| 1610 | int __put_super_and_need_restart(struct super_block *sb); | 1724 | int __put_super_and_need_restart(struct super_block *sb); |
| 1611 | 1725 | ||
| 1612 | /* Alas, no aliases. Too much hassle with bringing module.h everywhere */ | 1726 | /* Alas, no aliases. Too much hassle with bringing module.h everywhere */ |
| @@ -1687,13 +1801,44 @@ static inline int break_lease(struct inode *inode, unsigned int mode) | |||
| 1687 | return 0; | 1801 | return 0; |
| 1688 | } | 1802 | } |
| 1689 | #else /* !CONFIG_FILE_LOCKING */ | 1803 | #else /* !CONFIG_FILE_LOCKING */ |
| 1690 | #define locks_mandatory_locked(a) ({ 0; }) | 1804 | static inline int locks_mandatory_locked(struct inode *inode) |
| 1691 | #define locks_mandatory_area(a, b, c, d, e) ({ 0; }) | 1805 | { |
| 1692 | #define __mandatory_lock(a) ({ 0; }) | 1806 | return 0; |
| 1693 | #define mandatory_lock(a) ({ 0; }) | 1807 | } |
| 1694 | #define locks_verify_locked(a) ({ 0; }) | 1808 | |
| 1695 | #define locks_verify_truncate(a, b, c) ({ 0; }) | 1809 | static inline int locks_mandatory_area(int rw, struct inode *inode, |
| 1696 | #define break_lease(a, b) ({ 0; }) | 1810 | struct file *filp, loff_t offset, |
| 1811 | size_t count) | ||
| 1812 | { | ||
| 1813 | return 0; | ||
| 1814 | } | ||
| 1815 | |||
| 1816 | static inline int __mandatory_lock(struct inode *inode) | ||
| 1817 | { | ||
| 1818 | return 0; | ||
| 1819 | } | ||
| 1820 | |||
| 1821 | static inline int mandatory_lock(struct inode *inode) | ||
| 1822 | { | ||
| 1823 | return 0; | ||
| 1824 | } | ||
| 1825 | |||
| 1826 | static inline int locks_verify_locked(struct inode *inode) | ||
| 1827 | { | ||
| 1828 | return 0; | ||
| 1829 | } | ||
| 1830 | |||
| 1831 | static inline int locks_verify_truncate(struct inode *inode, struct file *filp, | ||
| 1832 | size_t size) | ||
| 1833 | { | ||
| 1834 | return 0; | ||
| 1835 | } | ||
| 1836 | |||
| 1837 | static inline int break_lease(struct inode *inode, unsigned int mode) | ||
| 1838 | { | ||
| 1839 | return 0; | ||
| 1840 | } | ||
| 1841 | |||
| 1697 | #endif /* CONFIG_FILE_LOCKING */ | 1842 | #endif /* CONFIG_FILE_LOCKING */ |
| 1698 | 1843 | ||
| 1699 | /* fs/open.c */ | 1844 | /* fs/open.c */ |
| @@ -1730,6 +1875,13 @@ extern void bd_set_size(struct block_device *, loff_t size); | |||
| 1730 | extern void bd_forget(struct inode *inode); | 1875 | extern void bd_forget(struct inode *inode); |
| 1731 | extern void bdput(struct block_device *); | 1876 | extern void bdput(struct block_device *); |
| 1732 | extern struct block_device *open_by_devnum(dev_t, fmode_t); | 1877 | extern struct block_device *open_by_devnum(dev_t, fmode_t); |
| 1878 | extern void invalidate_bdev(struct block_device *); | ||
| 1879 | extern int sync_blockdev(struct block_device *bdev); | ||
| 1880 | extern struct super_block *freeze_bdev(struct block_device *); | ||
| 1881 | extern int thaw_bdev(struct block_device *bdev, struct super_block *sb); | ||
| 1882 | extern int fsync_bdev(struct block_device *); | ||
| 1883 | extern int fsync_super(struct super_block *); | ||
| 1884 | extern int fsync_no_super(struct block_device *); | ||
| 1733 | #else | 1885 | #else |
| 1734 | static inline void bd_forget(struct inode *inode) {} | 1886 | static inline void bd_forget(struct inode *inode) {} |
| 1735 | #endif | 1887 | #endif |
| @@ -1881,7 +2033,6 @@ static inline void allow_write_access(struct file *file) | |||
| 1881 | if (file) | 2033 | if (file) |
| 1882 | atomic_inc(&file->f_path.dentry->d_inode->i_writecount); | 2034 | atomic_inc(&file->f_path.dentry->d_inode->i_writecount); |
| 1883 | } | 2035 | } |
| 1884 | extern int do_pipe(int *); | ||
| 1885 | extern int do_pipe_flags(int *, int); | 2036 | extern int do_pipe_flags(int *, int); |
| 1886 | extern struct file *create_read_pipe(struct file *f, int flags); | 2037 | extern struct file *create_read_pipe(struct file *f, int flags); |
| 1887 | extern struct file *create_write_pipe(int flags); | 2038 | extern struct file *create_write_pipe(int flags); |
diff --git a/include/linux/fs_struct.h b/include/linux/fs_struct.h index a97c053d3a9a..18b467dbe278 100644 --- a/include/linux/fs_struct.h +++ b/include/linux/fs_struct.h | |||
| @@ -4,7 +4,10 @@ | |||
| 4 | #include <linux/path.h> | 4 | #include <linux/path.h> |
| 5 | 5 | ||
| 6 | struct fs_struct { | 6 | struct fs_struct { |
| 7 | atomic_t count; | 7 | atomic_t count; /* This usage count is used by check_unsafe_exec() for |
| 8 | * security checking purposes - therefore it may not be | ||
| 9 | * incremented, except by clone(CLONE_FS). | ||
| 10 | */ | ||
| 8 | rwlock_t lock; | 11 | rwlock_t lock; |
| 9 | int umask; | 12 | int umask; |
| 10 | struct path root, pwd; | 13 | struct path root, pwd; |
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h index 677432b9cb7e..a7f8134c594e 100644 --- a/include/linux/ftrace.h +++ b/include/linux/ftrace.h | |||
| @@ -380,6 +380,30 @@ struct ftrace_graph_ret { | |||
| 380 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | 380 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
| 381 | 381 | ||
| 382 | /* | 382 | /* |
| 383 | * Stack of return addresses for functions | ||
| 384 | * of a thread. | ||
| 385 | * Used in struct thread_info | ||
| 386 | */ | ||
| 387 | struct ftrace_ret_stack { | ||
| 388 | unsigned long ret; | ||
| 389 | unsigned long func; | ||
| 390 | unsigned long long calltime; | ||
| 391 | }; | ||
| 392 | |||
| 393 | /* | ||
| 394 | * Primary handler of a function return. | ||
| 395 | * It relays on ftrace_return_to_handler. | ||
| 396 | * Defined in entry_32/64.S | ||
| 397 | */ | ||
| 398 | extern void return_to_handler(void); | ||
| 399 | |||
| 400 | extern int | ||
| 401 | ftrace_push_return_trace(unsigned long ret, unsigned long long time, | ||
| 402 | unsigned long func, int *depth); | ||
| 403 | extern void | ||
| 404 | ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret); | ||
| 405 | |||
| 406 | /* | ||
| 383 | * Sometimes we don't want to trace a function with the function | 407 | * Sometimes we don't want to trace a function with the function |
| 384 | * graph tracer but we want them to keep traced by the usual function | 408 | * graph tracer but we want them to keep traced by the usual function |
| 385 | * tracer if the function graph tracer is not configured. | 409 | * tracer if the function graph tracer is not configured. |
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/i2c-algo-pca.h b/include/linux/i2c-algo-pca.h index adcb3dc7ac26..1364d62e2fbe 100644 --- a/include/linux/i2c-algo-pca.h +++ b/include/linux/i2c-algo-pca.h | |||
| @@ -1,7 +1,14 @@ | |||
| 1 | #ifndef _LINUX_I2C_ALGO_PCA_H | 1 | #ifndef _LINUX_I2C_ALGO_PCA_H |
| 2 | #define _LINUX_I2C_ALGO_PCA_H | 2 | #define _LINUX_I2C_ALGO_PCA_H |
| 3 | 3 | ||
| 4 | /* Clock speeds for the bus */ | 4 | /* Chips known to the pca algo */ |
| 5 | #define I2C_PCA_CHIP_9564 0x00 | ||
| 6 | #define I2C_PCA_CHIP_9665 0x01 | ||
| 7 | |||
| 8 | /* Internal period for PCA9665 oscilator */ | ||
| 9 | #define I2C_PCA_OSC_PER 3 /* e10-8s */ | ||
| 10 | |||
| 11 | /* Clock speeds for the bus for PCA9564*/ | ||
| 5 | #define I2C_PCA_CON_330kHz 0x00 | 12 | #define I2C_PCA_CON_330kHz 0x00 |
| 6 | #define I2C_PCA_CON_288kHz 0x01 | 13 | #define I2C_PCA_CON_288kHz 0x01 |
| 7 | #define I2C_PCA_CON_217kHz 0x02 | 14 | #define I2C_PCA_CON_217kHz 0x02 |
| @@ -18,6 +25,26 @@ | |||
| 18 | #define I2C_PCA_ADR 0x02 /* OWN ADR Read/Write */ | 25 | #define I2C_PCA_ADR 0x02 /* OWN ADR Read/Write */ |
| 19 | #define I2C_PCA_CON 0x03 /* CONTROL Read/Write */ | 26 | #define I2C_PCA_CON 0x03 /* CONTROL Read/Write */ |
| 20 | 27 | ||
| 28 | /* PCA9665 registers */ | ||
| 29 | #define I2C_PCA_INDPTR 0x00 /* INDIRECT Pointer Write Only */ | ||
| 30 | #define I2C_PCA_IND 0x02 /* INDIRECT Read/Write */ | ||
| 31 | |||
| 32 | /* PCA9665 indirect registers */ | ||
| 33 | #define I2C_PCA_ICOUNT 0x00 /* Byte Count for buffered mode */ | ||
| 34 | #define I2C_PCA_IADR 0x01 /* OWN ADR */ | ||
| 35 | #define I2C_PCA_ISCLL 0x02 /* SCL LOW period */ | ||
| 36 | #define I2C_PCA_ISCLH 0x03 /* SCL HIGH period */ | ||
| 37 | #define I2C_PCA_ITO 0x04 /* TIMEOUT */ | ||
| 38 | #define I2C_PCA_IPRESET 0x05 /* Parallel bus reset */ | ||
| 39 | #define I2C_PCA_IMODE 0x06 /* I2C Bus mode */ | ||
| 40 | |||
| 41 | /* PCA9665 I2C bus mode */ | ||
| 42 | #define I2C_PCA_MODE_STD 0x00 /* Standard mode */ | ||
| 43 | #define I2C_PCA_MODE_FAST 0x01 /* Fast mode */ | ||
| 44 | #define I2C_PCA_MODE_FASTP 0x02 /* Fast Plus mode */ | ||
| 45 | #define I2C_PCA_MODE_TURBO 0x03 /* Turbo mode */ | ||
| 46 | |||
| 47 | |||
| 21 | #define I2C_PCA_CON_AA 0x80 /* Assert Acknowledge */ | 48 | #define I2C_PCA_CON_AA 0x80 /* Assert Acknowledge */ |
| 22 | #define I2C_PCA_CON_ENSIO 0x40 /* Enable */ | 49 | #define I2C_PCA_CON_ENSIO 0x40 /* Enable */ |
| 23 | #define I2C_PCA_CON_STA 0x20 /* Start */ | 50 | #define I2C_PCA_CON_STA 0x20 /* Start */ |
| @@ -31,7 +58,9 @@ struct i2c_algo_pca_data { | |||
| 31 | int (*read_byte) (void *data, int reg); | 58 | int (*read_byte) (void *data, int reg); |
| 32 | int (*wait_for_completion) (void *data); | 59 | int (*wait_for_completion) (void *data); |
| 33 | void (*reset_chip) (void *data); | 60 | void (*reset_chip) (void *data); |
| 34 | /* i2c_clock values are defined in linux/i2c-algo-pca.h */ | 61 | /* For PCA9564, use one of the predefined frequencies: |
| 62 | * 330000, 288000, 217000, 146000, 88000, 59000, 44000, 36000 | ||
| 63 | * For PCA9665, use the frequency you want here. */ | ||
| 35 | unsigned int i2c_clock; | 64 | unsigned int i2c_clock; |
| 36 | }; | 65 | }; |
| 37 | 66 | ||
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h index 1ffc23bc5d1e..f27604af8378 100644 --- a/include/linux/i2c-id.h +++ b/include/linux/i2c-id.h | |||
| @@ -71,6 +71,7 @@ | |||
| 71 | #define I2C_DRIVERID_VP27SMPX 93 /* Panasonic VP27s tuner internal MPX */ | 71 | #define I2C_DRIVERID_VP27SMPX 93 /* Panasonic VP27s tuner internal MPX */ |
| 72 | #define I2C_DRIVERID_M52790 95 /* Mitsubishi M52790SP/FP AV switch */ | 72 | #define I2C_DRIVERID_M52790 95 /* Mitsubishi M52790SP/FP AV switch */ |
| 73 | #define I2C_DRIVERID_CS5345 96 /* cs5345 audio processor */ | 73 | #define I2C_DRIVERID_CS5345 96 /* cs5345 audio processor */ |
| 74 | #define I2C_DRIVERID_AU8522 97 /* Auvitek au8522 */ | ||
| 74 | 75 | ||
| 75 | #define I2C_DRIVERID_OV7670 1048 /* Omnivision 7670 camera */ | 76 | #define I2C_DRIVERID_OV7670 1048 /* Omnivision 7670 camera */ |
| 76 | 77 | ||
| @@ -87,6 +88,7 @@ | |||
| 87 | #define I2C_HW_B_CX2341X 0x010020 /* Conexant CX2341X MPEG encoder cards */ | 88 | #define I2C_HW_B_CX2341X 0x010020 /* Conexant CX2341X MPEG encoder cards */ |
| 88 | #define I2C_HW_B_CX23885 0x010022 /* conexant 23885 based tv cards (bus1) */ | 89 | #define I2C_HW_B_CX23885 0x010022 /* conexant 23885 based tv cards (bus1) */ |
| 89 | #define I2C_HW_B_AU0828 0x010023 /* auvitek au0828 usb bridge */ | 90 | #define I2C_HW_B_AU0828 0x010023 /* auvitek au0828 usb bridge */ |
| 91 | #define I2C_HW_B_HDPVR 0x010025 /* Hauppauge HD PVR */ | ||
| 90 | 92 | ||
| 91 | /* --- SGI adapters */ | 93 | /* --- SGI adapters */ |
| 92 | #define I2C_HW_SGI_VINO 0x160000 | 94 | #define I2C_HW_SGI_VINO 0x160000 |
diff --git a/include/linux/i2c-pca-platform.h b/include/linux/i2c-pca-platform.h index 3d191873f2d1..aba33759dec4 100644 --- a/include/linux/i2c-pca-platform.h +++ b/include/linux/i2c-pca-platform.h | |||
| @@ -6,7 +6,7 @@ struct i2c_pca9564_pf_platform_data { | |||
| 6 | * not supplied (negative value), but it | 6 | * not supplied (negative value), but it |
| 7 | * cannot exit some error conditions then */ | 7 | * cannot exit some error conditions then */ |
| 8 | int i2c_clock_speed; /* values are defined in linux/i2c-algo-pca.h */ | 8 | int i2c_clock_speed; /* values are defined in linux/i2c-algo-pca.h */ |
| 9 | int timeout; /* timeout = this value * 10us */ | 9 | int timeout; /* timeout in jiffies */ |
| 10 | }; | 10 | }; |
| 11 | 11 | ||
| 12 | #endif /* I2C_PCA9564_PLATFORM_H */ | 12 | #endif /* I2C_PCA9564_PLATFORM_H */ |
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 e0cedfe9fad4..d5d832271f44 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 |
| @@ -40,6 +40,13 @@ | |||
| 40 | #define ERROR_RESET 3 /* Reset controller every 4th retry */ | 40 | #define ERROR_RESET 3 /* Reset controller every 4th retry */ |
| 41 | #define ERROR_RECAL 1 /* Recalibrate every 2nd retry */ | 41 | #define ERROR_RECAL 1 /* Recalibrate every 2nd retry */ |
| 42 | 42 | ||
| 43 | /* Error codes returned in rq->errors to the higher part of the driver. */ | ||
| 44 | enum { | ||
| 45 | IDE_DRV_ERROR_GENERAL = 101, | ||
| 46 | IDE_DRV_ERROR_FILEMARK = 102, | ||
| 47 | IDE_DRV_ERROR_EOD = 103, | ||
| 48 | }; | ||
| 49 | |||
| 43 | /* | 50 | /* |
| 44 | * Definitions for accessing IDE controller registers | 51 | * Definitions for accessing IDE controller registers |
| 45 | */ | 52 | */ |
| @@ -193,42 +200,8 @@ static inline void ide_std_init_ports(hw_regs_t *hw, | |||
| 193 | hw->io_ports.ctl_addr = ctl_addr; | 200 | hw->io_ports.ctl_addr = ctl_addr; |
| 194 | } | 201 | } |
| 195 | 202 | ||
| 196 | /* for IDE PCI controllers in legacy mode, temporary */ | ||
| 197 | static inline int __ide_default_irq(unsigned long base) | ||
| 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> | ||
| 215 | #else | ||
| 216 | #include <asm-generic/ide_iops.h> | ||
| 217 | #endif | ||
| 218 | |||
| 219 | #define MAX_HWIFS 10 | 203 | #define MAX_HWIFS 10 |
| 220 | 204 | ||
| 221 | /* Currently only m68k, apus and m8xx need it */ | ||
| 222 | #ifndef IDE_ARCH_ACK_INTR | ||
| 223 | # define ide_ack_intr(hwif) (1) | ||
| 224 | #endif | ||
| 225 | |||
| 226 | /* Currently only Atari needs it */ | ||
| 227 | #ifndef IDE_ARCH_LOCK | ||
| 228 | # define ide_release_lock() do {} while (0) | ||
| 229 | # define ide_get_lock(hdlr, data) do {} while (0) | ||
| 230 | #endif /* IDE_ARCH_LOCK */ | ||
| 231 | |||
| 232 | /* | 205 | /* |
| 233 | * Now for the data we need to maintain per-drive: ide_drive_t | 206 | * Now for the data we need to maintain per-drive: ide_drive_t |
| 234 | */ | 207 | */ |
| @@ -268,56 +241,52 @@ typedef enum { | |||
| 268 | 241 | ||
| 269 | enum { | 242 | enum { |
| 270 | IDE_TFLAG_LBA48 = (1 << 0), | 243 | IDE_TFLAG_LBA48 = (1 << 0), |
| 271 | IDE_TFLAG_FLAGGED = (1 << 2), | 244 | IDE_TFLAG_OUT_HOB_FEATURE = (1 << 1), |
| 272 | IDE_TFLAG_OUT_DATA = (1 << 3), | 245 | IDE_TFLAG_OUT_HOB_NSECT = (1 << 2), |
| 273 | IDE_TFLAG_OUT_HOB_FEATURE = (1 << 4), | 246 | IDE_TFLAG_OUT_HOB_LBAL = (1 << 3), |
| 274 | IDE_TFLAG_OUT_HOB_NSECT = (1 << 5), | 247 | IDE_TFLAG_OUT_HOB_LBAM = (1 << 4), |
| 275 | IDE_TFLAG_OUT_HOB_LBAL = (1 << 6), | 248 | IDE_TFLAG_OUT_HOB_LBAH = (1 << 5), |
| 276 | IDE_TFLAG_OUT_HOB_LBAM = (1 << 7), | ||
| 277 | IDE_TFLAG_OUT_HOB_LBAH = (1 << 8), | ||
| 278 | IDE_TFLAG_OUT_HOB = IDE_TFLAG_OUT_HOB_FEATURE | | 249 | IDE_TFLAG_OUT_HOB = IDE_TFLAG_OUT_HOB_FEATURE | |
| 279 | IDE_TFLAG_OUT_HOB_NSECT | | 250 | IDE_TFLAG_OUT_HOB_NSECT | |
| 280 | IDE_TFLAG_OUT_HOB_LBAL | | 251 | IDE_TFLAG_OUT_HOB_LBAL | |
| 281 | IDE_TFLAG_OUT_HOB_LBAM | | 252 | IDE_TFLAG_OUT_HOB_LBAM | |
| 282 | IDE_TFLAG_OUT_HOB_LBAH, | 253 | IDE_TFLAG_OUT_HOB_LBAH, |
| 283 | IDE_TFLAG_OUT_FEATURE = (1 << 9), | 254 | IDE_TFLAG_OUT_FEATURE = (1 << 6), |
| 284 | IDE_TFLAG_OUT_NSECT = (1 << 10), | 255 | IDE_TFLAG_OUT_NSECT = (1 << 7), |
| 285 | IDE_TFLAG_OUT_LBAL = (1 << 11), | 256 | IDE_TFLAG_OUT_LBAL = (1 << 8), |
| 286 | IDE_TFLAG_OUT_LBAM = (1 << 12), | 257 | IDE_TFLAG_OUT_LBAM = (1 << 9), |
| 287 | IDE_TFLAG_OUT_LBAH = (1 << 13), | 258 | IDE_TFLAG_OUT_LBAH = (1 << 10), |
| 288 | IDE_TFLAG_OUT_TF = IDE_TFLAG_OUT_FEATURE | | 259 | IDE_TFLAG_OUT_TF = IDE_TFLAG_OUT_FEATURE | |
| 289 | IDE_TFLAG_OUT_NSECT | | 260 | IDE_TFLAG_OUT_NSECT | |
| 290 | IDE_TFLAG_OUT_LBAL | | 261 | IDE_TFLAG_OUT_LBAL | |
| 291 | IDE_TFLAG_OUT_LBAM | | 262 | IDE_TFLAG_OUT_LBAM | |
| 292 | IDE_TFLAG_OUT_LBAH, | 263 | IDE_TFLAG_OUT_LBAH, |
| 293 | IDE_TFLAG_OUT_DEVICE = (1 << 14), | 264 | IDE_TFLAG_OUT_DEVICE = (1 << 11), |
| 294 | IDE_TFLAG_WRITE = (1 << 15), | 265 | IDE_TFLAG_WRITE = (1 << 12), |
| 295 | IDE_TFLAG_FLAGGED_SET_IN_FLAGS = (1 << 16), | 266 | IDE_TFLAG_CUSTOM_HANDLER = (1 << 13), |
| 296 | IDE_TFLAG_IN_DATA = (1 << 17), | 267 | IDE_TFLAG_DMA_PIO_FALLBACK = (1 << 14), |
| 297 | IDE_TFLAG_CUSTOM_HANDLER = (1 << 18), | 268 | IDE_TFLAG_IN_HOB_FEATURE = (1 << 15), |
| 298 | IDE_TFLAG_DMA_PIO_FALLBACK = (1 << 19), | 269 | IDE_TFLAG_IN_HOB_NSECT = (1 << 16), |
| 299 | IDE_TFLAG_IN_HOB_FEATURE = (1 << 20), | 270 | IDE_TFLAG_IN_HOB_LBAL = (1 << 17), |
| 300 | IDE_TFLAG_IN_HOB_NSECT = (1 << 21), | 271 | IDE_TFLAG_IN_HOB_LBAM = (1 << 18), |
| 301 | IDE_TFLAG_IN_HOB_LBAL = (1 << 22), | 272 | IDE_TFLAG_IN_HOB_LBAH = (1 << 19), |
| 302 | IDE_TFLAG_IN_HOB_LBAM = (1 << 23), | ||
| 303 | IDE_TFLAG_IN_HOB_LBAH = (1 << 24), | ||
| 304 | IDE_TFLAG_IN_HOB_LBA = IDE_TFLAG_IN_HOB_LBAL | | 273 | IDE_TFLAG_IN_HOB_LBA = IDE_TFLAG_IN_HOB_LBAL | |
| 305 | IDE_TFLAG_IN_HOB_LBAM | | 274 | IDE_TFLAG_IN_HOB_LBAM | |
| 306 | IDE_TFLAG_IN_HOB_LBAH, | 275 | IDE_TFLAG_IN_HOB_LBAH, |
| 307 | IDE_TFLAG_IN_HOB = IDE_TFLAG_IN_HOB_FEATURE | | 276 | IDE_TFLAG_IN_HOB = IDE_TFLAG_IN_HOB_FEATURE | |
| 308 | IDE_TFLAG_IN_HOB_NSECT | | 277 | IDE_TFLAG_IN_HOB_NSECT | |
| 309 | IDE_TFLAG_IN_HOB_LBA, | 278 | IDE_TFLAG_IN_HOB_LBA, |
| 310 | IDE_TFLAG_IN_FEATURE = (1 << 1), | 279 | IDE_TFLAG_IN_FEATURE = (1 << 20), |
| 311 | IDE_TFLAG_IN_NSECT = (1 << 25), | 280 | IDE_TFLAG_IN_NSECT = (1 << 21), |
| 312 | IDE_TFLAG_IN_LBAL = (1 << 26), | 281 | IDE_TFLAG_IN_LBAL = (1 << 22), |
| 313 | IDE_TFLAG_IN_LBAM = (1 << 27), | 282 | IDE_TFLAG_IN_LBAM = (1 << 23), |
| 314 | IDE_TFLAG_IN_LBAH = (1 << 28), | 283 | IDE_TFLAG_IN_LBAH = (1 << 24), |
| 315 | IDE_TFLAG_IN_LBA = IDE_TFLAG_IN_LBAL | | 284 | IDE_TFLAG_IN_LBA = IDE_TFLAG_IN_LBAL | |
| 316 | IDE_TFLAG_IN_LBAM | | 285 | IDE_TFLAG_IN_LBAM | |
| 317 | IDE_TFLAG_IN_LBAH, | 286 | IDE_TFLAG_IN_LBAH, |
| 318 | IDE_TFLAG_IN_TF = IDE_TFLAG_IN_NSECT | | 287 | IDE_TFLAG_IN_TF = IDE_TFLAG_IN_NSECT | |
| 319 | IDE_TFLAG_IN_LBA, | 288 | IDE_TFLAG_IN_LBA, |
| 320 | IDE_TFLAG_IN_DEVICE = (1 << 29), | 289 | IDE_TFLAG_IN_DEVICE = (1 << 25), |
| 321 | IDE_TFLAG_HOB = IDE_TFLAG_OUT_HOB | | 290 | IDE_TFLAG_HOB = IDE_TFLAG_OUT_HOB | |
| 322 | IDE_TFLAG_IN_HOB, | 291 | IDE_TFLAG_IN_HOB, |
| 323 | IDE_TFLAG_TF = IDE_TFLAG_OUT_TF | | 292 | IDE_TFLAG_TF = IDE_TFLAG_OUT_TF | |
| @@ -325,9 +294,18 @@ enum { | |||
| 325 | IDE_TFLAG_DEVICE = IDE_TFLAG_OUT_DEVICE | | 294 | IDE_TFLAG_DEVICE = IDE_TFLAG_OUT_DEVICE | |
| 326 | IDE_TFLAG_IN_DEVICE, | 295 | IDE_TFLAG_IN_DEVICE, |
| 327 | /* force 16-bit I/O operations */ | 296 | /* force 16-bit I/O operations */ |
| 328 | IDE_TFLAG_IO_16BIT = (1 << 30), | 297 | IDE_TFLAG_IO_16BIT = (1 << 26), |
| 329 | /* ide_task_t was allocated using kmalloc() */ | 298 | /* struct ide_cmd was allocated using kmalloc() */ |
| 330 | IDE_TFLAG_DYN = (1 << 31), | 299 | IDE_TFLAG_DYN = (1 << 27), |
| 300 | IDE_TFLAG_FS = (1 << 28), | ||
| 301 | IDE_TFLAG_MULTI_PIO = (1 << 29), | ||
| 302 | }; | ||
| 303 | |||
| 304 | enum { | ||
| 305 | IDE_FTFLAG_FLAGGED = (1 << 0), | ||
| 306 | IDE_FTFLAG_SET_IN_FLAGS = (1 << 1), | ||
| 307 | IDE_FTFLAG_OUT_DATA = (1 << 2), | ||
| 308 | IDE_FTFLAG_IN_DATA = (1 << 3), | ||
| 331 | }; | 309 | }; |
| 332 | 310 | ||
| 333 | struct ide_taskfile { | 311 | struct ide_taskfile { |
| @@ -359,16 +337,27 @@ struct ide_taskfile { | |||
| 359 | }; | 337 | }; |
| 360 | }; | 338 | }; |
| 361 | 339 | ||
| 362 | typedef struct ide_task_s { | 340 | struct ide_cmd { |
| 363 | union { | 341 | union { |
| 364 | struct ide_taskfile tf; | 342 | struct ide_taskfile tf; |
| 365 | u8 tf_array[14]; | 343 | u8 tf_array[14]; |
| 366 | }; | 344 | }; |
| 345 | u8 ftf_flags; /* for TASKFILE ioctl */ | ||
| 367 | u32 tf_flags; | 346 | u32 tf_flags; |
| 368 | int data_phase; | 347 | int protocol; |
| 348 | |||
| 349 | int sg_nents; /* number of sg entries */ | ||
| 350 | int orig_sg_nents; | ||
| 351 | int sg_dma_direction; /* DMA transfer direction */ | ||
| 352 | |||
| 353 | unsigned int nbytes; | ||
| 354 | unsigned int nleft; | ||
| 355 | struct scatterlist *cursg; | ||
| 356 | unsigned int cursg_ofs; | ||
| 357 | |||
| 369 | struct request *rq; /* copy of request */ | 358 | struct request *rq; /* copy of request */ |
| 370 | void *special; /* valid_t generally */ | 359 | void *special; /* valid_t generally */ |
| 371 | } ide_task_t; | 360 | }; |
| 372 | 361 | ||
| 373 | /* ATAPI packet command flags */ | 362 | /* ATAPI packet command flags */ |
| 374 | enum { | 363 | enum { |
| @@ -380,8 +369,6 @@ enum { | |||
| 380 | PC_FLAG_DMA_IN_PROGRESS = (1 << 4), | 369 | PC_FLAG_DMA_IN_PROGRESS = (1 << 4), |
| 381 | PC_FLAG_DMA_ERROR = (1 << 5), | 370 | PC_FLAG_DMA_ERROR = (1 << 5), |
| 382 | PC_FLAG_WRITING = (1 << 6), | 371 | PC_FLAG_WRITING = (1 << 6), |
| 383 | /* command timed out */ | ||
| 384 | PC_FLAG_TIMEDOUT = (1 << 7), | ||
| 385 | }; | 372 | }; |
| 386 | 373 | ||
| 387 | /* | 374 | /* |
| @@ -452,7 +439,6 @@ struct ide_disk_ops { | |||
| 452 | int); | 439 | int); |
| 453 | ide_startstop_t (*do_request)(struct ide_drive_s *, struct request *, | 440 | ide_startstop_t (*do_request)(struct ide_drive_s *, struct request *, |
| 454 | sector_t); | 441 | sector_t); |
| 455 | int (*end_request)(struct ide_drive_s *, int, int); | ||
| 456 | int (*ioctl)(struct ide_drive_s *, struct block_device *, | 442 | int (*ioctl)(struct ide_drive_s *, struct block_device *, |
| 457 | fmode_t, unsigned int, unsigned long); | 443 | fmode_t, unsigned int, unsigned long); |
| 458 | }; | 444 | }; |
| @@ -528,8 +514,6 @@ enum { | |||
| 528 | IDE_DFLAG_NICE1 = (1 << 5), | 514 | IDE_DFLAG_NICE1 = (1 << 5), |
| 529 | /* device is physically present */ | 515 | /* device is physically present */ |
| 530 | IDE_DFLAG_PRESENT = (1 << 6), | 516 | IDE_DFLAG_PRESENT = (1 << 6), |
| 531 | /* device ejected hint */ | ||
| 532 | IDE_DFLAG_DEAD = (1 << 7), | ||
| 533 | /* id read from device (synthetic if not set) */ | 517 | /* id read from device (synthetic if not set) */ |
| 534 | IDE_DFLAG_ID_READ = (1 << 8), | 518 | IDE_DFLAG_ID_READ = (1 << 8), |
| 535 | IDE_DFLAG_NOPROBE = (1 << 9), | 519 | IDE_DFLAG_NOPROBE = (1 << 9), |
| @@ -643,8 +627,11 @@ struct ide_drive_s { | |||
| 643 | /* current packet command */ | 627 | /* current packet command */ |
| 644 | struct ide_atapi_pc *pc; | 628 | struct ide_atapi_pc *pc; |
| 645 | 629 | ||
| 630 | /* last failed packet command */ | ||
| 631 | struct ide_atapi_pc *failed_pc; | ||
| 632 | |||
| 646 | /* callback for packet commands */ | 633 | /* callback for packet commands */ |
| 647 | void (*pc_callback)(struct ide_drive_s *, int); | 634 | int (*pc_callback)(struct ide_drive_s *, int); |
| 648 | 635 | ||
| 649 | void (*pc_update_buffers)(struct ide_drive_s *, struct ide_atapi_pc *); | 636 | void (*pc_update_buffers)(struct ide_drive_s *, struct ide_atapi_pc *); |
| 650 | int (*pc_io_buffers)(struct ide_drive_s *, struct ide_atapi_pc *, | 637 | int (*pc_io_buffers)(struct ide_drive_s *, struct ide_atapi_pc *, |
| @@ -677,13 +664,13 @@ struct ide_tp_ops { | |||
| 677 | 664 | ||
| 678 | void (*set_irq)(struct hwif_s *, int); | 665 | void (*set_irq)(struct hwif_s *, int); |
| 679 | 666 | ||
| 680 | void (*tf_load)(ide_drive_t *, struct ide_task_s *); | 667 | void (*tf_load)(ide_drive_t *, struct ide_cmd *); |
| 681 | void (*tf_read)(ide_drive_t *, struct ide_task_s *); | 668 | void (*tf_read)(ide_drive_t *, struct ide_cmd *); |
| 682 | 669 | ||
| 683 | void (*input_data)(ide_drive_t *, struct request *, void *, | 670 | void (*input_data)(ide_drive_t *, struct ide_cmd *, |
| 684 | unsigned int); | 671 | void *, unsigned int); |
| 685 | void (*output_data)(ide_drive_t *, struct request *, void *, | 672 | void (*output_data)(ide_drive_t *, struct ide_cmd *, |
| 686 | unsigned int); | 673 | void *, unsigned int); |
| 687 | }; | 674 | }; |
| 688 | 675 | ||
| 689 | extern const struct ide_tp_ops default_tp_ops; | 676 | extern const struct ide_tp_ops default_tp_ops; |
| @@ -727,12 +714,12 @@ struct ide_port_ops { | |||
| 727 | 714 | ||
| 728 | struct ide_dma_ops { | 715 | struct ide_dma_ops { |
| 729 | void (*dma_host_set)(struct ide_drive_s *, int); | 716 | void (*dma_host_set)(struct ide_drive_s *, int); |
| 730 | int (*dma_setup)(struct ide_drive_s *); | 717 | int (*dma_setup)(struct ide_drive_s *, struct ide_cmd *); |
| 731 | void (*dma_exec_cmd)(struct ide_drive_s *, u8); | ||
| 732 | void (*dma_start)(struct ide_drive_s *); | 718 | void (*dma_start)(struct ide_drive_s *); |
| 733 | int (*dma_end)(struct ide_drive_s *); | 719 | int (*dma_end)(struct ide_drive_s *); |
| 734 | int (*dma_test_irq)(struct ide_drive_s *); | 720 | int (*dma_test_irq)(struct ide_drive_s *); |
| 735 | void (*dma_lost_irq)(struct ide_drive_s *); | 721 | void (*dma_lost_irq)(struct ide_drive_s *); |
| 722 | int (*dma_timer_expiry)(struct ide_drive_s *); | ||
| 736 | void (*dma_timeout)(struct ide_drive_s *); | 723 | void (*dma_timeout)(struct ide_drive_s *); |
| 737 | /* | 724 | /* |
| 738 | * The following method is optional and only required to be | 725 | * The following method is optional and only required to be |
| @@ -796,18 +783,8 @@ typedef struct hwif_s { | |||
| 796 | /* Scatter-gather list used to build the above */ | 783 | /* Scatter-gather list used to build the above */ |
| 797 | struct scatterlist *sg_table; | 784 | struct scatterlist *sg_table; |
| 798 | int sg_max_nents; /* Maximum number of entries in it */ | 785 | int sg_max_nents; /* Maximum number of entries in it */ |
| 799 | int sg_nents; /* Current number of entries in it */ | ||
| 800 | int sg_dma_direction; /* dma transfer direction */ | ||
| 801 | |||
| 802 | /* data phase of the active command (currently only valid for PIO/DMA) */ | ||
| 803 | int data_phase; | ||
| 804 | 786 | ||
| 805 | struct ide_task_s task; /* current command */ | 787 | struct ide_cmd cmd; /* current command */ |
| 806 | |||
| 807 | unsigned int nsect; | ||
| 808 | unsigned int nleft; | ||
| 809 | struct scatterlist *cursg; | ||
| 810 | unsigned int cursg_ofs; | ||
| 811 | 788 | ||
| 812 | int rqsize; /* max sectors per request */ | 789 | int rqsize; /* max sectors per request */ |
| 813 | int irq; /* our irq number */ | 790 | int irq; /* our irq number */ |
| @@ -865,9 +842,18 @@ struct ide_host { | |||
| 865 | ide_hwif_t *ports[MAX_HOST_PORTS + 1]; | 842 | ide_hwif_t *ports[MAX_HOST_PORTS + 1]; |
| 866 | unsigned int n_ports; | 843 | unsigned int n_ports; |
| 867 | struct device *dev[2]; | 844 | struct device *dev[2]; |
| 868 | unsigned int (*init_chipset)(struct pci_dev *); | 845 | |
| 846 | int (*init_chipset)(struct pci_dev *); | ||
| 847 | |||
| 848 | void (*get_lock)(irq_handler_t, void *); | ||
| 849 | void (*release_lock)(void); | ||
| 850 | |||
| 869 | irq_handler_t irq_handler; | 851 | irq_handler_t irq_handler; |
| 852 | |||
| 870 | unsigned long host_flags; | 853 | unsigned long host_flags; |
| 854 | |||
| 855 | int irq_flags; | ||
| 856 | |||
| 871 | void *host_priv; | 857 | void *host_priv; |
| 872 | ide_hwif_t *cur_port; /* for hosts requiring serialization */ | 858 | ide_hwif_t *cur_port; /* for hosts requiring serialization */ |
| 873 | 859 | ||
| @@ -884,7 +870,7 @@ typedef ide_startstop_t (ide_handler_t)(ide_drive_t *); | |||
| 884 | typedef int (ide_expiry_t)(ide_drive_t *); | 870 | typedef int (ide_expiry_t)(ide_drive_t *); |
| 885 | 871 | ||
| 886 | /* used by ide-cd, ide-floppy, etc. */ | 872 | /* used by ide-cd, ide-floppy, etc. */ |
| 887 | typedef void (xfer_func_t)(ide_drive_t *, struct request *rq, void *, unsigned); | 873 | typedef void (xfer_func_t)(ide_drive_t *, struct ide_cmd *, void *, unsigned); |
| 888 | 874 | ||
| 889 | extern struct mutex ide_setting_mtx; | 875 | extern struct mutex ide_setting_mtx; |
| 890 | 876 | ||
| @@ -1060,10 +1046,11 @@ enum { | |||
| 1060 | }; | 1046 | }; |
| 1061 | 1047 | ||
| 1062 | /* DRV_NAME has to be defined in the driver before using the macro below */ | 1048 | /* DRV_NAME has to be defined in the driver before using the macro below */ |
| 1063 | #define __ide_debug_log(lvl, fmt, args...) \ | 1049 | #define __ide_debug_log(lvl, fmt, args...) \ |
| 1064 | { \ | 1050 | { \ |
| 1065 | if (unlikely(drive->debug_mask & lvl)) \ | 1051 | if (unlikely(drive->debug_mask & lvl)) \ |
| 1066 | printk(KERN_INFO DRV_NAME ": " fmt, ## args); \ | 1052 | printk(KERN_INFO DRV_NAME ": %s: " fmt "\n", \ |
| 1053 | __func__, ## args); \ | ||
| 1067 | } | 1054 | } |
| 1068 | 1055 | ||
| 1069 | /* | 1056 | /* |
| @@ -1102,7 +1089,7 @@ int generic_ide_resume(struct device *); | |||
| 1102 | 1089 | ||
| 1103 | void ide_complete_power_step(ide_drive_t *, struct request *); | 1090 | void ide_complete_power_step(ide_drive_t *, struct request *); |
| 1104 | ide_startstop_t ide_start_power_step(ide_drive_t *, struct request *); | 1091 | ide_startstop_t ide_start_power_step(ide_drive_t *, struct request *); |
| 1105 | void ide_complete_pm_request(ide_drive_t *, struct request *); | 1092 | void ide_complete_pm_rq(ide_drive_t *, struct request *); |
| 1106 | void ide_check_pm_state(ide_drive_t *, struct request *); | 1093 | void ide_check_pm_state(ide_drive_t *, struct request *); |
| 1107 | 1094 | ||
| 1108 | /* | 1095 | /* |
| @@ -1114,7 +1101,6 @@ void ide_check_pm_state(ide_drive_t *, struct request *); | |||
| 1114 | struct ide_driver { | 1101 | struct ide_driver { |
| 1115 | const char *version; | 1102 | const char *version; |
| 1116 | ide_startstop_t (*do_request)(ide_drive_t *, struct request *, sector_t); | 1103 | ide_startstop_t (*do_request)(ide_drive_t *, struct request *, sector_t); |
| 1117 | int (*end_request)(ide_drive_t *, int, int); | ||
| 1118 | struct device_driver gen_driver; | 1104 | struct device_driver gen_driver; |
| 1119 | int (*probe)(ide_drive_t *); | 1105 | int (*probe)(ide_drive_t *); |
| 1120 | void (*remove)(ide_drive_t *); | 1106 | void (*remove)(ide_drive_t *); |
| @@ -1145,16 +1131,15 @@ int generic_ide_ioctl(ide_drive_t *, struct block_device *, unsigned, unsigned l | |||
| 1145 | extern int ide_vlb_clk; | 1131 | extern int ide_vlb_clk; |
| 1146 | extern int ide_pci_clk; | 1132 | extern int ide_pci_clk; |
| 1147 | 1133 | ||
| 1148 | extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs); | 1134 | unsigned int ide_rq_bytes(struct request *); |
| 1149 | int ide_end_dequeued_request(ide_drive_t *drive, struct request *rq, | 1135 | int ide_end_rq(ide_drive_t *, struct request *, int, unsigned int); |
| 1150 | int uptodate, int nr_sectors); | 1136 | void ide_kill_rq(ide_drive_t *, struct request *); |
| 1151 | |||
| 1152 | extern void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry); | ||
| 1153 | 1137 | ||
| 1154 | void ide_execute_command(ide_drive_t *, u8, ide_handler_t *, unsigned int, | 1138 | void __ide_set_handler(ide_drive_t *, ide_handler_t *, unsigned int); |
| 1155 | ide_expiry_t *); | 1139 | void ide_set_handler(ide_drive_t *, ide_handler_t *, unsigned int); |
| 1156 | 1140 | ||
| 1157 | void ide_execute_pkt_cmd(ide_drive_t *); | 1141 | void ide_execute_command(ide_drive_t *, struct ide_cmd *, ide_handler_t *, |
| 1142 | unsigned int); | ||
| 1158 | 1143 | ||
| 1159 | void ide_pad_transfer(ide_drive_t *, int, int); | 1144 | void ide_pad_transfer(ide_drive_t *, int, int); |
| 1160 | 1145 | ||
| @@ -1168,14 +1153,16 @@ int ide_busy_sleep(ide_hwif_t *, unsigned long, int); | |||
| 1168 | 1153 | ||
| 1169 | int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); | 1154 | int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); |
| 1170 | 1155 | ||
| 1156 | ide_startstop_t ide_do_park_unpark(ide_drive_t *, struct request *); | ||
| 1157 | ide_startstop_t ide_do_devset(ide_drive_t *, struct request *); | ||
| 1158 | |||
| 1171 | extern ide_startstop_t ide_do_reset (ide_drive_t *); | 1159 | extern ide_startstop_t ide_do_reset (ide_drive_t *); |
| 1172 | 1160 | ||
| 1173 | extern int ide_devset_execute(ide_drive_t *drive, | 1161 | extern int ide_devset_execute(ide_drive_t *drive, |
| 1174 | const struct ide_devset *setting, int arg); | 1162 | const struct ide_devset *setting, int arg); |
| 1175 | 1163 | ||
| 1176 | extern void ide_do_drive_cmd(ide_drive_t *, struct request *); | 1164 | void ide_complete_cmd(ide_drive_t *, struct ide_cmd *, u8, u8); |
| 1177 | 1165 | int ide_complete_rq(ide_drive_t *, int, unsigned int); | |
| 1178 | extern void ide_end_drive_cmd(ide_drive_t *, u8, u8); | ||
| 1179 | 1166 | ||
| 1180 | void ide_tf_dump(const char *, struct ide_taskfile *); | 1167 | void ide_tf_dump(const char *, struct ide_taskfile *); |
| 1181 | 1168 | ||
| @@ -1185,11 +1172,11 @@ u8 ide_read_altstatus(ide_hwif_t *); | |||
| 1185 | 1172 | ||
| 1186 | void ide_set_irq(ide_hwif_t *, int); | 1173 | void ide_set_irq(ide_hwif_t *, int); |
| 1187 | 1174 | ||
| 1188 | void ide_tf_load(ide_drive_t *, ide_task_t *); | 1175 | void ide_tf_load(ide_drive_t *, struct ide_cmd *); |
| 1189 | void ide_tf_read(ide_drive_t *, ide_task_t *); | 1176 | void ide_tf_read(ide_drive_t *, struct ide_cmd *); |
| 1190 | 1177 | ||
| 1191 | void ide_input_data(ide_drive_t *, struct request *, void *, unsigned int); | 1178 | void ide_input_data(ide_drive_t *, struct ide_cmd *, void *, unsigned int); |
| 1192 | void ide_output_data(ide_drive_t *, struct request *, void *, unsigned int); | 1179 | void ide_output_data(ide_drive_t *, struct ide_cmd *, void *, unsigned int); |
| 1193 | 1180 | ||
| 1194 | int ide_io_buffers(ide_drive_t *, struct ide_atapi_pc *, unsigned int, int); | 1181 | int ide_io_buffers(ide_drive_t *, struct ide_atapi_pc *, unsigned int, int); |
| 1195 | 1182 | ||
| @@ -1199,10 +1186,6 @@ void SELECT_MASK(ide_drive_t *, int); | |||
| 1199 | u8 ide_read_error(ide_drive_t *); | 1186 | u8 ide_read_error(ide_drive_t *); |
| 1200 | void ide_read_bcount_and_ireason(ide_drive_t *, u16 *, u8 *); | 1187 | void ide_read_bcount_and_ireason(ide_drive_t *, u16 *, u8 *); |
| 1201 | 1188 | ||
| 1202 | extern int drive_is_ready(ide_drive_t *); | ||
| 1203 | |||
| 1204 | void ide_pktcmd_tf_load(ide_drive_t *, u32, u16, u8); | ||
| 1205 | |||
| 1206 | int ide_check_atapi_device(ide_drive_t *, const char *); | 1189 | int ide_check_atapi_device(ide_drive_t *, const char *); |
| 1207 | 1190 | ||
| 1208 | void ide_init_pc(struct ide_atapi_pc *); | 1191 | void ide_init_pc(struct ide_atapi_pc *); |
| @@ -1239,16 +1222,18 @@ int ide_cd_expiry(ide_drive_t *); | |||
| 1239 | 1222 | ||
| 1240 | int ide_cd_get_xferlen(struct request *); | 1223 | int ide_cd_get_xferlen(struct request *); |
| 1241 | 1224 | ||
| 1242 | ide_startstop_t ide_issue_pc(ide_drive_t *); | 1225 | ide_startstop_t ide_issue_pc(ide_drive_t *, struct ide_cmd *); |
| 1243 | 1226 | ||
| 1244 | ide_startstop_t do_rw_taskfile(ide_drive_t *, ide_task_t *); | 1227 | ide_startstop_t do_rw_taskfile(ide_drive_t *, struct ide_cmd *); |
| 1245 | 1228 | ||
| 1246 | void task_end_request(ide_drive_t *, struct request *, u8); | 1229 | void ide_finish_cmd(ide_drive_t *, struct ide_cmd *, u8); |
| 1247 | 1230 | ||
| 1248 | int ide_raw_taskfile(ide_drive_t *, ide_task_t *, u8 *, u16); | 1231 | int ide_raw_taskfile(ide_drive_t *, struct ide_cmd *, u8 *, u16); |
| 1249 | int ide_no_data_taskfile(ide_drive_t *, ide_task_t *); | 1232 | int ide_no_data_taskfile(ide_drive_t *, struct ide_cmd *); |
| 1250 | 1233 | ||
| 1251 | int ide_taskfile_ioctl(ide_drive_t *, unsigned int, unsigned long); | 1234 | int ide_taskfile_ioctl(ide_drive_t *, unsigned long); |
| 1235 | |||
| 1236 | int ide_dev_read_id(ide_drive_t *, u8, u16 *); | ||
| 1252 | 1237 | ||
| 1253 | extern int ide_driveid_update(ide_drive_t *); | 1238 | extern int ide_driveid_update(ide_drive_t *); |
| 1254 | extern int ide_config_drive_speed(ide_drive_t *, u8); | 1239 | extern int ide_config_drive_speed(ide_drive_t *, u8); |
| @@ -1279,7 +1264,7 @@ static inline int ide_pci_is_in_compatibility_mode(struct pci_dev *dev) | |||
| 1279 | return 0; | 1264 | return 0; |
| 1280 | } | 1265 | } |
| 1281 | 1266 | ||
| 1282 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, | 1267 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, |
| 1283 | hw_regs_t *, hw_regs_t **); | 1268 | hw_regs_t *, hw_regs_t **); |
| 1284 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); | 1269 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); |
| 1285 | 1270 | ||
| @@ -1348,10 +1333,10 @@ enum { | |||
| 1348 | IDE_HFLAG_ERROR_STOPS_FIFO = (1 << 19), | 1333 | IDE_HFLAG_ERROR_STOPS_FIFO = (1 << 19), |
| 1349 | /* serialize ports */ | 1334 | /* serialize ports */ |
| 1350 | IDE_HFLAG_SERIALIZE = (1 << 20), | 1335 | IDE_HFLAG_SERIALIZE = (1 << 20), |
| 1351 | /* use legacy IRQs */ | 1336 | /* host is DTC2278 */ |
| 1352 | IDE_HFLAG_LEGACY_IRQS = (1 << 21), | 1337 | IDE_HFLAG_DTC2278 = (1 << 21), |
| 1353 | /* force use of legacy IRQs */ | 1338 | /* 4 devices on a single set of I/O ports */ |
| 1354 | IDE_HFLAG_FORCE_LEGACY_IRQS = (1 << 22), | 1339 | IDE_HFLAG_4DRIVES = (1 << 22), |
| 1355 | /* host is TRM290 */ | 1340 | /* host is TRM290 */ |
| 1356 | IDE_HFLAG_TRM290 = (1 << 23), | 1341 | IDE_HFLAG_TRM290 = (1 << 23), |
| 1357 | /* use 32-bit I/O ops */ | 1342 | /* use 32-bit I/O ops */ |
| @@ -1379,7 +1364,12 @@ enum { | |||
| 1379 | 1364 | ||
| 1380 | struct ide_port_info { | 1365 | struct ide_port_info { |
| 1381 | char *name; | 1366 | char *name; |
| 1382 | unsigned int (*init_chipset)(struct pci_dev *); | 1367 | |
| 1368 | int (*init_chipset)(struct pci_dev *); | ||
| 1369 | |||
| 1370 | void (*get_lock)(irq_handler_t, void *); | ||
| 1371 | void (*release_lock)(void); | ||
| 1372 | |||
| 1383 | void (*init_iops)(ide_hwif_t *); | 1373 | void (*init_iops)(ide_hwif_t *); |
| 1384 | void (*init_hwif)(ide_hwif_t *); | 1374 | void (*init_hwif)(ide_hwif_t *); |
| 1385 | int (*init_dma)(ide_hwif_t *, | 1375 | int (*init_dma)(ide_hwif_t *, |
| @@ -1396,6 +1386,9 @@ struct ide_port_info { | |||
| 1396 | u16 max_sectors; /* if < than the default one */ | 1386 | u16 max_sectors; /* if < than the default one */ |
| 1397 | 1387 | ||
| 1398 | u32 host_flags; | 1388 | u32 host_flags; |
| 1389 | |||
| 1390 | int irq_flags; | ||
| 1391 | |||
| 1399 | u8 pio_mask; | 1392 | u8 pio_mask; |
| 1400 | u8 swdma_mask; | 1393 | u8 swdma_mask; |
| 1401 | u8 mwdma_mask; | 1394 | u8 mwdma_mask; |
| @@ -1415,8 +1408,8 @@ int ide_pci_resume(struct pci_dev *); | |||
| 1415 | #define ide_pci_resume NULL | 1408 | #define ide_pci_resume NULL |
| 1416 | #endif | 1409 | #endif |
| 1417 | 1410 | ||
| 1418 | void ide_map_sg(ide_drive_t *, struct request *); | 1411 | void ide_map_sg(ide_drive_t *, struct ide_cmd *); |
| 1419 | void ide_init_sg_cmd(ide_drive_t *, struct request *); | 1412 | void ide_init_sg_cmd(struct ide_cmd *, unsigned int); |
| 1420 | 1413 | ||
| 1421 | #define BAD_DMA_DRIVE 0 | 1414 | #define BAD_DMA_DRIVE 0 |
| 1422 | #define GOOD_DMA_DRIVE 1 | 1415 | #define GOOD_DMA_DRIVE 1 |
| @@ -1450,18 +1443,18 @@ ide_startstop_t ide_dma_intr(ide_drive_t *); | |||
| 1450 | int ide_allocate_dma_engine(ide_hwif_t *); | 1443 | int ide_allocate_dma_engine(ide_hwif_t *); |
| 1451 | void ide_release_dma_engine(ide_hwif_t *); | 1444 | void ide_release_dma_engine(ide_hwif_t *); |
| 1452 | 1445 | ||
| 1453 | int ide_build_sglist(ide_drive_t *, struct request *); | 1446 | int ide_build_sglist(ide_drive_t *, struct ide_cmd *); |
| 1454 | void ide_destroy_dmatable(ide_drive_t *); | 1447 | void ide_destroy_dmatable(ide_drive_t *); |
| 1455 | 1448 | ||
| 1456 | #ifdef CONFIG_BLK_DEV_IDEDMA_SFF | 1449 | #ifdef CONFIG_BLK_DEV_IDEDMA_SFF |
| 1457 | int config_drive_for_dma(ide_drive_t *); | 1450 | int config_drive_for_dma(ide_drive_t *); |
| 1458 | extern int ide_build_dmatable(ide_drive_t *, struct request *); | 1451 | int ide_build_dmatable(ide_drive_t *, struct ide_cmd *); |
| 1459 | void ide_dma_host_set(ide_drive_t *, int); | 1452 | void ide_dma_host_set(ide_drive_t *, int); |
| 1460 | extern int ide_dma_setup(ide_drive_t *); | 1453 | int ide_dma_setup(ide_drive_t *, struct ide_cmd *); |
| 1461 | void ide_dma_exec_cmd(ide_drive_t *, u8); | ||
| 1462 | extern void ide_dma_start(ide_drive_t *); | 1454 | extern void ide_dma_start(ide_drive_t *); |
| 1463 | int ide_dma_end(ide_drive_t *); | 1455 | int ide_dma_end(ide_drive_t *); |
| 1464 | int ide_dma_test_irq(ide_drive_t *); | 1456 | int ide_dma_test_irq(ide_drive_t *); |
| 1457 | int ide_dma_sff_timer_expiry(ide_drive_t *); | ||
| 1465 | u8 ide_dma_sff_read_status(ide_hwif_t *); | 1458 | u8 ide_dma_sff_read_status(ide_hwif_t *); |
| 1466 | extern const struct ide_dma_ops sff_dma_ops; | 1459 | extern const struct ide_dma_ops sff_dma_ops; |
| 1467 | #else | 1460 | #else |
| @@ -1470,6 +1463,7 @@ static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; } | |||
| 1470 | 1463 | ||
| 1471 | void ide_dma_lost_irq(ide_drive_t *); | 1464 | void ide_dma_lost_irq(ide_drive_t *); |
| 1472 | void ide_dma_timeout(ide_drive_t *); | 1465 | void ide_dma_timeout(ide_drive_t *); |
| 1466 | ide_startstop_t ide_dma_timeout_retry(ide_drive_t *, int); | ||
| 1473 | 1467 | ||
| 1474 | #else | 1468 | #else |
| 1475 | static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; } | 1469 | static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; } |
| @@ -1481,21 +1475,27 @@ static inline void ide_dma_on(ide_drive_t *drive) { ; } | |||
| 1481 | static inline void ide_dma_verbose(ide_drive_t *drive) { ; } | 1475 | static inline void ide_dma_verbose(ide_drive_t *drive) { ; } |
| 1482 | static inline int ide_set_dma(ide_drive_t *drive) { return 1; } | 1476 | static inline int ide_set_dma(ide_drive_t *drive) { return 1; } |
| 1483 | static inline void ide_check_dma_crc(ide_drive_t *drive) { ; } | 1477 | static inline void ide_check_dma_crc(ide_drive_t *drive) { ; } |
| 1478 | static inline ide_startstop_t ide_dma_intr(ide_drive_t *drive) { return ide_stopped; } | ||
| 1479 | static inline ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error) { return ide_stopped; } | ||
| 1484 | static inline void ide_release_dma_engine(ide_hwif_t *hwif) { ; } | 1480 | static inline void ide_release_dma_engine(ide_hwif_t *hwif) { ; } |
| 1481 | static inline int ide_build_sglist(ide_drive_t *drive, | ||
| 1482 | struct ide_cmd *cmd) { return 0; } | ||
| 1485 | #endif /* CONFIG_BLK_DEV_IDEDMA */ | 1483 | #endif /* CONFIG_BLK_DEV_IDEDMA */ |
| 1486 | 1484 | ||
| 1487 | #ifdef CONFIG_BLK_DEV_IDEACPI | 1485 | #ifdef CONFIG_BLK_DEV_IDEACPI |
| 1486 | int ide_acpi_init(void); | ||
| 1488 | extern int ide_acpi_exec_tfs(ide_drive_t *drive); | 1487 | extern int ide_acpi_exec_tfs(ide_drive_t *drive); |
| 1489 | extern void ide_acpi_get_timing(ide_hwif_t *hwif); | 1488 | extern void ide_acpi_get_timing(ide_hwif_t *hwif); |
| 1490 | extern void ide_acpi_push_timing(ide_hwif_t *hwif); | 1489 | extern void ide_acpi_push_timing(ide_hwif_t *hwif); |
| 1491 | extern void ide_acpi_init(ide_hwif_t *hwif); | 1490 | void ide_acpi_init_port(ide_hwif_t *); |
| 1492 | void ide_acpi_port_init_devices(ide_hwif_t *); | 1491 | void ide_acpi_port_init_devices(ide_hwif_t *); |
| 1493 | extern void ide_acpi_set_state(ide_hwif_t *hwif, int on); | 1492 | extern void ide_acpi_set_state(ide_hwif_t *hwif, int on); |
| 1494 | #else | 1493 | #else |
| 1494 | static inline int ide_acpi_init(void) { return 0; } | ||
| 1495 | static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; } | 1495 | static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; } |
| 1496 | static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; } | 1496 | static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; } |
| 1497 | static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; } | 1497 | static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; } |
| 1498 | static inline void ide_acpi_init(ide_hwif_t *hwif) { ; } | 1498 | static inline void ide_acpi_init_port(ide_hwif_t *hwif) { ; } |
| 1499 | static inline void ide_acpi_port_init_devices(ide_hwif_t *hwif) { ; } | 1499 | static inline void ide_acpi_port_init_devices(ide_hwif_t *hwif) { ; } |
| 1500 | static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {} | 1500 | static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {} |
| 1501 | #endif | 1501 | #endif |
| @@ -1529,9 +1529,7 @@ static inline void ide_set_hwifdata (ide_hwif_t * hwif, void *data) | |||
| 1529 | hwif->hwif_data = data; | 1529 | hwif->hwif_data = data; |
| 1530 | } | 1530 | } |
| 1531 | 1531 | ||
| 1532 | const char *ide_xfer_verbose(u8 mode); | ||
| 1533 | extern void ide_toggle_bounce(ide_drive_t *drive, int on); | 1532 | extern void ide_toggle_bounce(ide_drive_t *drive, int on); |
| 1534 | extern int ide_set_xfer_rate(ide_drive_t *drive, u8 rate); | ||
| 1535 | 1533 | ||
| 1536 | u64 ide_get_lba_addr(struct ide_taskfile *, int); | 1534 | u64 ide_get_lba_addr(struct ide_taskfile *, int); |
| 1537 | u8 ide_dump_status(ide_drive_t *, const char *, u8); | 1535 | u8 ide_dump_status(ide_drive_t *, const char *, u8); |
| @@ -1570,14 +1568,18 @@ void ide_timing_merge(struct ide_timing *, struct ide_timing *, | |||
| 1570 | struct ide_timing *, unsigned int); | 1568 | struct ide_timing *, unsigned int); |
| 1571 | int ide_timing_compute(ide_drive_t *, u8, struct ide_timing *, int, int); | 1569 | int ide_timing_compute(ide_drive_t *, u8, struct ide_timing *, int, int); |
| 1572 | 1570 | ||
| 1571 | #ifdef CONFIG_IDE_XFER_MODE | ||
| 1573 | int ide_scan_pio_blacklist(char *); | 1572 | int ide_scan_pio_blacklist(char *); |
| 1574 | 1573 | const char *ide_xfer_verbose(u8); | |
| 1575 | u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8); | 1574 | u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8); |
| 1576 | |||
| 1577 | int ide_set_pio_mode(ide_drive_t *, u8); | 1575 | int ide_set_pio_mode(ide_drive_t *, u8); |
| 1578 | int ide_set_dma_mode(ide_drive_t *, u8); | 1576 | int ide_set_dma_mode(ide_drive_t *, u8); |
| 1579 | |||
| 1580 | void ide_set_pio(ide_drive_t *, u8); | 1577 | void ide_set_pio(ide_drive_t *, u8); |
| 1578 | int ide_set_xfer_rate(ide_drive_t *, u8); | ||
| 1579 | #else | ||
| 1580 | static inline void ide_set_pio(ide_drive_t *drive, u8 pio) { ; } | ||
| 1581 | static inline int ide_set_xfer_rate(ide_drive_t *drive, u8 rate) { return -1; } | ||
| 1582 | #endif | ||
| 1581 | 1583 | ||
| 1582 | static inline void ide_set_max_pio(ide_drive_t *drive) | 1584 | static inline void ide_set_max_pio(ide_drive_t *drive) |
| 1583 | { | 1585 | { |
| @@ -1610,6 +1612,10 @@ static inline ide_drive_t *ide_get_pair_dev(ide_drive_t *drive) | |||
| 1610 | #define ide_port_for_each_dev(i, dev, port) \ | 1612 | #define ide_port_for_each_dev(i, dev, port) \ |
| 1611 | for ((i) = 0; ((dev) = (port)->devices[i]) || (i) < MAX_DRIVES; (i)++) | 1613 | for ((i) = 0; ((dev) = (port)->devices[i]) || (i) < MAX_DRIVES; (i)++) |
| 1612 | 1614 | ||
| 1615 | #define ide_port_for_each_present_dev(i, dev, port) \ | ||
| 1616 | for ((i) = 0; ((dev) = (port)->devices[i]) || (i) < MAX_DRIVES; (i)++) \ | ||
| 1617 | if ((dev)->dev_flags & IDE_DFLAG_PRESENT) | ||
| 1618 | |||
| 1613 | #define ide_host_for_each_port(i, port, host) \ | 1619 | #define ide_host_for_each_port(i, port, host) \ |
| 1614 | for ((i) = 0; ((port) = (host)->ports[i]) || (i) < MAX_HOST_PORTS; (i)++) | 1620 | for ((i) = 0; ((port) = (host)->ports[i]) || (i) < MAX_HOST_PORTS; (i)++) |
| 1615 | 1621 | ||
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index c4e6ca1a6306..4b501b48ce86 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
| @@ -18,6 +18,22 @@ | |||
| 18 | #include <linux/types.h> | 18 | #include <linux/types.h> |
| 19 | #include <asm/byteorder.h> | 19 | #include <asm/byteorder.h> |
| 20 | 20 | ||
| 21 | /* | ||
| 22 | * DS bit usage | ||
| 23 | * | ||
| 24 | * TA = transmitter address | ||
| 25 | * RA = receiver address | ||
| 26 | * DA = destination address | ||
| 27 | * SA = source address | ||
| 28 | * | ||
| 29 | * ToDS FromDS A1(RA) A2(TA) A3 A4 Use | ||
| 30 | * ----------------------------------------------------------------- | ||
| 31 | * 0 0 DA SA BSSID - IBSS/DLS | ||
| 32 | * 0 1 DA BSSID SA - AP -> STA | ||
| 33 | * 1 0 BSSID SA DA - AP <- STA | ||
| 34 | * 1 1 RA TA DA SA unspecified (WDS) | ||
| 35 | */ | ||
| 36 | |||
| 21 | #define FCS_LEN 4 | 37 | #define FCS_LEN 4 |
| 22 | 38 | ||
| 23 | #define IEEE80211_FCTL_VERS 0x0003 | 39 | #define IEEE80211_FCTL_VERS 0x0003 |
| @@ -527,6 +543,8 @@ struct ieee80211_tim_ie { | |||
| 527 | u8 virtual_map[0]; | 543 | u8 virtual_map[0]; |
| 528 | } __attribute__ ((packed)); | 544 | } __attribute__ ((packed)); |
| 529 | 545 | ||
| 546 | #define WLAN_SA_QUERY_TR_ID_LEN 16 | ||
| 547 | |||
| 530 | struct ieee80211_mgmt { | 548 | struct ieee80211_mgmt { |
| 531 | __le16 frame_control; | 549 | __le16 frame_control; |
| 532 | __le16 duration; | 550 | __le16 duration; |
| @@ -646,6 +664,10 @@ struct ieee80211_mgmt { | |||
| 646 | u8 action_code; | 664 | u8 action_code; |
| 647 | u8 variable[0]; | 665 | u8 variable[0]; |
| 648 | } __attribute__((packed)) mesh_action; | 666 | } __attribute__((packed)) mesh_action; |
| 667 | struct { | ||
| 668 | u8 action; | ||
| 669 | u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN]; | ||
| 670 | } __attribute__ ((packed)) sa_query; | ||
| 649 | } u; | 671 | } u; |
| 650 | } __attribute__ ((packed)) action; | 672 | } __attribute__ ((packed)) action; |
| 651 | } u; | 673 | } u; |
| @@ -655,6 +677,15 @@ struct ieee80211_mgmt { | |||
| 655 | #define IEEE80211_MIN_ACTION_SIZE offsetof(struct ieee80211_mgmt, u.action.u) | 677 | #define IEEE80211_MIN_ACTION_SIZE offsetof(struct ieee80211_mgmt, u.action.u) |
| 656 | 678 | ||
| 657 | 679 | ||
| 680 | /* Management MIC information element (IEEE 802.11w) */ | ||
| 681 | struct ieee80211_mmie { | ||
| 682 | u8 element_id; | ||
| 683 | u8 length; | ||
| 684 | __le16 key_id; | ||
| 685 | u8 sequence_number[6]; | ||
| 686 | u8 mic[8]; | ||
| 687 | } __attribute__ ((packed)); | ||
| 688 | |||
| 658 | /* Control frames */ | 689 | /* Control frames */ |
| 659 | struct ieee80211_rts { | 690 | struct ieee80211_rts { |
| 660 | __le16 frame_control; | 691 | __le16 frame_control; |
| @@ -836,6 +867,7 @@ struct ieee80211_ht_info { | |||
| 836 | /* Authentication algorithms */ | 867 | /* Authentication algorithms */ |
| 837 | #define WLAN_AUTH_OPEN 0 | 868 | #define WLAN_AUTH_OPEN 0 |
| 838 | #define WLAN_AUTH_SHARED_KEY 1 | 869 | #define WLAN_AUTH_SHARED_KEY 1 |
| 870 | #define WLAN_AUTH_FT 2 | ||
| 839 | #define WLAN_AUTH_LEAP 128 | 871 | #define WLAN_AUTH_LEAP 128 |
| 840 | 872 | ||
| 841 | #define WLAN_AUTH_CHALLENGE_LEN 128 | 873 | #define WLAN_AUTH_CHALLENGE_LEN 128 |
| @@ -899,6 +931,9 @@ enum ieee80211_statuscode { | |||
| 899 | /* 802.11g */ | 931 | /* 802.11g */ |
| 900 | WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25, | 932 | WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25, |
| 901 | WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26, | 933 | WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26, |
| 934 | /* 802.11w */ | ||
| 935 | WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY = 30, | ||
| 936 | WLAN_STATUS_ROBUST_MGMT_FRAME_POLICY_VIOLATION = 31, | ||
| 902 | /* 802.11i */ | 937 | /* 802.11i */ |
| 903 | WLAN_STATUS_INVALID_IE = 40, | 938 | WLAN_STATUS_INVALID_IE = 40, |
| 904 | WLAN_STATUS_INVALID_GROUP_CIPHER = 41, | 939 | WLAN_STATUS_INVALID_GROUP_CIPHER = 41, |
| @@ -1018,6 +1053,8 @@ enum ieee80211_eid { | |||
| 1018 | WLAN_EID_HT_INFORMATION = 61, | 1053 | WLAN_EID_HT_INFORMATION = 61, |
| 1019 | /* 802.11i */ | 1054 | /* 802.11i */ |
| 1020 | WLAN_EID_RSN = 48, | 1055 | WLAN_EID_RSN = 48, |
| 1056 | WLAN_EID_TIMEOUT_INTERVAL = 56, | ||
| 1057 | WLAN_EID_MMIE = 76 /* 802.11w */, | ||
| 1021 | WLAN_EID_WPA = 221, | 1058 | WLAN_EID_WPA = 221, |
| 1022 | WLAN_EID_GENERIC = 221, | 1059 | WLAN_EID_GENERIC = 221, |
| 1023 | WLAN_EID_VENDOR_SPECIFIC = 221, | 1060 | WLAN_EID_VENDOR_SPECIFIC = 221, |
| @@ -1030,6 +1067,8 @@ enum ieee80211_category { | |||
| 1030 | WLAN_CATEGORY_QOS = 1, | 1067 | WLAN_CATEGORY_QOS = 1, |
| 1031 | WLAN_CATEGORY_DLS = 2, | 1068 | WLAN_CATEGORY_DLS = 2, |
| 1032 | WLAN_CATEGORY_BACK = 3, | 1069 | WLAN_CATEGORY_BACK = 3, |
| 1070 | WLAN_CATEGORY_PUBLIC = 4, | ||
| 1071 | WLAN_CATEGORY_SA_QUERY = 8, | ||
| 1033 | WLAN_CATEGORY_WMM = 17, | 1072 | WLAN_CATEGORY_WMM = 17, |
| 1034 | }; | 1073 | }; |
| 1035 | 1074 | ||
| @@ -1104,6 +1143,12 @@ struct ieee80211_country_ie_triplet { | |||
| 1104 | }; | 1143 | }; |
| 1105 | } __attribute__ ((packed)); | 1144 | } __attribute__ ((packed)); |
| 1106 | 1145 | ||
| 1146 | enum ieee80211_timeout_interval_type { | ||
| 1147 | WLAN_TIMEOUT_REASSOC_DEADLINE = 1 /* 802.11r */, | ||
| 1148 | WLAN_TIMEOUT_KEY_LIFETIME = 2 /* 802.11r */, | ||
| 1149 | WLAN_TIMEOUT_ASSOC_COMEBACK = 3 /* 802.11w */, | ||
| 1150 | }; | ||
| 1151 | |||
| 1107 | /* BACK action code */ | 1152 | /* BACK action code */ |
| 1108 | enum ieee80211_back_actioncode { | 1153 | enum ieee80211_back_actioncode { |
| 1109 | WLAN_ACTION_ADDBA_REQ = 0, | 1154 | WLAN_ACTION_ADDBA_REQ = 0, |
| @@ -1118,6 +1163,13 @@ enum ieee80211_back_parties { | |||
| 1118 | WLAN_BACK_TIMER = 2, | 1163 | WLAN_BACK_TIMER = 2, |
| 1119 | }; | 1164 | }; |
| 1120 | 1165 | ||
| 1166 | /* SA Query action */ | ||
| 1167 | enum ieee80211_sa_query_action { | ||
| 1168 | WLAN_ACTION_SA_QUERY_REQUEST = 0, | ||
| 1169 | WLAN_ACTION_SA_QUERY_RESPONSE = 1, | ||
| 1170 | }; | ||
| 1171 | |||
| 1172 | |||
| 1121 | /* A-MSDU 802.11n */ | 1173 | /* A-MSDU 802.11n */ |
| 1122 | #define IEEE80211_QOS_CONTROL_A_MSDU_PRESENT 0x0080 | 1174 | #define IEEE80211_QOS_CONTROL_A_MSDU_PRESENT 0x0080 |
| 1123 | 1175 | ||
| @@ -1128,6 +1180,7 @@ enum ieee80211_back_parties { | |||
| 1128 | /* reserved: 0x000FAC03 */ | 1180 | /* reserved: 0x000FAC03 */ |
| 1129 | #define WLAN_CIPHER_SUITE_CCMP 0x000FAC04 | 1181 | #define WLAN_CIPHER_SUITE_CCMP 0x000FAC04 |
| 1130 | #define WLAN_CIPHER_SUITE_WEP104 0x000FAC05 | 1182 | #define WLAN_CIPHER_SUITE_WEP104 0x000FAC05 |
| 1183 | #define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06 | ||
| 1131 | 1184 | ||
| 1132 | #define WLAN_MAX_KEY_LEN 32 | 1185 | #define WLAN_MAX_KEY_LEN 32 |
| 1133 | 1186 | ||
| @@ -1185,4 +1238,149 @@ static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr) | |||
| 1185 | return hdr->addr1; | 1238 | return hdr->addr1; |
| 1186 | } | 1239 | } |
| 1187 | 1240 | ||
| 1241 | /** | ||
| 1242 | * ieee80211_is_robust_mgmt_frame - check if frame is a robust management frame | ||
| 1243 | * @hdr: the frame (buffer must include at least the first octet of payload) | ||
| 1244 | */ | ||
| 1245 | static inline bool ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr) | ||
| 1246 | { | ||
| 1247 | if (ieee80211_is_disassoc(hdr->frame_control) || | ||
| 1248 | ieee80211_is_deauth(hdr->frame_control)) | ||
| 1249 | return true; | ||
| 1250 | |||
| 1251 | if (ieee80211_is_action(hdr->frame_control)) { | ||
| 1252 | u8 *category; | ||
| 1253 | |||
| 1254 | /* | ||
| 1255 | * Action frames, excluding Public Action frames, are Robust | ||
| 1256 | * Management Frames. However, if we are looking at a Protected | ||
| 1257 | * frame, skip the check since the data may be encrypted and | ||
| 1258 | * the frame has already been found to be a Robust Management | ||
| 1259 | * Frame (by the other end). | ||
| 1260 | */ | ||
| 1261 | if (ieee80211_has_protected(hdr->frame_control)) | ||
| 1262 | return true; | ||
| 1263 | category = ((u8 *) hdr) + 24; | ||
| 1264 | return *category != WLAN_CATEGORY_PUBLIC; | ||
| 1265 | } | ||
| 1266 | |||
| 1267 | return false; | ||
| 1268 | } | ||
| 1269 | |||
| 1270 | /** | ||
| 1271 | * ieee80211_fhss_chan_to_freq - get channel frequency | ||
| 1272 | * @channel: the FHSS channel | ||
| 1273 | * | ||
| 1274 | * Convert IEEE802.11 FHSS channel to frequency (MHz) | ||
| 1275 | * Ref IEEE 802.11-2007 section 14.6 | ||
| 1276 | */ | ||
| 1277 | static inline int ieee80211_fhss_chan_to_freq(int channel) | ||
| 1278 | { | ||
| 1279 | if ((channel > 1) && (channel < 96)) | ||
| 1280 | return channel + 2400; | ||
| 1281 | else | ||
| 1282 | return -1; | ||
| 1283 | } | ||
| 1284 | |||
| 1285 | /** | ||
| 1286 | * ieee80211_freq_to_fhss_chan - get channel | ||
| 1287 | * @freq: the channels frequency | ||
| 1288 | * | ||
| 1289 | * Convert frequency (MHz) to IEEE802.11 FHSS channel | ||
| 1290 | * Ref IEEE 802.11-2007 section 14.6 | ||
| 1291 | */ | ||
| 1292 | static inline int ieee80211_freq_to_fhss_chan(int freq) | ||
| 1293 | { | ||
| 1294 | if ((freq > 2401) && (freq < 2496)) | ||
| 1295 | return freq - 2400; | ||
| 1296 | else | ||
| 1297 | return -1; | ||
| 1298 | } | ||
| 1299 | |||
| 1300 | /** | ||
| 1301 | * ieee80211_dsss_chan_to_freq - get channel center frequency | ||
| 1302 | * @channel: the DSSS channel | ||
| 1303 | * | ||
| 1304 | * Convert IEEE802.11 DSSS channel to the center frequency (MHz). | ||
| 1305 | * Ref IEEE 802.11-2007 section 15.6 | ||
| 1306 | */ | ||
| 1307 | static inline int ieee80211_dsss_chan_to_freq(int channel) | ||
| 1308 | { | ||
| 1309 | if ((channel > 0) && (channel < 14)) | ||
| 1310 | return 2407 + (channel * 5); | ||
| 1311 | else if (channel == 14) | ||
| 1312 | return 2484; | ||
| 1313 | else | ||
| 1314 | return -1; | ||
| 1315 | } | ||
| 1316 | |||
| 1317 | /** | ||
| 1318 | * ieee80211_freq_to_dsss_chan - get channel | ||
| 1319 | * @freq: the frequency | ||
| 1320 | * | ||
| 1321 | * Convert frequency (MHz) to IEEE802.11 DSSS channel | ||
| 1322 | * Ref IEEE 802.11-2007 section 15.6 | ||
| 1323 | * | ||
| 1324 | * This routine selects the channel with the closest center frequency. | ||
| 1325 | */ | ||
| 1326 | static inline int ieee80211_freq_to_dsss_chan(int freq) | ||
| 1327 | { | ||
| 1328 | if ((freq >= 2410) && (freq < 2475)) | ||
| 1329 | return (freq - 2405) / 5; | ||
| 1330 | else if ((freq >= 2482) && (freq < 2487)) | ||
| 1331 | return 14; | ||
| 1332 | else | ||
| 1333 | return -1; | ||
| 1334 | } | ||
| 1335 | |||
| 1336 | /* Convert IEEE802.11 HR DSSS channel to frequency (MHz) and back | ||
| 1337 | * Ref IEEE 802.11-2007 section 18.4.6.2 | ||
| 1338 | * | ||
| 1339 | * The channels and frequencies are the same as those defined for DSSS | ||
| 1340 | */ | ||
| 1341 | #define ieee80211_hr_chan_to_freq(chan) ieee80211_dsss_chan_to_freq(chan) | ||
| 1342 | #define ieee80211_freq_to_hr_chan(freq) ieee80211_freq_to_dsss_chan(freq) | ||
| 1343 | |||
| 1344 | /* Convert IEEE802.11 ERP channel to frequency (MHz) and back | ||
| 1345 | * Ref IEEE 802.11-2007 section 19.4.2 | ||
| 1346 | */ | ||
| 1347 | #define ieee80211_erp_chan_to_freq(chan) ieee80211_hr_chan_to_freq(chan) | ||
| 1348 | #define ieee80211_freq_to_erp_chan(freq) ieee80211_freq_to_hr_chan(freq) | ||
| 1349 | |||
| 1350 | /** | ||
| 1351 | * ieee80211_ofdm_chan_to_freq - get channel center frequency | ||
| 1352 | * @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz | ||
| 1353 | * @channel: the OFDM channel | ||
| 1354 | * | ||
| 1355 | * Convert IEEE802.11 OFDM channel to center frequency (MHz) | ||
| 1356 | * Ref IEEE 802.11-2007 section 17.3.8.3.2 | ||
| 1357 | */ | ||
| 1358 | static inline int ieee80211_ofdm_chan_to_freq(int s_freq, int channel) | ||
| 1359 | { | ||
| 1360 | if ((channel > 0) && (channel <= 200) && | ||
| 1361 | (s_freq >= 4000)) | ||
| 1362 | return s_freq + (channel * 5); | ||
| 1363 | else | ||
| 1364 | return -1; | ||
| 1365 | } | ||
| 1366 | |||
| 1367 | /** | ||
| 1368 | * ieee80211_freq_to_ofdm_channel - get channel | ||
| 1369 | * @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz | ||
| 1370 | * @freq: the frequency | ||
| 1371 | * | ||
| 1372 | * Convert frequency (MHz) to IEEE802.11 OFDM channel | ||
| 1373 | * Ref IEEE 802.11-2007 section 17.3.8.3.2 | ||
| 1374 | * | ||
| 1375 | * This routine selects the channel with the closest center frequency. | ||
| 1376 | */ | ||
| 1377 | static inline int ieee80211_freq_to_ofdm_chan(int s_freq, int freq) | ||
| 1378 | { | ||
| 1379 | if ((freq > (s_freq + 2)) && (freq <= (s_freq + 1202)) && | ||
| 1380 | (s_freq >= 4000)) | ||
| 1381 | return (freq + 2 - s_freq) / 5; | ||
| 1382 | else | ||
| 1383 | return -1; | ||
| 1384 | } | ||
| 1385 | |||
| 1188 | #endif /* LINUX_IEEE80211_H */ | 1386 | #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_arcnet.h b/include/linux/if_arcnet.h index 27ea2ac445ad..0835debab115 100644 --- a/include/linux/if_arcnet.h +++ b/include/linux/if_arcnet.h | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #ifndef _LINUX_IF_ARCNET_H | 16 | #ifndef _LINUX_IF_ARCNET_H |
| 17 | #define _LINUX_IF_ARCNET_H | 17 | #define _LINUX_IF_ARCNET_H |
| 18 | 18 | ||
| 19 | #include <linux/types.h> | ||
| 19 | #include <linux/if_ether.h> | 20 | #include <linux/if_ether.h> |
| 20 | 21 | ||
| 21 | 22 | ||
| @@ -57,10 +58,10 @@ | |||
| 57 | */ | 58 | */ |
| 58 | struct arc_rfc1201 | 59 | struct arc_rfc1201 |
| 59 | { | 60 | { |
| 60 | uint8_t proto; /* protocol ID field - varies */ | 61 | __u8 proto; /* protocol ID field - varies */ |
| 61 | uint8_t split_flag; /* for use with split packets */ | 62 | __u8 split_flag; /* for use with split packets */ |
| 62 | __be16 sequence; /* sequence number */ | 63 | __be16 sequence; /* sequence number */ |
| 63 | uint8_t payload[0]; /* space remaining in packet (504 bytes)*/ | 64 | __u8 payload[0]; /* space remaining in packet (504 bytes)*/ |
| 64 | }; | 65 | }; |
| 65 | #define RFC1201_HDR_SIZE 4 | 66 | #define RFC1201_HDR_SIZE 4 |
| 66 | 67 | ||
| @@ -70,8 +71,8 @@ struct arc_rfc1201 | |||
| 70 | */ | 71 | */ |
| 71 | struct arc_rfc1051 | 72 | struct arc_rfc1051 |
| 72 | { | 73 | { |
| 73 | uint8_t proto; /* ARC_P_RFC1051_ARP/RFC1051_IP */ | 74 | __u8 proto; /* ARC_P_RFC1051_ARP/RFC1051_IP */ |
| 74 | uint8_t payload[0]; /* 507 bytes */ | 75 | __u8 payload[0]; /* 507 bytes */ |
| 75 | }; | 76 | }; |
| 76 | #define RFC1051_HDR_SIZE 1 | 77 | #define RFC1051_HDR_SIZE 1 |
| 77 | 78 | ||
| @@ -82,20 +83,20 @@ struct arc_rfc1051 | |||
| 82 | */ | 83 | */ |
| 83 | struct arc_eth_encap | 84 | struct arc_eth_encap |
| 84 | { | 85 | { |
| 85 | uint8_t proto; /* Always ARC_P_ETHER */ | 86 | __u8 proto; /* Always ARC_P_ETHER */ |
| 86 | struct ethhdr eth; /* standard ethernet header (yuck!) */ | 87 | struct ethhdr eth; /* standard ethernet header (yuck!) */ |
| 87 | uint8_t payload[0]; /* 493 bytes */ | 88 | __u8 payload[0]; /* 493 bytes */ |
| 88 | }; | 89 | }; |
| 89 | #define ETH_ENCAP_HDR_SIZE 14 | 90 | #define ETH_ENCAP_HDR_SIZE 14 |
| 90 | 91 | ||
| 91 | 92 | ||
| 92 | struct arc_cap | 93 | struct arc_cap |
| 93 | { | 94 | { |
| 94 | uint8_t proto; | 95 | __u8 proto; |
| 95 | uint8_t cookie[sizeof(int)]; /* Actually NOT sent over the network */ | 96 | __u8 cookie[sizeof(int)]; /* Actually NOT sent over the network */ |
| 96 | union { | 97 | union { |
| 97 | uint8_t ack; | 98 | __u8 ack; |
| 98 | uint8_t raw[0]; /* 507 bytes */ | 99 | __u8 raw[0]; /* 507 bytes */ |
| 99 | } mes; | 100 | } mes; |
| 100 | }; | 101 | }; |
| 101 | 102 | ||
| @@ -109,7 +110,7 @@ struct arc_cap | |||
| 109 | */ | 110 | */ |
| 110 | struct arc_hardware | 111 | struct arc_hardware |
| 111 | { | 112 | { |
| 112 | uint8_t source, /* source ARCnet - filled in automagically */ | 113 | __u8 source, /* source ARCnet - filled in automagically */ |
| 113 | dest, /* destination ARCnet - 0 for broadcast */ | 114 | dest, /* destination ARCnet - 0 for broadcast */ |
| 114 | offset[2]; /* offset bytes (some weird semantics) */ | 115 | offset[2]; /* offset bytes (some weird semantics) */ |
| 115 | }; | 116 | }; |
| @@ -130,7 +131,7 @@ struct archdr | |||
| 130 | struct arc_rfc1051 rfc1051; | 131 | struct arc_rfc1051 rfc1051; |
| 131 | struct arc_eth_encap eth_encap; | 132 | struct arc_eth_encap eth_encap; |
| 132 | struct arc_cap cap; | 133 | struct arc_cap cap; |
| 133 | uint8_t raw[0]; /* 508 bytes */ | 134 | __u8 raw[0]; /* 508 bytes */ |
| 134 | } soft; | 135 | } soft; |
| 135 | }; | 136 | }; |
| 136 | 137 | ||
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h index 7f3c735f422b..cfe4fe1b7132 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 */ |
| @@ -78,12 +78,13 @@ | |||
| 78 | #define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ | 78 | #define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ |
| 79 | #define ETH_P_AOE 0x88A2 /* ATA over Ethernet */ | 79 | #define ETH_P_AOE 0x88A2 /* ATA over Ethernet */ |
| 80 | #define ETH_P_TIPC 0x88CA /* TIPC */ | 80 | #define ETH_P_TIPC 0x88CA /* TIPC */ |
| 81 | #define ETH_P_FCOE 0x8906 /* Fibre Channel over Ethernet */ | ||
| 81 | #define ETH_P_EDSA 0xDADA /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */ | 82 | #define ETH_P_EDSA 0xDADA /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 82 | 83 | ||
| 83 | /* | 84 | /* |
| 84 | * Non DIX types. Won't clash for 1500 types. | 85 | * Non DIX types. Won't clash for 1500 types. |
| 85 | */ | 86 | */ |
| 86 | 87 | ||
| 87 | #define ETH_P_802_3 0x0001 /* Dummy type for 802.3 frames */ | 88 | #define ETH_P_802_3 0x0001 /* Dummy type for 802.3 frames */ |
| 88 | #define ETH_P_AX25 0x0002 /* Dummy protocol id for AX.25 */ | 89 | #define ETH_P_AX25 0x0002 /* Dummy protocol id for AX.25 */ |
| 89 | #define ETH_P_ALL 0x0003 /* Every packet (be careful!!!) */ | 90 | #define ETH_P_ALL 0x0003 /* Every packet (be careful!!!) */ |
| @@ -109,7 +110,7 @@ | |||
| 109 | /* | 110 | /* |
| 110 | * This is an Ethernet frame header. | 111 | * This is an Ethernet frame header. |
| 111 | */ | 112 | */ |
| 112 | 113 | ||
| 113 | struct ethhdr { | 114 | struct ethhdr { |
| 114 | unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ | 115 | unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ |
| 115 | unsigned char h_source[ETH_ALEN]; /* source ether addr */ | 116 | unsigned char h_source[ETH_ALEN]; /* source ether addr */ |
diff --git a/include/linux/if_frad.h b/include/linux/if_frad.h index 60e16a551dd6..673f2209453d 100644 --- a/include/linux/if_frad.h +++ b/include/linux/if_frad.h | |||
| @@ -153,7 +153,6 @@ struct frhdr | |||
| 153 | 153 | ||
| 154 | struct dlci_local | 154 | struct dlci_local |
| 155 | { | 155 | { |
| 156 | struct net_device_stats stats; | ||
| 157 | struct net_device *master; | 156 | struct net_device *master; |
| 158 | struct net_device *slave; | 157 | struct net_device *slave; |
| 159 | struct dlci_conf config; | 158 | struct dlci_conf config; |
diff --git a/include/linux/if_pppol2tp.h b/include/linux/if_pppol2tp.h index c7a66882b6d0..3a14b088c8ec 100644 --- a/include/linux/if_pppol2tp.h +++ b/include/linux/if_pppol2tp.h | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | */ | 26 | */ |
| 27 | struct pppol2tp_addr | 27 | struct pppol2tp_addr |
| 28 | { | 28 | { |
| 29 | pid_t pid; /* pid that owns the fd. | 29 | __kernel_pid_t pid; /* pid that owns the fd. |
| 30 | * 0 => current */ | 30 | * 0 => current */ |
| 31 | int fd; /* FD of UDP socket to use */ | 31 | int fd; /* FD of UDP socket to use */ |
| 32 | 32 | ||
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/intel-iommu.h b/include/linux/intel-iommu.h index d2e3cbfba14f..1d6c71d96ede 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h | |||
| @@ -292,6 +292,8 @@ struct intel_iommu { | |||
| 292 | spinlock_t register_lock; /* protect register handling */ | 292 | spinlock_t register_lock; /* protect register handling */ |
| 293 | int seq_id; /* sequence id of the iommu */ | 293 | int seq_id; /* sequence id of the iommu */ |
| 294 | int agaw; /* agaw of this iommu */ | 294 | int agaw; /* agaw of this iommu */ |
| 295 | unsigned int irq; | ||
| 296 | unsigned char name[13]; /* Device Name */ | ||
| 295 | 297 | ||
| 296 | #ifdef CONFIG_DMAR | 298 | #ifdef CONFIG_DMAR |
| 297 | unsigned long *domain_ids; /* bitmap of domains */ | 299 | unsigned long *domain_ids; /* bitmap of domains */ |
| @@ -299,8 +301,6 @@ struct intel_iommu { | |||
| 299 | spinlock_t lock; /* protect context, domain ids */ | 301 | spinlock_t lock; /* protect context, domain ids */ |
| 300 | struct root_entry *root_entry; /* virtual address */ | 302 | struct root_entry *root_entry; /* virtual address */ |
| 301 | 303 | ||
| 302 | unsigned int irq; | ||
| 303 | unsigned char name[7]; /* Device Name */ | ||
| 304 | struct iommu_flush flush; | 304 | struct iommu_flush flush; |
| 305 | #endif | 305 | #endif |
| 306 | struct q_inval *qi; /* Queued invalidation info */ | 306 | struct q_inval *qi; /* Queued invalidation info */ |
| @@ -321,6 +321,7 @@ extern struct dmar_drhd_unit * dmar_find_matched_drhd_unit(struct pci_dev *dev); | |||
| 321 | extern int alloc_iommu(struct dmar_drhd_unit *drhd); | 321 | extern int alloc_iommu(struct dmar_drhd_unit *drhd); |
| 322 | extern void free_iommu(struct intel_iommu *iommu); | 322 | extern void free_iommu(struct intel_iommu *iommu); |
| 323 | extern int dmar_enable_qi(struct intel_iommu *iommu); | 323 | extern int dmar_enable_qi(struct intel_iommu *iommu); |
| 324 | extern void dmar_disable_qi(struct intel_iommu *iommu); | ||
| 324 | extern void qi_global_iec(struct intel_iommu *iommu); | 325 | extern void qi_global_iec(struct intel_iommu *iommu); |
| 325 | 326 | ||
| 326 | extern int qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, | 327 | extern int qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, |
| @@ -331,11 +332,4 @@ extern int qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr, | |||
| 331 | 332 | ||
| 332 | extern int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); | 333 | extern int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); |
| 333 | 334 | ||
| 334 | extern void *intel_alloc_coherent(struct device *, size_t, dma_addr_t *, gfp_t); | ||
| 335 | extern void intel_free_coherent(struct device *, size_t, void *, dma_addr_t); | ||
| 336 | extern dma_addr_t intel_map_single(struct device *, phys_addr_t, size_t, int); | ||
| 337 | extern void intel_unmap_single(struct device *, dma_addr_t, size_t, int); | ||
| 338 | extern int intel_map_sg(struct device *, struct scatterlist *, int, int); | ||
| 339 | extern void intel_unmap_sg(struct device *, struct scatterlist *, int, int); | ||
| 340 | |||
| 341 | #endif | 335 | #endif |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 472f11765f60..0c9cb63e6895 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -61,6 +61,17 @@ | |||
| 61 | 61 | ||
| 62 | typedef irqreturn_t (*irq_handler_t)(int, void *); | 62 | typedef irqreturn_t (*irq_handler_t)(int, void *); |
| 63 | 63 | ||
| 64 | /** | ||
| 65 | * struct irqaction - per interrupt action descriptor | ||
| 66 | * @handler: interrupt handler function | ||
| 67 | * @flags: flags (see IRQF_* above) | ||
| 68 | * @mask: no comment as it is useless and about to be removed | ||
| 69 | * @name: name of the device | ||
| 70 | * @dev_id: cookie to identify the device | ||
| 71 | * @next: pointer to the next irqaction for shared interrupts | ||
| 72 | * @irq: interrupt number | ||
| 73 | * @dir: pointer to the proc/irq/NN/name entry | ||
| 74 | */ | ||
| 64 | struct irqaction { | 75 | struct irqaction { |
| 65 | irq_handler_t handler; | 76 | irq_handler_t handler; |
| 66 | unsigned long flags; | 77 | unsigned long flags; |
| @@ -462,6 +473,12 @@ static inline void init_irq_proc(void) | |||
| 462 | } | 473 | } |
| 463 | #endif | 474 | #endif |
| 464 | 475 | ||
| 476 | #if defined(CONFIG_GENERIC_HARDIRQS) && defined(CONFIG_DEBUG_SHIRQ) | ||
| 477 | extern void debug_poll_all_shared_irqs(void); | ||
| 478 | #else | ||
| 479 | static inline void debug_poll_all_shared_irqs(void) { } | ||
| 480 | #endif | ||
| 481 | |||
| 465 | int show_interrupts(struct seq_file *p, void *v); | 482 | int show_interrupts(struct seq_file *p, void *v); |
| 466 | 483 | ||
| 467 | struct irq_desc; | 484 | struct irq_desc; |
diff --git a/include/linux/ip_vs.h b/include/linux/ip_vs.h index 0f434a28fb58..148265e63e8d 100644 --- a/include/linux/ip_vs.h +++ b/include/linux/ip_vs.h | |||
| @@ -96,10 +96,10 @@ | |||
| 96 | */ | 96 | */ |
| 97 | struct ip_vs_service_user { | 97 | struct ip_vs_service_user { |
| 98 | /* virtual service addresses */ | 98 | /* virtual service addresses */ |
| 99 | u_int16_t protocol; | 99 | __u16 protocol; |
| 100 | __be32 addr; /* virtual ip address */ | 100 | __be32 addr; /* virtual ip address */ |
| 101 | __be16 port; | 101 | __be16 port; |
| 102 | u_int32_t fwmark; /* firwall mark of service */ | 102 | __u32 fwmark; /* firwall mark of service */ |
| 103 | 103 | ||
| 104 | /* virtual service options */ | 104 | /* virtual service options */ |
| 105 | char sched_name[IP_VS_SCHEDNAME_MAXLEN]; | 105 | char sched_name[IP_VS_SCHEDNAME_MAXLEN]; |
| @@ -119,8 +119,8 @@ struct ip_vs_dest_user { | |||
| 119 | int weight; /* destination weight */ | 119 | int weight; /* destination weight */ |
| 120 | 120 | ||
| 121 | /* thresholds for active connections */ | 121 | /* thresholds for active connections */ |
| 122 | u_int32_t u_threshold; /* upper threshold */ | 122 | __u32 u_threshold; /* upper threshold */ |
| 123 | u_int32_t l_threshold; /* lower threshold */ | 123 | __u32 l_threshold; /* lower threshold */ |
| 124 | }; | 124 | }; |
| 125 | 125 | ||
| 126 | 126 | ||
| @@ -159,10 +159,10 @@ struct ip_vs_getinfo { | |||
| 159 | /* The argument to IP_VS_SO_GET_SERVICE */ | 159 | /* The argument to IP_VS_SO_GET_SERVICE */ |
| 160 | struct ip_vs_service_entry { | 160 | struct ip_vs_service_entry { |
| 161 | /* which service: user fills in these */ | 161 | /* which service: user fills in these */ |
| 162 | u_int16_t protocol; | 162 | __u16 protocol; |
| 163 | __be32 addr; /* virtual address */ | 163 | __be32 addr; /* virtual address */ |
| 164 | __be16 port; | 164 | __be16 port; |
| 165 | u_int32_t fwmark; /* firwall mark of service */ | 165 | __u32 fwmark; /* firwall mark of service */ |
| 166 | 166 | ||
| 167 | /* service options */ | 167 | /* service options */ |
| 168 | char sched_name[IP_VS_SCHEDNAME_MAXLEN]; | 168 | char sched_name[IP_VS_SCHEDNAME_MAXLEN]; |
| @@ -184,12 +184,12 @@ struct ip_vs_dest_entry { | |||
| 184 | unsigned conn_flags; /* connection flags */ | 184 | unsigned conn_flags; /* connection flags */ |
| 185 | int weight; /* destination weight */ | 185 | int weight; /* destination weight */ |
| 186 | 186 | ||
| 187 | u_int32_t u_threshold; /* upper threshold */ | 187 | __u32 u_threshold; /* upper threshold */ |
| 188 | u_int32_t l_threshold; /* lower threshold */ | 188 | __u32 l_threshold; /* lower threshold */ |
| 189 | 189 | ||
| 190 | u_int32_t activeconns; /* active connections */ | 190 | __u32 activeconns; /* active connections */ |
| 191 | u_int32_t inactconns; /* inactive connections */ | 191 | __u32 inactconns; /* inactive connections */ |
| 192 | u_int32_t persistconns; /* persistent connections */ | 192 | __u32 persistconns; /* persistent connections */ |
| 193 | 193 | ||
| 194 | /* statistics */ | 194 | /* statistics */ |
| 195 | struct ip_vs_stats_user stats; | 195 | struct ip_vs_stats_user stats; |
| @@ -199,10 +199,10 @@ struct ip_vs_dest_entry { | |||
| 199 | /* The argument to IP_VS_SO_GET_DESTS */ | 199 | /* The argument to IP_VS_SO_GET_DESTS */ |
| 200 | struct ip_vs_get_dests { | 200 | struct ip_vs_get_dests { |
| 201 | /* which service: user fills in these */ | 201 | /* which service: user fills in these */ |
| 202 | u_int16_t protocol; | 202 | __u16 protocol; |
| 203 | __be32 addr; /* virtual address */ | 203 | __be32 addr; /* virtual address */ |
| 204 | __be16 port; | 204 | __be16 port; |
| 205 | u_int32_t fwmark; /* firwall mark of service */ | 205 | __u32 fwmark; /* firwall mark of service */ |
| 206 | 206 | ||
| 207 | /* number of real servers */ | 207 | /* number of real servers */ |
| 208 | unsigned int num_dests; | 208 | unsigned int num_dests; |
diff --git a/include/linux/irq.h b/include/linux/irq.h index 27a67536511e..9c62fbe2ef30 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
| @@ -17,9 +17,11 @@ | |||
| 17 | #include <linux/cache.h> | 17 | #include <linux/cache.h> |
| 18 | #include <linux/spinlock.h> | 18 | #include <linux/spinlock.h> |
| 19 | #include <linux/cpumask.h> | 19 | #include <linux/cpumask.h> |
| 20 | #include <linux/gfp.h> | ||
| 20 | #include <linux/irqreturn.h> | 21 | #include <linux/irqreturn.h> |
| 21 | #include <linux/irqnr.h> | 22 | #include <linux/irqnr.h> |
| 22 | #include <linux/errno.h> | 23 | #include <linux/errno.h> |
| 24 | #include <linux/topology.h> | ||
| 23 | 25 | ||
| 24 | #include <asm/irq.h> | 26 | #include <asm/irq.h> |
| 25 | #include <asm/ptrace.h> | 27 | #include <asm/ptrace.h> |
| @@ -160,12 +162,10 @@ struct irq_2_iommu; | |||
| 160 | */ | 162 | */ |
| 161 | struct irq_desc { | 163 | struct irq_desc { |
| 162 | unsigned int irq; | 164 | unsigned int irq; |
| 163 | #ifdef CONFIG_SPARSE_IRQ | ||
| 164 | struct timer_rand_state *timer_rand_state; | 165 | struct timer_rand_state *timer_rand_state; |
| 165 | unsigned int *kstat_irqs; | 166 | unsigned int *kstat_irqs; |
| 166 | # ifdef CONFIG_INTR_REMAP | 167 | #ifdef CONFIG_INTR_REMAP |
| 167 | struct irq_2_iommu *irq_2_iommu; | 168 | struct irq_2_iommu *irq_2_iommu; |
| 168 | # endif | ||
| 169 | #endif | 169 | #endif |
| 170 | irq_flow_handler_t handle_irq; | 170 | irq_flow_handler_t handle_irq; |
| 171 | struct irq_chip *chip; | 171 | struct irq_chip *chip; |
| @@ -202,12 +202,6 @@ extern void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc | |||
| 202 | extern struct irq_desc irq_desc[NR_IRQS]; | 202 | extern struct irq_desc irq_desc[NR_IRQS]; |
| 203 | #else /* CONFIG_SPARSE_IRQ */ | 203 | #else /* CONFIG_SPARSE_IRQ */ |
| 204 | extern struct irq_desc *move_irq_desc(struct irq_desc *old_desc, int cpu); | 204 | extern struct irq_desc *move_irq_desc(struct irq_desc *old_desc, int cpu); |
| 205 | |||
| 206 | #define kstat_irqs_this_cpu(DESC) \ | ||
| 207 | ((DESC)->kstat_irqs[smp_processor_id()]) | ||
| 208 | #define kstat_incr_irqs_this_cpu(irqno, DESC) \ | ||
| 209 | ((DESC)->kstat_irqs[smp_processor_id()]++) | ||
| 210 | |||
| 211 | #endif /* CONFIG_SPARSE_IRQ */ | 205 | #endif /* CONFIG_SPARSE_IRQ */ |
| 212 | 206 | ||
| 213 | extern struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu); | 207 | extern struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu); |
| @@ -226,7 +220,6 @@ irq_remap_to_desc(unsigned int irq, struct irq_desc *desc) | |||
| 226 | * Migration helpers for obsolete names, they will go away: | 220 | * Migration helpers for obsolete names, they will go away: |
| 227 | */ | 221 | */ |
| 228 | #define hw_interrupt_type irq_chip | 222 | #define hw_interrupt_type irq_chip |
| 229 | typedef struct irq_chip hw_irq_controller; | ||
| 230 | #define no_irq_type no_irq_chip | 223 | #define no_irq_type no_irq_chip |
| 231 | typedef struct irq_desc irq_desc_t; | 224 | typedef struct irq_desc irq_desc_t; |
| 232 | 225 | ||
| @@ -236,6 +229,7 @@ typedef struct irq_desc irq_desc_t; | |||
| 236 | #include <asm/hw_irq.h> | 229 | #include <asm/hw_irq.h> |
| 237 | 230 | ||
| 238 | extern int setup_irq(unsigned int irq, struct irqaction *new); | 231 | extern int setup_irq(unsigned int irq, struct irqaction *new); |
| 232 | extern void remove_irq(unsigned int irq, struct irqaction *act); | ||
| 239 | 233 | ||
| 240 | #ifdef CONFIG_GENERIC_HARDIRQS | 234 | #ifdef CONFIG_GENERIC_HARDIRQS |
| 241 | 235 | ||
| @@ -280,7 +274,7 @@ static inline int irq_balancing_disabled(unsigned int irq) | |||
| 280 | } | 274 | } |
| 281 | 275 | ||
| 282 | /* Handle irq action chains: */ | 276 | /* Handle irq action chains: */ |
| 283 | extern int handle_IRQ_event(unsigned int irq, struct irqaction *action); | 277 | extern irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action); |
| 284 | 278 | ||
| 285 | /* | 279 | /* |
| 286 | * Built-in IRQ handlers for various IRQ types, | 280 | * Built-in IRQ handlers for various IRQ types, |
| @@ -325,7 +319,7 @@ static inline void generic_handle_irq(unsigned int irq) | |||
| 325 | 319 | ||
| 326 | /* Handling of unhandled and spurious interrupts: */ | 320 | /* Handling of unhandled and spurious interrupts: */ |
| 327 | extern void note_interrupt(unsigned int irq, struct irq_desc *desc, | 321 | extern void note_interrupt(unsigned int irq, struct irq_desc *desc, |
| 328 | int action_ret); | 322 | irqreturn_t action_ret); |
| 329 | 323 | ||
| 330 | /* Resending of interrupts :*/ | 324 | /* Resending of interrupts :*/ |
| 331 | void check_irq_resend(struct irq_desc *desc, unsigned int irq); | 325 | void check_irq_resend(struct irq_desc *desc, unsigned int irq); |
diff --git a/include/linux/irqnr.h b/include/linux/irqnr.h index 887477bc2ab0..ec87b212ff7d 100644 --- a/include/linux/irqnr.h +++ b/include/linux/irqnr.h | |||
| @@ -29,13 +29,17 @@ extern struct irq_desc *irq_to_desc(unsigned int irq); | |||
| 29 | # define for_each_irq_desc(irq, desc) \ | 29 | # define for_each_irq_desc(irq, desc) \ |
| 30 | for (irq = 0, desc = irq_to_desc(irq); irq < nr_irqs; \ | 30 | for (irq = 0, desc = irq_to_desc(irq); irq < nr_irqs; \ |
| 31 | irq++, desc = irq_to_desc(irq)) \ | 31 | irq++, desc = irq_to_desc(irq)) \ |
| 32 | if (desc) | 32 | if (!desc) \ |
| 33 | ; \ | ||
| 34 | else | ||
| 33 | 35 | ||
| 34 | 36 | ||
| 35 | # define for_each_irq_desc_reverse(irq, desc) \ | 37 | # define for_each_irq_desc_reverse(irq, desc) \ |
| 36 | for (irq = nr_irqs - 1, desc = irq_to_desc(irq); irq >= 0; \ | 38 | for (irq = nr_irqs - 1, desc = irq_to_desc(irq); irq >= 0; \ |
| 37 | irq--, desc = irq_to_desc(irq)) \ | 39 | irq--, desc = irq_to_desc(irq)) \ |
| 38 | if (desc) | 40 | if (!desc) \ |
| 41 | ; \ | ||
| 42 | else | ||
| 39 | 43 | ||
| 40 | #endif /* CONFIG_GENERIC_HARDIRQS */ | 44 | #endif /* CONFIG_GENERIC_HARDIRQS */ |
| 41 | 45 | ||
diff --git a/include/linux/irqreturn.h b/include/linux/irqreturn.h index 881883c2009d..c5584ca5b8c9 100644 --- a/include/linux/irqreturn.h +++ b/include/linux/irqreturn.h | |||
| @@ -1,25 +1,17 @@ | |||
| 1 | /* irqreturn.h */ | ||
| 2 | #ifndef _LINUX_IRQRETURN_H | 1 | #ifndef _LINUX_IRQRETURN_H |
| 3 | #define _LINUX_IRQRETURN_H | 2 | #define _LINUX_IRQRETURN_H |
| 4 | 3 | ||
| 5 | /* | 4 | /** |
| 6 | * For 2.4.x compatibility, 2.4.x can use | 5 | * enum irqreturn |
| 7 | * | 6 | * @IRQ_NONE interrupt was not from this device |
| 8 | * typedef void irqreturn_t; | 7 | * @IRQ_HANDLED interrupt was handled by this device |
| 9 | * #define IRQ_NONE | ||
| 10 | * #define IRQ_HANDLED | ||
| 11 | * #define IRQ_RETVAL(x) | ||
| 12 | * | ||
| 13 | * To mix old-style and new-style irq handler returns. | ||
| 14 | * | ||
| 15 | * IRQ_NONE means we didn't handle it. | ||
| 16 | * IRQ_HANDLED means that we did have a valid interrupt and handled it. | ||
| 17 | * IRQ_RETVAL(x) selects on the two depending on x being non-zero (for handled) | ||
| 18 | */ | 8 | */ |
| 19 | typedef int irqreturn_t; | 9 | enum irqreturn { |
| 10 | IRQ_NONE, | ||
| 11 | IRQ_HANDLED, | ||
| 12 | }; | ||
| 20 | 13 | ||
| 21 | #define IRQ_NONE (0) | 14 | typedef enum irqreturn irqreturn_t; |
| 22 | #define IRQ_HANDLED (1) | 15 | #define IRQ_RETVAL(x) ((x) != IRQ_NONE) |
| 23 | #define IRQ_RETVAL(x) ((x) != 0) | ||
| 24 | 16 | ||
| 25 | #endif | 17 | #endif |
diff --git a/include/linux/ivtv.h b/include/linux/ivtv.h index f2720280b9ec..062d20f74322 100644 --- a/include/linux/ivtv.h +++ b/include/linux/ivtv.h | |||
| @@ -60,10 +60,10 @@ struct ivtv_dma_frame { | |||
| 60 | 60 | ||
| 61 | #define IVTV_IOC_DMA_FRAME _IOW ('V', BASE_VIDIOC_PRIVATE+0, struct ivtv_dma_frame) | 61 | #define IVTV_IOC_DMA_FRAME _IOW ('V', BASE_VIDIOC_PRIVATE+0, struct ivtv_dma_frame) |
| 62 | 62 | ||
| 63 | /* These are the VBI types as they appear in the embedded VBI private packets. */ | 63 | /* Deprecated defines: applications should use the defines from videodev2.h */ |
| 64 | #define IVTV_SLICED_TYPE_TELETEXT_B (1) | 64 | #define IVTV_SLICED_TYPE_TELETEXT_B V4L2_MPEG_VBI_IVTV_TELETEXT_B |
| 65 | #define IVTV_SLICED_TYPE_CAPTION_525 (4) | 65 | #define IVTV_SLICED_TYPE_CAPTION_525 V4L2_MPEG_VBI_IVTV_CAPTION_525 |
| 66 | #define IVTV_SLICED_TYPE_WSS_625 (5) | 66 | #define IVTV_SLICED_TYPE_WSS_625 V4L2_MPEG_VBI_IVTV_WSS_625 |
| 67 | #define IVTV_SLICED_TYPE_VPS (7) | 67 | #define IVTV_SLICED_TYPE_VPS V4L2_MPEG_VBI_IVTV_VPS |
| 68 | 68 | ||
| 69 | #endif /* _LINUX_IVTV_H */ | 69 | #endif /* _LINUX_IVTV_H */ |
diff --git a/include/linux/ivtvfb.h b/include/linux/ivtvfb.h index e20af47b59ad..9d88b29ddf55 100644 --- a/include/linux/ivtvfb.h +++ b/include/linux/ivtvfb.h | |||
| @@ -33,6 +33,6 @@ struct ivtvfb_dma_frame { | |||
| 33 | }; | 33 | }; |
| 34 | 34 | ||
| 35 | #define IVTVFB_IOC_DMA_FRAME _IOW('V', BASE_VIDIOC_PRIVATE+0, struct ivtvfb_dma_frame) | 35 | #define IVTVFB_IOC_DMA_FRAME _IOW('V', BASE_VIDIOC_PRIVATE+0, struct ivtvfb_dma_frame) |
| 36 | #define FBIO_WAITFORVSYNC _IOW('F', 0x20, u_int32_t) | 36 | #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32) |
| 37 | 37 | ||
| 38 | #endif | 38 | #endif |
diff --git a/include/linux/jffs2.h b/include/linux/jffs2.h index da720bc3eb15..2b32d638147d 100644 --- a/include/linux/jffs2.h +++ b/include/linux/jffs2.h | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #ifndef __LINUX_JFFS2_H__ | 12 | #ifndef __LINUX_JFFS2_H__ |
| 13 | #define __LINUX_JFFS2_H__ | 13 | #define __LINUX_JFFS2_H__ |
| 14 | 14 | ||
| 15 | #include <linux/types.h> | ||
| 15 | #include <linux/magic.h> | 16 | #include <linux/magic.h> |
| 16 | 17 | ||
| 17 | /* You must include something which defines the C99 uintXX_t types. | 18 | /* You must include something which defines the C99 uintXX_t types. |
| @@ -91,15 +92,15 @@ | |||
| 91 | byteswapping */ | 92 | byteswapping */ |
| 92 | 93 | ||
| 93 | typedef struct { | 94 | typedef struct { |
| 94 | uint32_t v32; | 95 | __u32 v32; |
| 95 | } __attribute__((packed)) jint32_t; | 96 | } __attribute__((packed)) jint32_t; |
| 96 | 97 | ||
| 97 | typedef struct { | 98 | typedef struct { |
| 98 | uint32_t m; | 99 | __u32 m; |
| 99 | } __attribute__((packed)) jmode_t; | 100 | } __attribute__((packed)) jmode_t; |
| 100 | 101 | ||
| 101 | typedef struct { | 102 | typedef struct { |
| 102 | uint16_t v16; | 103 | __u16 v16; |
| 103 | } __attribute__((packed)) jint16_t; | 104 | } __attribute__((packed)) jint16_t; |
| 104 | 105 | ||
| 105 | struct jffs2_unknown_node | 106 | struct jffs2_unknown_node |
| @@ -121,12 +122,12 @@ struct jffs2_raw_dirent | |||
| 121 | jint32_t version; | 122 | jint32_t version; |
| 122 | jint32_t ino; /* == zero for unlink */ | 123 | jint32_t ino; /* == zero for unlink */ |
| 123 | jint32_t mctime; | 124 | jint32_t mctime; |
| 124 | uint8_t nsize; | 125 | __u8 nsize; |
| 125 | uint8_t type; | 126 | __u8 type; |
| 126 | uint8_t unused[2]; | 127 | __u8 unused[2]; |
| 127 | jint32_t node_crc; | 128 | jint32_t node_crc; |
| 128 | jint32_t name_crc; | 129 | jint32_t name_crc; |
| 129 | uint8_t name[0]; | 130 | __u8 name[0]; |
| 130 | }; | 131 | }; |
| 131 | 132 | ||
| 132 | /* The JFFS2 raw inode structure: Used for storage on physical media. */ | 133 | /* The JFFS2 raw inode structure: Used for storage on physical media. */ |
| @@ -153,12 +154,12 @@ struct jffs2_raw_inode | |||
| 153 | jint32_t offset; /* Where to begin to write. */ | 154 | jint32_t offset; /* Where to begin to write. */ |
| 154 | jint32_t csize; /* (Compressed) data size */ | 155 | jint32_t csize; /* (Compressed) data size */ |
| 155 | jint32_t dsize; /* Size of the node's data. (after decompression) */ | 156 | jint32_t dsize; /* Size of the node's data. (after decompression) */ |
| 156 | uint8_t compr; /* Compression algorithm used */ | 157 | __u8 compr; /* Compression algorithm used */ |
| 157 | uint8_t usercompr; /* Compression algorithm requested by the user */ | 158 | __u8 usercompr; /* Compression algorithm requested by the user */ |
| 158 | jint16_t flags; /* See JFFS2_INO_FLAG_* */ | 159 | jint16_t flags; /* See JFFS2_INO_FLAG_* */ |
| 159 | jint32_t data_crc; /* CRC for the (compressed) data. */ | 160 | jint32_t data_crc; /* CRC for the (compressed) data. */ |
| 160 | jint32_t node_crc; /* CRC for the raw inode (excluding data) */ | 161 | jint32_t node_crc; /* CRC for the raw inode (excluding data) */ |
| 161 | uint8_t data[0]; | 162 | __u8 data[0]; |
| 162 | }; | 163 | }; |
| 163 | 164 | ||
| 164 | struct jffs2_raw_xattr { | 165 | struct jffs2_raw_xattr { |
| @@ -168,12 +169,12 @@ struct jffs2_raw_xattr { | |||
| 168 | jint32_t hdr_crc; | 169 | jint32_t hdr_crc; |
| 169 | jint32_t xid; /* XATTR identifier number */ | 170 | jint32_t xid; /* XATTR identifier number */ |
| 170 | jint32_t version; | 171 | jint32_t version; |
| 171 | uint8_t xprefix; | 172 | __u8 xprefix; |
| 172 | uint8_t name_len; | 173 | __u8 name_len; |
| 173 | jint16_t value_len; | 174 | jint16_t value_len; |
| 174 | jint32_t data_crc; | 175 | jint32_t data_crc; |
| 175 | jint32_t node_crc; | 176 | jint32_t node_crc; |
| 176 | uint8_t data[0]; | 177 | __u8 data[0]; |
| 177 | } __attribute__((packed)); | 178 | } __attribute__((packed)); |
| 178 | 179 | ||
| 179 | struct jffs2_raw_xref | 180 | struct jffs2_raw_xref |
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/kernel_stat.h b/include/linux/kernel_stat.h index 570d20413119..0c8b89f28a95 100644 --- a/include/linux/kernel_stat.h +++ b/include/linux/kernel_stat.h | |||
| @@ -28,7 +28,7 @@ struct cpu_usage_stat { | |||
| 28 | 28 | ||
| 29 | struct kernel_stat { | 29 | struct kernel_stat { |
| 30 | struct cpu_usage_stat cpustat; | 30 | struct cpu_usage_stat cpustat; |
| 31 | #ifndef CONFIG_SPARSE_IRQ | 31 | #ifndef CONFIG_GENERIC_HARDIRQS |
| 32 | unsigned int irqs[NR_IRQS]; | 32 | unsigned int irqs[NR_IRQS]; |
| 33 | #endif | 33 | #endif |
| 34 | }; | 34 | }; |
| @@ -41,7 +41,7 @@ DECLARE_PER_CPU(struct kernel_stat, kstat); | |||
| 41 | 41 | ||
| 42 | extern unsigned long long nr_context_switches(void); | 42 | extern unsigned long long nr_context_switches(void); |
| 43 | 43 | ||
| 44 | #ifndef CONFIG_SPARSE_IRQ | 44 | #ifndef CONFIG_GENERIC_HARDIRQS |
| 45 | #define kstat_irqs_this_cpu(irq) \ | 45 | #define kstat_irqs_this_cpu(irq) \ |
| 46 | (kstat_this_cpu.irqs[irq]) | 46 | (kstat_this_cpu.irqs[irq]) |
| 47 | 47 | ||
| @@ -52,16 +52,19 @@ static inline void kstat_incr_irqs_this_cpu(unsigned int irq, | |||
| 52 | { | 52 | { |
| 53 | kstat_this_cpu.irqs[irq]++; | 53 | kstat_this_cpu.irqs[irq]++; |
| 54 | } | 54 | } |
| 55 | #endif | ||
| 56 | |||
| 57 | 55 | ||
| 58 | #ifndef CONFIG_SPARSE_IRQ | ||
| 59 | static inline unsigned int kstat_irqs_cpu(unsigned int irq, int cpu) | 56 | static inline unsigned int kstat_irqs_cpu(unsigned int irq, int cpu) |
| 60 | { | 57 | { |
| 61 | return kstat_cpu(cpu).irqs[irq]; | 58 | return kstat_cpu(cpu).irqs[irq]; |
| 62 | } | 59 | } |
| 63 | #else | 60 | #else |
| 61 | #include <linux/irq.h> | ||
| 64 | extern unsigned int kstat_irqs_cpu(unsigned int irq, int cpu); | 62 | extern unsigned int kstat_irqs_cpu(unsigned int irq, int cpu); |
| 63 | #define kstat_irqs_this_cpu(DESC) \ | ||
| 64 | ((DESC)->kstat_irqs[smp_processor_id()]) | ||
| 65 | #define kstat_incr_irqs_this_cpu(irqno, DESC) \ | ||
| 66 | ((DESC)->kstat_irqs[smp_processor_id()]++) | ||
| 67 | |||
| 65 | #endif | 68 | #endif |
| 66 | 69 | ||
| 67 | /* | 70 | /* |
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/lockd/lockd.h b/include/linux/lockd/lockd.h index aa6fe7026de7..51855dfd8adb 100644 --- a/include/linux/lockd/lockd.h +++ b/include/linux/lockd/lockd.h | |||
| @@ -346,6 +346,7 @@ static inline int __nlm_cmp_addr4(const struct sockaddr *sap1, | |||
| 346 | return sin1->sin_addr.s_addr == sin2->sin_addr.s_addr; | 346 | return sin1->sin_addr.s_addr == sin2->sin_addr.s_addr; |
| 347 | } | 347 | } |
| 348 | 348 | ||
| 349 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | ||
| 349 | static inline int __nlm_cmp_addr6(const struct sockaddr *sap1, | 350 | static inline int __nlm_cmp_addr6(const struct sockaddr *sap1, |
| 350 | const struct sockaddr *sap2) | 351 | const struct sockaddr *sap2) |
| 351 | { | 352 | { |
| @@ -353,6 +354,13 @@ static inline int __nlm_cmp_addr6(const struct sockaddr *sap1, | |||
| 353 | const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sap2; | 354 | const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sap2; |
| 354 | return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr); | 355 | return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr); |
| 355 | } | 356 | } |
| 357 | #else /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */ | ||
| 358 | static inline int __nlm_cmp_addr6(const struct sockaddr *sap1, | ||
| 359 | const struct sockaddr *sap2) | ||
| 360 | { | ||
| 361 | return 0; | ||
| 362 | } | ||
| 363 | #endif /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */ | ||
| 356 | 364 | ||
| 357 | /* | 365 | /* |
| 358 | * Compare two host addresses | 366 | * Compare two host addresses |
diff --git a/include/linux/major.h b/include/linux/major.h index 88249452b935..058ec15dd060 100644 --- a/include/linux/major.h +++ b/include/linux/major.h | |||
| @@ -171,5 +171,6 @@ | |||
| 171 | #define VIOTAPE_MAJOR 230 | 171 | #define VIOTAPE_MAJOR 230 |
| 172 | 172 | ||
| 173 | #define BLOCK_EXT_MAJOR 259 | 173 | #define BLOCK_EXT_MAJOR 259 |
| 174 | #define SCSI_OSD_MAJOR 260 /* open-osd's OSD scsi device */ | ||
| 174 | 175 | ||
| 175 | #endif | 176 | #endif |
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/matroxfb.h b/include/linux/matroxfb.h index 404f678e734b..2203121a43e9 100644 --- a/include/linux/matroxfb.h +++ b/include/linux/matroxfb.h | |||
| @@ -37,7 +37,7 @@ enum matroxfb_ctrl_id { | |||
| 37 | MATROXFB_CID_LAST | 37 | MATROXFB_CID_LAST |
| 38 | }; | 38 | }; |
| 39 | 39 | ||
| 40 | #define FBIO_WAITFORVSYNC _IOW('F', 0x20, u_int32_t) | 40 | #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32) |
| 41 | 41 | ||
| 42 | #endif | 42 | #endif |
| 43 | 43 | ||
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/miscdevice.h b/include/linux/miscdevice.h index a820f816a49e..beb6ec99cfef 100644 --- a/include/linux/miscdevice.h +++ b/include/linux/miscdevice.h | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | #define TUN_MINOR 200 | 26 | #define TUN_MINOR 200 |
| 27 | #define MWAVE_MINOR 219 /* ACP/Mwave Modem */ | 27 | #define MWAVE_MINOR 219 /* ACP/Mwave Modem */ |
| 28 | #define MPT_MINOR 220 | 28 | #define MPT_MINOR 220 |
| 29 | #define MPT2SAS_MINOR 221 | ||
| 29 | #define HPET_MINOR 228 | 30 | #define HPET_MINOR 228 |
| 30 | #define FUSE_MINOR 229 | 31 | #define FUSE_MINOR 229 |
| 31 | #define KVM_MINOR 232 | 32 | #define KVM_MINOR 232 |
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/mm.h b/include/linux/mm.h index 065cdf8c09fb..b1ea37fc7a24 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -104,6 +104,7 @@ extern unsigned int kobjsize(const void *objp); | |||
| 104 | #define VM_CAN_NONLINEAR 0x08000000 /* Has ->fault & does nonlinear pages */ | 104 | #define VM_CAN_NONLINEAR 0x08000000 /* Has ->fault & does nonlinear pages */ |
| 105 | #define VM_MIXEDMAP 0x10000000 /* Can contain "struct page" and pure PFN pages */ | 105 | #define VM_MIXEDMAP 0x10000000 /* Can contain "struct page" and pure PFN pages */ |
| 106 | #define VM_SAO 0x20000000 /* Strong Access Ordering (powerpc) */ | 106 | #define VM_SAO 0x20000000 /* Strong Access Ordering (powerpc) */ |
| 107 | #define VM_PFN_AT_MMAP 0x40000000 /* PFNMAP vma that is fully mapped at mmap time */ | ||
| 107 | 108 | ||
| 108 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ | 109 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ |
| 109 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS | 110 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS |
| @@ -145,7 +146,7 @@ extern pgprot_t protection_map[16]; | |||
| 145 | */ | 146 | */ |
| 146 | static inline int is_linear_pfn_mapping(struct vm_area_struct *vma) | 147 | static inline int is_linear_pfn_mapping(struct vm_area_struct *vma) |
| 147 | { | 148 | { |
| 148 | return ((vma->vm_flags & VM_PFNMAP) && vma->vm_pgoff); | 149 | return (vma->vm_flags & VM_PFN_AT_MMAP); |
| 149 | } | 150 | } |
| 150 | 151 | ||
| 151 | static inline int is_pfn_mapping(struct vm_area_struct *vma) | 152 | static inline int is_pfn_mapping(struct vm_area_struct *vma) |
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/mroute6.h b/include/linux/mroute6.h index 5375faca1f72..43dc97e32183 100644 --- a/include/linux/mroute6.h +++ b/include/linux/mroute6.h | |||
| @@ -65,7 +65,7 @@ struct mif6ctl { | |||
| 65 | mifi_t mif6c_mifi; /* Index of MIF */ | 65 | mifi_t mif6c_mifi; /* Index of MIF */ |
| 66 | unsigned char mif6c_flags; /* MIFF_ flags */ | 66 | unsigned char mif6c_flags; /* MIFF_ flags */ |
| 67 | unsigned char vifc_threshold; /* ttl limit */ | 67 | unsigned char vifc_threshold; /* ttl limit */ |
| 68 | u_short mif6c_pifi; /* the index of the physical IF */ | 68 | __u16 mif6c_pifi; /* the index of the physical IF */ |
| 69 | unsigned int vifc_rate_limit; /* Rate limiter values (NI) */ | 69 | unsigned int vifc_rate_limit; /* Rate limiter values (NI) */ |
| 70 | }; | 70 | }; |
| 71 | 71 | ||
diff --git a/include/linux/ncp_fs.h b/include/linux/ncp_fs.h index f69e66d151cc..30b06c893944 100644 --- a/include/linux/ncp_fs.h +++ b/include/linux/ncp_fs.h | |||
| @@ -204,7 +204,7 @@ void ncp_update_inode2(struct inode *, struct ncp_entry_info *); | |||
| 204 | /* linux/fs/ncpfs/dir.c */ | 204 | /* linux/fs/ncpfs/dir.c */ |
| 205 | extern const struct inode_operations ncp_dir_inode_operations; | 205 | extern const struct inode_operations ncp_dir_inode_operations; |
| 206 | extern const struct file_operations ncp_dir_operations; | 206 | extern const struct file_operations ncp_dir_operations; |
| 207 | extern struct dentry_operations ncp_root_dentry_operations; | 207 | extern const struct dentry_operations ncp_root_dentry_operations; |
| 208 | int ncp_conn_logged_in(struct super_block *); | 208 | int ncp_conn_logged_in(struct super_block *); |
| 209 | int ncp_date_dos2unix(__le16 time, __le16 date); | 209 | int ncp_date_dos2unix(__le16 time, __le16 date); |
| 210 | void ncp_date_unix2dos(int unix_date, __le16 * time, __le16 * date); | 210 | void ncp_date_unix2dos(int unix_date, __le16 * time, __le16 * date); |
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..2e7783f4a755 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -32,6 +32,7 @@ | |||
| 32 | #ifdef __KERNEL__ | 32 | #ifdef __KERNEL__ |
| 33 | #include <linux/timer.h> | 33 | #include <linux/timer.h> |
| 34 | #include <linux/delay.h> | 34 | #include <linux/delay.h> |
| 35 | #include <linux/mm.h> | ||
| 35 | #include <asm/atomic.h> | 36 | #include <asm/atomic.h> |
| 36 | #include <asm/cache.h> | 37 | #include <asm/cache.h> |
| 37 | #include <asm/byteorder.h> | 38 | #include <asm/byteorder.h> |
| @@ -96,7 +97,7 @@ struct wireless_dev; | |||
| 96 | * Compute the worst case header length according to the protocols | 97 | * Compute the worst case header length according to the protocols |
| 97 | * used. | 98 | * used. |
| 98 | */ | 99 | */ |
| 99 | 100 | ||
| 100 | #if defined(CONFIG_WLAN_80211) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) | 101 | #if defined(CONFIG_WLAN_80211) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) |
| 101 | # if defined(CONFIG_MAC80211_MESH) | 102 | # if defined(CONFIG_MAC80211_MESH) |
| 102 | # define LL_MAX_HEADER 128 | 103 | # define LL_MAX_HEADER 128 |
| @@ -124,7 +125,7 @@ struct wireless_dev; | |||
| 124 | * Network device statistics. Akin to the 2.0 ether stats but | 125 | * Network device statistics. Akin to the 2.0 ether stats but |
| 125 | * with byte counters. | 126 | * with byte counters. |
| 126 | */ | 127 | */ |
| 127 | 128 | ||
| 128 | struct net_device_stats | 129 | struct net_device_stats |
| 129 | { | 130 | { |
| 130 | unsigned long rx_packets; /* total packets received */ | 131 | unsigned long rx_packets; /* total packets received */ |
| @@ -285,7 +286,7 @@ enum netdev_state_t | |||
| 285 | 286 | ||
| 286 | /* | 287 | /* |
| 287 | * This structure holds at boot time configured netdevice settings. They | 288 | * This structure holds at boot time configured netdevice settings. They |
| 288 | * are then used in the device probing. | 289 | * are then used in the device probing. |
| 289 | */ | 290 | */ |
| 290 | struct netdev_boot_setup { | 291 | struct netdev_boot_setup { |
| 291 | char name[IFNAMSIZ]; | 292 | char name[IFNAMSIZ]; |
| @@ -314,6 +315,9 @@ struct napi_struct { | |||
| 314 | spinlock_t poll_lock; | 315 | spinlock_t poll_lock; |
| 315 | int poll_owner; | 316 | int poll_owner; |
| 316 | #endif | 317 | #endif |
| 318 | |||
| 319 | unsigned int gro_count; | ||
| 320 | |||
| 317 | struct net_device *dev; | 321 | struct net_device *dev; |
| 318 | struct list_head dev_list; | 322 | struct list_head dev_list; |
| 319 | struct sk_buff *gro_list; | 323 | struct sk_buff *gro_list; |
| @@ -327,6 +331,14 @@ enum | |||
| 327 | NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */ | 331 | NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */ |
| 328 | }; | 332 | }; |
| 329 | 333 | ||
| 334 | enum { | ||
| 335 | GRO_MERGED, | ||
| 336 | GRO_MERGED_FREE, | ||
| 337 | GRO_HELD, | ||
| 338 | GRO_NORMAL, | ||
| 339 | GRO_DROP, | ||
| 340 | }; | ||
| 341 | |||
| 330 | extern void __napi_schedule(struct napi_struct *n); | 342 | extern void __napi_schedule(struct napi_struct *n); |
| 331 | 343 | ||
| 332 | static inline int napi_disable_pending(struct napi_struct *n) | 344 | static inline int napi_disable_pending(struct napi_struct *n) |
| @@ -582,6 +594,14 @@ struct net_device_ops { | |||
| 582 | #define HAVE_NETDEV_POLL | 594 | #define HAVE_NETDEV_POLL |
| 583 | void (*ndo_poll_controller)(struct net_device *dev); | 595 | void (*ndo_poll_controller)(struct net_device *dev); |
| 584 | #endif | 596 | #endif |
| 597 | #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) | ||
| 598 | int (*ndo_fcoe_ddp_setup)(struct net_device *dev, | ||
| 599 | u16 xid, | ||
| 600 | struct scatterlist *sgl, | ||
| 601 | unsigned int sgc); | ||
| 602 | int (*ndo_fcoe_ddp_done)(struct net_device *dev, | ||
| 603 | u16 xid); | ||
| 604 | #endif | ||
| 585 | }; | 605 | }; |
| 586 | 606 | ||
| 587 | /* | 607 | /* |
| @@ -650,14 +670,17 @@ struct net_device | |||
| 650 | #define NETIF_F_GRO 16384 /* Generic receive offload */ | 670 | #define NETIF_F_GRO 16384 /* Generic receive offload */ |
| 651 | #define NETIF_F_LRO 32768 /* large receive offload */ | 671 | #define NETIF_F_LRO 32768 /* large receive offload */ |
| 652 | 672 | ||
| 673 | #define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ | ||
| 674 | |||
| 653 | /* Segmentation offload features */ | 675 | /* Segmentation offload features */ |
| 654 | #define NETIF_F_GSO_SHIFT 16 | 676 | #define NETIF_F_GSO_SHIFT 16 |
| 655 | #define NETIF_F_GSO_MASK 0xffff0000 | 677 | #define NETIF_F_GSO_MASK 0x00ff0000 |
| 656 | #define NETIF_F_TSO (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT) | 678 | #define NETIF_F_TSO (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT) |
| 657 | #define NETIF_F_UFO (SKB_GSO_UDP << NETIF_F_GSO_SHIFT) | 679 | #define NETIF_F_UFO (SKB_GSO_UDP << NETIF_F_GSO_SHIFT) |
| 658 | #define NETIF_F_GSO_ROBUST (SKB_GSO_DODGY << NETIF_F_GSO_SHIFT) | 680 | #define NETIF_F_GSO_ROBUST (SKB_GSO_DODGY << NETIF_F_GSO_SHIFT) |
| 659 | #define NETIF_F_TSO_ECN (SKB_GSO_TCP_ECN << NETIF_F_GSO_SHIFT) | 681 | #define NETIF_F_TSO_ECN (SKB_GSO_TCP_ECN << NETIF_F_GSO_SHIFT) |
| 660 | #define NETIF_F_TSO6 (SKB_GSO_TCPV6 << NETIF_F_GSO_SHIFT) | 682 | #define NETIF_F_TSO6 (SKB_GSO_TCPV6 << NETIF_F_GSO_SHIFT) |
| 683 | #define NETIF_F_FSO (SKB_GSO_FCOE << NETIF_F_GSO_SHIFT) | ||
| 661 | 684 | ||
| 662 | /* List of features with software fallbacks. */ | 685 | /* List of features with software fallbacks. */ |
| 663 | #define NETIF_F_GSO_SOFTWARE (NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6) | 686 | #define NETIF_F_GSO_SOFTWARE (NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6) |
| @@ -740,7 +763,7 @@ struct net_device | |||
| 740 | void *dsa_ptr; /* dsa specific data */ | 763 | void *dsa_ptr; /* dsa specific data */ |
| 741 | #endif | 764 | #endif |
| 742 | void *atalk_ptr; /* AppleTalk link */ | 765 | void *atalk_ptr; /* AppleTalk link */ |
| 743 | void *ip_ptr; /* IPv4 specific data */ | 766 | void *ip_ptr; /* IPv4 specific data */ |
| 744 | void *dn_ptr; /* DECnet specific data */ | 767 | void *dn_ptr; /* DECnet specific data */ |
| 745 | void *ip6_ptr; /* IPv6 specific data */ | 768 | void *ip6_ptr; /* IPv6 specific data */ |
| 746 | void *ec_ptr; /* Econet specific data */ | 769 | void *ec_ptr; /* Econet specific data */ |
| @@ -753,7 +776,7 @@ struct net_device | |||
| 753 | */ | 776 | */ |
| 754 | unsigned long last_rx; /* Time of last Rx */ | 777 | unsigned long last_rx; /* Time of last Rx */ |
| 755 | /* Interface address info used in eth_type_trans() */ | 778 | /* Interface address info used in eth_type_trans() */ |
| 756 | unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast | 779 | unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast |
| 757 | because most packets are unicast) */ | 780 | because most packets are unicast) */ |
| 758 | 781 | ||
| 759 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ | 782 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ |
| @@ -840,6 +863,11 @@ struct net_device | |||
| 840 | struct dcbnl_rtnl_ops *dcbnl_ops; | 863 | struct dcbnl_rtnl_ops *dcbnl_ops; |
| 841 | #endif | 864 | #endif |
| 842 | 865 | ||
| 866 | #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) | ||
| 867 | /* max exchange id for FCoE LRO by ddp */ | ||
| 868 | unsigned int fcoe_ddp_xid; | ||
| 869 | #endif | ||
| 870 | |||
| 843 | #ifdef CONFIG_COMPAT_NET_DEV_OPS | 871 | #ifdef CONFIG_COMPAT_NET_DEV_OPS |
| 844 | struct { | 872 | struct { |
| 845 | int (*init)(struct net_device *dev); | 873 | int (*init)(struct net_device *dev); |
| @@ -984,6 +1012,9 @@ void netif_napi_add(struct net_device *dev, struct napi_struct *napi, | |||
| 984 | void netif_napi_del(struct napi_struct *napi); | 1012 | void netif_napi_del(struct napi_struct *napi); |
| 985 | 1013 | ||
| 986 | struct napi_gro_cb { | 1014 | struct napi_gro_cb { |
| 1015 | /* This indicates where we are processing relative to skb->data. */ | ||
| 1016 | int data_offset; | ||
| 1017 | |||
| 987 | /* This is non-zero if the packet may be of the same flow. */ | 1018 | /* This is non-zero if the packet may be of the same flow. */ |
| 988 | int same_flow; | 1019 | int same_flow; |
| 989 | 1020 | ||
| @@ -1088,6 +1119,36 @@ extern int dev_restart(struct net_device *dev); | |||
| 1088 | #ifdef CONFIG_NETPOLL_TRAP | 1119 | #ifdef CONFIG_NETPOLL_TRAP |
| 1089 | extern int netpoll_trap(void); | 1120 | extern int netpoll_trap(void); |
| 1090 | #endif | 1121 | #endif |
| 1122 | extern void *skb_gro_header(struct sk_buff *skb, unsigned int hlen); | ||
| 1123 | extern int skb_gro_receive(struct sk_buff **head, | ||
| 1124 | struct sk_buff *skb); | ||
| 1125 | |||
| 1126 | static inline unsigned int skb_gro_offset(const struct sk_buff *skb) | ||
| 1127 | { | ||
| 1128 | return NAPI_GRO_CB(skb)->data_offset; | ||
| 1129 | } | ||
| 1130 | |||
| 1131 | static inline unsigned int skb_gro_len(const struct sk_buff *skb) | ||
| 1132 | { | ||
| 1133 | return skb->len - NAPI_GRO_CB(skb)->data_offset; | ||
| 1134 | } | ||
| 1135 | |||
| 1136 | static inline void skb_gro_pull(struct sk_buff *skb, unsigned int len) | ||
| 1137 | { | ||
| 1138 | NAPI_GRO_CB(skb)->data_offset += len; | ||
| 1139 | } | ||
| 1140 | |||
| 1141 | static inline void skb_gro_reset_offset(struct sk_buff *skb) | ||
| 1142 | { | ||
| 1143 | NAPI_GRO_CB(skb)->data_offset = 0; | ||
| 1144 | } | ||
| 1145 | |||
| 1146 | static inline void *skb_gro_mac_header(struct sk_buff *skb) | ||
| 1147 | { | ||
| 1148 | return skb_mac_header(skb) < skb->data ? skb_mac_header(skb) : | ||
| 1149 | page_address(skb_shinfo(skb)->frags[0].page) + | ||
| 1150 | skb_shinfo(skb)->frags[0].page_offset; | ||
| 1151 | } | ||
| 1091 | 1152 | ||
| 1092 | static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, | 1153 | static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, |
| 1093 | unsigned short type, | 1154 | unsigned short type, |
| @@ -1376,12 +1437,15 @@ extern int netif_receive_skb(struct sk_buff *skb); | |||
| 1376 | extern void napi_gro_flush(struct napi_struct *napi); | 1437 | extern void napi_gro_flush(struct napi_struct *napi); |
| 1377 | extern int dev_gro_receive(struct napi_struct *napi, | 1438 | extern int dev_gro_receive(struct napi_struct *napi, |
| 1378 | struct sk_buff *skb); | 1439 | struct sk_buff *skb); |
| 1440 | extern int napi_skb_finish(int ret, struct sk_buff *skb); | ||
| 1379 | extern int napi_gro_receive(struct napi_struct *napi, | 1441 | extern int napi_gro_receive(struct napi_struct *napi, |
| 1380 | struct sk_buff *skb); | 1442 | struct sk_buff *skb); |
| 1381 | extern void napi_reuse_skb(struct napi_struct *napi, | 1443 | extern void napi_reuse_skb(struct napi_struct *napi, |
| 1382 | struct sk_buff *skb); | 1444 | struct sk_buff *skb); |
| 1383 | extern struct sk_buff * napi_fraginfo_skb(struct napi_struct *napi, | 1445 | extern struct sk_buff * napi_fraginfo_skb(struct napi_struct *napi, |
| 1384 | struct napi_gro_fraginfo *info); | 1446 | struct napi_gro_fraginfo *info); |
| 1447 | extern int napi_frags_finish(struct napi_struct *napi, | ||
| 1448 | struct sk_buff *skb, int ret); | ||
| 1385 | extern int napi_gro_frags(struct napi_struct *napi, | 1449 | extern int napi_gro_frags(struct napi_struct *napi, |
| 1386 | struct napi_gro_fraginfo *info); | 1450 | struct napi_gro_fraginfo *info); |
| 1387 | extern void netif_nit_deliver(struct sk_buff *skb); | 1451 | extern void netif_nit_deliver(struct sk_buff *skb); |
| @@ -1575,56 +1639,6 @@ static inline u32 netif_msg_init(int debug_value, int default_msg_enable_bits) | |||
| 1575 | return (1 << debug_value) - 1; | 1639 | return (1 << debug_value) - 1; |
| 1576 | } | 1640 | } |
| 1577 | 1641 | ||
| 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) | 1642 | static inline void __netif_tx_lock(struct netdev_queue *txq, int cpu) |
| 1629 | { | 1643 | { |
| 1630 | spin_lock(&txq->_xmit_lock); | 1644 | spin_lock(&txq->_xmit_lock); |
| @@ -1875,7 +1889,7 @@ static inline int skb_bond_should_drop(struct sk_buff *skb) | |||
| 1875 | 1889 | ||
| 1876 | if (dev->priv_flags & IFF_SLAVE_INACTIVE) { | 1890 | if (dev->priv_flags & IFF_SLAVE_INACTIVE) { |
| 1877 | if ((dev->priv_flags & IFF_SLAVE_NEEDARP) && | 1891 | if ((dev->priv_flags & IFF_SLAVE_NEEDARP) && |
| 1878 | skb->protocol == __constant_htons(ETH_P_ARP)) | 1892 | skb->protocol == __cpu_to_be16(ETH_P_ARP)) |
| 1879 | return 0; | 1893 | return 0; |
| 1880 | 1894 | ||
| 1881 | if (master->priv_flags & IFF_MASTER_ALB) { | 1895 | if (master->priv_flags & IFF_MASTER_ALB) { |
| @@ -1884,7 +1898,7 @@ static inline int skb_bond_should_drop(struct sk_buff *skb) | |||
| 1884 | return 0; | 1898 | return 0; |
| 1885 | } | 1899 | } |
| 1886 | if (master->priv_flags & IFF_MASTER_8023AD && | 1900 | if (master->priv_flags & IFF_MASTER_8023AD && |
| 1887 | skb->protocol == __constant_htons(ETH_P_SLOW)) | 1901 | skb->protocol == __cpu_to_be16(ETH_P_SLOW)) |
| 1888 | return 0; | 1902 | return 0; |
| 1889 | 1903 | ||
| 1890 | return 1; | 1904 | 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/nf_conntrack_tcp.h b/include/linux/netfilter/nf_conntrack_tcp.h index a049df4f2236..3066789b972a 100644 --- a/include/linux/netfilter/nf_conntrack_tcp.h +++ b/include/linux/netfilter/nf_conntrack_tcp.h | |||
| @@ -2,6 +2,8 @@ | |||
| 2 | #define _NF_CONNTRACK_TCP_H | 2 | #define _NF_CONNTRACK_TCP_H |
| 3 | /* TCP tracking. */ | 3 | /* TCP tracking. */ |
| 4 | 4 | ||
| 5 | #include <linux/types.h> | ||
| 6 | |||
| 5 | /* This is exposed to userspace (ctnetlink) */ | 7 | /* This is exposed to userspace (ctnetlink) */ |
| 6 | enum tcp_conntrack { | 8 | enum tcp_conntrack { |
| 7 | TCP_CONNTRACK_NONE, | 9 | TCP_CONNTRACK_NONE, |
| @@ -34,8 +36,8 @@ enum tcp_conntrack { | |||
| 34 | #define IP_CT_TCP_FLAG_DATA_UNACKNOWLEDGED 0x10 | 36 | #define IP_CT_TCP_FLAG_DATA_UNACKNOWLEDGED 0x10 |
| 35 | 37 | ||
| 36 | struct nf_ct_tcp_flags { | 38 | struct nf_ct_tcp_flags { |
| 37 | u_int8_t flags; | 39 | __u8 flags; |
| 38 | u_int8_t mask; | 40 | __u8 mask; |
| 39 | }; | 41 | }; |
| 40 | 42 | ||
| 41 | #ifdef __KERNEL__ | 43 | #ifdef __KERNEL__ |
diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h index 7d8e0455ccac..c600083cbdf5 100644 --- a/include/linux/netfilter/nfnetlink.h +++ b/include/linux/netfilter/nfnetlink.h | |||
| @@ -25,8 +25,8 @@ enum nfnetlink_groups { | |||
| 25 | /* General form of address family dependent message. | 25 | /* General form of address family dependent message. |
| 26 | */ | 26 | */ |
| 27 | struct nfgenmsg { | 27 | struct nfgenmsg { |
| 28 | u_int8_t nfgen_family; /* AF_xxx */ | 28 | __u8 nfgen_family; /* AF_xxx */ |
| 29 | u_int8_t version; /* nfnetlink version */ | 29 | __u8 version; /* nfnetlink version */ |
| 30 | __be16 res_id; /* resource id */ | 30 | __be16 res_id; /* resource id */ |
| 31 | }; | 31 | }; |
| 32 | 32 | ||
| @@ -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/nfnetlink_compat.h b/include/linux/netfilter/nfnetlink_compat.h index e1451760c9cd..eda55cabceec 100644 --- a/include/linux/netfilter/nfnetlink_compat.h +++ b/include/linux/netfilter/nfnetlink_compat.h | |||
| @@ -1,5 +1,8 @@ | |||
| 1 | #ifndef _NFNETLINK_COMPAT_H | 1 | #ifndef _NFNETLINK_COMPAT_H |
| 2 | #define _NFNETLINK_COMPAT_H | 2 | #define _NFNETLINK_COMPAT_H |
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 3 | #ifndef __KERNEL__ | 6 | #ifndef __KERNEL__ |
| 4 | /* Old nfnetlink macros for userspace */ | 7 | /* Old nfnetlink macros for userspace */ |
| 5 | 8 | ||
| @@ -20,8 +23,8 @@ | |||
| 20 | 23 | ||
| 21 | struct nfattr | 24 | struct nfattr |
| 22 | { | 25 | { |
| 23 | u_int16_t nfa_len; | 26 | __u16 nfa_len; |
| 24 | u_int16_t nfa_type; /* we use 15 bits for the type, and the highest | 27 | __u16 nfa_type; /* we use 15 bits for the type, and the highest |
| 25 | * bit to indicate whether the payload is nested */ | 28 | * bit to indicate whether the payload is nested */ |
| 26 | }; | 29 | }; |
| 27 | 30 | ||
diff --git a/include/linux/netfilter/nfnetlink_log.h b/include/linux/netfilter/nfnetlink_log.h index f661731f3cb1..d3bab7a2c9b7 100644 --- a/include/linux/netfilter/nfnetlink_log.h +++ b/include/linux/netfilter/nfnetlink_log.h | |||
| @@ -17,14 +17,14 @@ enum nfulnl_msg_types { | |||
| 17 | 17 | ||
| 18 | struct nfulnl_msg_packet_hdr { | 18 | struct nfulnl_msg_packet_hdr { |
| 19 | __be16 hw_protocol; /* hw protocol (network order) */ | 19 | __be16 hw_protocol; /* hw protocol (network order) */ |
| 20 | u_int8_t hook; /* netfilter hook */ | 20 | __u8 hook; /* netfilter hook */ |
| 21 | u_int8_t _pad; | 21 | __u8 _pad; |
| 22 | }; | 22 | }; |
| 23 | 23 | ||
| 24 | struct nfulnl_msg_packet_hw { | 24 | struct nfulnl_msg_packet_hw { |
| 25 | __be16 hw_addrlen; | 25 | __be16 hw_addrlen; |
| 26 | u_int16_t _pad; | 26 | __u16 _pad; |
| 27 | u_int8_t hw_addr[8]; | 27 | __u8 hw_addr[8]; |
| 28 | }; | 28 | }; |
| 29 | 29 | ||
| 30 | struct nfulnl_msg_packet_timestamp { | 30 | struct nfulnl_msg_packet_timestamp { |
| @@ -35,12 +35,12 @@ struct nfulnl_msg_packet_timestamp { | |||
| 35 | enum nfulnl_attr_type { | 35 | enum nfulnl_attr_type { |
| 36 | NFULA_UNSPEC, | 36 | NFULA_UNSPEC, |
| 37 | NFULA_PACKET_HDR, | 37 | NFULA_PACKET_HDR, |
| 38 | NFULA_MARK, /* u_int32_t nfmark */ | 38 | NFULA_MARK, /* __u32 nfmark */ |
| 39 | NFULA_TIMESTAMP, /* nfulnl_msg_packet_timestamp */ | 39 | NFULA_TIMESTAMP, /* nfulnl_msg_packet_timestamp */ |
| 40 | NFULA_IFINDEX_INDEV, /* u_int32_t ifindex */ | 40 | NFULA_IFINDEX_INDEV, /* __u32 ifindex */ |
| 41 | NFULA_IFINDEX_OUTDEV, /* u_int32_t ifindex */ | 41 | NFULA_IFINDEX_OUTDEV, /* __u32 ifindex */ |
| 42 | NFULA_IFINDEX_PHYSINDEV, /* u_int32_t ifindex */ | 42 | NFULA_IFINDEX_PHYSINDEV, /* __u32 ifindex */ |
| 43 | NFULA_IFINDEX_PHYSOUTDEV, /* u_int32_t ifindex */ | 43 | NFULA_IFINDEX_PHYSOUTDEV, /* __u32 ifindex */ |
| 44 | NFULA_HWADDR, /* nfulnl_msg_packet_hw */ | 44 | NFULA_HWADDR, /* nfulnl_msg_packet_hw */ |
| 45 | NFULA_PAYLOAD, /* opaque data payload */ | 45 | NFULA_PAYLOAD, /* opaque data payload */ |
| 46 | NFULA_PREFIX, /* string prefix */ | 46 | NFULA_PREFIX, /* string prefix */ |
| @@ -65,23 +65,23 @@ enum nfulnl_msg_config_cmds { | |||
| 65 | }; | 65 | }; |
| 66 | 66 | ||
| 67 | struct nfulnl_msg_config_cmd { | 67 | struct nfulnl_msg_config_cmd { |
| 68 | u_int8_t command; /* nfulnl_msg_config_cmds */ | 68 | __u8 command; /* nfulnl_msg_config_cmds */ |
| 69 | } __attribute__ ((packed)); | 69 | } __attribute__ ((packed)); |
| 70 | 70 | ||
| 71 | struct nfulnl_msg_config_mode { | 71 | struct nfulnl_msg_config_mode { |
| 72 | __be32 copy_range; | 72 | __be32 copy_range; |
| 73 | u_int8_t copy_mode; | 73 | __u8 copy_mode; |
| 74 | u_int8_t _pad; | 74 | __u8 _pad; |
| 75 | } __attribute__ ((packed)); | 75 | } __attribute__ ((packed)); |
| 76 | 76 | ||
| 77 | enum nfulnl_attr_config { | 77 | enum nfulnl_attr_config { |
| 78 | NFULA_CFG_UNSPEC, | 78 | NFULA_CFG_UNSPEC, |
| 79 | NFULA_CFG_CMD, /* nfulnl_msg_config_cmd */ | 79 | NFULA_CFG_CMD, /* nfulnl_msg_config_cmd */ |
| 80 | NFULA_CFG_MODE, /* nfulnl_msg_config_mode */ | 80 | NFULA_CFG_MODE, /* nfulnl_msg_config_mode */ |
| 81 | NFULA_CFG_NLBUFSIZ, /* u_int32_t buffer size */ | 81 | NFULA_CFG_NLBUFSIZ, /* __u32 buffer size */ |
| 82 | NFULA_CFG_TIMEOUT, /* u_int32_t in 1/100 s */ | 82 | NFULA_CFG_TIMEOUT, /* __u32 in 1/100 s */ |
| 83 | NFULA_CFG_QTHRESH, /* u_int32_t */ | 83 | NFULA_CFG_QTHRESH, /* __u32 */ |
| 84 | NFULA_CFG_FLAGS, /* u_int16_t */ | 84 | NFULA_CFG_FLAGS, /* __u16 */ |
| 85 | __NFULA_CFG_MAX | 85 | __NFULA_CFG_MAX |
| 86 | }; | 86 | }; |
| 87 | #define NFULA_CFG_MAX (__NFULA_CFG_MAX -1) | 87 | #define NFULA_CFG_MAX (__NFULA_CFG_MAX -1) |
diff --git a/include/linux/netfilter/nfnetlink_queue.h b/include/linux/netfilter/nfnetlink_queue.h index 83e789633e35..2455fe5f4e01 100644 --- a/include/linux/netfilter/nfnetlink_queue.h +++ b/include/linux/netfilter/nfnetlink_queue.h | |||
| @@ -15,13 +15,13 @@ enum nfqnl_msg_types { | |||
| 15 | struct nfqnl_msg_packet_hdr { | 15 | struct nfqnl_msg_packet_hdr { |
| 16 | __be32 packet_id; /* unique ID of packet in queue */ | 16 | __be32 packet_id; /* unique ID of packet in queue */ |
| 17 | __be16 hw_protocol; /* hw protocol (network order) */ | 17 | __be16 hw_protocol; /* hw protocol (network order) */ |
| 18 | u_int8_t hook; /* netfilter hook */ | 18 | __u8 hook; /* netfilter hook */ |
| 19 | } __attribute__ ((packed)); | 19 | } __attribute__ ((packed)); |
| 20 | 20 | ||
| 21 | struct nfqnl_msg_packet_hw { | 21 | struct nfqnl_msg_packet_hw { |
| 22 | __be16 hw_addrlen; | 22 | __be16 hw_addrlen; |
| 23 | u_int16_t _pad; | 23 | __u16 _pad; |
| 24 | u_int8_t hw_addr[8]; | 24 | __u8 hw_addr[8]; |
| 25 | }; | 25 | }; |
| 26 | 26 | ||
| 27 | struct nfqnl_msg_packet_timestamp { | 27 | struct nfqnl_msg_packet_timestamp { |
| @@ -33,12 +33,12 @@ enum nfqnl_attr_type { | |||
| 33 | NFQA_UNSPEC, | 33 | NFQA_UNSPEC, |
| 34 | NFQA_PACKET_HDR, | 34 | NFQA_PACKET_HDR, |
| 35 | NFQA_VERDICT_HDR, /* nfqnl_msg_verdict_hrd */ | 35 | NFQA_VERDICT_HDR, /* nfqnl_msg_verdict_hrd */ |
| 36 | NFQA_MARK, /* u_int32_t nfmark */ | 36 | NFQA_MARK, /* __u32 nfmark */ |
| 37 | NFQA_TIMESTAMP, /* nfqnl_msg_packet_timestamp */ | 37 | NFQA_TIMESTAMP, /* nfqnl_msg_packet_timestamp */ |
| 38 | NFQA_IFINDEX_INDEV, /* u_int32_t ifindex */ | 38 | NFQA_IFINDEX_INDEV, /* __u32 ifindex */ |
| 39 | NFQA_IFINDEX_OUTDEV, /* u_int32_t ifindex */ | 39 | NFQA_IFINDEX_OUTDEV, /* __u32 ifindex */ |
| 40 | NFQA_IFINDEX_PHYSINDEV, /* u_int32_t ifindex */ | 40 | NFQA_IFINDEX_PHYSINDEV, /* __u32 ifindex */ |
| 41 | NFQA_IFINDEX_PHYSOUTDEV, /* u_int32_t ifindex */ | 41 | NFQA_IFINDEX_PHYSOUTDEV, /* __u32 ifindex */ |
| 42 | NFQA_HWADDR, /* nfqnl_msg_packet_hw */ | 42 | NFQA_HWADDR, /* nfqnl_msg_packet_hw */ |
| 43 | NFQA_PAYLOAD, /* opaque data payload */ | 43 | NFQA_PAYLOAD, /* opaque data payload */ |
| 44 | 44 | ||
| @@ -61,8 +61,8 @@ enum nfqnl_msg_config_cmds { | |||
| 61 | }; | 61 | }; |
| 62 | 62 | ||
| 63 | struct nfqnl_msg_config_cmd { | 63 | struct nfqnl_msg_config_cmd { |
| 64 | u_int8_t command; /* nfqnl_msg_config_cmds */ | 64 | __u8 command; /* nfqnl_msg_config_cmds */ |
| 65 | u_int8_t _pad; | 65 | __u8 _pad; |
| 66 | __be16 pf; /* AF_xxx for PF_[UN]BIND */ | 66 | __be16 pf; /* AF_xxx for PF_[UN]BIND */ |
| 67 | }; | 67 | }; |
| 68 | 68 | ||
| @@ -74,7 +74,7 @@ enum nfqnl_config_mode { | |||
| 74 | 74 | ||
| 75 | struct nfqnl_msg_config_params { | 75 | struct nfqnl_msg_config_params { |
| 76 | __be32 copy_range; | 76 | __be32 copy_range; |
| 77 | u_int8_t copy_mode; /* enum nfqnl_config_mode */ | 77 | __u8 copy_mode; /* enum nfqnl_config_mode */ |
| 78 | } __attribute__ ((packed)); | 78 | } __attribute__ ((packed)); |
| 79 | 79 | ||
| 80 | 80 | ||
| @@ -82,7 +82,7 @@ enum nfqnl_attr_config { | |||
| 82 | NFQA_CFG_UNSPEC, | 82 | NFQA_CFG_UNSPEC, |
| 83 | NFQA_CFG_CMD, /* nfqnl_msg_config_cmd */ | 83 | NFQA_CFG_CMD, /* nfqnl_msg_config_cmd */ |
| 84 | NFQA_CFG_PARAMS, /* nfqnl_msg_config_params */ | 84 | NFQA_CFG_PARAMS, /* nfqnl_msg_config_params */ |
| 85 | NFQA_CFG_QUEUE_MAXLEN, /* u_int32_t */ | 85 | NFQA_CFG_QUEUE_MAXLEN, /* __u32 */ |
| 86 | __NFQA_CFG_MAX | 86 | __NFQA_CFG_MAX |
| 87 | }; | 87 | }; |
| 88 | #define NFQA_CFG_MAX (__NFQA_CFG_MAX-1) | 88 | #define NFQA_CFG_MAX (__NFQA_CFG_MAX-1) |
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index c7ee8744d26b..7b1a652066c0 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _X_TABLES_H | 1 | #ifndef _X_TABLES_H |
| 2 | #define _X_TABLES_H | 2 | #define _X_TABLES_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | #define XT_FUNCTION_MAXNAMELEN 30 | 6 | #define XT_FUNCTION_MAXNAMELEN 30 |
| 5 | #define XT_TABLE_MAXNAMELEN 32 | 7 | #define XT_TABLE_MAXNAMELEN 32 |
| 6 | 8 | ||
| @@ -8,22 +10,22 @@ struct xt_entry_match | |||
| 8 | { | 10 | { |
| 9 | union { | 11 | union { |
| 10 | struct { | 12 | struct { |
| 11 | u_int16_t match_size; | 13 | __u16 match_size; |
| 12 | 14 | ||
| 13 | /* Used by userspace */ | 15 | /* Used by userspace */ |
| 14 | char name[XT_FUNCTION_MAXNAMELEN-1]; | 16 | char name[XT_FUNCTION_MAXNAMELEN-1]; |
| 15 | 17 | ||
| 16 | u_int8_t revision; | 18 | __u8 revision; |
| 17 | } user; | 19 | } user; |
| 18 | struct { | 20 | struct { |
| 19 | u_int16_t match_size; | 21 | __u16 match_size; |
| 20 | 22 | ||
| 21 | /* Used inside the kernel */ | 23 | /* Used inside the kernel */ |
| 22 | struct xt_match *match; | 24 | struct xt_match *match; |
| 23 | } kernel; | 25 | } kernel; |
| 24 | 26 | ||
| 25 | /* Total length */ | 27 | /* Total length */ |
| 26 | u_int16_t match_size; | 28 | __u16 match_size; |
| 27 | } u; | 29 | } u; |
| 28 | 30 | ||
| 29 | unsigned char data[0]; | 31 | unsigned char data[0]; |
| @@ -33,22 +35,22 @@ struct xt_entry_target | |||
| 33 | { | 35 | { |
| 34 | union { | 36 | union { |
| 35 | struct { | 37 | struct { |
| 36 | u_int16_t target_size; | 38 | __u16 target_size; |
| 37 | 39 | ||
| 38 | /* Used by userspace */ | 40 | /* Used by userspace */ |
| 39 | char name[XT_FUNCTION_MAXNAMELEN-1]; | 41 | char name[XT_FUNCTION_MAXNAMELEN-1]; |
| 40 | 42 | ||
| 41 | u_int8_t revision; | 43 | __u8 revision; |
| 42 | } user; | 44 | } user; |
| 43 | struct { | 45 | struct { |
| 44 | u_int16_t target_size; | 46 | __u16 target_size; |
| 45 | 47 | ||
| 46 | /* Used inside the kernel */ | 48 | /* Used inside the kernel */ |
| 47 | struct xt_target *target; | 49 | struct xt_target *target; |
| 48 | } kernel; | 50 | } kernel; |
| 49 | 51 | ||
| 50 | /* Total length */ | 52 | /* Total length */ |
| 51 | u_int16_t target_size; | 53 | __u16 target_size; |
| 52 | } u; | 54 | } u; |
| 53 | 55 | ||
| 54 | unsigned char data[0]; | 56 | unsigned char data[0]; |
| @@ -74,7 +76,7 @@ struct xt_get_revision | |||
| 74 | { | 76 | { |
| 75 | char name[XT_FUNCTION_MAXNAMELEN-1]; | 77 | char name[XT_FUNCTION_MAXNAMELEN-1]; |
| 76 | 78 | ||
| 77 | u_int8_t revision; | 79 | __u8 revision; |
| 78 | }; | 80 | }; |
| 79 | 81 | ||
| 80 | /* CONTINUE verdict for targets */ | 82 | /* CONTINUE verdict for targets */ |
| @@ -90,10 +92,10 @@ struct xt_get_revision | |||
| 90 | */ | 92 | */ |
| 91 | struct _xt_align | 93 | struct _xt_align |
| 92 | { | 94 | { |
| 93 | u_int8_t u8; | 95 | __u8 u8; |
| 94 | u_int16_t u16; | 96 | __u16 u16; |
| 95 | u_int32_t u32; | 97 | __u32 u32; |
| 96 | u_int64_t u64; | 98 | __u64 u64; |
| 97 | }; | 99 | }; |
| 98 | 100 | ||
| 99 | #define XT_ALIGN(s) (((s) + (__alignof__(struct _xt_align)-1)) \ | 101 | #define XT_ALIGN(s) (((s) + (__alignof__(struct _xt_align)-1)) \ |
| @@ -109,7 +111,7 @@ struct _xt_align | |||
| 109 | 111 | ||
| 110 | struct xt_counters | 112 | struct xt_counters |
| 111 | { | 113 | { |
| 112 | u_int64_t pcnt, bcnt; /* Packet and byte counters */ | 114 | __u64 pcnt, bcnt; /* Packet and byte counters */ |
| 113 | }; | 115 | }; |
| 114 | 116 | ||
| 115 | /* The argument to IPT_SO_ADD_COUNTERS. */ | 117 | /* The argument to IPT_SO_ADD_COUNTERS. */ |
| @@ -349,23 +351,22 @@ struct xt_table | |||
| 349 | { | 351 | { |
| 350 | struct list_head list; | 352 | struct list_head list; |
| 351 | 353 | ||
| 352 | /* A unique name... */ | ||
| 353 | const char name[XT_TABLE_MAXNAMELEN]; | ||
| 354 | |||
| 355 | /* What hooks you will enter on */ | 354 | /* What hooks you will enter on */ |
| 356 | unsigned int valid_hooks; | 355 | unsigned int valid_hooks; |
| 357 | 356 | ||
| 358 | /* Lock for the curtain */ | 357 | /* Lock for the curtain */ |
| 359 | rwlock_t lock; | 358 | struct mutex lock; |
| 360 | 359 | ||
| 361 | /* Man behind the curtain... */ | 360 | /* Man behind the curtain... */ |
| 362 | //struct ip6t_table_info *private; | 361 | struct xt_table_info *private; |
| 363 | void *private; | ||
| 364 | 362 | ||
| 365 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | 363 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ |
| 366 | struct module *me; | 364 | struct module *me; |
| 367 | 365 | ||
| 368 | u_int8_t af; /* address/protocol family */ | 366 | u_int8_t af; /* address/protocol family */ |
| 367 | |||
| 368 | /* A unique name... */ | ||
| 369 | const char name[XT_TABLE_MAXNAMELEN]; | ||
| 369 | }; | 370 | }; |
| 370 | 371 | ||
| 371 | #include <linux/netfilter_ipv4.h> | 372 | #include <linux/netfilter_ipv4.h> |
| @@ -386,7 +387,7 @@ struct xt_table_info | |||
| 386 | 387 | ||
| 387 | /* ipt_entry tables: one per CPU */ | 388 | /* ipt_entry tables: one per CPU */ |
| 388 | /* Note : this field MUST be the last one, see XT_TABLE_INFO_SZ */ | 389 | /* Note : this field MUST be the last one, see XT_TABLE_INFO_SZ */ |
| 389 | char *entries[1]; | 390 | void *entries[1]; |
| 390 | }; | 391 | }; |
| 391 | 392 | ||
| 392 | #define XT_TABLE_INFO_SZ (offsetof(struct xt_table_info, entries) \ | 393 | #define XT_TABLE_INFO_SZ (offsetof(struct xt_table_info, entries) \ |
| @@ -433,6 +434,31 @@ extern void xt_proto_fini(struct net *net, u_int8_t af); | |||
| 433 | 434 | ||
| 434 | extern struct xt_table_info *xt_alloc_table_info(unsigned int size); | 435 | extern struct xt_table_info *xt_alloc_table_info(unsigned int size); |
| 435 | extern void xt_free_table_info(struct xt_table_info *info); | 436 | extern void xt_free_table_info(struct xt_table_info *info); |
| 437 | extern void xt_table_entry_swap_rcu(struct xt_table_info *old, | ||
| 438 | struct xt_table_info *new); | ||
| 439 | |||
| 440 | /* | ||
| 441 | * This helper is performance critical and must be inlined | ||
| 442 | */ | ||
| 443 | static inline unsigned long ifname_compare_aligned(const char *_a, | ||
| 444 | const char *_b, | ||
| 445 | const char *_mask) | ||
| 446 | { | ||
| 447 | const unsigned long *a = (const unsigned long *)_a; | ||
| 448 | const unsigned long *b = (const unsigned long *)_b; | ||
| 449 | const unsigned long *mask = (const unsigned long *)_mask; | ||
| 450 | unsigned long ret; | ||
| 451 | |||
| 452 | ret = (a[0] ^ b[0]) & mask[0]; | ||
| 453 | if (IFNAMSIZ > sizeof(unsigned long)) | ||
| 454 | ret |= (a[1] ^ b[1]) & mask[1]; | ||
| 455 | if (IFNAMSIZ > 2 * sizeof(unsigned long)) | ||
| 456 | ret |= (a[2] ^ b[2]) & mask[2]; | ||
| 457 | if (IFNAMSIZ > 3 * sizeof(unsigned long)) | ||
| 458 | ret |= (a[3] ^ b[3]) & mask[3]; | ||
| 459 | BUILD_BUG_ON(IFNAMSIZ > 4 * sizeof(unsigned long)); | ||
| 460 | return ret; | ||
| 461 | } | ||
| 436 | 462 | ||
| 437 | #ifdef CONFIG_COMPAT | 463 | #ifdef CONFIG_COMPAT |
| 438 | #include <net/compat.h> | 464 | #include <net/compat.h> |
diff --git a/include/linux/netfilter/xt_CLASSIFY.h b/include/linux/netfilter/xt_CLASSIFY.h index 58111355255d..a813bf14dd63 100644 --- a/include/linux/netfilter/xt_CLASSIFY.h +++ b/include/linux/netfilter/xt_CLASSIFY.h | |||
| @@ -1,8 +1,10 @@ | |||
| 1 | #ifndef _XT_CLASSIFY_H | 1 | #ifndef _XT_CLASSIFY_H |
| 2 | #define _XT_CLASSIFY_H | 2 | #define _XT_CLASSIFY_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | struct xt_classify_target_info { | 6 | struct xt_classify_target_info { |
| 5 | u_int32_t priority; | 7 | __u32 priority; |
| 6 | }; | 8 | }; |
| 7 | 9 | ||
| 8 | #endif /*_XT_CLASSIFY_H */ | 10 | #endif /*_XT_CLASSIFY_H */ |
diff --git a/include/linux/netfilter/xt_CONNMARK.h b/include/linux/netfilter/xt_CONNMARK.h index 4e58ba43c289..7635c8ffdadb 100644 --- a/include/linux/netfilter/xt_CONNMARK.h +++ b/include/linux/netfilter/xt_CONNMARK.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_CONNMARK_H_target | 1 | #ifndef _XT_CONNMARK_H_target |
| 2 | #define _XT_CONNMARK_H_target | 2 | #define _XT_CONNMARK_H_target |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> | 6 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> |
| 5 | * by Henrik Nordstrom <hno@marasystems.com> | 7 | * by Henrik Nordstrom <hno@marasystems.com> |
| 6 | * | 8 | * |
| @@ -19,12 +21,12 @@ enum { | |||
| 19 | struct xt_connmark_target_info { | 21 | struct xt_connmark_target_info { |
| 20 | unsigned long mark; | 22 | unsigned long mark; |
| 21 | unsigned long mask; | 23 | unsigned long mask; |
| 22 | u_int8_t mode; | 24 | __u8 mode; |
| 23 | }; | 25 | }; |
| 24 | 26 | ||
| 25 | struct xt_connmark_tginfo1 { | 27 | struct xt_connmark_tginfo1 { |
| 26 | u_int32_t ctmark, ctmask, nfmask; | 28 | __u32 ctmark, ctmask, nfmask; |
| 27 | u_int8_t mode; | 29 | __u8 mode; |
| 28 | }; | 30 | }; |
| 29 | 31 | ||
| 30 | #endif /*_XT_CONNMARK_H_target*/ | 32 | #endif /*_XT_CONNMARK_H_target*/ |
diff --git a/include/linux/netfilter/xt_CONNSECMARK.h b/include/linux/netfilter/xt_CONNSECMARK.h index c6bd75469ba2..b973ff80fa1e 100644 --- a/include/linux/netfilter/xt_CONNSECMARK.h +++ b/include/linux/netfilter/xt_CONNSECMARK.h | |||
| @@ -1,13 +1,15 @@ | |||
| 1 | #ifndef _XT_CONNSECMARK_H_target | 1 | #ifndef _XT_CONNSECMARK_H_target |
| 2 | #define _XT_CONNSECMARK_H_target | 2 | #define _XT_CONNSECMARK_H_target |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | enum { | 6 | enum { |
| 5 | CONNSECMARK_SAVE = 1, | 7 | CONNSECMARK_SAVE = 1, |
| 6 | CONNSECMARK_RESTORE, | 8 | CONNSECMARK_RESTORE, |
| 7 | }; | 9 | }; |
| 8 | 10 | ||
| 9 | struct xt_connsecmark_target_info { | 11 | struct xt_connsecmark_target_info { |
| 10 | u_int8_t mode; | 12 | __u8 mode; |
| 11 | }; | 13 | }; |
| 12 | 14 | ||
| 13 | #endif /*_XT_CONNSECMARK_H_target */ | 15 | #endif /*_XT_CONNSECMARK_H_target */ |
diff --git a/include/linux/netfilter/xt_DSCP.h b/include/linux/netfilter/xt_DSCP.h index 14da1968e2c6..648e0b3bed29 100644 --- a/include/linux/netfilter/xt_DSCP.h +++ b/include/linux/netfilter/xt_DSCP.h | |||
| @@ -11,15 +11,16 @@ | |||
| 11 | #ifndef _XT_DSCP_TARGET_H | 11 | #ifndef _XT_DSCP_TARGET_H |
| 12 | #define _XT_DSCP_TARGET_H | 12 | #define _XT_DSCP_TARGET_H |
| 13 | #include <linux/netfilter/xt_dscp.h> | 13 | #include <linux/netfilter/xt_dscp.h> |
| 14 | #include <linux/types.h> | ||
| 14 | 15 | ||
| 15 | /* target info */ | 16 | /* target info */ |
| 16 | struct xt_DSCP_info { | 17 | struct xt_DSCP_info { |
| 17 | u_int8_t dscp; | 18 | __u8 dscp; |
| 18 | }; | 19 | }; |
| 19 | 20 | ||
| 20 | struct xt_tos_target_info { | 21 | struct xt_tos_target_info { |
| 21 | u_int8_t tos_value; | 22 | __u8 tos_value; |
| 22 | u_int8_t tos_mask; | 23 | __u8 tos_mask; |
| 23 | }; | 24 | }; |
| 24 | 25 | ||
| 25 | #endif /* _XT_DSCP_TARGET_H */ | 26 | #endif /* _XT_DSCP_TARGET_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_MARK.h b/include/linux/netfilter/xt_MARK.h index 778b278fd9f2..028304bcc0b1 100644 --- a/include/linux/netfilter/xt_MARK.h +++ b/include/linux/netfilter/xt_MARK.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_MARK_H_target | 1 | #ifndef _XT_MARK_H_target |
| 2 | #define _XT_MARK_H_target | 2 | #define _XT_MARK_H_target |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | /* Version 0 */ | 6 | /* Version 0 */ |
| 5 | struct xt_mark_target_info { | 7 | struct xt_mark_target_info { |
| 6 | unsigned long mark; | 8 | unsigned long mark; |
| @@ -15,11 +17,11 @@ enum { | |||
| 15 | 17 | ||
| 16 | struct xt_mark_target_info_v1 { | 18 | struct xt_mark_target_info_v1 { |
| 17 | unsigned long mark; | 19 | unsigned long mark; |
| 18 | u_int8_t mode; | 20 | __u8 mode; |
| 19 | }; | 21 | }; |
| 20 | 22 | ||
| 21 | struct xt_mark_tginfo2 { | 23 | struct xt_mark_tginfo2 { |
| 22 | u_int32_t mark, mask; | 24 | __u32 mark, mask; |
| 23 | }; | 25 | }; |
| 24 | 26 | ||
| 25 | #endif /*_XT_MARK_H_target */ | 27 | #endif /*_XT_MARK_H_target */ |
diff --git a/include/linux/netfilter/xt_NFLOG.h b/include/linux/netfilter/xt_NFLOG.h index 4b36aeb46a10..87b58311ce6b 100644 --- a/include/linux/netfilter/xt_NFLOG.h +++ b/include/linux/netfilter/xt_NFLOG.h | |||
| @@ -1,17 +1,19 @@ | |||
| 1 | #ifndef _XT_NFLOG_TARGET | 1 | #ifndef _XT_NFLOG_TARGET |
| 2 | #define _XT_NFLOG_TARGET | 2 | #define _XT_NFLOG_TARGET |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | #define XT_NFLOG_DEFAULT_GROUP 0x1 | 6 | #define XT_NFLOG_DEFAULT_GROUP 0x1 |
| 5 | #define XT_NFLOG_DEFAULT_THRESHOLD 0 | 7 | #define XT_NFLOG_DEFAULT_THRESHOLD 0 |
| 6 | 8 | ||
| 7 | #define XT_NFLOG_MASK 0x0 | 9 | #define XT_NFLOG_MASK 0x0 |
| 8 | 10 | ||
| 9 | struct xt_nflog_info { | 11 | struct xt_nflog_info { |
| 10 | u_int32_t len; | 12 | __u32 len; |
| 11 | u_int16_t group; | 13 | __u16 group; |
| 12 | u_int16_t threshold; | 14 | __u16 threshold; |
| 13 | u_int16_t flags; | 15 | __u16 flags; |
| 14 | u_int16_t pad; | 16 | __u16 pad; |
| 15 | char prefix[64]; | 17 | char prefix[64]; |
| 16 | }; | 18 | }; |
| 17 | 19 | ||
diff --git a/include/linux/netfilter/xt_NFQUEUE.h b/include/linux/netfilter/xt_NFQUEUE.h index 9a9af79f74d2..982a89f78272 100644 --- a/include/linux/netfilter/xt_NFQUEUE.h +++ b/include/linux/netfilter/xt_NFQUEUE.h | |||
| @@ -8,9 +8,11 @@ | |||
| 8 | #ifndef _XT_NFQ_TARGET_H | 8 | #ifndef _XT_NFQ_TARGET_H |
| 9 | #define _XT_NFQ_TARGET_H | 9 | #define _XT_NFQ_TARGET_H |
| 10 | 10 | ||
| 11 | #include <linux/types.h> | ||
| 12 | |||
| 11 | /* target info */ | 13 | /* target info */ |
| 12 | struct xt_NFQ_info { | 14 | struct xt_NFQ_info { |
| 13 | u_int16_t queuenum; | 15 | __u16 queuenum; |
| 14 | }; | 16 | }; |
| 15 | 17 | ||
| 16 | #endif /* _XT_NFQ_TARGET_H */ | 18 | #endif /* _XT_NFQ_TARGET_H */ |
diff --git a/include/linux/netfilter/xt_RATEEST.h b/include/linux/netfilter/xt_RATEEST.h index f79e3133cbea..6605e20ad8cf 100644 --- a/include/linux/netfilter/xt_RATEEST.h +++ b/include/linux/netfilter/xt_RATEEST.h | |||
| @@ -1,10 +1,12 @@ | |||
| 1 | #ifndef _XT_RATEEST_TARGET_H | 1 | #ifndef _XT_RATEEST_TARGET_H |
| 2 | #define _XT_RATEEST_TARGET_H | 2 | #define _XT_RATEEST_TARGET_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | struct xt_rateest_target_info { | 6 | struct xt_rateest_target_info { |
| 5 | char name[IFNAMSIZ]; | 7 | char name[IFNAMSIZ]; |
| 6 | int8_t interval; | 8 | __s8 interval; |
| 7 | u_int8_t ewma_log; | 9 | __u8 ewma_log; |
| 8 | 10 | ||
| 9 | /* Used internally by the kernel */ | 11 | /* Used internally by the kernel */ |
| 10 | struct xt_rateest *est __attribute__((aligned(8))); | 12 | struct xt_rateest *est __attribute__((aligned(8))); |
diff --git a/include/linux/netfilter/xt_SECMARK.h b/include/linux/netfilter/xt_SECMARK.h index c53fbffa997d..6fcd3448b186 100644 --- a/include/linux/netfilter/xt_SECMARK.h +++ b/include/linux/netfilter/xt_SECMARK.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_SECMARK_H_target | 1 | #ifndef _XT_SECMARK_H_target |
| 2 | #define _XT_SECMARK_H_target | 2 | #define _XT_SECMARK_H_target |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | /* | 6 | /* |
| 5 | * This is intended for use by various security subsystems (but not | 7 | * This is intended for use by various security subsystems (but not |
| 6 | * at the same time). | 8 | * at the same time). |
| @@ -12,12 +14,12 @@ | |||
| 12 | #define SECMARK_SELCTX_MAX 256 | 14 | #define SECMARK_SELCTX_MAX 256 |
| 13 | 15 | ||
| 14 | struct xt_secmark_target_selinux_info { | 16 | struct xt_secmark_target_selinux_info { |
| 15 | u_int32_t selsid; | 17 | __u32 selsid; |
| 16 | char selctx[SECMARK_SELCTX_MAX]; | 18 | char selctx[SECMARK_SELCTX_MAX]; |
| 17 | }; | 19 | }; |
| 18 | 20 | ||
| 19 | struct xt_secmark_target_info { | 21 | struct xt_secmark_target_info { |
| 20 | u_int8_t mode; | 22 | __u8 mode; |
| 21 | union { | 23 | union { |
| 22 | struct xt_secmark_target_selinux_info sel; | 24 | struct xt_secmark_target_selinux_info sel; |
| 23 | } u; | 25 | } u; |
diff --git a/include/linux/netfilter/xt_TCPMSS.h b/include/linux/netfilter/xt_TCPMSS.h index 53a292cd47f3..9a6960afc134 100644 --- a/include/linux/netfilter/xt_TCPMSS.h +++ b/include/linux/netfilter/xt_TCPMSS.h | |||
| @@ -1,8 +1,10 @@ | |||
| 1 | #ifndef _XT_TCPMSS_H | 1 | #ifndef _XT_TCPMSS_H |
| 2 | #define _XT_TCPMSS_H | 2 | #define _XT_TCPMSS_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | struct xt_tcpmss_info { | 6 | struct xt_tcpmss_info { |
| 5 | u_int16_t mss; | 7 | __u16 mss; |
| 6 | }; | 8 | }; |
| 7 | 9 | ||
| 8 | #define XT_TCPMSS_CLAMP_PMTU 0xffff | 10 | #define XT_TCPMSS_CLAMP_PMTU 0xffff |
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_connbytes.h b/include/linux/netfilter/xt_connbytes.h index c022c989754d..52bd6153b996 100644 --- a/include/linux/netfilter/xt_connbytes.h +++ b/include/linux/netfilter/xt_connbytes.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_CONNBYTES_H | 1 | #ifndef _XT_CONNBYTES_H |
| 2 | #define _XT_CONNBYTES_H | 2 | #define _XT_CONNBYTES_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | enum xt_connbytes_what { | 6 | enum xt_connbytes_what { |
| 5 | XT_CONNBYTES_PKTS, | 7 | XT_CONNBYTES_PKTS, |
| 6 | XT_CONNBYTES_BYTES, | 8 | XT_CONNBYTES_BYTES, |
| @@ -19,7 +21,7 @@ struct xt_connbytes_info | |||
| 19 | aligned_u64 from; /* count to be matched */ | 21 | aligned_u64 from; /* count to be matched */ |
| 20 | aligned_u64 to; /* count to be matched */ | 22 | aligned_u64 to; /* count to be matched */ |
| 21 | } count; | 23 | } count; |
| 22 | u_int8_t what; /* ipt_connbytes_what */ | 24 | __u8 what; /* ipt_connbytes_what */ |
| 23 | u_int8_t direction; /* ipt_connbytes_direction */ | 25 | __u8 direction; /* ipt_connbytes_direction */ |
| 24 | }; | 26 | }; |
| 25 | #endif | 27 | #endif |
diff --git a/include/linux/netfilter/xt_connmark.h b/include/linux/netfilter/xt_connmark.h index 359ef86918dc..571e266d004c 100644 --- a/include/linux/netfilter/xt_connmark.h +++ b/include/linux/netfilter/xt_connmark.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_CONNMARK_H | 1 | #ifndef _XT_CONNMARK_H |
| 2 | #define _XT_CONNMARK_H | 2 | #define _XT_CONNMARK_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> | 6 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> |
| 5 | * by Henrik Nordstrom <hno@marasystems.com> | 7 | * by Henrik Nordstrom <hno@marasystems.com> |
| 6 | * | 8 | * |
| @@ -12,12 +14,12 @@ | |||
| 12 | 14 | ||
| 13 | struct xt_connmark_info { | 15 | struct xt_connmark_info { |
| 14 | unsigned long mark, mask; | 16 | unsigned long mark, mask; |
| 15 | u_int8_t invert; | 17 | __u8 invert; |
| 16 | }; | 18 | }; |
| 17 | 19 | ||
| 18 | struct xt_connmark_mtinfo1 { | 20 | struct xt_connmark_mtinfo1 { |
| 19 | u_int32_t mark, mask; | 21 | __u32 mark, mask; |
| 20 | u_int8_t invert; | 22 | __u8 invert; |
| 21 | }; | 23 | }; |
| 22 | 24 | ||
| 23 | #endif /*_XT_CONNMARK_H*/ | 25 | #endif /*_XT_CONNMARK_H*/ |
diff --git a/include/linux/netfilter/xt_conntrack.h b/include/linux/netfilter/xt_conntrack.h index 8f5345275393..3430c7751948 100644 --- a/include/linux/netfilter/xt_conntrack.h +++ b/include/linux/netfilter/xt_conntrack.h | |||
| @@ -63,9 +63,9 @@ struct xt_conntrack_info | |||
| 63 | unsigned long expires_min, expires_max; | 63 | unsigned long expires_min, expires_max; |
| 64 | 64 | ||
| 65 | /* Flags word */ | 65 | /* Flags word */ |
| 66 | u_int8_t flags; | 66 | __u8 flags; |
| 67 | /* Inverse flags */ | 67 | /* Inverse flags */ |
| 68 | u_int8_t invflags; | 68 | __u8 invflags; |
| 69 | }; | 69 | }; |
| 70 | 70 | ||
| 71 | struct xt_conntrack_mtinfo1 { | 71 | struct xt_conntrack_mtinfo1 { |
| @@ -73,12 +73,12 @@ struct xt_conntrack_mtinfo1 { | |||
| 73 | union nf_inet_addr origdst_addr, origdst_mask; | 73 | union nf_inet_addr origdst_addr, origdst_mask; |
| 74 | union nf_inet_addr replsrc_addr, replsrc_mask; | 74 | union nf_inet_addr replsrc_addr, replsrc_mask; |
| 75 | union nf_inet_addr repldst_addr, repldst_mask; | 75 | union nf_inet_addr repldst_addr, repldst_mask; |
| 76 | u_int32_t expires_min, expires_max; | 76 | __u32 expires_min, expires_max; |
| 77 | u_int16_t l4proto; | 77 | __u16 l4proto; |
| 78 | __be16 origsrc_port, origdst_port; | 78 | __be16 origsrc_port, origdst_port; |
| 79 | __be16 replsrc_port, repldst_port; | 79 | __be16 replsrc_port, repldst_port; |
| 80 | u_int16_t match_flags, invert_flags; | 80 | __u16 match_flags, invert_flags; |
| 81 | u_int8_t state_mask, status_mask; | 81 | __u8 state_mask, status_mask; |
| 82 | }; | 82 | }; |
| 83 | 83 | ||
| 84 | #endif /*_XT_CONNTRACK_H*/ | 84 | #endif /*_XT_CONNTRACK_H*/ |
diff --git a/include/linux/netfilter/xt_dccp.h b/include/linux/netfilter/xt_dccp.h index e0221b9d32cb..a579e1b6f040 100644 --- a/include/linux/netfilter/xt_dccp.h +++ b/include/linux/netfilter/xt_dccp.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_DCCP_H_ | 1 | #ifndef _XT_DCCP_H_ |
| 2 | #define _XT_DCCP_H_ | 2 | #define _XT_DCCP_H_ |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | #define XT_DCCP_SRC_PORTS 0x01 | 6 | #define XT_DCCP_SRC_PORTS 0x01 |
| 5 | #define XT_DCCP_DEST_PORTS 0x02 | 7 | #define XT_DCCP_DEST_PORTS 0x02 |
| 6 | #define XT_DCCP_TYPE 0x04 | 8 | #define XT_DCCP_TYPE 0x04 |
| @@ -9,14 +11,14 @@ | |||
| 9 | #define XT_DCCP_VALID_FLAGS 0x0f | 11 | #define XT_DCCP_VALID_FLAGS 0x0f |
| 10 | 12 | ||
| 11 | struct xt_dccp_info { | 13 | struct xt_dccp_info { |
| 12 | u_int16_t dpts[2]; /* Min, Max */ | 14 | __u16 dpts[2]; /* Min, Max */ |
| 13 | u_int16_t spts[2]; /* Min, Max */ | 15 | __u16 spts[2]; /* Min, Max */ |
| 14 | 16 | ||
| 15 | u_int16_t flags; | 17 | __u16 flags; |
| 16 | u_int16_t invflags; | 18 | __u16 invflags; |
| 17 | 19 | ||
| 18 | u_int16_t typemask; | 20 | __u16 typemask; |
| 19 | u_int8_t option; | 21 | __u8 option; |
| 20 | }; | 22 | }; |
| 21 | 23 | ||
| 22 | #endif /* _XT_DCCP_H_ */ | 24 | #endif /* _XT_DCCP_H_ */ |
diff --git a/include/linux/netfilter/xt_dscp.h b/include/linux/netfilter/xt_dscp.h index f49bc1a648dc..15f8932ad5ce 100644 --- a/include/linux/netfilter/xt_dscp.h +++ b/include/linux/netfilter/xt_dscp.h | |||
| @@ -10,20 +10,22 @@ | |||
| 10 | #ifndef _XT_DSCP_H | 10 | #ifndef _XT_DSCP_H |
| 11 | #define _XT_DSCP_H | 11 | #define _XT_DSCP_H |
| 12 | 12 | ||
| 13 | #include <linux/types.h> | ||
| 14 | |||
| 13 | #define XT_DSCP_MASK 0xfc /* 11111100 */ | 15 | #define XT_DSCP_MASK 0xfc /* 11111100 */ |
| 14 | #define XT_DSCP_SHIFT 2 | 16 | #define XT_DSCP_SHIFT 2 |
| 15 | #define XT_DSCP_MAX 0x3f /* 00111111 */ | 17 | #define XT_DSCP_MAX 0x3f /* 00111111 */ |
| 16 | 18 | ||
| 17 | /* match info */ | 19 | /* match info */ |
| 18 | struct xt_dscp_info { | 20 | struct xt_dscp_info { |
| 19 | u_int8_t dscp; | 21 | __u8 dscp; |
| 20 | u_int8_t invert; | 22 | __u8 invert; |
| 21 | }; | 23 | }; |
| 22 | 24 | ||
| 23 | struct xt_tos_match_info { | 25 | struct xt_tos_match_info { |
| 24 | u_int8_t tos_mask; | 26 | __u8 tos_mask; |
| 25 | u_int8_t tos_value; | 27 | __u8 tos_value; |
| 26 | u_int8_t invert; | 28 | __u8 invert; |
| 27 | }; | 29 | }; |
| 28 | 30 | ||
| 29 | #endif /* _XT_DSCP_H */ | 31 | #endif /* _XT_DSCP_H */ |
diff --git a/include/linux/netfilter/xt_esp.h b/include/linux/netfilter/xt_esp.h index 9380fb1c27da..ef6fa4747d0a 100644 --- a/include/linux/netfilter/xt_esp.h +++ b/include/linux/netfilter/xt_esp.h | |||
| @@ -1,10 +1,12 @@ | |||
| 1 | #ifndef _XT_ESP_H | 1 | #ifndef _XT_ESP_H |
| 2 | #define _XT_ESP_H | 2 | #define _XT_ESP_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | struct xt_esp | 6 | struct xt_esp |
| 5 | { | 7 | { |
| 6 | u_int32_t spis[2]; /* Security Parameter Index */ | 8 | __u32 spis[2]; /* Security Parameter Index */ |
| 7 | u_int8_t invflags; /* Inverse flags */ | 9 | __u8 invflags; /* Inverse flags */ |
| 8 | }; | 10 | }; |
| 9 | 11 | ||
| 10 | /* Values for "invflags" field in struct xt_esp. */ | 12 | /* Values for "invflags" field in struct xt_esp. */ |
diff --git a/include/linux/netfilter/xt_hashlimit.h b/include/linux/netfilter/xt_hashlimit.h index 51b18d83b477..b1925b5925e9 100644 --- a/include/linux/netfilter/xt_hashlimit.h +++ b/include/linux/netfilter/xt_hashlimit.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_HASHLIMIT_H | 1 | #ifndef _XT_HASHLIMIT_H |
| 2 | #define _XT_HASHLIMIT_H | 2 | #define _XT_HASHLIMIT_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | /* timings are in milliseconds. */ | 6 | /* timings are in milliseconds. */ |
| 5 | #define XT_HASHLIMIT_SCALE 10000 | 7 | #define XT_HASHLIMIT_SCALE 10000 |
| 6 | /* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 | 8 | /* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 |
| @@ -18,15 +20,15 @@ enum { | |||
| 18 | }; | 20 | }; |
| 19 | 21 | ||
| 20 | struct hashlimit_cfg { | 22 | struct hashlimit_cfg { |
| 21 | u_int32_t mode; /* bitmask of XT_HASHLIMIT_HASH_* */ | 23 | __u32 mode; /* bitmask of XT_HASHLIMIT_HASH_* */ |
| 22 | u_int32_t avg; /* Average secs between packets * scale */ | 24 | __u32 avg; /* Average secs between packets * scale */ |
| 23 | u_int32_t burst; /* Period multiplier for upper limit. */ | 25 | __u32 burst; /* Period multiplier for upper limit. */ |
| 24 | 26 | ||
| 25 | /* user specified */ | 27 | /* user specified */ |
| 26 | u_int32_t size; /* how many buckets */ | 28 | __u32 size; /* how many buckets */ |
| 27 | u_int32_t max; /* max number of entries */ | 29 | __u32 max; /* max number of entries */ |
| 28 | u_int32_t gc_interval; /* gc interval */ | 30 | __u32 gc_interval; /* gc interval */ |
| 29 | u_int32_t expire; /* when do entries expire? */ | 31 | __u32 expire; /* when do entries expire? */ |
| 30 | }; | 32 | }; |
| 31 | 33 | ||
| 32 | struct xt_hashlimit_info { | 34 | struct xt_hashlimit_info { |
| @@ -42,17 +44,17 @@ struct xt_hashlimit_info { | |||
| 42 | }; | 44 | }; |
| 43 | 45 | ||
| 44 | struct hashlimit_cfg1 { | 46 | struct hashlimit_cfg1 { |
| 45 | u_int32_t mode; /* bitmask of XT_HASHLIMIT_HASH_* */ | 47 | __u32 mode; /* bitmask of XT_HASHLIMIT_HASH_* */ |
| 46 | u_int32_t avg; /* Average secs between packets * scale */ | 48 | __u32 avg; /* Average secs between packets * scale */ |
| 47 | u_int32_t burst; /* Period multiplier for upper limit. */ | 49 | __u32 burst; /* Period multiplier for upper limit. */ |
| 48 | 50 | ||
| 49 | /* user specified */ | 51 | /* user specified */ |
| 50 | u_int32_t size; /* how many buckets */ | 52 | __u32 size; /* how many buckets */ |
| 51 | u_int32_t max; /* max number of entries */ | 53 | __u32 max; /* max number of entries */ |
| 52 | u_int32_t gc_interval; /* gc interval */ | 54 | __u32 gc_interval; /* gc interval */ |
| 53 | u_int32_t expire; /* when do entries expire? */ | 55 | __u32 expire; /* when do entries expire? */ |
| 54 | 56 | ||
| 55 | u_int8_t srcmask, dstmask; | 57 | __u8 srcmask, dstmask; |
| 56 | }; | 58 | }; |
| 57 | 59 | ||
| 58 | struct xt_hashlimit_mtinfo1 { | 60 | struct xt_hashlimit_mtinfo1 { |
diff --git a/include/linux/netfilter/xt_iprange.h b/include/linux/netfilter/xt_iprange.h index a4299c7d3680..c1f21a779a45 100644 --- a/include/linux/netfilter/xt_iprange.h +++ b/include/linux/netfilter/xt_iprange.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _LINUX_NETFILTER_XT_IPRANGE_H | 1 | #ifndef _LINUX_NETFILTER_XT_IPRANGE_H |
| 2 | #define _LINUX_NETFILTER_XT_IPRANGE_H 1 | 2 | #define _LINUX_NETFILTER_XT_IPRANGE_H 1 |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | enum { | 6 | enum { |
| 5 | IPRANGE_SRC = 1 << 0, /* match source IP address */ | 7 | IPRANGE_SRC = 1 << 0, /* match source IP address */ |
| 6 | IPRANGE_DST = 1 << 1, /* match destination IP address */ | 8 | IPRANGE_DST = 1 << 1, /* match destination IP address */ |
| @@ -11,7 +13,7 @@ enum { | |||
| 11 | struct xt_iprange_mtinfo { | 13 | struct xt_iprange_mtinfo { |
| 12 | union nf_inet_addr src_min, src_max; | 14 | union nf_inet_addr src_min, src_max; |
| 13 | union nf_inet_addr dst_min, dst_max; | 15 | union nf_inet_addr dst_min, dst_max; |
| 14 | u_int8_t flags; | 16 | __u8 flags; |
| 15 | }; | 17 | }; |
| 16 | 18 | ||
| 17 | #endif /* _LINUX_NETFILTER_XT_IPRANGE_H */ | 19 | #endif /* _LINUX_NETFILTER_XT_IPRANGE_H */ |
diff --git a/include/linux/netfilter/xt_length.h b/include/linux/netfilter/xt_length.h index 7c2b439f73fe..b82ed7c4b1e0 100644 --- a/include/linux/netfilter/xt_length.h +++ b/include/linux/netfilter/xt_length.h | |||
| @@ -1,9 +1,11 @@ | |||
| 1 | #ifndef _XT_LENGTH_H | 1 | #ifndef _XT_LENGTH_H |
| 2 | #define _XT_LENGTH_H | 2 | #define _XT_LENGTH_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | struct xt_length_info { | 6 | struct xt_length_info { |
| 5 | u_int16_t min, max; | 7 | __u16 min, max; |
| 6 | u_int8_t invert; | 8 | __u8 invert; |
| 7 | }; | 9 | }; |
| 8 | 10 | ||
| 9 | #endif /*_XT_LENGTH_H*/ | 11 | #endif /*_XT_LENGTH_H*/ |
diff --git a/include/linux/netfilter/xt_limit.h b/include/linux/netfilter/xt_limit.h index b3ce65375ecb..bb47fc4d2ade 100644 --- a/include/linux/netfilter/xt_limit.h +++ b/include/linux/netfilter/xt_limit.h | |||
| @@ -1,21 +1,24 @@ | |||
| 1 | #ifndef _XT_RATE_H | 1 | #ifndef _XT_RATE_H |
| 2 | #define _XT_RATE_H | 2 | #define _XT_RATE_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | /* timings are in milliseconds. */ | 6 | /* timings are in milliseconds. */ |
| 5 | #define XT_LIMIT_SCALE 10000 | 7 | #define XT_LIMIT_SCALE 10000 |
| 6 | 8 | ||
| 9 | struct xt_limit_priv; | ||
| 10 | |||
| 7 | /* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 | 11 | /* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 |
| 8 | seconds, or one every 59 hours. */ | 12 | seconds, or one every 59 hours. */ |
| 9 | struct xt_rateinfo { | 13 | struct xt_rateinfo { |
| 10 | u_int32_t avg; /* Average secs between packets * scale */ | 14 | __u32 avg; /* Average secs between packets * scale */ |
| 11 | u_int32_t burst; /* Period multiplier for upper limit. */ | 15 | __u32 burst; /* Period multiplier for upper limit. */ |
| 12 | 16 | ||
| 13 | /* Used internally by the kernel */ | 17 | /* Used internally by the kernel */ |
| 14 | unsigned long prev; | 18 | unsigned long prev; /* moved to xt_limit_priv */ |
| 15 | u_int32_t credit; | 19 | __u32 credit; /* moved to xt_limit_priv */ |
| 16 | u_int32_t credit_cap, cost; | 20 | __u32 credit_cap, cost; |
| 17 | 21 | ||
| 18 | /* Ugly, ugly fucker. */ | 22 | struct xt_limit_priv *master; |
| 19 | struct xt_rateinfo *master; | ||
| 20 | }; | 23 | }; |
| 21 | #endif /*_XT_RATE_H*/ | 24 | #endif /*_XT_RATE_H*/ |
diff --git a/include/linux/netfilter/xt_mark.h b/include/linux/netfilter/xt_mark.h index fae74bc3f34e..6fa460a3cc29 100644 --- a/include/linux/netfilter/xt_mark.h +++ b/include/linux/netfilter/xt_mark.h | |||
| @@ -1,14 +1,16 @@ | |||
| 1 | #ifndef _XT_MARK_H | 1 | #ifndef _XT_MARK_H |
| 2 | #define _XT_MARK_H | 2 | #define _XT_MARK_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | struct xt_mark_info { | 6 | struct xt_mark_info { |
| 5 | unsigned long mark, mask; | 7 | unsigned long mark, mask; |
| 6 | u_int8_t invert; | 8 | __u8 invert; |
| 7 | }; | 9 | }; |
| 8 | 10 | ||
| 9 | struct xt_mark_mtinfo1 { | 11 | struct xt_mark_mtinfo1 { |
| 10 | u_int32_t mark, mask; | 12 | __u32 mark, mask; |
| 11 | u_int8_t invert; | 13 | __u8 invert; |
| 12 | }; | 14 | }; |
| 13 | 15 | ||
| 14 | #endif /*_XT_MARK_H*/ | 16 | #endif /*_XT_MARK_H*/ |
diff --git a/include/linux/netfilter/xt_multiport.h b/include/linux/netfilter/xt_multiport.h index d49ee4183710..185db499fcbc 100644 --- a/include/linux/netfilter/xt_multiport.h +++ b/include/linux/netfilter/xt_multiport.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_MULTIPORT_H | 1 | #ifndef _XT_MULTIPORT_H |
| 2 | #define _XT_MULTIPORT_H | 2 | #define _XT_MULTIPORT_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | enum xt_multiport_flags | 6 | enum xt_multiport_flags |
| 5 | { | 7 | { |
| 6 | XT_MULTIPORT_SOURCE, | 8 | XT_MULTIPORT_SOURCE, |
| @@ -13,18 +15,18 @@ enum xt_multiport_flags | |||
| 13 | /* Must fit inside union xt_matchinfo: 16 bytes */ | 15 | /* Must fit inside union xt_matchinfo: 16 bytes */ |
| 14 | struct xt_multiport | 16 | struct xt_multiport |
| 15 | { | 17 | { |
| 16 | u_int8_t flags; /* Type of comparison */ | 18 | __u8 flags; /* Type of comparison */ |
| 17 | u_int8_t count; /* Number of ports */ | 19 | __u8 count; /* Number of ports */ |
| 18 | u_int16_t ports[XT_MULTI_PORTS]; /* Ports */ | 20 | __u16 ports[XT_MULTI_PORTS]; /* Ports */ |
| 19 | }; | 21 | }; |
| 20 | 22 | ||
| 21 | struct xt_multiport_v1 | 23 | struct xt_multiport_v1 |
| 22 | { | 24 | { |
| 23 | u_int8_t flags; /* Type of comparison */ | 25 | __u8 flags; /* Type of comparison */ |
| 24 | u_int8_t count; /* Number of ports */ | 26 | __u8 count; /* Number of ports */ |
| 25 | u_int16_t ports[XT_MULTI_PORTS]; /* Ports */ | 27 | __u16 ports[XT_MULTI_PORTS]; /* Ports */ |
| 26 | u_int8_t pflags[XT_MULTI_PORTS]; /* Port flags */ | 28 | __u8 pflags[XT_MULTI_PORTS]; /* Port flags */ |
| 27 | u_int8_t invert; /* Invert flag */ | 29 | __u8 invert; /* Invert flag */ |
| 28 | }; | 30 | }; |
| 29 | 31 | ||
| 30 | #endif /*_XT_MULTIPORT_H*/ | 32 | #endif /*_XT_MULTIPORT_H*/ |
diff --git a/include/linux/netfilter/xt_owner.h b/include/linux/netfilter/xt_owner.h index c84e52cfe415..2081761714b5 100644 --- a/include/linux/netfilter/xt_owner.h +++ b/include/linux/netfilter/xt_owner.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_OWNER_MATCH_H | 1 | #ifndef _XT_OWNER_MATCH_H |
| 2 | #define _XT_OWNER_MATCH_H | 2 | #define _XT_OWNER_MATCH_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | enum { | 6 | enum { |
| 5 | XT_OWNER_UID = 1 << 0, | 7 | XT_OWNER_UID = 1 << 0, |
| 6 | XT_OWNER_GID = 1 << 1, | 8 | XT_OWNER_GID = 1 << 1, |
| @@ -8,9 +10,9 @@ enum { | |||
| 8 | }; | 10 | }; |
| 9 | 11 | ||
| 10 | struct xt_owner_match_info { | 12 | struct xt_owner_match_info { |
| 11 | u_int32_t uid_min, uid_max; | 13 | __u32 uid_min, uid_max; |
| 12 | u_int32_t gid_min, gid_max; | 14 | __u32 gid_min, gid_max; |
| 13 | u_int8_t match, invert; | 15 | __u8 match, invert; |
| 14 | }; | 16 | }; |
| 15 | 17 | ||
| 16 | #endif /* _XT_OWNER_MATCH_H */ | 18 | #endif /* _XT_OWNER_MATCH_H */ |
diff --git a/include/linux/netfilter/xt_physdev.h b/include/linux/netfilter/xt_physdev.h index 25a7a1815b5b..8555e399886d 100644 --- a/include/linux/netfilter/xt_physdev.h +++ b/include/linux/netfilter/xt_physdev.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_PHYSDEV_H | 1 | #ifndef _XT_PHYSDEV_H |
| 2 | #define _XT_PHYSDEV_H | 2 | #define _XT_PHYSDEV_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | #ifdef __KERNEL__ | 6 | #ifdef __KERNEL__ |
| 5 | #include <linux/if.h> | 7 | #include <linux/if.h> |
| 6 | #endif | 8 | #endif |
| @@ -17,8 +19,8 @@ struct xt_physdev_info { | |||
| 17 | char in_mask[IFNAMSIZ]; | 19 | char in_mask[IFNAMSIZ]; |
| 18 | char physoutdev[IFNAMSIZ]; | 20 | char physoutdev[IFNAMSIZ]; |
| 19 | char out_mask[IFNAMSIZ]; | 21 | char out_mask[IFNAMSIZ]; |
| 20 | u_int8_t invert; | 22 | __u8 invert; |
| 21 | u_int8_t bitmask; | 23 | __u8 bitmask; |
| 22 | }; | 24 | }; |
| 23 | 25 | ||
| 24 | #endif /*_XT_PHYSDEV_H*/ | 26 | #endif /*_XT_PHYSDEV_H*/ |
diff --git a/include/linux/netfilter/xt_policy.h b/include/linux/netfilter/xt_policy.h index 053d8cc65464..7bb64e7c853d 100644 --- a/include/linux/netfilter/xt_policy.h +++ b/include/linux/netfilter/xt_policy.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_POLICY_H | 1 | #ifndef _XT_POLICY_H |
| 2 | #define _XT_POLICY_H | 2 | #define _XT_POLICY_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | #define XT_POLICY_MAX_ELEM 4 | 6 | #define XT_POLICY_MAX_ELEM 4 |
| 5 | 7 | ||
| 6 | enum xt_policy_flags | 8 | enum xt_policy_flags |
| @@ -19,7 +21,7 @@ enum xt_policy_modes | |||
| 19 | 21 | ||
| 20 | struct xt_policy_spec | 22 | struct xt_policy_spec |
| 21 | { | 23 | { |
| 22 | u_int8_t saddr:1, | 24 | __u8 saddr:1, |
| 23 | daddr:1, | 25 | daddr:1, |
| 24 | proto:1, | 26 | proto:1, |
| 25 | mode:1, | 27 | mode:1, |
| @@ -55,9 +57,9 @@ struct xt_policy_elem | |||
| 55 | #endif | 57 | #endif |
| 56 | }; | 58 | }; |
| 57 | __be32 spi; | 59 | __be32 spi; |
| 58 | u_int32_t reqid; | 60 | __u32 reqid; |
| 59 | u_int8_t proto; | 61 | __u8 proto; |
| 60 | u_int8_t mode; | 62 | __u8 mode; |
| 61 | 63 | ||
| 62 | struct xt_policy_spec match; | 64 | struct xt_policy_spec match; |
| 63 | struct xt_policy_spec invert; | 65 | struct xt_policy_spec invert; |
| @@ -66,8 +68,8 @@ struct xt_policy_elem | |||
| 66 | struct xt_policy_info | 68 | struct xt_policy_info |
| 67 | { | 69 | { |
| 68 | struct xt_policy_elem pol[XT_POLICY_MAX_ELEM]; | 70 | struct xt_policy_elem pol[XT_POLICY_MAX_ELEM]; |
| 69 | u_int16_t flags; | 71 | __u16 flags; |
| 70 | u_int16_t len; | 72 | __u16 len; |
| 71 | }; | 73 | }; |
| 72 | 74 | ||
| 73 | #endif /* _XT_POLICY_H */ | 75 | #endif /* _XT_POLICY_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_rateest.h b/include/linux/netfilter/xt_rateest.h index 2010cb74250f..d40a6196842a 100644 --- a/include/linux/netfilter/xt_rateest.h +++ b/include/linux/netfilter/xt_rateest.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_RATEEST_MATCH_H | 1 | #ifndef _XT_RATEEST_MATCH_H |
| 2 | #define _XT_RATEEST_MATCH_H | 2 | #define _XT_RATEEST_MATCH_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | enum xt_rateest_match_flags { | 6 | enum xt_rateest_match_flags { |
| 5 | XT_RATEEST_MATCH_INVERT = 1<<0, | 7 | XT_RATEEST_MATCH_INVERT = 1<<0, |
| 6 | XT_RATEEST_MATCH_ABS = 1<<1, | 8 | XT_RATEEST_MATCH_ABS = 1<<1, |
| @@ -20,12 +22,12 @@ enum xt_rateest_match_mode { | |||
| 20 | struct xt_rateest_match_info { | 22 | struct xt_rateest_match_info { |
| 21 | char name1[IFNAMSIZ]; | 23 | char name1[IFNAMSIZ]; |
| 22 | char name2[IFNAMSIZ]; | 24 | char name2[IFNAMSIZ]; |
| 23 | u_int16_t flags; | 25 | __u16 flags; |
| 24 | u_int16_t mode; | 26 | __u16 mode; |
| 25 | u_int32_t bps1; | 27 | __u32 bps1; |
| 26 | u_int32_t pps1; | 28 | __u32 pps1; |
| 27 | u_int32_t bps2; | 29 | __u32 bps2; |
| 28 | u_int32_t pps2; | 30 | __u32 pps2; |
| 29 | 31 | ||
| 30 | /* Used internally by the kernel */ | 32 | /* Used internally by the kernel */ |
| 31 | struct xt_rateest *est1 __attribute__((aligned(8))); | 33 | struct xt_rateest *est1 __attribute__((aligned(8))); |
diff --git a/include/linux/netfilter/xt_realm.h b/include/linux/netfilter/xt_realm.h index 220e87245716..d4a82ee56a02 100644 --- a/include/linux/netfilter/xt_realm.h +++ b/include/linux/netfilter/xt_realm.h | |||
| @@ -1,10 +1,12 @@ | |||
| 1 | #ifndef _XT_REALM_H | 1 | #ifndef _XT_REALM_H |
| 2 | #define _XT_REALM_H | 2 | #define _XT_REALM_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | struct xt_realm_info { | 6 | struct xt_realm_info { |
| 5 | u_int32_t id; | 7 | __u32 id; |
| 6 | u_int32_t mask; | 8 | __u32 mask; |
| 7 | u_int8_t invert; | 9 | __u8 invert; |
| 8 | }; | 10 | }; |
| 9 | 11 | ||
| 10 | #endif /* _XT_REALM_H */ | 12 | #endif /* _XT_REALM_H */ |
diff --git a/include/linux/netfilter/xt_recent.h b/include/linux/netfilter/xt_recent.h index 5cfeb81c6794..d2c276609925 100644 --- a/include/linux/netfilter/xt_recent.h +++ b/include/linux/netfilter/xt_recent.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _LINUX_NETFILTER_XT_RECENT_H | 1 | #ifndef _LINUX_NETFILTER_XT_RECENT_H |
| 2 | #define _LINUX_NETFILTER_XT_RECENT_H 1 | 2 | #define _LINUX_NETFILTER_XT_RECENT_H 1 |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | enum { | 6 | enum { |
| 5 | XT_RECENT_CHECK = 1 << 0, | 7 | XT_RECENT_CHECK = 1 << 0, |
| 6 | XT_RECENT_SET = 1 << 1, | 8 | XT_RECENT_SET = 1 << 1, |
| @@ -15,12 +17,12 @@ enum { | |||
| 15 | }; | 17 | }; |
| 16 | 18 | ||
| 17 | struct xt_recent_mtinfo { | 19 | struct xt_recent_mtinfo { |
| 18 | u_int32_t seconds; | 20 | __u32 seconds; |
| 19 | u_int32_t hit_count; | 21 | __u32 hit_count; |
| 20 | u_int8_t check_set; | 22 | __u8 check_set; |
| 21 | u_int8_t invert; | 23 | __u8 invert; |
| 22 | char name[XT_RECENT_NAME_LEN]; | 24 | char name[XT_RECENT_NAME_LEN]; |
| 23 | u_int8_t side; | 25 | __u8 side; |
| 24 | }; | 26 | }; |
| 25 | 27 | ||
| 26 | #endif /* _LINUX_NETFILTER_XT_RECENT_H */ | 28 | #endif /* _LINUX_NETFILTER_XT_RECENT_H */ |
diff --git a/include/linux/netfilter/xt_sctp.h b/include/linux/netfilter/xt_sctp.h index 32000ba6ecef..29287be696a2 100644 --- a/include/linux/netfilter/xt_sctp.h +++ b/include/linux/netfilter/xt_sctp.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_SCTP_H_ | 1 | #ifndef _XT_SCTP_H_ |
| 2 | #define _XT_SCTP_H_ | 2 | #define _XT_SCTP_H_ |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | #define XT_SCTP_SRC_PORTS 0x01 | 6 | #define XT_SCTP_SRC_PORTS 0x01 |
| 5 | #define XT_SCTP_DEST_PORTS 0x02 | 7 | #define XT_SCTP_DEST_PORTS 0x02 |
| 6 | #define XT_SCTP_CHUNK_TYPES 0x04 | 8 | #define XT_SCTP_CHUNK_TYPES 0x04 |
| @@ -8,49 +10,49 @@ | |||
| 8 | #define XT_SCTP_VALID_FLAGS 0x07 | 10 | #define XT_SCTP_VALID_FLAGS 0x07 |
| 9 | 11 | ||
| 10 | struct xt_sctp_flag_info { | 12 | struct xt_sctp_flag_info { |
| 11 | u_int8_t chunktype; | 13 | __u8 chunktype; |
| 12 | u_int8_t flag; | 14 | __u8 flag; |
| 13 | u_int8_t flag_mask; | 15 | __u8 flag_mask; |
| 14 | }; | 16 | }; |
| 15 | 17 | ||
| 16 | #define XT_NUM_SCTP_FLAGS 4 | 18 | #define XT_NUM_SCTP_FLAGS 4 |
| 17 | 19 | ||
| 18 | struct xt_sctp_info { | 20 | struct xt_sctp_info { |
| 19 | u_int16_t dpts[2]; /* Min, Max */ | 21 | __u16 dpts[2]; /* Min, Max */ |
| 20 | u_int16_t spts[2]; /* Min, Max */ | 22 | __u16 spts[2]; /* Min, Max */ |
| 21 | 23 | ||
| 22 | u_int32_t chunkmap[256 / sizeof (u_int32_t)]; /* Bit mask of chunks to be matched according to RFC 2960 */ | 24 | __u32 chunkmap[256 / sizeof (__u32)]; /* Bit mask of chunks to be matched according to RFC 2960 */ |
| 23 | 25 | ||
| 24 | #define SCTP_CHUNK_MATCH_ANY 0x01 /* Match if any of the chunk types are present */ | 26 | #define SCTP_CHUNK_MATCH_ANY 0x01 /* Match if any of the chunk types are present */ |
| 25 | #define SCTP_CHUNK_MATCH_ALL 0x02 /* Match if all of the chunk types are present */ | 27 | #define SCTP_CHUNK_MATCH_ALL 0x02 /* Match if all of the chunk types are present */ |
| 26 | #define SCTP_CHUNK_MATCH_ONLY 0x04 /* Match if these are the only chunk types present */ | 28 | #define SCTP_CHUNK_MATCH_ONLY 0x04 /* Match if these are the only chunk types present */ |
| 27 | 29 | ||
| 28 | u_int32_t chunk_match_type; | 30 | __u32 chunk_match_type; |
| 29 | struct xt_sctp_flag_info flag_info[XT_NUM_SCTP_FLAGS]; | 31 | struct xt_sctp_flag_info flag_info[XT_NUM_SCTP_FLAGS]; |
| 30 | int flag_count; | 32 | int flag_count; |
| 31 | 33 | ||
| 32 | u_int32_t flags; | 34 | __u32 flags; |
| 33 | u_int32_t invflags; | 35 | __u32 invflags; |
| 34 | }; | 36 | }; |
| 35 | 37 | ||
| 36 | #define bytes(type) (sizeof(type) * 8) | 38 | #define bytes(type) (sizeof(type) * 8) |
| 37 | 39 | ||
| 38 | #define SCTP_CHUNKMAP_SET(chunkmap, type) \ | 40 | #define SCTP_CHUNKMAP_SET(chunkmap, type) \ |
| 39 | do { \ | 41 | do { \ |
| 40 | (chunkmap)[type / bytes(u_int32_t)] |= \ | 42 | (chunkmap)[type / bytes(__u32)] |= \ |
| 41 | 1 << (type % bytes(u_int32_t)); \ | 43 | 1 << (type % bytes(__u32)); \ |
| 42 | } while (0) | 44 | } while (0) |
| 43 | 45 | ||
| 44 | #define SCTP_CHUNKMAP_CLEAR(chunkmap, type) \ | 46 | #define SCTP_CHUNKMAP_CLEAR(chunkmap, type) \ |
| 45 | do { \ | 47 | do { \ |
| 46 | (chunkmap)[type / bytes(u_int32_t)] &= \ | 48 | (chunkmap)[type / bytes(__u32)] &= \ |
| 47 | ~(1 << (type % bytes(u_int32_t))); \ | 49 | ~(1 << (type % bytes(__u32))); \ |
| 48 | } while (0) | 50 | } while (0) |
| 49 | 51 | ||
| 50 | #define SCTP_CHUNKMAP_IS_SET(chunkmap, type) \ | 52 | #define SCTP_CHUNKMAP_IS_SET(chunkmap, type) \ |
| 51 | ({ \ | 53 | ({ \ |
| 52 | ((chunkmap)[type / bytes (u_int32_t)] & \ | 54 | ((chunkmap)[type / bytes (__u32)] & \ |
| 53 | (1 << (type % bytes (u_int32_t)))) ? 1: 0; \ | 55 | (1 << (type % bytes (__u32)))) ? 1: 0; \ |
| 54 | }) | 56 | }) |
| 55 | 57 | ||
| 56 | #define SCTP_CHUNKMAP_RESET(chunkmap) \ | 58 | #define SCTP_CHUNKMAP_RESET(chunkmap) \ |
| @@ -65,7 +67,7 @@ struct xt_sctp_info { | |||
| 65 | #define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \ | 67 | #define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \ |
| 66 | __sctp_chunkmap_is_clear((chunkmap), ARRAY_SIZE(chunkmap)) | 68 | __sctp_chunkmap_is_clear((chunkmap), ARRAY_SIZE(chunkmap)) |
| 67 | static inline bool | 69 | static inline bool |
| 68 | __sctp_chunkmap_is_clear(const u_int32_t *chunkmap, unsigned int n) | 70 | __sctp_chunkmap_is_clear(const __u32 *chunkmap, unsigned int n) |
| 69 | { | 71 | { |
| 70 | unsigned int i; | 72 | unsigned int i; |
| 71 | for (i = 0; i < n; ++i) | 73 | for (i = 0; i < n; ++i) |
| @@ -77,7 +79,7 @@ __sctp_chunkmap_is_clear(const u_int32_t *chunkmap, unsigned int n) | |||
| 77 | #define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \ | 79 | #define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \ |
| 78 | __sctp_chunkmap_is_all_set((chunkmap), ARRAY_SIZE(chunkmap)) | 80 | __sctp_chunkmap_is_all_set((chunkmap), ARRAY_SIZE(chunkmap)) |
| 79 | static inline bool | 81 | static inline bool |
| 80 | __sctp_chunkmap_is_all_set(const u_int32_t *chunkmap, unsigned int n) | 82 | __sctp_chunkmap_is_all_set(const __u32 *chunkmap, unsigned int n) |
| 81 | { | 83 | { |
| 82 | unsigned int i; | 84 | unsigned int i; |
| 83 | for (i = 0; i < n; ++i) | 85 | for (i = 0; i < n; ++i) |
diff --git a/include/linux/netfilter/xt_statistic.h b/include/linux/netfilter/xt_statistic.h index 3d38bc975048..4e983ef0c968 100644 --- a/include/linux/netfilter/xt_statistic.h +++ b/include/linux/netfilter/xt_statistic.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_STATISTIC_H | 1 | #ifndef _XT_STATISTIC_H |
| 2 | #define _XT_STATISTIC_H | 2 | #define _XT_STATISTIC_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | enum xt_statistic_mode { | 6 | enum xt_statistic_mode { |
| 5 | XT_STATISTIC_MODE_RANDOM, | 7 | XT_STATISTIC_MODE_RANDOM, |
| 6 | XT_STATISTIC_MODE_NTH, | 8 | XT_STATISTIC_MODE_NTH, |
| @@ -13,21 +15,22 @@ enum xt_statistic_flags { | |||
| 13 | }; | 15 | }; |
| 14 | #define XT_STATISTIC_MASK 0x1 | 16 | #define XT_STATISTIC_MASK 0x1 |
| 15 | 17 | ||
| 18 | struct xt_statistic_priv; | ||
| 19 | |||
| 16 | struct xt_statistic_info { | 20 | struct xt_statistic_info { |
| 17 | u_int16_t mode; | 21 | __u16 mode; |
| 18 | u_int16_t flags; | 22 | __u16 flags; |
| 19 | union { | 23 | union { |
| 20 | struct { | 24 | struct { |
| 21 | u_int32_t probability; | 25 | __u32 probability; |
| 22 | } random; | 26 | } random; |
| 23 | struct { | 27 | struct { |
| 24 | u_int32_t every; | 28 | __u32 every; |
| 25 | u_int32_t packet; | 29 | __u32 packet; |
| 26 | /* Used internally by the kernel */ | 30 | __u32 count; /* unused */ |
| 27 | u_int32_t count; | ||
| 28 | } nth; | 31 | } nth; |
| 29 | } u; | 32 | } u; |
| 30 | struct xt_statistic_info *master __attribute__((aligned(8))); | 33 | struct xt_statistic_priv *master __attribute__((aligned(8))); |
| 31 | }; | 34 | }; |
| 32 | 35 | ||
| 33 | #endif /* _XT_STATISTIC_H */ | 36 | #endif /* _XT_STATISTIC_H */ |
diff --git a/include/linux/netfilter/xt_string.h b/include/linux/netfilter/xt_string.h index 8a6ba7bbef9f..ecbb95fc89ed 100644 --- a/include/linux/netfilter/xt_string.h +++ b/include/linux/netfilter/xt_string.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _XT_STRING_H | 1 | #ifndef _XT_STRING_H |
| 2 | #define _XT_STRING_H | 2 | #define _XT_STRING_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | #define XT_STRING_MAX_PATTERN_SIZE 128 | 6 | #define XT_STRING_MAX_PATTERN_SIZE 128 |
| 5 | #define XT_STRING_MAX_ALGO_NAME_SIZE 16 | 7 | #define XT_STRING_MAX_ALGO_NAME_SIZE 16 |
| 6 | 8 | ||
| @@ -11,18 +13,18 @@ enum { | |||
| 11 | 13 | ||
| 12 | struct xt_string_info | 14 | struct xt_string_info |
| 13 | { | 15 | { |
| 14 | u_int16_t from_offset; | 16 | __u16 from_offset; |
| 15 | u_int16_t to_offset; | 17 | __u16 to_offset; |
| 16 | char algo[XT_STRING_MAX_ALGO_NAME_SIZE]; | 18 | char algo[XT_STRING_MAX_ALGO_NAME_SIZE]; |
| 17 | char pattern[XT_STRING_MAX_PATTERN_SIZE]; | 19 | char pattern[XT_STRING_MAX_PATTERN_SIZE]; |
| 18 | u_int8_t patlen; | 20 | __u8 patlen; |
| 19 | union { | 21 | union { |
| 20 | struct { | 22 | struct { |
| 21 | u_int8_t invert; | 23 | __u8 invert; |
| 22 | } v0; | 24 | } v0; |
| 23 | 25 | ||
| 24 | struct { | 26 | struct { |
| 25 | u_int8_t flags; | 27 | __u8 flags; |
| 26 | } v1; | 28 | } v1; |
| 27 | } u; | 29 | } u; |
| 28 | 30 | ||
diff --git a/include/linux/netfilter/xt_tcpmss.h b/include/linux/netfilter/xt_tcpmss.h index e03274c4c790..fbac56b9e667 100644 --- a/include/linux/netfilter/xt_tcpmss.h +++ b/include/linux/netfilter/xt_tcpmss.h | |||
| @@ -1,9 +1,11 @@ | |||
| 1 | #ifndef _XT_TCPMSS_MATCH_H | 1 | #ifndef _XT_TCPMSS_MATCH_H |
| 2 | #define _XT_TCPMSS_MATCH_H | 2 | #define _XT_TCPMSS_MATCH_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | struct xt_tcpmss_match_info { | 6 | struct xt_tcpmss_match_info { |
| 5 | u_int16_t mss_min, mss_max; | 7 | __u16 mss_min, mss_max; |
| 6 | u_int8_t invert; | 8 | __u8 invert; |
| 7 | }; | 9 | }; |
| 8 | 10 | ||
| 9 | #endif /*_XT_TCPMSS_MATCH_H*/ | 11 | #endif /*_XT_TCPMSS_MATCH_H*/ |
diff --git a/include/linux/netfilter/xt_tcpudp.h b/include/linux/netfilter/xt_tcpudp.h index 78bc65f11adf..a490a0bc1d29 100644 --- a/include/linux/netfilter/xt_tcpudp.h +++ b/include/linux/netfilter/xt_tcpudp.h | |||
| @@ -1,15 +1,17 @@ | |||
| 1 | #ifndef _XT_TCPUDP_H | 1 | #ifndef _XT_TCPUDP_H |
| 2 | #define _XT_TCPUDP_H | 2 | #define _XT_TCPUDP_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | /* TCP matching stuff */ | 6 | /* TCP matching stuff */ |
| 5 | struct xt_tcp | 7 | struct xt_tcp |
| 6 | { | 8 | { |
| 7 | u_int16_t spts[2]; /* Source port range. */ | 9 | __u16 spts[2]; /* Source port range. */ |
| 8 | u_int16_t dpts[2]; /* Destination port range. */ | 10 | __u16 dpts[2]; /* Destination port range. */ |
| 9 | u_int8_t option; /* TCP Option iff non-zero*/ | 11 | __u8 option; /* TCP Option iff non-zero*/ |
| 10 | u_int8_t flg_mask; /* TCP flags mask byte */ | 12 | __u8 flg_mask; /* TCP flags mask byte */ |
| 11 | u_int8_t flg_cmp; /* TCP flags compare byte */ | 13 | __u8 flg_cmp; /* TCP flags compare byte */ |
| 12 | u_int8_t invflags; /* Inverse flags */ | 14 | __u8 invflags; /* Inverse flags */ |
| 13 | }; | 15 | }; |
| 14 | 16 | ||
| 15 | /* Values for "inv" field in struct ipt_tcp. */ | 17 | /* Values for "inv" field in struct ipt_tcp. */ |
| @@ -22,9 +24,9 @@ struct xt_tcp | |||
| 22 | /* UDP matching stuff */ | 24 | /* UDP matching stuff */ |
| 23 | struct xt_udp | 25 | struct xt_udp |
| 24 | { | 26 | { |
| 25 | u_int16_t spts[2]; /* Source port range. */ | 27 | __u16 spts[2]; /* Source port range. */ |
| 26 | u_int16_t dpts[2]; /* Destination port range. */ | 28 | __u16 dpts[2]; /* Destination port range. */ |
| 27 | u_int8_t invflags; /* Inverse flags */ | 29 | __u8 invflags; /* Inverse flags */ |
| 28 | }; | 30 | }; |
| 29 | 31 | ||
| 30 | /* Values for "invflags" field in struct ipt_udp. */ | 32 | /* Values for "invflags" field in struct ipt_udp. */ |
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_ipv4/ipt_owner.h b/include/linux/netfilter_ipv4/ipt_owner.h index 92f4bdac54ef..a78445be9992 100644 --- a/include/linux/netfilter_ipv4/ipt_owner.h +++ b/include/linux/netfilter_ipv4/ipt_owner.h | |||
| @@ -9,10 +9,10 @@ | |||
| 9 | #define IPT_OWNER_COMM 0x10 | 9 | #define IPT_OWNER_COMM 0x10 |
| 10 | 10 | ||
| 11 | struct ipt_owner_info { | 11 | struct ipt_owner_info { |
| 12 | uid_t uid; | 12 | __kernel_uid32_t uid; |
| 13 | gid_t gid; | 13 | __kernel_gid32_t gid; |
| 14 | pid_t pid; | 14 | __kernel_pid_t pid; |
| 15 | pid_t sid; | 15 | __kernel_pid_t sid; |
| 16 | char comm[16]; | 16 | char comm[16]; |
| 17 | u_int8_t match, invert; /* flags */ | 17 | u_int8_t match, invert; /* flags */ |
| 18 | }; | 18 | }; |
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/netfilter_ipv6/ip6t_owner.h b/include/linux/netfilter_ipv6/ip6t_owner.h index 19937da3d101..ec5cc7a38c42 100644 --- a/include/linux/netfilter_ipv6/ip6t_owner.h +++ b/include/linux/netfilter_ipv6/ip6t_owner.h | |||
| @@ -8,10 +8,10 @@ | |||
| 8 | #define IP6T_OWNER_SID 0x08 | 8 | #define IP6T_OWNER_SID 0x08 |
| 9 | 9 | ||
| 10 | struct ip6t_owner_info { | 10 | struct ip6t_owner_info { |
| 11 | uid_t uid; | 11 | __kernel_uid32_t uid; |
| 12 | gid_t gid; | 12 | __kernel_gid32_t gid; |
| 13 | pid_t pid; | 13 | __kernel_pid_t pid; |
| 14 | pid_t sid; | 14 | __kernel_pid_t sid; |
| 15 | u_int8_t match, invert; /* flags */ | 15 | u_int8_t match, invert; /* flags */ |
| 16 | }; | 16 | }; |
| 17 | 17 | ||
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/nfs_fs.h b/include/linux/nfs_fs.h index db867b04ac3c..8cc8807f77d6 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
| @@ -415,7 +415,7 @@ extern const struct inode_operations nfs_dir_inode_operations; | |||
| 415 | extern const struct inode_operations nfs3_dir_inode_operations; | 415 | extern const struct inode_operations nfs3_dir_inode_operations; |
| 416 | #endif /* CONFIG_NFS_V3 */ | 416 | #endif /* CONFIG_NFS_V3 */ |
| 417 | extern const struct file_operations nfs_dir_operations; | 417 | extern const struct file_operations nfs_dir_operations; |
| 418 | extern struct dentry_operations nfs_dentry_operations; | 418 | extern const struct dentry_operations nfs_dentry_operations; |
| 419 | 419 | ||
| 420 | extern void nfs_force_lookup_revalidate(struct inode *dir); | 420 | extern void nfs_force_lookup_revalidate(struct inode *dir); |
| 421 | extern int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fh, struct nfs_fattr *fattr); | 421 | extern int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fh, struct nfs_fattr *fattr); |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index a550b528319f..43a713fce11c 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
| @@ -406,6 +406,8 @@ struct nfs3_setaclargs { | |||
| 406 | int mask; | 406 | int mask; |
| 407 | struct posix_acl * acl_access; | 407 | struct posix_acl * acl_access; |
| 408 | struct posix_acl * acl_default; | 408 | struct posix_acl * acl_default; |
| 409 | size_t len; | ||
| 410 | unsigned int npages; | ||
| 409 | struct page ** pages; | 411 | struct page ** pages; |
| 410 | }; | 412 | }; |
| 411 | 413 | ||
| @@ -783,7 +785,7 @@ struct nfs_access_entry; | |||
| 783 | */ | 785 | */ |
| 784 | struct nfs_rpc_ops { | 786 | struct nfs_rpc_ops { |
| 785 | u32 version; /* Protocol version */ | 787 | u32 version; /* Protocol version */ |
| 786 | struct dentry_operations *dentry_ops; | 788 | const struct dentry_operations *dentry_ops; |
| 787 | const struct inode_operations *dir_inode_ops; | 789 | const struct inode_operations *dir_inode_ops; |
| 788 | const struct inode_operations *file_inode_ops; | 790 | const struct inode_operations *file_inode_ops; |
| 789 | 791 | ||
diff --git a/include/linux/nfsacl.h b/include/linux/nfsacl.h index 54487a99beb8..43011b69297c 100644 --- a/include/linux/nfsacl.h +++ b/include/linux/nfsacl.h | |||
| @@ -37,6 +37,9 @@ | |||
| 37 | #define NFSACL_MAXPAGES ((2*(8+12*NFS_ACL_MAX_ENTRIES) + PAGE_SIZE-1) \ | 37 | #define NFSACL_MAXPAGES ((2*(8+12*NFS_ACL_MAX_ENTRIES) + PAGE_SIZE-1) \ |
| 38 | >> PAGE_SHIFT) | 38 | >> PAGE_SHIFT) |
| 39 | 39 | ||
| 40 | #define NFS_ACL_MAX_ENTRIES_INLINE (5) | ||
| 41 | #define NFS_ACL_INLINE_BUFSIZE ((2*(2+3*NFS_ACL_MAX_ENTRIES_INLINE)) << 2) | ||
| 42 | |||
| 40 | static inline unsigned int | 43 | static inline unsigned int |
| 41 | nfsacl_size(struct posix_acl *acl_access, struct posix_acl *acl_default) | 44 | nfsacl_size(struct posix_acl *acl_access, struct posix_acl *acl_default) |
| 42 | { | 45 | { |
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index e86ed59f9ad5..cbe8ce3bf486 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,70 @@ | |||
| 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 | * Note: This command has been removed and it is only reserved at this | ||
| 146 | * point to avoid re-using existing command number. The functionality this | ||
| 147 | * command was planned for has been provided with cleaner design with the | ||
| 148 | * option to specify additional IEs in NL80211_CMD_TRIGGER_SCAN, | ||
| 149 | * NL80211_CMD_AUTHENTICATE, NL80211_CMD_ASSOCIATE, | ||
| 150 | * NL80211_CMD_DEAUTHENTICATE, and NL80211_CMD_DISASSOCIATE. | ||
| 151 | * | ||
| 152 | * @NL80211_CMD_GET_SCAN: get scan results | ||
| 153 | * @NL80211_CMD_TRIGGER_SCAN: trigger a new scan with the given parameters | ||
| 154 | * @NL80211_CMD_NEW_SCAN_RESULTS: scan notification (as a reply to | ||
| 155 | * NL80211_CMD_GET_SCAN and on the "scan" multicast group) | ||
| 156 | * @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons, | ||
| 157 | * partial scan results may be available | ||
| 158 | * | ||
| 159 | * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain | ||
| 160 | * has been changed and provides details of the request information | ||
| 161 | * that caused the change such as who initiated the regulatory request | ||
| 162 | * (%NL80211_ATTR_REG_INITIATOR), the wiphy_idx | ||
| 163 | * (%NL80211_ATTR_REG_ALPHA2) on which the request was made from if | ||
| 164 | * the initiator was %NL80211_REGDOM_SET_BY_COUNTRY_IE or | ||
| 165 | * %NL80211_REGDOM_SET_BY_DRIVER, the type of regulatory domain | ||
| 166 | * set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is | ||
| 167 | * %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on | ||
| 168 | * to (%NL80211_ATTR_REG_ALPHA2). | ||
| 169 | * | ||
| 170 | * @NL80211_CMD_AUTHENTICATE: authentication request and notification. | ||
| 171 | * This command is used both as a command (request to authenticate) and | ||
| 172 | * as an event on the "mlme" multicast group indicating completion of the | ||
| 173 | * authentication process. | ||
| 174 | * When used as a command, %NL80211_ATTR_IFINDEX is used to identify the | ||
| 175 | * interface. %NL80211_ATTR_MAC is used to specify PeerSTAAddress (and | ||
| 176 | * BSSID in case of station mode). %NL80211_ATTR_SSID is used to specify | ||
| 177 | * the SSID (mainly for association, but is included in authentication | ||
| 178 | * request, too, to help BSS selection. %NL80211_ATTR_WIPHY_FREQ is used | ||
| 179 | * to specify the frequence of the channel in MHz. %NL80211_ATTR_AUTH_TYPE | ||
| 180 | * is used to specify the authentication type. %NL80211_ATTR_IE is used to | ||
| 181 | * define IEs (VendorSpecificInfo, but also including RSN IE and FT IEs) | ||
| 182 | * to be added to the frame. | ||
| 183 | * When used as an event, this reports reception of an Authentication | ||
| 184 | * frame in station and IBSS modes when the local MLME processed the | ||
| 185 | * frame, i.e., it was for the local STA and was received in correct | ||
| 186 | * state. This is similar to MLME-AUTHENTICATE.confirm primitive in the | ||
| 187 | * MLME SAP interface (kernel providing MLME, userspace SME). The | ||
| 188 | * included NL80211_ATTR_FRAME attribute contains the management frame | ||
| 189 | * (including both the header and frame body, but not FCS). | ||
| 190 | * @NL80211_CMD_ASSOCIATE: association request and notification; like | ||
| 191 | * NL80211_CMD_AUTHENTICATE but for Association and Reassociation | ||
| 192 | * (similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request, | ||
| 193 | * MLME-ASSOCIATE.confirm or MLME-REASSOCIATE.confirm primitives). | ||
| 194 | * @NL80211_CMD_DEAUTHENTICATE: deauthentication request and notification; like | ||
| 195 | * NL80211_CMD_AUTHENTICATE but for Deauthentication frames (similar to | ||
| 196 | * MLME-DEAUTHENTICATION.request and MLME-DEAUTHENTICATE.indication | ||
| 197 | * primitives). | ||
| 198 | * @NL80211_CMD_DISASSOCIATE: disassociation request and notification; like | ||
| 199 | * NL80211_CMD_AUTHENTICATE but for Disassociation frames (similar to | ||
| 200 | * MLME-DISASSOCIATE.request and MLME-DISASSOCIATE.indication primitives). | ||
| 201 | * | ||
| 136 | * @NL80211_CMD_MAX: highest used command number | 202 | * @NL80211_CMD_MAX: highest used command number |
| 137 | * @__NL80211_CMD_AFTER_LAST: internal use | 203 | * @__NL80211_CMD_AFTER_LAST: internal use |
| 138 | */ | 204 | */ |
| @@ -178,6 +244,22 @@ enum nl80211_commands { | |||
| 178 | NL80211_CMD_GET_MESH_PARAMS, | 244 | NL80211_CMD_GET_MESH_PARAMS, |
| 179 | NL80211_CMD_SET_MESH_PARAMS, | 245 | NL80211_CMD_SET_MESH_PARAMS, |
| 180 | 246 | ||
| 247 | NL80211_CMD_SET_MGMT_EXTRA_IE /* reserved; not used */, | ||
| 248 | |||
| 249 | NL80211_CMD_GET_REG, | ||
| 250 | |||
| 251 | NL80211_CMD_GET_SCAN, | ||
| 252 | NL80211_CMD_TRIGGER_SCAN, | ||
| 253 | NL80211_CMD_NEW_SCAN_RESULTS, | ||
| 254 | NL80211_CMD_SCAN_ABORTED, | ||
| 255 | |||
| 256 | NL80211_CMD_REG_CHANGE, | ||
| 257 | |||
| 258 | NL80211_CMD_AUTHENTICATE, | ||
| 259 | NL80211_CMD_ASSOCIATE, | ||
| 260 | NL80211_CMD_DEAUTHENTICATE, | ||
| 261 | NL80211_CMD_DISASSOCIATE, | ||
| 262 | |||
| 181 | /* add new commands above here */ | 263 | /* add new commands above here */ |
| 182 | 264 | ||
| 183 | /* used to define NL80211_CMD_MAX below */ | 265 | /* used to define NL80211_CMD_MAX below */ |
| @@ -190,6 +272,12 @@ enum nl80211_commands { | |||
| 190 | * here | 272 | * here |
| 191 | */ | 273 | */ |
| 192 | #define NL80211_CMD_SET_BSS NL80211_CMD_SET_BSS | 274 | #define NL80211_CMD_SET_BSS NL80211_CMD_SET_BSS |
| 275 | #define NL80211_CMD_SET_MGMT_EXTRA_IE NL80211_CMD_SET_MGMT_EXTRA_IE | ||
| 276 | #define NL80211_CMD_REG_CHANGE NL80211_CMD_REG_CHANGE | ||
| 277 | #define NL80211_CMD_AUTHENTICATE NL80211_CMD_AUTHENTICATE | ||
| 278 | #define NL80211_CMD_ASSOCIATE NL80211_CMD_ASSOCIATE | ||
| 279 | #define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE | ||
| 280 | #define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE | ||
| 193 | 281 | ||
| 194 | /** | 282 | /** |
| 195 | * enum nl80211_attrs - nl80211 netlink attributes | 283 | * enum nl80211_attrs - nl80211 netlink attributes |
| @@ -284,6 +372,42 @@ enum nl80211_commands { | |||
| 284 | * supported interface types, each a flag attribute with the number | 372 | * supported interface types, each a flag attribute with the number |
| 285 | * of the interface mode. | 373 | * of the interface mode. |
| 286 | * | 374 | * |
| 375 | * @NL80211_ATTR_MGMT_SUBTYPE: Management frame subtype for | ||
| 376 | * %NL80211_CMD_SET_MGMT_EXTRA_IE. | ||
| 377 | * | ||
| 378 | * @NL80211_ATTR_IE: Information element(s) data (used, e.g., with | ||
| 379 | * %NL80211_CMD_SET_MGMT_EXTRA_IE). | ||
| 380 | * | ||
| 381 | * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with | ||
| 382 | * a single scan request, a wiphy attribute. | ||
| 383 | * | ||
| 384 | * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) | ||
| 385 | * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive | ||
| 386 | * scanning and include a zero-length SSID (wildcard) for wildcard scan | ||
| 387 | * @NL80211_ATTR_SCAN_GENERATION: the scan generation increases whenever the | ||
| 388 | * scan result list changes (BSS expired or added) so that applications | ||
| 389 | * can verify that they got a single, consistent snapshot (when all dump | ||
| 390 | * messages carried the same generation number) | ||
| 391 | * @NL80211_ATTR_BSS: scan result BSS | ||
| 392 | * | ||
| 393 | * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain | ||
| 394 | * currently in effect. This could be any of the %NL80211_REGDOM_SET_BY_* | ||
| 395 | * @NL80211_ATTR_REG_TYPE: indicates the type of the regulatory domain currently | ||
| 396 | * set. This can be one of the nl80211_reg_type (%NL80211_REGDOM_TYPE_*) | ||
| 397 | * | ||
| 398 | * @NL80211_ATTR_SUPPORTED_COMMANDS: wiphy attribute that specifies | ||
| 399 | * an array of command numbers (i.e. a mapping index to command number) | ||
| 400 | * that the driver for the given wiphy supports. | ||
| 401 | * | ||
| 402 | * @NL80211_ATTR_FRAME: frame data (binary attribute), including frame header | ||
| 403 | * and body, but not FCS; used, e.g., with NL80211_CMD_AUTHENTICATE and | ||
| 404 | * NL80211_CMD_ASSOCIATE events | ||
| 405 | * @NL80211_ATTR_SSID: SSID (binary attribute, 0..32 octets) | ||
| 406 | * @NL80211_ATTR_AUTH_TYPE: AuthenticationType, see &enum nl80211_auth_type, | ||
| 407 | * represented as a u32 | ||
| 408 | * @NL80211_ATTR_REASON_CODE: ReasonCode for %NL80211_CMD_DEAUTHENTICATE and | ||
| 409 | * %NL80211_CMD_DISASSOCIATE, u16 | ||
| 410 | * | ||
| 287 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 411 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
| 288 | * @__NL80211_ATTR_AFTER_LAST: internal use | 412 | * @__NL80211_ATTR_AFTER_LAST: internal use |
| 289 | */ | 413 | */ |
| @@ -346,6 +470,28 @@ enum nl80211_attrs { | |||
| 346 | NL80211_ATTR_WIPHY_FREQ, | 470 | NL80211_ATTR_WIPHY_FREQ, |
| 347 | NL80211_ATTR_WIPHY_CHANNEL_TYPE, | 471 | NL80211_ATTR_WIPHY_CHANNEL_TYPE, |
| 348 | 472 | ||
| 473 | NL80211_ATTR_KEY_DEFAULT_MGMT, | ||
| 474 | |||
| 475 | NL80211_ATTR_MGMT_SUBTYPE, | ||
| 476 | NL80211_ATTR_IE, | ||
| 477 | |||
| 478 | NL80211_ATTR_MAX_NUM_SCAN_SSIDS, | ||
| 479 | |||
| 480 | NL80211_ATTR_SCAN_FREQUENCIES, | ||
| 481 | NL80211_ATTR_SCAN_SSIDS, | ||
| 482 | NL80211_ATTR_SCAN_GENERATION, | ||
| 483 | NL80211_ATTR_BSS, | ||
| 484 | |||
| 485 | NL80211_ATTR_REG_INITIATOR, | ||
| 486 | NL80211_ATTR_REG_TYPE, | ||
| 487 | |||
| 488 | NL80211_ATTR_SUPPORTED_COMMANDS, | ||
| 489 | |||
| 490 | NL80211_ATTR_FRAME, | ||
| 491 | NL80211_ATTR_SSID, | ||
| 492 | NL80211_ATTR_AUTH_TYPE, | ||
| 493 | NL80211_ATTR_REASON_CODE, | ||
| 494 | |||
| 349 | /* add attributes here, update the policy in nl80211.c */ | 495 | /* add attributes here, update the policy in nl80211.c */ |
| 350 | 496 | ||
| 351 | __NL80211_ATTR_AFTER_LAST, | 497 | __NL80211_ATTR_AFTER_LAST, |
| @@ -360,7 +506,15 @@ enum nl80211_attrs { | |||
| 360 | #define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES | 506 | #define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES |
| 361 | #define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS | 507 | #define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS |
| 362 | #define NL80211_ATTR_WIPHY_FREQ NL80211_ATTR_WIPHY_FREQ | 508 | #define NL80211_ATTR_WIPHY_FREQ NL80211_ATTR_WIPHY_FREQ |
| 363 | #define NL80211_ATTR_WIPHY_SEC_CHAN_OFFSET NL80211_ATTR_WIPHY_SEC_CHAN_OFFSET | 509 | #define NL80211_ATTR_WIPHY_CHANNEL_TYPE NL80211_ATTR_WIPHY_CHANNEL_TYPE |
| 510 | #define NL80211_ATTR_MGMT_SUBTYPE NL80211_ATTR_MGMT_SUBTYPE | ||
| 511 | #define NL80211_ATTR_IE NL80211_ATTR_IE | ||
| 512 | #define NL80211_ATTR_REG_INITIATOR NL80211_ATTR_REG_INITIATOR | ||
| 513 | #define NL80211_ATTR_REG_TYPE NL80211_ATTR_REG_TYPE | ||
| 514 | #define NL80211_ATTR_FRAME NL80211_ATTR_FRAME | ||
| 515 | #define NL80211_ATTR_SSID NL80211_ATTR_SSID | ||
| 516 | #define NL80211_ATTR_AUTH_TYPE NL80211_ATTR_AUTH_TYPE | ||
| 517 | #define NL80211_ATTR_REASON_CODE NL80211_ATTR_REASON_CODE | ||
| 364 | 518 | ||
| 365 | #define NL80211_MAX_SUPP_RATES 32 | 519 | #define NL80211_MAX_SUPP_RATES 32 |
| 366 | #define NL80211_MAX_SUPP_REG_RULES 32 | 520 | #define NL80211_MAX_SUPP_REG_RULES 32 |
| @@ -412,12 +566,14 @@ enum nl80211_iftype { | |||
| 412 | * @NL80211_STA_FLAG_SHORT_PREAMBLE: station is capable of receiving frames | 566 | * @NL80211_STA_FLAG_SHORT_PREAMBLE: station is capable of receiving frames |
| 413 | * with short barker preamble | 567 | * with short barker preamble |
| 414 | * @NL80211_STA_FLAG_WME: station is WME/QoS capable | 568 | * @NL80211_STA_FLAG_WME: station is WME/QoS capable |
| 569 | * @NL80211_STA_FLAG_MFP: station uses management frame protection | ||
| 415 | */ | 570 | */ |
| 416 | enum nl80211_sta_flags { | 571 | enum nl80211_sta_flags { |
| 417 | __NL80211_STA_FLAG_INVALID, | 572 | __NL80211_STA_FLAG_INVALID, |
| 418 | NL80211_STA_FLAG_AUTHORIZED, | 573 | NL80211_STA_FLAG_AUTHORIZED, |
| 419 | NL80211_STA_FLAG_SHORT_PREAMBLE, | 574 | NL80211_STA_FLAG_SHORT_PREAMBLE, |
| 420 | NL80211_STA_FLAG_WME, | 575 | NL80211_STA_FLAG_WME, |
| 576 | NL80211_STA_FLAG_MFP, | ||
| 421 | 577 | ||
| 422 | /* keep last */ | 578 | /* keep last */ |
| 423 | __NL80211_STA_FLAG_AFTER_LAST, | 579 | __NL80211_STA_FLAG_AFTER_LAST, |
| @@ -465,6 +621,9 @@ enum nl80211_rate_info { | |||
| 465 | * @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm) | 621 | * @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm) |
| 466 | * @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute | 622 | * @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute |
| 467 | * containing info as possible, see &enum nl80211_sta_info_txrate. | 623 | * containing info as possible, see &enum nl80211_sta_info_txrate. |
| 624 | * @NL80211_STA_INFO_RX_PACKETS: total received packet (u32, from this station) | ||
| 625 | * @NL80211_STA_INFO_TX_PACKETS: total transmitted packets (u32, to this | ||
| 626 | * station) | ||
| 468 | */ | 627 | */ |
| 469 | enum nl80211_sta_info { | 628 | enum nl80211_sta_info { |
| 470 | __NL80211_STA_INFO_INVALID, | 629 | __NL80211_STA_INFO_INVALID, |
| @@ -476,6 +635,8 @@ enum nl80211_sta_info { | |||
| 476 | NL80211_STA_INFO_PLINK_STATE, | 635 | NL80211_STA_INFO_PLINK_STATE, |
| 477 | NL80211_STA_INFO_SIGNAL, | 636 | NL80211_STA_INFO_SIGNAL, |
| 478 | NL80211_STA_INFO_TX_BITRATE, | 637 | NL80211_STA_INFO_TX_BITRATE, |
| 638 | NL80211_STA_INFO_RX_PACKETS, | ||
| 639 | NL80211_STA_INFO_TX_PACKETS, | ||
| 479 | 640 | ||
| 480 | /* keep last */ | 641 | /* keep last */ |
| 481 | __NL80211_STA_INFO_AFTER_LAST, | 642 | __NL80211_STA_INFO_AFTER_LAST, |
| @@ -607,6 +768,48 @@ enum nl80211_bitrate_attr { | |||
| 607 | }; | 768 | }; |
| 608 | 769 | ||
| 609 | /** | 770 | /** |
| 771 | * enum nl80211_initiator - Indicates the initiator of a reg domain request | ||
| 772 | * @NL80211_REGDOM_SET_BY_CORE: Core queried CRDA for a dynamic world | ||
| 773 | * regulatory domain. | ||
| 774 | * @NL80211_REGDOM_SET_BY_USER: User asked the wireless core to set the | ||
| 775 | * regulatory domain. | ||
| 776 | * @NL80211_REGDOM_SET_BY_DRIVER: a wireless drivers has hinted to the | ||
| 777 | * wireless core it thinks its knows the regulatory domain we should be in. | ||
| 778 | * @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an | ||
| 779 | * 802.11 country information element with regulatory information it | ||
| 780 | * thinks we should consider. | ||
| 781 | */ | ||
| 782 | enum nl80211_reg_initiator { | ||
| 783 | NL80211_REGDOM_SET_BY_CORE, | ||
| 784 | NL80211_REGDOM_SET_BY_USER, | ||
| 785 | NL80211_REGDOM_SET_BY_DRIVER, | ||
| 786 | NL80211_REGDOM_SET_BY_COUNTRY_IE, | ||
| 787 | }; | ||
| 788 | |||
| 789 | /** | ||
| 790 | * enum nl80211_reg_type - specifies the type of regulatory domain | ||
| 791 | * @NL80211_REGDOM_TYPE_COUNTRY: the regulatory domain set is one that pertains | ||
| 792 | * to a specific country. When this is set you can count on the | ||
| 793 | * ISO / IEC 3166 alpha2 country code being valid. | ||
| 794 | * @NL80211_REGDOM_TYPE_WORLD: the regulatory set domain is the world regulatory | ||
| 795 | * domain. | ||
| 796 | * @NL80211_REGDOM_TYPE_CUSTOM_WORLD: the regulatory domain set is a custom | ||
| 797 | * driver specific world regulatory domain. These do not apply system-wide | ||
| 798 | * and are only applicable to the individual devices which have requested | ||
| 799 | * them to be applied. | ||
| 800 | * @NL80211_REGDOM_TYPE_INTERSECTION: the regulatory domain set is the product | ||
| 801 | * of an intersection between two regulatory domains -- the previously | ||
| 802 | * set regulatory domain on the system and the last accepted regulatory | ||
| 803 | * domain request to be processed. | ||
| 804 | */ | ||
| 805 | enum nl80211_reg_type { | ||
| 806 | NL80211_REGDOM_TYPE_COUNTRY, | ||
| 807 | NL80211_REGDOM_TYPE_WORLD, | ||
| 808 | NL80211_REGDOM_TYPE_CUSTOM_WORLD, | ||
| 809 | NL80211_REGDOM_TYPE_INTERSECTION, | ||
| 810 | }; | ||
| 811 | |||
| 812 | /** | ||
| 610 | * enum nl80211_reg_rule_attr - regulatory rule attributes | 813 | * enum nl80211_reg_rule_attr - regulatory rule attributes |
| 611 | * @NL80211_ATTR_REG_RULE_FLAGS: a set of flags which specify additional | 814 | * @NL80211_ATTR_REG_RULE_FLAGS: a set of flags which specify additional |
| 612 | * considerations for a given frequency range. These are the | 815 | * considerations for a given frequency range. These are the |
| @@ -811,4 +1014,52 @@ enum nl80211_channel_type { | |||
| 811 | NL80211_CHAN_HT40MINUS, | 1014 | NL80211_CHAN_HT40MINUS, |
| 812 | NL80211_CHAN_HT40PLUS | 1015 | NL80211_CHAN_HT40PLUS |
| 813 | }; | 1016 | }; |
| 1017 | |||
| 1018 | /** | ||
| 1019 | * enum nl80211_bss - netlink attributes for a BSS | ||
| 1020 | * | ||
| 1021 | * @__NL80211_BSS_INVALID: invalid | ||
| 1022 | * @NL80211_BSS_FREQUENCY: frequency in MHz (u32) | ||
| 1023 | * @NL80211_BSS_TSF: TSF of the received probe response/beacon (u64) | ||
| 1024 | * @NL80211_BSS_BEACON_INTERVAL: beacon interval of the (I)BSS (u16) | ||
| 1025 | * @NL80211_BSS_CAPABILITY: capability field (CPU order, u16) | ||
| 1026 | * @NL80211_BSS_INFORMATION_ELEMENTS: binary attribute containing the | ||
| 1027 | * raw information elements from the probe response/beacon (bin) | ||
| 1028 | * @NL80211_BSS_SIGNAL_MBM: signal strength of probe response/beacon | ||
| 1029 | * in mBm (100 * dBm) (s32) | ||
| 1030 | * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon | ||
| 1031 | * in unspecified units, scaled to 0..100 (u8) | ||
| 1032 | * @__NL80211_BSS_AFTER_LAST: internal | ||
| 1033 | * @NL80211_BSS_MAX: highest BSS attribute | ||
| 1034 | */ | ||
| 1035 | enum nl80211_bss { | ||
| 1036 | __NL80211_BSS_INVALID, | ||
| 1037 | NL80211_BSS_BSSID, | ||
| 1038 | NL80211_BSS_FREQUENCY, | ||
| 1039 | NL80211_BSS_TSF, | ||
| 1040 | NL80211_BSS_BEACON_INTERVAL, | ||
| 1041 | NL80211_BSS_CAPABILITY, | ||
| 1042 | NL80211_BSS_INFORMATION_ELEMENTS, | ||
| 1043 | NL80211_BSS_SIGNAL_MBM, | ||
| 1044 | NL80211_BSS_SIGNAL_UNSPEC, | ||
| 1045 | |||
| 1046 | /* keep last */ | ||
| 1047 | __NL80211_BSS_AFTER_LAST, | ||
| 1048 | NL80211_BSS_MAX = __NL80211_BSS_AFTER_LAST - 1 | ||
| 1049 | }; | ||
| 1050 | |||
| 1051 | /** | ||
| 1052 | * enum nl80211_auth_type - AuthenticationType | ||
| 1053 | * | ||
| 1054 | * @NL80211_AUTHTYPE_OPEN_SYSTEM: Open System authentication | ||
| 1055 | * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only) | ||
| 1056 | * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r) | ||
| 1057 | * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP) | ||
| 1058 | */ | ||
| 1059 | enum nl80211_auth_type { | ||
| 1060 | NL80211_AUTHTYPE_OPEN_SYSTEM, | ||
| 1061 | NL80211_AUTHTYPE_SHARED_KEY, | ||
| 1062 | NL80211_AUTHTYPE_FT, | ||
| 1063 | NL80211_AUTHTYPE_NETWORK_EAP, | ||
| 1064 | }; | ||
| 814 | #endif /* __LINUX_NL80211_H */ | 1065 | #endif /* __LINUX_NL80211_H */ |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index aca8c458aa8a..e5816dd33371 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 |
| @@ -1235,6 +1237,7 @@ | |||
| 1235 | #define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451 | 1237 | #define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451 |
| 1236 | #define PCI_DEVICE_ID_NVIDIA_NVENET_22 0x0452 | 1238 | #define PCI_DEVICE_ID_NVIDIA_NVENET_22 0x0452 |
| 1237 | #define PCI_DEVICE_ID_NVIDIA_NVENET_23 0x0453 | 1239 | #define PCI_DEVICE_ID_NVIDIA_NVENET_23 0x0453 |
| 1240 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_SMBUS 0x0542 | ||
| 1238 | #define PCI_DEVICE_ID_NVIDIA_NVENET_24 0x054C | 1241 | #define PCI_DEVICE_ID_NVIDIA_NVENET_24 0x054C |
| 1239 | #define PCI_DEVICE_ID_NVIDIA_NVENET_25 0x054D | 1242 | #define PCI_DEVICE_ID_NVIDIA_NVENET_25 0x054D |
| 1240 | #define PCI_DEVICE_ID_NVIDIA_NVENET_26 0x054E | 1243 | #define PCI_DEVICE_ID_NVIDIA_NVENET_26 0x054E |
| @@ -1245,11 +1248,14 @@ | |||
| 1245 | #define PCI_DEVICE_ID_NVIDIA_NVENET_31 0x07DF | 1248 | #define PCI_DEVICE_ID_NVIDIA_NVENET_31 0x07DF |
| 1246 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE 0x0560 | 1249 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE 0x0560 |
| 1247 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE 0x056C | 1250 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE 0x056C |
| 1251 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP78S_SMBUS 0x0752 | ||
| 1248 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE 0x0759 | 1252 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE 0x0759 |
| 1249 | #define PCI_DEVICE_ID_NVIDIA_NVENET_32 0x0760 | 1253 | #define PCI_DEVICE_ID_NVIDIA_NVENET_32 0x0760 |
| 1250 | #define PCI_DEVICE_ID_NVIDIA_NVENET_33 0x0761 | 1254 | #define PCI_DEVICE_ID_NVIDIA_NVENET_33 0x0761 |
| 1251 | #define PCI_DEVICE_ID_NVIDIA_NVENET_34 0x0762 | 1255 | #define PCI_DEVICE_ID_NVIDIA_NVENET_34 0x0762 |
| 1252 | #define PCI_DEVICE_ID_NVIDIA_NVENET_35 0x0763 | 1256 | #define PCI_DEVICE_ID_NVIDIA_NVENET_35 0x0763 |
| 1257 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS 0x07D8 | ||
| 1258 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS 0x0AA2 | ||
| 1253 | #define PCI_DEVICE_ID_NVIDIA_NVENET_36 0x0AB0 | 1259 | #define PCI_DEVICE_ID_NVIDIA_NVENET_36 0x0AB0 |
| 1254 | #define PCI_DEVICE_ID_NVIDIA_NVENET_37 0x0AB1 | 1260 | #define PCI_DEVICE_ID_NVIDIA_NVENET_37 0x0AB1 |
| 1255 | #define PCI_DEVICE_ID_NVIDIA_NVENET_38 0x0AB2 | 1261 | #define PCI_DEVICE_ID_NVIDIA_NVENET_38 0x0AB2 |
| @@ -1473,6 +1479,7 @@ | |||
| 1473 | #define PCI_DEVICE_ID_SERVERWORKS_HT1000IDE 0x0214 | 1479 | #define PCI_DEVICE_ID_SERVERWORKS_HT1000IDE 0x0214 |
| 1474 | #define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2 0x0217 | 1480 | #define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2 0x0217 |
| 1475 | #define PCI_DEVICE_ID_SERVERWORKS_CSB6LPC 0x0227 | 1481 | #define PCI_DEVICE_ID_SERVERWORKS_CSB6LPC 0x0227 |
| 1482 | #define PCI_DEVICE_ID_SERVERWORKS_HT1100LD 0x0408 | ||
| 1476 | 1483 | ||
| 1477 | #define PCI_VENDOR_ID_SBE 0x1176 | 1484 | #define PCI_VENDOR_ID_SBE 0x1176 |
| 1478 | #define PCI_DEVICE_ID_SBE_WANXL100 0x0301 | 1485 | #define PCI_DEVICE_ID_SBE_WANXL100 0x0301 |
| @@ -1971,6 +1978,8 @@ | |||
| 1971 | 1978 | ||
| 1972 | #define PCI_VENDOR_ID_SAMSUNG 0x144d | 1979 | #define PCI_VENDOR_ID_SAMSUNG 0x144d |
| 1973 | 1980 | ||
| 1981 | #define PCI_VENDOR_ID_AMBIT 0x1468 | ||
| 1982 | |||
| 1974 | #define PCI_VENDOR_ID_MYRICOM 0x14c1 | 1983 | #define PCI_VENDOR_ID_MYRICOM 0x14c1 |
| 1975 | 1984 | ||
| 1976 | #define PCI_VENDOR_ID_TITAN 0x14D2 | 1985 | #define PCI_VENDOR_ID_TITAN 0x14D2 |
| @@ -2112,6 +2121,8 @@ | |||
| 2112 | #define PCI_DEVICE_ID_MELLANOX_SINAI_OLD 0x5e8c | 2121 | #define PCI_DEVICE_ID_MELLANOX_SINAI_OLD 0x5e8c |
| 2113 | #define PCI_DEVICE_ID_MELLANOX_SINAI 0x6274 | 2122 | #define PCI_DEVICE_ID_MELLANOX_SINAI 0x6274 |
| 2114 | 2123 | ||
| 2124 | #define PCI_VENDOR_ID_DFI 0x15bd | ||
| 2125 | |||
| 2115 | #define PCI_VENDOR_ID_QUICKNET 0x15e2 | 2126 | #define PCI_VENDOR_ID_QUICKNET 0x15e2 |
| 2116 | #define PCI_DEVICE_ID_QUICKNET_XJ 0x0500 | 2127 | #define PCI_DEVICE_ID_QUICKNET_XJ 0x0500 |
| 2117 | 2128 | ||
| @@ -2215,10 +2226,20 @@ | |||
| 2215 | 2226 | ||
| 2216 | #define PCI_VENDOR_ID_TOPSPIN 0x1867 | 2227 | #define PCI_VENDOR_ID_TOPSPIN 0x1867 |
| 2217 | 2228 | ||
| 2229 | #define PCI_VENDOR_ID_SILAN 0x1904 | ||
| 2230 | |||
| 2218 | #define PCI_VENDOR_ID_TDI 0x192E | 2231 | #define PCI_VENDOR_ID_TDI 0x192E |
| 2219 | #define PCI_DEVICE_ID_TDI_EHCI 0x0101 | 2232 | #define PCI_DEVICE_ID_TDI_EHCI 0x0101 |
| 2220 | 2233 | ||
| 2221 | #define PCI_VENDOR_ID_FREESCALE 0x1957 | 2234 | #define PCI_VENDOR_ID_FREESCALE 0x1957 |
| 2235 | #define PCI_DEVICE_ID_MPC8315E 0x00b4 | ||
| 2236 | #define PCI_DEVICE_ID_MPC8315 0x00b5 | ||
| 2237 | #define PCI_DEVICE_ID_MPC8314E 0x00b6 | ||
| 2238 | #define PCI_DEVICE_ID_MPC8314 0x00b7 | ||
| 2239 | #define PCI_DEVICE_ID_MPC8378E 0x00c4 | ||
| 2240 | #define PCI_DEVICE_ID_MPC8378 0x00c5 | ||
| 2241 | #define PCI_DEVICE_ID_MPC8377E 0x00c6 | ||
| 2242 | #define PCI_DEVICE_ID_MPC8377 0x00c7 | ||
| 2222 | #define PCI_DEVICE_ID_MPC8548E 0x0012 | 2243 | #define PCI_DEVICE_ID_MPC8548E 0x0012 |
| 2223 | #define PCI_DEVICE_ID_MPC8548 0x0013 | 2244 | #define PCI_DEVICE_ID_MPC8548 0x0013 |
| 2224 | #define PCI_DEVICE_ID_MPC8543E 0x0014 | 2245 | #define PCI_DEVICE_ID_MPC8543E 0x0014 |
| @@ -2263,6 +2284,8 @@ | |||
| 2263 | #define PCI_DEVICE_ID_KORENIX_JETCARDF0 0x1600 | 2284 | #define PCI_DEVICE_ID_KORENIX_JETCARDF0 0x1600 |
| 2264 | #define PCI_DEVICE_ID_KORENIX_JETCARDF1 0x16ff | 2285 | #define PCI_DEVICE_ID_KORENIX_JETCARDF1 0x16ff |
| 2265 | 2286 | ||
| 2287 | #define PCI_VENDOR_ID_QMI 0x1a32 | ||
| 2288 | |||
| 2266 | #define PCI_VENDOR_ID_TEKRAM 0x1de1 | 2289 | #define PCI_VENDOR_ID_TEKRAM 0x1de1 |
| 2267 | #define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29 | 2290 | #define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29 |
| 2268 | 2291 | ||
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index 54a968b4b924..ee5615d65211 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
| @@ -107,10 +107,14 @@ typedef void (*pcpu_populate_pte_fn_t)(unsigned long addr); | |||
| 107 | 107 | ||
| 108 | extern size_t __init pcpu_setup_first_chunk(pcpu_get_page_fn_t get_page_fn, | 108 | extern size_t __init pcpu_setup_first_chunk(pcpu_get_page_fn_t get_page_fn, |
| 109 | size_t static_size, size_t reserved_size, | 109 | size_t static_size, size_t reserved_size, |
| 110 | ssize_t unit_size, ssize_t dyn_size, | 110 | ssize_t dyn_size, ssize_t unit_size, |
| 111 | void *base_addr, | 111 | void *base_addr, |
| 112 | pcpu_populate_pte_fn_t populate_pte_fn); | 112 | pcpu_populate_pte_fn_t populate_pte_fn); |
| 113 | 113 | ||
| 114 | extern ssize_t __init pcpu_embed_first_chunk( | ||
| 115 | size_t static_size, size_t reserved_size, | ||
| 116 | ssize_t dyn_size, ssize_t unit_size); | ||
| 117 | |||
| 114 | /* | 118 | /* |
| 115 | * Use this to get to a cpu's version of the per-cpu object | 119 | * Use this to get to a cpu's version of the per-cpu object |
| 116 | * dynamically allocated. Non-atomic access to the current CPU's | 120 | * dynamically allocated. Non-atomic access to the current CPU's |
diff --git a/include/linux/pfkeyv2.h b/include/linux/pfkeyv2.h index 01b262959f2e..228b0b6306b0 100644 --- a/include/linux/pfkeyv2.h +++ b/include/linux/pfkeyv2.h | |||
| @@ -12,187 +12,187 @@ | |||
| 12 | #define PFKEYV2_REVISION 199806L | 12 | #define PFKEYV2_REVISION 199806L |
| 13 | 13 | ||
| 14 | struct sadb_msg { | 14 | struct sadb_msg { |
| 15 | uint8_t sadb_msg_version; | 15 | __u8 sadb_msg_version; |
| 16 | uint8_t sadb_msg_type; | 16 | __u8 sadb_msg_type; |
| 17 | uint8_t sadb_msg_errno; | 17 | __u8 sadb_msg_errno; |
| 18 | uint8_t sadb_msg_satype; | 18 | __u8 sadb_msg_satype; |
| 19 | uint16_t sadb_msg_len; | 19 | __u16 sadb_msg_len; |
| 20 | uint16_t sadb_msg_reserved; | 20 | __u16 sadb_msg_reserved; |
| 21 | uint32_t sadb_msg_seq; | 21 | __u32 sadb_msg_seq; |
| 22 | uint32_t sadb_msg_pid; | 22 | __u32 sadb_msg_pid; |
| 23 | } __attribute__((packed)); | 23 | } __attribute__((packed)); |
| 24 | /* sizeof(struct sadb_msg) == 16 */ | 24 | /* sizeof(struct sadb_msg) == 16 */ |
| 25 | 25 | ||
| 26 | struct sadb_ext { | 26 | struct sadb_ext { |
| 27 | uint16_t sadb_ext_len; | 27 | __u16 sadb_ext_len; |
| 28 | uint16_t sadb_ext_type; | 28 | __u16 sadb_ext_type; |
| 29 | } __attribute__((packed)); | 29 | } __attribute__((packed)); |
| 30 | /* sizeof(struct sadb_ext) == 4 */ | 30 | /* sizeof(struct sadb_ext) == 4 */ |
| 31 | 31 | ||
| 32 | struct sadb_sa { | 32 | struct sadb_sa { |
| 33 | uint16_t sadb_sa_len; | 33 | __u16 sadb_sa_len; |
| 34 | uint16_t sadb_sa_exttype; | 34 | __u16 sadb_sa_exttype; |
| 35 | __be32 sadb_sa_spi; | 35 | __be32 sadb_sa_spi; |
| 36 | uint8_t sadb_sa_replay; | 36 | __u8 sadb_sa_replay; |
| 37 | uint8_t sadb_sa_state; | 37 | __u8 sadb_sa_state; |
| 38 | uint8_t sadb_sa_auth; | 38 | __u8 sadb_sa_auth; |
| 39 | uint8_t sadb_sa_encrypt; | 39 | __u8 sadb_sa_encrypt; |
| 40 | uint32_t sadb_sa_flags; | 40 | __u32 sadb_sa_flags; |
| 41 | } __attribute__((packed)); | 41 | } __attribute__((packed)); |
| 42 | /* sizeof(struct sadb_sa) == 16 */ | 42 | /* sizeof(struct sadb_sa) == 16 */ |
| 43 | 43 | ||
| 44 | struct sadb_lifetime { | 44 | struct sadb_lifetime { |
| 45 | uint16_t sadb_lifetime_len; | 45 | __u16 sadb_lifetime_len; |
| 46 | uint16_t sadb_lifetime_exttype; | 46 | __u16 sadb_lifetime_exttype; |
| 47 | uint32_t sadb_lifetime_allocations; | 47 | __u32 sadb_lifetime_allocations; |
| 48 | uint64_t sadb_lifetime_bytes; | 48 | __u64 sadb_lifetime_bytes; |
| 49 | uint64_t sadb_lifetime_addtime; | 49 | __u64 sadb_lifetime_addtime; |
| 50 | uint64_t sadb_lifetime_usetime; | 50 | __u64 sadb_lifetime_usetime; |
| 51 | } __attribute__((packed)); | 51 | } __attribute__((packed)); |
| 52 | /* sizeof(struct sadb_lifetime) == 32 */ | 52 | /* sizeof(struct sadb_lifetime) == 32 */ |
| 53 | 53 | ||
| 54 | struct sadb_address { | 54 | struct sadb_address { |
| 55 | uint16_t sadb_address_len; | 55 | __u16 sadb_address_len; |
| 56 | uint16_t sadb_address_exttype; | 56 | __u16 sadb_address_exttype; |
| 57 | uint8_t sadb_address_proto; | 57 | __u8 sadb_address_proto; |
| 58 | uint8_t sadb_address_prefixlen; | 58 | __u8 sadb_address_prefixlen; |
| 59 | uint16_t sadb_address_reserved; | 59 | __u16 sadb_address_reserved; |
| 60 | } __attribute__((packed)); | 60 | } __attribute__((packed)); |
| 61 | /* sizeof(struct sadb_address) == 8 */ | 61 | /* sizeof(struct sadb_address) == 8 */ |
| 62 | 62 | ||
| 63 | struct sadb_key { | 63 | struct sadb_key { |
| 64 | uint16_t sadb_key_len; | 64 | __u16 sadb_key_len; |
| 65 | uint16_t sadb_key_exttype; | 65 | __u16 sadb_key_exttype; |
| 66 | uint16_t sadb_key_bits; | 66 | __u16 sadb_key_bits; |
| 67 | uint16_t sadb_key_reserved; | 67 | __u16 sadb_key_reserved; |
| 68 | } __attribute__((packed)); | 68 | } __attribute__((packed)); |
| 69 | /* sizeof(struct sadb_key) == 8 */ | 69 | /* sizeof(struct sadb_key) == 8 */ |
| 70 | 70 | ||
| 71 | struct sadb_ident { | 71 | struct sadb_ident { |
| 72 | uint16_t sadb_ident_len; | 72 | __u16 sadb_ident_len; |
| 73 | uint16_t sadb_ident_exttype; | 73 | __u16 sadb_ident_exttype; |
| 74 | uint16_t sadb_ident_type; | 74 | __u16 sadb_ident_type; |
| 75 | uint16_t sadb_ident_reserved; | 75 | __u16 sadb_ident_reserved; |
| 76 | uint64_t sadb_ident_id; | 76 | __u64 sadb_ident_id; |
| 77 | } __attribute__((packed)); | 77 | } __attribute__((packed)); |
| 78 | /* sizeof(struct sadb_ident) == 16 */ | 78 | /* sizeof(struct sadb_ident) == 16 */ |
| 79 | 79 | ||
| 80 | struct sadb_sens { | 80 | struct sadb_sens { |
| 81 | uint16_t sadb_sens_len; | 81 | __u16 sadb_sens_len; |
| 82 | uint16_t sadb_sens_exttype; | 82 | __u16 sadb_sens_exttype; |
| 83 | uint32_t sadb_sens_dpd; | 83 | __u32 sadb_sens_dpd; |
| 84 | uint8_t sadb_sens_sens_level; | 84 | __u8 sadb_sens_sens_level; |
| 85 | uint8_t sadb_sens_sens_len; | 85 | __u8 sadb_sens_sens_len; |
| 86 | uint8_t sadb_sens_integ_level; | 86 | __u8 sadb_sens_integ_level; |
| 87 | uint8_t sadb_sens_integ_len; | 87 | __u8 sadb_sens_integ_len; |
| 88 | uint32_t sadb_sens_reserved; | 88 | __u32 sadb_sens_reserved; |
| 89 | } __attribute__((packed)); | 89 | } __attribute__((packed)); |
| 90 | /* sizeof(struct sadb_sens) == 16 */ | 90 | /* sizeof(struct sadb_sens) == 16 */ |
| 91 | 91 | ||
| 92 | /* followed by: | 92 | /* followed by: |
| 93 | uint64_t sadb_sens_bitmap[sens_len]; | 93 | __u64 sadb_sens_bitmap[sens_len]; |
| 94 | uint64_t sadb_integ_bitmap[integ_len]; */ | 94 | __u64 sadb_integ_bitmap[integ_len]; */ |
| 95 | 95 | ||
| 96 | struct sadb_prop { | 96 | struct sadb_prop { |
| 97 | uint16_t sadb_prop_len; | 97 | __u16 sadb_prop_len; |
| 98 | uint16_t sadb_prop_exttype; | 98 | __u16 sadb_prop_exttype; |
| 99 | uint8_t sadb_prop_replay; | 99 | __u8 sadb_prop_replay; |
| 100 | uint8_t sadb_prop_reserved[3]; | 100 | __u8 sadb_prop_reserved[3]; |
| 101 | } __attribute__((packed)); | 101 | } __attribute__((packed)); |
| 102 | /* sizeof(struct sadb_prop) == 8 */ | 102 | /* sizeof(struct sadb_prop) == 8 */ |
| 103 | 103 | ||
| 104 | /* followed by: | 104 | /* followed by: |
| 105 | struct sadb_comb sadb_combs[(sadb_prop_len + | 105 | struct sadb_comb sadb_combs[(sadb_prop_len + |
| 106 | sizeof(uint64_t) - sizeof(struct sadb_prop)) / | 106 | sizeof(__u64) - sizeof(struct sadb_prop)) / |
| 107 | sizeof(struct sadb_comb)]; */ | 107 | sizeof(struct sadb_comb)]; */ |
| 108 | 108 | ||
| 109 | struct sadb_comb { | 109 | struct sadb_comb { |
| 110 | uint8_t sadb_comb_auth; | 110 | __u8 sadb_comb_auth; |
| 111 | uint8_t sadb_comb_encrypt; | 111 | __u8 sadb_comb_encrypt; |
| 112 | uint16_t sadb_comb_flags; | 112 | __u16 sadb_comb_flags; |
| 113 | uint16_t sadb_comb_auth_minbits; | 113 | __u16 sadb_comb_auth_minbits; |
| 114 | uint16_t sadb_comb_auth_maxbits; | 114 | __u16 sadb_comb_auth_maxbits; |
| 115 | uint16_t sadb_comb_encrypt_minbits; | 115 | __u16 sadb_comb_encrypt_minbits; |
| 116 | uint16_t sadb_comb_encrypt_maxbits; | 116 | __u16 sadb_comb_encrypt_maxbits; |
| 117 | uint32_t sadb_comb_reserved; | 117 | __u32 sadb_comb_reserved; |
| 118 | uint32_t sadb_comb_soft_allocations; | 118 | __u32 sadb_comb_soft_allocations; |
| 119 | uint32_t sadb_comb_hard_allocations; | 119 | __u32 sadb_comb_hard_allocations; |
| 120 | uint64_t sadb_comb_soft_bytes; | 120 | __u64 sadb_comb_soft_bytes; |
| 121 | uint64_t sadb_comb_hard_bytes; | 121 | __u64 sadb_comb_hard_bytes; |
| 122 | uint64_t sadb_comb_soft_addtime; | 122 | __u64 sadb_comb_soft_addtime; |
| 123 | uint64_t sadb_comb_hard_addtime; | 123 | __u64 sadb_comb_hard_addtime; |
| 124 | uint64_t sadb_comb_soft_usetime; | 124 | __u64 sadb_comb_soft_usetime; |
| 125 | uint64_t sadb_comb_hard_usetime; | 125 | __u64 sadb_comb_hard_usetime; |
| 126 | } __attribute__((packed)); | 126 | } __attribute__((packed)); |
| 127 | /* sizeof(struct sadb_comb) == 72 */ | 127 | /* sizeof(struct sadb_comb) == 72 */ |
| 128 | 128 | ||
| 129 | struct sadb_supported { | 129 | struct sadb_supported { |
| 130 | uint16_t sadb_supported_len; | 130 | __u16 sadb_supported_len; |
| 131 | uint16_t sadb_supported_exttype; | 131 | __u16 sadb_supported_exttype; |
| 132 | uint32_t sadb_supported_reserved; | 132 | __u32 sadb_supported_reserved; |
| 133 | } __attribute__((packed)); | 133 | } __attribute__((packed)); |
| 134 | /* sizeof(struct sadb_supported) == 8 */ | 134 | /* sizeof(struct sadb_supported) == 8 */ |
| 135 | 135 | ||
| 136 | /* followed by: | 136 | /* followed by: |
| 137 | struct sadb_alg sadb_algs[(sadb_supported_len + | 137 | struct sadb_alg sadb_algs[(sadb_supported_len + |
| 138 | sizeof(uint64_t) - sizeof(struct sadb_supported)) / | 138 | sizeof(__u64) - sizeof(struct sadb_supported)) / |
| 139 | sizeof(struct sadb_alg)]; */ | 139 | sizeof(struct sadb_alg)]; */ |
| 140 | 140 | ||
| 141 | struct sadb_alg { | 141 | struct sadb_alg { |
| 142 | uint8_t sadb_alg_id; | 142 | __u8 sadb_alg_id; |
| 143 | uint8_t sadb_alg_ivlen; | 143 | __u8 sadb_alg_ivlen; |
| 144 | uint16_t sadb_alg_minbits; | 144 | __u16 sadb_alg_minbits; |
| 145 | uint16_t sadb_alg_maxbits; | 145 | __u16 sadb_alg_maxbits; |
| 146 | uint16_t sadb_alg_reserved; | 146 | __u16 sadb_alg_reserved; |
| 147 | } __attribute__((packed)); | 147 | } __attribute__((packed)); |
| 148 | /* sizeof(struct sadb_alg) == 8 */ | 148 | /* sizeof(struct sadb_alg) == 8 */ |
| 149 | 149 | ||
| 150 | struct sadb_spirange { | 150 | struct sadb_spirange { |
| 151 | uint16_t sadb_spirange_len; | 151 | __u16 sadb_spirange_len; |
| 152 | uint16_t sadb_spirange_exttype; | 152 | __u16 sadb_spirange_exttype; |
| 153 | uint32_t sadb_spirange_min; | 153 | __u32 sadb_spirange_min; |
| 154 | uint32_t sadb_spirange_max; | 154 | __u32 sadb_spirange_max; |
| 155 | uint32_t sadb_spirange_reserved; | 155 | __u32 sadb_spirange_reserved; |
| 156 | } __attribute__((packed)); | 156 | } __attribute__((packed)); |
| 157 | /* sizeof(struct sadb_spirange) == 16 */ | 157 | /* sizeof(struct sadb_spirange) == 16 */ |
| 158 | 158 | ||
| 159 | struct sadb_x_kmprivate { | 159 | struct sadb_x_kmprivate { |
| 160 | uint16_t sadb_x_kmprivate_len; | 160 | __u16 sadb_x_kmprivate_len; |
| 161 | uint16_t sadb_x_kmprivate_exttype; | 161 | __u16 sadb_x_kmprivate_exttype; |
| 162 | uint32_t sadb_x_kmprivate_reserved; | 162 | __u32 sadb_x_kmprivate_reserved; |
| 163 | } __attribute__((packed)); | 163 | } __attribute__((packed)); |
| 164 | /* sizeof(struct sadb_x_kmprivate) == 8 */ | 164 | /* sizeof(struct sadb_x_kmprivate) == 8 */ |
| 165 | 165 | ||
| 166 | struct sadb_x_sa2 { | 166 | struct sadb_x_sa2 { |
| 167 | uint16_t sadb_x_sa2_len; | 167 | __u16 sadb_x_sa2_len; |
| 168 | uint16_t sadb_x_sa2_exttype; | 168 | __u16 sadb_x_sa2_exttype; |
| 169 | uint8_t sadb_x_sa2_mode; | 169 | __u8 sadb_x_sa2_mode; |
| 170 | uint8_t sadb_x_sa2_reserved1; | 170 | __u8 sadb_x_sa2_reserved1; |
| 171 | uint16_t sadb_x_sa2_reserved2; | 171 | __u16 sadb_x_sa2_reserved2; |
| 172 | uint32_t sadb_x_sa2_sequence; | 172 | __u32 sadb_x_sa2_sequence; |
| 173 | uint32_t sadb_x_sa2_reqid; | 173 | __u32 sadb_x_sa2_reqid; |
| 174 | } __attribute__((packed)); | 174 | } __attribute__((packed)); |
| 175 | /* sizeof(struct sadb_x_sa2) == 16 */ | 175 | /* sizeof(struct sadb_x_sa2) == 16 */ |
| 176 | 176 | ||
| 177 | struct sadb_x_policy { | 177 | struct sadb_x_policy { |
| 178 | uint16_t sadb_x_policy_len; | 178 | __u16 sadb_x_policy_len; |
| 179 | uint16_t sadb_x_policy_exttype; | 179 | __u16 sadb_x_policy_exttype; |
| 180 | uint16_t sadb_x_policy_type; | 180 | __u16 sadb_x_policy_type; |
| 181 | uint8_t sadb_x_policy_dir; | 181 | __u8 sadb_x_policy_dir; |
| 182 | uint8_t sadb_x_policy_reserved; | 182 | __u8 sadb_x_policy_reserved; |
| 183 | uint32_t sadb_x_policy_id; | 183 | __u32 sadb_x_policy_id; |
| 184 | uint32_t sadb_x_policy_priority; | 184 | __u32 sadb_x_policy_priority; |
| 185 | } __attribute__((packed)); | 185 | } __attribute__((packed)); |
| 186 | /* sizeof(struct sadb_x_policy) == 16 */ | 186 | /* sizeof(struct sadb_x_policy) == 16 */ |
| 187 | 187 | ||
| 188 | struct sadb_x_ipsecrequest { | 188 | struct sadb_x_ipsecrequest { |
| 189 | uint16_t sadb_x_ipsecrequest_len; | 189 | __u16 sadb_x_ipsecrequest_len; |
| 190 | uint16_t sadb_x_ipsecrequest_proto; | 190 | __u16 sadb_x_ipsecrequest_proto; |
| 191 | uint8_t sadb_x_ipsecrequest_mode; | 191 | __u8 sadb_x_ipsecrequest_mode; |
| 192 | uint8_t sadb_x_ipsecrequest_level; | 192 | __u8 sadb_x_ipsecrequest_level; |
| 193 | uint16_t sadb_x_ipsecrequest_reserved1; | 193 | __u16 sadb_x_ipsecrequest_reserved1; |
| 194 | uint32_t sadb_x_ipsecrequest_reqid; | 194 | __u32 sadb_x_ipsecrequest_reqid; |
| 195 | uint32_t sadb_x_ipsecrequest_reserved2; | 195 | __u32 sadb_x_ipsecrequest_reserved2; |
| 196 | } __attribute__((packed)); | 196 | } __attribute__((packed)); |
| 197 | /* sizeof(struct sadb_x_ipsecrequest) == 16 */ | 197 | /* sizeof(struct sadb_x_ipsecrequest) == 16 */ |
| 198 | 198 | ||
| @@ -200,38 +200,38 @@ struct sadb_x_ipsecrequest { | |||
| 200 | * type of NAT-T is supported, draft-ietf-ipsec-udp-encaps-06 | 200 | * type of NAT-T is supported, draft-ietf-ipsec-udp-encaps-06 |
| 201 | */ | 201 | */ |
| 202 | struct sadb_x_nat_t_type { | 202 | struct sadb_x_nat_t_type { |
| 203 | uint16_t sadb_x_nat_t_type_len; | 203 | __u16 sadb_x_nat_t_type_len; |
| 204 | uint16_t sadb_x_nat_t_type_exttype; | 204 | __u16 sadb_x_nat_t_type_exttype; |
| 205 | uint8_t sadb_x_nat_t_type_type; | 205 | __u8 sadb_x_nat_t_type_type; |
| 206 | uint8_t sadb_x_nat_t_type_reserved[3]; | 206 | __u8 sadb_x_nat_t_type_reserved[3]; |
| 207 | } __attribute__((packed)); | 207 | } __attribute__((packed)); |
| 208 | /* sizeof(struct sadb_x_nat_t_type) == 8 */ | 208 | /* sizeof(struct sadb_x_nat_t_type) == 8 */ |
| 209 | 209 | ||
| 210 | /* Pass a NAT Traversal port (Source or Dest port) */ | 210 | /* Pass a NAT Traversal port (Source or Dest port) */ |
| 211 | struct sadb_x_nat_t_port { | 211 | struct sadb_x_nat_t_port { |
| 212 | uint16_t sadb_x_nat_t_port_len; | 212 | __u16 sadb_x_nat_t_port_len; |
| 213 | uint16_t sadb_x_nat_t_port_exttype; | 213 | __u16 sadb_x_nat_t_port_exttype; |
| 214 | __be16 sadb_x_nat_t_port_port; | 214 | __be16 sadb_x_nat_t_port_port; |
| 215 | uint16_t sadb_x_nat_t_port_reserved; | 215 | __u16 sadb_x_nat_t_port_reserved; |
| 216 | } __attribute__((packed)); | 216 | } __attribute__((packed)); |
| 217 | /* sizeof(struct sadb_x_nat_t_port) == 8 */ | 217 | /* sizeof(struct sadb_x_nat_t_port) == 8 */ |
| 218 | 218 | ||
| 219 | /* Generic LSM security context */ | 219 | /* Generic LSM security context */ |
| 220 | struct sadb_x_sec_ctx { | 220 | struct sadb_x_sec_ctx { |
| 221 | uint16_t sadb_x_sec_len; | 221 | __u16 sadb_x_sec_len; |
| 222 | uint16_t sadb_x_sec_exttype; | 222 | __u16 sadb_x_sec_exttype; |
| 223 | uint8_t sadb_x_ctx_alg; /* LSMs: e.g., selinux == 1 */ | 223 | __u8 sadb_x_ctx_alg; /* LSMs: e.g., selinux == 1 */ |
| 224 | uint8_t sadb_x_ctx_doi; | 224 | __u8 sadb_x_ctx_doi; |
| 225 | uint16_t sadb_x_ctx_len; | 225 | __u16 sadb_x_ctx_len; |
| 226 | } __attribute__((packed)); | 226 | } __attribute__((packed)); |
| 227 | /* sizeof(struct sadb_sec_ctx) = 8 */ | 227 | /* sizeof(struct sadb_sec_ctx) = 8 */ |
| 228 | 228 | ||
| 229 | /* Used by MIGRATE to pass addresses IKE will use to perform | 229 | /* Used by MIGRATE to pass addresses IKE will use to perform |
| 230 | * negotiation with the peer */ | 230 | * negotiation with the peer */ |
| 231 | struct sadb_x_kmaddress { | 231 | struct sadb_x_kmaddress { |
| 232 | uint16_t sadb_x_kmaddress_len; | 232 | __u16 sadb_x_kmaddress_len; |
| 233 | uint16_t sadb_x_kmaddress_exttype; | 233 | __u16 sadb_x_kmaddress_exttype; |
| 234 | uint32_t sadb_x_kmaddress_reserved; | 234 | __u32 sadb_x_kmaddress_reserved; |
| 235 | } __attribute__((packed)); | 235 | } __attribute__((packed)); |
| 236 | /* sizeof(struct sadb_x_kmaddress) == 8 */ | 236 | /* sizeof(struct sadb_x_kmaddress) == 8 */ |
| 237 | 237 | ||
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/ppp_defs.h b/include/linux/ppp_defs.h index 1c866bda2018..0f93ed6b4a88 100644 --- a/include/linux/ppp_defs.h +++ b/include/linux/ppp_defs.h | |||
| @@ -177,8 +177,8 @@ struct ppp_comp_stats { | |||
| 177 | * the last NP packet was sent or received. | 177 | * the last NP packet was sent or received. |
| 178 | */ | 178 | */ |
| 179 | struct ppp_idle { | 179 | struct ppp_idle { |
| 180 | time_t xmit_idle; /* time since last NP packet sent */ | 180 | __kernel_time_t xmit_idle; /* time since last NP packet sent */ |
| 181 | time_t recv_idle; /* time since last NP packet received */ | 181 | __kernel_time_t recv_idle; /* time since last NP packet received */ |
| 182 | }; | 182 | }; |
| 183 | 183 | ||
| 184 | #endif /* _PPP_DEFS_H_ */ | 184 | #endif /* _PPP_DEFS_H_ */ |
diff --git a/include/linux/quota.h b/include/linux/quota.h index d72d5d84fde5..78c48895b12a 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h | |||
| @@ -198,6 +198,7 @@ struct mem_dqblk { | |||
| 198 | qsize_t dqb_bhardlimit; /* absolute limit on disk blks alloc */ | 198 | qsize_t dqb_bhardlimit; /* absolute limit on disk blks alloc */ |
| 199 | qsize_t dqb_bsoftlimit; /* preferred limit on disk blks */ | 199 | qsize_t dqb_bsoftlimit; /* preferred limit on disk blks */ |
| 200 | qsize_t dqb_curspace; /* current used space */ | 200 | qsize_t dqb_curspace; /* current used space */ |
| 201 | qsize_t dqb_rsvspace; /* current reserved space for delalloc*/ | ||
| 201 | qsize_t dqb_ihardlimit; /* absolute limit on allocated inodes */ | 202 | qsize_t dqb_ihardlimit; /* absolute limit on allocated inodes */ |
| 202 | qsize_t dqb_isoftlimit; /* preferred inode limit */ | 203 | qsize_t dqb_isoftlimit; /* preferred inode limit */ |
| 203 | qsize_t dqb_curinodes; /* current # allocated inodes */ | 204 | qsize_t dqb_curinodes; /* current # allocated inodes */ |
| @@ -276,8 +277,6 @@ struct dquot { | |||
| 276 | struct mem_dqblk dq_dqb; /* Diskquota usage */ | 277 | struct mem_dqblk dq_dqb; /* Diskquota usage */ |
| 277 | }; | 278 | }; |
| 278 | 279 | ||
| 279 | #define NODQUOT (struct dquot *)NULL | ||
| 280 | |||
| 281 | #define QUOTA_OK 0 | 280 | #define QUOTA_OK 0 |
| 282 | #define NO_QUOTA 1 | 281 | #define NO_QUOTA 1 |
| 283 | 282 | ||
| @@ -308,6 +307,14 @@ struct dquot_operations { | |||
| 308 | int (*release_dquot) (struct dquot *); /* Quota is going to be deleted from disk */ | 307 | int (*release_dquot) (struct dquot *); /* Quota is going to be deleted from disk */ |
| 309 | int (*mark_dirty) (struct dquot *); /* Dquot is marked dirty */ | 308 | int (*mark_dirty) (struct dquot *); /* Dquot is marked dirty */ |
| 310 | int (*write_info) (struct super_block *, int); /* Write of quota "superblock" */ | 309 | int (*write_info) (struct super_block *, int); /* Write of quota "superblock" */ |
| 310 | /* reserve quota for delayed block allocation */ | ||
| 311 | int (*reserve_space) (struct inode *, qsize_t, int); | ||
| 312 | /* claim reserved quota for delayed alloc */ | ||
| 313 | int (*claim_space) (struct inode *, qsize_t); | ||
| 314 | /* release rsved quota for delayed alloc */ | ||
| 315 | void (*release_rsv) (struct inode *, qsize_t); | ||
| 316 | /* get reserved quota for delayed alloc */ | ||
| 317 | qsize_t (*get_reserved_space) (struct inode *); | ||
| 311 | }; | 318 | }; |
| 312 | 319 | ||
| 313 | /* Operations handling requests from userspace */ | 320 | /* Operations handling requests from userspace */ |
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index 0b35b3a1be05..36353d95c8db 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h | |||
| @@ -35,6 +35,11 @@ void dquot_destroy(struct dquot *dquot); | |||
| 35 | int dquot_alloc_space(struct inode *inode, qsize_t number, int prealloc); | 35 | int dquot_alloc_space(struct inode *inode, qsize_t number, int prealloc); |
| 36 | int dquot_alloc_inode(const struct inode *inode, qsize_t number); | 36 | int dquot_alloc_inode(const struct inode *inode, qsize_t number); |
| 37 | 37 | ||
| 38 | int dquot_reserve_space(struct inode *inode, qsize_t number, int prealloc); | ||
| 39 | int dquot_claim_space(struct inode *inode, qsize_t number); | ||
| 40 | void dquot_release_reserved_space(struct inode *inode, qsize_t number); | ||
| 41 | qsize_t dquot_get_reserved_space(struct inode *inode); | ||
| 42 | |||
| 38 | int dquot_free_space(struct inode *inode, qsize_t number); | 43 | int dquot_free_space(struct inode *inode, qsize_t number); |
| 39 | int dquot_free_inode(const struct inode *inode, qsize_t number); | 44 | int dquot_free_inode(const struct inode *inode, qsize_t number); |
| 40 | 45 | ||
| @@ -183,6 +188,16 @@ static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr) | |||
| 183 | return ret; | 188 | return ret; |
| 184 | } | 189 | } |
| 185 | 190 | ||
| 191 | static inline int vfs_dq_reserve_space(struct inode *inode, qsize_t nr) | ||
| 192 | { | ||
| 193 | if (sb_any_quota_active(inode->i_sb)) { | ||
| 194 | /* Used space is updated in alloc_space() */ | ||
| 195 | if (inode->i_sb->dq_op->reserve_space(inode, nr, 0) == NO_QUOTA) | ||
| 196 | return 1; | ||
| 197 | } | ||
| 198 | return 0; | ||
| 199 | } | ||
| 200 | |||
| 186 | static inline int vfs_dq_alloc_inode(struct inode *inode) | 201 | static inline int vfs_dq_alloc_inode(struct inode *inode) |
| 187 | { | 202 | { |
| 188 | if (sb_any_quota_active(inode->i_sb)) { | 203 | if (sb_any_quota_active(inode->i_sb)) { |
| @@ -193,6 +208,31 @@ static inline int vfs_dq_alloc_inode(struct inode *inode) | |||
| 193 | return 0; | 208 | return 0; |
| 194 | } | 209 | } |
| 195 | 210 | ||
| 211 | /* | ||
| 212 | * Convert in-memory reserved quotas to real consumed quotas | ||
| 213 | */ | ||
| 214 | static inline int vfs_dq_claim_space(struct inode *inode, qsize_t nr) | ||
| 215 | { | ||
| 216 | if (sb_any_quota_active(inode->i_sb)) { | ||
| 217 | if (inode->i_sb->dq_op->claim_space(inode, nr) == NO_QUOTA) | ||
| 218 | return 1; | ||
| 219 | } else | ||
| 220 | inode_add_bytes(inode, nr); | ||
| 221 | |||
| 222 | mark_inode_dirty(inode); | ||
| 223 | return 0; | ||
| 224 | } | ||
| 225 | |||
| 226 | /* | ||
| 227 | * Release reserved (in-memory) quotas | ||
| 228 | */ | ||
| 229 | static inline | ||
| 230 | void vfs_dq_release_reservation_space(struct inode *inode, qsize_t nr) | ||
| 231 | { | ||
| 232 | if (sb_any_quota_active(inode->i_sb)) | ||
| 233 | inode->i_sb->dq_op->release_rsv(inode, nr); | ||
| 234 | } | ||
| 235 | |||
| 196 | static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr) | 236 | static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr) |
| 197 | { | 237 | { |
| 198 | if (sb_any_quota_active(inode->i_sb)) | 238 | if (sb_any_quota_active(inode->i_sb)) |
| @@ -339,6 +379,22 @@ static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr) | |||
| 339 | return 0; | 379 | return 0; |
| 340 | } | 380 | } |
| 341 | 381 | ||
| 382 | static inline int vfs_dq_reserve_space(struct inode *inode, qsize_t nr) | ||
| 383 | { | ||
| 384 | return 0; | ||
| 385 | } | ||
| 386 | |||
| 387 | static inline int vfs_dq_claim_space(struct inode *inode, qsize_t nr) | ||
| 388 | { | ||
| 389 | return vfs_dq_alloc_space(inode, nr); | ||
| 390 | } | ||
| 391 | |||
| 392 | static inline | ||
| 393 | int vfs_dq_release_reservation_space(struct inode *inode, qsize_t nr) | ||
| 394 | { | ||
| 395 | return 0; | ||
| 396 | } | ||
| 397 | |||
| 342 | static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr) | 398 | static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr) |
| 343 | { | 399 | { |
| 344 | inode_sub_bytes(inode, nr); | 400 | inode_sub_bytes(inode, nr); |
| @@ -354,67 +410,48 @@ static inline void vfs_dq_free_space(struct inode *inode, qsize_t nr) | |||
| 354 | 410 | ||
| 355 | static inline int vfs_dq_prealloc_block_nodirty(struct inode *inode, qsize_t nr) | 411 | static inline int vfs_dq_prealloc_block_nodirty(struct inode *inode, qsize_t nr) |
| 356 | { | 412 | { |
| 357 | return vfs_dq_prealloc_space_nodirty(inode, | 413 | return vfs_dq_prealloc_space_nodirty(inode, nr << inode->i_blkbits); |
| 358 | nr << inode->i_sb->s_blocksize_bits); | ||
| 359 | } | 414 | } |
| 360 | 415 | ||
| 361 | static inline int vfs_dq_prealloc_block(struct inode *inode, qsize_t nr) | 416 | static inline int vfs_dq_prealloc_block(struct inode *inode, qsize_t nr) |
| 362 | { | 417 | { |
| 363 | return vfs_dq_prealloc_space(inode, | 418 | return vfs_dq_prealloc_space(inode, nr << inode->i_blkbits); |
| 364 | nr << inode->i_sb->s_blocksize_bits); | ||
| 365 | } | 419 | } |
| 366 | 420 | ||
| 367 | static inline int vfs_dq_alloc_block_nodirty(struct inode *inode, qsize_t nr) | 421 | static inline int vfs_dq_alloc_block_nodirty(struct inode *inode, qsize_t nr) |
| 368 | { | 422 | { |
| 369 | return vfs_dq_alloc_space_nodirty(inode, | 423 | return vfs_dq_alloc_space_nodirty(inode, nr << inode->i_blkbits); |
| 370 | nr << inode->i_sb->s_blocksize_bits); | ||
| 371 | } | 424 | } |
| 372 | 425 | ||
| 373 | static inline int vfs_dq_alloc_block(struct inode *inode, qsize_t nr) | 426 | static inline int vfs_dq_alloc_block(struct inode *inode, qsize_t nr) |
| 374 | { | 427 | { |
| 375 | return vfs_dq_alloc_space(inode, | 428 | return vfs_dq_alloc_space(inode, nr << inode->i_blkbits); |
| 376 | nr << inode->i_sb->s_blocksize_bits); | 429 | } |
| 430 | |||
| 431 | static inline int vfs_dq_reserve_block(struct inode *inode, qsize_t nr) | ||
| 432 | { | ||
| 433 | return vfs_dq_reserve_space(inode, nr << inode->i_blkbits); | ||
| 434 | } | ||
| 435 | |||
| 436 | static inline int vfs_dq_claim_block(struct inode *inode, qsize_t nr) | ||
| 437 | { | ||
| 438 | return vfs_dq_claim_space(inode, nr << inode->i_blkbits); | ||
| 439 | } | ||
| 440 | |||
| 441 | static inline | ||
| 442 | void vfs_dq_release_reservation_block(struct inode *inode, qsize_t nr) | ||
| 443 | { | ||
| 444 | vfs_dq_release_reservation_space(inode, nr << inode->i_blkbits); | ||
| 377 | } | 445 | } |
| 378 | 446 | ||
| 379 | static inline void vfs_dq_free_block_nodirty(struct inode *inode, qsize_t nr) | 447 | static inline void vfs_dq_free_block_nodirty(struct inode *inode, qsize_t nr) |
| 380 | { | 448 | { |
| 381 | vfs_dq_free_space_nodirty(inode, nr << inode->i_sb->s_blocksize_bits); | 449 | vfs_dq_free_space_nodirty(inode, nr << inode->i_blkbits); |
| 382 | } | 450 | } |
| 383 | 451 | ||
| 384 | static inline void vfs_dq_free_block(struct inode *inode, qsize_t nr) | 452 | static inline void vfs_dq_free_block(struct inode *inode, qsize_t nr) |
| 385 | { | 453 | { |
| 386 | vfs_dq_free_space(inode, nr << inode->i_sb->s_blocksize_bits); | 454 | vfs_dq_free_space(inode, nr << inode->i_blkbits); |
| 387 | } | 455 | } |
| 388 | 456 | ||
| 389 | /* | ||
| 390 | * Define uppercase equivalents for compatibility with old function names | ||
| 391 | * Can go away when we think all users have been converted (15/04/2008) | ||
| 392 | */ | ||
| 393 | #define DQUOT_INIT(inode) vfs_dq_init(inode) | ||
| 394 | #define DQUOT_DROP(inode) vfs_dq_drop(inode) | ||
| 395 | #define DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr) \ | ||
| 396 | vfs_dq_prealloc_space_nodirty(inode, nr) | ||
| 397 | #define DQUOT_PREALLOC_SPACE(inode, nr) vfs_dq_prealloc_space(inode, nr) | ||
| 398 | #define DQUOT_ALLOC_SPACE_NODIRTY(inode, nr) \ | ||
| 399 | vfs_dq_alloc_space_nodirty(inode, nr) | ||
| 400 | #define DQUOT_ALLOC_SPACE(inode, nr) vfs_dq_alloc_space(inode, nr) | ||
| 401 | #define DQUOT_PREALLOC_BLOCK_NODIRTY(inode, nr) \ | ||
| 402 | vfs_dq_prealloc_block_nodirty(inode, nr) | ||
| 403 | #define DQUOT_PREALLOC_BLOCK(inode, nr) vfs_dq_prealloc_block(inode, nr) | ||
| 404 | #define DQUOT_ALLOC_BLOCK_NODIRTY(inode, nr) \ | ||
| 405 | vfs_dq_alloc_block_nodirty(inode, nr) | ||
| 406 | #define DQUOT_ALLOC_BLOCK(inode, nr) vfs_dq_alloc_block(inode, nr) | ||
| 407 | #define DQUOT_ALLOC_INODE(inode) vfs_dq_alloc_inode(inode) | ||
| 408 | #define DQUOT_FREE_SPACE_NODIRTY(inode, nr) \ | ||
| 409 | vfs_dq_free_space_nodirty(inode, nr) | ||
| 410 | #define DQUOT_FREE_SPACE(inode, nr) vfs_dq_free_space(inode, nr) | ||
| 411 | #define DQUOT_FREE_BLOCK_NODIRTY(inode, nr) \ | ||
| 412 | vfs_dq_free_block_nodirty(inode, nr) | ||
| 413 | #define DQUOT_FREE_BLOCK(inode, nr) vfs_dq_free_block(inode, nr) | ||
| 414 | #define DQUOT_FREE_INODE(inode) vfs_dq_free_inode(inode) | ||
| 415 | #define DQUOT_TRANSFER(inode, iattr) vfs_dq_transfer(inode, iattr) | ||
| 416 | #define DQUOT_SYNC(sb) vfs_dq_sync(sb) | ||
| 417 | #define DQUOT_OFF(sb, remount) vfs_dq_off(sb, remount) | ||
| 418 | #define DQUOT_ON_REMOUNT(sb) vfs_dq_quota_on_remount(sb) | ||
| 419 | |||
| 420 | #endif /* _LINUX_QUOTAOPS_ */ | 457 | #endif /* _LINUX_QUOTAOPS_ */ |
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/reiserfs_acl.h b/include/linux/reiserfs_acl.h index fe00f781a622..52240e02de02 100644 --- a/include/linux/reiserfs_acl.h +++ b/include/linux/reiserfs_acl.h | |||
| @@ -49,13 +49,12 @@ static inline int reiserfs_acl_count(size_t size) | |||
| 49 | #ifdef CONFIG_REISERFS_FS_POSIX_ACL | 49 | #ifdef CONFIG_REISERFS_FS_POSIX_ACL |
| 50 | struct posix_acl *reiserfs_get_acl(struct inode *inode, int type); | 50 | struct posix_acl *reiserfs_get_acl(struct inode *inode, int type); |
| 51 | int reiserfs_acl_chmod(struct inode *inode); | 51 | int reiserfs_acl_chmod(struct inode *inode); |
| 52 | int reiserfs_inherit_default_acl(struct inode *dir, struct dentry *dentry, | 52 | int reiserfs_inherit_default_acl(struct reiserfs_transaction_handle *th, |
| 53 | struct inode *dir, struct dentry *dentry, | ||
| 53 | struct inode *inode); | 54 | struct inode *inode); |
| 54 | int reiserfs_cache_default_acl(struct inode *dir); | 55 | int reiserfs_cache_default_acl(struct inode *dir); |
| 55 | extern int reiserfs_xattr_posix_acl_init(void) __init; | 56 | extern struct xattr_handler reiserfs_posix_acl_default_handler; |
| 56 | extern int reiserfs_xattr_posix_acl_exit(void); | 57 | extern struct xattr_handler reiserfs_posix_acl_access_handler; |
| 57 | extern struct reiserfs_xattr_handler posix_acl_default_handler; | ||
| 58 | extern struct reiserfs_xattr_handler posix_acl_access_handler; | ||
| 59 | 58 | ||
| 60 | static inline void reiserfs_init_acl_access(struct inode *inode) | 59 | static inline void reiserfs_init_acl_access(struct inode *inode) |
| 61 | { | 60 | { |
| @@ -75,16 +74,6 @@ static inline struct posix_acl *reiserfs_get_acl(struct inode *inode, int type) | |||
| 75 | return NULL; | 74 | return NULL; |
| 76 | } | 75 | } |
| 77 | 76 | ||
| 78 | static inline int reiserfs_xattr_posix_acl_init(void) | ||
| 79 | { | ||
| 80 | return 0; | ||
| 81 | } | ||
| 82 | |||
| 83 | static inline int reiserfs_xattr_posix_acl_exit(void) | ||
| 84 | { | ||
| 85 | return 0; | ||
| 86 | } | ||
| 87 | |||
| 88 | static inline int reiserfs_acl_chmod(struct inode *inode) | 77 | static inline int reiserfs_acl_chmod(struct inode *inode) |
| 89 | { | 78 | { |
| 90 | return 0; | 79 | return 0; |
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h index e356c99f0659..2245c78d5876 100644 --- a/include/linux/reiserfs_fs.h +++ b/include/linux/reiserfs_fs.h | |||
| @@ -58,8 +58,6 @@ | |||
| 58 | #define reiserfs_write_lock( sb ) lock_kernel() | 58 | #define reiserfs_write_lock( sb ) lock_kernel() |
| 59 | #define reiserfs_write_unlock( sb ) unlock_kernel() | 59 | #define reiserfs_write_unlock( sb ) unlock_kernel() |
| 60 | 60 | ||
| 61 | /* xattr stuff */ | ||
| 62 | #define REISERFS_XATTR_DIR_SEM(s) (REISERFS_SB(s)->xattr_dir_sem) | ||
| 63 | struct fid; | 61 | struct fid; |
| 64 | 62 | ||
| 65 | /* in reading the #defines, it may help to understand that they employ | 63 | /* in reading the #defines, it may help to understand that they employ |
| @@ -104,15 +102,21 @@ struct fid; | |||
| 104 | */ | 102 | */ |
| 105 | #define REISERFS_DEBUG_CODE 5 /* extra messages to help find/debug errors */ | 103 | #define REISERFS_DEBUG_CODE 5 /* extra messages to help find/debug errors */ |
| 106 | 104 | ||
| 107 | void reiserfs_warning(struct super_block *s, const char *fmt, ...); | 105 | void __reiserfs_warning(struct super_block *s, const char *id, |
| 106 | const char *func, const char *fmt, ...); | ||
| 107 | #define reiserfs_warning(s, id, fmt, args...) \ | ||
| 108 | __reiserfs_warning(s, id, __func__, fmt, ##args) | ||
| 108 | /* assertions handling */ | 109 | /* assertions handling */ |
| 109 | 110 | ||
| 110 | /** always check a condition and panic if it's false. */ | 111 | /** always check a condition and panic if it's false. */ |
| 111 | #define __RASSERT( cond, scond, format, args... ) \ | 112 | #define __RASSERT(cond, scond, format, args...) \ |
| 112 | if( !( cond ) ) \ | 113 | do { \ |
| 113 | reiserfs_panic( NULL, "reiserfs[%i]: assertion " scond " failed at " \ | 114 | if (!(cond)) \ |
| 114 | __FILE__ ":%i:%s: " format "\n", \ | 115 | reiserfs_panic(NULL, "assertion failure", "(" #cond ") at " \ |
| 115 | in_interrupt() ? -1 : task_pid_nr(current), __LINE__ , __func__ , ##args ) | 116 | __FILE__ ":%i:%s: " format "\n", \ |
| 117 | in_interrupt() ? -1 : task_pid_nr(current), \ | ||
| 118 | __LINE__, __func__ , ##args); \ | ||
| 119 | } while (0) | ||
| 116 | 120 | ||
| 117 | #define RASSERT(cond, format, args...) __RASSERT(cond, #cond, format, ##args) | 121 | #define RASSERT(cond, format, args...) __RASSERT(cond, #cond, format, ##args) |
| 118 | 122 | ||
| @@ -196,7 +200,11 @@ struct reiserfs_super_block { | |||
| 196 | __le32 s_flags; /* Right now used only by inode-attributes, if enabled */ | 200 | __le32 s_flags; /* Right now used only by inode-attributes, if enabled */ |
| 197 | unsigned char s_uuid[16]; /* filesystem unique identifier */ | 201 | unsigned char s_uuid[16]; /* filesystem unique identifier */ |
| 198 | unsigned char s_label[16]; /* filesystem volume label */ | 202 | unsigned char s_label[16]; /* filesystem volume label */ |
| 199 | char s_unused[88]; /* zero filled by mkreiserfs and | 203 | __le16 s_mnt_count; /* Count of mounts since last fsck */ |
| 204 | __le16 s_max_mnt_count; /* Maximum mounts before check */ | ||
| 205 | __le32 s_lastcheck; /* Timestamp of last fsck */ | ||
| 206 | __le32 s_check_interval; /* Interval between checks */ | ||
| 207 | char s_unused[76]; /* zero filled by mkreiserfs and | ||
| 200 | * reiserfs_convert_objectid_map_v1() | 208 | * reiserfs_convert_objectid_map_v1() |
| 201 | * so any additions must be updated | 209 | * so any additions must be updated |
| 202 | * there as well. */ | 210 | * there as well. */ |
| @@ -578,10 +586,8 @@ static inline int uniqueness2type(__u32 uniqueness) | |||
| 578 | return TYPE_DIRECT; | 586 | return TYPE_DIRECT; |
| 579 | case V1_DIRENTRY_UNIQUENESS: | 587 | case V1_DIRENTRY_UNIQUENESS: |
| 580 | return TYPE_DIRENTRY; | 588 | return TYPE_DIRENTRY; |
| 581 | default: | ||
| 582 | reiserfs_warning(NULL, "vs-500: unknown uniqueness %d", | ||
| 583 | uniqueness); | ||
| 584 | case V1_ANY_UNIQUENESS: | 589 | case V1_ANY_UNIQUENESS: |
| 590 | default: | ||
| 585 | return TYPE_ANY; | 591 | return TYPE_ANY; |
| 586 | } | 592 | } |
| 587 | } | 593 | } |
| @@ -598,9 +604,8 @@ static inline __u32 type2uniqueness(int type) | |||
| 598 | return V1_DIRECT_UNIQUENESS; | 604 | return V1_DIRECT_UNIQUENESS; |
| 599 | case TYPE_DIRENTRY: | 605 | case TYPE_DIRENTRY: |
| 600 | return V1_DIRENTRY_UNIQUENESS; | 606 | return V1_DIRENTRY_UNIQUENESS; |
| 601 | default: | ||
| 602 | reiserfs_warning(NULL, "vs-501: unknown type %d", type); | ||
| 603 | case TYPE_ANY: | 607 | case TYPE_ANY: |
| 608 | default: | ||
| 604 | return V1_ANY_UNIQUENESS; | 609 | return V1_ANY_UNIQUENESS; |
| 605 | } | 610 | } |
| 606 | } | 611 | } |
| @@ -712,9 +717,9 @@ static inline void cpu_key_k_offset_dec(struct cpu_key *key) | |||
| 712 | #define is_indirect_cpu_ih(ih) (is_indirect_cpu_key (&((ih)->ih_key))) | 717 | #define is_indirect_cpu_ih(ih) (is_indirect_cpu_key (&((ih)->ih_key))) |
| 713 | #define is_statdata_cpu_ih(ih) (is_statdata_cpu_key (&((ih)->ih_key))) | 718 | #define is_statdata_cpu_ih(ih) (is_statdata_cpu_key (&((ih)->ih_key))) |
| 714 | 719 | ||
| 715 | #define I_K_KEY_IN_ITEM(p_s_ih, p_s_key, n_blocksize) \ | 720 | #define I_K_KEY_IN_ITEM(ih, key, n_blocksize) \ |
| 716 | ( ! COMP_SHORT_KEYS(p_s_ih, p_s_key) && \ | 721 | (!COMP_SHORT_KEYS(ih, key) && \ |
| 717 | I_OFF_BYTE_IN_ITEM(p_s_ih, k_offset (p_s_key), n_blocksize) ) | 722 | I_OFF_BYTE_IN_ITEM(ih, k_offset(key), n_blocksize)) |
| 718 | 723 | ||
| 719 | /* maximal length of item */ | 724 | /* maximal length of item */ |
| 720 | #define MAX_ITEM_LEN(block_size) (block_size - BLKH_SIZE - IH_SIZE) | 725 | #define MAX_ITEM_LEN(block_size) (block_size - BLKH_SIZE - IH_SIZE) |
| @@ -770,25 +775,25 @@ struct block_head { | |||
| 770 | #define DISK_LEAF_NODE_LEVEL 1 /* Leaf node level. */ | 775 | #define DISK_LEAF_NODE_LEVEL 1 /* Leaf node level. */ |
| 771 | 776 | ||
| 772 | /* Given the buffer head of a formatted node, resolve to the block head of that node. */ | 777 | /* Given the buffer head of a formatted node, resolve to the block head of that node. */ |
| 773 | #define B_BLK_HEAD(p_s_bh) ((struct block_head *)((p_s_bh)->b_data)) | 778 | #define B_BLK_HEAD(bh) ((struct block_head *)((bh)->b_data)) |
| 774 | /* Number of items that are in buffer. */ | 779 | /* Number of items that are in buffer. */ |
| 775 | #define B_NR_ITEMS(p_s_bh) (blkh_nr_item(B_BLK_HEAD(p_s_bh))) | 780 | #define B_NR_ITEMS(bh) (blkh_nr_item(B_BLK_HEAD(bh))) |
| 776 | #define B_LEVEL(p_s_bh) (blkh_level(B_BLK_HEAD(p_s_bh))) | 781 | #define B_LEVEL(bh) (blkh_level(B_BLK_HEAD(bh))) |
| 777 | #define B_FREE_SPACE(p_s_bh) (blkh_free_space(B_BLK_HEAD(p_s_bh))) | 782 | #define B_FREE_SPACE(bh) (blkh_free_space(B_BLK_HEAD(bh))) |
| 778 | 783 | ||
| 779 | #define PUT_B_NR_ITEMS(p_s_bh,val) do { set_blkh_nr_item(B_BLK_HEAD(p_s_bh),val); } while (0) | 784 | #define PUT_B_NR_ITEMS(bh, val) do { set_blkh_nr_item(B_BLK_HEAD(bh), val); } while (0) |
| 780 | #define PUT_B_LEVEL(p_s_bh,val) do { set_blkh_level(B_BLK_HEAD(p_s_bh),val); } while (0) | 785 | #define PUT_B_LEVEL(bh, val) do { set_blkh_level(B_BLK_HEAD(bh), val); } while (0) |
| 781 | #define PUT_B_FREE_SPACE(p_s_bh,val) do { set_blkh_free_space(B_BLK_HEAD(p_s_bh),val); } while (0) | 786 | #define PUT_B_FREE_SPACE(bh, val) do { set_blkh_free_space(B_BLK_HEAD(bh), val); } while (0) |
| 782 | 787 | ||
| 783 | /* Get right delimiting key. -- little endian */ | 788 | /* Get right delimiting key. -- little endian */ |
| 784 | #define B_PRIGHT_DELIM_KEY(p_s_bh) (&(blk_right_delim_key(B_BLK_HEAD(p_s_bh)))) | 789 | #define B_PRIGHT_DELIM_KEY(bh) (&(blk_right_delim_key(B_BLK_HEAD(bh)))) |
| 785 | 790 | ||
| 786 | /* Does the buffer contain a disk leaf. */ | 791 | /* Does the buffer contain a disk leaf. */ |
| 787 | #define B_IS_ITEMS_LEVEL(p_s_bh) (B_LEVEL(p_s_bh) == DISK_LEAF_NODE_LEVEL) | 792 | #define B_IS_ITEMS_LEVEL(bh) (B_LEVEL(bh) == DISK_LEAF_NODE_LEVEL) |
| 788 | 793 | ||
| 789 | /* Does the buffer contain a disk internal node */ | 794 | /* Does the buffer contain a disk internal node */ |
| 790 | #define B_IS_KEYS_LEVEL(p_s_bh) (B_LEVEL(p_s_bh) > DISK_LEAF_NODE_LEVEL \ | 795 | #define B_IS_KEYS_LEVEL(bh) (B_LEVEL(bh) > DISK_LEAF_NODE_LEVEL \ |
| 791 | && B_LEVEL(p_s_bh) <= MAX_HEIGHT) | 796 | && B_LEVEL(bh) <= MAX_HEIGHT) |
| 792 | 797 | ||
| 793 | /***************************************************************************/ | 798 | /***************************************************************************/ |
| 794 | /* STAT DATA */ | 799 | /* STAT DATA */ |
| @@ -1138,12 +1143,13 @@ struct disk_child { | |||
| 1138 | #define put_dc_size(dc_p, val) do { (dc_p)->dc_size = cpu_to_le16(val); } while(0) | 1143 | #define put_dc_size(dc_p, val) do { (dc_p)->dc_size = cpu_to_le16(val); } while(0) |
| 1139 | 1144 | ||
| 1140 | /* Get disk child by buffer header and position in the tree node. */ | 1145 | /* Get disk child by buffer header and position in the tree node. */ |
| 1141 | #define B_N_CHILD(p_s_bh,n_pos) ((struct disk_child *)\ | 1146 | #define B_N_CHILD(bh, n_pos) ((struct disk_child *)\ |
| 1142 | ((p_s_bh)->b_data+BLKH_SIZE+B_NR_ITEMS(p_s_bh)*KEY_SIZE+DC_SIZE*(n_pos))) | 1147 | ((bh)->b_data + BLKH_SIZE + B_NR_ITEMS(bh) * KEY_SIZE + DC_SIZE * (n_pos))) |
| 1143 | 1148 | ||
| 1144 | /* Get disk child number by buffer header and position in the tree node. */ | 1149 | /* Get disk child number by buffer header and position in the tree node. */ |
| 1145 | #define B_N_CHILD_NUM(p_s_bh,n_pos) (dc_block_number(B_N_CHILD(p_s_bh,n_pos))) | 1150 | #define B_N_CHILD_NUM(bh, n_pos) (dc_block_number(B_N_CHILD(bh, n_pos))) |
| 1146 | #define PUT_B_N_CHILD_NUM(p_s_bh,n_pos, val) (put_dc_block_number(B_N_CHILD(p_s_bh,n_pos), val )) | 1151 | #define PUT_B_N_CHILD_NUM(bh, n_pos, val) \ |
| 1152 | (put_dc_block_number(B_N_CHILD(bh, n_pos), val)) | ||
| 1147 | 1153 | ||
| 1148 | /* maximal value of field child_size in structure disk_child */ | 1154 | /* maximal value of field child_size in structure disk_child */ |
| 1149 | /* child size is the combined size of all items and their headers */ | 1155 | /* child size is the combined size of all items and their headers */ |
| @@ -1214,33 +1220,33 @@ struct treepath { | |||
| 1214 | struct treepath var = {.path_length = ILLEGAL_PATH_ELEMENT_OFFSET, .reada = 0,} | 1220 | struct treepath var = {.path_length = ILLEGAL_PATH_ELEMENT_OFFSET, .reada = 0,} |
| 1215 | 1221 | ||
| 1216 | /* Get path element by path and path position. */ | 1222 | /* Get path element by path and path position. */ |
| 1217 | #define PATH_OFFSET_PELEMENT(p_s_path,n_offset) ((p_s_path)->path_elements +(n_offset)) | 1223 | #define PATH_OFFSET_PELEMENT(path, n_offset) ((path)->path_elements + (n_offset)) |
| 1218 | 1224 | ||
| 1219 | /* Get buffer header at the path by path and path position. */ | 1225 | /* Get buffer header at the path by path and path position. */ |
| 1220 | #define PATH_OFFSET_PBUFFER(p_s_path,n_offset) (PATH_OFFSET_PELEMENT(p_s_path,n_offset)->pe_buffer) | 1226 | #define PATH_OFFSET_PBUFFER(path, n_offset) (PATH_OFFSET_PELEMENT(path, n_offset)->pe_buffer) |
| 1221 | 1227 | ||
| 1222 | /* Get position in the element at the path by path and path position. */ | 1228 | /* Get position in the element at the path by path and path position. */ |
| 1223 | #define PATH_OFFSET_POSITION(p_s_path,n_offset) (PATH_OFFSET_PELEMENT(p_s_path,n_offset)->pe_position) | 1229 | #define PATH_OFFSET_POSITION(path, n_offset) (PATH_OFFSET_PELEMENT(path, n_offset)->pe_position) |
| 1224 | 1230 | ||
| 1225 | #define PATH_PLAST_BUFFER(p_s_path) (PATH_OFFSET_PBUFFER((p_s_path), (p_s_path)->path_length)) | 1231 | #define PATH_PLAST_BUFFER(path) (PATH_OFFSET_PBUFFER((path), (path)->path_length)) |
| 1226 | /* you know, to the person who didn't | 1232 | /* you know, to the person who didn't |
| 1227 | write this the macro name does not | 1233 | write this the macro name does not |
| 1228 | at first suggest what it does. | 1234 | at first suggest what it does. |
| 1229 | Maybe POSITION_FROM_PATH_END? Or | 1235 | Maybe POSITION_FROM_PATH_END? Or |
| 1230 | maybe we should just focus on | 1236 | maybe we should just focus on |
| 1231 | dumping paths... -Hans */ | 1237 | dumping paths... -Hans */ |
| 1232 | #define PATH_LAST_POSITION(p_s_path) (PATH_OFFSET_POSITION((p_s_path), (p_s_path)->path_length)) | 1238 | #define PATH_LAST_POSITION(path) (PATH_OFFSET_POSITION((path), (path)->path_length)) |
| 1233 | 1239 | ||
| 1234 | #define PATH_PITEM_HEAD(p_s_path) B_N_PITEM_HEAD(PATH_PLAST_BUFFER(p_s_path),PATH_LAST_POSITION(p_s_path)) | 1240 | #define PATH_PITEM_HEAD(path) B_N_PITEM_HEAD(PATH_PLAST_BUFFER(path), PATH_LAST_POSITION(path)) |
| 1235 | 1241 | ||
| 1236 | /* in do_balance leaf has h == 0 in contrast with path structure, | 1242 | /* in do_balance leaf has h == 0 in contrast with path structure, |
| 1237 | where root has level == 0. That is why we need these defines */ | 1243 | where root has level == 0. That is why we need these defines */ |
| 1238 | #define PATH_H_PBUFFER(p_s_path, h) PATH_OFFSET_PBUFFER (p_s_path, p_s_path->path_length - (h)) /* tb->S[h] */ | 1244 | #define PATH_H_PBUFFER(path, h) PATH_OFFSET_PBUFFER (path, path->path_length - (h)) /* tb->S[h] */ |
| 1239 | #define PATH_H_PPARENT(path, h) PATH_H_PBUFFER (path, (h) + 1) /* tb->F[h] or tb->S[0]->b_parent */ | 1245 | #define PATH_H_PPARENT(path, h) PATH_H_PBUFFER (path, (h) + 1) /* tb->F[h] or tb->S[0]->b_parent */ |
| 1240 | #define PATH_H_POSITION(path, h) PATH_OFFSET_POSITION (path, path->path_length - (h)) | 1246 | #define PATH_H_POSITION(path, h) PATH_OFFSET_POSITION (path, path->path_length - (h)) |
| 1241 | #define PATH_H_B_ITEM_ORDER(path, h) PATH_H_POSITION(path, h + 1) /* tb->S[h]->b_item_order */ | 1247 | #define PATH_H_B_ITEM_ORDER(path, h) PATH_H_POSITION(path, h + 1) /* tb->S[h]->b_item_order */ |
| 1242 | 1248 | ||
| 1243 | #define PATH_H_PATH_OFFSET(p_s_path, n_h) ((p_s_path)->path_length - (n_h)) | 1249 | #define PATH_H_PATH_OFFSET(path, n_h) ((path)->path_length - (n_h)) |
| 1244 | 1250 | ||
| 1245 | #define get_last_bh(path) PATH_PLAST_BUFFER(path) | 1251 | #define get_last_bh(path) PATH_PLAST_BUFFER(path) |
| 1246 | #define get_ih(path) PATH_PITEM_HEAD(path) | 1252 | #define get_ih(path) PATH_PITEM_HEAD(path) |
| @@ -1470,6 +1476,16 @@ struct buffer_info { | |||
| 1470 | int bi_position; | 1476 | int bi_position; |
| 1471 | }; | 1477 | }; |
| 1472 | 1478 | ||
| 1479 | static inline struct super_block *sb_from_tb(struct tree_balance *tb) | ||
| 1480 | { | ||
| 1481 | return tb ? tb->tb_sb : NULL; | ||
| 1482 | } | ||
| 1483 | |||
| 1484 | static inline struct super_block *sb_from_bi(struct buffer_info *bi) | ||
| 1485 | { | ||
| 1486 | return bi ? sb_from_tb(bi->tb) : NULL; | ||
| 1487 | } | ||
| 1488 | |||
| 1473 | /* there are 4 types of items: stat data, directory item, indirect, direct. | 1489 | /* there are 4 types of items: stat data, directory item, indirect, direct. |
| 1474 | +-------------------+------------+--------------+------------+ | 1490 | +-------------------+------------+--------------+------------+ |
| 1475 | | | k_offset | k_uniqueness | mergeable? | | 1491 | | | k_offset | k_uniqueness | mergeable? | |
| @@ -1520,7 +1536,7 @@ extern struct item_operations *item_ops[TYPE_ANY + 1]; | |||
| 1520 | #define COMP_SHORT_KEYS comp_short_keys | 1536 | #define COMP_SHORT_KEYS comp_short_keys |
| 1521 | 1537 | ||
| 1522 | /* number of blocks pointed to by the indirect item */ | 1538 | /* number of blocks pointed to by the indirect item */ |
| 1523 | #define I_UNFM_NUM(p_s_ih) ( ih_item_len(p_s_ih) / UNFM_P_SIZE ) | 1539 | #define I_UNFM_NUM(ih) (ih_item_len(ih) / UNFM_P_SIZE) |
| 1524 | 1540 | ||
| 1525 | /* the used space within the unformatted node corresponding to pos within the item pointed to by ih */ | 1541 | /* the used space within the unformatted node corresponding to pos within the item pointed to by ih */ |
| 1526 | #define I_POS_UNFM_SIZE(ih,pos,size) (((pos) == I_UNFM_NUM(ih) - 1 ) ? (size) - ih_free_space(ih) : (size)) | 1542 | #define I_POS_UNFM_SIZE(ih,pos,size) (((pos) == I_UNFM_NUM(ih) - 1 ) ? (size) - ih_free_space(ih) : (size)) |
| @@ -1623,6 +1639,10 @@ struct reiserfs_journal_header { | |||
| 1623 | #define JOURNAL_MAX_COMMIT_AGE 30 | 1639 | #define JOURNAL_MAX_COMMIT_AGE 30 |
| 1624 | #define JOURNAL_MAX_TRANS_AGE 30 | 1640 | #define JOURNAL_MAX_TRANS_AGE 30 |
| 1625 | #define JOURNAL_PER_BALANCE_CNT (3 * (MAX_HEIGHT-2) + 9) | 1641 | #define JOURNAL_PER_BALANCE_CNT (3 * (MAX_HEIGHT-2) + 9) |
| 1642 | #define JOURNAL_BLOCKS_PER_OBJECT(sb) (JOURNAL_PER_BALANCE_CNT * 3 + \ | ||
| 1643 | 2 * (REISERFS_QUOTA_INIT_BLOCKS(sb) + \ | ||
| 1644 | REISERFS_QUOTA_TRANS_BLOCKS(sb))) | ||
| 1645 | |||
| 1626 | #ifdef CONFIG_QUOTA | 1646 | #ifdef CONFIG_QUOTA |
| 1627 | /* We need to update data and inode (atime) */ | 1647 | /* We need to update data and inode (atime) */ |
| 1628 | #define REISERFS_QUOTA_TRANS_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & (1<<REISERFS_QUOTA) ? 2 : 0) | 1648 | #define REISERFS_QUOTA_TRANS_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & (1<<REISERFS_QUOTA) ? 2 : 0) |
| @@ -1697,7 +1717,7 @@ struct reiserfs_transaction_handle { | |||
| 1697 | int t_refcount; | 1717 | int t_refcount; |
| 1698 | int t_blocks_logged; /* number of blocks this writer has logged */ | 1718 | int t_blocks_logged; /* number of blocks this writer has logged */ |
| 1699 | int t_blocks_allocated; /* number of blocks this writer allocated */ | 1719 | int t_blocks_allocated; /* number of blocks this writer allocated */ |
| 1700 | unsigned long t_trans_id; /* sanity check, equals the current trans id */ | 1720 | unsigned int t_trans_id; /* sanity check, equals the current trans id */ |
| 1701 | void *t_handle_save; /* save existing current->journal_info */ | 1721 | void *t_handle_save; /* save existing current->journal_info */ |
| 1702 | unsigned displace_new_blocks:1; /* if new block allocation occurres, that block | 1722 | unsigned displace_new_blocks:1; /* if new block allocation occurres, that block |
| 1703 | should be displaced from others */ | 1723 | should be displaced from others */ |
| @@ -1773,13 +1793,13 @@ int journal_end_sync(struct reiserfs_transaction_handle *, struct super_block *, | |||
| 1773 | int journal_mark_freed(struct reiserfs_transaction_handle *, | 1793 | int journal_mark_freed(struct reiserfs_transaction_handle *, |
| 1774 | struct super_block *, b_blocknr_t blocknr); | 1794 | struct super_block *, b_blocknr_t blocknr); |
| 1775 | int journal_transaction_should_end(struct reiserfs_transaction_handle *, int); | 1795 | int journal_transaction_should_end(struct reiserfs_transaction_handle *, int); |
| 1776 | int reiserfs_in_journal(struct super_block *p_s_sb, unsigned int bmap_nr, | 1796 | int reiserfs_in_journal(struct super_block *sb, unsigned int bmap_nr, |
| 1777 | int bit_nr, int searchall, b_blocknr_t *next); | 1797 | int bit_nr, int searchall, b_blocknr_t *next); |
| 1778 | int journal_begin(struct reiserfs_transaction_handle *, | 1798 | int journal_begin(struct reiserfs_transaction_handle *, |
| 1779 | struct super_block *p_s_sb, unsigned long); | 1799 | struct super_block *sb, unsigned long); |
| 1780 | int journal_join_abort(struct reiserfs_transaction_handle *, | 1800 | int journal_join_abort(struct reiserfs_transaction_handle *, |
| 1781 | struct super_block *p_s_sb, unsigned long); | 1801 | struct super_block *sb, unsigned long); |
| 1782 | void reiserfs_journal_abort(struct super_block *sb, int errno); | 1802 | void reiserfs_abort_journal(struct super_block *sb, int errno); |
| 1783 | void reiserfs_abort(struct super_block *sb, int errno, const char *fmt, ...); | 1803 | void reiserfs_abort(struct super_block *sb, int errno, const char *fmt, ...); |
| 1784 | int reiserfs_allocate_list_bitmaps(struct super_block *s, | 1804 | int reiserfs_allocate_list_bitmaps(struct super_block *s, |
| 1785 | struct reiserfs_list_bitmap *, unsigned int); | 1805 | struct reiserfs_list_bitmap *, unsigned int); |
| @@ -1796,8 +1816,8 @@ int reiserfs_convert_objectid_map_v1(struct super_block *); | |||
| 1796 | 1816 | ||
| 1797 | /* stree.c */ | 1817 | /* stree.c */ |
| 1798 | int B_IS_IN_TREE(const struct buffer_head *); | 1818 | int B_IS_IN_TREE(const struct buffer_head *); |
| 1799 | extern void copy_item_head(struct item_head *p_v_to, | 1819 | extern void copy_item_head(struct item_head *to, |
| 1800 | const struct item_head *p_v_from); | 1820 | const struct item_head *from); |
| 1801 | 1821 | ||
| 1802 | // first key is in cpu form, second - le | 1822 | // first key is in cpu form, second - le |
| 1803 | extern int comp_short_keys(const struct reiserfs_key *le_key, | 1823 | extern int comp_short_keys(const struct reiserfs_key *le_key, |
| @@ -1832,20 +1852,20 @@ static inline void copy_key(struct reiserfs_key *to, | |||
| 1832 | memcpy(to, from, KEY_SIZE); | 1852 | memcpy(to, from, KEY_SIZE); |
| 1833 | } | 1853 | } |
| 1834 | 1854 | ||
| 1835 | int comp_items(const struct item_head *stored_ih, const struct treepath *p_s_path); | 1855 | int comp_items(const struct item_head *stored_ih, const struct treepath *path); |
| 1836 | const struct reiserfs_key *get_rkey(const struct treepath *p_s_chk_path, | 1856 | const struct reiserfs_key *get_rkey(const struct treepath *chk_path, |
| 1837 | const struct super_block *p_s_sb); | 1857 | const struct super_block *sb); |
| 1838 | int search_by_key(struct super_block *, const struct cpu_key *, | 1858 | int search_by_key(struct super_block *, const struct cpu_key *, |
| 1839 | struct treepath *, int); | 1859 | struct treepath *, int); |
| 1840 | #define search_item(s,key,path) search_by_key (s, key, path, DISK_LEAF_NODE_LEVEL) | 1860 | #define search_item(s,key,path) search_by_key (s, key, path, DISK_LEAF_NODE_LEVEL) |
| 1841 | int search_for_position_by_key(struct super_block *p_s_sb, | 1861 | int search_for_position_by_key(struct super_block *sb, |
| 1842 | const struct cpu_key *p_s_cpu_key, | 1862 | const struct cpu_key *cpu_key, |
| 1843 | struct treepath *p_s_search_path); | 1863 | struct treepath *search_path); |
| 1844 | extern void decrement_bcount(struct buffer_head *p_s_bh); | 1864 | extern void decrement_bcount(struct buffer_head *bh); |
| 1845 | void decrement_counters_in_path(struct treepath *p_s_search_path); | 1865 | void decrement_counters_in_path(struct treepath *search_path); |
| 1846 | void pathrelse(struct treepath *p_s_search_path); | 1866 | void pathrelse(struct treepath *search_path); |
| 1847 | int reiserfs_check_path(struct treepath *p); | 1867 | int reiserfs_check_path(struct treepath *p); |
| 1848 | void pathrelse_and_restore(struct super_block *s, struct treepath *p_s_search_path); | 1868 | void pathrelse_and_restore(struct super_block *s, struct treepath *search_path); |
| 1849 | 1869 | ||
| 1850 | int reiserfs_insert_item(struct reiserfs_transaction_handle *th, | 1870 | int reiserfs_insert_item(struct reiserfs_transaction_handle *th, |
| 1851 | struct treepath *path, | 1871 | struct treepath *path, |
| @@ -1868,14 +1888,14 @@ int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th, | |||
| 1868 | int reiserfs_delete_item(struct reiserfs_transaction_handle *th, | 1888 | int reiserfs_delete_item(struct reiserfs_transaction_handle *th, |
| 1869 | struct treepath *path, | 1889 | struct treepath *path, |
| 1870 | const struct cpu_key *key, | 1890 | const struct cpu_key *key, |
| 1871 | struct inode *inode, struct buffer_head *p_s_un_bh); | 1891 | struct inode *inode, struct buffer_head *un_bh); |
| 1872 | 1892 | ||
| 1873 | void reiserfs_delete_solid_item(struct reiserfs_transaction_handle *th, | 1893 | void reiserfs_delete_solid_item(struct reiserfs_transaction_handle *th, |
| 1874 | struct inode *inode, struct reiserfs_key *key); | 1894 | struct inode *inode, struct reiserfs_key *key); |
| 1875 | int reiserfs_delete_object(struct reiserfs_transaction_handle *th, | 1895 | int reiserfs_delete_object(struct reiserfs_transaction_handle *th, |
| 1876 | struct inode *p_s_inode); | 1896 | struct inode *inode); |
| 1877 | int reiserfs_do_truncate(struct reiserfs_transaction_handle *th, | 1897 | int reiserfs_do_truncate(struct reiserfs_transaction_handle *th, |
| 1878 | struct inode *p_s_inode, struct page *, | 1898 | struct inode *inode, struct page *, |
| 1879 | int update_timestamps); | 1899 | int update_timestamps); |
| 1880 | 1900 | ||
| 1881 | #define i_block_size(inode) ((inode)->i_sb->s_blocksize) | 1901 | #define i_block_size(inode) ((inode)->i_sb->s_blocksize) |
| @@ -1919,10 +1939,12 @@ void make_le_item_head(struct item_head *ih, const struct cpu_key *key, | |||
| 1919 | loff_t offset, int type, int length, int entry_count); | 1939 | loff_t offset, int type, int length, int entry_count); |
| 1920 | struct inode *reiserfs_iget(struct super_block *s, const struct cpu_key *key); | 1940 | struct inode *reiserfs_iget(struct super_block *s, const struct cpu_key *key); |
| 1921 | 1941 | ||
| 1942 | struct reiserfs_security_handle; | ||
| 1922 | int reiserfs_new_inode(struct reiserfs_transaction_handle *th, | 1943 | int reiserfs_new_inode(struct reiserfs_transaction_handle *th, |
| 1923 | struct inode *dir, int mode, | 1944 | struct inode *dir, int mode, |
| 1924 | const char *symname, loff_t i_size, | 1945 | const char *symname, loff_t i_size, |
| 1925 | struct dentry *dentry, struct inode *inode); | 1946 | struct dentry *dentry, struct inode *inode, |
| 1947 | struct reiserfs_security_handle *security); | ||
| 1926 | 1948 | ||
| 1927 | void reiserfs_update_sd_size(struct reiserfs_transaction_handle *th, | 1949 | void reiserfs_update_sd_size(struct reiserfs_transaction_handle *th, |
| 1928 | struct inode *inode, loff_t size); | 1950 | struct inode *inode, loff_t size); |
| @@ -1980,7 +2002,7 @@ int reiserfs_global_version_in_proc(char *buffer, char **start, off_t offset, | |||
| 1980 | #define PROC_INFO_MAX( sb, field, value ) VOID_V | 2002 | #define PROC_INFO_MAX( sb, field, value ) VOID_V |
| 1981 | #define PROC_INFO_INC( sb, field ) VOID_V | 2003 | #define PROC_INFO_INC( sb, field ) VOID_V |
| 1982 | #define PROC_INFO_ADD( sb, field, val ) VOID_V | 2004 | #define PROC_INFO_ADD( sb, field, val ) VOID_V |
| 1983 | #define PROC_INFO_BH_STAT( p_s_sb, p_s_bh, n_node_level ) VOID_V | 2005 | #define PROC_INFO_BH_STAT(sb, bh, n_node_level) VOID_V |
| 1984 | #endif | 2006 | #endif |
| 1985 | 2007 | ||
| 1986 | /* dir.c */ | 2008 | /* dir.c */ |
| @@ -1988,6 +2010,7 @@ extern const struct inode_operations reiserfs_dir_inode_operations; | |||
| 1988 | extern const struct inode_operations reiserfs_symlink_inode_operations; | 2010 | extern const struct inode_operations reiserfs_symlink_inode_operations; |
| 1989 | extern const struct inode_operations reiserfs_special_inode_operations; | 2011 | extern const struct inode_operations reiserfs_special_inode_operations; |
| 1990 | extern const struct file_operations reiserfs_dir_operations; | 2012 | extern const struct file_operations reiserfs_dir_operations; |
| 2013 | int reiserfs_readdir_dentry(struct dentry *, void *, filldir_t, loff_t *); | ||
| 1991 | 2014 | ||
| 1992 | /* tail_conversion.c */ | 2015 | /* tail_conversion.c */ |
| 1993 | int direct2indirect(struct reiserfs_transaction_handle *, struct inode *, | 2016 | int direct2indirect(struct reiserfs_transaction_handle *, struct inode *, |
| @@ -2004,13 +2027,20 @@ extern const struct address_space_operations reiserfs_address_space_operations; | |||
| 2004 | 2027 | ||
| 2005 | /* fix_nodes.c */ | 2028 | /* fix_nodes.c */ |
| 2006 | 2029 | ||
| 2007 | int fix_nodes(int n_op_mode, struct tree_balance *p_s_tb, | 2030 | int fix_nodes(int n_op_mode, struct tree_balance *tb, |
| 2008 | struct item_head *p_s_ins_ih, const void *); | 2031 | struct item_head *ins_ih, const void *); |
| 2009 | void unfix_nodes(struct tree_balance *); | 2032 | void unfix_nodes(struct tree_balance *); |
| 2010 | 2033 | ||
| 2011 | /* prints.c */ | 2034 | /* prints.c */ |
| 2012 | void reiserfs_panic(struct super_block *s, const char *fmt, ...) | 2035 | void __reiserfs_panic(struct super_block *s, const char *id, |
| 2036 | const char *function, const char *fmt, ...) | ||
| 2013 | __attribute__ ((noreturn)); | 2037 | __attribute__ ((noreturn)); |
| 2038 | #define reiserfs_panic(s, id, fmt, args...) \ | ||
| 2039 | __reiserfs_panic(s, id, __func__, fmt, ##args) | ||
| 2040 | void __reiserfs_error(struct super_block *s, const char *id, | ||
| 2041 | const char *function, const char *fmt, ...); | ||
| 2042 | #define reiserfs_error(s, id, fmt, args...) \ | ||
| 2043 | __reiserfs_error(s, id, __func__, fmt, ##args) | ||
| 2014 | void reiserfs_info(struct super_block *s, const char *fmt, ...); | 2044 | void reiserfs_info(struct super_block *s, const char *fmt, ...); |
| 2015 | void reiserfs_debug(struct super_block *s, int level, const char *fmt, ...); | 2045 | void reiserfs_debug(struct super_block *s, int level, const char *fmt, ...); |
| 2016 | void print_indirect_item(struct buffer_head *bh, int item_num); | 2046 | void print_indirect_item(struct buffer_head *bh, int item_num); |
| @@ -2047,7 +2077,7 @@ void leaf_paste_in_buffer(struct buffer_info *bi, int pasted_item_num, | |||
| 2047 | int zeros_number); | 2077 | int zeros_number); |
| 2048 | void leaf_cut_from_buffer(struct buffer_info *bi, int cut_item_num, | 2078 | void leaf_cut_from_buffer(struct buffer_info *bi, int cut_item_num, |
| 2049 | int pos_in_item, int cut_size); | 2079 | int pos_in_item, int cut_size); |
| 2050 | void leaf_paste_entries(struct buffer_head *bh, int item_num, int before, | 2080 | void leaf_paste_entries(struct buffer_info *bi, int item_num, int before, |
| 2051 | int new_entry_count, struct reiserfs_de_head *new_dehs, | 2081 | int new_entry_count, struct reiserfs_de_head *new_dehs, |
| 2052 | const char *records, int paste_size); | 2082 | const char *records, int paste_size); |
| 2053 | /* ibalance.c */ | 2083 | /* ibalance.c */ |
| @@ -2203,6 +2233,6 @@ long reiserfs_compat_ioctl(struct file *filp, | |||
| 2203 | unsigned int cmd, unsigned long arg); | 2233 | unsigned int cmd, unsigned long arg); |
| 2204 | int reiserfs_unpack(struct inode *inode, struct file *filp); | 2234 | int reiserfs_unpack(struct inode *inode, struct file *filp); |
| 2205 | 2235 | ||
| 2206 | |||
| 2207 | #endif /* __KERNEL__ */ | 2236 | #endif /* __KERNEL__ */ |
| 2237 | |||
| 2208 | #endif /* _LINUX_REISER_FS_H */ | 2238 | #endif /* _LINUX_REISER_FS_H */ |
diff --git a/include/linux/reiserfs_fs_i.h b/include/linux/reiserfs_fs_i.h index ce3663fb0101..76360b36ac33 100644 --- a/include/linux/reiserfs_fs_i.h +++ b/include/linux/reiserfs_fs_i.h | |||
| @@ -51,7 +51,7 @@ struct reiserfs_inode_info { | |||
| 51 | /* we use these for fsync or O_SYNC to decide which transaction | 51 | /* we use these for fsync or O_SYNC to decide which transaction |
| 52 | ** needs to be committed in order for this inode to be properly | 52 | ** needs to be committed in order for this inode to be properly |
| 53 | ** flushed */ | 53 | ** flushed */ |
| 54 | unsigned long i_trans_id; | 54 | unsigned int i_trans_id; |
| 55 | struct reiserfs_journal_list *i_jl; | 55 | struct reiserfs_journal_list *i_jl; |
| 56 | struct mutex i_mmap; | 56 | struct mutex i_mmap; |
| 57 | #ifdef CONFIG_REISERFS_FS_POSIX_ACL | 57 | #ifdef CONFIG_REISERFS_FS_POSIX_ACL |
| @@ -59,7 +59,7 @@ struct reiserfs_inode_info { | |||
| 59 | struct posix_acl *i_acl_default; | 59 | struct posix_acl *i_acl_default; |
| 60 | #endif | 60 | #endif |
| 61 | #ifdef CONFIG_REISERFS_FS_XATTR | 61 | #ifdef CONFIG_REISERFS_FS_XATTR |
| 62 | struct rw_semaphore xattr_sem; | 62 | struct rw_semaphore i_xattr_sem; |
| 63 | #endif | 63 | #endif |
| 64 | struct inode vfs_inode; | 64 | struct inode vfs_inode; |
| 65 | }; | 65 | }; |
diff --git a/include/linux/reiserfs_fs_sb.h b/include/linux/reiserfs_fs_sb.h index bda6b562a1e0..5621d87c4479 100644 --- a/include/linux/reiserfs_fs_sb.h +++ b/include/linux/reiserfs_fs_sb.h | |||
| @@ -14,7 +14,7 @@ typedef enum { | |||
| 14 | } reiserfs_super_block_flags; | 14 | } reiserfs_super_block_flags; |
| 15 | 15 | ||
| 16 | /* struct reiserfs_super_block accessors/mutators | 16 | /* struct reiserfs_super_block accessors/mutators |
| 17 | * since this is a disk structure, it will always be in | 17 | * since this is a disk structure, it will always be in |
| 18 | * little endian format. */ | 18 | * little endian format. */ |
| 19 | #define sb_block_count(sbp) (le32_to_cpu((sbp)->s_v1.s_block_count)) | 19 | #define sb_block_count(sbp) (le32_to_cpu((sbp)->s_v1.s_block_count)) |
| 20 | #define set_sb_block_count(sbp,v) ((sbp)->s_v1.s_block_count = cpu_to_le32(v)) | 20 | #define set_sb_block_count(sbp,v) ((sbp)->s_v1.s_block_count = cpu_to_le32(v)) |
| @@ -73,6 +73,9 @@ typedef enum { | |||
| 73 | #define sb_version(sbp) (le16_to_cpu((sbp)->s_v1.s_version)) | 73 | #define sb_version(sbp) (le16_to_cpu((sbp)->s_v1.s_version)) |
| 74 | #define set_sb_version(sbp,v) ((sbp)->s_v1.s_version = cpu_to_le16(v)) | 74 | #define set_sb_version(sbp,v) ((sbp)->s_v1.s_version = cpu_to_le16(v)) |
| 75 | 75 | ||
| 76 | #define sb_mnt_count(sbp) (le16_to_cpu((sbp)->s_mnt_count)) | ||
| 77 | #define set_sb_mnt_count(sbp, v) ((sbp)->s_mnt_count = cpu_to_le16(v)) | ||
| 78 | |||
| 76 | #define sb_reserved_for_journal(sbp) \ | 79 | #define sb_reserved_for_journal(sbp) \ |
| 77 | (le16_to_cpu((sbp)->s_v1.s_reserved_for_journal)) | 80 | (le16_to_cpu((sbp)->s_v1.s_reserved_for_journal)) |
| 78 | #define set_sb_reserved_for_journal(sbp,v) \ | 81 | #define set_sb_reserved_for_journal(sbp,v) \ |
| @@ -80,16 +83,16 @@ typedef enum { | |||
| 80 | 83 | ||
| 81 | /* LOGGING -- */ | 84 | /* LOGGING -- */ |
| 82 | 85 | ||
| 83 | /* These all interelate for performance. | 86 | /* These all interelate for performance. |
| 84 | ** | 87 | ** |
| 85 | ** If the journal block count is smaller than n transactions, you lose speed. | 88 | ** If the journal block count is smaller than n transactions, you lose speed. |
| 86 | ** I don't know what n is yet, I'm guessing 8-16. | 89 | ** I don't know what n is yet, I'm guessing 8-16. |
| 87 | ** | 90 | ** |
| 88 | ** typical transaction size depends on the application, how often fsync is | 91 | ** typical transaction size depends on the application, how often fsync is |
| 89 | ** called, and how many metadata blocks you dirty in a 30 second period. | 92 | ** called, and how many metadata blocks you dirty in a 30 second period. |
| 90 | ** The more small files (<16k) you use, the larger your transactions will | 93 | ** The more small files (<16k) you use, the larger your transactions will |
| 91 | ** be. | 94 | ** be. |
| 92 | ** | 95 | ** |
| 93 | ** If your journal fills faster than dirty buffers get flushed to disk, it must flush them before allowing the journal | 96 | ** If your journal fills faster than dirty buffers get flushed to disk, it must flush them before allowing the journal |
| 94 | ** to wrap, which slows things down. If you need high speed meta data updates, the journal should be big enough | 97 | ** to wrap, which slows things down. If you need high speed meta data updates, the journal should be big enough |
| 95 | ** to prevent wrapping before dirty meta blocks get to disk. | 98 | ** to prevent wrapping before dirty meta blocks get to disk. |
| @@ -153,7 +156,7 @@ struct reiserfs_journal_list { | |||
| 153 | atomic_t j_commit_left; | 156 | atomic_t j_commit_left; |
| 154 | atomic_t j_older_commits_done; /* all commits older than this on disk */ | 157 | atomic_t j_older_commits_done; /* all commits older than this on disk */ |
| 155 | struct mutex j_commit_mutex; | 158 | struct mutex j_commit_mutex; |
| 156 | unsigned long j_trans_id; | 159 | unsigned int j_trans_id; |
| 157 | time_t j_timestamp; | 160 | time_t j_timestamp; |
| 158 | struct reiserfs_list_bitmap *j_list_bitmap; | 161 | struct reiserfs_list_bitmap *j_list_bitmap; |
| 159 | struct buffer_head *j_commit_bh; /* commit buffer head */ | 162 | struct buffer_head *j_commit_bh; /* commit buffer head */ |
| @@ -182,7 +185,7 @@ struct reiserfs_journal { | |||
| 182 | int j_1st_reserved_block; /* first block on s_dev of reserved area journal */ | 185 | int j_1st_reserved_block; /* first block on s_dev of reserved area journal */ |
| 183 | 186 | ||
| 184 | unsigned long j_state; | 187 | unsigned long j_state; |
| 185 | unsigned long j_trans_id; | 188 | unsigned int j_trans_id; |
| 186 | unsigned long j_mount_id; | 189 | unsigned long j_mount_id; |
| 187 | unsigned long j_start; /* start of current waiting commit (index into j_ap_blocks) */ | 190 | unsigned long j_start; /* start of current waiting commit (index into j_ap_blocks) */ |
| 188 | unsigned long j_len; /* length of current waiting commit */ | 191 | unsigned long j_len; /* length of current waiting commit */ |
| @@ -223,10 +226,10 @@ struct reiserfs_journal { | |||
| 223 | int j_num_work_lists; /* number that need attention from kreiserfsd */ | 226 | int j_num_work_lists; /* number that need attention from kreiserfsd */ |
| 224 | 227 | ||
| 225 | /* debugging to make sure things are flushed in order */ | 228 | /* debugging to make sure things are flushed in order */ |
| 226 | int j_last_flush_id; | 229 | unsigned int j_last_flush_id; |
| 227 | 230 | ||
| 228 | /* debugging to make sure things are committed in order */ | 231 | /* debugging to make sure things are committed in order */ |
| 229 | int j_last_commit_id; | 232 | unsigned int j_last_commit_id; |
| 230 | 233 | ||
| 231 | struct list_head j_bitmap_nodes; | 234 | struct list_head j_bitmap_nodes; |
| 232 | struct list_head j_dirty_buffers; | 235 | struct list_head j_dirty_buffers; |
| @@ -239,7 +242,7 @@ struct reiserfs_journal { | |||
| 239 | 242 | ||
| 240 | struct reiserfs_list_bitmap j_list_bitmap[JOURNAL_NUM_BITMAPS]; /* array of bitmaps to record the deleted blocks */ | 243 | struct reiserfs_list_bitmap j_list_bitmap[JOURNAL_NUM_BITMAPS]; /* array of bitmaps to record the deleted blocks */ |
| 241 | struct reiserfs_journal_cnode *j_hash_table[JOURNAL_HASH_SIZE]; /* hash table for real buffer heads in current trans */ | 244 | struct reiserfs_journal_cnode *j_hash_table[JOURNAL_HASH_SIZE]; /* hash table for real buffer heads in current trans */ |
| 242 | struct reiserfs_journal_cnode *j_list_hash_table[JOURNAL_HASH_SIZE]; /* hash table for all the real buffer heads in all | 245 | struct reiserfs_journal_cnode *j_list_hash_table[JOURNAL_HASH_SIZE]; /* hash table for all the real buffer heads in all |
| 243 | the transactions */ | 246 | the transactions */ |
| 244 | struct list_head j_prealloc_list; /* list of inodes which have preallocated blocks */ | 247 | struct list_head j_prealloc_list; /* list of inodes which have preallocated blocks */ |
| 245 | int j_persistent_trans; | 248 | int j_persistent_trans; |
| @@ -399,10 +402,7 @@ struct reiserfs_sb_info { | |||
| 399 | int reserved_blocks; /* amount of blocks reserved for further allocations */ | 402 | int reserved_blocks; /* amount of blocks reserved for further allocations */ |
| 400 | spinlock_t bitmap_lock; /* this lock on now only used to protect reserved_blocks variable */ | 403 | spinlock_t bitmap_lock; /* this lock on now only used to protect reserved_blocks variable */ |
| 401 | struct dentry *priv_root; /* root of /.reiserfs_priv */ | 404 | struct dentry *priv_root; /* root of /.reiserfs_priv */ |
| 402 | #ifdef CONFIG_REISERFS_FS_XATTR | ||
| 403 | struct dentry *xattr_root; /* root of /.reiserfs_priv/.xa */ | 405 | struct dentry *xattr_root; /* root of /.reiserfs_priv/.xa */ |
| 404 | struct rw_semaphore xattr_dir_sem; | ||
| 405 | #endif | ||
| 406 | int j_errno; | 406 | int j_errno; |
| 407 | #ifdef CONFIG_QUOTA | 407 | #ifdef CONFIG_QUOTA |
| 408 | char *s_qf_names[MAXQUOTAS]; | 408 | char *s_qf_names[MAXQUOTAS]; |
| @@ -426,7 +426,7 @@ enum reiserfs_mount_options { | |||
| 426 | partition will be dealt with in a | 426 | partition will be dealt with in a |
| 427 | manner of 3.5.x */ | 427 | manner of 3.5.x */ |
| 428 | 428 | ||
| 429 | /* -o hash={tea, rupasov, r5, detect} is meant for properly mounting | 429 | /* -o hash={tea, rupasov, r5, detect} is meant for properly mounting |
| 430 | ** reiserfs disks from 3.5.19 or earlier. 99% of the time, this option | 430 | ** reiserfs disks from 3.5.19 or earlier. 99% of the time, this option |
| 431 | ** is not required. If the normal autodection code can't determine which | 431 | ** is not required. If the normal autodection code can't determine which |
| 432 | ** hash to use (because both hashes had the same value for a file) | 432 | ** hash to use (because both hashes had the same value for a file) |
| @@ -451,7 +451,6 @@ enum reiserfs_mount_options { | |||
| 451 | REISERFS_NO_UNHASHED_RELOCATION, | 451 | REISERFS_NO_UNHASHED_RELOCATION, |
| 452 | REISERFS_HASHED_RELOCATION, | 452 | REISERFS_HASHED_RELOCATION, |
| 453 | REISERFS_ATTRS, | 453 | REISERFS_ATTRS, |
| 454 | REISERFS_XATTRS, | ||
| 455 | REISERFS_XATTRS_USER, | 454 | REISERFS_XATTRS_USER, |
| 456 | REISERFS_POSIXACL, | 455 | REISERFS_POSIXACL, |
| 457 | REISERFS_BARRIER_NONE, | 456 | REISERFS_BARRIER_NONE, |
| @@ -489,7 +488,7 @@ enum reiserfs_mount_options { | |||
| 489 | #define reiserfs_data_log(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_LOG)) | 488 | #define reiserfs_data_log(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_LOG)) |
| 490 | #define reiserfs_data_ordered(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_ORDERED)) | 489 | #define reiserfs_data_ordered(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_ORDERED)) |
| 491 | #define reiserfs_data_writeback(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_WRITEBACK)) | 490 | #define reiserfs_data_writeback(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_WRITEBACK)) |
| 492 | #define reiserfs_xattrs(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_XATTRS)) | 491 | #define reiserfs_xattrs(s) ((s)->s_xattr != NULL) |
| 493 | #define reiserfs_xattrs_user(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_XATTRS_USER)) | 492 | #define reiserfs_xattrs_user(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_XATTRS_USER)) |
| 494 | #define reiserfs_posixacl(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_POSIXACL)) | 493 | #define reiserfs_posixacl(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_POSIXACL)) |
| 495 | #define reiserfs_xattrs_optional(s) (reiserfs_xattrs_user(s) || reiserfs_posixacl(s)) | 494 | #define reiserfs_xattrs_optional(s) (reiserfs_xattrs_user(s) || reiserfs_posixacl(s)) |
diff --git a/include/linux/reiserfs_xattr.h b/include/linux/reiserfs_xattr.h index af135ae895db..dcae01e63e40 100644 --- a/include/linux/reiserfs_xattr.h +++ b/include/linux/reiserfs_xattr.h | |||
| @@ -15,6 +15,12 @@ struct reiserfs_xattr_header { | |||
| 15 | __le32 h_hash; /* hash of the value */ | 15 | __le32 h_hash; /* hash of the value */ |
| 16 | }; | 16 | }; |
| 17 | 17 | ||
| 18 | struct reiserfs_security_handle { | ||
| 19 | char *name; | ||
| 20 | void *value; | ||
| 21 | size_t length; | ||
| 22 | }; | ||
| 23 | |||
| 18 | #ifdef __KERNEL__ | 24 | #ifdef __KERNEL__ |
| 19 | 25 | ||
| 20 | #include <linux/init.h> | 26 | #include <linux/init.h> |
| @@ -29,22 +35,13 @@ struct iattr; | |||
| 29 | struct super_block; | 35 | struct super_block; |
| 30 | struct nameidata; | 36 | struct nameidata; |
| 31 | 37 | ||
| 32 | struct reiserfs_xattr_handler { | 38 | int reiserfs_xattr_register_handlers(void) __init; |
| 33 | char *prefix; | 39 | void reiserfs_xattr_unregister_handlers(void); |
| 34 | int (*init) (void); | 40 | int reiserfs_xattr_init(struct super_block *sb, int mount_flags); |
| 35 | void (*exit) (void); | 41 | int reiserfs_delete_xattrs(struct inode *inode); |
| 36 | int (*get) (struct inode * inode, const char *name, void *buffer, | 42 | int reiserfs_chown_xattrs(struct inode *inode, struct iattr *attrs); |
| 37 | size_t size); | ||
| 38 | int (*set) (struct inode * inode, const char *name, const void *buffer, | ||
| 39 | size_t size, int flags); | ||
| 40 | int (*del) (struct inode * inode, const char *name); | ||
| 41 | int (*list) (struct inode * inode, const char *name, int namelen, | ||
| 42 | char *out); | ||
| 43 | struct list_head handlers; | ||
| 44 | }; | ||
| 45 | 43 | ||
| 46 | #ifdef CONFIG_REISERFS_FS_XATTR | 44 | #ifdef CONFIG_REISERFS_FS_XATTR |
| 47 | #define is_reiserfs_priv_object(inode) IS_PRIVATE(inode) | ||
| 48 | #define has_xattr_dir(inode) (REISERFS_I(inode)->i_flags & i_has_xattr_dir) | 45 | #define has_xattr_dir(inode) (REISERFS_I(inode)->i_flags & i_has_xattr_dir) |
| 49 | ssize_t reiserfs_getxattr(struct dentry *dentry, const char *name, | 46 | ssize_t reiserfs_getxattr(struct dentry *dentry, const char *name, |
| 50 | void *buffer, size_t size); | 47 | void *buffer, size_t size); |
| @@ -52,104 +49,97 @@ int reiserfs_setxattr(struct dentry *dentry, const char *name, | |||
| 52 | const void *value, size_t size, int flags); | 49 | const void *value, size_t size, int flags); |
| 53 | ssize_t reiserfs_listxattr(struct dentry *dentry, char *buffer, size_t size); | 50 | ssize_t reiserfs_listxattr(struct dentry *dentry, char *buffer, size_t size); |
| 54 | int reiserfs_removexattr(struct dentry *dentry, const char *name); | 51 | int reiserfs_removexattr(struct dentry *dentry, const char *name); |
| 55 | int reiserfs_delete_xattrs(struct inode *inode); | ||
| 56 | int reiserfs_chown_xattrs(struct inode *inode, struct iattr *attrs); | ||
| 57 | int reiserfs_xattr_init(struct super_block *sb, int mount_flags); | ||
| 58 | int reiserfs_permission(struct inode *inode, int mask); | 52 | int reiserfs_permission(struct inode *inode, int mask); |
| 59 | 53 | ||
| 60 | int reiserfs_xattr_del(struct inode *, const char *); | 54 | int reiserfs_xattr_get(struct inode *, const char *, void *, size_t); |
| 61 | int reiserfs_xattr_get(const struct inode *, const char *, void *, size_t); | ||
| 62 | int reiserfs_xattr_set(struct inode *, const char *, const void *, size_t, int); | 55 | int reiserfs_xattr_set(struct inode *, const char *, const void *, size_t, int); |
| 63 | 56 | int reiserfs_xattr_set_handle(struct reiserfs_transaction_handle *, | |
| 64 | extern struct reiserfs_xattr_handler user_handler; | 57 | struct inode *, const char *, const void *, |
| 65 | extern struct reiserfs_xattr_handler trusted_handler; | 58 | size_t, int); |
| 66 | extern struct reiserfs_xattr_handler security_handler; | 59 | |
| 67 | 60 | extern struct xattr_handler reiserfs_xattr_user_handler; | |
| 68 | int reiserfs_xattr_register_handlers(void) __init; | 61 | extern struct xattr_handler reiserfs_xattr_trusted_handler; |
| 69 | void reiserfs_xattr_unregister_handlers(void); | 62 | extern struct xattr_handler reiserfs_xattr_security_handler; |
| 70 | 63 | #ifdef CONFIG_REISERFS_FS_SECURITY | |
| 71 | static inline void reiserfs_write_lock_xattrs(struct super_block *sb) | 64 | int reiserfs_security_init(struct inode *dir, struct inode *inode, |
| 72 | { | 65 | struct reiserfs_security_handle *sec); |
| 73 | down_write(&REISERFS_XATTR_DIR_SEM(sb)); | 66 | int reiserfs_security_write(struct reiserfs_transaction_handle *th, |
| 74 | } | 67 | struct inode *inode, |
| 75 | static inline void reiserfs_write_unlock_xattrs(struct super_block *sb) | 68 | struct reiserfs_security_handle *sec); |
| 76 | { | 69 | void reiserfs_security_free(struct reiserfs_security_handle *sec); |
| 77 | up_write(&REISERFS_XATTR_DIR_SEM(sb)); | 70 | #endif |
| 78 | } | 71 | |
| 79 | static inline void reiserfs_read_lock_xattrs(struct super_block *sb) | 72 | #define xattr_size(size) ((size) + sizeof(struct reiserfs_xattr_header)) |
| 80 | { | 73 | static inline loff_t reiserfs_xattr_nblocks(struct inode *inode, loff_t size) |
| 81 | down_read(&REISERFS_XATTR_DIR_SEM(sb)); | ||
| 82 | } | ||
| 83 | |||
| 84 | static inline void reiserfs_read_unlock_xattrs(struct super_block *sb) | ||
| 85 | { | 74 | { |
| 86 | up_read(&REISERFS_XATTR_DIR_SEM(sb)); | 75 | loff_t ret = 0; |
| 76 | if (reiserfs_file_data_log(inode)) { | ||
| 77 | ret = _ROUND_UP(xattr_size(size), inode->i_sb->s_blocksize); | ||
| 78 | ret >>= inode->i_sb->s_blocksize_bits; | ||
| 79 | } | ||
| 80 | return ret; | ||
| 87 | } | 81 | } |
| 88 | 82 | ||
| 89 | static inline void reiserfs_write_lock_xattr_i(struct inode *inode) | 83 | /* We may have to create up to 3 objects: xattr root, xattr dir, xattr file. |
| 90 | { | 84 | * Let's try to be smart about it. |
| 91 | down_write(&REISERFS_I(inode)->xattr_sem); | 85 | * xattr root: We cache it. If it's not cached, we may need to create it. |
| 92 | } | 86 | * xattr dir: If anything has been loaded for this inode, we can set a flag |
| 93 | static inline void reiserfs_write_unlock_xattr_i(struct inode *inode) | 87 | * saying so. |
| 88 | * xattr file: Since we don't cache xattrs, we can't tell. We always include | ||
| 89 | * blocks for it. | ||
| 90 | * | ||
| 91 | * However, since root and dir can be created between calls - YOU MUST SAVE | ||
| 92 | * THIS VALUE. | ||
| 93 | */ | ||
| 94 | static inline size_t reiserfs_xattr_jcreate_nblocks(struct inode *inode) | ||
| 94 | { | 95 | { |
| 95 | up_write(&REISERFS_I(inode)->xattr_sem); | 96 | size_t nblocks = JOURNAL_BLOCKS_PER_OBJECT(inode->i_sb); |
| 96 | } | ||
| 97 | static inline void reiserfs_read_lock_xattr_i(struct inode *inode) | ||
| 98 | { | ||
| 99 | down_read(&REISERFS_I(inode)->xattr_sem); | ||
| 100 | } | ||
| 101 | 97 | ||
| 102 | static inline void reiserfs_read_unlock_xattr_i(struct inode *inode) | 98 | if ((REISERFS_I(inode)->i_flags & i_has_xattr_dir) == 0) { |
| 103 | { | 99 | nblocks += JOURNAL_BLOCKS_PER_OBJECT(inode->i_sb); |
| 104 | up_read(&REISERFS_I(inode)->xattr_sem); | 100 | if (REISERFS_SB(inode->i_sb)->xattr_root == NULL) |
| 105 | } | 101 | nblocks += JOURNAL_BLOCKS_PER_OBJECT(inode->i_sb); |
| 102 | } | ||
| 106 | 103 | ||
| 107 | static inline void reiserfs_mark_inode_private(struct inode *inode) | 104 | return nblocks; |
| 108 | { | ||
| 109 | inode->i_flags |= S_PRIVATE; | ||
| 110 | } | 105 | } |
| 111 | 106 | ||
| 112 | static inline void reiserfs_init_xattr_rwsem(struct inode *inode) | 107 | static inline void reiserfs_init_xattr_rwsem(struct inode *inode) |
| 113 | { | 108 | { |
| 114 | init_rwsem(&REISERFS_I(inode)->xattr_sem); | 109 | init_rwsem(&REISERFS_I(inode)->i_xattr_sem); |
| 115 | } | 110 | } |
| 116 | 111 | ||
| 117 | #else | 112 | #else |
| 118 | 113 | ||
| 119 | #define is_reiserfs_priv_object(inode) 0 | ||
| 120 | #define reiserfs_mark_inode_private(inode) do {;} while(0) | ||
| 121 | #define reiserfs_getxattr NULL | 114 | #define reiserfs_getxattr NULL |
| 122 | #define reiserfs_setxattr NULL | 115 | #define reiserfs_setxattr NULL |
| 123 | #define reiserfs_listxattr NULL | 116 | #define reiserfs_listxattr NULL |
| 124 | #define reiserfs_removexattr NULL | 117 | #define reiserfs_removexattr NULL |
| 125 | #define reiserfs_write_lock_xattrs(sb) do {;} while(0) | ||
| 126 | #define reiserfs_write_unlock_xattrs(sb) do {;} while(0) | ||
| 127 | #define reiserfs_read_lock_xattrs(sb) | ||
| 128 | #define reiserfs_read_unlock_xattrs(sb) | ||
| 129 | 118 | ||
| 130 | #define reiserfs_permission NULL | 119 | #define reiserfs_permission NULL |
| 131 | 120 | ||
| 132 | #define reiserfs_xattr_register_handlers() 0 | 121 | static inline void reiserfs_init_xattr_rwsem(struct inode *inode) |
| 133 | #define reiserfs_xattr_unregister_handlers() | ||
| 134 | |||
| 135 | static inline int reiserfs_delete_xattrs(struct inode *inode) | ||
| 136 | { | 122 | { |
| 137 | return 0; | 123 | } |
| 138 | }; | 124 | #endif /* CONFIG_REISERFS_FS_XATTR */ |
| 139 | static inline int reiserfs_chown_xattrs(struct inode *inode, | 125 | |
| 140 | struct iattr *attrs) | 126 | #ifndef CONFIG_REISERFS_FS_SECURITY |
| 127 | static inline int reiserfs_security_init(struct inode *dir, | ||
| 128 | struct inode *inode, | ||
| 129 | struct reiserfs_security_handle *sec) | ||
| 141 | { | 130 | { |
| 142 | return 0; | 131 | return 0; |
| 143 | }; | 132 | } |
| 144 | static inline int reiserfs_xattr_init(struct super_block *sb, int mount_flags) | 133 | static inline int |
| 134 | reiserfs_security_write(struct reiserfs_transaction_handle *th, | ||
| 135 | struct inode *inode, | ||
| 136 | struct reiserfs_security_handle *sec) | ||
| 145 | { | 137 | { |
| 146 | sb->s_flags = (sb->s_flags & ~MS_POSIXACL); /* to be sure */ | ||
| 147 | return 0; | 138 | return 0; |
| 148 | }; | ||
| 149 | static inline void reiserfs_init_xattr_rwsem(struct inode *inode) | ||
| 150 | { | ||
| 151 | } | 139 | } |
| 152 | #endif /* CONFIG_REISERFS_FS_XATTR */ | 140 | static inline void reiserfs_security_free(struct reiserfs_security_handle *sec) |
| 141 | {} | ||
| 142 | #endif | ||
| 153 | 143 | ||
| 154 | #endif /* __KERNEL__ */ | 144 | #endif /* __KERNEL__ */ |
| 155 | 145 | ||
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 46d680643f89..1d19c025f9d2 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 | ||
| @@ -1672,6 +1679,16 @@ static inline int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask) | |||
| 1672 | return set_cpus_allowed_ptr(p, &new_mask); | 1679 | return set_cpus_allowed_ptr(p, &new_mask); |
| 1673 | } | 1680 | } |
| 1674 | 1681 | ||
| 1682 | /* | ||
| 1683 | * Architectures can set this to 1 if they have specified | ||
| 1684 | * CONFIG_HAVE_UNSTABLE_SCHED_CLOCK in their arch Kconfig, | ||
| 1685 | * but then during bootup it turns out that sched_clock() | ||
| 1686 | * is reliable after all: | ||
| 1687 | */ | ||
| 1688 | #ifdef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK | ||
| 1689 | extern int sched_clock_stable; | ||
| 1690 | #endif | ||
| 1691 | |||
| 1675 | extern unsigned long long sched_clock(void); | 1692 | extern unsigned long long sched_clock(void); |
| 1676 | 1693 | ||
| 1677 | extern void sched_clock_init(void); | 1694 | 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/security.h b/include/linux/security.h index 1f2ab6353c00..54ed15799a83 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
| @@ -880,11 +880,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
| 880 | * @sock contains the listening socket structure. | 880 | * @sock contains the listening socket structure. |
| 881 | * @newsock contains the newly created server socket for connection. | 881 | * @newsock contains the newly created server socket for connection. |
| 882 | * Return 0 if permission is granted. | 882 | * Return 0 if permission is granted. |
| 883 | * @socket_post_accept: | ||
| 884 | * This hook allows a security module to copy security | ||
| 885 | * information into the newly created socket's inode. | ||
| 886 | * @sock contains the listening socket structure. | ||
| 887 | * @newsock contains the newly created server socket for connection. | ||
| 888 | * @socket_sendmsg: | 883 | * @socket_sendmsg: |
| 889 | * Check permission before transmitting a message to another socket. | 884 | * Check permission before transmitting a message to another socket. |
| 890 | * @sock contains the socket structure. | 885 | * @sock contains the socket structure. |
| @@ -1554,8 +1549,6 @@ struct security_operations { | |||
| 1554 | struct sockaddr *address, int addrlen); | 1549 | struct sockaddr *address, int addrlen); |
| 1555 | int (*socket_listen) (struct socket *sock, int backlog); | 1550 | int (*socket_listen) (struct socket *sock, int backlog); |
| 1556 | int (*socket_accept) (struct socket *sock, struct socket *newsock); | 1551 | int (*socket_accept) (struct socket *sock, struct socket *newsock); |
| 1557 | void (*socket_post_accept) (struct socket *sock, | ||
| 1558 | struct socket *newsock); | ||
| 1559 | int (*socket_sendmsg) (struct socket *sock, | 1552 | int (*socket_sendmsg) (struct socket *sock, |
| 1560 | struct msghdr *msg, int size); | 1553 | struct msghdr *msg, int size); |
| 1561 | int (*socket_recvmsg) (struct socket *sock, | 1554 | int (*socket_recvmsg) (struct socket *sock, |
| @@ -2537,7 +2530,6 @@ int security_socket_bind(struct socket *sock, struct sockaddr *address, int addr | |||
| 2537 | int security_socket_connect(struct socket *sock, struct sockaddr *address, int addrlen); | 2530 | int security_socket_connect(struct socket *sock, struct sockaddr *address, int addrlen); |
| 2538 | int security_socket_listen(struct socket *sock, int backlog); | 2531 | int security_socket_listen(struct socket *sock, int backlog); |
| 2539 | int security_socket_accept(struct socket *sock, struct socket *newsock); | 2532 | int security_socket_accept(struct socket *sock, struct socket *newsock); |
| 2540 | void security_socket_post_accept(struct socket *sock, struct socket *newsock); | ||
| 2541 | int security_socket_sendmsg(struct socket *sock, struct msghdr *msg, int size); | 2533 | int security_socket_sendmsg(struct socket *sock, struct msghdr *msg, int size); |
| 2542 | int security_socket_recvmsg(struct socket *sock, struct msghdr *msg, | 2534 | int security_socket_recvmsg(struct socket *sock, struct msghdr *msg, |
| 2543 | int size, int flags); | 2535 | int size, int flags); |
| @@ -2616,11 +2608,6 @@ static inline int security_socket_accept(struct socket *sock, | |||
| 2616 | return 0; | 2608 | return 0; |
| 2617 | } | 2609 | } |
| 2618 | 2610 | ||
| 2619 | static inline void security_socket_post_accept(struct socket *sock, | ||
| 2620 | struct socket *newsock) | ||
| 2621 | { | ||
| 2622 | } | ||
| 2623 | |||
| 2624 | static inline int security_socket_sendmsg(struct socket *sock, | 2611 | static inline int security_socket_sendmsg(struct socket *sock, |
| 2625 | struct msghdr *msg, int size) | 2612 | struct msghdr *msg, int size) |
| 2626 | { | 2613 | { |
diff --git a/include/linux/selinux_netlink.h b/include/linux/selinux_netlink.h index bbf489decd84..d239797785cf 100644 --- a/include/linux/selinux_netlink.h +++ b/include/linux/selinux_netlink.h | |||
| @@ -12,6 +12,8 @@ | |||
| 12 | #ifndef _LINUX_SELINUX_NETLINK_H | 12 | #ifndef _LINUX_SELINUX_NETLINK_H |
| 13 | #define _LINUX_SELINUX_NETLINK_H | 13 | #define _LINUX_SELINUX_NETLINK_H |
| 14 | 14 | ||
| 15 | #include <linux/types.h> | ||
| 16 | |||
| 15 | /* Message types. */ | 17 | /* Message types. */ |
| 16 | #define SELNL_MSG_BASE 0x10 | 18 | #define SELNL_MSG_BASE 0x10 |
| 17 | enum { | 19 | enum { |
| @@ -38,11 +40,11 @@ enum selinux_nlgroups { | |||
| 38 | 40 | ||
| 39 | /* Message structures */ | 41 | /* Message structures */ |
| 40 | struct selnl_msg_setenforce { | 42 | struct selnl_msg_setenforce { |
| 41 | int32_t val; | 43 | __s32 val; |
| 42 | }; | 44 | }; |
| 43 | 45 | ||
| 44 | struct selnl_msg_policyload { | 46 | struct selnl_msg_policyload { |
| 45 | u_int32_t seqno; | 47 | __u32 seqno; |
| 46 | }; | 48 | }; |
| 47 | 49 | ||
| 48 | #endif /* _LINUX_SELINUX_NETLINK_H */ | 50 | #endif /* _LINUX_SELINUX_NETLINK_H */ |
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..55d67300fa10 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]; |
| @@ -188,6 +236,8 @@ enum { | |||
| 188 | SKB_GSO_TCP_ECN = 1 << 3, | 236 | SKB_GSO_TCP_ECN = 1 << 3, |
| 189 | 237 | ||
| 190 | SKB_GSO_TCPV6 = 1 << 4, | 238 | SKB_GSO_TCPV6 = 1 << 4, |
| 239 | |||
| 240 | SKB_GSO_FCOE = 1 << 5, | ||
| 191 | }; | 241 | }; |
| 192 | 242 | ||
| 193 | #if BITS_PER_LONG > 32 | 243 | #if BITS_PER_LONG > 32 |
| @@ -373,6 +423,7 @@ extern void skb_dma_unmap(struct device *dev, struct sk_buff *skb, | |||
| 373 | #endif | 423 | #endif |
| 374 | 424 | ||
| 375 | extern void kfree_skb(struct sk_buff *skb); | 425 | extern void kfree_skb(struct sk_buff *skb); |
| 426 | extern void consume_skb(struct sk_buff *skb); | ||
| 376 | extern void __kfree_skb(struct sk_buff *skb); | 427 | extern void __kfree_skb(struct sk_buff *skb); |
| 377 | extern struct sk_buff *__alloc_skb(unsigned int size, | 428 | extern struct sk_buff *__alloc_skb(unsigned int size, |
| 378 | gfp_t priority, int fclone, int node); | 429 | gfp_t priority, int fclone, int node); |
| @@ -411,7 +462,8 @@ extern int skb_to_sgvec(struct sk_buff *skb, | |||
| 411 | extern int skb_cow_data(struct sk_buff *skb, int tailbits, | 462 | extern int skb_cow_data(struct sk_buff *skb, int tailbits, |
| 412 | struct sk_buff **trailer); | 463 | struct sk_buff **trailer); |
| 413 | extern int skb_pad(struct sk_buff *skb, int pad); | 464 | extern int skb_pad(struct sk_buff *skb, int pad); |
| 414 | #define dev_kfree_skb(a) kfree_skb(a) | 465 | #define dev_kfree_skb(a) consume_skb(a) |
| 466 | #define dev_consume_skb(a) kfree_skb_clean(a) | ||
| 415 | extern void skb_over_panic(struct sk_buff *skb, int len, | 467 | extern void skb_over_panic(struct sk_buff *skb, int len, |
| 416 | void *here); | 468 | void *here); |
| 417 | extern void skb_under_panic(struct sk_buff *skb, int len, | 469 | extern void skb_under_panic(struct sk_buff *skb, int len, |
| @@ -459,6 +511,16 @@ static inline unsigned char *skb_end_pointer(const struct sk_buff *skb) | |||
| 459 | /* Internal */ | 511 | /* Internal */ |
| 460 | #define skb_shinfo(SKB) ((struct skb_shared_info *)(skb_end_pointer(SKB))) | 512 | #define skb_shinfo(SKB) ((struct skb_shared_info *)(skb_end_pointer(SKB))) |
| 461 | 513 | ||
| 514 | static inline struct skb_shared_hwtstamps *skb_hwtstamps(struct sk_buff *skb) | ||
| 515 | { | ||
| 516 | return &skb_shinfo(skb)->hwtstamps; | ||
| 517 | } | ||
| 518 | |||
| 519 | static inline union skb_shared_tx *skb_tx(struct sk_buff *skb) | ||
| 520 | { | ||
| 521 | return &skb_shinfo(skb)->tx_flags; | ||
| 522 | } | ||
| 523 | |||
| 462 | /** | 524 | /** |
| 463 | * skb_queue_empty - check if a queue is empty | 525 | * skb_queue_empty - check if a queue is empty |
| 464 | * @list: queue head | 526 | * @list: queue head |
| @@ -1278,7 +1340,7 @@ static inline int skb_network_offset(const struct sk_buff *skb) | |||
| 1278 | * The networking layer reserves some headroom in skb data (via | 1340 | * 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 | 1341 | * 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 | 1342 | * the header has to grow. In the default case, if the header has to grow |
| 1281 | * 16 bytes or less we avoid the reallocation. | 1343 | * 32 bytes or less we avoid the reallocation. |
| 1282 | * | 1344 | * |
| 1283 | * Unfortunately this headroom changes the DMA alignment of the resulting | 1345 | * Unfortunately this headroom changes the DMA alignment of the resulting |
| 1284 | * network packet. As for NET_IP_ALIGN, this unaligned DMA is expensive | 1346 | * network packet. As for NET_IP_ALIGN, this unaligned DMA is expensive |
| @@ -1286,11 +1348,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 | 1348 | * 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. | 1349 | * cacheline alignment of the DMA). It must be a power of 2. |
| 1288 | * | 1350 | * |
| 1289 | * Various parts of the networking layer expect at least 16 bytes of | 1351 | * Various parts of the networking layer expect at least 32 bytes of |
| 1290 | * headroom, you should not reduce this. | 1352 | * headroom, you should not reduce this. |
| 1291 | */ | 1353 | */ |
| 1292 | #ifndef NET_SKB_PAD | 1354 | #ifndef NET_SKB_PAD |
| 1293 | #define NET_SKB_PAD 16 | 1355 | #define NET_SKB_PAD 32 |
| 1294 | #endif | 1356 | #endif |
| 1295 | 1357 | ||
| 1296 | extern int ___pskb_trim(struct sk_buff *skb, unsigned int len); | 1358 | extern int ___pskb_trim(struct sk_buff *skb, unsigned int len); |
| @@ -1678,8 +1740,6 @@ extern int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, | |||
| 1678 | int shiftlen); | 1740 | int shiftlen); |
| 1679 | 1741 | ||
| 1680 | extern struct sk_buff *skb_segment(struct sk_buff *skb, int features); | 1742 | 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 | 1743 | ||
| 1684 | static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, | 1744 | static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, |
| 1685 | int len, void *buffer) | 1745 | int len, void *buffer) |
| @@ -1726,6 +1786,11 @@ static inline void skb_copy_to_linear_data_offset(struct sk_buff *skb, | |||
| 1726 | 1786 | ||
| 1727 | extern void skb_init(void); | 1787 | extern void skb_init(void); |
| 1728 | 1788 | ||
| 1789 | static inline ktime_t skb_get_ktime(const struct sk_buff *skb) | ||
| 1790 | { | ||
| 1791 | return skb->tstamp; | ||
| 1792 | } | ||
| 1793 | |||
| 1729 | /** | 1794 | /** |
| 1730 | * skb_get_timestamp - get timestamp from a skb | 1795 | * skb_get_timestamp - get timestamp from a skb |
| 1731 | * @skb: skb to get stamp from | 1796 | * @skb: skb to get stamp from |
| @@ -1735,11 +1800,18 @@ extern void skb_init(void); | |||
| 1735 | * This function converts the offset back to a struct timeval and stores | 1800 | * This function converts the offset back to a struct timeval and stores |
| 1736 | * it in stamp. | 1801 | * it in stamp. |
| 1737 | */ | 1802 | */ |
| 1738 | static inline void skb_get_timestamp(const struct sk_buff *skb, struct timeval *stamp) | 1803 | static inline void skb_get_timestamp(const struct sk_buff *skb, |
| 1804 | struct timeval *stamp) | ||
| 1739 | { | 1805 | { |
| 1740 | *stamp = ktime_to_timeval(skb->tstamp); | 1806 | *stamp = ktime_to_timeval(skb->tstamp); |
| 1741 | } | 1807 | } |
| 1742 | 1808 | ||
| 1809 | static inline void skb_get_timestampns(const struct sk_buff *skb, | ||
| 1810 | struct timespec *stamp) | ||
| 1811 | { | ||
| 1812 | *stamp = ktime_to_timespec(skb->tstamp); | ||
| 1813 | } | ||
| 1814 | |||
| 1743 | static inline void __net_timestamp(struct sk_buff *skb) | 1815 | static inline void __net_timestamp(struct sk_buff *skb) |
| 1744 | { | 1816 | { |
| 1745 | skb->tstamp = ktime_get_real(); | 1817 | skb->tstamp = ktime_get_real(); |
| @@ -1755,6 +1827,20 @@ static inline ktime_t net_invalid_timestamp(void) | |||
| 1755 | return ktime_set(0, 0); | 1827 | return ktime_set(0, 0); |
| 1756 | } | 1828 | } |
| 1757 | 1829 | ||
| 1830 | /** | ||
| 1831 | * skb_tstamp_tx - queue clone of skb with send time stamps | ||
| 1832 | * @orig_skb: the original outgoing packet | ||
| 1833 | * @hwtstamps: hardware time stamps, may be NULL if not available | ||
| 1834 | * | ||
| 1835 | * If the skb has a socket associated, then this function clones the | ||
| 1836 | * skb (thus sharing the actual data and optional structures), stores | ||
| 1837 | * the optional hardware time stamping information (if non NULL) or | ||
| 1838 | * generates a software time stamp (otherwise), then queues the clone | ||
| 1839 | * to the error queue of the socket. Errors are silently ignored. | ||
| 1840 | */ | ||
| 1841 | extern void skb_tstamp_tx(struct sk_buff *orig_skb, | ||
| 1842 | struct skb_shared_hwtstamps *hwtstamps); | ||
| 1843 | |||
| 1758 | extern __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len); | 1844 | extern __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len); |
| 1759 | extern __sum16 __skb_checksum_complete(struct sk_buff *skb); | 1845 | extern __sum16 __skb_checksum_complete(struct sk_buff *skb); |
| 1760 | 1846 | ||
| @@ -1885,7 +1971,7 @@ static inline void skb_set_queue_mapping(struct sk_buff *skb, u16 queue_mapping) | |||
| 1885 | skb->queue_mapping = queue_mapping; | 1971 | skb->queue_mapping = queue_mapping; |
| 1886 | } | 1972 | } |
| 1887 | 1973 | ||
| 1888 | static inline u16 skb_get_queue_mapping(struct sk_buff *skb) | 1974 | static inline u16 skb_get_queue_mapping(const struct sk_buff *skb) |
| 1889 | { | 1975 | { |
| 1890 | return skb->queue_mapping; | 1976 | return skb->queue_mapping; |
| 1891 | } | 1977 | } |
| @@ -1895,6 +1981,24 @@ static inline void skb_copy_queue_mapping(struct sk_buff *to, const struct sk_bu | |||
| 1895 | to->queue_mapping = from->queue_mapping; | 1981 | to->queue_mapping = from->queue_mapping; |
| 1896 | } | 1982 | } |
| 1897 | 1983 | ||
| 1984 | static inline void skb_record_rx_queue(struct sk_buff *skb, u16 rx_queue) | ||
| 1985 | { | ||
| 1986 | skb->queue_mapping = rx_queue + 1; | ||
| 1987 | } | ||
| 1988 | |||
| 1989 | static inline u16 skb_get_rx_queue(const struct sk_buff *skb) | ||
| 1990 | { | ||
| 1991 | return skb->queue_mapping - 1; | ||
| 1992 | } | ||
| 1993 | |||
| 1994 | static inline bool skb_rx_queue_recorded(const struct sk_buff *skb) | ||
| 1995 | { | ||
| 1996 | return (skb->queue_mapping != 0); | ||
| 1997 | } | ||
| 1998 | |||
| 1999 | extern u16 skb_tx_hash(const struct net_device *dev, | ||
| 2000 | const struct sk_buff *skb); | ||
| 2001 | |||
| 1898 | #ifdef CONFIG_XFRM | 2002 | #ifdef CONFIG_XFRM |
| 1899 | static inline struct sec_path *skb_sec_path(struct sk_buff *skb) | 2003 | static inline struct sec_path *skb_sec_path(struct sk_buff *skb) |
| 1900 | { | 2004 | { |
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index 2f5c16b1aacd..e37b6aa8a9fb 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h | |||
| @@ -46,7 +46,6 @@ struct kmem_cache_cpu { | |||
| 46 | struct kmem_cache_node { | 46 | struct kmem_cache_node { |
| 47 | spinlock_t list_lock; /* Protect partial list and nr_partial */ | 47 | spinlock_t list_lock; /* Protect partial list and nr_partial */ |
| 48 | unsigned long nr_partial; | 48 | unsigned long nr_partial; |
| 49 | unsigned long min_partial; | ||
| 50 | struct list_head partial; | 49 | struct list_head partial; |
| 51 | #ifdef CONFIG_SLUB_DEBUG | 50 | #ifdef CONFIG_SLUB_DEBUG |
| 52 | atomic_long_t nr_slabs; | 51 | atomic_long_t nr_slabs; |
| @@ -89,6 +88,7 @@ struct kmem_cache { | |||
| 89 | void (*ctor)(void *); | 88 | void (*ctor)(void *); |
| 90 | int inuse; /* Offset to metadata */ | 89 | int inuse; /* Offset to metadata */ |
| 91 | int align; /* Alignment */ | 90 | int align; /* Alignment */ |
| 91 | unsigned long min_partial; | ||
| 92 | const char *name; /* Name (only for display!) */ | 92 | const char *name; /* Name (only for display!) */ |
| 93 | struct list_head list; /* List of slab caches */ | 93 | struct list_head list; /* List of slab caches */ |
| 94 | #ifdef CONFIG_SLUB_DEBUG | 94 | #ifdef CONFIG_SLUB_DEBUG |
| @@ -121,10 +121,23 @@ struct kmem_cache { | |||
| 121 | #define KMALLOC_SHIFT_LOW ilog2(KMALLOC_MIN_SIZE) | 121 | #define KMALLOC_SHIFT_LOW ilog2(KMALLOC_MIN_SIZE) |
| 122 | 122 | ||
| 123 | /* | 123 | /* |
| 124 | * Maximum kmalloc object size handled by SLUB. Larger object allocations | ||
| 125 | * are passed through to the page allocator. The page allocator "fastpath" | ||
| 126 | * is relatively slow so we need this value sufficiently high so that | ||
| 127 | * performance critical objects are allocated through the SLUB fastpath. | ||
| 128 | * | ||
| 129 | * This should be dropped to PAGE_SIZE / 2 once the page allocator | ||
| 130 | * "fastpath" becomes competitive with the slab allocator fastpaths. | ||
| 131 | */ | ||
| 132 | #define SLUB_MAX_SIZE (2 * PAGE_SIZE) | ||
| 133 | |||
| 134 | #define SLUB_PAGE_SHIFT (PAGE_SHIFT + 2) | ||
| 135 | |||
| 136 | /* | ||
| 124 | * We keep the general caches in an array of slab caches that are used for | 137 | * We keep the general caches in an array of slab caches that are used for |
| 125 | * 2^x bytes of allocations. | 138 | * 2^x bytes of allocations. |
| 126 | */ | 139 | */ |
| 127 | extern struct kmem_cache kmalloc_caches[PAGE_SHIFT + 1]; | 140 | extern struct kmem_cache kmalloc_caches[SLUB_PAGE_SHIFT]; |
| 128 | 141 | ||
| 129 | /* | 142 | /* |
| 130 | * Sorry that the following has to be that ugly but some versions of GCC | 143 | * Sorry that the following has to be that ugly but some versions of GCC |
| @@ -212,7 +225,7 @@ static __always_inline void *kmalloc_large(size_t size, gfp_t flags) | |||
| 212 | static __always_inline void *kmalloc(size_t size, gfp_t flags) | 225 | static __always_inline void *kmalloc(size_t size, gfp_t flags) |
| 213 | { | 226 | { |
| 214 | if (__builtin_constant_p(size)) { | 227 | if (__builtin_constant_p(size)) { |
| 215 | if (size > PAGE_SIZE) | 228 | if (size > SLUB_MAX_SIZE) |
| 216 | return kmalloc_large(size, flags); | 229 | return kmalloc_large(size, flags); |
| 217 | 230 | ||
| 218 | if (!(flags & SLUB_DMA)) { | 231 | if (!(flags & SLUB_DMA)) { |
| @@ -234,7 +247,7 @@ void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node); | |||
| 234 | static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node) | 247 | static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node) |
| 235 | { | 248 | { |
| 236 | if (__builtin_constant_p(size) && | 249 | if (__builtin_constant_p(size) && |
| 237 | size <= PAGE_SIZE && !(flags & SLUB_DMA)) { | 250 | size <= SLUB_MAX_SIZE && !(flags & SLUB_DMA)) { |
| 238 | struct kmem_cache *s = kmalloc_slab(size); | 251 | struct kmem_cache *s = kmalloc_slab(size); |
| 239 | 252 | ||
| 240 | if (!s) | 253 | if (!s) |
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 afc01909a428..421afb4d29b0 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h | |||
| @@ -181,6 +181,7 @@ struct ucred { | |||
| 181 | #define AF_ASH 18 /* Ash */ | 181 | #define AF_ASH 18 /* Ash */ |
| 182 | #define AF_ECONET 19 /* Acorn Econet */ | 182 | #define AF_ECONET 19 /* Acorn Econet */ |
| 183 | #define AF_ATMSVC 20 /* ATM SVCs */ | 183 | #define AF_ATMSVC 20 /* ATM SVCs */ |
| 184 | #define AF_RDS 21 /* RDS sockets */ | ||
| 184 | #define AF_SNA 22 /* Linux SNA Project (nutters!) */ | 185 | #define AF_SNA 22 /* Linux SNA Project (nutters!) */ |
| 185 | #define AF_IRDA 23 /* IRDA sockets */ | 186 | #define AF_IRDA 23 /* IRDA sockets */ |
| 186 | #define AF_PPPOX 24 /* PPPoX sockets */ | 187 | #define AF_PPPOX 24 /* PPPoX sockets */ |
| @@ -219,6 +220,7 @@ struct ucred { | |||
| 219 | #define PF_ASH AF_ASH | 220 | #define PF_ASH AF_ASH |
| 220 | #define PF_ECONET AF_ECONET | 221 | #define PF_ECONET AF_ECONET |
| 221 | #define PF_ATMSVC AF_ATMSVC | 222 | #define PF_ATMSVC AF_ATMSVC |
| 223 | #define PF_RDS AF_RDS | ||
| 222 | #define PF_SNA AF_SNA | 224 | #define PF_SNA AF_SNA |
| 223 | #define PF_IRDA AF_IRDA | 225 | #define PF_IRDA AF_IRDA |
| 224 | #define PF_PPPOX AF_PPPOX | 226 | #define PF_PPPOX AF_PPPOX |
| @@ -300,6 +302,7 @@ struct ucred { | |||
| 300 | #define SOL_PPPOL2TP 273 | 302 | #define SOL_PPPOL2TP 273 |
| 301 | #define SOL_BLUETOOTH 274 | 303 | #define SOL_BLUETOOTH 274 |
| 302 | #define SOL_PNPIPE 275 | 304 | #define SOL_PNPIPE 275 |
| 305 | #define SOL_RDS 276 | ||
| 303 | 306 | ||
| 304 | /* IPX options */ | 307 | /* IPX options */ |
| 305 | #define IPX_TYPE 1 | 308 | #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/suspend_ioctls.h b/include/linux/suspend_ioctls.h index 2c6faec96bde..0b30382984fe 100644 --- a/include/linux/suspend_ioctls.h +++ b/include/linux/suspend_ioctls.h | |||
| @@ -1,14 +1,15 @@ | |||
| 1 | #ifndef _LINUX_SUSPEND_IOCTLS_H | 1 | #ifndef _LINUX_SUSPEND_IOCTLS_H |
| 2 | #define _LINUX_SUSPEND_IOCTLS_H | 2 | #define _LINUX_SUSPEND_IOCTLS_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 4 | /* | 5 | /* |
| 5 | * This structure is used to pass the values needed for the identification | 6 | * This structure is used to pass the values needed for the identification |
| 6 | * of the resume swap area from a user space to the kernel via the | 7 | * of the resume swap area from a user space to the kernel via the |
| 7 | * SNAPSHOT_SET_SWAP_AREA ioctl | 8 | * SNAPSHOT_SET_SWAP_AREA ioctl |
| 8 | */ | 9 | */ |
| 9 | struct resume_swap_area { | 10 | struct resume_swap_area { |
| 10 | loff_t offset; | 11 | __kernel_loff_t offset; |
| 11 | u_int32_t dev; | 12 | __u32 dev; |
| 12 | } __attribute__((packed)); | 13 | } __attribute__((packed)); |
| 13 | 14 | ||
| 14 | #define SNAPSHOT_IOC_MAGIC '3' | 15 | #define SNAPSHOT_IOC_MAGIC '3' |
| @@ -20,13 +21,13 @@ struct resume_swap_area { | |||
| 20 | #define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11) | 21 | #define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11) |
| 21 | #define SNAPSHOT_SET_SWAP_AREA _IOW(SNAPSHOT_IOC_MAGIC, 13, \ | 22 | #define SNAPSHOT_SET_SWAP_AREA _IOW(SNAPSHOT_IOC_MAGIC, 13, \ |
| 22 | struct resume_swap_area) | 23 | struct resume_swap_area) |
| 23 | #define SNAPSHOT_GET_IMAGE_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 14, loff_t) | 24 | #define SNAPSHOT_GET_IMAGE_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 14, __kernel_loff_t) |
| 24 | #define SNAPSHOT_PLATFORM_SUPPORT _IO(SNAPSHOT_IOC_MAGIC, 15) | 25 | #define SNAPSHOT_PLATFORM_SUPPORT _IO(SNAPSHOT_IOC_MAGIC, 15) |
| 25 | #define SNAPSHOT_POWER_OFF _IO(SNAPSHOT_IOC_MAGIC, 16) | 26 | #define SNAPSHOT_POWER_OFF _IO(SNAPSHOT_IOC_MAGIC, 16) |
| 26 | #define SNAPSHOT_CREATE_IMAGE _IOW(SNAPSHOT_IOC_MAGIC, 17, int) | 27 | #define SNAPSHOT_CREATE_IMAGE _IOW(SNAPSHOT_IOC_MAGIC, 17, int) |
| 27 | #define SNAPSHOT_PREF_IMAGE_SIZE _IO(SNAPSHOT_IOC_MAGIC, 18) | 28 | #define SNAPSHOT_PREF_IMAGE_SIZE _IO(SNAPSHOT_IOC_MAGIC, 18) |
| 28 | #define SNAPSHOT_AVAIL_SWAP_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 19, loff_t) | 29 | #define SNAPSHOT_AVAIL_SWAP_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 19, __kernel_loff_t) |
| 29 | #define SNAPSHOT_ALLOC_SWAP_PAGE _IOR(SNAPSHOT_IOC_MAGIC, 20, loff_t) | 30 | #define SNAPSHOT_ALLOC_SWAP_PAGE _IOR(SNAPSHOT_IOC_MAGIC, 20, __kernel_loff_t) |
| 30 | #define SNAPSHOT_IOC_MAXNR 20 | 31 | #define SNAPSHOT_IOC_MAXNR 20 |
| 31 | 32 | ||
| 32 | #endif /* _LINUX_SUSPEND_IOCTLS_H */ | 33 | #endif /* _LINUX_SUSPEND_IOCTLS_H */ |
diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h index dedd3c0cfe30..ac9ff54f7cb3 100644 --- a/include/linux/swiotlb.h +++ b/include/linux/swiotlb.h | |||
| @@ -31,7 +31,7 @@ extern dma_addr_t swiotlb_phys_to_bus(struct device *hwdev, | |||
| 31 | phys_addr_t address); | 31 | phys_addr_t address); |
| 32 | extern phys_addr_t swiotlb_bus_to_phys(dma_addr_t address); | 32 | extern phys_addr_t swiotlb_bus_to_phys(dma_addr_t address); |
| 33 | 33 | ||
| 34 | extern int swiotlb_arch_range_needs_mapping(void *ptr, size_t size); | 34 | extern int swiotlb_arch_range_needs_mapping(phys_addr_t paddr, size_t size); |
| 35 | 35 | ||
| 36 | extern void | 36 | extern void |
| 37 | *swiotlb_alloc_coherent(struct device *hwdev, size_t size, | 37 | *swiotlb_alloc_coherent(struct device *hwdev, size_t size, |
| @@ -41,20 +41,13 @@ extern void | |||
| 41 | swiotlb_free_coherent(struct device *hwdev, size_t size, | 41 | swiotlb_free_coherent(struct device *hwdev, size_t size, |
| 42 | void *vaddr, dma_addr_t dma_handle); | 42 | void *vaddr, dma_addr_t dma_handle); |
| 43 | 43 | ||
| 44 | extern dma_addr_t | 44 | extern dma_addr_t swiotlb_map_page(struct device *dev, struct page *page, |
| 45 | swiotlb_map_single(struct device *hwdev, void *ptr, size_t size, int dir); | 45 | unsigned long offset, size_t size, |
| 46 | 46 | enum dma_data_direction dir, | |
| 47 | extern void | 47 | struct dma_attrs *attrs); |
| 48 | swiotlb_unmap_single(struct device *hwdev, dma_addr_t dev_addr, | 48 | extern void swiotlb_unmap_page(struct device *hwdev, dma_addr_t dev_addr, |
| 49 | size_t size, int dir); | 49 | size_t size, enum dma_data_direction dir, |
| 50 | 50 | struct dma_attrs *attrs); | |
| 51 | extern dma_addr_t | ||
| 52 | swiotlb_map_single_attrs(struct device *hwdev, void *ptr, size_t size, | ||
| 53 | int dir, struct dma_attrs *attrs); | ||
| 54 | |||
| 55 | extern void | ||
| 56 | swiotlb_unmap_single_attrs(struct device *hwdev, dma_addr_t dev_addr, | ||
| 57 | size_t size, int dir, struct dma_attrs *attrs); | ||
| 58 | 51 | ||
| 59 | extern int | 52 | extern int |
| 60 | swiotlb_map_sg(struct device *hwdev, struct scatterlist *sg, int nents, | 53 | swiotlb_map_sg(struct device *hwdev, struct scatterlist *sg, int nents, |
| @@ -66,36 +59,38 @@ swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents, | |||
| 66 | 59 | ||
| 67 | extern int | 60 | extern int |
| 68 | swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, int nelems, | 61 | swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, int nelems, |
| 69 | int dir, struct dma_attrs *attrs); | 62 | enum dma_data_direction dir, struct dma_attrs *attrs); |
| 70 | 63 | ||
| 71 | extern void | 64 | extern void |
| 72 | swiotlb_unmap_sg_attrs(struct device *hwdev, struct scatterlist *sgl, | 65 | swiotlb_unmap_sg_attrs(struct device *hwdev, struct scatterlist *sgl, |
| 73 | int nelems, int dir, struct dma_attrs *attrs); | 66 | int nelems, enum dma_data_direction dir, |
| 67 | struct dma_attrs *attrs); | ||
| 74 | 68 | ||
| 75 | extern void | 69 | extern void |
| 76 | swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr, | 70 | swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr, |
| 77 | size_t size, int dir); | 71 | size_t size, enum dma_data_direction dir); |
| 78 | 72 | ||
| 79 | extern void | 73 | extern void |
| 80 | swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg, | 74 | swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg, |
| 81 | int nelems, int dir); | 75 | int nelems, enum dma_data_direction dir); |
| 82 | 76 | ||
| 83 | extern void | 77 | extern void |
| 84 | swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr, | 78 | swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr, |
| 85 | size_t size, int dir); | 79 | size_t size, enum dma_data_direction dir); |
| 86 | 80 | ||
| 87 | extern void | 81 | extern void |
| 88 | swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg, | 82 | swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg, |
| 89 | int nelems, int dir); | 83 | int nelems, enum dma_data_direction dir); |
| 90 | 84 | ||
| 91 | extern void | 85 | extern void |
| 92 | swiotlb_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dev_addr, | 86 | swiotlb_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dev_addr, |
| 93 | unsigned long offset, size_t size, int dir); | 87 | unsigned long offset, size_t size, |
| 88 | enum dma_data_direction dir); | ||
| 94 | 89 | ||
| 95 | extern void | 90 | extern void |
| 96 | swiotlb_sync_single_range_for_device(struct device *hwdev, dma_addr_t dev_addr, | 91 | swiotlb_sync_single_range_for_device(struct device *hwdev, dma_addr_t dev_addr, |
| 97 | unsigned long offset, size_t size, | 92 | unsigned long offset, size_t size, |
| 98 | int dir); | 93 | enum dma_data_direction dir); |
| 99 | 94 | ||
| 100 | extern int | 95 | extern int |
| 101 | swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr); | 96 | swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr); |
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/time.h b/include/linux/time.h index fbbd2a1c92ba..242f62499bb7 100644 --- a/include/linux/time.h +++ b/include/linux/time.h | |||
| @@ -12,14 +12,14 @@ | |||
| 12 | #ifndef _STRUCT_TIMESPEC | 12 | #ifndef _STRUCT_TIMESPEC |
| 13 | #define _STRUCT_TIMESPEC | 13 | #define _STRUCT_TIMESPEC |
| 14 | struct timespec { | 14 | struct timespec { |
| 15 | time_t tv_sec; /* seconds */ | 15 | __kernel_time_t tv_sec; /* seconds */ |
| 16 | long tv_nsec; /* nanoseconds */ | 16 | long tv_nsec; /* nanoseconds */ |
| 17 | }; | 17 | }; |
| 18 | #endif | 18 | #endif |
| 19 | 19 | ||
| 20 | struct timeval { | 20 | struct timeval { |
| 21 | time_t tv_sec; /* seconds */ | 21 | __kernel_time_t tv_sec; /* seconds */ |
| 22 | suseconds_t tv_usec; /* microseconds */ | 22 | __kernel_suseconds_t tv_usec; /* microseconds */ |
| 23 | }; | 23 | }; |
| 24 | 24 | ||
| 25 | struct timezone { | 25 | struct timezone { |
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/times.h b/include/linux/times.h index e2d3020742a6..87b62615cedd 100644 --- a/include/linux/times.h +++ b/include/linux/times.h | |||
| @@ -4,10 +4,10 @@ | |||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | 5 | ||
| 6 | struct tms { | 6 | struct tms { |
| 7 | clock_t tms_utime; | 7 | __kernel_clock_t tms_utime; |
| 8 | clock_t tms_stime; | 8 | __kernel_clock_t tms_stime; |
| 9 | clock_t tms_cutime; | 9 | __kernel_clock_t tms_cutime; |
| 10 | clock_t tms_cstime; | 10 | __kernel_clock_t tms_cstime; |
| 11 | }; | 11 | }; |
| 12 | 12 | ||
| 13 | #endif | 13 | #endif |
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/types.h b/include/linux/types.h index fca82ed55f49..5abe354020f9 100644 --- a/include/linux/types.h +++ b/include/linux/types.h | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | 13 | ||
| 14 | #include <linux/posix_types.h> | 14 | #include <linux/posix_types.h> |
| 15 | 15 | ||
| 16 | #ifndef __KERNEL_STRICT_NAMES | 16 | #ifdef __KERNEL__ |
| 17 | 17 | ||
| 18 | typedef __u32 __kernel_dev_t; | 18 | typedef __u32 __kernel_dev_t; |
| 19 | 19 | ||
| @@ -31,7 +31,6 @@ typedef __kernel_timer_t timer_t; | |||
| 31 | typedef __kernel_clockid_t clockid_t; | 31 | typedef __kernel_clockid_t clockid_t; |
| 32 | typedef __kernel_mqd_t mqd_t; | 32 | typedef __kernel_mqd_t mqd_t; |
| 33 | 33 | ||
| 34 | #ifdef __KERNEL__ | ||
| 35 | typedef _Bool bool; | 34 | typedef _Bool bool; |
| 36 | 35 | ||
| 37 | typedef __kernel_uid32_t uid_t; | 36 | typedef __kernel_uid32_t uid_t; |
| @@ -47,14 +46,6 @@ typedef __kernel_old_uid_t old_uid_t; | |||
| 47 | typedef __kernel_old_gid_t old_gid_t; | 46 | typedef __kernel_old_gid_t old_gid_t; |
| 48 | #endif /* CONFIG_UID16 */ | 47 | #endif /* CONFIG_UID16 */ |
| 49 | 48 | ||
| 50 | /* libc5 includes this file to define uid_t, thus uid_t can never change | ||
| 51 | * when it is included by non-kernel code | ||
| 52 | */ | ||
| 53 | #else | ||
| 54 | typedef __kernel_uid_t uid_t; | ||
| 55 | typedef __kernel_gid_t gid_t; | ||
| 56 | #endif /* __KERNEL__ */ | ||
| 57 | |||
| 58 | #if defined(__GNUC__) | 49 | #if defined(__GNUC__) |
| 59 | typedef __kernel_loff_t loff_t; | 50 | typedef __kernel_loff_t loff_t; |
| 60 | #endif | 51 | #endif |
| @@ -156,7 +147,7 @@ typedef unsigned long blkcnt_t; | |||
| 156 | #define pgoff_t unsigned long | 147 | #define pgoff_t unsigned long |
| 157 | #endif | 148 | #endif |
| 158 | 149 | ||
| 159 | #endif /* __KERNEL_STRICT_NAMES */ | 150 | #endif /* __KERNEL__ */ |
| 160 | 151 | ||
| 161 | /* | 152 | /* |
| 162 | * Below are truly Linux-specific types that should never collide with | 153 | * Below are truly Linux-specific types that should never collide with |
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/utime.h b/include/linux/utime.h index 640be6a1959e..5cdf673afbdb 100644 --- a/include/linux/utime.h +++ b/include/linux/utime.h | |||
| @@ -4,8 +4,8 @@ | |||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | 5 | ||
| 6 | struct utimbuf { | 6 | struct utimbuf { |
| 7 | time_t actime; | 7 | __kernel_time_t actime; |
| 8 | time_t modtime; | 8 | __kernel_time_t modtime; |
| 9 | }; | 9 | }; |
| 10 | 10 | ||
| 11 | #endif | 11 | #endif |
diff --git a/include/linux/video_decoder.h b/include/linux/video_decoder.h deleted file mode 100644 index e26c0c86a6ea..000000000000 --- a/include/linux/video_decoder.h +++ /dev/null | |||
| @@ -1,48 +0,0 @@ | |||
| 1 | #ifndef _LINUX_VIDEO_DECODER_H | ||
| 2 | #define _LINUX_VIDEO_DECODER_H | ||
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 6 | #define HAVE_VIDEO_DECODER 1 | ||
| 7 | |||
| 8 | struct video_decoder_capability { /* this name is too long */ | ||
| 9 | __u32 flags; | ||
| 10 | #define VIDEO_DECODER_PAL 1 /* can decode PAL signal */ | ||
| 11 | #define VIDEO_DECODER_NTSC 2 /* can decode NTSC */ | ||
| 12 | #define VIDEO_DECODER_SECAM 4 /* can decode SECAM */ | ||
| 13 | #define VIDEO_DECODER_AUTO 8 /* can autosense norm */ | ||
| 14 | #define VIDEO_DECODER_CCIR 16 /* CCIR-601 pixel rate (720 pixels per line) instead of square pixel rate */ | ||
| 15 | int inputs; /* number of inputs */ | ||
| 16 | int outputs; /* number of outputs */ | ||
| 17 | }; | ||
| 18 | |||
| 19 | /* | ||
| 20 | DECODER_GET_STATUS returns the following flags. The only one you need is | ||
| 21 | DECODER_STATUS_GOOD, the others are just nice things to know. | ||
| 22 | */ | ||
| 23 | #define DECODER_STATUS_GOOD 1 /* receiving acceptable input */ | ||
| 24 | #define DECODER_STATUS_COLOR 2 /* receiving color information */ | ||
| 25 | #define DECODER_STATUS_PAL 4 /* auto detected */ | ||
| 26 | #define DECODER_STATUS_NTSC 8 /* auto detected */ | ||
| 27 | #define DECODER_STATUS_SECAM 16 /* auto detected */ | ||
| 28 | |||
| 29 | struct video_decoder_init { | ||
| 30 | unsigned char len; | ||
| 31 | const unsigned char *data; | ||
| 32 | }; | ||
| 33 | |||
| 34 | #define DECODER_GET_CAPABILITIES _IOR('d', 1, struct video_decoder_capability) | ||
| 35 | #define DECODER_GET_STATUS _IOR('d', 2, int) | ||
| 36 | #define DECODER_SET_NORM _IOW('d', 3, int) | ||
| 37 | #define DECODER_SET_INPUT _IOW('d', 4, int) /* 0 <= input < #inputs */ | ||
| 38 | #define DECODER_SET_OUTPUT _IOW('d', 5, int) /* 0 <= output < #outputs */ | ||
| 39 | #define DECODER_ENABLE_OUTPUT _IOW('d', 6, int) /* boolean output enable control */ | ||
| 40 | #define DECODER_SET_PICTURE _IOW('d', 7, struct video_picture) | ||
| 41 | #define DECODER_SET_GPIO _IOW('d', 8, int) /* switch general purpose pin */ | ||
| 42 | #define DECODER_INIT _IOW('d', 9, struct video_decoder_init) /* init internal registers at once */ | ||
| 43 | #define DECODER_SET_VBI_BYPASS _IOW('d', 10, int) /* switch vbi bypass */ | ||
| 44 | |||
| 45 | #define DECODER_DUMP _IO('d', 192) /* debug hook */ | ||
| 46 | |||
| 47 | |||
| 48 | #endif | ||
diff --git a/include/linux/video_encoder.h b/include/linux/video_encoder.h deleted file mode 100644 index b7b6423bbb8a..000000000000 --- a/include/linux/video_encoder.h +++ /dev/null | |||
| @@ -1,23 +0,0 @@ | |||
| 1 | #ifndef _LINUX_VIDEO_ENCODER_H | ||
| 2 | #define _LINUX_VIDEO_ENCODER_H | ||
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 6 | struct video_encoder_capability { /* this name is too long */ | ||
| 7 | __u32 flags; | ||
| 8 | #define VIDEO_ENCODER_PAL 1 /* can encode PAL signal */ | ||
| 9 | #define VIDEO_ENCODER_NTSC 2 /* can encode NTSC */ | ||
| 10 | #define VIDEO_ENCODER_SECAM 4 /* can encode SECAM */ | ||
| 11 | #define VIDEO_ENCODER_CCIR 16 /* CCIR-601 pixel rate (720 pixels per line) instead of square pixel rate */ | ||
| 12 | int inputs; /* number of inputs */ | ||
| 13 | int outputs; /* number of outputs */ | ||
| 14 | }; | ||
| 15 | |||
| 16 | #define ENCODER_GET_CAPABILITIES _IOR('e', 1, struct video_encoder_capability) | ||
| 17 | #define ENCODER_SET_NORM _IOW('e', 2, int) | ||
| 18 | #define ENCODER_SET_INPUT _IOW('e', 3, int) /* 0 <= input < #inputs */ | ||
| 19 | #define ENCODER_SET_OUTPUT _IOW('e', 4, int) /* 0 <= output < #outputs */ | ||
| 20 | #define ENCODER_ENABLE_OUTPUT _IOW('e', 5, int) /* boolean output enable control */ | ||
| 21 | |||
| 22 | |||
| 23 | #endif | ||
diff --git a/include/linux/videodev.h b/include/linux/videodev.h index 837f392fbe97..b19eab140977 100644 --- a/include/linux/videodev.h +++ b/include/linux/videodev.h | |||
| @@ -16,6 +16,23 @@ | |||
| 16 | #include <linux/ioctl.h> | 16 | #include <linux/ioctl.h> |
| 17 | #include <linux/videodev2.h> | 17 | #include <linux/videodev2.h> |
| 18 | 18 | ||
| 19 | #if defined(__MIN_V4L1) && defined (__KERNEL__) | ||
| 20 | |||
| 21 | /* | ||
| 22 | * Used by those V4L2 core functions that need a minimum V4L1 support, | ||
| 23 | * in order to allow V4L1 Compatibilty code compilation. | ||
| 24 | */ | ||
| 25 | |||
| 26 | struct video_mbuf | ||
| 27 | { | ||
| 28 | int size; /* Total memory to map */ | ||
| 29 | int frames; /* Frames */ | ||
| 30 | int offsets[VIDEO_MAX_FRAME]; | ||
| 31 | }; | ||
| 32 | |||
| 33 | #define VIDIOCGMBUF _IOR('v',20, struct video_mbuf) /* Memory map buffer info */ | ||
| 34 | |||
| 35 | #else | ||
| 19 | #if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__) | 36 | #if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__) |
| 20 | 37 | ||
| 21 | #define VID_TYPE_CAPTURE 1 /* Can capture */ | 38 | #define VID_TYPE_CAPTURE 1 /* Can capture */ |
| @@ -312,6 +329,7 @@ struct video_code | |||
| 312 | #define VID_PLAY_END_MARK 14 | 329 | #define VID_PLAY_END_MARK 14 |
| 313 | 330 | ||
| 314 | #endif /* CONFIG_VIDEO_V4L1_COMPAT */ | 331 | #endif /* CONFIG_VIDEO_V4L1_COMPAT */ |
| 332 | #endif /* __MIN_V4L1 */ | ||
| 315 | 333 | ||
| 316 | #endif /* __LINUX_VIDEODEV_H */ | 334 | #endif /* __LINUX_VIDEODEV_H */ |
| 317 | 335 | ||
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 5571dbe1c0ad..139d234923cd 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
| @@ -344,6 +344,8 @@ struct v4l2_pix_format { | |||
| 344 | #define V4L2_PIX_FMT_SPCA508 v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */ | 344 | #define V4L2_PIX_FMT_SPCA508 v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */ |
| 345 | #define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */ | 345 | #define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */ |
| 346 | #define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */ | 346 | #define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */ |
| 347 | #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */ | ||
| 348 | #define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */ | ||
| 347 | #define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ | 349 | #define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ |
| 348 | #define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */ | 350 | #define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */ |
| 349 | 351 | ||
| @@ -829,6 +831,7 @@ struct v4l2_querymenu { | |||
| 829 | #define V4L2_CTRL_FLAG_UPDATE 0x0008 | 831 | #define V4L2_CTRL_FLAG_UPDATE 0x0008 |
| 830 | #define V4L2_CTRL_FLAG_INACTIVE 0x0010 | 832 | #define V4L2_CTRL_FLAG_INACTIVE 0x0010 |
| 831 | #define V4L2_CTRL_FLAG_SLIDER 0x0020 | 833 | #define V4L2_CTRL_FLAG_SLIDER 0x0020 |
| 834 | #define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040 | ||
| 832 | 835 | ||
| 833 | /* Query flag, to be ORed with the control ID */ | 836 | /* Query flag, to be ORed with the control ID */ |
| 834 | #define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000 | 837 | #define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000 |
| @@ -879,8 +882,15 @@ enum v4l2_power_line_frequency { | |||
| 879 | #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) | 882 | #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) |
| 880 | #define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) | 883 | #define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) |
| 881 | #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) | 884 | #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) |
| 885 | #define V4L2_CID_COLORFX (V4L2_CID_BASE+31) | ||
| 886 | enum v4l2_colorfx { | ||
| 887 | V4L2_COLORFX_NONE = 0, | ||
| 888 | V4L2_COLORFX_BW = 1, | ||
| 889 | V4L2_COLORFX_SEPIA = 2, | ||
| 890 | }; | ||
| 891 | |||
| 882 | /* last CID + 1 */ | 892 | /* last CID + 1 */ |
| 883 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+31) | 893 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+32) |
| 884 | 894 | ||
| 885 | /* MPEG-class control IDs defined by V4L2 */ | 895 | /* MPEG-class control IDs defined by V4L2 */ |
| 886 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) | 896 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) |
| @@ -1339,6 +1349,53 @@ struct v4l2_sliced_vbi_data { | |||
| 1339 | }; | 1349 | }; |
| 1340 | 1350 | ||
| 1341 | /* | 1351 | /* |
| 1352 | * Sliced VBI data inserted into MPEG Streams | ||
| 1353 | */ | ||
| 1354 | |||
| 1355 | /* | ||
| 1356 | * V4L2_MPEG_STREAM_VBI_FMT_IVTV: | ||
| 1357 | * | ||
| 1358 | * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an | ||
| 1359 | * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI | ||
| 1360 | * data | ||
| 1361 | * | ||
| 1362 | * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header | ||
| 1363 | * definitions are not included here. See the MPEG-2 specifications for details | ||
| 1364 | * on these headers. | ||
| 1365 | */ | ||
| 1366 | |||
| 1367 | /* Line type IDs */ | ||
| 1368 | #define V4L2_MPEG_VBI_IVTV_TELETEXT_B (1) | ||
| 1369 | #define V4L2_MPEG_VBI_IVTV_CAPTION_525 (4) | ||
| 1370 | #define V4L2_MPEG_VBI_IVTV_WSS_625 (5) | ||
| 1371 | #define V4L2_MPEG_VBI_IVTV_VPS (7) | ||
| 1372 | |||
| 1373 | struct v4l2_mpeg_vbi_itv0_line { | ||
| 1374 | __u8 id; /* One of V4L2_MPEG_VBI_IVTV_* above */ | ||
| 1375 | __u8 data[42]; /* Sliced VBI data for the line */ | ||
| 1376 | } __attribute__ ((packed)); | ||
| 1377 | |||
| 1378 | struct v4l2_mpeg_vbi_itv0 { | ||
| 1379 | __le32 linemask[2]; /* Bitmasks of VBI service lines present */ | ||
| 1380 | struct v4l2_mpeg_vbi_itv0_line line[35]; | ||
| 1381 | } __attribute__ ((packed)); | ||
| 1382 | |||
| 1383 | struct v4l2_mpeg_vbi_ITV0 { | ||
| 1384 | struct v4l2_mpeg_vbi_itv0_line line[36]; | ||
| 1385 | } __attribute__ ((packed)); | ||
| 1386 | |||
| 1387 | #define V4L2_MPEG_VBI_IVTV_MAGIC0 "itv0" | ||
| 1388 | #define V4L2_MPEG_VBI_IVTV_MAGIC1 "ITV0" | ||
| 1389 | |||
| 1390 | struct v4l2_mpeg_vbi_fmt_ivtv { | ||
| 1391 | __u8 magic[4]; | ||
| 1392 | union { | ||
| 1393 | struct v4l2_mpeg_vbi_itv0 itv0; | ||
| 1394 | struct v4l2_mpeg_vbi_ITV0 ITV0; | ||
| 1395 | }; | ||
| 1396 | } __attribute__ ((packed)); | ||
| 1397 | |||
| 1398 | /* | ||
| 1342 | * A G G R E G A T E S T R U C T U R E S | 1399 | * A G G R E G A T E S T R U C T U R E S |
| 1343 | */ | 1400 | */ |
| 1344 | 1401 | ||
| @@ -1403,14 +1460,6 @@ struct v4l2_dbg_chip_ident { | |||
| 1403 | __u32 revision; /* chip revision, chip specific */ | 1460 | __u32 revision; /* chip revision, chip specific */ |
| 1404 | } __attribute__ ((packed)); | 1461 | } __attribute__ ((packed)); |
| 1405 | 1462 | ||
| 1406 | /* VIDIOC_G_CHIP_IDENT_OLD: Deprecated, do not use */ | ||
| 1407 | struct v4l2_chip_ident_old { | ||
| 1408 | __u32 match_type; /* Match type */ | ||
| 1409 | __u32 match_chip; /* Match this chip, meaning determined by match_type */ | ||
| 1410 | __u32 ident; /* chip identifier as specified in <media/v4l2-chip-ident.h> */ | ||
| 1411 | __u32 revision; /* chip revision, chip specific */ | ||
| 1412 | }; | ||
| 1413 | |||
| 1414 | /* | 1463 | /* |
| 1415 | * I O C T L C O D E S F O R V I D E O D E V I C E S | 1464 | * I O C T L C O D E S F O R V I D E O D E V I C E S |
| 1416 | * | 1465 | * |
| @@ -1488,8 +1537,6 @@ struct v4l2_chip_ident_old { | |||
| 1488 | /* Experimental, meant for debugging, testing and internal use. | 1537 | /* Experimental, meant for debugging, testing and internal use. |
| 1489 | Never use this ioctl in applications! */ | 1538 | Never use this ioctl in applications! */ |
| 1490 | #define VIDIOC_DBG_G_CHIP_IDENT _IOWR('V', 81, struct v4l2_dbg_chip_ident) | 1539 | #define VIDIOC_DBG_G_CHIP_IDENT _IOWR('V', 81, struct v4l2_dbg_chip_ident) |
| 1491 | /* This is deprecated and will go away in 2.6.30 */ | ||
| 1492 | #define VIDIOC_G_CHIP_IDENT_OLD _IOWR('V', 81, struct v4l2_chip_ident_old) | ||
| 1493 | #endif | 1540 | #endif |
| 1494 | 1541 | ||
| 1495 | #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) | 1542 | #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) |
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/linux/xfrm.h b/include/linux/xfrm.h index 52f3abd453a1..2d4ec15abaca 100644 --- a/include/linux/xfrm.h +++ b/include/linux/xfrm.h | |||
| @@ -58,7 +58,7 @@ struct xfrm_selector | |||
| 58 | __u8 prefixlen_s; | 58 | __u8 prefixlen_s; |
| 59 | __u8 proto; | 59 | __u8 proto; |
| 60 | int ifindex; | 60 | int ifindex; |
| 61 | uid_t user; | 61 | __kernel_uid32_t user; |
| 62 | }; | 62 | }; |
| 63 | 63 | ||
| 64 | #define XFRM_INF (~(__u64)0) | 64 | #define XFRM_INF (~(__u64)0) |
diff --git a/include/media/bt819.h b/include/media/bt819.h new file mode 100644 index 000000000000..38f666bde77a --- /dev/null +++ b/include/media/bt819.h | |||
| @@ -0,0 +1,33 @@ | |||
| 1 | /* | ||
| 2 | bt819.h - bt819 notifications | ||
| 3 | |||
| 4 | Copyright (C) 2009 Hans Verkuil (hverkuil@xs4all.nl) | ||
| 5 | |||
| 6 | This program is free software; you can redistribute it and/or modify | ||
| 7 | it under the terms of the GNU General Public License as published by | ||
| 8 | the Free Software Foundation; either version 2 of the License, or | ||
| 9 | (at your option) any later version. | ||
| 10 | |||
| 11 | This program is distributed in the hope that it will be useful, | ||
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | GNU General Public License for more details. | ||
| 15 | |||
| 16 | You should have received a copy of the GNU General Public License | ||
| 17 | along with this program; if not, write to the Free Software | ||
| 18 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef _BT819_H_ | ||
| 22 | #define _BT819_H_ | ||
| 23 | |||
| 24 | #include <linux/ioctl.h> | ||
| 25 | |||
| 26 | /* v4l2_device notifications. */ | ||
| 27 | |||
| 28 | /* Needed to reset the FIFO buffer when changing the input | ||
| 29 | or the video standard. */ | ||
| 30 | #define BT819_FIFO_RESET_LOW _IO('b', 0) | ||
| 31 | #define BT819_FIFO_RESET_HIGH _IO('b', 1) | ||
| 32 | |||
| 33 | #endif | ||
diff --git a/include/media/cx2341x.h b/include/media/cx2341x.h index 9ec4d5889ef5..9ebe8558b9b6 100644 --- a/include/media/cx2341x.h +++ b/include/media/cx2341x.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | cx23415/6 header containing common defines. | 2 | cx23415/6/8 header containing common defines. |
| 3 | 3 | ||
| 4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
| 5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
| @@ -28,6 +28,7 @@ enum cx2341x_port { | |||
| 28 | enum cx2341x_cap { | 28 | enum cx2341x_cap { |
| 29 | CX2341X_CAP_HAS_SLICED_VBI = 1 << 0, | 29 | CX2341X_CAP_HAS_SLICED_VBI = 1 << 0, |
| 30 | CX2341X_CAP_HAS_TS = 1 << 1, | 30 | CX2341X_CAP_HAS_TS = 1 << 1, |
| 31 | CX2341X_CAP_HAS_AC3 = 1 << 2, | ||
| 31 | }; | 32 | }; |
| 32 | 33 | ||
| 33 | struct cx2341x_mpeg_params { | 34 | struct cx2341x_mpeg_params { |
| @@ -47,11 +48,12 @@ struct cx2341x_mpeg_params { | |||
| 47 | enum v4l2_mpeg_audio_sampling_freq audio_sampling_freq; | 48 | enum v4l2_mpeg_audio_sampling_freq audio_sampling_freq; |
| 48 | enum v4l2_mpeg_audio_encoding audio_encoding; | 49 | enum v4l2_mpeg_audio_encoding audio_encoding; |
| 49 | enum v4l2_mpeg_audio_l2_bitrate audio_l2_bitrate; | 50 | enum v4l2_mpeg_audio_l2_bitrate audio_l2_bitrate; |
| 51 | enum v4l2_mpeg_audio_ac3_bitrate audio_ac3_bitrate; | ||
| 50 | enum v4l2_mpeg_audio_mode audio_mode; | 52 | enum v4l2_mpeg_audio_mode audio_mode; |
| 51 | enum v4l2_mpeg_audio_mode_extension audio_mode_extension; | 53 | enum v4l2_mpeg_audio_mode_extension audio_mode_extension; |
| 52 | enum v4l2_mpeg_audio_emphasis audio_emphasis; | 54 | enum v4l2_mpeg_audio_emphasis audio_emphasis; |
| 53 | enum v4l2_mpeg_audio_crc audio_crc; | 55 | enum v4l2_mpeg_audio_crc audio_crc; |
| 54 | u16 audio_properties; | 56 | u32 audio_properties; |
| 55 | u16 audio_mute; | 57 | u16 audio_mute; |
| 56 | 58 | ||
| 57 | /* video */ | 59 | /* video */ |
diff --git a/include/media/cx25840.h b/include/media/cx25840.h index db431d513f2f..2c3fbaa33f74 100644 --- a/include/media/cx25840.h +++ b/include/media/cx25840.h | |||
| @@ -21,6 +21,18 @@ | |||
| 21 | #ifndef _CX25840_H_ | 21 | #ifndef _CX25840_H_ |
| 22 | #define _CX25840_H_ | 22 | #define _CX25840_H_ |
| 23 | 23 | ||
| 24 | /* Note that the cx25840 driver requires that the bridge driver calls the | ||
| 25 | v4l2_subdev's init operation in order to load the driver's firmware. | ||
| 26 | Without this the audio standard detection will fail and you will | ||
| 27 | only get mono. | ||
| 28 | |||
| 29 | Since loading the firmware is often problematic when the driver is | ||
| 30 | compiled into the kernel I recommend postponing calling this function | ||
| 31 | until the first open of the video device. Another reason for | ||
| 32 | postponing it is that loading this firmware takes a long time (seconds) | ||
| 33 | due to the slow i2c bus speed. So it will speed up the boot process if | ||
| 34 | you can avoid loading the fw as long as the video device isn't used. */ | ||
| 35 | |||
| 24 | enum cx25840_video_input { | 36 | enum cx25840_video_input { |
| 25 | /* Composite video inputs In1-In8 */ | 37 | /* Composite video inputs In1-In8 */ |
| 26 | CX25840_COMPOSITE1 = 1, | 38 | CX25840_COMPOSITE1 = 1, |
diff --git a/include/media/ir-common.h b/include/media/ir-common.h index 5bf2ea00678c..7b5b91f60425 100644 --- a/include/media/ir-common.h +++ b/include/media/ir-common.h | |||
| @@ -111,6 +111,7 @@ extern IR_KEYTAB_TYPE ir_codes_empty[IR_KEYTAB_SIZE]; | |||
| 111 | extern IR_KEYTAB_TYPE ir_codes_avermedia[IR_KEYTAB_SIZE]; | 111 | extern IR_KEYTAB_TYPE ir_codes_avermedia[IR_KEYTAB_SIZE]; |
| 112 | extern IR_KEYTAB_TYPE ir_codes_avermedia_dvbt[IR_KEYTAB_SIZE]; | 112 | extern IR_KEYTAB_TYPE ir_codes_avermedia_dvbt[IR_KEYTAB_SIZE]; |
| 113 | extern IR_KEYTAB_TYPE ir_codes_avermedia_m135a[IR_KEYTAB_SIZE]; | 113 | extern IR_KEYTAB_TYPE ir_codes_avermedia_m135a[IR_KEYTAB_SIZE]; |
| 114 | extern IR_KEYTAB_TYPE ir_codes_avermedia_cardbus[IR_KEYTAB_SIZE]; | ||
| 114 | extern IR_KEYTAB_TYPE ir_codes_apac_viewcomp[IR_KEYTAB_SIZE]; | 115 | extern IR_KEYTAB_TYPE ir_codes_apac_viewcomp[IR_KEYTAB_SIZE]; |
| 115 | extern IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE]; | 116 | extern IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE]; |
| 116 | extern IR_KEYTAB_TYPE ir_codes_pixelview_new[IR_KEYTAB_SIZE]; | 117 | extern IR_KEYTAB_TYPE ir_codes_pixelview_new[IR_KEYTAB_SIZE]; |
| @@ -159,6 +160,8 @@ extern IR_KEYTAB_TYPE ir_codes_real_audio_220_32_keys[IR_KEYTAB_SIZE]; | |||
| 159 | extern IR_KEYTAB_TYPE ir_codes_msi_tvanywhere_plus[IR_KEYTAB_SIZE]; | 160 | extern IR_KEYTAB_TYPE ir_codes_msi_tvanywhere_plus[IR_KEYTAB_SIZE]; |
| 160 | extern IR_KEYTAB_TYPE ir_codes_ati_tv_wonder_hd_600[IR_KEYTAB_SIZE]; | 161 | extern IR_KEYTAB_TYPE ir_codes_ati_tv_wonder_hd_600[IR_KEYTAB_SIZE]; |
| 161 | extern IR_KEYTAB_TYPE ir_codes_kworld_plus_tv_analog[IR_KEYTAB_SIZE]; | 162 | extern IR_KEYTAB_TYPE ir_codes_kworld_plus_tv_analog[IR_KEYTAB_SIZE]; |
| 163 | extern IR_KEYTAB_TYPE ir_codes_kaiomy[IR_KEYTAB_SIZE]; | ||
| 164 | extern IR_KEYTAB_TYPE ir_codes_dm1105_nec[IR_KEYTAB_SIZE]; | ||
| 162 | #endif | 165 | #endif |
| 163 | 166 | ||
| 164 | /* | 167 | /* |
diff --git a/include/media/ir-kbd-i2c.h b/include/media/ir-kbd-i2c.h index 00fa57eb9fde..07963d705400 100644 --- a/include/media/ir-kbd-i2c.h +++ b/include/media/ir-kbd-i2c.h | |||
| @@ -14,8 +14,7 @@ struct IR_i2c { | |||
| 14 | /* Used to avoid fast repeating */ | 14 | /* Used to avoid fast repeating */ |
| 15 | unsigned char old; | 15 | unsigned char old; |
| 16 | 16 | ||
| 17 | struct work_struct work; | 17 | struct delayed_work work; |
| 18 | struct timer_list timer; | ||
| 19 | char phys[32]; | 18 | char phys[32]; |
| 20 | int (*get_key)(struct IR_i2c*, u32*, u32*); | 19 | int (*get_key)(struct IR_i2c*, u32*, u32*); |
| 21 | }; | 20 | }; |
diff --git a/include/media/ov772x.h b/include/media/ov772x.h index e391d55edb95..57db48dd85b8 100644 --- a/include/media/ov772x.h +++ b/include/media/ov772x.h | |||
| @@ -13,8 +13,13 @@ | |||
| 13 | 13 | ||
| 14 | #include <media/soc_camera.h> | 14 | #include <media/soc_camera.h> |
| 15 | 15 | ||
| 16 | /* for flags */ | ||
| 17 | #define OV772X_FLAG_VFLIP 0x00000001 /* Vertical flip image */ | ||
| 18 | #define OV772X_FLAG_HFLIP 0x00000002 /* Horizontal flip image */ | ||
| 19 | |||
| 16 | struct ov772x_camera_info { | 20 | struct ov772x_camera_info { |
| 17 | unsigned long buswidth; | 21 | unsigned long buswidth; |
| 22 | unsigned long flags; | ||
| 18 | struct soc_camera_link link; | 23 | struct soc_camera_link link; |
| 19 | }; | 24 | }; |
| 20 | 25 | ||
diff --git a/include/media/saa7146.h b/include/media/saa7146.h index c5a6e22a4b37..fff4235adae5 100644 --- a/include/media/saa7146.h +++ b/include/media/saa7146.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/stringify.h> | 13 | #include <linux/stringify.h> |
| 14 | #include <linux/mutex.h> | 14 | #include <linux/mutex.h> |
| 15 | #include <linux/scatterlist.h> | 15 | #include <linux/scatterlist.h> |
| 16 | #include <media/v4l2-device.h> | ||
| 16 | 17 | ||
| 17 | #include <linux/vmalloc.h> /* for vmalloc() */ | 18 | #include <linux/vmalloc.h> /* for vmalloc() */ |
| 18 | #include <linux/mm.h> /* for vmalloc_to_page() */ | 19 | #include <linux/mm.h> /* for vmalloc_to_page() */ |
| @@ -110,6 +111,8 @@ struct saa7146_dev | |||
| 110 | 111 | ||
| 111 | struct list_head item; | 112 | struct list_head item; |
| 112 | 113 | ||
| 114 | struct v4l2_device v4l2_dev; | ||
| 115 | |||
| 113 | /* different device locks */ | 116 | /* different device locks */ |
| 114 | spinlock_t slock; | 117 | spinlock_t slock; |
| 115 | struct mutex lock; | 118 | struct mutex lock; |
| @@ -145,6 +148,11 @@ struct saa7146_dev | |||
| 145 | struct saa7146_dma d_rps1; | 148 | struct saa7146_dma d_rps1; |
| 146 | }; | 149 | }; |
| 147 | 150 | ||
| 151 | static inline struct saa7146_dev *to_saa7146_dev(struct v4l2_device *v4l2_dev) | ||
| 152 | { | ||
| 153 | return container_of(v4l2_dev, struct saa7146_dev, v4l2_dev); | ||
| 154 | } | ||
| 155 | |||
| 148 | /* from saa7146_i2c.c */ | 156 | /* from saa7146_i2c.c */ |
| 149 | int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter *i2c_adapter, u32 bitrate); | 157 | int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter *i2c_adapter, u32 bitrate); |
| 150 | 158 | ||
diff --git a/include/media/saa7146_vv.h b/include/media/saa7146_vv.h index c8d0b23fde29..eed5fccc83f3 100644 --- a/include/media/saa7146_vv.h +++ b/include/media/saa7146_vv.h | |||
| @@ -150,16 +150,6 @@ struct saa7146_vv | |||
| 150 | unsigned int resources; /* resource management for device */ | 150 | unsigned int resources; /* resource management for device */ |
| 151 | }; | 151 | }; |
| 152 | 152 | ||
| 153 | #define SAA7146_EXCLUSIVE 0x1 | ||
| 154 | #define SAA7146_BEFORE 0x2 | ||
| 155 | #define SAA7146_AFTER 0x4 | ||
| 156 | |||
| 157 | struct saa7146_extension_ioctls | ||
| 158 | { | ||
| 159 | unsigned int cmd; | ||
| 160 | int flags; | ||
| 161 | }; | ||
| 162 | |||
| 163 | /* flags */ | 153 | /* flags */ |
| 164 | #define SAA7146_USE_PORT_B_FOR_VBI 0x2 /* use input port b for vbi hardware bug workaround */ | 154 | #define SAA7146_USE_PORT_B_FOR_VBI 0x2 /* use input port b for vbi hardware bug workaround */ |
| 165 | 155 | ||
| @@ -176,8 +166,10 @@ struct saa7146_ext_vv | |||
| 176 | int num_stds; | 166 | int num_stds; |
| 177 | int (*std_callback)(struct saa7146_dev*, struct saa7146_standard *); | 167 | int (*std_callback)(struct saa7146_dev*, struct saa7146_standard *); |
| 178 | 168 | ||
| 179 | struct saa7146_extension_ioctls *ioctls; | 169 | /* the extension can override this */ |
| 180 | long (*ioctl)(struct saa7146_fh *, unsigned int cmd, void *arg); | 170 | struct v4l2_ioctl_ops ops; |
| 171 | /* pointer to the saa7146 core ops */ | ||
| 172 | const struct v4l2_ioctl_ops *core_ops; | ||
| 181 | 173 | ||
| 182 | struct v4l2_file_operations vbi_fops; | 174 | struct v4l2_file_operations vbi_fops; |
| 183 | }; | 175 | }; |
| @@ -213,6 +205,7 @@ void saa7146_set_hps_source_and_sync(struct saa7146_dev *saa, int source, int sy | |||
| 213 | void saa7146_set_gpio(struct saa7146_dev *saa, u8 pin, u8 data); | 205 | void saa7146_set_gpio(struct saa7146_dev *saa, u8 pin, u8 data); |
| 214 | 206 | ||
| 215 | /* from saa7146_video.c */ | 207 | /* from saa7146_video.c */ |
| 208 | extern const struct v4l2_ioctl_ops saa7146_video_ioctl_ops; | ||
| 216 | extern struct saa7146_use_ops saa7146_video_uops; | 209 | extern struct saa7146_use_ops saa7146_video_uops; |
| 217 | int saa7146_start_preview(struct saa7146_fh *fh); | 210 | int saa7146_start_preview(struct saa7146_fh *fh); |
| 218 | int saa7146_stop_preview(struct saa7146_fh *fh); | 211 | int saa7146_stop_preview(struct saa7146_fh *fh); |
diff --git a/include/media/sh_mobile_ceu.h b/include/media/sh_mobile_ceu.h index b5dbefea3740..0f3524cff435 100644 --- a/include/media/sh_mobile_ceu.h +++ b/include/media/sh_mobile_ceu.h | |||
| @@ -1,10 +1,11 @@ | |||
| 1 | #ifndef __ASM_SH_MOBILE_CEU_H__ | 1 | #ifndef __ASM_SH_MOBILE_CEU_H__ |
| 2 | #define __ASM_SH_MOBILE_CEU_H__ | 2 | #define __ASM_SH_MOBILE_CEU_H__ |
| 3 | 3 | ||
| 4 | #include <media/soc_camera.h> | 4 | #define SH_CEU_FLAG_USE_8BIT_BUS (1 << 0) /* use 8bit bus width */ |
| 5 | #define SH_CEU_FLAG_USE_16BIT_BUS (1 << 1) /* use 16bit bus width */ | ||
| 5 | 6 | ||
| 6 | struct sh_mobile_ceu_info { | 7 | struct sh_mobile_ceu_info { |
| 7 | unsigned long flags; /* SOCAM_... */ | 8 | unsigned long flags; |
| 8 | }; | 9 | }; |
| 9 | 10 | ||
| 10 | #endif /* __ASM_SH_MOBILE_CEU_H__ */ | 11 | #endif /* __ASM_SH_MOBILE_CEU_H__ */ |
diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h index 7440d9250665..37013688af44 100644 --- a/include/media/soc_camera.h +++ b/include/media/soc_camera.h | |||
| @@ -45,6 +45,7 @@ struct soc_camera_device { | |||
| 45 | int num_formats; | 45 | int num_formats; |
| 46 | struct soc_camera_format_xlate *user_formats; | 46 | struct soc_camera_format_xlate *user_formats; |
| 47 | int num_user_formats; | 47 | int num_user_formats; |
| 48 | enum v4l2_field field; /* Preserve field over close() */ | ||
| 48 | struct module *owner; | 49 | struct module *owner; |
| 49 | void *host_priv; /* Per-device host private data */ | 50 | void *host_priv; /* Per-device host private data */ |
| 50 | /* soc_camera.c private count. Only accessed with .video_lock held */ | 51 | /* soc_camera.c private count. Only accessed with .video_lock held */ |
| @@ -74,7 +75,8 @@ struct soc_camera_host_ops { | |||
| 74 | int (*resume)(struct soc_camera_device *); | 75 | int (*resume)(struct soc_camera_device *); |
| 75 | int (*get_formats)(struct soc_camera_device *, int, | 76 | int (*get_formats)(struct soc_camera_device *, int, |
| 76 | struct soc_camera_format_xlate *); | 77 | struct soc_camera_format_xlate *); |
| 77 | int (*set_fmt)(struct soc_camera_device *, __u32, struct v4l2_rect *); | 78 | int (*set_crop)(struct soc_camera_device *, struct v4l2_rect *); |
| 79 | int (*set_fmt)(struct soc_camera_device *, struct v4l2_format *); | ||
| 78 | int (*try_fmt)(struct soc_camera_device *, struct v4l2_format *); | 80 | int (*try_fmt)(struct soc_camera_device *, struct v4l2_format *); |
| 79 | void (*init_videobuf)(struct videobuf_queue *, | 81 | void (*init_videobuf)(struct videobuf_queue *, |
| 80 | struct soc_camera_device *); | 82 | struct soc_camera_device *); |
| @@ -93,13 +95,18 @@ struct soc_camera_host_ops { | |||
| 93 | struct soc_camera_link { | 95 | struct soc_camera_link { |
| 94 | /* Camera bus id, used to match a camera and a bus */ | 96 | /* Camera bus id, used to match a camera and a bus */ |
| 95 | int bus_id; | 97 | int bus_id; |
| 96 | /* GPIO number to switch between 8 and 10 bit modes */ | ||
| 97 | unsigned int gpio; | ||
| 98 | /* Per camera SOCAM_SENSOR_* bus flags */ | 98 | /* Per camera SOCAM_SENSOR_* bus flags */ |
| 99 | unsigned long flags; | 99 | unsigned long flags; |
| 100 | /* Optional callbacks to power on or off and reset the sensor */ | 100 | /* Optional callbacks to power on or off and reset the sensor */ |
| 101 | int (*power)(struct device *, int); | 101 | int (*power)(struct device *, int); |
| 102 | int (*reset)(struct device *); | 102 | int (*reset)(struct device *); |
| 103 | /* | ||
| 104 | * some platforms may support different data widths than the sensors | ||
| 105 | * native ones due to different data line routing. Let the board code | ||
| 106 | * overwrite the width flags. | ||
| 107 | */ | ||
| 108 | int (*set_bus_param)(struct soc_camera_link *, unsigned long flags); | ||
| 109 | unsigned long (*query_bus_param)(struct soc_camera_link *); | ||
| 103 | }; | 110 | }; |
| 104 | 111 | ||
| 105 | static inline struct soc_camera_device *to_soc_camera_dev(struct device *dev) | 112 | static inline struct soc_camera_device *to_soc_camera_dev(struct device *dev) |
| @@ -159,7 +166,8 @@ struct soc_camera_ops { | |||
| 159 | int (*release)(struct soc_camera_device *); | 166 | int (*release)(struct soc_camera_device *); |
| 160 | int (*start_capture)(struct soc_camera_device *); | 167 | int (*start_capture)(struct soc_camera_device *); |
| 161 | int (*stop_capture)(struct soc_camera_device *); | 168 | int (*stop_capture)(struct soc_camera_device *); |
| 162 | int (*set_fmt)(struct soc_camera_device *, __u32, struct v4l2_rect *); | 169 | int (*set_crop)(struct soc_camera_device *, struct v4l2_rect *); |
| 170 | int (*set_fmt)(struct soc_camera_device *, struct v4l2_format *); | ||
| 163 | int (*try_fmt)(struct soc_camera_device *, struct v4l2_format *); | 171 | int (*try_fmt)(struct soc_camera_device *, struct v4l2_format *); |
| 164 | unsigned long (*query_bus_param)(struct soc_camera_device *); | 172 | unsigned long (*query_bus_param)(struct soc_camera_device *); |
| 165 | int (*set_bus_param)(struct soc_camera_device *, unsigned long); | 173 | int (*set_bus_param)(struct soc_camera_device *, unsigned long); |
| @@ -239,15 +247,19 @@ static inline struct v4l2_queryctrl const *soc_camera_find_qctrl( | |||
| 239 | static inline unsigned long soc_camera_bus_param_compatible( | 247 | static inline unsigned long soc_camera_bus_param_compatible( |
| 240 | unsigned long camera_flags, unsigned long bus_flags) | 248 | unsigned long camera_flags, unsigned long bus_flags) |
| 241 | { | 249 | { |
| 242 | unsigned long common_flags, hsync, vsync, pclk; | 250 | unsigned long common_flags, hsync, vsync, pclk, data, buswidth, mode; |
| 243 | 251 | ||
| 244 | common_flags = camera_flags & bus_flags; | 252 | common_flags = camera_flags & bus_flags; |
| 245 | 253 | ||
| 246 | hsync = common_flags & (SOCAM_HSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_LOW); | 254 | hsync = common_flags & (SOCAM_HSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_LOW); |
| 247 | vsync = common_flags & (SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_VSYNC_ACTIVE_LOW); | 255 | vsync = common_flags & (SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_VSYNC_ACTIVE_LOW); |
| 248 | pclk = common_flags & (SOCAM_PCLK_SAMPLE_RISING | SOCAM_PCLK_SAMPLE_FALLING); | 256 | pclk = common_flags & (SOCAM_PCLK_SAMPLE_RISING | SOCAM_PCLK_SAMPLE_FALLING); |
| 257 | data = common_flags & (SOCAM_DATA_ACTIVE_HIGH | SOCAM_DATA_ACTIVE_LOW); | ||
| 258 | mode = common_flags & (SOCAM_MASTER | SOCAM_SLAVE); | ||
| 259 | buswidth = common_flags & SOCAM_DATAWIDTH_MASK; | ||
| 249 | 260 | ||
| 250 | return (!hsync || !vsync || !pclk) ? 0 : common_flags; | 261 | return (!hsync || !vsync || !pclk || !data || !mode || !buswidth) ? 0 : |
| 262 | common_flags; | ||
| 251 | } | 263 | } |
| 252 | 264 | ||
| 253 | extern unsigned long soc_camera_apply_sensor_flags(struct soc_camera_link *icl, | 265 | extern unsigned long soc_camera_apply_sensor_flags(struct soc_camera_link *icl, |
diff --git a/include/media/v4l2-chip-ident.h b/include/media/v4l2-chip-ident.h index 9aaf652b20ef..1be461a29077 100644 --- a/include/media/v4l2-chip-ident.h +++ b/include/media/v4l2-chip-ident.h | |||
| @@ -37,10 +37,8 @@ enum { | |||
| 37 | /* module saa7110: just ident 100 */ | 37 | /* module saa7110: just ident 100 */ |
| 38 | V4L2_IDENT_SAA7110 = 100, | 38 | V4L2_IDENT_SAA7110 = 100, |
| 39 | 39 | ||
| 40 | /* module saa7111: just ident 101 */ | 40 | /* module saa7115: reserved range 101-149 */ |
| 41 | V4L2_IDENT_SAA7111 = 101, | 41 | V4L2_IDENT_SAA7111 = 101, |
| 42 | |||
| 43 | /* module saa7115: reserved range 102-149 */ | ||
| 44 | V4L2_IDENT_SAA7113 = 103, | 42 | V4L2_IDENT_SAA7113 = 103, |
| 45 | V4L2_IDENT_SAA7114 = 104, | 43 | V4L2_IDENT_SAA7114 = 104, |
| 46 | V4L2_IDENT_SAA7115 = 105, | 44 | V4L2_IDENT_SAA7115 = 105, |
| @@ -63,44 +61,96 @@ enum { | |||
| 63 | V4L2_IDENT_OV7720 = 251, | 61 | V4L2_IDENT_OV7720 = 251, |
| 64 | V4L2_IDENT_OV7725 = 252, | 62 | V4L2_IDENT_OV7725 = 252, |
| 65 | 63 | ||
| 66 | /* Conexant MPEG encoder/decoders: reserved range 410-420 */ | 64 | /* module saa7146: reserved range 300-309 */ |
| 65 | V4L2_IDENT_SAA7146 = 300, | ||
| 66 | |||
| 67 | /* Conexant MPEG encoder/decoders: reserved range 400-420 */ | ||
| 68 | V4L2_IDENT_CX23418_843 = 403, /* Integrated A/V Decoder on the '418 */ | ||
| 67 | V4L2_IDENT_CX23415 = 415, | 69 | V4L2_IDENT_CX23415 = 415, |
| 68 | V4L2_IDENT_CX23416 = 416, | 70 | V4L2_IDENT_CX23416 = 416, |
| 69 | V4L2_IDENT_CX23418 = 418, | 71 | V4L2_IDENT_CX23418 = 418, |
| 70 | 72 | ||
| 73 | /* module au0828 */ | ||
| 74 | V4L2_IDENT_AU0828 = 828, | ||
| 75 | |||
| 76 | /* module indycam: just ident 2000 */ | ||
| 77 | V4L2_IDENT_INDYCAM = 2000, | ||
| 78 | |||
| 79 | /* module bt819: reserved range 810-819 */ | ||
| 80 | V4L2_IDENT_BT815A = 815, | ||
| 81 | V4L2_IDENT_BT817A = 817, | ||
| 82 | V4L2_IDENT_BT819A = 819, | ||
| 83 | |||
| 84 | /* module bt856: just ident 856 */ | ||
| 85 | V4L2_IDENT_BT856 = 856, | ||
| 86 | |||
| 87 | /* module bt866: just ident 866 */ | ||
| 88 | V4L2_IDENT_BT866 = 866, | ||
| 89 | |||
| 90 | /* module ks0127: reserved range 1120-1129 */ | ||
| 91 | V4L2_IDENT_KS0122S = 1122, | ||
| 92 | V4L2_IDENT_KS0127 = 1127, | ||
| 93 | V4L2_IDENT_KS0127B = 1128, | ||
| 94 | |||
| 71 | /* module vp27smpx: just ident 2700 */ | 95 | /* module vp27smpx: just ident 2700 */ |
| 72 | V4L2_IDENT_VP27SMPX = 2700, | 96 | V4L2_IDENT_VP27SMPX = 2700, |
| 73 | 97 | ||
| 98 | /* module vpx3220: reserved range: 3210-3229 */ | ||
| 99 | V4L2_IDENT_VPX3214C = 3214, | ||
| 100 | V4L2_IDENT_VPX3216B = 3216, | ||
| 101 | V4L2_IDENT_VPX3220A = 3220, | ||
| 102 | |||
| 74 | /* module tvp5150 */ | 103 | /* module tvp5150 */ |
| 75 | V4L2_IDENT_TVP5150 = 5150, | 104 | V4L2_IDENT_TVP5150 = 5150, |
| 76 | 105 | ||
| 106 | /* module saa5246a: just ident 5246 */ | ||
| 107 | V4L2_IDENT_SAA5246A = 5246, | ||
| 108 | |||
| 109 | /* module saa5249: just ident 5249 */ | ||
| 110 | V4L2_IDENT_SAA5249 = 5249, | ||
| 111 | |||
| 77 | /* module cs5345: just ident 5345 */ | 112 | /* module cs5345: just ident 5345 */ |
| 78 | V4L2_IDENT_CS5345 = 5345, | 113 | V4L2_IDENT_CS5345 = 5345, |
| 79 | 114 | ||
| 115 | /* module tea6415c: just ident 6415 */ | ||
| 116 | V4L2_IDENT_TEA6415C = 6415, | ||
| 117 | |||
| 118 | /* module tea6420: just ident 6420 */ | ||
| 119 | V4L2_IDENT_TEA6420 = 6420, | ||
| 120 | |||
| 121 | /* module saa6588: just ident 6588 */ | ||
| 122 | V4L2_IDENT_SAA6588 = 6588, | ||
| 123 | |||
| 80 | /* module saa6752hs: reserved range 6750-6759 */ | 124 | /* module saa6752hs: reserved range 6750-6759 */ |
| 81 | V4L2_IDENT_SAA6752HS = 6752, | 125 | V4L2_IDENT_SAA6752HS = 6752, |
| 82 | V4L2_IDENT_SAA6752HS_AC3 = 6753, | 126 | V4L2_IDENT_SAA6752HS_AC3 = 6753, |
| 83 | 127 | ||
| 128 | /* module adv7170: just ident 7170 */ | ||
| 129 | V4L2_IDENT_ADV7170 = 7170, | ||
| 130 | |||
| 131 | /* module adv7175: just ident 7175 */ | ||
| 132 | V4L2_IDENT_ADV7175 = 7175, | ||
| 133 | |||
| 134 | /* module saa7185: just ident 7185 */ | ||
| 135 | V4L2_IDENT_SAA7185 = 7185, | ||
| 136 | |||
| 137 | /* module saa7191: just ident 7191 */ | ||
| 138 | V4L2_IDENT_SAA7191 = 7191, | ||
| 139 | |||
| 84 | /* module wm8739: just ident 8739 */ | 140 | /* module wm8739: just ident 8739 */ |
| 85 | V4L2_IDENT_WM8739 = 8739, | 141 | V4L2_IDENT_WM8739 = 8739, |
| 86 | 142 | ||
| 87 | /* module wm8775: just ident 8775 */ | 143 | /* module wm8775: just ident 8775 */ |
| 88 | V4L2_IDENT_WM8775 = 8775, | 144 | V4L2_IDENT_WM8775 = 8775, |
| 89 | 145 | ||
| 90 | /* module tw9910: just ident 9910 */ | 146 | /* module tda9840: just ident 9840 */ |
| 91 | V4L2_IDENT_TW9910 = 9910, | 147 | V4L2_IDENT_TDA9840 = 9840, |
| 92 | |||
| 93 | /* module cs53132a: just ident 53132 */ | ||
| 94 | V4L2_IDENT_CS53l32A = 53132, | ||
| 95 | |||
| 96 | /* module upd64031a: just ident 64031 */ | ||
| 97 | V4L2_IDENT_UPD64031A = 64031, | ||
| 98 | 148 | ||
| 99 | /* module upd64083: just ident 64083 */ | 149 | /* module cafe_ccic, just ident 8801 */ |
| 100 | V4L2_IDENT_UPD64083 = 64083, | 150 | V4L2_IDENT_CAFE = 8801, |
| 101 | 151 | ||
| 102 | /* module m52790: just ident 52790 */ | 152 | /* module tw9910: just ident 9910 */ |
| 103 | V4L2_IDENT_M52790 = 52790, | 153 | V4L2_IDENT_TW9910 = 9910, |
| 104 | 154 | ||
| 105 | /* module msp3400: reserved range 34000-34999 and 44000-44999 */ | 155 | /* module msp3400: reserved range 34000-34999 and 44000-44999 */ |
| 106 | V4L2_IDENT_MSPX4XX = 34000, /* generic MSPX4XX identifier, only | 156 | V4L2_IDENT_MSPX4XX = 34000, /* generic MSPX4XX identifier, only |
| @@ -178,6 +228,18 @@ enum { | |||
| 178 | V4L2_IDENT_MT9V022IX7ATC = 45010, /* No way to detect "normal" I77ATx */ | 228 | V4L2_IDENT_MT9V022IX7ATC = 45010, /* No way to detect "normal" I77ATx */ |
| 179 | V4L2_IDENT_MT9V022IX7ATM = 45015, /* and "lead free" IA7ATx chips */ | 229 | V4L2_IDENT_MT9V022IX7ATM = 45015, /* and "lead free" IA7ATx chips */ |
| 180 | V4L2_IDENT_MT9T031 = 45020, | 230 | V4L2_IDENT_MT9T031 = 45020, |
| 231 | |||
| 232 | /* module cs53132a: just ident 53132 */ | ||
| 233 | V4L2_IDENT_CS53l32A = 53132, | ||
| 234 | |||
| 235 | /* module upd64031a: just ident 64031 */ | ||
| 236 | V4L2_IDENT_UPD64031A = 64031, | ||
| 237 | |||
| 238 | /* module upd64083: just ident 64083 */ | ||
| 239 | V4L2_IDENT_UPD64083 = 64083, | ||
| 240 | |||
| 241 | /* module m52790: just ident 52790 */ | ||
| 242 | V4L2_IDENT_M52790 = 52790, | ||
| 181 | }; | 243 | }; |
| 182 | 244 | ||
| 183 | #endif | 245 | #endif |
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h index 95e74f1874e1..3a6905615d68 100644 --- a/include/media/v4l2-common.h +++ b/include/media/v4l2-common.h | |||
| @@ -102,11 +102,15 @@ int v4l2_ctrl_check(struct v4l2_ext_control *ctrl, struct v4l2_queryctrl *qctrl, | |||
| 102 | const char *v4l2_ctrl_get_name(u32 id); | 102 | const char *v4l2_ctrl_get_name(u32 id); |
| 103 | const char **v4l2_ctrl_get_menu(u32 id); | 103 | const char **v4l2_ctrl_get_menu(u32 id); |
| 104 | int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 step, s32 def); | 104 | int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 step, s32 def); |
| 105 | int v4l2_ctrl_query_fill_std(struct v4l2_queryctrl *qctrl); | ||
| 106 | int v4l2_ctrl_query_menu(struct v4l2_querymenu *qmenu, | 105 | int v4l2_ctrl_query_menu(struct v4l2_querymenu *qmenu, |
| 107 | struct v4l2_queryctrl *qctrl, const char **menu_items); | 106 | struct v4l2_queryctrl *qctrl, const char **menu_items); |
| 108 | #define V4L2_CTRL_MENU_IDS_END (0xffffffff) | 107 | #define V4L2_CTRL_MENU_IDS_END (0xffffffff) |
| 109 | int v4l2_ctrl_query_menu_valid_items(struct v4l2_querymenu *qmenu, const u32 *ids); | 108 | int v4l2_ctrl_query_menu_valid_items(struct v4l2_querymenu *qmenu, const u32 *ids); |
| 109 | |||
| 110 | /* Note: ctrl_classes points to an array of u32 pointers. Each u32 array is a | ||
| 111 | 0-terminated array of control IDs. Each array must be sorted low to high | ||
| 112 | and belong to the same control class. The array of u32 pointers must also | ||
| 113 | be sorted, from low class IDs to high class IDs. */ | ||
| 110 | u32 v4l2_ctrl_next(const u32 * const *ctrl_classes, u32 id); | 114 | u32 v4l2_ctrl_next(const u32 * const *ctrl_classes, u32 id); |
| 111 | 115 | ||
| 112 | /* ------------------------------------------------------------------------- */ | 116 | /* ------------------------------------------------------------------------- */ |
| @@ -149,6 +153,21 @@ struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct i2c_adapter *adapter, | |||
| 149 | /* Initialize an v4l2_subdev with data from an i2c_client struct */ | 153 | /* Initialize an v4l2_subdev with data from an i2c_client struct */ |
| 150 | void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client, | 154 | void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client, |
| 151 | const struct v4l2_subdev_ops *ops); | 155 | const struct v4l2_subdev_ops *ops); |
| 156 | /* Return i2c client address of v4l2_subdev. */ | ||
| 157 | unsigned short v4l2_i2c_subdev_addr(struct v4l2_subdev *sd); | ||
| 158 | |||
| 159 | enum v4l2_i2c_tuner_type { | ||
| 160 | ADDRS_RADIO, /* Radio tuner addresses */ | ||
| 161 | ADDRS_DEMOD, /* Demod tuner addresses */ | ||
| 162 | ADDRS_TV, /* TV tuner addresses */ | ||
| 163 | /* TV tuner addresses if demod is present, this excludes | ||
| 164 | addresses used by the demodulator from the list of | ||
| 165 | candidates. */ | ||
| 166 | ADDRS_TV_WITH_DEMOD, | ||
| 167 | }; | ||
| 168 | /* Return a list of I2C tuner addresses to probe. Use only if the tuner | ||
| 169 | addresses are unknown. */ | ||
| 170 | const unsigned short *v4l2_i2c_tuner_addrs(enum v4l2_i2c_tuner_type type); | ||
| 152 | 171 | ||
| 153 | /* ------------------------------------------------------------------------- */ | 172 | /* ------------------------------------------------------------------------- */ |
| 154 | 173 | ||
| @@ -284,4 +303,7 @@ struct v4l2_crystal_freq { | |||
| 284 | a v4l2_gpio struct if a direction is also needed. */ | 303 | a v4l2_gpio struct if a direction is also needed. */ |
| 285 | #define VIDIOC_INT_S_GPIO _IOW('d', 117, u32) | 304 | #define VIDIOC_INT_S_GPIO _IOW('d', 117, u32) |
| 286 | 305 | ||
| 306 | /* Get input status. Same as the status field in the v4l2_input struct. */ | ||
| 307 | #define VIDIOC_INT_G_INPUT_STATUS _IOR('d', 118, u32) | ||
| 308 | |||
| 287 | #endif /* V4L2_COMMON_H_ */ | 309 | #endif /* V4L2_COMMON_H_ */ |
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h index e36faab8459b..2058dd45e915 100644 --- a/include/media/v4l2-dev.h +++ b/include/media/v4l2-dev.h | |||
| @@ -40,6 +40,8 @@ struct v4l2_file_operations { | |||
| 40 | unsigned int (*poll) (struct file *, struct poll_table_struct *); | 40 | unsigned int (*poll) (struct file *, struct poll_table_struct *); |
| 41 | long (*ioctl) (struct file *, unsigned int, unsigned long); | 41 | long (*ioctl) (struct file *, unsigned int, unsigned long); |
| 42 | long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); | 42 | long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); |
| 43 | unsigned long (*get_unmapped_area) (struct file *, unsigned long, | ||
| 44 | unsigned long, unsigned long, unsigned long); | ||
| 43 | int (*mmap) (struct file *, struct vm_area_struct *); | 45 | int (*mmap) (struct file *, struct vm_area_struct *); |
| 44 | int (*open) (struct file *); | 46 | int (*open) (struct file *); |
| 45 | int (*release) (struct file *); | 47 | int (*release) (struct file *); |
diff --git a/include/media/v4l2-device.h b/include/media/v4l2-device.h index 55e41afd95ef..0dd3e8e8653e 100644 --- a/include/media/v4l2-device.h +++ b/include/media/v4l2-device.h | |||
| @@ -33,7 +33,9 @@ | |||
| 33 | #define V4L2_DEVICE_NAME_SIZE (BUS_ID_SIZE + 16) | 33 | #define V4L2_DEVICE_NAME_SIZE (BUS_ID_SIZE + 16) |
| 34 | 34 | ||
| 35 | struct v4l2_device { | 35 | struct v4l2_device { |
| 36 | /* dev->driver_data points to this struct */ | 36 | /* dev->driver_data points to this struct. |
| 37 | Note: dev might be NULL if there is no parent device | ||
| 38 | as is the case with e.g. ISA devices. */ | ||
| 37 | struct device *dev; | 39 | struct device *dev; |
| 38 | /* used to keep track of the registered subdevs */ | 40 | /* used to keep track of the registered subdevs */ |
| 39 | struct list_head subdevs; | 41 | struct list_head subdevs; |
| @@ -42,33 +44,43 @@ struct v4l2_device { | |||
| 42 | spinlock_t lock; | 44 | spinlock_t lock; |
| 43 | /* unique device name, by default the driver name + bus ID */ | 45 | /* unique device name, by default the driver name + bus ID */ |
| 44 | char name[V4L2_DEVICE_NAME_SIZE]; | 46 | char name[V4L2_DEVICE_NAME_SIZE]; |
| 47 | /* notify callback called by some sub-devices. */ | ||
| 48 | void (*notify)(struct v4l2_subdev *sd, | ||
| 49 | unsigned int notification, void *arg); | ||
| 45 | }; | 50 | }; |
| 46 | 51 | ||
| 47 | /* Initialize v4l2_dev and make dev->driver_data point to v4l2_dev */ | 52 | /* Initialize v4l2_dev and make dev->driver_data point to v4l2_dev. |
| 53 | dev may be NULL in rare cases (ISA devices). In that case you | ||
| 54 | must fill in the v4l2_dev->name field before calling this function. */ | ||
| 48 | int __must_check v4l2_device_register(struct device *dev, struct v4l2_device *v4l2_dev); | 55 | int __must_check v4l2_device_register(struct device *dev, struct v4l2_device *v4l2_dev); |
| 49 | /* Set v4l2_dev->dev->driver_data to NULL and unregister all sub-devices */ | 56 | /* Set v4l2_dev->dev to NULL. Call when the USB parent disconnects. |
| 57 | Since the parent disappears this ensures that v4l2_dev doesn't have an | ||
| 58 | invalid parent pointer. */ | ||
| 59 | void v4l2_device_disconnect(struct v4l2_device *v4l2_dev); | ||
| 60 | /* Unregister all sub-devices and any other resources related to v4l2_dev. */ | ||
| 50 | void v4l2_device_unregister(struct v4l2_device *v4l2_dev); | 61 | void v4l2_device_unregister(struct v4l2_device *v4l2_dev); |
| 51 | 62 | ||
| 52 | /* Register a subdev with a v4l2 device. While registered the subdev module | 63 | /* Register a subdev with a v4l2 device. While registered the subdev module |
| 53 | is marked as in-use. An error is returned if the module is no longer | 64 | is marked as in-use. An error is returned if the module is no longer |
| 54 | loaded when you attempt to register it. */ | 65 | loaded when you attempt to register it. */ |
| 55 | int __must_check v4l2_device_register_subdev(struct v4l2_device *dev, struct v4l2_subdev *sd); | 66 | int __must_check v4l2_device_register_subdev(struct v4l2_device *v4l2_dev, |
| 67 | struct v4l2_subdev *sd); | ||
| 56 | /* Unregister a subdev with a v4l2 device. Can also be called if the subdev | 68 | /* Unregister a subdev with a v4l2 device. Can also be called if the subdev |
| 57 | wasn't registered. In that case it will do nothing. */ | 69 | wasn't registered. In that case it will do nothing. */ |
| 58 | void v4l2_device_unregister_subdev(struct v4l2_subdev *sd); | 70 | void v4l2_device_unregister_subdev(struct v4l2_subdev *sd); |
| 59 | 71 | ||
| 60 | /* Iterate over all subdevs. */ | 72 | /* Iterate over all subdevs. */ |
| 61 | #define v4l2_device_for_each_subdev(sd, dev) \ | 73 | #define v4l2_device_for_each_subdev(sd, v4l2_dev) \ |
| 62 | list_for_each_entry(sd, &(dev)->subdevs, list) | 74 | list_for_each_entry(sd, &(v4l2_dev)->subdevs, list) |
| 63 | 75 | ||
| 64 | /* Call the specified callback for all subdevs matching the condition. | 76 | /* Call the specified callback for all subdevs matching the condition. |
| 65 | Ignore any errors. Note that you cannot add or delete a subdev | 77 | Ignore any errors. Note that you cannot add or delete a subdev |
| 66 | while walking the subdevs list. */ | 78 | while walking the subdevs list. */ |
| 67 | #define __v4l2_device_call_subdevs(dev, cond, o, f, args...) \ | 79 | #define __v4l2_device_call_subdevs(v4l2_dev, cond, o, f, args...) \ |
| 68 | do { \ | 80 | do { \ |
| 69 | struct v4l2_subdev *sd; \ | 81 | struct v4l2_subdev *sd; \ |
| 70 | \ | 82 | \ |
| 71 | list_for_each_entry(sd, &(dev)->subdevs, list) \ | 83 | list_for_each_entry(sd, &(v4l2_dev)->subdevs, list) \ |
| 72 | if ((cond) && sd->ops->o && sd->ops->o->f) \ | 84 | if ((cond) && sd->ops->o && sd->ops->o->f) \ |
| 73 | sd->ops->o->f(sd , ##args); \ | 85 | sd->ops->o->f(sd , ##args); \ |
| 74 | } while (0) | 86 | } while (0) |
| @@ -77,12 +89,12 @@ void v4l2_device_unregister_subdev(struct v4l2_subdev *sd); | |||
| 77 | If the callback returns an error other than 0 or -ENOIOCTLCMD, then | 89 | If the callback returns an error other than 0 or -ENOIOCTLCMD, then |
| 78 | return with that error code. Note that you cannot add or delete a | 90 | return with that error code. Note that you cannot add or delete a |
| 79 | subdev while walking the subdevs list. */ | 91 | subdev while walking the subdevs list. */ |
| 80 | #define __v4l2_device_call_subdevs_until_err(dev, cond, o, f, args...) \ | 92 | #define __v4l2_device_call_subdevs_until_err(v4l2_dev, cond, o, f, args...) \ |
| 81 | ({ \ | 93 | ({ \ |
| 82 | struct v4l2_subdev *sd; \ | 94 | struct v4l2_subdev *sd; \ |
| 83 | long err = 0; \ | 95 | long err = 0; \ |
| 84 | \ | 96 | \ |
| 85 | list_for_each_entry(sd, &(dev)->subdevs, list) { \ | 97 | list_for_each_entry(sd, &(v4l2_dev)->subdevs, list) { \ |
| 86 | if ((cond) && sd->ops->o && sd->ops->o->f) \ | 98 | if ((cond) && sd->ops->o && sd->ops->o->f) \ |
| 87 | err = sd->ops->o->f(sd , ##args); \ | 99 | err = sd->ops->o->f(sd , ##args); \ |
| 88 | if (err && err != -ENOIOCTLCMD) \ | 100 | if (err && err != -ENOIOCTLCMD) \ |
| @@ -94,16 +106,16 @@ void v4l2_device_unregister_subdev(struct v4l2_subdev *sd); | |||
| 94 | /* Call the specified callback for all subdevs matching grp_id (if 0, then | 106 | /* Call the specified callback for all subdevs matching grp_id (if 0, then |
| 95 | match them all). Ignore any errors. Note that you cannot add or delete | 107 | match them all). Ignore any errors. Note that you cannot add or delete |
| 96 | a subdev while walking the subdevs list. */ | 108 | a subdev while walking the subdevs list. */ |
| 97 | #define v4l2_device_call_all(dev, grpid, o, f, args...) \ | 109 | #define v4l2_device_call_all(v4l2_dev, grpid, o, f, args...) \ |
| 98 | __v4l2_device_call_subdevs(dev, \ | 110 | __v4l2_device_call_subdevs(v4l2_dev, \ |
| 99 | !(grpid) || sd->grp_id == (grpid), o, f , ##args) | 111 | !(grpid) || sd->grp_id == (grpid), o, f , ##args) |
| 100 | 112 | ||
| 101 | /* Call the specified callback for all subdevs matching grp_id (if 0, then | 113 | /* Call the specified callback for all subdevs matching grp_id (if 0, then |
| 102 | match them all). If the callback returns an error other than 0 or | 114 | match them all). If the callback returns an error other than 0 or |
| 103 | -ENOIOCTLCMD, then return with that error code. Note that you cannot | 115 | -ENOIOCTLCMD, then return with that error code. Note that you cannot |
| 104 | add or delete a subdev while walking the subdevs list. */ | 116 | add or delete a subdev while walking the subdevs list. */ |
| 105 | #define v4l2_device_call_until_err(dev, grpid, o, f, args...) \ | 117 | #define v4l2_device_call_until_err(v4l2_dev, grpid, o, f, args...) \ |
| 106 | __v4l2_device_call_subdevs_until_err(dev, \ | 118 | __v4l2_device_call_subdevs_until_err(v4l2_dev, \ |
| 107 | !(grpid) || sd->grp_id == (grpid), o, f , ##args) | 119 | !(grpid) || sd->grp_id == (grpid), o, f , ##args) |
| 108 | 120 | ||
| 109 | #endif | 121 | #endif |
diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h index b01c044868d0..7a4529defa88 100644 --- a/include/media/v4l2-ioctl.h +++ b/include/media/v4l2-ioctl.h | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/mutex.h> | 15 | #include <linux/mutex.h> |
| 16 | #include <linux/compiler.h> /* need __user */ | 16 | #include <linux/compiler.h> /* need __user */ |
| 17 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | 17 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
| 18 | #define __MIN_V4L1 | ||
| 18 | #include <linux/videodev.h> | 19 | #include <linux/videodev.h> |
| 19 | #else | 20 | #else |
| 20 | #include <linux/videodev2.h> | 21 | #include <linux/videodev2.h> |
| @@ -267,6 +268,7 @@ struct v4l2_ioctl_ops { | |||
| 267 | 268 | ||
| 268 | /* Video standard functions */ | 269 | /* Video standard functions */ |
| 269 | extern const char *v4l2_norm_to_name(v4l2_std_id id); | 270 | extern const char *v4l2_norm_to_name(v4l2_std_id id); |
| 271 | extern void v4l2_video_std_frame_period(int id, struct v4l2_fract *frameperiod); | ||
| 270 | extern int v4l2_video_std_construct(struct v4l2_standard *vs, | 272 | extern int v4l2_video_std_construct(struct v4l2_standard *vs, |
| 271 | int id, const char *name); | 273 | int id, const char *name); |
| 272 | /* Prints the ioctl in a human-readable format */ | 274 | /* Prints the ioctl in a human-readable format */ |
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index 37b09e56e943..1d181b4ccb01 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h | |||
| @@ -78,6 +78,9 @@ struct v4l2_subdev_core_ops { | |||
| 78 | int (*queryctrl)(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc); | 78 | int (*queryctrl)(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc); |
| 79 | int (*g_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); | 79 | int (*g_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); |
| 80 | int (*s_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); | 80 | int (*s_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); |
| 81 | int (*g_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); | ||
| 82 | int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); | ||
| 83 | int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); | ||
| 81 | int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm); | 84 | int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm); |
| 82 | long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); | 85 | long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); |
| 83 | #ifdef CONFIG_VIDEO_ADV_DEBUG | 86 | #ifdef CONFIG_VIDEO_ADV_DEBUG |
| @@ -112,9 +115,17 @@ struct v4l2_subdev_video_ops { | |||
| 112 | int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data); | 115 | int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data); |
| 113 | int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap); | 116 | int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap); |
| 114 | int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std); | 117 | int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std); |
| 118 | int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std); | ||
| 119 | int (*g_input_status)(struct v4l2_subdev *sd, u32 *status); | ||
| 115 | int (*s_stream)(struct v4l2_subdev *sd, int enable); | 120 | int (*s_stream)(struct v4l2_subdev *sd, int enable); |
| 116 | int (*s_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt); | 121 | int (*enum_fmt)(struct v4l2_subdev *sd, struct v4l2_fmtdesc *fmtdesc); |
| 117 | int (*g_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt); | 122 | int (*g_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt); |
| 123 | int (*try_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt); | ||
| 124 | int (*s_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt); | ||
| 125 | int (*g_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); | ||
| 126 | int (*s_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); | ||
| 127 | int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize); | ||
| 128 | int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival); | ||
| 118 | }; | 129 | }; |
| 119 | 130 | ||
| 120 | struct v4l2_subdev_ops { | 131 | struct v4l2_subdev_ops { |
| @@ -132,7 +143,7 @@ struct v4l2_subdev_ops { | |||
| 132 | struct v4l2_subdev { | 143 | struct v4l2_subdev { |
| 133 | struct list_head list; | 144 | struct list_head list; |
| 134 | struct module *owner; | 145 | struct module *owner; |
| 135 | struct v4l2_device *dev; | 146 | struct v4l2_device *v4l2_dev; |
| 136 | const struct v4l2_subdev_ops *ops; | 147 | const struct v4l2_subdev_ops *ops; |
| 137 | /* name must be unique */ | 148 | /* name must be unique */ |
| 138 | char name[V4L2_SUBDEV_NAME_SIZE]; | 149 | char name[V4L2_SUBDEV_NAME_SIZE]; |
| @@ -171,7 +182,7 @@ static inline void v4l2_subdev_init(struct v4l2_subdev *sd, | |||
| 171 | /* ops->core MUST be set */ | 182 | /* ops->core MUST be set */ |
| 172 | BUG_ON(!ops || !ops->core); | 183 | BUG_ON(!ops || !ops->core); |
| 173 | sd->ops = ops; | 184 | sd->ops = ops; |
| 174 | sd->dev = NULL; | 185 | sd->v4l2_dev = NULL; |
| 175 | sd->name[0] = '\0'; | 186 | sd->name[0] = '\0'; |
| 176 | sd->grp_id = 0; | 187 | sd->grp_id = 0; |
| 177 | sd->priv = NULL; | 188 | sd->priv = NULL; |
| @@ -186,4 +197,9 @@ static inline void v4l2_subdev_init(struct v4l2_subdev *sd, | |||
| 186 | (!(sd) ? -ENODEV : (((sd) && (sd)->ops->o && (sd)->ops->o->f) ? \ | 197 | (!(sd) ? -ENODEV : (((sd) && (sd)->ops->o && (sd)->ops->o->f) ? \ |
| 187 | (sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD)) | 198 | (sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD)) |
| 188 | 199 | ||
| 200 | /* Send a notification to v4l2_device. */ | ||
| 201 | #define v4l2_subdev_notify(sd, notification, arg) \ | ||
| 202 | ((!(sd) || !(sd)->v4l2_dev || !(sd)->v4l2_dev->notify) ? -ENODEV : \ | ||
| 203 | (sd)->v4l2_dev->notify((sd), (notification), (arg))) | ||
| 204 | |||
| 189 | #endif | 205 | #endif |
diff --git a/include/media/videobuf-core.h b/include/media/videobuf-core.h index 874f1340d049..1c5946c44758 100644 --- a/include/media/videobuf-core.h +++ b/include/media/videobuf-core.h | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | 18 | ||
| 19 | #include <linux/poll.h> | 19 | #include <linux/poll.h> |
| 20 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | 20 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
| 21 | #define __MIN_V4L1 | ||
| 21 | #include <linux/videodev.h> | 22 | #include <linux/videodev.h> |
| 22 | #endif | 23 | #endif |
| 23 | #include <linux/videodev2.h> | 24 | #include <linux/videodev2.h> |
diff --git a/include/mtd/inftl-user.h b/include/mtd/inftl-user.h index d409d489d900..8376bd1a9e01 100644 --- a/include/mtd/inftl-user.h +++ b/include/mtd/inftl-user.h | |||
| @@ -16,33 +16,33 @@ | |||
| 16 | /* Block Control Information */ | 16 | /* Block Control Information */ |
| 17 | 17 | ||
| 18 | struct inftl_bci { | 18 | struct inftl_bci { |
| 19 | uint8_t ECCsig[6]; | 19 | __u8 ECCsig[6]; |
| 20 | uint8_t Status; | 20 | __u8 Status; |
| 21 | uint8_t Status1; | 21 | __u8 Status1; |
| 22 | } __attribute__((packed)); | 22 | } __attribute__((packed)); |
| 23 | 23 | ||
| 24 | struct inftl_unithead1 { | 24 | struct inftl_unithead1 { |
| 25 | uint16_t virtualUnitNo; | 25 | __u16 virtualUnitNo; |
| 26 | uint16_t prevUnitNo; | 26 | __u16 prevUnitNo; |
| 27 | uint8_t ANAC; | 27 | __u8 ANAC; |
| 28 | uint8_t NACs; | 28 | __u8 NACs; |
| 29 | uint8_t parityPerField; | 29 | __u8 parityPerField; |
| 30 | uint8_t discarded; | 30 | __u8 discarded; |
| 31 | } __attribute__((packed)); | 31 | } __attribute__((packed)); |
| 32 | 32 | ||
| 33 | struct inftl_unithead2 { | 33 | struct inftl_unithead2 { |
| 34 | uint8_t parityPerField; | 34 | __u8 parityPerField; |
| 35 | uint8_t ANAC; | 35 | __u8 ANAC; |
| 36 | uint16_t prevUnitNo; | 36 | __u16 prevUnitNo; |
| 37 | uint16_t virtualUnitNo; | 37 | __u16 virtualUnitNo; |
| 38 | uint8_t NACs; | 38 | __u8 NACs; |
| 39 | uint8_t discarded; | 39 | __u8 discarded; |
| 40 | } __attribute__((packed)); | 40 | } __attribute__((packed)); |
| 41 | 41 | ||
| 42 | struct inftl_unittail { | 42 | struct inftl_unittail { |
| 43 | uint8_t Reserved[4]; | 43 | __u8 Reserved[4]; |
| 44 | uint16_t EraseMark; | 44 | __u16 EraseMark; |
| 45 | uint16_t EraseMark1; | 45 | __u16 EraseMark1; |
| 46 | } __attribute__((packed)); | 46 | } __attribute__((packed)); |
| 47 | 47 | ||
| 48 | union inftl_uci { | 48 | union inftl_uci { |
diff --git a/include/mtd/jffs2-user.h b/include/mtd/jffs2-user.h index 001685d7fa88..fa94b0eb67c1 100644 --- a/include/mtd/jffs2-user.h +++ b/include/mtd/jffs2-user.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | 7 | ||
| 8 | /* This file is blessed for inclusion by userspace */ | 8 | /* This file is blessed for inclusion by userspace */ |
| 9 | #include <linux/jffs2.h> | 9 | #include <linux/jffs2.h> |
| 10 | #include <linux/types.h> | ||
| 10 | #include <endian.h> | 11 | #include <endian.h> |
| 11 | #include <byteswap.h> | 12 | #include <byteswap.h> |
| 12 | 13 | ||
| @@ -19,8 +20,8 @@ | |||
| 19 | 20 | ||
| 20 | extern int target_endian; | 21 | extern int target_endian; |
| 21 | 22 | ||
| 22 | #define t16(x) ({ uint16_t __b = (x); (target_endian==__BYTE_ORDER)?__b:bswap_16(__b); }) | 23 | #define t16(x) ({ __u16 __b = (x); (target_endian==__BYTE_ORDER)?__b:bswap_16(__b); }) |
| 23 | #define t32(x) ({ uint32_t __b = (x); (target_endian==__BYTE_ORDER)?__b:bswap_32(__b); }) | 24 | #define t32(x) ({ __u32 __b = (x); (target_endian==__BYTE_ORDER)?__b:bswap_32(__b); }) |
| 24 | 25 | ||
| 25 | #define cpu_to_je16(x) ((jint16_t){t16(x)}) | 26 | #define cpu_to_je16(x) ((jint16_t){t16(x)}) |
| 26 | #define cpu_to_je32(x) ((jint32_t){t32(x)}) | 27 | #define cpu_to_je32(x) ((jint32_t){t32(x)}) |
diff --git a/include/mtd/mtd-abi.h b/include/mtd/mtd-abi.h index c6c61cd5a254..b6595b3c68b6 100644 --- a/include/mtd/mtd-abi.h +++ b/include/mtd/mtd-abi.h | |||
| @@ -5,14 +5,16 @@ | |||
| 5 | #ifndef __MTD_ABI_H__ | 5 | #ifndef __MTD_ABI_H__ |
| 6 | #define __MTD_ABI_H__ | 6 | #define __MTD_ABI_H__ |
| 7 | 7 | ||
| 8 | #include <linux/types.h> | ||
| 9 | |||
| 8 | struct erase_info_user { | 10 | struct erase_info_user { |
| 9 | uint32_t start; | 11 | __u32 start; |
| 10 | uint32_t length; | 12 | __u32 length; |
| 11 | }; | 13 | }; |
| 12 | 14 | ||
| 13 | struct mtd_oob_buf { | 15 | struct mtd_oob_buf { |
| 14 | uint32_t start; | 16 | __u32 start; |
| 15 | uint32_t length; | 17 | __u32 length; |
| 16 | unsigned char __user *ptr; | 18 | unsigned char __user *ptr; |
| 17 | }; | 19 | }; |
| 18 | 20 | ||
| @@ -48,30 +50,30 @@ struct mtd_oob_buf { | |||
| 48 | #define MTD_OTP_USER 2 | 50 | #define MTD_OTP_USER 2 |
| 49 | 51 | ||
| 50 | struct mtd_info_user { | 52 | struct mtd_info_user { |
| 51 | uint8_t type; | 53 | __u8 type; |
| 52 | uint32_t flags; | 54 | __u32 flags; |
| 53 | uint32_t size; // Total size of the MTD | 55 | __u32 size; // Total size of the MTD |
| 54 | uint32_t erasesize; | 56 | __u32 erasesize; |
| 55 | uint32_t writesize; | 57 | __u32 writesize; |
| 56 | uint32_t oobsize; // Amount of OOB data per block (e.g. 16) | 58 | __u32 oobsize; // Amount of OOB data per block (e.g. 16) |
| 57 | /* The below two fields are obsolete and broken, do not use them | 59 | /* The below two fields are obsolete and broken, do not use them |
| 58 | * (TODO: remove at some point) */ | 60 | * (TODO: remove at some point) */ |
| 59 | uint32_t ecctype; | 61 | __u32 ecctype; |
| 60 | uint32_t eccsize; | 62 | __u32 eccsize; |
| 61 | }; | 63 | }; |
| 62 | 64 | ||
| 63 | struct region_info_user { | 65 | struct region_info_user { |
| 64 | uint32_t offset; /* At which this region starts, | 66 | __u32 offset; /* At which this region starts, |
| 65 | * from the beginning of the MTD */ | 67 | * from the beginning of the MTD */ |
| 66 | uint32_t erasesize; /* For this region */ | 68 | __u32 erasesize; /* For this region */ |
| 67 | uint32_t numblocks; /* Number of blocks in this region */ | 69 | __u32 numblocks; /* Number of blocks in this region */ |
| 68 | uint32_t regionindex; | 70 | __u32 regionindex; |
| 69 | }; | 71 | }; |
| 70 | 72 | ||
| 71 | struct otp_info { | 73 | struct otp_info { |
| 72 | uint32_t start; | 74 | __u32 start; |
| 73 | uint32_t length; | 75 | __u32 length; |
| 74 | uint32_t locked; | 76 | __u32 locked; |
| 75 | }; | 77 | }; |
| 76 | 78 | ||
| 77 | #define MEMGETINFO _IOR('M', 1, struct mtd_info_user) | 79 | #define MEMGETINFO _IOR('M', 1, struct mtd_info_user) |
| @@ -84,8 +86,8 @@ struct otp_info { | |||
| 84 | #define MEMGETREGIONINFO _IOWR('M', 8, struct region_info_user) | 86 | #define MEMGETREGIONINFO _IOWR('M', 8, struct region_info_user) |
| 85 | #define MEMSETOOBSEL _IOW('M', 9, struct nand_oobinfo) | 87 | #define MEMSETOOBSEL _IOW('M', 9, struct nand_oobinfo) |
| 86 | #define MEMGETOOBSEL _IOR('M', 10, struct nand_oobinfo) | 88 | #define MEMGETOOBSEL _IOR('M', 10, struct nand_oobinfo) |
| 87 | #define MEMGETBADBLOCK _IOW('M', 11, loff_t) | 89 | #define MEMGETBADBLOCK _IOW('M', 11, __kernel_loff_t) |
| 88 | #define MEMSETBADBLOCK _IOW('M', 12, loff_t) | 90 | #define MEMSETBADBLOCK _IOW('M', 12, __kernel_loff_t) |
| 89 | #define OTPSELECT _IOR('M', 13, int) | 91 | #define OTPSELECT _IOR('M', 13, int) |
| 90 | #define OTPGETREGIONCOUNT _IOW('M', 14, int) | 92 | #define OTPGETREGIONCOUNT _IOW('M', 14, int) |
| 91 | #define OTPGETREGIONINFO _IOW('M', 15, struct otp_info) | 93 | #define OTPGETREGIONINFO _IOW('M', 15, struct otp_info) |
| @@ -99,15 +101,15 @@ struct otp_info { | |||
| 99 | * interfaces | 101 | * interfaces |
| 100 | */ | 102 | */ |
| 101 | struct nand_oobinfo { | 103 | struct nand_oobinfo { |
| 102 | uint32_t useecc; | 104 | __u32 useecc; |
| 103 | uint32_t eccbytes; | 105 | __u32 eccbytes; |
| 104 | uint32_t oobfree[8][2]; | 106 | __u32 oobfree[8][2]; |
| 105 | uint32_t eccpos[32]; | 107 | __u32 eccpos[32]; |
| 106 | }; | 108 | }; |
| 107 | 109 | ||
| 108 | struct nand_oobfree { | 110 | struct nand_oobfree { |
| 109 | uint32_t offset; | 111 | __u32 offset; |
| 110 | uint32_t length; | 112 | __u32 length; |
| 111 | }; | 113 | }; |
| 112 | 114 | ||
| 113 | #define MTD_MAX_OOBFREE_ENTRIES 8 | 115 | #define MTD_MAX_OOBFREE_ENTRIES 8 |
| @@ -116,9 +118,9 @@ struct nand_oobfree { | |||
| 116 | * diagnosis and to allow creation of raw images | 118 | * diagnosis and to allow creation of raw images |
| 117 | */ | 119 | */ |
| 118 | struct nand_ecclayout { | 120 | struct nand_ecclayout { |
| 119 | uint32_t eccbytes; | 121 | __u32 eccbytes; |
| 120 | uint32_t eccpos[64]; | 122 | __u32 eccpos[64]; |
| 121 | uint32_t oobavail; | 123 | __u32 oobavail; |
| 122 | struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES]; | 124 | struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES]; |
| 123 | }; | 125 | }; |
| 124 | 126 | ||
| @@ -131,10 +133,10 @@ struct nand_ecclayout { | |||
| 131 | * @bbtblocks: number of blocks reserved for bad block tables | 133 | * @bbtblocks: number of blocks reserved for bad block tables |
| 132 | */ | 134 | */ |
| 133 | struct mtd_ecc_stats { | 135 | struct mtd_ecc_stats { |
| 134 | uint32_t corrected; | 136 | __u32 corrected; |
| 135 | uint32_t failed; | 137 | __u32 failed; |
| 136 | uint32_t badblocks; | 138 | __u32 badblocks; |
| 137 | uint32_t bbtblocks; | 139 | __u32 bbtblocks; |
| 138 | }; | 140 | }; |
| 139 | 141 | ||
| 140 | /* | 142 | /* |
diff --git a/include/mtd/nftl-user.h b/include/mtd/nftl-user.h index 390d21c080aa..98e9e57f22de 100644 --- a/include/mtd/nftl-user.h +++ b/include/mtd/nftl-user.h | |||
| @@ -6,33 +6,35 @@ | |||
| 6 | #ifndef __MTD_NFTL_USER_H__ | 6 | #ifndef __MTD_NFTL_USER_H__ |
| 7 | #define __MTD_NFTL_USER_H__ | 7 | #define __MTD_NFTL_USER_H__ |
| 8 | 8 | ||
| 9 | #include <linux/types.h> | ||
| 10 | |||
| 9 | /* Block Control Information */ | 11 | /* Block Control Information */ |
| 10 | 12 | ||
| 11 | struct nftl_bci { | 13 | struct nftl_bci { |
| 12 | unsigned char ECCSig[6]; | 14 | unsigned char ECCSig[6]; |
| 13 | uint8_t Status; | 15 | __u8 Status; |
| 14 | uint8_t Status1; | 16 | __u8 Status1; |
| 15 | }__attribute__((packed)); | 17 | }__attribute__((packed)); |
| 16 | 18 | ||
| 17 | /* Unit Control Information */ | 19 | /* Unit Control Information */ |
| 18 | 20 | ||
| 19 | struct nftl_uci0 { | 21 | struct nftl_uci0 { |
| 20 | uint16_t VirtUnitNum; | 22 | __u16 VirtUnitNum; |
| 21 | uint16_t ReplUnitNum; | 23 | __u16 ReplUnitNum; |
| 22 | uint16_t SpareVirtUnitNum; | 24 | __u16 SpareVirtUnitNum; |
| 23 | uint16_t SpareReplUnitNum; | 25 | __u16 SpareReplUnitNum; |
| 24 | } __attribute__((packed)); | 26 | } __attribute__((packed)); |
| 25 | 27 | ||
| 26 | struct nftl_uci1 { | 28 | struct nftl_uci1 { |
| 27 | uint32_t WearInfo; | 29 | __u32 WearInfo; |
| 28 | uint16_t EraseMark; | 30 | __u16 EraseMark; |
| 29 | uint16_t EraseMark1; | 31 | __u16 EraseMark1; |
| 30 | } __attribute__((packed)); | 32 | } __attribute__((packed)); |
| 31 | 33 | ||
| 32 | struct nftl_uci2 { | 34 | struct nftl_uci2 { |
| 33 | uint16_t FoldMark; | 35 | __u16 FoldMark; |
| 34 | uint16_t FoldMark1; | 36 | __u16 FoldMark1; |
| 35 | uint32_t unused; | 37 | __u32 unused; |
| 36 | } __attribute__((packed)); | 38 | } __attribute__((packed)); |
| 37 | 39 | ||
| 38 | union nftl_uci { | 40 | union nftl_uci { |
| @@ -50,9 +52,9 @@ struct nftl_oob { | |||
| 50 | 52 | ||
| 51 | struct NFTLMediaHeader { | 53 | struct NFTLMediaHeader { |
| 52 | char DataOrgID[6]; | 54 | char DataOrgID[6]; |
| 53 | uint16_t NumEraseUnits; | 55 | __u16 NumEraseUnits; |
| 54 | uint16_t FirstPhysicalEUN; | 56 | __u16 FirstPhysicalEUN; |
| 55 | uint32_t FormattedSize; | 57 | __u32 FormattedSize; |
| 56 | unsigned char UnitSizeFactor; | 58 | unsigned char UnitSizeFactor; |
| 57 | } __attribute__((packed)); | 59 | } __attribute__((packed)); |
| 58 | 60 | ||
diff --git a/include/mtd/ubi-user.h b/include/mtd/ubi-user.h index 296efae3525e..466a8320f1e6 100644 --- a/include/mtd/ubi-user.h +++ b/include/mtd/ubi-user.h | |||
| @@ -21,6 +21,8 @@ | |||
| 21 | #ifndef __UBI_USER_H__ | 21 | #ifndef __UBI_USER_H__ |
| 22 | #define __UBI_USER_H__ | 22 | #define __UBI_USER_H__ |
| 23 | 23 | ||
| 24 | #include <linux/types.h> | ||
| 25 | |||
| 24 | /* | 26 | /* |
| 25 | * UBI device creation (the same as MTD device attachment) | 27 | * UBI device creation (the same as MTD device attachment) |
| 26 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 28 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| @@ -152,7 +154,7 @@ | |||
| 152 | /* Create an UBI volume */ | 154 | /* Create an UBI volume */ |
| 153 | #define UBI_IOCMKVOL _IOW(UBI_IOC_MAGIC, 0, struct ubi_mkvol_req) | 155 | #define UBI_IOCMKVOL _IOW(UBI_IOC_MAGIC, 0, struct ubi_mkvol_req) |
| 154 | /* Remove an UBI volume */ | 156 | /* Remove an UBI volume */ |
| 155 | #define UBI_IOCRMVOL _IOW(UBI_IOC_MAGIC, 1, int32_t) | 157 | #define UBI_IOCRMVOL _IOW(UBI_IOC_MAGIC, 1, __s32) |
| 156 | /* Re-size an UBI volume */ | 158 | /* Re-size an UBI volume */ |
| 157 | #define UBI_IOCRSVOL _IOW(UBI_IOC_MAGIC, 2, struct ubi_rsvol_req) | 159 | #define UBI_IOCRSVOL _IOW(UBI_IOC_MAGIC, 2, struct ubi_rsvol_req) |
| 158 | /* Re-name volumes */ | 160 | /* Re-name volumes */ |
| @@ -165,24 +167,24 @@ | |||
| 165 | /* Attach an MTD device */ | 167 | /* Attach an MTD device */ |
| 166 | #define UBI_IOCATT _IOW(UBI_CTRL_IOC_MAGIC, 64, struct ubi_attach_req) | 168 | #define UBI_IOCATT _IOW(UBI_CTRL_IOC_MAGIC, 64, struct ubi_attach_req) |
| 167 | /* Detach an MTD device */ | 169 | /* Detach an MTD device */ |
| 168 | #define UBI_IOCDET _IOW(UBI_CTRL_IOC_MAGIC, 65, int32_t) | 170 | #define UBI_IOCDET _IOW(UBI_CTRL_IOC_MAGIC, 65, __s32) |
| 169 | 171 | ||
| 170 | /* ioctl commands of UBI volume character devices */ | 172 | /* ioctl commands of UBI volume character devices */ |
| 171 | 173 | ||
| 172 | #define UBI_VOL_IOC_MAGIC 'O' | 174 | #define UBI_VOL_IOC_MAGIC 'O' |
| 173 | 175 | ||
| 174 | /* Start UBI volume update */ | 176 | /* Start UBI volume update */ |
| 175 | #define UBI_IOCVOLUP _IOW(UBI_VOL_IOC_MAGIC, 0, int64_t) | 177 | #define UBI_IOCVOLUP _IOW(UBI_VOL_IOC_MAGIC, 0, __s64) |
| 176 | /* LEB erasure command, used for debugging, disabled by default */ | 178 | /* LEB erasure command, used for debugging, disabled by default */ |
| 177 | #define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 1, int32_t) | 179 | #define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 1, __s32) |
| 178 | /* Atomic LEB change command */ | 180 | /* Atomic LEB change command */ |
| 179 | #define UBI_IOCEBCH _IOW(UBI_VOL_IOC_MAGIC, 2, int32_t) | 181 | #define UBI_IOCEBCH _IOW(UBI_VOL_IOC_MAGIC, 2, __s32) |
| 180 | /* Map LEB command */ | 182 | /* Map LEB command */ |
| 181 | #define UBI_IOCEBMAP _IOW(UBI_VOL_IOC_MAGIC, 3, struct ubi_map_req) | 183 | #define UBI_IOCEBMAP _IOW(UBI_VOL_IOC_MAGIC, 3, struct ubi_map_req) |
| 182 | /* Unmap LEB command */ | 184 | /* Unmap LEB command */ |
| 183 | #define UBI_IOCEBUNMAP _IOW(UBI_VOL_IOC_MAGIC, 4, int32_t) | 185 | #define UBI_IOCEBUNMAP _IOW(UBI_VOL_IOC_MAGIC, 4, __s32) |
| 184 | /* Check if LEB is mapped command */ | 186 | /* Check if LEB is mapped command */ |
| 185 | #define UBI_IOCEBISMAP _IOR(UBI_VOL_IOC_MAGIC, 5, int32_t) | 187 | #define UBI_IOCEBISMAP _IOR(UBI_VOL_IOC_MAGIC, 5, __s32) |
| 186 | /* Set an UBI volume property */ | 188 | /* Set an UBI volume property */ |
| 187 | #define UBI_IOCSETPROP _IOW(UBI_VOL_IOC_MAGIC, 6, struct ubi_set_prop_req) | 189 | #define UBI_IOCSETPROP _IOW(UBI_VOL_IOC_MAGIC, 6, struct ubi_set_prop_req) |
| 188 | 190 | ||
| @@ -260,10 +262,10 @@ enum { | |||
| 260 | * sub-page of the first page and add needed padding. | 262 | * sub-page of the first page and add needed padding. |
| 261 | */ | 263 | */ |
| 262 | struct ubi_attach_req { | 264 | struct ubi_attach_req { |
| 263 | int32_t ubi_num; | 265 | __s32 ubi_num; |
| 264 | int32_t mtd_num; | 266 | __s32 mtd_num; |
| 265 | int32_t vid_hdr_offset; | 267 | __s32 vid_hdr_offset; |
| 266 | int8_t padding[12]; | 268 | __s8 padding[12]; |
| 267 | }; | 269 | }; |
| 268 | 270 | ||
| 269 | /** | 271 | /** |
| @@ -298,13 +300,13 @@ struct ubi_attach_req { | |||
| 298 | * BLOBs, without caring about how to properly align them. | 300 | * BLOBs, without caring about how to properly align them. |
| 299 | */ | 301 | */ |
| 300 | struct ubi_mkvol_req { | 302 | struct ubi_mkvol_req { |
| 301 | int32_t vol_id; | 303 | __s32 vol_id; |
| 302 | int32_t alignment; | 304 | __s32 alignment; |
| 303 | int64_t bytes; | 305 | __s64 bytes; |
| 304 | int8_t vol_type; | 306 | __s8 vol_type; |
| 305 | int8_t padding1; | 307 | __s8 padding1; |
| 306 | int16_t name_len; | 308 | __s16 name_len; |
| 307 | int8_t padding2[4]; | 309 | __s8 padding2[4]; |
| 308 | char name[UBI_MAX_VOLUME_NAME + 1]; | 310 | char name[UBI_MAX_VOLUME_NAME + 1]; |
| 309 | } __attribute__ ((packed)); | 311 | } __attribute__ ((packed)); |
| 310 | 312 | ||
| @@ -320,8 +322,8 @@ struct ubi_mkvol_req { | |||
| 320 | * zero number of bytes). | 322 | * zero number of bytes). |
| 321 | */ | 323 | */ |
| 322 | struct ubi_rsvol_req { | 324 | struct ubi_rsvol_req { |
| 323 | int64_t bytes; | 325 | __s64 bytes; |
| 324 | int32_t vol_id; | 326 | __s32 vol_id; |
| 325 | } __attribute__ ((packed)); | 327 | } __attribute__ ((packed)); |
| 326 | 328 | ||
| 327 | /** | 329 | /** |
| @@ -356,12 +358,12 @@ struct ubi_rsvol_req { | |||
| 356 | * re-name request. | 358 | * re-name request. |
| 357 | */ | 359 | */ |
| 358 | struct ubi_rnvol_req { | 360 | struct ubi_rnvol_req { |
| 359 | int32_t count; | 361 | __s32 count; |
| 360 | int8_t padding1[12]; | 362 | __s8 padding1[12]; |
| 361 | struct { | 363 | struct { |
| 362 | int32_t vol_id; | 364 | __s32 vol_id; |
| 363 | int16_t name_len; | 365 | __s16 name_len; |
| 364 | int8_t padding2[2]; | 366 | __s8 padding2[2]; |
| 365 | char name[UBI_MAX_VOLUME_NAME + 1]; | 367 | char name[UBI_MAX_VOLUME_NAME + 1]; |
| 366 | } ents[UBI_MAX_RNVOL]; | 368 | } ents[UBI_MAX_RNVOL]; |
| 367 | } __attribute__ ((packed)); | 369 | } __attribute__ ((packed)); |
| @@ -375,10 +377,10 @@ struct ubi_rnvol_req { | |||
| 375 | * @padding: reserved for future, not used, has to be zeroed | 377 | * @padding: reserved for future, not used, has to be zeroed |
| 376 | */ | 378 | */ |
| 377 | struct ubi_leb_change_req { | 379 | struct ubi_leb_change_req { |
| 378 | int32_t lnum; | 380 | __s32 lnum; |
| 379 | int32_t bytes; | 381 | __s32 bytes; |
| 380 | int8_t dtype; | 382 | __s8 dtype; |
| 381 | int8_t padding[7]; | 383 | __s8 padding[7]; |
| 382 | } __attribute__ ((packed)); | 384 | } __attribute__ ((packed)); |
| 383 | 385 | ||
| 384 | /** | 386 | /** |
| @@ -388,9 +390,9 @@ struct ubi_leb_change_req { | |||
| 388 | * @padding: reserved for future, not used, has to be zeroed | 390 | * @padding: reserved for future, not used, has to be zeroed |
| 389 | */ | 391 | */ |
| 390 | struct ubi_map_req { | 392 | struct ubi_map_req { |
| 391 | int32_t lnum; | 393 | __s32 lnum; |
| 392 | int8_t dtype; | 394 | __s8 dtype; |
| 393 | int8_t padding[3]; | 395 | __s8 padding[3]; |
| 394 | } __attribute__ ((packed)); | 396 | } __attribute__ ((packed)); |
| 395 | 397 | ||
| 396 | 398 | ||
| @@ -402,9 +404,9 @@ struct ubi_map_req { | |||
| 402 | * @value: value to set | 404 | * @value: value to set |
| 403 | */ | 405 | */ |
| 404 | struct ubi_set_prop_req { | 406 | struct ubi_set_prop_req { |
| 405 | uint8_t property; | 407 | __u8 property; |
| 406 | uint8_t padding[7]; | 408 | __u8 padding[7]; |
| 407 | uint64_t value; | 409 | __u64 value; |
| 408 | } __attribute__ ((packed)); | 410 | } __attribute__ ((packed)); |
| 409 | 411 | ||
| 410 | #endif /* __UBI_USER_H__ */ | 412 | #endif /* __UBI_USER_H__ */ |
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..5389afdc1297 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. | 357 | */ |
| 344 | * @REGDOM_SET_BY_DRIVER: a wireless drivers has hinted to the wireless core | 358 | enum environment_cap { |
| 345 | * it thinks its knows the regulatory domain we should be in. | 359 | ENVIRON_ANY, |
| 346 | * @REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an 802.11 country | 360 | ENVIRON_INDOOR, |
| 347 | * information element with regulatory information it thinks we | 361 | ENVIRON_OUTDOOR, |
| 348 | * should consider. | 362 | }; |
| 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 | ||
| 349 | */ | 387 | */ |
| 350 | enum reg_set_by { | 388 | struct regulatory_request { |
| 351 | REGDOM_SET_BY_INIT, | 389 | int wiphy_idx; |
| 352 | REGDOM_SET_BY_CORE, | 390 | enum nl80211_reg_initiator initiator; |
| 353 | REGDOM_SET_BY_USER, | 391 | char alpha2[2]; |
| 354 | REGDOM_SET_BY_DRIVER, | 392 | bool intersect; |
| 355 | REGDOM_SET_BY_COUNTRY_IE, | 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 { |
| @@ -438,6 +478,187 @@ struct wiphy; | |||
| 438 | struct ieee80211_channel; | 478 | struct ieee80211_channel; |
| 439 | 479 | ||
| 440 | /** | 480 | /** |
| 481 | * struct cfg80211_ssid - SSID description | ||
| 482 | * @ssid: the SSID | ||
| 483 | * @ssid_len: length of the ssid | ||
| 484 | */ | ||
| 485 | struct cfg80211_ssid { | ||
| 486 | u8 ssid[IEEE80211_MAX_SSID_LEN]; | ||
| 487 | u8 ssid_len; | ||
| 488 | }; | ||
| 489 | |||
| 490 | /** | ||
| 491 | * struct cfg80211_scan_request - scan request description | ||
| 492 | * | ||
| 493 | * @ssids: SSIDs to scan for (active scan only) | ||
| 494 | * @n_ssids: number of SSIDs | ||
| 495 | * @channels: channels to scan on. | ||
| 496 | * @n_channels: number of channels for each band | ||
| 497 | * @ie: optional information element(s) to add into Probe Request or %NULL | ||
| 498 | * @ie_len: length of ie in octets | ||
| 499 | * @wiphy: the wiphy this was for | ||
| 500 | * @ifidx: the interface index | ||
| 501 | */ | ||
| 502 | struct cfg80211_scan_request { | ||
| 503 | struct cfg80211_ssid *ssids; | ||
| 504 | int n_ssids; | ||
| 505 | struct ieee80211_channel **channels; | ||
| 506 | u32 n_channels; | ||
| 507 | u8 *ie; | ||
| 508 | size_t ie_len; | ||
| 509 | |||
| 510 | /* internal */ | ||
| 511 | struct wiphy *wiphy; | ||
| 512 | int ifidx; | ||
| 513 | }; | ||
| 514 | |||
| 515 | /** | ||
| 516 | * enum cfg80211_signal_type - signal type | ||
| 517 | * | ||
| 518 | * @CFG80211_SIGNAL_TYPE_NONE: no signal strength information available | ||
| 519 | * @CFG80211_SIGNAL_TYPE_MBM: signal strength in mBm (100*dBm) | ||
| 520 | * @CFG80211_SIGNAL_TYPE_UNSPEC: signal strength, increasing from 0 through 100 | ||
| 521 | */ | ||
| 522 | enum cfg80211_signal_type { | ||
| 523 | CFG80211_SIGNAL_TYPE_NONE, | ||
| 524 | CFG80211_SIGNAL_TYPE_MBM, | ||
| 525 | CFG80211_SIGNAL_TYPE_UNSPEC, | ||
| 526 | }; | ||
| 527 | |||
| 528 | /** | ||
| 529 | * struct cfg80211_bss - BSS description | ||
| 530 | * | ||
| 531 | * This structure describes a BSS (which may also be a mesh network) | ||
| 532 | * for use in scan results and similar. | ||
| 533 | * | ||
| 534 | * @bssid: BSSID of the BSS | ||
| 535 | * @tsf: timestamp of last received update | ||
| 536 | * @beacon_interval: the beacon interval as from the frame | ||
| 537 | * @capability: the capability field in host byte order | ||
| 538 | * @information_elements: the information elements (Note that there | ||
| 539 | * is no guarantee that these are well-formed!) | ||
| 540 | * @len_information_elements: total length of the information elements | ||
| 541 | * @signal: signal strength value (type depends on the wiphy's signal_type) | ||
| 542 | * @hold: BSS should not expire | ||
| 543 | * @free_priv: function pointer to free private data | ||
| 544 | * @priv: private area for driver use, has at least wiphy->bss_priv_size bytes | ||
| 545 | */ | ||
| 546 | struct cfg80211_bss { | ||
| 547 | struct ieee80211_channel *channel; | ||
| 548 | |||
| 549 | u8 bssid[ETH_ALEN]; | ||
| 550 | u64 tsf; | ||
| 551 | u16 beacon_interval; | ||
| 552 | u16 capability; | ||
| 553 | u8 *information_elements; | ||
| 554 | size_t len_information_elements; | ||
| 555 | |||
| 556 | s32 signal; | ||
| 557 | |||
| 558 | void (*free_priv)(struct cfg80211_bss *bss); | ||
| 559 | u8 priv[0] __attribute__((__aligned__(sizeof(void *)))); | ||
| 560 | }; | ||
| 561 | |||
| 562 | /** | ||
| 563 | * struct cfg80211_auth_request - Authentication request data | ||
| 564 | * | ||
| 565 | * This structure provides information needed to complete IEEE 802.11 | ||
| 566 | * authentication. | ||
| 567 | * NOTE: This structure will likely change when more code from mac80211 is | ||
| 568 | * moved into cfg80211 so that non-mac80211 drivers can benefit from it, too. | ||
| 569 | * Before using this in a driver that does not use mac80211, it would be better | ||
| 570 | * to check the status of that work and better yet, volunteer to work on it. | ||
| 571 | * | ||
| 572 | * @chan: The channel to use or %NULL if not specified (auto-select based on | ||
| 573 | * scan results) | ||
| 574 | * @peer_addr: The address of the peer STA (AP BSSID in infrastructure case); | ||
| 575 | * this field is required to be present; if the driver wants to help with | ||
| 576 | * BSS selection, it should use (yet to be added) MLME event to allow user | ||
| 577 | * space SME to be notified of roaming candidate, so that the SME can then | ||
| 578 | * use the authentication request with the recommended BSSID and whatever | ||
| 579 | * other data may be needed for authentication/association | ||
| 580 | * @ssid: SSID or %NULL if not yet available | ||
| 581 | * @ssid_len: Length of ssid in octets | ||
| 582 | * @auth_type: Authentication type (algorithm) | ||
| 583 | * @ie: Extra IEs to add to Authentication frame or %NULL | ||
| 584 | * @ie_len: Length of ie buffer in octets | ||
| 585 | */ | ||
| 586 | struct cfg80211_auth_request { | ||
| 587 | struct ieee80211_channel *chan; | ||
| 588 | u8 *peer_addr; | ||
| 589 | const u8 *ssid; | ||
| 590 | size_t ssid_len; | ||
| 591 | enum nl80211_auth_type auth_type; | ||
| 592 | const u8 *ie; | ||
| 593 | size_t ie_len; | ||
| 594 | }; | ||
| 595 | |||
| 596 | /** | ||
| 597 | * struct cfg80211_assoc_request - (Re)Association request data | ||
| 598 | * | ||
| 599 | * This structure provides information needed to complete IEEE 802.11 | ||
| 600 | * (re)association. | ||
| 601 | * NOTE: This structure will likely change when more code from mac80211 is | ||
| 602 | * moved into cfg80211 so that non-mac80211 drivers can benefit from it, too. | ||
| 603 | * Before using this in a driver that does not use mac80211, it would be better | ||
| 604 | * to check the status of that work and better yet, volunteer to work on it. | ||
| 605 | * | ||
| 606 | * @chan: The channel to use or %NULL if not specified (auto-select based on | ||
| 607 | * scan results) | ||
| 608 | * @peer_addr: The address of the peer STA (AP BSSID); this field is required | ||
| 609 | * to be present and the STA must be in State 2 (authenticated) with the | ||
| 610 | * peer STA | ||
| 611 | * @ssid: SSID | ||
| 612 | * @ssid_len: Length of ssid in octets | ||
| 613 | * @ie: Extra IEs to add to (Re)Association Request frame or %NULL | ||
| 614 | * @ie_len: Length of ie buffer in octets | ||
| 615 | */ | ||
| 616 | struct cfg80211_assoc_request { | ||
| 617 | struct ieee80211_channel *chan; | ||
| 618 | u8 *peer_addr; | ||
| 619 | const u8 *ssid; | ||
| 620 | size_t ssid_len; | ||
| 621 | const u8 *ie; | ||
| 622 | size_t ie_len; | ||
| 623 | }; | ||
| 624 | |||
| 625 | /** | ||
| 626 | * struct cfg80211_deauth_request - Deauthentication request data | ||
| 627 | * | ||
| 628 | * This structure provides information needed to complete IEEE 802.11 | ||
| 629 | * deauthentication. | ||
| 630 | * | ||
| 631 | * @peer_addr: The address of the peer STA (AP BSSID); this field is required | ||
| 632 | * to be present and the STA must be authenticated with the peer STA | ||
| 633 | * @ie: Extra IEs to add to Deauthentication frame or %NULL | ||
| 634 | * @ie_len: Length of ie buffer in octets | ||
| 635 | */ | ||
| 636 | struct cfg80211_deauth_request { | ||
| 637 | u8 *peer_addr; | ||
| 638 | u16 reason_code; | ||
| 639 | const u8 *ie; | ||
| 640 | size_t ie_len; | ||
| 641 | }; | ||
| 642 | |||
| 643 | /** | ||
| 644 | * struct cfg80211_disassoc_request - Disassociation request data | ||
| 645 | * | ||
| 646 | * This structure provides information needed to complete IEEE 802.11 | ||
| 647 | * disassocation. | ||
| 648 | * | ||
| 649 | * @peer_addr: The address of the peer STA (AP BSSID); this field is required | ||
| 650 | * to be present and the STA must be associated with the peer STA | ||
| 651 | * @ie: Extra IEs to add to Disassociation frame or %NULL | ||
| 652 | * @ie_len: Length of ie buffer in octets | ||
| 653 | */ | ||
| 654 | struct cfg80211_disassoc_request { | ||
| 655 | u8 *peer_addr; | ||
| 656 | u16 reason_code; | ||
| 657 | const u8 *ie; | ||
| 658 | size_t ie_len; | ||
| 659 | }; | ||
| 660 | |||
| 661 | /** | ||
| 441 | * struct cfg80211_ops - backend description for wireless configuration | 662 | * struct cfg80211_ops - backend description for wireless configuration |
| 442 | * | 663 | * |
| 443 | * This struct is registered by fullmac card drivers and/or wireless stacks | 664 | * This struct is registered by fullmac card drivers and/or wireless stacks |
| @@ -450,6 +671,9 @@ struct ieee80211_channel; | |||
| 450 | * wireless extensions but this is subject to reevaluation as soon as this | 671 | * 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. | 672 | * code is used more widely and we have a first user without wext. |
| 452 | * | 673 | * |
| 674 | * @suspend: wiphy device needs to be suspended | ||
| 675 | * @resume: wiphy device needs to be resumed | ||
| 676 | * | ||
| 453 | * @add_virtual_intf: create a new virtual interface with the given name, | 677 | * @add_virtual_intf: create a new virtual interface with the given name, |
| 454 | * must set the struct wireless_dev's iftype. | 678 | * must set the struct wireless_dev's iftype. |
| 455 | * | 679 | * |
| @@ -471,6 +695,8 @@ struct ieee80211_channel; | |||
| 471 | * | 695 | * |
| 472 | * @set_default_key: set the default key on an interface | 696 | * @set_default_key: set the default key on an interface |
| 473 | * | 697 | * |
| 698 | * @set_default_mgmt_key: set the default management frame key on an interface | ||
| 699 | * | ||
| 474 | * @add_beacon: Add a beacon with given parameters, @head, @interval | 700 | * @add_beacon: Add a beacon with given parameters, @head, @interval |
| 475 | * and @dtim_period will be valid, @tail is optional. | 701 | * and @dtim_period will be valid, @tail is optional. |
| 476 | * @set_beacon: Change the beacon parameters for an access point mode | 702 | * @set_beacon: Change the beacon parameters for an access point mode |
| @@ -497,8 +723,21 @@ struct ieee80211_channel; | |||
| 497 | * @set_txq_params: Set TX queue parameters | 723 | * @set_txq_params: Set TX queue parameters |
| 498 | * | 724 | * |
| 499 | * @set_channel: Set channel | 725 | * @set_channel: Set channel |
| 726 | * | ||
| 727 | * @scan: Request to do a scan. If returning zero, the scan request is given | ||
| 728 | * the driver, and will be valid until passed to cfg80211_scan_done(). | ||
| 729 | * For scan results, call cfg80211_inform_bss(); you can call this outside | ||
| 730 | * the scan/scan_done bracket too. | ||
| 731 | * | ||
| 732 | * @auth: Request to authenticate with the specified peer | ||
| 733 | * @assoc: Request to (re)associate with the specified peer | ||
| 734 | * @deauth: Request to deauthenticate from the specified peer | ||
| 735 | * @disassoc: Request to disassociate from the specified peer | ||
| 500 | */ | 736 | */ |
| 501 | struct cfg80211_ops { | 737 | struct cfg80211_ops { |
| 738 | int (*suspend)(struct wiphy *wiphy); | ||
| 739 | int (*resume)(struct wiphy *wiphy); | ||
| 740 | |||
| 502 | int (*add_virtual_intf)(struct wiphy *wiphy, char *name, | 741 | int (*add_virtual_intf)(struct wiphy *wiphy, char *name, |
| 503 | enum nl80211_iftype type, u32 *flags, | 742 | enum nl80211_iftype type, u32 *flags, |
| 504 | struct vif_params *params); | 743 | struct vif_params *params); |
| @@ -518,6 +757,9 @@ struct cfg80211_ops { | |||
| 518 | int (*set_default_key)(struct wiphy *wiphy, | 757 | int (*set_default_key)(struct wiphy *wiphy, |
| 519 | struct net_device *netdev, | 758 | struct net_device *netdev, |
| 520 | u8 key_index); | 759 | u8 key_index); |
| 760 | int (*set_default_mgmt_key)(struct wiphy *wiphy, | ||
| 761 | struct net_device *netdev, | ||
| 762 | u8 key_index); | ||
| 521 | 763 | ||
| 522 | int (*add_beacon)(struct wiphy *wiphy, struct net_device *dev, | 764 | int (*add_beacon)(struct wiphy *wiphy, struct net_device *dev, |
| 523 | struct beacon_parameters *info); | 765 | struct beacon_parameters *info); |
| @@ -564,6 +806,18 @@ struct cfg80211_ops { | |||
| 564 | int (*set_channel)(struct wiphy *wiphy, | 806 | int (*set_channel)(struct wiphy *wiphy, |
| 565 | struct ieee80211_channel *chan, | 807 | struct ieee80211_channel *chan, |
| 566 | enum nl80211_channel_type channel_type); | 808 | enum nl80211_channel_type channel_type); |
| 809 | |||
| 810 | int (*scan)(struct wiphy *wiphy, struct net_device *dev, | ||
| 811 | struct cfg80211_scan_request *request); | ||
| 812 | |||
| 813 | int (*auth)(struct wiphy *wiphy, struct net_device *dev, | ||
| 814 | struct cfg80211_auth_request *req); | ||
| 815 | int (*assoc)(struct wiphy *wiphy, struct net_device *dev, | ||
| 816 | struct cfg80211_assoc_request *req); | ||
| 817 | int (*deauth)(struct wiphy *wiphy, struct net_device *dev, | ||
| 818 | struct cfg80211_deauth_request *req); | ||
| 819 | int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, | ||
| 820 | struct cfg80211_disassoc_request *req); | ||
| 567 | }; | 821 | }; |
| 568 | 822 | ||
| 569 | /* temporary wext handlers */ | 823 | /* temporary wext handlers */ |
| @@ -574,5 +828,134 @@ int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info, | |||
| 574 | u32 *mode, char *extra); | 828 | u32 *mode, char *extra); |
| 575 | int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info, | 829 | int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info, |
| 576 | u32 *mode, char *extra); | 830 | u32 *mode, char *extra); |
| 831 | int cfg80211_wext_siwscan(struct net_device *dev, | ||
| 832 | struct iw_request_info *info, | ||
| 833 | union iwreq_data *wrqu, char *extra); | ||
| 834 | int cfg80211_wext_giwscan(struct net_device *dev, | ||
| 835 | struct iw_request_info *info, | ||
| 836 | struct iw_point *data, char *extra); | ||
| 837 | int cfg80211_wext_giwrange(struct net_device *dev, | ||
| 838 | struct iw_request_info *info, | ||
| 839 | struct iw_point *data, char *extra); | ||
| 840 | |||
| 841 | /** | ||
| 842 | * cfg80211_scan_done - notify that scan finished | ||
| 843 | * | ||
| 844 | * @request: the corresponding scan request | ||
| 845 | * @aborted: set to true if the scan was aborted for any reason, | ||
| 846 | * userspace will be notified of that | ||
| 847 | */ | ||
| 848 | void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted); | ||
| 849 | |||
| 850 | /** | ||
| 851 | * cfg80211_inform_bss - inform cfg80211 of a new BSS | ||
| 852 | * | ||
| 853 | * @wiphy: the wiphy reporting the BSS | ||
| 854 | * @bss: the found BSS | ||
| 855 | * @signal: the signal strength, type depends on the wiphy's signal_type | ||
| 856 | * @gfp: context flags | ||
| 857 | * | ||
| 858 | * This informs cfg80211 that BSS information was found and | ||
| 859 | * the BSS should be updated/added. | ||
| 860 | */ | ||
| 861 | struct cfg80211_bss* | ||
| 862 | cfg80211_inform_bss_frame(struct wiphy *wiphy, | ||
| 863 | struct ieee80211_channel *channel, | ||
| 864 | struct ieee80211_mgmt *mgmt, size_t len, | ||
| 865 | s32 signal, gfp_t gfp); | ||
| 866 | |||
| 867 | struct cfg80211_bss *cfg80211_get_bss(struct wiphy *wiphy, | ||
| 868 | struct ieee80211_channel *channel, | ||
| 869 | const u8 *bssid, | ||
| 870 | const u8 *ssid, size_t ssid_len, | ||
| 871 | u16 capa_mask, u16 capa_val); | ||
| 872 | static inline struct cfg80211_bss * | ||
| 873 | cfg80211_get_ibss(struct wiphy *wiphy, | ||
| 874 | struct ieee80211_channel *channel, | ||
| 875 | const u8 *ssid, size_t ssid_len) | ||
| 876 | { | ||
| 877 | return cfg80211_get_bss(wiphy, channel, NULL, ssid, ssid_len, | ||
| 878 | WLAN_CAPABILITY_IBSS, WLAN_CAPABILITY_IBSS); | ||
| 879 | } | ||
| 880 | |||
| 881 | struct cfg80211_bss *cfg80211_get_mesh(struct wiphy *wiphy, | ||
| 882 | struct ieee80211_channel *channel, | ||
| 883 | const u8 *meshid, size_t meshidlen, | ||
| 884 | const u8 *meshcfg); | ||
| 885 | void cfg80211_put_bss(struct cfg80211_bss *bss); | ||
| 886 | /** | ||
| 887 | * cfg80211_unlink_bss - unlink BSS from internal data structures | ||
| 888 | * @wiphy: the wiphy | ||
| 889 | * @bss: the bss to remove | ||
| 890 | * | ||
| 891 | * This function removes the given BSS from the internal data structures | ||
| 892 | * thereby making it no longer show up in scan results etc. Use this | ||
| 893 | * function when you detect a BSS is gone. Normally BSSes will also time | ||
| 894 | * out, so it is not necessary to use this function at all. | ||
| 895 | */ | ||
| 896 | void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss); | ||
| 897 | |||
| 898 | /** | ||
| 899 | * cfg80211_send_rx_auth - notification of processed authentication | ||
| 900 | * @dev: network device | ||
| 901 | * @buf: authentication frame (header + body) | ||
| 902 | * @len: length of the frame data | ||
| 903 | * | ||
| 904 | * This function is called whenever an authentication has been processed in | ||
| 905 | * station mode. | ||
| 906 | */ | ||
| 907 | void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len); | ||
| 908 | |||
| 909 | /** | ||
| 910 | * cfg80211_send_rx_assoc - notification of processed association | ||
| 911 | * @dev: network device | ||
| 912 | * @buf: (re)association response frame (header + body) | ||
| 913 | * @len: length of the frame data | ||
| 914 | * | ||
| 915 | * This function is called whenever a (re)association response has been | ||
| 916 | * processed in station mode. | ||
| 917 | */ | ||
| 918 | void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len); | ||
| 919 | |||
| 920 | /** | ||
| 921 | * cfg80211_send_rx_deauth - notification of processed deauthentication | ||
| 922 | * @dev: network device | ||
| 923 | * @buf: deauthentication frame (header + body) | ||
| 924 | * @len: length of the frame data | ||
| 925 | * | ||
| 926 | * This function is called whenever deauthentication has been processed in | ||
| 927 | * station mode. | ||
| 928 | */ | ||
| 929 | void cfg80211_send_rx_deauth(struct net_device *dev, const u8 *buf, | ||
| 930 | size_t len); | ||
| 931 | |||
| 932 | /** | ||
| 933 | * cfg80211_send_rx_disassoc - notification of processed disassociation | ||
| 934 | * @dev: network device | ||
| 935 | * @buf: disassociation response frame (header + body) | ||
| 936 | * @len: length of the frame data | ||
| 937 | * | ||
| 938 | * This function is called whenever disassociation has been processed in | ||
| 939 | * station mode. | ||
| 940 | */ | ||
| 941 | void cfg80211_send_rx_disassoc(struct net_device *dev, const u8 *buf, | ||
| 942 | size_t len); | ||
| 943 | |||
| 944 | /** | ||
| 945 | * cfg80211_hold_bss - exclude bss from expiration | ||
| 946 | * @bss: bss which should not expire | ||
| 947 | * | ||
| 948 | * In a case when the BSS is not updated but it shouldn't expire this | ||
| 949 | * function can be used to mark the BSS to be excluded from expiration. | ||
| 950 | */ | ||
| 951 | void cfg80211_hold_bss(struct cfg80211_bss *bss); | ||
| 952 | |||
| 953 | /** | ||
| 954 | * cfg80211_unhold_bss - remove expiration exception from the BSS | ||
| 955 | * @bss: bss which can expire again | ||
| 956 | * | ||
| 957 | * This function marks the BSS to be expirable again. | ||
| 958 | */ | ||
| 959 | void cfg80211_unhold_bss(struct cfg80211_bss *bss); | ||
| 577 | 960 | ||
| 578 | #endif /* __NET_CFG80211_H */ | 961 | #endif /* __NET_CFG80211_H */ |
diff --git a/include/net/cipso_ipv4.h b/include/net/cipso_ipv4.h index bedc7f62e35d..abd443604c9f 100644 --- a/include/net/cipso_ipv4.h +++ b/include/net/cipso_ipv4.h | |||
| @@ -40,6 +40,7 @@ | |||
| 40 | #include <linux/net.h> | 40 | #include <linux/net.h> |
| 41 | #include <linux/skbuff.h> | 41 | #include <linux/skbuff.h> |
| 42 | #include <net/netlabel.h> | 42 | #include <net/netlabel.h> |
| 43 | #include <net/request_sock.h> | ||
| 43 | #include <asm/atomic.h> | 44 | #include <asm/atomic.h> |
| 44 | 45 | ||
| 45 | /* known doi values */ | 46 | /* known doi values */ |
| @@ -215,6 +216,10 @@ int cipso_v4_sock_setattr(struct sock *sk, | |||
| 215 | const struct netlbl_lsm_secattr *secattr); | 216 | const struct netlbl_lsm_secattr *secattr); |
| 216 | void cipso_v4_sock_delattr(struct sock *sk); | 217 | void cipso_v4_sock_delattr(struct sock *sk); |
| 217 | int cipso_v4_sock_getattr(struct sock *sk, struct netlbl_lsm_secattr *secattr); | 218 | int cipso_v4_sock_getattr(struct sock *sk, struct netlbl_lsm_secattr *secattr); |
| 219 | int cipso_v4_req_setattr(struct request_sock *req, | ||
| 220 | const struct cipso_v4_doi *doi_def, | ||
| 221 | const struct netlbl_lsm_secattr *secattr); | ||
| 222 | void cipso_v4_req_delattr(struct request_sock *req); | ||
| 218 | int cipso_v4_skbuff_setattr(struct sk_buff *skb, | 223 | int cipso_v4_skbuff_setattr(struct sk_buff *skb, |
| 219 | const struct cipso_v4_doi *doi_def, | 224 | const struct cipso_v4_doi *doi_def, |
| 220 | const struct netlbl_lsm_secattr *secattr); | 225 | const struct netlbl_lsm_secattr *secattr); |
| @@ -247,6 +252,18 @@ static inline int cipso_v4_sock_getattr(struct sock *sk, | |||
| 247 | return -ENOSYS; | 252 | return -ENOSYS; |
| 248 | } | 253 | } |
| 249 | 254 | ||
| 255 | static inline int cipso_v4_req_setattr(struct request_sock *req, | ||
| 256 | const struct cipso_v4_doi *doi_def, | ||
| 257 | const struct netlbl_lsm_secattr *secattr) | ||
| 258 | { | ||
| 259 | return -ENOSYS; | ||
| 260 | } | ||
| 261 | |||
| 262 | static inline void cipso_v4_req_delattr(struct request_sock *req) | ||
| 263 | { | ||
| 264 | return; | ||
| 265 | } | ||
| 266 | |||
| 250 | static inline int cipso_v4_skbuff_setattr(struct sk_buff *skb, | 267 | static inline int cipso_v4_skbuff_setattr(struct sk_buff *skb, |
| 251 | const struct cipso_v4_doi *doi_def, | 268 | const struct cipso_v4_doi *doi_def, |
| 252 | const struct netlbl_lsm_secattr *secattr) | 269 | const struct netlbl_lsm_secattr *secattr) |
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/ethoc.h b/include/net/ethoc.h new file mode 100644 index 000000000000..96f3789b27bc --- /dev/null +++ b/include/net/ethoc.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | /* | ||
| 2 | * linux/include/net/ethoc.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008-2009 Avionic Design GmbH | ||
| 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 | * Written by Thierry Reding <thierry.reding@avionic-design.de> | ||
| 11 | */ | ||
| 12 | |||
| 13 | #ifndef LINUX_NET_ETHOC_H | ||
| 14 | #define LINUX_NET_ETHOC_H 1 | ||
| 15 | |||
| 16 | struct ethoc_platform_data { | ||
| 17 | u8 hwaddr[IFHWADDRLEN]; | ||
| 18 | s8 phy_id; | ||
| 19 | }; | ||
| 20 | |||
| 21 | #endif /* !LINUX_NET_ETHOC_H */ | ||
| 22 | |||
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/ieee80211_radiotap.h b/include/net/ieee80211_radiotap.h index 384698cb773a..23c3f3d97779 100644 --- a/include/net/ieee80211_radiotap.h +++ b/include/net/ieee80211_radiotap.h | |||
| @@ -230,8 +230,10 @@ enum ieee80211_radiotap_type { | |||
| 230 | * 802.11 header and payload | 230 | * 802.11 header and payload |
| 231 | * (to 32-bit boundary) | 231 | * (to 32-bit boundary) |
| 232 | */ | 232 | */ |
| 233 | #define IEEE80211_RADIOTAP_F_BADFCS 0x40 /* bad FCS */ | ||
| 234 | |||
| 233 | /* For IEEE80211_RADIOTAP_RX_FLAGS */ | 235 | /* For IEEE80211_RADIOTAP_RX_FLAGS */ |
| 234 | #define IEEE80211_RADIOTAP_F_RX_BADFCS 0x0001 /* frame failed crc check */ | 236 | #define IEEE80211_RADIOTAP_F_RX_BADPLCP 0x0002 /* frame has bad PLCP */ |
| 235 | 237 | ||
| 236 | /* For IEEE80211_RADIOTAP_TX_FLAGS */ | 238 | /* For IEEE80211_RADIOTAP_TX_FLAGS */ |
| 237 | #define IEEE80211_RADIOTAP_F_TX_FAIL 0x0001 /* failed due to excessive | 239 | #define IEEE80211_RADIOTAP_F_TX_FAIL 0x0001 /* failed due to excessive |
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..3b83a80e3fe0 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
| @@ -93,12 +93,9 @@ struct ieee80211_ht_bss_info { | |||
| 93 | * enum ieee80211_max_queues - maximum number of queues | 93 | * enum ieee80211_max_queues - maximum number of queues |
| 94 | * | 94 | * |
| 95 | * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues. | 95 | * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues. |
| 96 | * @IEEE80211_MAX_AMPDU_QUEUES: Maximum number of queues usable | ||
| 97 | * for A-MPDU operation. | ||
| 98 | */ | 96 | */ |
| 99 | enum ieee80211_max_queues { | 97 | enum ieee80211_max_queues { |
| 100 | IEEE80211_MAX_QUEUES = 16, | 98 | IEEE80211_MAX_QUEUES = 4, |
| 101 | IEEE80211_MAX_AMPDU_QUEUES = 16, | ||
| 102 | }; | 99 | }; |
| 103 | 100 | ||
| 104 | /** | 101 | /** |
| @@ -207,7 +204,7 @@ struct ieee80211_bss_conf { | |||
| 207 | u16 beacon_int; | 204 | u16 beacon_int; |
| 208 | u16 assoc_capability; | 205 | u16 assoc_capability; |
| 209 | u64 timestamp; | 206 | u64 timestamp; |
| 210 | u64 basic_rates; | 207 | u32 basic_rates; |
| 211 | struct ieee80211_bss_ht_conf ht; | 208 | struct ieee80211_bss_ht_conf ht; |
| 212 | }; | 209 | }; |
| 213 | 210 | ||
| @@ -245,6 +242,12 @@ struct ieee80211_bss_conf { | |||
| 245 | * @IEEE80211_TX_CTL_RATE_CTRL_PROBE: internal to mac80211, can be | 242 | * @IEEE80211_TX_CTL_RATE_CTRL_PROBE: internal to mac80211, can be |
| 246 | * set by rate control algorithms to indicate probe rate, will | 243 | * set by rate control algorithms to indicate probe rate, will |
| 247 | * be cleared for fragmented frames (except on the last fragment) | 244 | * be cleared for fragmented frames (except on the last fragment) |
| 245 | * @IEEE80211_TX_INTFL_RCALGO: mac80211 internal flag, do not test or | ||
| 246 | * set this flag in the driver; indicates that the rate control | ||
| 247 | * algorithm was used and should be notified of TX status | ||
| 248 | * @IEEE80211_TX_INTFL_NEED_TXPROCESSING: completely internal to mac80211, | ||
| 249 | * used to indicate that a pending frame requires TX processing before | ||
| 250 | * it can be sent out. | ||
| 248 | */ | 251 | */ |
| 249 | enum mac80211_tx_control_flags { | 252 | enum mac80211_tx_control_flags { |
| 250 | IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), | 253 | IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), |
| @@ -260,8 +263,30 @@ enum mac80211_tx_control_flags { | |||
| 260 | IEEE80211_TX_STAT_AMPDU = BIT(10), | 263 | IEEE80211_TX_STAT_AMPDU = BIT(10), |
| 261 | IEEE80211_TX_STAT_AMPDU_NO_BACK = BIT(11), | 264 | IEEE80211_TX_STAT_AMPDU_NO_BACK = BIT(11), |
| 262 | IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12), | 265 | IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12), |
| 266 | IEEE80211_TX_INTFL_RCALGO = BIT(13), | ||
| 267 | IEEE80211_TX_INTFL_NEED_TXPROCESSING = BIT(14), | ||
| 263 | }; | 268 | }; |
| 264 | 269 | ||
| 270 | /** | ||
| 271 | * enum mac80211_rate_control_flags - per-rate flags set by the | ||
| 272 | * Rate Control algorithm. | ||
| 273 | * | ||
| 274 | * These flags are set by the Rate control algorithm for each rate during tx, | ||
| 275 | * in the @flags member of struct ieee80211_tx_rate. | ||
| 276 | * | ||
| 277 | * @IEEE80211_TX_RC_USE_RTS_CTS: Use RTS/CTS exchange for this rate. | ||
| 278 | * @IEEE80211_TX_RC_USE_CTS_PROTECT: CTS-to-self protection is required. | ||
| 279 | * This is set if the current BSS requires ERP protection. | ||
| 280 | * @IEEE80211_TX_RC_USE_SHORT_PREAMBLE: Use short preamble. | ||
| 281 | * @IEEE80211_TX_RC_MCS: HT rate. | ||
| 282 | * @IEEE80211_TX_RC_GREEN_FIELD: Indicates whether this rate should be used in | ||
| 283 | * Greenfield mode. | ||
| 284 | * @IEEE80211_TX_RC_40_MHZ_WIDTH: Indicates if the Channel Width should be 40 MHz. | ||
| 285 | * @IEEE80211_TX_RC_DUP_DATA: The frame should be transmitted on both of the | ||
| 286 | * adjacent 20 MHz channels, if the current channel type is | ||
| 287 | * NL80211_CHAN_HT40MINUS or NL80211_CHAN_HT40PLUS. | ||
| 288 | * @IEEE80211_TX_RC_SHORT_GI: Short Guard interval should be used for this rate. | ||
| 289 | */ | ||
| 265 | enum mac80211_rate_control_flags { | 290 | enum mac80211_rate_control_flags { |
| 266 | IEEE80211_TX_RC_USE_RTS_CTS = BIT(0), | 291 | IEEE80211_TX_RC_USE_RTS_CTS = BIT(0), |
| 267 | IEEE80211_TX_RC_USE_CTS_PROTECT = BIT(1), | 292 | IEEE80211_TX_RC_USE_CTS_PROTECT = BIT(1), |
| @@ -500,17 +525,6 @@ enum ieee80211_conf_flags { | |||
| 500 | IEEE80211_CONF_PS = (1<<1), | 525 | IEEE80211_CONF_PS = (1<<1), |
| 501 | }; | 526 | }; |
| 502 | 527 | ||
| 503 | /* XXX: remove all this once drivers stop trying to use it */ | ||
| 504 | static inline int __deprecated __IEEE80211_CONF_SHORT_SLOT_TIME(void) | ||
| 505 | { | ||
| 506 | return 0; | ||
| 507 | } | ||
| 508 | #define IEEE80211_CONF_SHORT_SLOT_TIME (__IEEE80211_CONF_SHORT_SLOT_TIME()) | ||
| 509 | |||
| 510 | struct ieee80211_ht_conf { | ||
| 511 | bool enabled; | ||
| 512 | enum nl80211_channel_type channel_type; | ||
| 513 | }; | ||
| 514 | 528 | ||
| 515 | /** | 529 | /** |
| 516 | * enum ieee80211_conf_changed - denotes which configuration changed | 530 | * enum ieee80211_conf_changed - denotes which configuration changed |
| @@ -520,10 +534,10 @@ struct ieee80211_ht_conf { | |||
| 520 | * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed | 534 | * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed |
| 521 | * @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed | 535 | * @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed |
| 522 | * @IEEE80211_CONF_CHANGE_PS: the PS flag changed | 536 | * @IEEE80211_CONF_CHANGE_PS: the PS flag changed |
| 537 | * @IEEE80211_CONF_CHANGE_DYNPS_TIMEOUT: the dynamic PS timeout changed | ||
| 523 | * @IEEE80211_CONF_CHANGE_POWER: the TX power changed | 538 | * @IEEE80211_CONF_CHANGE_POWER: the TX power changed |
| 524 | * @IEEE80211_CONF_CHANGE_CHANNEL: the channel changed | 539 | * @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed |
| 525 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed | 540 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed |
| 526 | * @IEEE80211_CONF_CHANGE_HT: HT configuration changed | ||
| 527 | */ | 541 | */ |
| 528 | enum ieee80211_conf_changed { | 542 | enum ieee80211_conf_changed { |
| 529 | IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0), | 543 | IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0), |
| @@ -531,10 +545,10 @@ enum ieee80211_conf_changed { | |||
| 531 | IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2), | 545 | IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2), |
| 532 | IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3), | 546 | IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3), |
| 533 | IEEE80211_CONF_CHANGE_PS = BIT(4), | 547 | IEEE80211_CONF_CHANGE_PS = BIT(4), |
| 534 | IEEE80211_CONF_CHANGE_POWER = BIT(5), | 548 | IEEE80211_CONF_CHANGE_DYNPS_TIMEOUT = BIT(5), |
| 535 | IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), | 549 | IEEE80211_CONF_CHANGE_POWER = BIT(6), |
| 536 | IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), | 550 | IEEE80211_CONF_CHANGE_CHANNEL = BIT(7), |
| 537 | IEEE80211_CONF_CHANGE_HT = BIT(8), | 551 | IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(8), |
| 538 | }; | 552 | }; |
| 539 | 553 | ||
| 540 | /** | 554 | /** |
| @@ -547,8 +561,9 @@ enum ieee80211_conf_changed { | |||
| 547 | * @listen_interval: listen interval in units of beacon interval | 561 | * @listen_interval: listen interval in units of beacon interval |
| 548 | * @flags: configuration flags defined above | 562 | * @flags: configuration flags defined above |
| 549 | * @power_level: requested transmit power (in dBm) | 563 | * @power_level: requested transmit power (in dBm) |
| 564 | * @dynamic_ps_timeout: dynamic powersave timeout (in ms) | ||
| 550 | * @channel: the channel to tune to | 565 | * @channel: the channel to tune to |
| 551 | * @ht: the HT configuration for the device | 566 | * @channel_type: the channel (HT) type |
| 552 | * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame | 567 | * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame |
| 553 | * (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11, | 568 | * (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11, |
| 554 | * but actually means the number of transmissions not the number of retries | 569 | * but actually means the number of transmissions not the number of retries |
| @@ -559,7 +574,7 @@ enum ieee80211_conf_changed { | |||
| 559 | struct ieee80211_conf { | 574 | struct ieee80211_conf { |
| 560 | int beacon_int; | 575 | int beacon_int; |
| 561 | u32 flags; | 576 | u32 flags; |
| 562 | int power_level; | 577 | int power_level, dynamic_ps_timeout; |
| 563 | 578 | ||
| 564 | u16 listen_interval; | 579 | u16 listen_interval; |
| 565 | bool radio_enabled; | 580 | bool radio_enabled; |
| @@ -567,7 +582,7 @@ struct ieee80211_conf { | |||
| 567 | u8 long_frame_max_tx_count, short_frame_max_tx_count; | 582 | u8 long_frame_max_tx_count, short_frame_max_tx_count; |
| 568 | 583 | ||
| 569 | struct ieee80211_channel *channel; | 584 | struct ieee80211_channel *channel; |
| 570 | struct ieee80211_ht_conf ht; | 585 | enum nl80211_channel_type channel_type; |
| 571 | }; | 586 | }; |
| 572 | 587 | ||
| 573 | /** | 588 | /** |
| @@ -630,10 +645,12 @@ struct ieee80211_if_init_conf { | |||
| 630 | * @IEEE80211_IFCC_BSSID: The BSSID changed. | 645 | * @IEEE80211_IFCC_BSSID: The BSSID changed. |
| 631 | * @IEEE80211_IFCC_BEACON: The beacon for this interface changed | 646 | * @IEEE80211_IFCC_BEACON: The beacon for this interface changed |
| 632 | * (currently AP and MESH only), use ieee80211_beacon_get(). | 647 | * (currently AP and MESH only), use ieee80211_beacon_get(). |
| 648 | * @IEEE80211_IFCC_BEACON_ENABLED: The enable_beacon value changed. | ||
| 633 | */ | 649 | */ |
| 634 | enum ieee80211_if_conf_change { | 650 | enum ieee80211_if_conf_change { |
| 635 | IEEE80211_IFCC_BSSID = BIT(0), | 651 | IEEE80211_IFCC_BSSID = BIT(0), |
| 636 | IEEE80211_IFCC_BEACON = BIT(1), | 652 | IEEE80211_IFCC_BEACON = BIT(1), |
| 653 | IEEE80211_IFCC_BEACON_ENABLED = BIT(2), | ||
| 637 | }; | 654 | }; |
| 638 | 655 | ||
| 639 | /** | 656 | /** |
| @@ -641,13 +658,16 @@ enum ieee80211_if_conf_change { | |||
| 641 | * | 658 | * |
| 642 | * @changed: parameters that have changed, see &enum ieee80211_if_conf_change. | 659 | * @changed: parameters that have changed, see &enum ieee80211_if_conf_change. |
| 643 | * @bssid: BSSID of the network we are associated to/creating. | 660 | * @bssid: BSSID of the network we are associated to/creating. |
| 661 | * @enable_beacon: Indicates whether beacons can be sent. | ||
| 662 | * This is valid only for AP/IBSS/MESH modes. | ||
| 644 | * | 663 | * |
| 645 | * This structure is passed to the config_interface() callback of | 664 | * This structure is passed to the config_interface() callback of |
| 646 | * &struct ieee80211_hw. | 665 | * &struct ieee80211_hw. |
| 647 | */ | 666 | */ |
| 648 | struct ieee80211_if_conf { | 667 | struct ieee80211_if_conf { |
| 649 | u32 changed; | 668 | u32 changed; |
| 650 | u8 *bssid; | 669 | const u8 *bssid; |
| 670 | bool enable_beacon; | ||
| 651 | }; | 671 | }; |
| 652 | 672 | ||
| 653 | /** | 673 | /** |
| @@ -655,11 +675,13 @@ struct ieee80211_if_conf { | |||
| 655 | * @ALG_WEP: WEP40 or WEP104 | 675 | * @ALG_WEP: WEP40 or WEP104 |
| 656 | * @ALG_TKIP: TKIP | 676 | * @ALG_TKIP: TKIP |
| 657 | * @ALG_CCMP: CCMP (AES) | 677 | * @ALG_CCMP: CCMP (AES) |
| 678 | * @ALG_AES_CMAC: AES-128-CMAC | ||
| 658 | */ | 679 | */ |
| 659 | enum ieee80211_key_alg { | 680 | enum ieee80211_key_alg { |
| 660 | ALG_WEP, | 681 | ALG_WEP, |
| 661 | ALG_TKIP, | 682 | ALG_TKIP, |
| 662 | ALG_CCMP, | 683 | ALG_CCMP, |
| 684 | ALG_AES_CMAC, | ||
| 663 | }; | 685 | }; |
| 664 | 686 | ||
| 665 | /** | 687 | /** |
| @@ -688,12 +710,16 @@ enum ieee80211_key_len { | |||
| 688 | * generation in software. | 710 | * generation in software. |
| 689 | * @IEEE80211_KEY_FLAG_PAIRWISE: Set by mac80211, this flag indicates | 711 | * @IEEE80211_KEY_FLAG_PAIRWISE: Set by mac80211, this flag indicates |
| 690 | * that the key is pairwise rather then a shared key. | 712 | * that the key is pairwise rather then a shared key. |
| 713 | * @IEEE80211_KEY_FLAG_SW_MGMT: This flag should be set by the driver for a | ||
| 714 | * CCMP key if it requires CCMP encryption of management frames (MFP) to | ||
| 715 | * be done in software. | ||
| 691 | */ | 716 | */ |
| 692 | enum ieee80211_key_flags { | 717 | enum ieee80211_key_flags { |
| 693 | IEEE80211_KEY_FLAG_WMM_STA = 1<<0, | 718 | IEEE80211_KEY_FLAG_WMM_STA = 1<<0, |
| 694 | IEEE80211_KEY_FLAG_GENERATE_IV = 1<<1, | 719 | IEEE80211_KEY_FLAG_GENERATE_IV = 1<<1, |
| 695 | IEEE80211_KEY_FLAG_GENERATE_MMIC= 1<<2, | 720 | IEEE80211_KEY_FLAG_GENERATE_MMIC= 1<<2, |
| 696 | IEEE80211_KEY_FLAG_PAIRWISE = 1<<3, | 721 | IEEE80211_KEY_FLAG_PAIRWISE = 1<<3, |
| 722 | IEEE80211_KEY_FLAG_SW_MGMT = 1<<4, | ||
| 697 | }; | 723 | }; |
| 698 | 724 | ||
| 699 | /** | 725 | /** |
| @@ -714,8 +740,8 @@ enum ieee80211_key_flags { | |||
| 714 | * - Temporal Encryption Key (128 bits) | 740 | * - Temporal Encryption Key (128 bits) |
| 715 | * - Temporal Authenticator Tx MIC Key (64 bits) | 741 | * - Temporal Authenticator Tx MIC Key (64 bits) |
| 716 | * - Temporal Authenticator Rx MIC Key (64 bits) | 742 | * - Temporal Authenticator Rx MIC Key (64 bits) |
| 717 | * @icv_len: FIXME | 743 | * @icv_len: The ICV length for this key type |
| 718 | * @iv_len: FIXME | 744 | * @iv_len: The IV length for this key type |
| 719 | */ | 745 | */ |
| 720 | struct ieee80211_key_conf { | 746 | struct ieee80211_key_conf { |
| 721 | enum ieee80211_key_alg alg; | 747 | enum ieee80211_key_alg alg; |
| @@ -759,7 +785,7 @@ enum set_key_cmd { | |||
| 759 | * sizeof(void *), size is determined in hw information. | 785 | * sizeof(void *), size is determined in hw information. |
| 760 | */ | 786 | */ |
| 761 | struct ieee80211_sta { | 787 | struct ieee80211_sta { |
| 762 | u64 supp_rates[IEEE80211_NUM_BANDS]; | 788 | u32 supp_rates[IEEE80211_NUM_BANDS]; |
| 763 | u8 addr[ETH_ALEN]; | 789 | u8 addr[ETH_ALEN]; |
| 764 | u16 aid; | 790 | u16 aid; |
| 765 | struct ieee80211_sta_ht_cap ht_cap; | 791 | struct ieee80211_sta_ht_cap ht_cap; |
| @@ -833,11 +859,6 @@ enum ieee80211_tkip_key_type { | |||
| 833 | * expect values between 0 and @max_signal. | 859 | * expect values between 0 and @max_signal. |
| 834 | * If possible please provide dB or dBm instead. | 860 | * If possible please provide dB or dBm instead. |
| 835 | * | 861 | * |
| 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: | 862 | * @IEEE80211_HW_SIGNAL_DBM: |
| 842 | * Hardware gives signal values in dBm, decibel difference from | 863 | * Hardware gives signal values in dBm, decibel difference from |
| 843 | * one milliwatt. This is the preferred method since it is standardized | 864 | * one milliwatt. This is the preferred method since it is standardized |
| @@ -854,10 +875,22 @@ enum ieee80211_tkip_key_type { | |||
| 854 | * @IEEE80211_HW_AMPDU_AGGREGATION: | 875 | * @IEEE80211_HW_AMPDU_AGGREGATION: |
| 855 | * Hardware supports 11n A-MPDU aggregation. | 876 | * Hardware supports 11n A-MPDU aggregation. |
| 856 | * | 877 | * |
| 857 | * @IEEE80211_HW_NO_STACK_DYNAMIC_PS: | 878 | * @IEEE80211_HW_SUPPORTS_PS: |
| 858 | * Hardware which has dynamic power save support, meaning | 879 | * 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 | 880 | * |
| 860 | * from stack. | 881 | * @IEEE80211_HW_PS_NULLFUNC_STACK: |
| 882 | * Hardware requires nullfunc frame handling in stack, implies | ||
| 883 | * stack support for dynamic PS. | ||
| 884 | * | ||
| 885 | * @IEEE80211_HW_SUPPORTS_DYNAMIC_PS: | ||
| 886 | * Hardware has support for dynamic PS. | ||
| 887 | * | ||
| 888 | * @IEEE80211_HW_MFP_CAPABLE: | ||
| 889 | * Hardware supports management frame protection (MFP, IEEE 802.11w). | ||
| 890 | * | ||
| 891 | * @IEEE80211_HW_BEACON_FILTER: | ||
| 892 | * Hardware supports dropping of irrelevant beacon frames to | ||
| 893 | * avoid waking up cpu. | ||
| 861 | */ | 894 | */ |
| 862 | enum ieee80211_hw_flags { | 895 | enum ieee80211_hw_flags { |
| 863 | IEEE80211_HW_RX_INCLUDES_FCS = 1<<1, | 896 | IEEE80211_HW_RX_INCLUDES_FCS = 1<<1, |
| @@ -865,12 +898,15 @@ enum ieee80211_hw_flags { | |||
| 865 | IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3, | 898 | IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3, |
| 866 | IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4, | 899 | IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4, |
| 867 | IEEE80211_HW_SIGNAL_UNSPEC = 1<<5, | 900 | IEEE80211_HW_SIGNAL_UNSPEC = 1<<5, |
| 868 | IEEE80211_HW_SIGNAL_DB = 1<<6, | 901 | IEEE80211_HW_SIGNAL_DBM = 1<<6, |
| 869 | IEEE80211_HW_SIGNAL_DBM = 1<<7, | 902 | IEEE80211_HW_NOISE_DBM = 1<<7, |
| 870 | IEEE80211_HW_NOISE_DBM = 1<<8, | 903 | IEEE80211_HW_SPECTRUM_MGMT = 1<<8, |
| 871 | IEEE80211_HW_SPECTRUM_MGMT = 1<<9, | 904 | IEEE80211_HW_AMPDU_AGGREGATION = 1<<9, |
| 872 | IEEE80211_HW_AMPDU_AGGREGATION = 1<<10, | 905 | IEEE80211_HW_SUPPORTS_PS = 1<<10, |
| 873 | IEEE80211_HW_NO_STACK_DYNAMIC_PS = 1<<11, | 906 | IEEE80211_HW_PS_NULLFUNC_STACK = 1<<11, |
| 907 | IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<12, | ||
| 908 | IEEE80211_HW_MFP_CAPABLE = 1<<13, | ||
| 909 | IEEE80211_HW_BEACON_FILTER = 1<<14, | ||
| 874 | }; | 910 | }; |
| 875 | 911 | ||
| 876 | /** | 912 | /** |
| @@ -890,9 +926,8 @@ enum ieee80211_hw_flags { | |||
| 890 | * @workqueue: single threaded workqueue available for driver use, | 926 | * @workqueue: single threaded workqueue available for driver use, |
| 891 | * allocated by mac80211 on registration and flushed when an | 927 | * allocated by mac80211 on registration and flushed when an |
| 892 | * interface is removed. | 928 | * interface is removed. |
| 893 | * NOTICE: All work performed on this workqueue should NEVER | 929 | * NOTICE: All work performed on this workqueue must not |
| 894 | * acquire the RTNL lock (i.e. Don't use the function | 930 | * acquire the RTNL lock. |
| 895 | * ieee80211_iterate_active_interfaces()) | ||
| 896 | * | 931 | * |
| 897 | * @priv: pointer to private area that was allocated for driver use | 932 | * @priv: pointer to private area that was allocated for driver use |
| 898 | * along with this structure. | 933 | * along with this structure. |
| @@ -914,12 +949,6 @@ enum ieee80211_hw_flags { | |||
| 914 | * data packets. WMM/QoS requires at least four, these | 949 | * data packets. WMM/QoS requires at least four, these |
| 915 | * queues need to have configurable access parameters. | 950 | * queues need to have configurable access parameters. |
| 916 | * | 951 | * |
| 917 | * @ampdu_queues: number of available hardware transmit queues | ||
| 918 | * for A-MPDU packets, these have no access parameters | ||
| 919 | * because they're used only for A-MPDU frames. Note that | ||
| 920 | * mac80211 will not currently use any of the regular queues | ||
| 921 | * for aggregation. | ||
| 922 | * | ||
| 923 | * @rate_control_algorithm: rate control algorithm for this hardware. | 952 | * @rate_control_algorithm: rate control algorithm for this hardware. |
| 924 | * If unset (NULL), the default algorithm will be used. Must be | 953 | * If unset (NULL), the default algorithm will be used. Must be |
| 925 | * set before calling ieee80211_register_hw(). | 954 | * set before calling ieee80211_register_hw(). |
| @@ -944,7 +973,6 @@ struct ieee80211_hw { | |||
| 944 | int vif_data_size; | 973 | int vif_data_size; |
| 945 | int sta_data_size; | 974 | int sta_data_size; |
| 946 | u16 queues; | 975 | u16 queues; |
| 947 | u16 ampdu_queues; | ||
| 948 | u16 max_listen_interval; | 976 | u16 max_listen_interval; |
| 949 | s8 max_signal; | 977 | s8 max_signal; |
| 950 | u8 max_rates; | 978 | u8 max_rates; |
| @@ -952,6 +980,19 @@ struct ieee80211_hw { | |||
| 952 | }; | 980 | }; |
| 953 | 981 | ||
| 954 | /** | 982 | /** |
| 983 | * wiphy_to_ieee80211_hw - return a mac80211 driver hw struct from a wiphy | ||
| 984 | * | ||
| 985 | * @wiphy: the &struct wiphy which we want to query | ||
| 986 | * | ||
| 987 | * mac80211 drivers can use this to get to their respective | ||
| 988 | * &struct ieee80211_hw. Drivers wishing to get to their own private | ||
| 989 | * structure can then access it via hw->priv. Note that mac802111 drivers should | ||
| 990 | * not use wiphy_priv() to try to get their private driver structure as this | ||
| 991 | * is already used internally by mac80211. | ||
| 992 | */ | ||
| 993 | struct ieee80211_hw *wiphy_to_ieee80211_hw(struct wiphy *wiphy); | ||
| 994 | |||
| 995 | /** | ||
| 955 | * SET_IEEE80211_DEV - set device for 802.11 hardware | 996 | * SET_IEEE80211_DEV - set device for 802.11 hardware |
| 956 | * | 997 | * |
| 957 | * @hw: the &struct ieee80211_hw to set the device for | 998 | * @hw: the &struct ieee80211_hw to set the device for |
| @@ -973,16 +1014,6 @@ static inline void SET_IEEE80211_PERM_ADDR(struct ieee80211_hw *hw, u8 *addr) | |||
| 973 | memcpy(hw->wiphy->perm_addr, addr, ETH_ALEN); | 1014 | memcpy(hw->wiphy->perm_addr, addr, ETH_ALEN); |
| 974 | } | 1015 | } |
| 975 | 1016 | ||
| 976 | static inline int ieee80211_num_regular_queues(struct ieee80211_hw *hw) | ||
| 977 | { | ||
| 978 | return hw->queues; | ||
| 979 | } | ||
| 980 | |||
| 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 * | 1017 | static inline struct ieee80211_rate * |
| 987 | ieee80211_get_tx_rate(const struct ieee80211_hw *hw, | 1018 | ieee80211_get_tx_rate(const struct ieee80211_hw *hw, |
| 988 | const struct ieee80211_tx_info *c) | 1019 | const struct ieee80211_tx_info *c) |
| @@ -1018,16 +1049,12 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw, | |||
| 1018 | * | 1049 | * |
| 1019 | * The set_key() callback in the &struct ieee80211_ops for a given | 1050 | * The set_key() callback in the &struct ieee80211_ops for a given |
| 1020 | * device is called to enable hardware acceleration of encryption and | 1051 | * device is called to enable hardware acceleration of encryption and |
| 1021 | * decryption. The callback takes an @address parameter that will be | 1052 | * decryption. The callback takes a @sta parameter that will be NULL |
| 1022 | * the broadcast address for default keys, the other station's hardware | 1053 | * 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 | 1054 | * 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 | 1055 | * Multiple transmission keys with the same key index may be used when |
| 1026 | * VLANs are configured for an access point. | 1056 | * VLANs are configured for an access point. |
| 1027 | * | 1057 | * |
| 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 | 1058 | * When transmitting, the TX control data will use the @hw_key_idx |
| 1032 | * selected by the driver by modifying the &struct ieee80211_key_conf | 1059 | * selected by the driver by modifying the &struct ieee80211_key_conf |
| 1033 | * pointed to by the @key parameter to the set_key() function. | 1060 | * pointed to by the @key parameter to the set_key() function. |
| @@ -1061,6 +1088,60 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw, | |||
| 1061 | */ | 1088 | */ |
| 1062 | 1089 | ||
| 1063 | /** | 1090 | /** |
| 1091 | * DOC: Powersave support | ||
| 1092 | * | ||
| 1093 | * mac80211 has support for various powersave implementations. | ||
| 1094 | * | ||
| 1095 | * First, it can support hardware that handles all powersaving by | ||
| 1096 | * itself, such hardware should simply set the %IEEE80211_HW_SUPPORTS_PS | ||
| 1097 | * hardware flag. In that case, it will be told about the desired | ||
| 1098 | * powersave mode depending on the association status, and the driver | ||
| 1099 | * must take care of sending nullfunc frames when necessary, i.e. when | ||
| 1100 | * entering and leaving powersave mode. The driver is required to look at | ||
| 1101 | * the AID in beacons and signal to the AP that it woke up when it finds | ||
| 1102 | * traffic directed to it. This mode supports dynamic PS by simply | ||
| 1103 | * enabling/disabling PS. | ||
| 1104 | * | ||
| 1105 | * Additionally, such hardware may set the %IEEE80211_HW_SUPPORTS_DYNAMIC_PS | ||
| 1106 | * flag to indicate that it can support dynamic PS mode itself (see below). | ||
| 1107 | * | ||
| 1108 | * Other hardware designs cannot send nullfunc frames by themselves and also | ||
| 1109 | * need software support for parsing the TIM bitmap. This is also supported | ||
| 1110 | * by mac80211 by combining the %IEEE80211_HW_SUPPORTS_PS and | ||
| 1111 | * %IEEE80211_HW_PS_NULLFUNC_STACK flags. The hardware is of course still | ||
| 1112 | * required to pass up beacons. Additionally, in this case, mac80211 will | ||
| 1113 | * wake up the hardware when multicast traffic is announced in the beacon. | ||
| 1114 | * | ||
| 1115 | * FIXME: I don't think we can be fast enough in software when we want to | ||
| 1116 | * receive multicast traffic? | ||
| 1117 | * | ||
| 1118 | * Dynamic powersave mode is an extension to normal powersave mode in which | ||
| 1119 | * the hardware stays awake for a user-specified period of time after sending | ||
| 1120 | * a frame so that reply frames need not be buffered and therefore delayed | ||
| 1121 | * to the next wakeup. This can either be supported by hardware, in which case | ||
| 1122 | * the driver needs to look at the @dynamic_ps_timeout hardware configuration | ||
| 1123 | * value, or by the stack if all nullfunc handling is in the stack. | ||
| 1124 | */ | ||
| 1125 | |||
| 1126 | /** | ||
| 1127 | * DOC: Beacon filter support | ||
| 1128 | * | ||
| 1129 | * Some hardware have beacon filter support to reduce host cpu wakeups | ||
| 1130 | * which will reduce system power consumption. It usuallly works so that | ||
| 1131 | * the firmware creates a checksum of the beacon but omits all constantly | ||
| 1132 | * changing elements (TSF, TIM etc). Whenever the checksum changes the | ||
| 1133 | * beacon is forwarded to the host, otherwise it will be just dropped. That | ||
| 1134 | * way the host will only receive beacons where some relevant information | ||
| 1135 | * (for example ERP protection or WMM settings) have changed. | ||
| 1136 | * | ||
| 1137 | * Beacon filter support is informed with %IEEE80211_HW_BEACON_FILTER flag. | ||
| 1138 | * The driver needs to enable beacon filter support whenever power save is | ||
| 1139 | * enabled, that is %IEEE80211_CONF_PS is set. When power save is enabled, | ||
| 1140 | * the stack will not check for beacon miss at all and the driver needs to | ||
| 1141 | * notify about complete loss of beacons with ieee80211_beacon_loss(). | ||
| 1142 | */ | ||
| 1143 | |||
| 1144 | /** | ||
| 1064 | * DOC: Frame filtering | 1145 | * DOC: Frame filtering |
| 1065 | * | 1146 | * |
| 1066 | * mac80211 requires to see many management frames for proper | 1147 | * mac80211 requires to see many management frames for proper |
| @@ -1149,14 +1230,14 @@ enum ieee80211_filter_flags { | |||
| 1149 | * @IEEE80211_AMPDU_RX_STOP: stop Rx aggregation | 1230 | * @IEEE80211_AMPDU_RX_STOP: stop Rx aggregation |
| 1150 | * @IEEE80211_AMPDU_TX_START: start Tx aggregation | 1231 | * @IEEE80211_AMPDU_TX_START: start Tx aggregation |
| 1151 | * @IEEE80211_AMPDU_TX_STOP: stop Tx aggregation | 1232 | * @IEEE80211_AMPDU_TX_STOP: stop Tx aggregation |
| 1152 | * @IEEE80211_AMPDU_TX_RESUME: resume TX aggregation | 1233 | * @IEEE80211_AMPDU_TX_OPERATIONAL: TX aggregation has become operational |
| 1153 | */ | 1234 | */ |
| 1154 | enum ieee80211_ampdu_mlme_action { | 1235 | enum ieee80211_ampdu_mlme_action { |
| 1155 | IEEE80211_AMPDU_RX_START, | 1236 | IEEE80211_AMPDU_RX_START, |
| 1156 | IEEE80211_AMPDU_RX_STOP, | 1237 | IEEE80211_AMPDU_RX_STOP, |
| 1157 | IEEE80211_AMPDU_TX_START, | 1238 | IEEE80211_AMPDU_TX_START, |
| 1158 | IEEE80211_AMPDU_TX_STOP, | 1239 | IEEE80211_AMPDU_TX_STOP, |
| 1159 | IEEE80211_AMPDU_TX_RESUME, | 1240 | IEEE80211_AMPDU_TX_OPERATIONAL, |
| 1160 | }; | 1241 | }; |
| 1161 | 1242 | ||
| 1162 | /** | 1243 | /** |
| @@ -1172,6 +1253,8 @@ enum ieee80211_ampdu_mlme_action { | |||
| 1172 | * configuration in the TX control data. This handler should, | 1253 | * configuration in the TX control data. This handler should, |
| 1173 | * preferably, never fail and stop queues appropriately, more | 1254 | * preferably, never fail and stop queues appropriately, more |
| 1174 | * importantly, however, it must never fail for A-MPDU-queues. | 1255 | * importantly, however, it must never fail for A-MPDU-queues. |
| 1256 | * This function should return NETDEV_TX_OK except in very | ||
| 1257 | * limited cases. | ||
| 1175 | * Must be implemented and atomic. | 1258 | * Must be implemented and atomic. |
| 1176 | * | 1259 | * |
| 1177 | * @start: Called before the first netdevice attached to the hardware | 1260 | * @start: Called before the first netdevice attached to the hardware |
| @@ -1212,9 +1295,12 @@ enum ieee80211_ampdu_mlme_action { | |||
| 1212 | * | 1295 | * |
| 1213 | * @config: Handler for configuration requests. IEEE 802.11 code calls this | 1296 | * @config: Handler for configuration requests. IEEE 802.11 code calls this |
| 1214 | * function to change hardware configuration, e.g., channel. | 1297 | * function to change hardware configuration, e.g., channel. |
| 1298 | * This function should never fail but returns a negative error code | ||
| 1299 | * if it does. | ||
| 1215 | * | 1300 | * |
| 1216 | * @config_interface: Handler for configuration requests related to interfaces | 1301 | * @config_interface: Handler for configuration requests related to interfaces |
| 1217 | * (e.g. BSSID changes.) | 1302 | * (e.g. BSSID changes.) |
| 1303 | * Returns a negative error code which will be seen in userspace. | ||
| 1218 | * | 1304 | * |
| 1219 | * @bss_info_changed: Handler for configuration requests related to BSS | 1305 | * @bss_info_changed: Handler for configuration requests related to BSS |
| 1220 | * parameters that may vary during BSS's lifespan, and may affect low | 1306 | * parameters that may vary during BSS's lifespan, and may affect low |
| @@ -1232,8 +1318,9 @@ enum ieee80211_ampdu_mlme_action { | |||
| 1232 | * | 1318 | * |
| 1233 | * @set_key: See the section "Hardware crypto acceleration" | 1319 | * @set_key: See the section "Hardware crypto acceleration" |
| 1234 | * This callback can sleep, and is only called between add_interface | 1320 | * This callback can sleep, and is only called between add_interface |
| 1235 | * and remove_interface calls, i.e. while the interface with the | 1321 | * and remove_interface calls, i.e. while the given virtual interface |
| 1236 | * given local_address is enabled. | 1322 | * is enabled. |
| 1323 | * Returns a negative error code if the key can't be added. | ||
| 1237 | * | 1324 | * |
| 1238 | * @update_tkip_key: See the section "Hardware crypto acceleration" | 1325 | * @update_tkip_key: See the section "Hardware crypto acceleration" |
| 1239 | * This callback will be called in the context of Rx. Called for drivers | 1326 | * This callback will be called in the context of Rx. Called for drivers |
| @@ -1241,12 +1328,22 @@ enum ieee80211_ampdu_mlme_action { | |||
| 1241 | * | 1328 | * |
| 1242 | * @hw_scan: Ask the hardware to service the scan request, no need to start | 1329 | * @hw_scan: Ask the hardware to service the scan request, no need to start |
| 1243 | * the scan state machine in stack. The scan must honour the channel | 1330 | * the scan state machine in stack. The scan must honour the channel |
| 1244 | * configuration done by the regulatory agent in the wiphy's registered | 1331 | * configuration done by the regulatory agent in the wiphy's |
| 1245 | * bands. When the scan finishes, ieee80211_scan_completed() must be | 1332 | * registered bands. The hardware (or the driver) needs to make sure |
| 1246 | * called; note that it also must be called when the scan cannot finish | 1333 | * that power save is disabled. When the scan finishes, |
| 1247 | * because the hardware is turned off! Anything else is a bug! | 1334 | * ieee80211_scan_completed() must be called; note that it also must |
| 1335 | * be called when the scan cannot finish because the hardware is | ||
| 1336 | * turned off! Anything else is a bug! Returns a negative error code | ||
| 1337 | * which will be seen in userspace. | ||
| 1338 | * | ||
| 1339 | * @sw_scan_start: Notifier function that is called just before a software scan | ||
| 1340 | * is started. Can be NULL, if the driver doesn't need this notification. | ||
| 1341 | * | ||
| 1342 | * @sw_scan_complete: Notifier function that is called just after a software scan | ||
| 1343 | * finished. Can be NULL, if the driver doesn't need this notification. | ||
| 1248 | * | 1344 | * |
| 1249 | * @get_stats: return low-level statistics | 1345 | * @get_stats: Return low-level statistics. |
| 1346 | * Returns zero if statistics are available. | ||
| 1250 | * | 1347 | * |
| 1251 | * @get_tkip_seq: If your device implements TKIP encryption in hardware this | 1348 | * @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 | 1349 | * callback should be provided to read the TKIP transmit IVs (both IV32 |
| @@ -1260,16 +1357,21 @@ enum ieee80211_ampdu_mlme_action { | |||
| 1260 | * | 1357 | * |
| 1261 | * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max), | 1358 | * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max), |
| 1262 | * bursting) for a hardware TX queue. | 1359 | * bursting) for a hardware TX queue. |
| 1360 | * Returns a negative error code on failure. | ||
| 1263 | * | 1361 | * |
| 1264 | * @get_tx_stats: Get statistics of the current TX queue status. This is used | 1362 | * @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 | 1363 | * to get number of currently queued packets (queue length), maximum queue |
| 1266 | * size (limit), and total number of packets sent using each TX queue | 1364 | * size (limit), and total number of packets sent using each TX queue |
| 1267 | * (count). The 'stats' pointer points to an array that has hw->queues + | 1365 | * (count). The 'stats' pointer points to an array that has hw->queues |
| 1268 | * hw->ampdu_queues items. | 1366 | * items. |
| 1269 | * | 1367 | * |
| 1270 | * @get_tsf: Get the current TSF timer value from firmware/hardware. Currently, | 1368 | * @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 | 1369 | * this is only used for IBSS mode BSSID merging and debugging. Is not a |
| 1272 | * required function. Must be atomic. | 1370 | * required function. |
| 1371 | * | ||
| 1372 | * @set_tsf: Set the TSF timer to the specified value in the firmware/hardware. | ||
| 1373 | * Currently, this is only used for IBSS mode debugging. Is not a | ||
| 1374 | * required function. | ||
| 1273 | * | 1375 | * |
| 1274 | * @reset_tsf: Reset the TSF timer and allow firmware/hardware to synchronize | 1376 | * @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 | 1377 | * with other STAs in the IBSS. This is only used in IBSS mode. This |
| @@ -1279,13 +1381,15 @@ enum ieee80211_ampdu_mlme_action { | |||
| 1279 | * @tx_last_beacon: Determine whether the last IBSS beacon was sent by us. | 1381 | * @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 | 1382 | * This is needed only for IBSS mode and the result of this function is |
| 1281 | * used to determine whether to reply to Probe Requests. | 1383 | * used to determine whether to reply to Probe Requests. |
| 1384 | * Returns non-zero if this device sent the last beacon. | ||
| 1282 | * | 1385 | * |
| 1283 | * @ampdu_action: Perform a certain A-MPDU action | 1386 | * @ampdu_action: Perform a certain A-MPDU action |
| 1284 | * The RA/TID combination determines the destination and TID we want | 1387 | * The RA/TID combination determines the destination and TID we want |
| 1285 | * the ampdu action to be performed for. The action is defined through | 1388 | * the ampdu action to be performed for. The action is defined through |
| 1286 | * ieee80211_ampdu_mlme_action. Starting sequence number (@ssn) | 1389 | * ieee80211_ampdu_mlme_action. Starting sequence number (@ssn) |
| 1287 | * is the first frame we expect to perform the action on. notice | 1390 | * is the first frame we expect to perform the action on. Notice |
| 1288 | * that TX/RX_STOP can pass NULL for this parameter. | 1391 | * that TX/RX_STOP can pass NULL for this parameter. |
| 1392 | * Returns a negative error code on failure. | ||
| 1289 | */ | 1393 | */ |
| 1290 | struct ieee80211_ops { | 1394 | struct ieee80211_ops { |
| 1291 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); | 1395 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); |
| @@ -1310,12 +1414,15 @@ struct ieee80211_ops { | |||
| 1310 | int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta, | 1414 | int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta, |
| 1311 | bool set); | 1415 | bool set); |
| 1312 | int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd, | 1416 | int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd, |
| 1313 | const u8 *local_address, const u8 *address, | 1417 | struct ieee80211_vif *vif, struct ieee80211_sta *sta, |
| 1314 | struct ieee80211_key_conf *key); | 1418 | struct ieee80211_key_conf *key); |
| 1315 | void (*update_tkip_key)(struct ieee80211_hw *hw, | 1419 | void (*update_tkip_key)(struct ieee80211_hw *hw, |
| 1316 | struct ieee80211_key_conf *conf, const u8 *address, | 1420 | struct ieee80211_key_conf *conf, const u8 *address, |
| 1317 | u32 iv32, u16 *phase1key); | 1421 | u32 iv32, u16 *phase1key); |
| 1318 | int (*hw_scan)(struct ieee80211_hw *hw, u8 *ssid, size_t len); | 1422 | int (*hw_scan)(struct ieee80211_hw *hw, |
| 1423 | struct cfg80211_scan_request *req); | ||
| 1424 | void (*sw_scan_start)(struct ieee80211_hw *hw); | ||
| 1425 | void (*sw_scan_complete)(struct ieee80211_hw *hw); | ||
| 1319 | int (*get_stats)(struct ieee80211_hw *hw, | 1426 | int (*get_stats)(struct ieee80211_hw *hw, |
| 1320 | struct ieee80211_low_level_stats *stats); | 1427 | struct ieee80211_low_level_stats *stats); |
| 1321 | void (*get_tkip_seq)(struct ieee80211_hw *hw, u8 hw_key_idx, | 1428 | void (*get_tkip_seq)(struct ieee80211_hw *hw, u8 hw_key_idx, |
| @@ -1328,6 +1435,7 @@ struct ieee80211_ops { | |||
| 1328 | int (*get_tx_stats)(struct ieee80211_hw *hw, | 1435 | int (*get_tx_stats)(struct ieee80211_hw *hw, |
| 1329 | struct ieee80211_tx_queue_stats *stats); | 1436 | struct ieee80211_tx_queue_stats *stats); |
| 1330 | u64 (*get_tsf)(struct ieee80211_hw *hw); | 1437 | u64 (*get_tsf)(struct ieee80211_hw *hw); |
| 1438 | void (*set_tsf)(struct ieee80211_hw *hw, u64 tsf); | ||
| 1331 | void (*reset_tsf)(struct ieee80211_hw *hw); | 1439 | void (*reset_tsf)(struct ieee80211_hw *hw); |
| 1332 | int (*tx_last_beacon)(struct ieee80211_hw *hw); | 1440 | int (*tx_last_beacon)(struct ieee80211_hw *hw); |
| 1333 | int (*ampdu_action)(struct ieee80211_hw *hw, | 1441 | int (*ampdu_action)(struct ieee80211_hw *hw, |
| @@ -1752,8 +1860,9 @@ void ieee80211_wake_queues(struct ieee80211_hw *hw); | |||
| 1752 | * mac80211 that the scan finished. | 1860 | * mac80211 that the scan finished. |
| 1753 | * | 1861 | * |
| 1754 | * @hw: the hardware that finished the scan | 1862 | * @hw: the hardware that finished the scan |
| 1863 | * @aborted: set to true if scan was aborted | ||
| 1755 | */ | 1864 | */ |
| 1756 | void ieee80211_scan_completed(struct ieee80211_hw *hw); | 1865 | void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted); |
| 1757 | 1866 | ||
| 1758 | /** | 1867 | /** |
| 1759 | * ieee80211_iterate_active_interfaces - iterate active interfaces | 1868 | * ieee80211_iterate_active_interfaces - iterate active interfaces |
| @@ -1882,10 +1991,30 @@ void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra, | |||
| 1882 | struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_hw *hw, | 1991 | struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_hw *hw, |
| 1883 | const u8 *addr); | 1992 | const u8 *addr); |
| 1884 | 1993 | ||
| 1994 | /** | ||
| 1995 | * ieee80211_beacon_loss - inform hardware does not receive beacons | ||
| 1996 | * | ||
| 1997 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. | ||
| 1998 | * | ||
| 1999 | * When beacon filtering is enabled with IEEE80211_HW_BEACON_FILTERING and | ||
| 2000 | * IEEE80211_CONF_PS is set, the driver needs to inform whenever the | ||
| 2001 | * hardware is not receiving beacons with this function. | ||
| 2002 | */ | ||
| 2003 | void ieee80211_beacon_loss(struct ieee80211_vif *vif); | ||
| 1885 | 2004 | ||
| 1886 | /* Rate control API */ | 2005 | /* Rate control API */ |
| 1887 | 2006 | ||
| 1888 | /** | 2007 | /** |
| 2008 | * enum rate_control_changed - flags to indicate which parameter changed | ||
| 2009 | * | ||
| 2010 | * @IEEE80211_RC_HT_CHANGED: The HT parameters of the operating channel have | ||
| 2011 | * changed, rate control algorithm can update its internal state if needed. | ||
| 2012 | */ | ||
| 2013 | enum rate_control_changed { | ||
| 2014 | IEEE80211_RC_HT_CHANGED = BIT(0) | ||
| 2015 | }; | ||
| 2016 | |||
| 2017 | /** | ||
| 1889 | * struct ieee80211_tx_rate_control - rate control information for/from RC algo | 2018 | * struct ieee80211_tx_rate_control - rate control information for/from RC algo |
| 1890 | * | 2019 | * |
| 1891 | * @hw: The hardware the algorithm is invoked for. | 2020 | * @hw: The hardware the algorithm is invoked for. |
| @@ -1921,6 +2050,9 @@ struct rate_control_ops { | |||
| 1921 | void *(*alloc_sta)(void *priv, struct ieee80211_sta *sta, gfp_t gfp); | 2050 | void *(*alloc_sta)(void *priv, struct ieee80211_sta *sta, gfp_t gfp); |
| 1922 | void (*rate_init)(void *priv, struct ieee80211_supported_band *sband, | 2051 | void (*rate_init)(void *priv, struct ieee80211_supported_band *sband, |
| 1923 | struct ieee80211_sta *sta, void *priv_sta); | 2052 | struct ieee80211_sta *sta, void *priv_sta); |
| 2053 | void (*rate_update)(void *priv, struct ieee80211_supported_band *sband, | ||
| 2054 | struct ieee80211_sta *sta, | ||
| 2055 | void *priv_sta, u32 changed); | ||
| 1924 | void (*free_sta)(void *priv, struct ieee80211_sta *sta, | 2056 | void (*free_sta)(void *priv, struct ieee80211_sta *sta, |
| 1925 | void *priv_sta); | 2057 | void *priv_sta); |
| 1926 | 2058 | ||
| @@ -1962,4 +2094,34 @@ rate_lowest_index(struct ieee80211_supported_band *sband, | |||
| 1962 | int ieee80211_rate_control_register(struct rate_control_ops *ops); | 2094 | int ieee80211_rate_control_register(struct rate_control_ops *ops); |
| 1963 | void ieee80211_rate_control_unregister(struct rate_control_ops *ops); | 2095 | void ieee80211_rate_control_unregister(struct rate_control_ops *ops); |
| 1964 | 2096 | ||
| 2097 | static inline bool | ||
| 2098 | conf_is_ht20(struct ieee80211_conf *conf) | ||
| 2099 | { | ||
| 2100 | return conf->channel_type == NL80211_CHAN_HT20; | ||
| 2101 | } | ||
| 2102 | |||
| 2103 | static inline bool | ||
| 2104 | conf_is_ht40_minus(struct ieee80211_conf *conf) | ||
| 2105 | { | ||
| 2106 | return conf->channel_type == NL80211_CHAN_HT40MINUS; | ||
| 2107 | } | ||
| 2108 | |||
| 2109 | static inline bool | ||
| 2110 | conf_is_ht40_plus(struct ieee80211_conf *conf) | ||
| 2111 | { | ||
| 2112 | return conf->channel_type == NL80211_CHAN_HT40PLUS; | ||
| 2113 | } | ||
| 2114 | |||
| 2115 | static inline bool | ||
| 2116 | conf_is_ht40(struct ieee80211_conf *conf) | ||
| 2117 | { | ||
| 2118 | return conf_is_ht40_minus(conf) || conf_is_ht40_plus(conf); | ||
| 2119 | } | ||
| 2120 | |||
| 2121 | static inline bool | ||
| 2122 | conf_is_ht(struct ieee80211_conf *conf) | ||
| 2123 | { | ||
| 2124 | return conf->channel_type != NL80211_CHAN_NO_HT; | ||
| 2125 | } | ||
| 2126 | |||
| 1965 | #endif /* MAC80211_H */ | 2127 | #endif /* MAC80211_H */ |
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h index 2e0c53641cbe..6c3f964de9e1 100644 --- a/include/net/netfilter/nf_conntrack.h +++ b/include/net/netfilter/nf_conntrack.h | |||
| @@ -91,8 +91,7 @@ struct nf_conn_help { | |||
| 91 | #include <net/netfilter/ipv4/nf_conntrack_ipv4.h> | 91 | #include <net/netfilter/ipv4/nf_conntrack_ipv4.h> |
| 92 | #include <net/netfilter/ipv6/nf_conntrack_ipv6.h> | 92 | #include <net/netfilter/ipv6/nf_conntrack_ipv6.h> |
| 93 | 93 | ||
| 94 | struct nf_conn | 94 | struct nf_conn { |
| 95 | { | ||
| 96 | /* Usage count in here is 1 for hash table/destruct timer, 1 per skb, | 95 | /* Usage count in here is 1 for hash table/destruct timer, 1 per skb, |
| 97 | plus 1 for any connection(s) we are `master' for */ | 96 | plus 1 for any connection(s) we are `master' for */ |
| 98 | struct nf_conntrack ct_general; | 97 | struct nf_conntrack ct_general; |
| @@ -126,7 +125,6 @@ struct nf_conn | |||
| 126 | #ifdef CONFIG_NET_NS | 125 | #ifdef CONFIG_NET_NS |
| 127 | struct net *ct_net; | 126 | struct net *ct_net; |
| 128 | #endif | 127 | #endif |
| 129 | struct rcu_head rcu; | ||
| 130 | }; | 128 | }; |
| 131 | 129 | ||
| 132 | static inline struct nf_conn * | 130 | static inline struct nf_conn * |
| @@ -190,9 +188,13 @@ static inline void nf_ct_put(struct nf_conn *ct) | |||
| 190 | extern int nf_ct_l3proto_try_module_get(unsigned short l3proto); | 188 | extern int nf_ct_l3proto_try_module_get(unsigned short l3proto); |
| 191 | extern void nf_ct_l3proto_module_put(unsigned short l3proto); | 189 | extern void nf_ct_l3proto_module_put(unsigned short l3proto); |
| 192 | 190 | ||
| 193 | extern struct hlist_head *nf_ct_alloc_hashtable(unsigned int *sizep, int *vmalloced); | 191 | /* |
| 194 | extern void nf_ct_free_hashtable(struct hlist_head *hash, int vmalloced, | 192 | * Allocate a hashtable of hlist_head (if nulls == 0), |
| 195 | unsigned int size); | 193 | * or hlist_nulls_head (if nulls == 1) |
| 194 | */ | ||
| 195 | extern void *nf_ct_alloc_hashtable(unsigned int *sizep, int *vmalloced, int nulls); | ||
| 196 | |||
| 197 | extern void nf_ct_free_hashtable(void *hash, int vmalloced, unsigned int size); | ||
| 196 | 198 | ||
| 197 | extern struct nf_conntrack_tuple_hash * | 199 | extern struct nf_conntrack_tuple_hash * |
| 198 | __nf_conntrack_find(struct net *net, const struct nf_conntrack_tuple *tuple); | 200 | __nf_conntrack_find(struct net *net, const struct nf_conntrack_tuple *tuple); |
| @@ -287,7 +289,7 @@ static inline int nf_ct_is_untracked(const struct sk_buff *skb) | |||
| 287 | 289 | ||
| 288 | extern int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp); | 290 | extern int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp); |
| 289 | extern unsigned int nf_conntrack_htable_size; | 291 | extern unsigned int nf_conntrack_htable_size; |
| 290 | extern int nf_conntrack_max; | 292 | extern unsigned int nf_conntrack_max; |
| 291 | 293 | ||
| 292 | #define NF_CT_STAT_INC(net, count) \ | 294 | #define NF_CT_STAT_INC(net, count) \ |
| 293 | (per_cpu_ptr((net)->ct.stat, raw_smp_processor_id())->count++) | 295 | (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_helper.h b/include/net/netfilter/nf_conntrack_helper.h index 66d65a7caa39..ee2a4b369a04 100644 --- a/include/net/netfilter/nf_conntrack_helper.h +++ b/include/net/netfilter/nf_conntrack_helper.h | |||
| @@ -14,6 +14,8 @@ | |||
| 14 | 14 | ||
| 15 | struct module; | 15 | struct module; |
| 16 | 16 | ||
| 17 | #define NF_CT_HELPER_NAME_LEN 16 | ||
| 18 | |||
| 17 | struct nf_conntrack_helper | 19 | struct nf_conntrack_helper |
| 18 | { | 20 | { |
| 19 | struct hlist_node hnode; /* Internal use. */ | 21 | struct hlist_node hnode; /* Internal use. */ |
diff --git a/include/net/netfilter/nf_conntrack_l3proto.h b/include/net/netfilter/nf_conntrack_l3proto.h index 0378676c3dd8..9f99d36d5de9 100644 --- a/include/net/netfilter/nf_conntrack_l3proto.h +++ b/include/net/netfilter/nf_conntrack_l3proto.h | |||
| @@ -53,10 +53,17 @@ struct nf_conntrack_l3proto | |||
| 53 | int (*tuple_to_nlattr)(struct sk_buff *skb, | 53 | int (*tuple_to_nlattr)(struct sk_buff *skb, |
| 54 | const struct nf_conntrack_tuple *t); | 54 | const struct nf_conntrack_tuple *t); |
| 55 | 55 | ||
| 56 | /* | ||
| 57 | * Calculate size of tuple nlattr | ||
| 58 | */ | ||
| 59 | int (*nlattr_tuple_size)(void); | ||
| 60 | |||
| 56 | int (*nlattr_to_tuple)(struct nlattr *tb[], | 61 | int (*nlattr_to_tuple)(struct nlattr *tb[], |
| 57 | struct nf_conntrack_tuple *t); | 62 | struct nf_conntrack_tuple *t); |
| 58 | const struct nla_policy *nla_policy; | 63 | const struct nla_policy *nla_policy; |
| 59 | 64 | ||
| 65 | size_t nla_size; | ||
| 66 | |||
| 60 | #ifdef CONFIG_SYSCTL | 67 | #ifdef CONFIG_SYSCTL |
| 61 | struct ctl_table_header *ctl_table_header; | 68 | struct ctl_table_header *ctl_table_header; |
| 62 | struct ctl_path *ctl_table_path; | 69 | struct ctl_path *ctl_table_path; |
diff --git a/include/net/netfilter/nf_conntrack_l4proto.h b/include/net/netfilter/nf_conntrack_l4proto.h index debdaf75cecf..ba32ed7bdabe 100644 --- a/include/net/netfilter/nf_conntrack_l4proto.h +++ b/include/net/netfilter/nf_conntrack_l4proto.h | |||
| @@ -64,16 +64,22 @@ struct nf_conntrack_l4proto | |||
| 64 | /* convert protoinfo to nfnetink attributes */ | 64 | /* convert protoinfo to nfnetink attributes */ |
| 65 | int (*to_nlattr)(struct sk_buff *skb, struct nlattr *nla, | 65 | int (*to_nlattr)(struct sk_buff *skb, struct nlattr *nla, |
| 66 | const struct nf_conn *ct); | 66 | const struct nf_conn *ct); |
| 67 | /* Calculate protoinfo nlattr size */ | ||
| 68 | int (*nlattr_size)(void); | ||
| 67 | 69 | ||
| 68 | /* convert nfnetlink attributes to protoinfo */ | 70 | /* convert nfnetlink attributes to protoinfo */ |
| 69 | int (*from_nlattr)(struct nlattr *tb[], struct nf_conn *ct); | 71 | int (*from_nlattr)(struct nlattr *tb[], struct nf_conn *ct); |
| 70 | 72 | ||
| 71 | int (*tuple_to_nlattr)(struct sk_buff *skb, | 73 | int (*tuple_to_nlattr)(struct sk_buff *skb, |
| 72 | const struct nf_conntrack_tuple *t); | 74 | const struct nf_conntrack_tuple *t); |
| 75 | /* Calculate tuple nlattr size */ | ||
| 76 | int (*nlattr_tuple_size)(void); | ||
| 73 | int (*nlattr_to_tuple)(struct nlattr *tb[], | 77 | int (*nlattr_to_tuple)(struct nlattr *tb[], |
| 74 | struct nf_conntrack_tuple *t); | 78 | struct nf_conntrack_tuple *t); |
| 75 | const struct nla_policy *nla_policy; | 79 | const struct nla_policy *nla_policy; |
| 76 | 80 | ||
| 81 | size_t nla_size; | ||
| 82 | |||
| 77 | #ifdef CONFIG_SYSCTL | 83 | #ifdef CONFIG_SYSCTL |
| 78 | struct ctl_table_header **ctl_table_header; | 84 | struct ctl_table_header **ctl_table_header; |
| 79 | struct ctl_table *ctl_table; | 85 | struct ctl_table *ctl_table; |
| @@ -90,10 +96,7 @@ struct nf_conntrack_l4proto | |||
| 90 | struct module *me; | 96 | struct module *me; |
| 91 | }; | 97 | }; |
| 92 | 98 | ||
| 93 | /* Existing built-in protocols */ | 99 | /* 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; | 100 | extern struct nf_conntrack_l4proto nf_conntrack_l4proto_generic; |
| 98 | 101 | ||
| 99 | #define MAX_NF_CT_PROTO 256 | 102 | #define MAX_NF_CT_PROTO 256 |
| @@ -101,11 +104,6 @@ extern struct nf_conntrack_l4proto nf_conntrack_l4proto_generic; | |||
| 101 | extern struct nf_conntrack_l4proto * | 104 | extern struct nf_conntrack_l4proto * |
| 102 | __nf_ct_l4proto_find(u_int16_t l3proto, u_int8_t l4proto); | 105 | __nf_ct_l4proto_find(u_int16_t l3proto, u_int8_t l4proto); |
| 103 | 106 | ||
| 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. */ | 107 | /* Protocol registration. */ |
| 110 | extern int nf_conntrack_l4proto_register(struct nf_conntrack_l4proto *proto); | 108 | extern int nf_conntrack_l4proto_register(struct nf_conntrack_l4proto *proto); |
| 111 | extern void nf_conntrack_l4proto_unregister(struct nf_conntrack_l4proto *proto); | 109 | extern void nf_conntrack_l4proto_unregister(struct nf_conntrack_l4proto *proto); |
| @@ -115,6 +113,7 @@ extern int nf_ct_port_tuple_to_nlattr(struct sk_buff *skb, | |||
| 115 | const struct nf_conntrack_tuple *tuple); | 113 | const struct nf_conntrack_tuple *tuple); |
| 116 | extern int nf_ct_port_nlattr_to_tuple(struct nlattr *tb[], | 114 | extern int nf_ct_port_nlattr_to_tuple(struct nlattr *tb[], |
| 117 | struct nf_conntrack_tuple *t); | 115 | struct nf_conntrack_tuple *t); |
| 116 | extern int nf_ct_port_nlattr_tuple_size(void); | ||
| 118 | extern const struct nla_policy nf_ct_port_nla_policy[]; | 117 | extern const struct nla_policy nf_ct_port_nla_policy[]; |
| 119 | 118 | ||
| 120 | #ifdef CONFIG_SYSCTL | 119 | #ifdef CONFIG_SYSCTL |
diff --git a/include/net/netfilter/nf_conntrack_tuple.h b/include/net/netfilter/nf_conntrack_tuple.h index f2f6aa73dc10..2628c154d40e 100644 --- a/include/net/netfilter/nf_conntrack_tuple.h +++ b/include/net/netfilter/nf_conntrack_tuple.h | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | 12 | ||
| 13 | #include <linux/netfilter/x_tables.h> | 13 | #include <linux/netfilter/x_tables.h> |
| 14 | #include <linux/netfilter/nf_conntrack_tuple_common.h> | 14 | #include <linux/netfilter/nf_conntrack_tuple_common.h> |
| 15 | #include <linux/list_nulls.h> | ||
| 15 | 16 | ||
| 16 | /* A `tuple' is a structure containing the information to uniquely | 17 | /* A `tuple' is a structure containing the information to uniquely |
| 17 | identify a connection. ie. if two packets have the same tuple, they | 18 | identify a connection. ie. if two packets have the same tuple, they |
| @@ -146,9 +147,8 @@ static inline void nf_ct_dump_tuple(const struct nf_conntrack_tuple *t) | |||
| 146 | ((enum ip_conntrack_dir)(h)->tuple.dst.dir) | 147 | ((enum ip_conntrack_dir)(h)->tuple.dst.dir) |
| 147 | 148 | ||
| 148 | /* Connections have two entries in the hash table: one for each way */ | 149 | /* Connections have two entries in the hash table: one for each way */ |
| 149 | struct nf_conntrack_tuple_hash | 150 | struct nf_conntrack_tuple_hash { |
| 150 | { | 151 | struct hlist_nulls_node hnnode; |
| 151 | struct hlist_node hnode; | ||
| 152 | struct nf_conntrack_tuple tuple; | 152 | struct nf_conntrack_tuple tuple; |
| 153 | }; | 153 | }; |
| 154 | 154 | ||
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/netlabel.h b/include/net/netlabel.h index 749011eedc0b..60ebbc1fef46 100644 --- a/include/net/netlabel.h +++ b/include/net/netlabel.h | |||
| @@ -36,6 +36,7 @@ | |||
| 36 | #include <linux/in.h> | 36 | #include <linux/in.h> |
| 37 | #include <linux/in6.h> | 37 | #include <linux/in6.h> |
| 38 | #include <net/netlink.h> | 38 | #include <net/netlink.h> |
| 39 | #include <net/request_sock.h> | ||
| 39 | #include <asm/atomic.h> | 40 | #include <asm/atomic.h> |
| 40 | 41 | ||
| 41 | struct cipso_v4_doi; | 42 | struct cipso_v4_doi; |
| @@ -406,6 +407,7 @@ int netlbl_secattr_catmap_setrng(struct netlbl_lsm_secattr_catmap *catmap, | |||
| 406 | */ | 407 | */ |
| 407 | int netlbl_enabled(void); | 408 | int netlbl_enabled(void); |
| 408 | int netlbl_sock_setattr(struct sock *sk, | 409 | int netlbl_sock_setattr(struct sock *sk, |
| 410 | u16 family, | ||
| 409 | const struct netlbl_lsm_secattr *secattr); | 411 | const struct netlbl_lsm_secattr *secattr); |
| 410 | void netlbl_sock_delattr(struct sock *sk); | 412 | void netlbl_sock_delattr(struct sock *sk); |
| 411 | int netlbl_sock_getattr(struct sock *sk, | 413 | int netlbl_sock_getattr(struct sock *sk, |
| @@ -413,6 +415,9 @@ int netlbl_sock_getattr(struct sock *sk, | |||
| 413 | int netlbl_conn_setattr(struct sock *sk, | 415 | int netlbl_conn_setattr(struct sock *sk, |
| 414 | struct sockaddr *addr, | 416 | struct sockaddr *addr, |
| 415 | const struct netlbl_lsm_secattr *secattr); | 417 | const struct netlbl_lsm_secattr *secattr); |
| 418 | int netlbl_req_setattr(struct request_sock *req, | ||
| 419 | const struct netlbl_lsm_secattr *secattr); | ||
| 420 | void netlbl_req_delattr(struct request_sock *req); | ||
| 416 | int netlbl_skbuff_setattr(struct sk_buff *skb, | 421 | int netlbl_skbuff_setattr(struct sk_buff *skb, |
| 417 | u16 family, | 422 | u16 family, |
| 418 | const struct netlbl_lsm_secattr *secattr); | 423 | const struct netlbl_lsm_secattr *secattr); |
| @@ -519,7 +524,8 @@ static inline int netlbl_enabled(void) | |||
| 519 | return 0; | 524 | return 0; |
| 520 | } | 525 | } |
| 521 | static inline int netlbl_sock_setattr(struct sock *sk, | 526 | static inline int netlbl_sock_setattr(struct sock *sk, |
| 522 | const struct netlbl_lsm_secattr *secattr) | 527 | u16 family, |
| 528 | const struct netlbl_lsm_secattr *secattr) | ||
| 523 | { | 529 | { |
| 524 | return -ENOSYS; | 530 | return -ENOSYS; |
| 525 | } | 531 | } |
| @@ -537,6 +543,15 @@ static inline int netlbl_conn_setattr(struct sock *sk, | |||
| 537 | { | 543 | { |
| 538 | return -ENOSYS; | 544 | return -ENOSYS; |
| 539 | } | 545 | } |
| 546 | static inline int netlbl_req_setattr(struct request_sock *req, | ||
| 547 | const struct netlbl_lsm_secattr *secattr) | ||
| 548 | { | ||
| 549 | return -ENOSYS; | ||
| 550 | } | ||
| 551 | static inline void netlbl_req_delattr(struct request_sock *req) | ||
| 552 | { | ||
| 553 | return; | ||
| 554 | } | ||
| 540 | static inline int netlbl_skbuff_setattr(struct sk_buff *skb, | 555 | static inline int netlbl_skbuff_setattr(struct sk_buff *skb, |
| 541 | u16 family, | 556 | u16 family, |
| 542 | const struct netlbl_lsm_secattr *secattr) | 557 | const struct netlbl_lsm_secattr *secattr) |
diff --git a/include/net/netlink.h b/include/net/netlink.h index 8a6150a3f4c7..eddb50289d6d 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h | |||
| @@ -230,6 +230,7 @@ extern int nla_validate(struct nlattr *head, int len, int maxtype, | |||
| 230 | extern int nla_parse(struct nlattr *tb[], int maxtype, | 230 | extern int nla_parse(struct nlattr *tb[], int maxtype, |
| 231 | struct nlattr *head, int len, | 231 | struct nlattr *head, int len, |
| 232 | const struct nla_policy *policy); | 232 | const struct nla_policy *policy); |
| 233 | extern int nla_policy_len(const struct nla_policy *, int); | ||
| 233 | extern struct nlattr * nla_find(struct nlattr *head, int len, int attrtype); | 234 | extern struct nlattr * nla_find(struct nlattr *head, int len, int attrtype); |
| 234 | extern size_t nla_strlcpy(char *dst, const struct nlattr *nla, | 235 | extern size_t nla_strlcpy(char *dst, const struct nlattr *nla, |
| 235 | size_t dstsize); | 236 | size_t dstsize); |
diff --git a/include/net/netns/conntrack.h b/include/net/netns/conntrack.h index f4498a62881b..9dc58402bc09 100644 --- a/include/net/netns/conntrack.h +++ b/include/net/netns/conntrack.h | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #define __NETNS_CONNTRACK_H | 2 | #define __NETNS_CONNTRACK_H |
| 3 | 3 | ||
| 4 | #include <linux/list.h> | 4 | #include <linux/list.h> |
| 5 | #include <linux/list_nulls.h> | ||
| 5 | #include <asm/atomic.h> | 6 | #include <asm/atomic.h> |
| 6 | 7 | ||
| 7 | struct ctl_table_header; | 8 | struct ctl_table_header; |
| @@ -10,9 +11,9 @@ struct nf_conntrack_ecache; | |||
| 10 | struct netns_ct { | 11 | struct netns_ct { |
| 11 | atomic_t count; | 12 | atomic_t count; |
| 12 | unsigned int expect_count; | 13 | unsigned int expect_count; |
| 13 | struct hlist_head *hash; | 14 | struct hlist_nulls_head *hash; |
| 14 | struct hlist_head *expect_hash; | 15 | struct hlist_head *expect_hash; |
| 15 | struct hlist_head unconfirmed; | 16 | struct hlist_nulls_head unconfirmed; |
| 16 | struct ip_conntrack_stat *stat; | 17 | struct ip_conntrack_stat *stat; |
| 17 | #ifdef CONFIG_NF_CONNTRACK_EVENTS | 18 | #ifdef CONFIG_NF_CONNTRACK_EVENTS |
| 18 | struct nf_conntrack_ecache *ecache; | 19 | struct nf_conntrack_ecache *ecache; |
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/scsi/fc/fc_fcoe.h b/include/scsi/fc/fc_fcoe.h index 57aaa8f0d613..ccb3dbe90463 100644 --- a/include/scsi/fc/fc_fcoe.h +++ b/include/scsi/fc/fc_fcoe.h | |||
| @@ -25,17 +25,6 @@ | |||
| 25 | */ | 25 | */ |
| 26 | 26 | ||
| 27 | /* | 27 | /* |
| 28 | * The FCoE ethertype eventually goes in net/if_ether.h. | ||
| 29 | */ | ||
| 30 | #ifndef ETH_P_FCOE | ||
| 31 | #define ETH_P_FCOE 0x8906 /* FCOE ether type */ | ||
| 32 | #endif | ||
| 33 | |||
| 34 | #ifndef ETH_P_8021Q | ||
| 35 | #define ETH_P_8021Q 0x8100 | ||
| 36 | #endif | ||
| 37 | |||
| 38 | /* | ||
| 39 | * FC_FCOE_OUI hasn't been standardized yet. XXX TBD. | 28 | * FC_FCOE_OUI hasn't been standardized yet. XXX TBD. |
| 40 | */ | 29 | */ |
| 41 | #ifndef FC_FCOE_OUI | 30 | #ifndef FC_FCOE_OUI |
diff --git a/include/scsi/fc/fc_fs.h b/include/scsi/fc/fc_fs.h index 3e4801d2bdbb..1b7af3a64c7c 100644 --- a/include/scsi/fc/fc_fs.h +++ b/include/scsi/fc/fc_fs.h | |||
| @@ -337,4 +337,9 @@ enum fc_pf_rjt_reason { | |||
| 337 | FC_RJT_VENDOR = 0xff, /* vendor specific reject */ | 337 | FC_RJT_VENDOR = 0xff, /* vendor specific reject */ |
| 338 | }; | 338 | }; |
| 339 | 339 | ||
| 340 | /* default timeout values */ | ||
| 341 | |||
| 342 | #define FC_DEF_E_D_TOV 2000UL | ||
| 343 | #define FC_DEF_R_A_TOV 10000UL | ||
| 344 | |||
| 340 | #endif /* _FC_FS_H_ */ | 345 | #endif /* _FC_FS_H_ */ |
diff --git a/include/scsi/fc_frame.h b/include/scsi/fc_frame.h index 04d34a71355f..59511057cee0 100644 --- a/include/scsi/fc_frame.h +++ b/include/scsi/fc_frame.h | |||
| @@ -54,8 +54,7 @@ | |||
| 54 | #define fr_eof(fp) (fr_cb(fp)->fr_eof) | 54 | #define fr_eof(fp) (fr_cb(fp)->fr_eof) |
| 55 | #define fr_flags(fp) (fr_cb(fp)->fr_flags) | 55 | #define fr_flags(fp) (fr_cb(fp)->fr_flags) |
| 56 | #define fr_max_payload(fp) (fr_cb(fp)->fr_max_payload) | 56 | #define fr_max_payload(fp) (fr_cb(fp)->fr_max_payload) |
| 57 | #define fr_cmd(fp) (fr_cb(fp)->fr_cmd) | 57 | #define fr_fsp(fp) (fr_cb(fp)->fr_fsp) |
| 58 | #define fr_dir(fp) (fr_cmd(fp)->sc_data_direction) | ||
| 59 | #define fr_crc(fp) (fr_cb(fp)->fr_crc) | 58 | #define fr_crc(fp) (fr_cb(fp)->fr_crc) |
| 60 | 59 | ||
| 61 | struct fc_frame { | 60 | struct fc_frame { |
| @@ -66,7 +65,7 @@ struct fcoe_rcv_info { | |||
| 66 | struct packet_type *ptype; | 65 | struct packet_type *ptype; |
| 67 | struct fc_lport *fr_dev; /* transport layer private pointer */ | 66 | struct fc_lport *fr_dev; /* transport layer private pointer */ |
| 68 | struct fc_seq *fr_seq; /* for use with exchange manager */ | 67 | struct fc_seq *fr_seq; /* for use with exchange manager */ |
| 69 | struct scsi_cmnd *fr_cmd; /* for use of scsi command */ | 68 | struct fc_fcp_pkt *fr_fsp; /* for the corresponding fcp I/O */ |
| 70 | u32 fr_crc; | 69 | u32 fr_crc; |
| 71 | u16 fr_max_payload; /* max FC payload */ | 70 | u16 fr_max_payload; /* max FC payload */ |
| 72 | enum fc_sof fr_sof; /* start of frame delimiter */ | 71 | enum fc_sof fr_sof; /* start of frame delimiter */ |
| @@ -218,20 +217,6 @@ static inline bool fc_frame_is_cmd(const struct fc_frame *fp) | |||
| 218 | return fc_frame_rctl(fp) == FC_RCTL_DD_UNSOL_CMD; | 217 | return fc_frame_rctl(fp) == FC_RCTL_DD_UNSOL_CMD; |
| 219 | } | 218 | } |
| 220 | 219 | ||
| 221 | static inline bool fc_frame_is_read(const struct fc_frame *fp) | ||
| 222 | { | ||
| 223 | if (fc_frame_is_cmd(fp) && fr_cmd(fp)) | ||
| 224 | return fr_dir(fp) == DMA_FROM_DEVICE; | ||
| 225 | return false; | ||
| 226 | } | ||
| 227 | |||
| 228 | static inline bool fc_frame_is_write(const struct fc_frame *fp) | ||
| 229 | { | ||
| 230 | if (fc_frame_is_cmd(fp) && fr_cmd(fp)) | ||
| 231 | return fr_dir(fp) == DMA_TO_DEVICE; | ||
| 232 | return false; | ||
| 233 | } | ||
| 234 | |||
| 235 | /* | 220 | /* |
| 236 | * Check for leaks. | 221 | * Check for leaks. |
| 237 | * Print the frame header of any currently allocated frame, assuming there | 222 | * Print the frame header of any currently allocated frame, assuming there |
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h index 9f2876397dda..a70eafaad084 100644 --- a/include/scsi/libfc.h +++ b/include/scsi/libfc.h | |||
| @@ -68,9 +68,6 @@ | |||
| 68 | /* | 68 | /* |
| 69 | * FC HBA status | 69 | * FC HBA status |
| 70 | */ | 70 | */ |
| 71 | #define FC_PAUSE (1 << 1) | ||
| 72 | #define FC_LINK_UP (1 << 0) | ||
| 73 | |||
| 74 | enum fc_lport_state { | 71 | enum fc_lport_state { |
| 75 | LPORT_ST_NONE = 0, | 72 | LPORT_ST_NONE = 0, |
| 76 | LPORT_ST_FLOGI, | 73 | LPORT_ST_FLOGI, |
| @@ -248,6 +245,7 @@ struct fc_fcp_pkt { | |||
| 248 | */ | 245 | */ |
| 249 | struct fcp_cmnd cdb_cmd; | 246 | struct fcp_cmnd cdb_cmd; |
| 250 | size_t xfer_len; | 247 | size_t xfer_len; |
| 248 | u16 xfer_ddp; /* this xfer is ddped */ | ||
| 251 | u32 xfer_contig_end; /* offset of end of contiguous xfer */ | 249 | u32 xfer_contig_end; /* offset of end of contiguous xfer */ |
| 252 | u16 max_payload; /* max payload size in bytes */ | 250 | u16 max_payload; /* max payload size in bytes */ |
| 253 | 251 | ||
| @@ -270,6 +268,15 @@ struct fc_fcp_pkt { | |||
| 270 | u8 recov_retry; /* count of recovery retries */ | 268 | u8 recov_retry; /* count of recovery retries */ |
| 271 | struct fc_seq *recov_seq; /* sequence for REC or SRR */ | 269 | struct fc_seq *recov_seq; /* sequence for REC or SRR */ |
| 272 | }; | 270 | }; |
| 271 | /* | ||
| 272 | * FC_FCP HELPER FUNCTIONS | ||
| 273 | *****************************/ | ||
| 274 | static inline bool fc_fcp_is_read(const struct fc_fcp_pkt *fsp) | ||
| 275 | { | ||
| 276 | if (fsp && fsp->cmd) | ||
| 277 | return fsp->cmd->sc_data_direction == DMA_FROM_DEVICE; | ||
| 278 | return false; | ||
| 279 | } | ||
| 273 | 280 | ||
| 274 | /* | 281 | /* |
| 275 | * Structure and function definitions for managing Fibre Channel Exchanges | 282 | * Structure and function definitions for managing Fibre Channel Exchanges |
| @@ -339,31 +346,17 @@ struct fc_exch { | |||
| 339 | 346 | ||
| 340 | struct libfc_function_template { | 347 | struct libfc_function_template { |
| 341 | 348 | ||
| 342 | /** | ||
| 343 | * Mandatory Fields | ||
| 344 | * | ||
| 345 | * These handlers must be implemented by the LLD. | ||
| 346 | */ | ||
| 347 | |||
| 348 | /* | 349 | /* |
| 349 | * Interface to send a FC frame | 350 | * Interface to send a FC frame |
| 350 | */ | ||
| 351 | int (*frame_send)(struct fc_lport *lp, struct fc_frame *fp); | ||
| 352 | |||
| 353 | /** | ||
| 354 | * Optional Fields | ||
| 355 | * | 351 | * |
| 356 | * The LLD may choose to implement any of the following handlers. | 352 | * STATUS: REQUIRED |
| 357 | * If LLD doesn't specify hander and leaves its pointer NULL then | ||
| 358 | * the default libfc function will be used for that handler. | ||
| 359 | */ | ||
| 360 | |||
| 361 | /** | ||
| 362 | * ELS/CT interfaces | ||
| 363 | */ | 353 | */ |
| 354 | int (*frame_send)(struct fc_lport *lp, struct fc_frame *fp); | ||
| 364 | 355 | ||
| 365 | /* | 356 | /* |
| 366 | * elsct_send - sends ELS/CT frame | 357 | * Interface to send ELS/CT frames |
| 358 | * | ||
| 359 | * STATUS: OPTIONAL | ||
| 367 | */ | 360 | */ |
| 368 | struct fc_seq *(*elsct_send)(struct fc_lport *lport, | 361 | struct fc_seq *(*elsct_send)(struct fc_lport *lport, |
| 369 | struct fc_rport *rport, | 362 | struct fc_rport *rport, |
| @@ -373,9 +366,6 @@ struct libfc_function_template { | |||
| 373 | struct fc_frame *fp, | 366 | struct fc_frame *fp, |
| 374 | void *arg), | 367 | void *arg), |
| 375 | void *arg, u32 timer_msec); | 368 | void *arg, u32 timer_msec); |
| 376 | /** | ||
| 377 | * Exhance Manager interfaces | ||
| 378 | */ | ||
| 379 | 369 | ||
| 380 | /* | 370 | /* |
| 381 | * Send the FC frame payload using a new exchange and sequence. | 371 | * Send the FC frame payload using a new exchange and sequence. |
| @@ -407,6 +397,8 @@ struct libfc_function_template { | |||
| 407 | * timer_msec argument is specified. The timer is canceled when | 397 | * timer_msec argument is specified. The timer is canceled when |
| 408 | * it fires or when the exchange is done. The exchange timeout handler | 398 | * it fires or when the exchange is done. The exchange timeout handler |
| 409 | * is registered by EM layer. | 399 | * is registered by EM layer. |
| 400 | * | ||
| 401 | * STATUS: OPTIONAL | ||
| 410 | */ | 402 | */ |
| 411 | struct fc_seq *(*exch_seq_send)(struct fc_lport *lp, | 403 | struct fc_seq *(*exch_seq_send)(struct fc_lport *lp, |
| 412 | struct fc_frame *fp, | 404 | struct fc_frame *fp, |
| @@ -418,14 +410,33 @@ struct libfc_function_template { | |||
| 418 | void *arg, unsigned int timer_msec); | 410 | void *arg, unsigned int timer_msec); |
| 419 | 411 | ||
| 420 | /* | 412 | /* |
| 421 | * send a frame using existing sequence and exchange. | 413 | * Sets up the DDP context for a given exchange id on the given |
| 414 | * scatterlist if LLD supports DDP for large receive. | ||
| 415 | * | ||
| 416 | * STATUS: OPTIONAL | ||
| 417 | */ | ||
| 418 | int (*ddp_setup)(struct fc_lport *lp, u16 xid, | ||
| 419 | struct scatterlist *sgl, unsigned int sgc); | ||
| 420 | /* | ||
| 421 | * Completes the DDP transfer and returns the length of data DDPed | ||
| 422 | * for the given exchange id. | ||
| 423 | * | ||
| 424 | * STATUS: OPTIONAL | ||
| 425 | */ | ||
| 426 | int (*ddp_done)(struct fc_lport *lp, u16 xid); | ||
| 427 | /* | ||
| 428 | * Send a frame using an existing sequence and exchange. | ||
| 429 | * | ||
| 430 | * STATUS: OPTIONAL | ||
| 422 | */ | 431 | */ |
| 423 | int (*seq_send)(struct fc_lport *lp, struct fc_seq *sp, | 432 | int (*seq_send)(struct fc_lport *lp, struct fc_seq *sp, |
| 424 | struct fc_frame *fp); | 433 | struct fc_frame *fp); |
| 425 | 434 | ||
| 426 | /* | 435 | /* |
| 427 | * Send ELS response using mainly infomation | 436 | * Send an ELS response using infomation from a previous |
| 428 | * in exchange and sequence in EM layer. | 437 | * exchange and sequence. |
| 438 | * | ||
| 439 | * STATUS: OPTIONAL | ||
| 429 | */ | 440 | */ |
| 430 | void (*seq_els_rsp_send)(struct fc_seq *sp, enum fc_els_cmd els_cmd, | 441 | void (*seq_els_rsp_send)(struct fc_seq *sp, enum fc_els_cmd els_cmd, |
| 431 | struct fc_seq_els_data *els_data); | 442 | struct fc_seq_els_data *els_data); |
| @@ -437,6 +448,8 @@ struct libfc_function_template { | |||
| 437 | * A timer_msec can be specified for abort timeout, if non-zero | 448 | * A timer_msec can be specified for abort timeout, if non-zero |
| 438 | * timer_msec value is specified then exchange resp handler | 449 | * timer_msec value is specified then exchange resp handler |
| 439 | * will be called with timeout error if no response to abort. | 450 | * will be called with timeout error if no response to abort. |
| 451 | * | ||
| 452 | * STATUS: OPTIONAL | ||
| 440 | */ | 453 | */ |
| 441 | int (*seq_exch_abort)(const struct fc_seq *req_sp, | 454 | int (*seq_exch_abort)(const struct fc_seq *req_sp, |
| 442 | unsigned int timer_msec); | 455 | unsigned int timer_msec); |
| @@ -444,6 +457,8 @@ struct libfc_function_template { | |||
| 444 | /* | 457 | /* |
| 445 | * Indicate that an exchange/sequence tuple is complete and the memory | 458 | * Indicate that an exchange/sequence tuple is complete and the memory |
| 446 | * allocated for the related objects may be freed. | 459 | * allocated for the related objects may be freed. |
| 460 | * | ||
| 461 | * STATUS: OPTIONAL | ||
| 447 | */ | 462 | */ |
| 448 | void (*exch_done)(struct fc_seq *sp); | 463 | void (*exch_done)(struct fc_seq *sp); |
| 449 | 464 | ||
| @@ -451,6 +466,8 @@ struct libfc_function_template { | |||
| 451 | * Assigns a EM and a free XID for an new exchange and then | 466 | * Assigns a EM and a free XID for an new exchange and then |
| 452 | * allocates a new exchange and sequence pair. | 467 | * allocates a new exchange and sequence pair. |
| 453 | * The fp can be used to determine free XID. | 468 | * The fp can be used to determine free XID. |
| 469 | * | ||
| 470 | * STATUS: OPTIONAL | ||
| 454 | */ | 471 | */ |
| 455 | struct fc_exch *(*exch_get)(struct fc_lport *lp, struct fc_frame *fp); | 472 | struct fc_exch *(*exch_get)(struct fc_lport *lp, struct fc_frame *fp); |
| 456 | 473 | ||
| @@ -458,12 +475,16 @@ struct libfc_function_template { | |||
| 458 | * Release previously assigned XID by exch_get API. | 475 | * Release previously assigned XID by exch_get API. |
| 459 | * The LLD may implement this if XID is assigned by LLD | 476 | * The LLD may implement this if XID is assigned by LLD |
| 460 | * in exch_get(). | 477 | * in exch_get(). |
| 478 | * | ||
| 479 | * STATUS: OPTIONAL | ||
| 461 | */ | 480 | */ |
| 462 | void (*exch_put)(struct fc_lport *lp, struct fc_exch_mgr *mp, | 481 | void (*exch_put)(struct fc_lport *lp, struct fc_exch_mgr *mp, |
| 463 | u16 ex_id); | 482 | u16 ex_id); |
| 464 | 483 | ||
| 465 | /* | 484 | /* |
| 466 | * Start a new sequence on the same exchange/sequence tuple. | 485 | * Start a new sequence on the same exchange/sequence tuple. |
| 486 | * | ||
| 487 | * STATUS: OPTIONAL | ||
| 467 | */ | 488 | */ |
| 468 | struct fc_seq *(*seq_start_next)(struct fc_seq *sp); | 489 | struct fc_seq *(*seq_start_next)(struct fc_seq *sp); |
| 469 | 490 | ||
| @@ -471,26 +492,38 @@ struct libfc_function_template { | |||
| 471 | * Reset an exchange manager, completing all sequences and exchanges. | 492 | * Reset an exchange manager, completing all sequences and exchanges. |
| 472 | * If s_id is non-zero, reset only exchanges originating from that FID. | 493 | * If s_id is non-zero, reset only exchanges originating from that FID. |
| 473 | * If d_id is non-zero, reset only exchanges sending to that FID. | 494 | * If d_id is non-zero, reset only exchanges sending to that FID. |
| 495 | * | ||
| 496 | * STATUS: OPTIONAL | ||
| 474 | */ | 497 | */ |
| 475 | void (*exch_mgr_reset)(struct fc_exch_mgr *, | 498 | void (*exch_mgr_reset)(struct fc_lport *, |
| 476 | u32 s_id, u32 d_id); | 499 | u32 s_id, u32 d_id); |
| 477 | 500 | ||
| 478 | void (*rport_flush_queue)(void); | 501 | /* |
| 479 | /** | 502 | * Flush the rport work queue. Generally used before shutdown. |
| 480 | * Local Port interfaces | 503 | * |
| 504 | * STATUS: OPTIONAL | ||
| 481 | */ | 505 | */ |
| 506 | void (*rport_flush_queue)(void); | ||
| 482 | 507 | ||
| 483 | /* | 508 | /* |
| 484 | * Receive a frame to a local port. | 509 | * Receive a frame for a local port. |
| 510 | * | ||
| 511 | * STATUS: OPTIONAL | ||
| 485 | */ | 512 | */ |
| 486 | void (*lport_recv)(struct fc_lport *lp, struct fc_seq *sp, | 513 | void (*lport_recv)(struct fc_lport *lp, struct fc_seq *sp, |
| 487 | struct fc_frame *fp); | 514 | struct fc_frame *fp); |
| 488 | 515 | ||
| 516 | /* | ||
| 517 | * Reset the local port. | ||
| 518 | * | ||
| 519 | * STATUS: OPTIONAL | ||
| 520 | */ | ||
| 489 | int (*lport_reset)(struct fc_lport *); | 521 | int (*lport_reset)(struct fc_lport *); |
| 490 | 522 | ||
| 491 | /** | 523 | /* |
| 492 | * Remote Port interfaces | 524 | * Create a remote port |
| 493 | */ | 525 | */ |
| 526 | struct fc_rport *(*rport_create)(struct fc_disc_port *); | ||
| 494 | 527 | ||
| 495 | /* | 528 | /* |
| 496 | * Initiates the RP state machine. It is called from the LP module. | 529 | * Initiates the RP state machine. It is called from the LP module. |
| @@ -500,26 +533,33 @@ struct libfc_function_template { | |||
| 500 | * - PLOGI | 533 | * - PLOGI |
| 501 | * - PRLI | 534 | * - PRLI |
| 502 | * - RTV | 535 | * - RTV |
| 536 | * | ||
| 537 | * STATUS: OPTIONAL | ||
| 503 | */ | 538 | */ |
| 504 | int (*rport_login)(struct fc_rport *rport); | 539 | int (*rport_login)(struct fc_rport *rport); |
| 505 | 540 | ||
| 506 | /* | 541 | /* |
| 507 | * Logoff, and remove the rport from the transport if | 542 | * Logoff, and remove the rport from the transport if |
| 508 | * it had been added. This will send a LOGO to the target. | 543 | * it had been added. This will send a LOGO to the target. |
| 544 | * | ||
| 545 | * STATUS: OPTIONAL | ||
| 509 | */ | 546 | */ |
| 510 | int (*rport_logoff)(struct fc_rport *rport); | 547 | int (*rport_logoff)(struct fc_rport *rport); |
| 511 | 548 | ||
| 512 | /* | 549 | /* |
| 513 | * Recieve a request from a remote port. | 550 | * Recieve a request from a remote port. |
| 551 | * | ||
| 552 | * STATUS: OPTIONAL | ||
| 514 | */ | 553 | */ |
| 515 | void (*rport_recv_req)(struct fc_seq *, struct fc_frame *, | 554 | void (*rport_recv_req)(struct fc_seq *, struct fc_frame *, |
| 516 | struct fc_rport *); | 555 | struct fc_rport *); |
| 517 | 556 | ||
| 518 | struct fc_rport *(*rport_lookup)(const struct fc_lport *, u32); | 557 | /* |
| 519 | 558 | * lookup an rport by it's port ID. | |
| 520 | /** | 559 | * |
| 521 | * FCP interfaces | 560 | * STATUS: OPTIONAL |
| 522 | */ | 561 | */ |
| 562 | struct fc_rport *(*rport_lookup)(const struct fc_lport *, u32); | ||
| 523 | 563 | ||
| 524 | /* | 564 | /* |
| 525 | * Send a fcp cmd from fsp pkt. | 565 | * Send a fcp cmd from fsp pkt. |
| @@ -527,30 +567,38 @@ struct libfc_function_template { | |||
| 527 | * | 567 | * |
| 528 | * The resp handler is called when FCP_RSP received. | 568 | * The resp handler is called when FCP_RSP received. |
| 529 | * | 569 | * |
| 570 | * STATUS: OPTIONAL | ||
| 530 | */ | 571 | */ |
| 531 | int (*fcp_cmd_send)(struct fc_lport *lp, struct fc_fcp_pkt *fsp, | 572 | int (*fcp_cmd_send)(struct fc_lport *lp, struct fc_fcp_pkt *fsp, |
| 532 | void (*resp)(struct fc_seq *, struct fc_frame *fp, | 573 | void (*resp)(struct fc_seq *, struct fc_frame *fp, |
| 533 | void *arg)); | 574 | void *arg)); |
| 534 | 575 | ||
| 535 | /* | 576 | /* |
| 536 | * Used at least durring linkdown and reset | 577 | * Cleanup the FCP layer, used durring link down and reset |
| 578 | * | ||
| 579 | * STATUS: OPTIONAL | ||
| 537 | */ | 580 | */ |
| 538 | void (*fcp_cleanup)(struct fc_lport *lp); | 581 | void (*fcp_cleanup)(struct fc_lport *lp); |
| 539 | 582 | ||
| 540 | /* | 583 | /* |
| 541 | * Abort all I/O on a local port | 584 | * Abort all I/O on a local port |
| 585 | * | ||
| 586 | * STATUS: OPTIONAL | ||
| 542 | */ | 587 | */ |
| 543 | void (*fcp_abort_io)(struct fc_lport *lp); | 588 | void (*fcp_abort_io)(struct fc_lport *lp); |
| 544 | 589 | ||
| 545 | /** | 590 | /* |
| 546 | * Discovery interfaces | 591 | * Receive a request for the discovery layer. |
| 592 | * | ||
| 593 | * STATUS: OPTIONAL | ||
| 547 | */ | 594 | */ |
| 548 | |||
| 549 | void (*disc_recv_req)(struct fc_seq *, | 595 | void (*disc_recv_req)(struct fc_seq *, |
| 550 | struct fc_frame *, struct fc_lport *); | 596 | struct fc_frame *, struct fc_lport *); |
| 551 | 597 | ||
| 552 | /* | 598 | /* |
| 553 | * Start discovery for a local port. | 599 | * Start discovery for a local port. |
| 600 | * | ||
| 601 | * STATUS: OPTIONAL | ||
| 554 | */ | 602 | */ |
| 555 | void (*disc_start)(void (*disc_callback)(struct fc_lport *, | 603 | void (*disc_start)(void (*disc_callback)(struct fc_lport *, |
| 556 | enum fc_disc_event), | 604 | enum fc_disc_event), |
| @@ -559,6 +607,8 @@ struct libfc_function_template { | |||
| 559 | /* | 607 | /* |
| 560 | * Stop discovery for a given lport. This will remove | 608 | * Stop discovery for a given lport. This will remove |
| 561 | * all discovered rports | 609 | * all discovered rports |
| 610 | * | ||
| 611 | * STATUS: OPTIONAL | ||
| 562 | */ | 612 | */ |
| 563 | void (*disc_stop) (struct fc_lport *); | 613 | void (*disc_stop) (struct fc_lport *); |
| 564 | 614 | ||
| @@ -566,6 +616,8 @@ struct libfc_function_template { | |||
| 566 | * Stop discovery for a given lport. This will block | 616 | * Stop discovery for a given lport. This will block |
| 567 | * until all discovered rports are deleted from the | 617 | * until all discovered rports are deleted from the |
| 568 | * FC transport class | 618 | * FC transport class |
| 619 | * | ||
| 620 | * STATUS: OPTIONAL | ||
| 569 | */ | 621 | */ |
| 570 | void (*disc_stop_final) (struct fc_lport *); | 622 | void (*disc_stop_final) (struct fc_lport *); |
| 571 | }; | 623 | }; |
| @@ -603,7 +655,8 @@ struct fc_lport { | |||
| 603 | 655 | ||
| 604 | /* Operational Information */ | 656 | /* Operational Information */ |
| 605 | struct libfc_function_template tt; | 657 | struct libfc_function_template tt; |
| 606 | u16 link_status; | 658 | u8 link_up; |
| 659 | u8 qfull; | ||
| 607 | enum fc_lport_state state; | 660 | enum fc_lport_state state; |
| 608 | unsigned long boot_time; | 661 | unsigned long boot_time; |
| 609 | 662 | ||
| @@ -626,6 +679,7 @@ struct fc_lport { | |||
| 626 | u16 link_speed; | 679 | u16 link_speed; |
| 627 | u16 link_supported_speeds; | 680 | u16 link_supported_speeds; |
| 628 | u16 lro_xid; /* max xid for fcoe lro */ | 681 | u16 lro_xid; /* max xid for fcoe lro */ |
| 682 | unsigned int lso_max; /* max large send size */ | ||
| 629 | struct fc_ns_fts fcts; /* FC-4 type masks */ | 683 | struct fc_ns_fts fcts; /* FC-4 type masks */ |
| 630 | struct fc_els_rnid_gen rnid_gen; /* RNID information */ | 684 | struct fc_els_rnid_gen rnid_gen; /* RNID information */ |
| 631 | 685 | ||
| @@ -637,7 +691,7 @@ struct fc_lport { | |||
| 637 | struct delayed_work disc_work; | 691 | struct delayed_work disc_work; |
| 638 | }; | 692 | }; |
| 639 | 693 | ||
| 640 | /** | 694 | /* |
| 641 | * FC_LPORT HELPER FUNCTIONS | 695 | * FC_LPORT HELPER FUNCTIONS |
| 642 | *****************************/ | 696 | *****************************/ |
| 643 | static inline void *lport_priv(const struct fc_lport *lp) | 697 | static inline void *lport_priv(const struct fc_lport *lp) |
| @@ -669,7 +723,7 @@ static inline void fc_lport_state_enter(struct fc_lport *lp, | |||
| 669 | } | 723 | } |
| 670 | 724 | ||
| 671 | 725 | ||
| 672 | /** | 726 | /* |
| 673 | * LOCAL PORT LAYER | 727 | * LOCAL PORT LAYER |
| 674 | *****************************/ | 728 | *****************************/ |
| 675 | int fc_lport_init(struct fc_lport *lp); | 729 | int fc_lport_init(struct fc_lport *lp); |
| @@ -704,12 +758,6 @@ void fc_linkup(struct fc_lport *); | |||
| 704 | void fc_linkdown(struct fc_lport *); | 758 | void fc_linkdown(struct fc_lport *); |
| 705 | 759 | ||
| 706 | /* | 760 | /* |
| 707 | * Pause and unpause traffic. | ||
| 708 | */ | ||
| 709 | void fc_pause(struct fc_lport *); | ||
| 710 | void fc_unpause(struct fc_lport *); | ||
| 711 | |||
| 712 | /* | ||
| 713 | * Configure the local port. | 761 | * Configure the local port. |
| 714 | */ | 762 | */ |
| 715 | int fc_lport_config(struct fc_lport *); | 763 | int fc_lport_config(struct fc_lport *); |
| @@ -725,19 +773,19 @@ int fc_lport_reset(struct fc_lport *); | |||
| 725 | int fc_set_mfs(struct fc_lport *lp, u32 mfs); | 773 | int fc_set_mfs(struct fc_lport *lp, u32 mfs); |
| 726 | 774 | ||
| 727 | 775 | ||
| 728 | /** | 776 | /* |
| 729 | * REMOTE PORT LAYER | 777 | * REMOTE PORT LAYER |
| 730 | *****************************/ | 778 | *****************************/ |
| 731 | int fc_rport_init(struct fc_lport *lp); | 779 | int fc_rport_init(struct fc_lport *lp); |
| 732 | void fc_rport_terminate_io(struct fc_rport *rp); | 780 | void fc_rport_terminate_io(struct fc_rport *rp); |
| 733 | 781 | ||
| 734 | /** | 782 | /* |
| 735 | * DISCOVERY LAYER | 783 | * DISCOVERY LAYER |
| 736 | *****************************/ | 784 | *****************************/ |
| 737 | int fc_disc_init(struct fc_lport *lp); | 785 | int fc_disc_init(struct fc_lport *lp); |
| 738 | 786 | ||
| 739 | 787 | ||
| 740 | /** | 788 | /* |
| 741 | * SCSI LAYER | 789 | * SCSI LAYER |
| 742 | *****************************/ | 790 | *****************************/ |
| 743 | /* | 791 | /* |
| @@ -798,7 +846,12 @@ int fc_change_queue_type(struct scsi_device *sdev, int tag_type); | |||
| 798 | */ | 846 | */ |
| 799 | void fc_fcp_destroy(struct fc_lport *); | 847 | void fc_fcp_destroy(struct fc_lport *); |
| 800 | 848 | ||
| 801 | /** | 849 | /* |
| 850 | * Set up direct-data placement for this I/O request | ||
| 851 | */ | ||
| 852 | void fc_fcp_ddp_setup(struct fc_fcp_pkt *fsp, u16 xid); | ||
| 853 | |||
| 854 | /* | ||
| 802 | * ELS/CT interface | 855 | * ELS/CT interface |
| 803 | *****************************/ | 856 | *****************************/ |
| 804 | /* | 857 | /* |
| @@ -807,7 +860,7 @@ void fc_fcp_destroy(struct fc_lport *); | |||
| 807 | int fc_elsct_init(struct fc_lport *lp); | 860 | int fc_elsct_init(struct fc_lport *lp); |
| 808 | 861 | ||
| 809 | 862 | ||
| 810 | /** | 863 | /* |
| 811 | * EXCHANGE MANAGER LAYER | 864 | * EXCHANGE MANAGER LAYER |
| 812 | *****************************/ | 865 | *****************************/ |
| 813 | /* | 866 | /* |
| @@ -916,7 +969,7 @@ struct fc_seq *fc_seq_start_next(struct fc_seq *sp); | |||
| 916 | * If s_id is non-zero, reset only exchanges originating from that FID. | 969 | * If s_id is non-zero, reset only exchanges originating from that FID. |
| 917 | * If d_id is non-zero, reset only exchanges sending to that FID. | 970 | * If d_id is non-zero, reset only exchanges sending to that FID. |
| 918 | */ | 971 | */ |
| 919 | void fc_exch_mgr_reset(struct fc_exch_mgr *, u32 s_id, u32 d_id); | 972 | void fc_exch_mgr_reset(struct fc_lport *, u32 s_id, u32 d_id); |
| 920 | 973 | ||
| 921 | /* | 974 | /* |
| 922 | * Functions for fc_functions_template | 975 | * Functions for fc_functions_template |
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h index 89fdbb9a6a1b..c41f7d0c6efc 100644 --- a/include/scsi/libfcoe.h +++ b/include/scsi/libfcoe.h | |||
| @@ -46,6 +46,7 @@ struct fcoe_softc { | |||
| 46 | struct net_device *phys_dev; /* device with ethtool_ops */ | 46 | struct net_device *phys_dev; /* device with ethtool_ops */ |
| 47 | struct packet_type fcoe_packet_type; | 47 | struct packet_type fcoe_packet_type; |
| 48 | struct sk_buff_head fcoe_pending_queue; | 48 | struct sk_buff_head fcoe_pending_queue; |
| 49 | u8 fcoe_pending_queue_active; | ||
| 49 | 50 | ||
| 50 | u8 dest_addr[ETH_ALEN]; | 51 | u8 dest_addr[ETH_ALEN]; |
| 51 | u8 ctl_src_addr[ETH_ALEN]; | 52 | u8 ctl_src_addr[ETH_ALEN]; |
| @@ -58,16 +59,10 @@ struct fcoe_softc { | |||
| 58 | u8 address_mode; | 59 | u8 address_mode; |
| 59 | }; | 60 | }; |
| 60 | 61 | ||
| 61 | static inline struct fcoe_softc *fcoe_softc( | ||
| 62 | const struct fc_lport *lp) | ||
| 63 | { | ||
| 64 | return (struct fcoe_softc *)lport_priv(lp); | ||
| 65 | } | ||
| 66 | |||
| 67 | static inline struct net_device *fcoe_netdev( | 62 | static inline struct net_device *fcoe_netdev( |
| 68 | const struct fc_lport *lp) | 63 | const struct fc_lport *lp) |
| 69 | { | 64 | { |
| 70 | return fcoe_softc(lp)->real_dev; | 65 | return ((struct fcoe_softc *)lport_priv(lp))->real_dev; |
| 71 | } | 66 | } |
| 72 | 67 | ||
| 73 | static inline struct fcoe_hdr *skb_fcoe_header(const struct sk_buff *skb) | 68 | static inline struct fcoe_hdr *skb_fcoe_header(const struct sk_buff *skb) |
| @@ -129,24 +124,6 @@ static inline u16 skb_fc_rxid(const struct sk_buff *skb) | |||
| 129 | return be16_to_cpu(skb_fc_header(skb)->fh_rx_id); | 124 | return be16_to_cpu(skb_fc_header(skb)->fh_rx_id); |
| 130 | } | 125 | } |
| 131 | 126 | ||
| 132 | /* FIXME - DMA_BIDIRECTIONAL ? */ | ||
| 133 | #define skb_cb(skb) ((struct fcoe_rcv_info *)&((skb)->cb[0])) | ||
| 134 | #define skb_cmd(skb) (skb_cb(skb)->fr_cmd) | ||
| 135 | #define skb_dir(skb) (skb_cmd(skb)->sc_data_direction) | ||
| 136 | static inline bool skb_fc_is_read(const struct sk_buff *skb) | ||
| 137 | { | ||
| 138 | if (skb_fc_is_cmd(skb) && skb_cmd(skb)) | ||
| 139 | return skb_dir(skb) == DMA_FROM_DEVICE; | ||
| 140 | return false; | ||
| 141 | } | ||
| 142 | |||
| 143 | static inline bool skb_fc_is_write(const struct sk_buff *skb) | ||
| 144 | { | ||
| 145 | if (skb_fc_is_cmd(skb) && skb_cmd(skb)) | ||
| 146 | return skb_dir(skb) == DMA_TO_DEVICE; | ||
| 147 | return false; | ||
| 148 | } | ||
| 149 | |||
| 150 | /* libfcoe funcs */ | 127 | /* libfcoe funcs */ |
| 151 | int fcoe_reset(struct Scsi_Host *shost); | 128 | int fcoe_reset(struct Scsi_Host *shost); |
| 152 | u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN], | 129 | u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN], |
diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h index 7360e1916e75..7ffaed2f94dd 100644 --- a/include/scsi/libiscsi.h +++ b/include/scsi/libiscsi.h | |||
| @@ -45,18 +45,10 @@ struct iscsi_session; | |||
| 45 | struct iscsi_nopin; | 45 | struct iscsi_nopin; |
| 46 | struct device; | 46 | struct device; |
| 47 | 47 | ||
| 48 | /* #define DEBUG_SCSI */ | ||
| 49 | #ifdef DEBUG_SCSI | ||
| 50 | #define debug_scsi(fmt...) printk(KERN_INFO "iscsi: " fmt) | ||
| 51 | #else | ||
| 52 | #define debug_scsi(fmt...) | ||
| 53 | #endif | ||
| 54 | |||
| 55 | #define ISCSI_DEF_XMIT_CMDS_MAX 128 /* must be power of 2 */ | 48 | #define ISCSI_DEF_XMIT_CMDS_MAX 128 /* must be power of 2 */ |
| 56 | #define ISCSI_MGMT_CMDS_MAX 15 | 49 | #define ISCSI_MGMT_CMDS_MAX 15 |
| 57 | 50 | ||
| 58 | #define ISCSI_DEF_CMD_PER_LUN 32 | 51 | #define ISCSI_DEF_CMD_PER_LUN 32 |
| 59 | #define ISCSI_MAX_CMD_PER_LUN 128 | ||
| 60 | 52 | ||
| 61 | /* Task Mgmt states */ | 53 | /* Task Mgmt states */ |
| 62 | enum { | 54 | enum { |
| @@ -326,6 +318,9 @@ struct iscsi_host { | |||
| 326 | spinlock_t lock; | 318 | spinlock_t lock; |
| 327 | int num_sessions; | 319 | int num_sessions; |
| 328 | int state; | 320 | int state; |
| 321 | |||
| 322 | struct workqueue_struct *workq; | ||
| 323 | char workq_name[20]; | ||
| 329 | }; | 324 | }; |
| 330 | 325 | ||
| 331 | /* | 326 | /* |
| @@ -351,7 +346,8 @@ extern int iscsi_host_get_param(struct Scsi_Host *shost, | |||
| 351 | enum iscsi_host_param param, char *buf); | 346 | enum iscsi_host_param param, char *buf); |
| 352 | extern int iscsi_host_add(struct Scsi_Host *shost, struct device *pdev); | 347 | extern int iscsi_host_add(struct Scsi_Host *shost, struct device *pdev); |
| 353 | extern struct Scsi_Host *iscsi_host_alloc(struct scsi_host_template *sht, | 348 | extern struct Scsi_Host *iscsi_host_alloc(struct scsi_host_template *sht, |
| 354 | int dd_data_size, uint16_t qdepth); | 349 | int dd_data_size, |
| 350 | bool xmit_can_sleep); | ||
| 355 | extern void iscsi_host_remove(struct Scsi_Host *shost); | 351 | extern void iscsi_host_remove(struct Scsi_Host *shost); |
| 356 | extern void iscsi_host_free(struct Scsi_Host *shost); | 352 | extern void iscsi_host_free(struct Scsi_Host *shost); |
| 357 | 353 | ||
| @@ -382,11 +378,12 @@ extern void iscsi_conn_stop(struct iscsi_cls_conn *, int); | |||
| 382 | extern int iscsi_conn_bind(struct iscsi_cls_session *, struct iscsi_cls_conn *, | 378 | extern int iscsi_conn_bind(struct iscsi_cls_session *, struct iscsi_cls_conn *, |
| 383 | int); | 379 | int); |
| 384 | extern void iscsi_conn_failure(struct iscsi_conn *conn, enum iscsi_err err); | 380 | extern void iscsi_conn_failure(struct iscsi_conn *conn, enum iscsi_err err); |
| 385 | extern void iscsi_session_failure(struct iscsi_cls_session *cls_session, | 381 | extern void iscsi_session_failure(struct iscsi_session *session, |
| 386 | enum iscsi_err err); | 382 | enum iscsi_err err); |
| 387 | extern int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, | 383 | extern int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, |
| 388 | enum iscsi_param param, char *buf); | 384 | enum iscsi_param param, char *buf); |
| 389 | extern void iscsi_suspend_tx(struct iscsi_conn *conn); | 385 | extern void iscsi_suspend_tx(struct iscsi_conn *conn); |
| 386 | extern void iscsi_conn_queue_work(struct iscsi_conn *conn); | ||
| 390 | 387 | ||
| 391 | #define iscsi_conn_printk(prefix, _c, fmt, a...) \ | 388 | #define iscsi_conn_printk(prefix, _c, fmt, a...) \ |
| 392 | iscsi_cls_conn_printk(prefix, ((struct iscsi_conn *)_c)->cls_conn, \ | 389 | iscsi_cls_conn_printk(prefix, ((struct iscsi_conn *)_c)->cls_conn, \ |
diff --git a/include/scsi/osd_attributes.h b/include/scsi/osd_attributes.h new file mode 100644 index 000000000000..f888a6fda073 --- /dev/null +++ b/include/scsi/osd_attributes.h | |||
| @@ -0,0 +1,327 @@ | |||
| 1 | #ifndef __OSD_ATTRIBUTES_H__ | ||
| 2 | #define __OSD_ATTRIBUTES_H__ | ||
| 3 | |||
| 4 | #include "osd_protocol.h" | ||
| 5 | |||
| 6 | /* | ||
| 7 | * Contains types and constants that define attribute pages and attribute | ||
| 8 | * numbers and their data types. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #define ATTR_SET(pg, id, l, ptr) \ | ||
| 12 | { .attr_page = pg, .attr_id = id, .len = l, .val_ptr = ptr } | ||
| 13 | |||
| 14 | #define ATTR_DEF(pg, id, l) ATTR_SET(pg, id, l, NULL) | ||
| 15 | |||
| 16 | /* osd-r10 4.7.3 Attributes pages */ | ||
| 17 | enum { | ||
| 18 | OSD_APAGE_OBJECT_FIRST = 0x0, | ||
| 19 | OSD_APAGE_OBJECT_DIRECTORY = 0, | ||
| 20 | OSD_APAGE_OBJECT_INFORMATION = 1, | ||
| 21 | OSD_APAGE_OBJECT_QUOTAS = 2, | ||
| 22 | OSD_APAGE_OBJECT_TIMESTAMP = 3, | ||
| 23 | OSD_APAGE_OBJECT_COLLECTIONS = 4, | ||
| 24 | OSD_APAGE_OBJECT_SECURITY = 5, | ||
| 25 | OSD_APAGE_OBJECT_LAST = 0x2fffffff, | ||
| 26 | |||
| 27 | OSD_APAGE_PARTITION_FIRST = 0x30000000, | ||
| 28 | OSD_APAGE_PARTITION_DIRECTORY = OSD_APAGE_PARTITION_FIRST + 0, | ||
| 29 | OSD_APAGE_PARTITION_INFORMATION = OSD_APAGE_PARTITION_FIRST + 1, | ||
| 30 | OSD_APAGE_PARTITION_QUOTAS = OSD_APAGE_PARTITION_FIRST + 2, | ||
| 31 | OSD_APAGE_PARTITION_TIMESTAMP = OSD_APAGE_PARTITION_FIRST + 3, | ||
| 32 | OSD_APAGE_PARTITION_SECURITY = OSD_APAGE_PARTITION_FIRST + 5, | ||
| 33 | OSD_APAGE_PARTITION_LAST = 0x5FFFFFFF, | ||
| 34 | |||
| 35 | OSD_APAGE_COLLECTION_FIRST = 0x60000000, | ||
| 36 | OSD_APAGE_COLLECTION_DIRECTORY = OSD_APAGE_COLLECTION_FIRST + 0, | ||
| 37 | OSD_APAGE_COLLECTION_INFORMATION = OSD_APAGE_COLLECTION_FIRST + 1, | ||
| 38 | OSD_APAGE_COLLECTION_TIMESTAMP = OSD_APAGE_COLLECTION_FIRST + 3, | ||
| 39 | OSD_APAGE_COLLECTION_SECURITY = OSD_APAGE_COLLECTION_FIRST + 5, | ||
| 40 | OSD_APAGE_COLLECTION_LAST = 0x8FFFFFFF, | ||
| 41 | |||
| 42 | OSD_APAGE_ROOT_FIRST = 0x90000000, | ||
| 43 | OSD_APAGE_ROOT_DIRECTORY = OSD_APAGE_ROOT_FIRST + 0, | ||
| 44 | OSD_APAGE_ROOT_INFORMATION = OSD_APAGE_ROOT_FIRST + 1, | ||
| 45 | OSD_APAGE_ROOT_QUOTAS = OSD_APAGE_ROOT_FIRST + 2, | ||
| 46 | OSD_APAGE_ROOT_TIMESTAMP = OSD_APAGE_ROOT_FIRST + 3, | ||
| 47 | OSD_APAGE_ROOT_SECURITY = OSD_APAGE_ROOT_FIRST + 5, | ||
| 48 | OSD_APAGE_ROOT_LAST = 0xBFFFFFFF, | ||
| 49 | |||
| 50 | OSD_APAGE_RESERVED_TYPE_FIRST = 0xC0000000, | ||
| 51 | OSD_APAGE_RESERVED_TYPE_LAST = 0xEFFFFFFF, | ||
| 52 | |||
| 53 | OSD_APAGE_COMMON_FIRST = 0xF0000000, | ||
| 54 | OSD_APAGE_COMMON_LAST = 0xFFFFFFFE, | ||
| 55 | |||
| 56 | OSD_APAGE_REQUEST_ALL = 0xFFFFFFFF, | ||
| 57 | }; | ||
| 58 | |||
| 59 | /* subcategories of attr pages within each range above */ | ||
| 60 | enum { | ||
| 61 | OSD_APAGE_STD_FIRST = 0x0, | ||
| 62 | OSD_APAGE_STD_DIRECTORY = 0, | ||
| 63 | OSD_APAGE_STD_INFORMATION = 1, | ||
| 64 | OSD_APAGE_STD_QUOTAS = 2, | ||
| 65 | OSD_APAGE_STD_TIMESTAMP = 3, | ||
| 66 | OSD_APAGE_STD_COLLECTIONS = 4, | ||
| 67 | OSD_APAGE_STD_POLICY_SECURITY = 5, | ||
| 68 | OSD_APAGE_STD_LAST = 0x0000007F, | ||
| 69 | |||
| 70 | OSD_APAGE_RESERVED_FIRST = 0x00000080, | ||
| 71 | OSD_APAGE_RESERVED_LAST = 0x00007FFF, | ||
| 72 | |||
| 73 | OSD_APAGE_OTHER_STD_FIRST = 0x00008000, | ||
| 74 | OSD_APAGE_OTHER_STD_LAST = 0x0000EFFF, | ||
| 75 | |||
| 76 | OSD_APAGE_PUBLIC_FIRST = 0x0000F000, | ||
| 77 | OSD_APAGE_PUBLIC_LAST = 0x0000FFFF, | ||
| 78 | |||
| 79 | OSD_APAGE_APP_DEFINED_FIRST = 0x00010000, | ||
| 80 | OSD_APAGE_APP_DEFINED_LAST = 0x1FFFFFFF, | ||
| 81 | |||
| 82 | OSD_APAGE_VENDOR_SPECIFIC_FIRST = 0x20000000, | ||
| 83 | OSD_APAGE_VENDOR_SPECIFIC_LAST = 0x2FFFFFFF, | ||
| 84 | }; | ||
| 85 | |||
| 86 | enum { | ||
| 87 | OSD_ATTR_PAGE_IDENTIFICATION = 0, /* in all pages 40 bytes */ | ||
| 88 | }; | ||
| 89 | |||
| 90 | struct page_identification { | ||
| 91 | u8 vendor_identification[8]; | ||
| 92 | u8 page_identification[32]; | ||
| 93 | } __packed; | ||
| 94 | |||
| 95 | struct osd_attr_page_header { | ||
| 96 | __be32 page_number; | ||
| 97 | __be32 page_length; | ||
| 98 | } __packed; | ||
| 99 | |||
| 100 | /* 7.1.2.8 Root Information attributes page (OSD_APAGE_ROOT_INFORMATION) */ | ||
| 101 | enum { | ||
| 102 | OSD_ATTR_RI_OSD_SYSTEM_ID = 0x3, /* 20 */ | ||
| 103 | OSD_ATTR_RI_VENDOR_IDENTIFICATION = 0x4, /* 8 */ | ||
| 104 | OSD_ATTR_RI_PRODUCT_IDENTIFICATION = 0x5, /* 16 */ | ||
| 105 | OSD_ATTR_RI_PRODUCT_MODEL = 0x6, /* 32 */ | ||
| 106 | OSD_ATTR_RI_PRODUCT_REVISION_LEVEL = 0x7, /* 4 */ | ||
| 107 | OSD_ATTR_RI_PRODUCT_SERIAL_NUMBER = 0x8, /* variable */ | ||
| 108 | OSD_ATTR_RI_OSD_NAME = 0x9, /* variable */ | ||
| 109 | OSD_ATTR_RI_TOTAL_CAPACITY = 0x80, /* 8 */ | ||
| 110 | OSD_ATTR_RI_USED_CAPACITY = 0x81, /* 8 */ | ||
| 111 | OSD_ATTR_RI_NUMBER_OF_PARTITIONS = 0xC0, /* 8 */ | ||
| 112 | OSD_ATTR_RI_CLOCK = 0x100, /* 6 */ | ||
| 113 | }; | ||
| 114 | /* Root_Information_attributes_page does not have a get_page structure */ | ||
| 115 | |||
| 116 | /* 7.1.2.9 Partition Information attributes page | ||
| 117 | * (OSD_APAGE_PARTITION_INFORMATION) | ||
| 118 | */ | ||
| 119 | enum { | ||
| 120 | OSD_ATTR_PI_PARTITION_ID = 0x1, /* 8 */ | ||
| 121 | OSD_ATTR_PI_USERNAME = 0x9, /* variable */ | ||
| 122 | OSD_ATTR_PI_USED_CAPACITY = 0x81, /* 8 */ | ||
| 123 | OSD_ATTR_PI_NUMBER_OF_OBJECTS = 0xC1, /* 8 */ | ||
| 124 | }; | ||
| 125 | /* Partition Information attributes page does not have a get_page structure */ | ||
| 126 | |||
| 127 | /* 7.1.2.10 Collection Information attributes page | ||
| 128 | * (OSD_APAGE_COLLECTION_INFORMATION) | ||
| 129 | */ | ||
| 130 | enum { | ||
| 131 | OSD_ATTR_CI_PARTITION_ID = 0x1, /* 8 */ | ||
| 132 | OSD_ATTR_CI_COLLECTION_OBJECT_ID = 0x2, /* 8 */ | ||
| 133 | OSD_ATTR_CI_USERNAME = 0x9, /* variable */ | ||
| 134 | OSD_ATTR_CI_USED_CAPACITY = 0x81, /* 8 */ | ||
| 135 | }; | ||
| 136 | /* Collection Information attributes page does not have a get_page structure */ | ||
| 137 | |||
| 138 | /* 7.1.2.11 User Object Information attributes page | ||
| 139 | * (OSD_APAGE_OBJECT_INFORMATION) | ||
| 140 | */ | ||
| 141 | enum { | ||
| 142 | OSD_ATTR_OI_PARTITION_ID = 0x1, /* 8 */ | ||
| 143 | OSD_ATTR_OI_OBJECT_ID = 0x2, /* 8 */ | ||
| 144 | OSD_ATTR_OI_USERNAME = 0x9, /* variable */ | ||
| 145 | OSD_ATTR_OI_USED_CAPACITY = 0x81, /* 8 */ | ||
| 146 | OSD_ATTR_OI_LOGICAL_LENGTH = 0x82, /* 8 */ | ||
| 147 | }; | ||
| 148 | /* Object Information attributes page does not have a get_page structure */ | ||
| 149 | |||
| 150 | /* 7.1.2.12 Root Quotas attributes page (OSD_APAGE_ROOT_QUOTAS) */ | ||
| 151 | enum { | ||
| 152 | OSD_ATTR_RQ_DEFAULT_MAXIMUM_USER_OBJECT_LENGTH = 0x1, /* 8 */ | ||
| 153 | OSD_ATTR_RQ_PARTITION_CAPACITY_QUOTA = 0x10001, /* 8 */ | ||
| 154 | OSD_ATTR_RQ_PARTITION_OBJECT_COUNT = 0x10002, /* 8 */ | ||
| 155 | OSD_ATTR_RQ_PARTITION_COLLECTIONS_PER_USER_OBJECT = 0x10081, /* 4 */ | ||
| 156 | OSD_ATTR_RQ_PARTITION_COUNT = 0x20002, /* 8 */ | ||
| 157 | }; | ||
| 158 | |||
| 159 | struct Root_Quotas_attributes_page { | ||
| 160 | struct osd_attr_page_header hdr; /* id=R+2, size=0x24 */ | ||
| 161 | __be64 default_maximum_user_object_length; | ||
| 162 | __be64 partition_capacity_quota; | ||
| 163 | __be64 partition_object_count; | ||
| 164 | __be64 partition_collections_per_user_object; | ||
| 165 | __be64 partition_count; | ||
| 166 | } __packed; | ||
| 167 | |||
| 168 | /* 7.1.2.13 Partition Quotas attributes page (OSD_APAGE_PARTITION_QUOTAS)*/ | ||
| 169 | enum { | ||
| 170 | OSD_ATTR_PQ_DEFAULT_MAXIMUM_USER_OBJECT_LENGTH = 0x1, /* 8 */ | ||
| 171 | OSD_ATTR_PQ_CAPACITY_QUOTA = 0x10001, /* 8 */ | ||
| 172 | OSD_ATTR_PQ_OBJECT_COUNT = 0x10002, /* 8 */ | ||
| 173 | OSD_ATTR_PQ_COLLECTIONS_PER_USER_OBJECT = 0x10081, /* 4 */ | ||
| 174 | }; | ||
| 175 | |||
| 176 | struct Partition_Quotas_attributes_page { | ||
| 177 | struct osd_attr_page_header hdr; /* id=P+2, size=0x1C */ | ||
| 178 | __be64 default_maximum_user_object_length; | ||
| 179 | __be64 capacity_quota; | ||
| 180 | __be64 object_count; | ||
| 181 | __be64 collections_per_user_object; | ||
| 182 | } __packed; | ||
| 183 | |||
| 184 | /* 7.1.2.14 User Object Quotas attributes page (OSD_APAGE_OBJECT_QUOTAS) */ | ||
| 185 | enum { | ||
| 186 | OSD_ATTR_OQ_MAXIMUM_LENGTH = 0x1, /* 8 */ | ||
| 187 | }; | ||
| 188 | |||
| 189 | struct Object_Quotas_attributes_page { | ||
| 190 | struct osd_attr_page_header hdr; /* id=U+2, size=0x8 */ | ||
| 191 | __be64 maximum_length; | ||
| 192 | } __packed; | ||
| 193 | |||
| 194 | /* 7.1.2.15 Root Timestamps attributes page (OSD_APAGE_ROOT_TIMESTAMP) */ | ||
| 195 | enum { | ||
| 196 | OSD_ATTR_RT_ATTRIBUTES_ACCESSED_TIME = 0x2, /* 6 */ | ||
| 197 | OSD_ATTR_RT_ATTRIBUTES_MODIFIED_TIME = 0x3, /* 6 */ | ||
| 198 | OSD_ATTR_RT_TIMESTAMP_BYPASS = 0xFFFFFFFE, /* 1 */ | ||
| 199 | }; | ||
| 200 | |||
| 201 | struct root_timestamps_attributes_page { | ||
| 202 | struct osd_attr_page_header hdr; /* id=R+3, size=0xD */ | ||
| 203 | struct osd_timestamp attributes_accessed_time; | ||
| 204 | struct osd_timestamp attributes_modified_time; | ||
| 205 | u8 timestamp_bypass; | ||
| 206 | } __packed; | ||
| 207 | |||
| 208 | /* 7.1.2.16 Partition Timestamps attributes page | ||
| 209 | * (OSD_APAGE_PARTITION_TIMESTAMP) | ||
| 210 | */ | ||
| 211 | enum { | ||
| 212 | OSD_ATTR_PT_CREATED_TIME = 0x1, /* 6 */ | ||
| 213 | OSD_ATTR_PT_ATTRIBUTES_ACCESSED_TIME = 0x2, /* 6 */ | ||
| 214 | OSD_ATTR_PT_ATTRIBUTES_MODIFIED_TIME = 0x3, /* 6 */ | ||
| 215 | OSD_ATTR_PT_DATA_ACCESSED_TIME = 0x4, /* 6 */ | ||
| 216 | OSD_ATTR_PT_DATA_MODIFIED_TIME = 0x5, /* 6 */ | ||
| 217 | OSD_ATTR_PT_TIMESTAMP_BYPASS = 0xFFFFFFFE, /* 1 */ | ||
| 218 | }; | ||
| 219 | |||
| 220 | struct partition_timestamps_attributes_page { | ||
| 221 | struct osd_attr_page_header hdr; /* id=P+3, size=0x1F */ | ||
| 222 | struct osd_timestamp created_time; | ||
| 223 | struct osd_timestamp attributes_accessed_time; | ||
| 224 | struct osd_timestamp attributes_modified_time; | ||
| 225 | struct osd_timestamp data_accessed_time; | ||
| 226 | struct osd_timestamp data_modified_time; | ||
| 227 | u8 timestamp_bypass; | ||
| 228 | } __packed; | ||
| 229 | |||
| 230 | /* 7.1.2.17/18 Collection/Object Timestamps attributes page | ||
| 231 | * (OSD_APAGE_COLLECTION_TIMESTAMP/OSD_APAGE_OBJECT_TIMESTAMP) | ||
| 232 | */ | ||
| 233 | enum { | ||
| 234 | OSD_ATTR_OT_CREATED_TIME = 0x1, /* 6 */ | ||
| 235 | OSD_ATTR_OT_ATTRIBUTES_ACCESSED_TIME = 0x2, /* 6 */ | ||
| 236 | OSD_ATTR_OT_ATTRIBUTES_MODIFIED_TIME = 0x3, /* 6 */ | ||
| 237 | OSD_ATTR_OT_DATA_ACCESSED_TIME = 0x4, /* 6 */ | ||
| 238 | OSD_ATTR_OT_DATA_MODIFIED_TIME = 0x5, /* 6 */ | ||
| 239 | }; | ||
| 240 | |||
| 241 | /* same for collection */ | ||
| 242 | struct object_timestamps_attributes_page { | ||
| 243 | struct osd_attr_page_header hdr; /* id=C+3/3, size=0x1E */ | ||
| 244 | struct osd_timestamp created_time; | ||
| 245 | struct osd_timestamp attributes_accessed_time; | ||
| 246 | struct osd_timestamp attributes_modified_time; | ||
| 247 | struct osd_timestamp data_accessed_time; | ||
| 248 | struct osd_timestamp data_modified_time; | ||
| 249 | } __packed; | ||
| 250 | |||
| 251 | /* 7.1.2.19 Collections attributes page */ | ||
| 252 | /* TBD */ | ||
| 253 | |||
| 254 | /* 7.1.2.20 Root Policy/Security attributes page (OSD_APAGE_ROOT_SECURITY) */ | ||
| 255 | enum { | ||
| 256 | OSD_ATTR_RS_DEFAULT_SECURITY_METHOD = 0x1, /* 1 */ | ||
| 257 | OSD_ATTR_RS_OLDEST_VALID_NONCE_LIMIT = 0x2, /* 6 */ | ||
| 258 | OSD_ATTR_RS_NEWEST_VALID_NONCE_LIMIT = 0x3, /* 6 */ | ||
| 259 | OSD_ATTR_RS_PARTITION_DEFAULT_SECURITY_METHOD = 0x6, /* 1 */ | ||
| 260 | OSD_ATTR_RS_SUPPORTED_SECURITY_METHODS = 0x7, /* 2 */ | ||
| 261 | OSD_ATTR_RS_ADJUSTABLE_CLOCK = 0x9, /* 6 */ | ||
| 262 | OSD_ATTR_RS_MASTER_KEY_IDENTIFIER = 0x7FFD, /* 0 or 7 */ | ||
| 263 | OSD_ATTR_RS_ROOT_KEY_IDENTIFIER = 0x7FFE, /* 0 or 7 */ | ||
| 264 | OSD_ATTR_RS_SUPPORTED_INTEGRITY_ALGORITHM_0 = 0x80000000,/* 1,(x16)*/ | ||
| 265 | OSD_ATTR_RS_SUPPORTED_DH_GROUP_0 = 0x80000010,/* 1,(x16)*/ | ||
| 266 | }; | ||
| 267 | |||
| 268 | struct root_security_attributes_page { | ||
| 269 | struct osd_attr_page_header hdr; /* id=R+5, size=0x3F */ | ||
| 270 | u8 default_security_method; | ||
| 271 | u8 partition_default_security_method; | ||
| 272 | __be16 supported_security_methods; | ||
| 273 | u8 mki_valid_rki_valid; | ||
| 274 | struct osd_timestamp oldest_valid_nonce_limit; | ||
| 275 | struct osd_timestamp newest_valid_nonce_limit; | ||
| 276 | struct osd_timestamp adjustable_clock; | ||
| 277 | u8 master_key_identifier[32-25]; | ||
| 278 | u8 root_key_identifier[39-32]; | ||
| 279 | u8 supported_integrity_algorithm[16]; | ||
| 280 | u8 supported_dh_group[16]; | ||
| 281 | } __packed; | ||
| 282 | |||
| 283 | /* 7.1.2.21 Partition Policy/Security attributes page | ||
| 284 | * (OSD_APAGE_PARTITION_SECURITY) | ||
| 285 | */ | ||
| 286 | enum { | ||
| 287 | OSD_ATTR_PS_DEFAULT_SECURITY_METHOD = 0x1, /* 1 */ | ||
| 288 | OSD_ATTR_PS_OLDEST_VALID_NONCE = 0x2, /* 6 */ | ||
| 289 | OSD_ATTR_PS_NEWEST_VALID_NONCE = 0x3, /* 6 */ | ||
| 290 | OSD_ATTR_PS_REQUEST_NONCE_LIST_DEPTH = 0x4, /* 2 */ | ||
| 291 | OSD_ATTR_PS_FROZEN_WORKING_KEY_BIT_MASK = 0x5, /* 2 */ | ||
| 292 | OSD_ATTR_PS_PARTITION_KEY_IDENTIFIER = 0x7FFF, /* 0 or 7 */ | ||
| 293 | OSD_ATTR_PS_WORKING_KEY_IDENTIFIER_FIRST = 0x8000, /* 0 or 7 */ | ||
| 294 | OSD_ATTR_PS_WORKING_KEY_IDENTIFIER_LAST = 0x800F, /* 0 or 7 */ | ||
| 295 | OSD_ATTR_PS_POLICY_ACCESS_TAG = 0x40000001, /* 4 */ | ||
| 296 | OSD_ATTR_PS_USER_OBJECT_POLICY_ACCESS_TAG = 0x40000002, /* 4 */ | ||
| 297 | }; | ||
| 298 | |||
| 299 | struct partition_security_attributes_page { | ||
| 300 | struct osd_attr_page_header hdr; /* id=p+5, size=0x8f */ | ||
| 301 | u8 reserved[3]; | ||
| 302 | u8 default_security_method; | ||
| 303 | struct osd_timestamp oldest_valid_nonce; | ||
| 304 | struct osd_timestamp newest_valid_nonce; | ||
| 305 | __be16 request_nonce_list_depth; | ||
| 306 | __be16 frozen_working_key_bit_mask; | ||
| 307 | __be32 policy_access_tag; | ||
| 308 | __be32 user_object_policy_access_tag; | ||
| 309 | u8 pki_valid; | ||
| 310 | __be16 wki_00_0f_vld; | ||
| 311 | struct osd_key_identifier partition_key_identifier; | ||
| 312 | struct osd_key_identifier working_key_identifiers[16]; | ||
| 313 | } __packed; | ||
| 314 | |||
| 315 | /* 7.1.2.22/23 Collection/Object Policy-Security attributes page | ||
| 316 | * (OSD_APAGE_COLLECTION_SECURITY/OSD_APAGE_OBJECT_SECURITY) | ||
| 317 | */ | ||
| 318 | enum { | ||
| 319 | OSD_ATTR_OS_POLICY_ACCESS_TAG = 0x40000001, /* 4 */ | ||
| 320 | }; | ||
| 321 | |||
| 322 | struct object_security_attributes_page { | ||
| 323 | struct osd_attr_page_header hdr; /* id=C+5/5, size=4 */ | ||
| 324 | __be32 policy_access_tag; | ||
| 325 | } __packed; | ||
| 326 | |||
| 327 | #endif /*ndef __OSD_ATTRIBUTES_H__*/ | ||
diff --git a/include/scsi/osd_initiator.h b/include/scsi/osd_initiator.h new file mode 100644 index 000000000000..b24d9616eb46 --- /dev/null +++ b/include/scsi/osd_initiator.h | |||
| @@ -0,0 +1,433 @@ | |||
| 1 | /* | ||
| 2 | * osd_initiator.h - OSD initiator API definition | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | ||
| 5 | * | ||
| 6 | * Authors: | ||
| 7 | * Boaz Harrosh <bharrosh@panasas.com> | ||
| 8 | * Benny Halevy <bhalevy@panasas.com> | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License version 2 | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | #ifndef __OSD_INITIATOR_H__ | ||
| 15 | #define __OSD_INITIATOR_H__ | ||
| 16 | |||
| 17 | #include "osd_protocol.h" | ||
| 18 | #include "osd_types.h" | ||
| 19 | |||
| 20 | #include <linux/blkdev.h> | ||
| 21 | |||
| 22 | /* Note: "NI" in comments below means "Not Implemented yet" */ | ||
| 23 | |||
| 24 | /* Configure of code: | ||
| 25 | * #undef if you *don't* want OSD v1 support in runtime. | ||
| 26 | * If #defined the initiator will dynamically configure to encode OSD v1 | ||
| 27 | * CDB's if the target is detected to be OSD v1 only. | ||
| 28 | * OSD v2 only commands, options, and attributes will be ignored if target | ||
| 29 | * is v1 only. | ||
| 30 | * If #defined will result in bigger/slower code (OK Slower maybe not) | ||
| 31 | * Q: Should this be CONFIG_SCSI_OSD_VER1_SUPPORT and set from Kconfig? | ||
| 32 | */ | ||
| 33 | #define OSD_VER1_SUPPORT y | ||
| 34 | |||
| 35 | enum osd_std_version { | ||
| 36 | OSD_VER_NONE = 0, | ||
| 37 | OSD_VER1 = 1, | ||
| 38 | OSD_VER2 = 2, | ||
| 39 | }; | ||
| 40 | |||
| 41 | /* | ||
| 42 | * Object-based Storage Device. | ||
| 43 | * This object represents an OSD device. | ||
| 44 | * It is not a full linux device in any way. It is only | ||
| 45 | * a place to hang resources associated with a Linux | ||
| 46 | * request Q and some default properties. | ||
| 47 | */ | ||
| 48 | struct osd_dev { | ||
| 49 | struct scsi_device *scsi_device; | ||
| 50 | unsigned def_timeout; | ||
| 51 | |||
| 52 | #ifdef OSD_VER1_SUPPORT | ||
| 53 | enum osd_std_version version; | ||
| 54 | #endif | ||
| 55 | }; | ||
| 56 | |||
| 57 | /* Retrieve/return osd_dev(s) for use by Kernel clients */ | ||
| 58 | struct osd_dev *osduld_path_lookup(const char *dev_name); /*Use IS_ERR/ERR_PTR*/ | ||
| 59 | void osduld_put_device(struct osd_dev *od); | ||
| 60 | |||
| 61 | /* Add/remove test ioctls from external modules */ | ||
| 62 | typedef int (do_test_fn)(struct osd_dev *od, unsigned cmd, unsigned long arg); | ||
| 63 | int osduld_register_test(unsigned ioctl, do_test_fn *do_test); | ||
| 64 | void osduld_unregister_test(unsigned ioctl); | ||
| 65 | |||
| 66 | /* These are called by uld at probe time */ | ||
| 67 | void osd_dev_init(struct osd_dev *od, struct scsi_device *scsi_device); | ||
| 68 | void osd_dev_fini(struct osd_dev *od); | ||
| 69 | |||
| 70 | /* some hi level device operations */ | ||
| 71 | int osd_auto_detect_ver(struct osd_dev *od, void *caps); /* GFP_KERNEL */ | ||
| 72 | |||
| 73 | /* we might want to use function vector in the future */ | ||
| 74 | static inline void osd_dev_set_ver(struct osd_dev *od, enum osd_std_version v) | ||
| 75 | { | ||
| 76 | #ifdef OSD_VER1_SUPPORT | ||
| 77 | od->version = v; | ||
| 78 | #endif | ||
| 79 | } | ||
| 80 | |||
| 81 | struct osd_request; | ||
| 82 | typedef void (osd_req_done_fn)(struct osd_request *or, void *private); | ||
| 83 | |||
| 84 | struct osd_request { | ||
| 85 | struct osd_cdb cdb; | ||
| 86 | struct osd_data_out_integrity_info out_data_integ; | ||
| 87 | struct osd_data_in_integrity_info in_data_integ; | ||
| 88 | |||
| 89 | struct osd_dev *osd_dev; | ||
| 90 | struct request *request; | ||
| 91 | |||
| 92 | struct _osd_req_data_segment { | ||
| 93 | void *buff; | ||
| 94 | unsigned alloc_size; /* 0 here means: don't call kfree */ | ||
| 95 | unsigned total_bytes; | ||
| 96 | } set_attr, enc_get_attr, get_attr; | ||
| 97 | |||
| 98 | struct _osd_io_info { | ||
| 99 | struct bio *bio; | ||
| 100 | u64 total_bytes; | ||
| 101 | struct request *req; | ||
| 102 | struct _osd_req_data_segment *last_seg; | ||
| 103 | u8 *pad_buff; | ||
| 104 | } out, in; | ||
| 105 | |||
| 106 | gfp_t alloc_flags; | ||
| 107 | unsigned timeout; | ||
| 108 | unsigned retries; | ||
| 109 | u8 sense[OSD_MAX_SENSE_LEN]; | ||
| 110 | enum osd_attributes_mode attributes_mode; | ||
| 111 | |||
| 112 | osd_req_done_fn *async_done; | ||
| 113 | void *async_private; | ||
| 114 | int async_error; | ||
| 115 | }; | ||
| 116 | |||
| 117 | /* OSD Version control */ | ||
| 118 | static inline bool osd_req_is_ver1(struct osd_request *or) | ||
| 119 | { | ||
| 120 | #ifdef OSD_VER1_SUPPORT | ||
| 121 | return or->osd_dev->version == OSD_VER1; | ||
| 122 | #else | ||
| 123 | return false; | ||
| 124 | #endif | ||
| 125 | } | ||
| 126 | |||
| 127 | /* | ||
| 128 | * How to use the osd library: | ||
| 129 | * | ||
| 130 | * osd_start_request | ||
| 131 | * Allocates a request. | ||
| 132 | * | ||
| 133 | * osd_req_* | ||
| 134 | * Call one of, to encode the desired operation. | ||
| 135 | * | ||
| 136 | * osd_add_{get,set}_attr | ||
| 137 | * Optionally add attributes to the CDB, list or page mode. | ||
| 138 | * | ||
| 139 | * osd_finalize_request | ||
| 140 | * Computes final data out/in offsets and signs the request, | ||
| 141 | * making it ready for execution. | ||
| 142 | * | ||
| 143 | * osd_execute_request | ||
| 144 | * May be called to execute it through the block layer. Other wise submit | ||
| 145 | * the associated block request in some other way. | ||
| 146 | * | ||
| 147 | * After execution: | ||
| 148 | * osd_req_decode_sense | ||
| 149 | * Decodes sense information to verify execution results. | ||
| 150 | * | ||
| 151 | * osd_req_decode_get_attr | ||
| 152 | * Retrieve osd_add_get_attr_list() values if used. | ||
| 153 | * | ||
| 154 | * osd_end_request | ||
| 155 | * Must be called to deallocate the request. | ||
| 156 | */ | ||
| 157 | |||
| 158 | /** | ||
| 159 | * osd_start_request - Allocate and initialize an osd_request | ||
| 160 | * | ||
| 161 | * @osd_dev: OSD device that holds the scsi-device and default values | ||
| 162 | * that the request is associated with. | ||
| 163 | * @gfp: The allocation flags to use for request allocation, and all | ||
| 164 | * subsequent allocations. This will be stored at | ||
| 165 | * osd_request->alloc_flags, can be changed by user later | ||
| 166 | * | ||
| 167 | * Allocate osd_request and initialize all members to the | ||
| 168 | * default/initial state. | ||
| 169 | */ | ||
| 170 | struct osd_request *osd_start_request(struct osd_dev *od, gfp_t gfp); | ||
| 171 | |||
| 172 | enum osd_req_options { | ||
| 173 | OSD_REQ_FUA = 0x08, /* Force Unit Access */ | ||
| 174 | OSD_REQ_DPO = 0x10, /* Disable Page Out */ | ||
| 175 | |||
| 176 | OSD_REQ_BYPASS_TIMESTAMPS = 0x80, | ||
| 177 | }; | ||
| 178 | |||
| 179 | /** | ||
| 180 | * osd_finalize_request - Sign request and prepare request for execution | ||
| 181 | * | ||
| 182 | * @or: osd_request to prepare | ||
| 183 | * @options: combination of osd_req_options bit flags or 0. | ||
| 184 | * @cap: A Pointer to an OSD_CAP_LEN bytes buffer that is received from | ||
| 185 | * The security manager as capabilities for this cdb. | ||
| 186 | * @cap_key: The cryptographic key used to sign the cdb/data. Can be null | ||
| 187 | * if NOSEC is used. | ||
| 188 | * | ||
| 189 | * The actual request and bios are only allocated here, so are the get_attr | ||
| 190 | * buffers that will receive the returned attributes. Copy's @cap to cdb. | ||
| 191 | * Sign the cdb/data with @cap_key. | ||
| 192 | */ | ||
| 193 | int osd_finalize_request(struct osd_request *or, | ||
| 194 | u8 options, const void *cap, const u8 *cap_key); | ||
| 195 | |||
| 196 | /** | ||
| 197 | * osd_execute_request - Execute the request synchronously through block-layer | ||
| 198 | * | ||
| 199 | * @or: osd_request to Executed | ||
| 200 | * | ||
| 201 | * Calls blk_execute_rq to q the command and waits for completion. | ||
| 202 | */ | ||
| 203 | int osd_execute_request(struct osd_request *or); | ||
| 204 | |||
| 205 | /** | ||
| 206 | * osd_execute_request_async - Execute the request without waitting. | ||
| 207 | * | ||
| 208 | * @or: - osd_request to Executed | ||
| 209 | * @done: (Optional) - Called at end of execution | ||
| 210 | * @private: - Will be passed to @done function | ||
| 211 | * | ||
| 212 | * Calls blk_execute_rq_nowait to queue the command. When execution is done | ||
| 213 | * optionally calls @done with @private as parameter. @or->async_error will | ||
| 214 | * have the return code | ||
| 215 | */ | ||
| 216 | int osd_execute_request_async(struct osd_request *or, | ||
| 217 | osd_req_done_fn *done, void *private); | ||
| 218 | |||
| 219 | /** | ||
| 220 | * osd_req_decode_sense_full - Decode sense information after execution. | ||
| 221 | * | ||
| 222 | * @or: - osd_request to examine | ||
| 223 | * @osi - Recievs a more detailed error report information (optional). | ||
| 224 | * @silent - Do not print to dmsg (Even if enabled) | ||
| 225 | * @bad_obj_list - Some commands act on multiple objects. Failed objects will | ||
| 226 | * be recieved here (optional) | ||
| 227 | * @max_obj - Size of @bad_obj_list. | ||
| 228 | * @bad_attr_list - List of failing attributes (optional) | ||
| 229 | * @max_attr - Size of @bad_attr_list. | ||
| 230 | * | ||
| 231 | * After execution, sense + return code can be analyzed using this function. The | ||
| 232 | * return code is the final disposition on the error. So it is possible that a | ||
| 233 | * CHECK_CONDITION was returned from target but this will return NO_ERROR, for | ||
| 234 | * example on recovered errors. All parameters are optional if caller does | ||
| 235 | * not need any returned information. | ||
| 236 | * Note: This function will also dump the error to dmsg according to settings | ||
| 237 | * of the SCSI_OSD_DPRINT_SENSE Kconfig value. Set @silent if you know the | ||
| 238 | * command would routinely fail, to not spam the dmsg file. | ||
| 239 | */ | ||
| 240 | struct osd_sense_info { | ||
| 241 | int key; /* one of enum scsi_sense_keys */ | ||
| 242 | int additional_code ; /* enum osd_additional_sense_codes */ | ||
| 243 | union { /* Sense specific information */ | ||
| 244 | u16 sense_info; | ||
| 245 | u16 cdb_field_offset; /* scsi_invalid_field_in_cdb */ | ||
| 246 | }; | ||
| 247 | union { /* Command specific information */ | ||
| 248 | u64 command_info; | ||
| 249 | }; | ||
| 250 | |||
| 251 | u32 not_initiated_command_functions; /* osd_command_functions_bits */ | ||
| 252 | u32 completed_command_functions; /* osd_command_functions_bits */ | ||
| 253 | struct osd_obj_id obj; | ||
| 254 | struct osd_attr attr; | ||
| 255 | }; | ||
| 256 | |||
| 257 | int osd_req_decode_sense_full(struct osd_request *or, | ||
| 258 | struct osd_sense_info *osi, bool silent, | ||
| 259 | struct osd_obj_id *bad_obj_list, int max_obj, | ||
| 260 | struct osd_attr *bad_attr_list, int max_attr); | ||
| 261 | |||
| 262 | static inline int osd_req_decode_sense(struct osd_request *or, | ||
| 263 | struct osd_sense_info *osi) | ||
| 264 | { | ||
| 265 | return osd_req_decode_sense_full(or, osi, false, NULL, 0, NULL, 0); | ||
| 266 | } | ||
| 267 | |||
| 268 | /** | ||
| 269 | * osd_end_request - return osd_request to free store | ||
| 270 | * | ||
| 271 | * @or: osd_request to free | ||
| 272 | * | ||
| 273 | * Deallocate all osd_request resources (struct req's, BIOs, buffers, etc.) | ||
| 274 | */ | ||
| 275 | void osd_end_request(struct osd_request *or); | ||
| 276 | |||
| 277 | /* | ||
| 278 | * CDB Encoding | ||
| 279 | * | ||
| 280 | * Note: call only one of the following methods. | ||
| 281 | */ | ||
| 282 | |||
| 283 | /* | ||
| 284 | * Device commands | ||
| 285 | */ | ||
| 286 | void osd_req_set_master_seed_xchg(struct osd_request *or, ...);/* NI */ | ||
| 287 | void osd_req_set_master_key(struct osd_request *or, ...);/* NI */ | ||
| 288 | |||
| 289 | void osd_req_format(struct osd_request *or, u64 tot_capacity); | ||
| 290 | |||
| 291 | /* list all partitions | ||
| 292 | * @list header must be initialized to zero on first run. | ||
| 293 | * | ||
| 294 | * Call osd_is_obj_list_done() to find if we got the complete list. | ||
| 295 | */ | ||
| 296 | int osd_req_list_dev_partitions(struct osd_request *or, | ||
| 297 | osd_id initial_id, struct osd_obj_id_list *list, unsigned nelem); | ||
| 298 | |||
| 299 | void osd_req_flush_obsd(struct osd_request *or, | ||
| 300 | enum osd_options_flush_scope_values); | ||
| 301 | |||
| 302 | void osd_req_perform_scsi_command(struct osd_request *or, | ||
| 303 | const u8 *cdb, ...);/* NI */ | ||
| 304 | void osd_req_task_management(struct osd_request *or, ...);/* NI */ | ||
| 305 | |||
| 306 | /* | ||
| 307 | * Partition commands | ||
| 308 | */ | ||
| 309 | void osd_req_create_partition(struct osd_request *or, osd_id partition); | ||
| 310 | void osd_req_remove_partition(struct osd_request *or, osd_id partition); | ||
| 311 | |||
| 312 | void osd_req_set_partition_key(struct osd_request *or, | ||
| 313 | osd_id partition, u8 new_key_id[OSD_CRYPTO_KEYID_SIZE], | ||
| 314 | u8 seed[OSD_CRYPTO_SEED_SIZE]);/* NI */ | ||
| 315 | |||
| 316 | /* list all collections in the partition | ||
| 317 | * @list header must be init to zero on first run. | ||
| 318 | * | ||
| 319 | * Call osd_is_obj_list_done() to find if we got the complete list. | ||
| 320 | */ | ||
| 321 | int osd_req_list_partition_collections(struct osd_request *or, | ||
| 322 | osd_id partition, osd_id initial_id, struct osd_obj_id_list *list, | ||
| 323 | unsigned nelem); | ||
| 324 | |||
| 325 | /* list all objects in the partition | ||
| 326 | * @list header must be init to zero on first run. | ||
| 327 | * | ||
| 328 | * Call osd_is_obj_list_done() to find if we got the complete list. | ||
| 329 | */ | ||
| 330 | int osd_req_list_partition_objects(struct osd_request *or, | ||
| 331 | osd_id partition, osd_id initial_id, struct osd_obj_id_list *list, | ||
| 332 | unsigned nelem); | ||
| 333 | |||
| 334 | void osd_req_flush_partition(struct osd_request *or, | ||
| 335 | osd_id partition, enum osd_options_flush_scope_values); | ||
| 336 | |||
| 337 | /* | ||
| 338 | * Collection commands | ||
| 339 | */ | ||
| 340 | void osd_req_create_collection(struct osd_request *or, | ||
| 341 | const struct osd_obj_id *);/* NI */ | ||
| 342 | void osd_req_remove_collection(struct osd_request *or, | ||
| 343 | const struct osd_obj_id *);/* NI */ | ||
| 344 | |||
| 345 | /* list all objects in the collection */ | ||
| 346 | int osd_req_list_collection_objects(struct osd_request *or, | ||
| 347 | const struct osd_obj_id *, osd_id initial_id, | ||
| 348 | struct osd_obj_id_list *list, unsigned nelem); | ||
| 349 | |||
| 350 | /* V2 only filtered list of objects in the collection */ | ||
| 351 | void osd_req_query(struct osd_request *or, ...);/* NI */ | ||
| 352 | |||
| 353 | void osd_req_flush_collection(struct osd_request *or, | ||
| 354 | const struct osd_obj_id *, enum osd_options_flush_scope_values); | ||
| 355 | |||
| 356 | void osd_req_get_member_attrs(struct osd_request *or, ...);/* V2-only NI */ | ||
| 357 | void osd_req_set_member_attrs(struct osd_request *or, ...);/* V2-only NI */ | ||
| 358 | |||
| 359 | /* | ||
| 360 | * Object commands | ||
| 361 | */ | ||
| 362 | void osd_req_create_object(struct osd_request *or, struct osd_obj_id *); | ||
| 363 | void osd_req_remove_object(struct osd_request *or, struct osd_obj_id *); | ||
| 364 | |||
| 365 | void osd_req_write(struct osd_request *or, | ||
| 366 | const struct osd_obj_id *, struct bio *data_out, u64 offset); | ||
| 367 | void osd_req_append(struct osd_request *or, | ||
| 368 | const struct osd_obj_id *, struct bio *data_out);/* NI */ | ||
| 369 | void osd_req_create_write(struct osd_request *or, | ||
| 370 | const struct osd_obj_id *, struct bio *data_out, u64 offset);/* NI */ | ||
| 371 | void osd_req_clear(struct osd_request *or, | ||
| 372 | const struct osd_obj_id *, u64 offset, u64 len);/* NI */ | ||
| 373 | void osd_req_punch(struct osd_request *or, | ||
| 374 | const struct osd_obj_id *, u64 offset, u64 len);/* V2-only NI */ | ||
| 375 | |||
| 376 | void osd_req_flush_object(struct osd_request *or, | ||
| 377 | const struct osd_obj_id *, enum osd_options_flush_scope_values, | ||
| 378 | /*V2*/ u64 offset, /*V2*/ u64 len); | ||
| 379 | |||
| 380 | void osd_req_read(struct osd_request *or, | ||
| 381 | const struct osd_obj_id *, struct bio *data_in, u64 offset); | ||
| 382 | |||
| 383 | /* | ||
| 384 | * Root/Partition/Collection/Object Attributes commands | ||
| 385 | */ | ||
| 386 | |||
| 387 | /* get before set */ | ||
| 388 | void osd_req_get_attributes(struct osd_request *or, const struct osd_obj_id *); | ||
| 389 | |||
| 390 | /* set before get */ | ||
| 391 | void osd_req_set_attributes(struct osd_request *or, const struct osd_obj_id *); | ||
| 392 | |||
| 393 | /* | ||
| 394 | * Attributes appended to most commands | ||
| 395 | */ | ||
| 396 | |||
| 397 | /* Attributes List mode (or V2 CDB) */ | ||
| 398 | /* | ||
| 399 | * TODO: In ver2 if at finalize time only one attr was set and no gets, | ||
| 400 | * then the Attributes CDB mode is used automatically to save IO. | ||
| 401 | */ | ||
| 402 | |||
| 403 | /* set a list of attributes. */ | ||
| 404 | int osd_req_add_set_attr_list(struct osd_request *or, | ||
| 405 | const struct osd_attr *, unsigned nelem); | ||
| 406 | |||
| 407 | /* get a list of attributes */ | ||
| 408 | int osd_req_add_get_attr_list(struct osd_request *or, | ||
| 409 | const struct osd_attr *, unsigned nelem); | ||
| 410 | |||
| 411 | /* | ||
| 412 | * Attributes list decoding | ||
| 413 | * Must be called after osd_request.request was executed | ||
| 414 | * It is called in a loop to decode the returned get_attr | ||
| 415 | * (see osd_add_get_attr) | ||
| 416 | */ | ||
| 417 | int osd_req_decode_get_attr_list(struct osd_request *or, | ||
| 418 | struct osd_attr *, int *nelem, void **iterator); | ||
| 419 | |||
| 420 | /* Attributes Page mode */ | ||
| 421 | |||
| 422 | /* | ||
| 423 | * Read an attribute page and optionally set one attribute | ||
| 424 | * | ||
| 425 | * Retrieves the attribute page directly to a user buffer. | ||
| 426 | * @attr_page_data shall stay valid until end of execution. | ||
| 427 | * See osd_attributes.h for common page structures | ||
| 428 | */ | ||
| 429 | int osd_req_add_get_attr_page(struct osd_request *or, | ||
| 430 | u32 page_id, void *attr_page_data, unsigned max_page_len, | ||
| 431 | const struct osd_attr *set_one); | ||
| 432 | |||
| 433 | #endif /* __OSD_LIB_H__ */ | ||
diff --git a/include/scsi/osd_protocol.h b/include/scsi/osd_protocol.h new file mode 100644 index 000000000000..cd3cbf764650 --- /dev/null +++ b/include/scsi/osd_protocol.h | |||
| @@ -0,0 +1,579 @@ | |||
| 1 | /* | ||
| 2 | * osd_protocol.h - OSD T10 standard C definitions. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | ||
| 5 | * | ||
| 6 | * Authors: | ||
| 7 | * Boaz Harrosh <bharrosh@panasas.com> | ||
| 8 | * Benny Halevy <bhalevy@panasas.com> | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License version 2 | ||
| 12 | * | ||
| 13 | * This file contains types and constants that are defined by the protocol | ||
| 14 | * Note: All names and symbols are taken from the OSD standard's text. | ||
| 15 | */ | ||
| 16 | #ifndef __OSD_PROTOCOL_H__ | ||
| 17 | #define __OSD_PROTOCOL_H__ | ||
| 18 | |||
| 19 | #include <linux/types.h> | ||
| 20 | #include <asm/unaligned.h> | ||
| 21 | #include <scsi/scsi.h> | ||
| 22 | |||
| 23 | enum { | ||
| 24 | OSDv1_ADDITIONAL_CDB_LENGTH = 192, | ||
| 25 | OSDv1_TOTAL_CDB_LEN = OSDv1_ADDITIONAL_CDB_LENGTH + 8, | ||
| 26 | OSDv1_CAP_LEN = 80, | ||
| 27 | /* Latest supported version */ | ||
| 28 | /* OSD_ADDITIONAL_CDB_LENGTH = 216,*/ | ||
| 29 | OSD_ADDITIONAL_CDB_LENGTH = | ||
| 30 | OSDv1_ADDITIONAL_CDB_LENGTH, /* FIXME: Pete rev-001 sup */ | ||
| 31 | OSD_TOTAL_CDB_LEN = OSD_ADDITIONAL_CDB_LENGTH + 8, | ||
| 32 | /* OSD_CAP_LEN = 104,*/ | ||
| 33 | OSD_CAP_LEN = OSDv1_CAP_LEN,/* FIXME: Pete rev-001 sup */ | ||
| 34 | |||
| 35 | OSD_SYSTEMID_LEN = 20, | ||
| 36 | OSD_CRYPTO_KEYID_SIZE = 20, | ||
| 37 | /*FIXME: OSDv2_CRYPTO_KEYID_SIZE = 32,*/ | ||
| 38 | OSD_CRYPTO_SEED_SIZE = 4, | ||
| 39 | OSD_CRYPTO_NONCE_SIZE = 12, | ||
| 40 | OSD_MAX_SENSE_LEN = 252, /* from SPC-3 */ | ||
| 41 | |||
| 42 | OSD_PARTITION_FIRST_ID = 0x10000, | ||
| 43 | OSD_OBJECT_FIRST_ID = 0x10000, | ||
| 44 | }; | ||
| 45 | |||
| 46 | /* (osd-r10 5.2.4) | ||
| 47 | * osd2r03: 5.2.3 Caching control bits | ||
| 48 | */ | ||
| 49 | enum osd_options_byte { | ||
| 50 | OSD_CDB_FUA = 0x08, /* Force Unit Access */ | ||
| 51 | OSD_CDB_DPO = 0x10, /* Disable Page Out */ | ||
| 52 | }; | ||
| 53 | |||
| 54 | /* | ||
| 55 | * osd2r03: 5.2.5 Isolation. | ||
| 56 | * First 3 bits, V2-only. | ||
| 57 | * Also for attr 110h "default isolation method" at Root Information page | ||
| 58 | */ | ||
| 59 | enum osd_options_byte_isolation { | ||
| 60 | OSD_ISOLATION_DEFAULT = 0, | ||
| 61 | OSD_ISOLATION_NONE = 1, | ||
| 62 | OSD_ISOLATION_STRICT = 2, | ||
| 63 | OSD_ISOLATION_RANGE = 4, | ||
| 64 | OSD_ISOLATION_FUNCTIONAL = 5, | ||
| 65 | OSD_ISOLATION_VENDOR = 7, | ||
| 66 | }; | ||
| 67 | |||
| 68 | /* (osd-r10: 6.7) | ||
| 69 | * osd2r03: 6.8 FLUSH, FLUSH COLLECTION, FLUSH OSD, FLUSH PARTITION | ||
| 70 | */ | ||
| 71 | enum osd_options_flush_scope_values { | ||
| 72 | OSD_CDB_FLUSH_ALL = 0, | ||
| 73 | OSD_CDB_FLUSH_ATTR_ONLY = 1, | ||
| 74 | |||
| 75 | OSD_CDB_FLUSH_ALL_RECURSIVE = 2, | ||
| 76 | /* V2-only */ | ||
| 77 | OSD_CDB_FLUSH_ALL_RANGE = 2, | ||
| 78 | }; | ||
| 79 | |||
| 80 | /* osd2r03: 5.2.10 Timestamps control */ | ||
| 81 | enum { | ||
| 82 | OSD_CDB_NORMAL_TIMESTAMPS = 0, | ||
| 83 | OSD_CDB_BYPASS_TIMESTAMPS = 0x7f, | ||
| 84 | }; | ||
| 85 | |||
| 86 | /* (osd-r10: 5.2.2.1) | ||
| 87 | * osd2r03: 5.2.4.1 Get and set attributes CDB format selection | ||
| 88 | * 2 bits at second nibble of command_specific_options byte | ||
| 89 | */ | ||
| 90 | enum osd_attributes_mode { | ||
| 91 | /* V2-only */ | ||
| 92 | OSD_CDB_SET_ONE_ATTR = 0x10, | ||
| 93 | |||
| 94 | OSD_CDB_GET_ATTR_PAGE_SET_ONE = 0x20, | ||
| 95 | OSD_CDB_GET_SET_ATTR_LISTS = 0x30, | ||
| 96 | |||
| 97 | OSD_CDB_GET_SET_ATTR_MASK = 0x30, | ||
| 98 | }; | ||
| 99 | |||
| 100 | /* (osd-r10: 4.12.5) | ||
| 101 | * osd2r03: 4.14.5 Data-In and Data-Out buffer offsets | ||
| 102 | * byte offset = mantissa * (2^(exponent+8)) | ||
| 103 | * struct { | ||
| 104 | * unsigned mantissa: 28; | ||
| 105 | * int exponent: 04; | ||
| 106 | * } | ||
| 107 | */ | ||
| 108 | typedef __be32 __bitwise osd_cdb_offset; | ||
| 109 | |||
| 110 | enum { | ||
| 111 | OSD_OFFSET_UNUSED = 0xFFFFFFFF, | ||
| 112 | OSD_OFFSET_MAX_BITS = 28, | ||
| 113 | |||
| 114 | OSDv1_OFFSET_MIN_SHIFT = 8, | ||
| 115 | OSD_OFFSET_MIN_SHIFT = 3, | ||
| 116 | OSD_OFFSET_MAX_SHIFT = 16, | ||
| 117 | }; | ||
| 118 | |||
| 119 | /* Return the smallest allowed encoded offset that contains @offset. | ||
| 120 | * | ||
| 121 | * The actual encoded offset returned is @offset + *padding. | ||
| 122 | * (up to max_shift, non-inclusive) | ||
| 123 | */ | ||
| 124 | osd_cdb_offset __osd_encode_offset(u64 offset, unsigned *padding, | ||
| 125 | int min_shift, int max_shift); | ||
| 126 | |||
| 127 | /* Minimum alignment is 256 bytes | ||
| 128 | * Note: Seems from std v1 that exponent can be from 0+8 to 0xE+8 (inclusive) | ||
| 129 | * which is 8 to 23 but IBM code restricts it to 16, so be it. | ||
| 130 | */ | ||
| 131 | static inline osd_cdb_offset osd_encode_offset_v1(u64 offset, unsigned *padding) | ||
| 132 | { | ||
| 133 | return __osd_encode_offset(offset, padding, | ||
| 134 | OSDv1_OFFSET_MIN_SHIFT, OSD_OFFSET_MAX_SHIFT); | ||
| 135 | } | ||
| 136 | |||
| 137 | /* Minimum 8 bytes alignment | ||
| 138 | * Same as v1 but since exponent can be signed than a less than | ||
| 139 | * 256 alignment can be reached with small offsets (<2GB) | ||
| 140 | */ | ||
| 141 | static inline osd_cdb_offset osd_encode_offset_v2(u64 offset, unsigned *padding) | ||
| 142 | { | ||
| 143 | return __osd_encode_offset(offset, padding, | ||
| 144 | OSD_OFFSET_MIN_SHIFT, OSD_OFFSET_MAX_SHIFT); | ||
| 145 | } | ||
| 146 | |||
| 147 | /* osd2r03: 5.2.1 Overview */ | ||
| 148 | struct osd_cdb_head { | ||
| 149 | struct scsi_varlen_cdb_hdr varlen_cdb; | ||
| 150 | /*10*/ u8 options; | ||
| 151 | u8 command_specific_options; | ||
| 152 | u8 timestamp_control; | ||
| 153 | /*13*/ u8 reserved1[3]; | ||
| 154 | /*16*/ __be64 partition; | ||
| 155 | /*24*/ __be64 object; | ||
| 156 | /*32*/ union { /* V1 vs V2 alignment differences */ | ||
| 157 | struct __osdv1_cdb_addr_len { | ||
| 158 | /*32*/ __be32 list_identifier;/* Rarely used */ | ||
| 159 | /*36*/ __be64 length; | ||
| 160 | /*44*/ __be64 start_address; | ||
| 161 | } __packed v1; | ||
| 162 | |||
| 163 | struct __osdv2_cdb_addr_len { | ||
| 164 | /* called allocation_length in some commands */ | ||
| 165 | /*32*/ __be64 length; | ||
| 166 | /*40*/ __be64 start_address; | ||
| 167 | /*48*/ __be32 list_identifier;/* Rarely used */ | ||
| 168 | } __packed v2; | ||
| 169 | }; | ||
| 170 | /*52*/ union { /* selected attributes mode Page/List/Single */ | ||
| 171 | struct osd_attributes_page_mode { | ||
| 172 | /*52*/ __be32 get_attr_page; | ||
| 173 | /*56*/ __be32 get_attr_alloc_length; | ||
| 174 | /*60*/ osd_cdb_offset get_attr_offset; | ||
| 175 | |||
| 176 | /*64*/ __be32 set_attr_page; | ||
| 177 | /*68*/ __be32 set_attr_id; | ||
| 178 | /*72*/ __be32 set_attr_length; | ||
| 179 | /*76*/ osd_cdb_offset set_attr_offset; | ||
| 180 | /*80*/ } __packed attrs_page; | ||
| 181 | |||
| 182 | struct osd_attributes_list_mode { | ||
| 183 | /*52*/ __be32 get_attr_desc_bytes; | ||
| 184 | /*56*/ osd_cdb_offset get_attr_desc_offset; | ||
| 185 | |||
| 186 | /*60*/ __be32 get_attr_alloc_length; | ||
| 187 | /*64*/ osd_cdb_offset get_attr_offset; | ||
| 188 | |||
| 189 | /*68*/ __be32 set_attr_bytes; | ||
| 190 | /*72*/ osd_cdb_offset set_attr_offset; | ||
| 191 | __be32 not_used; | ||
| 192 | /*80*/ } __packed attrs_list; | ||
| 193 | |||
| 194 | /* osd2r03:5.2.4.2 Set one attribute value using CDB fields */ | ||
| 195 | struct osd_attributes_cdb_mode { | ||
| 196 | /*52*/ __be32 set_attr_page; | ||
| 197 | /*56*/ __be32 set_attr_id; | ||
| 198 | /*60*/ __be16 set_attr_len; | ||
| 199 | /*62*/ u8 set_attr_val[18]; | ||
| 200 | /*80*/ } __packed attrs_cdb; | ||
| 201 | /*52*/ u8 get_set_attributes_parameters[28]; | ||
| 202 | }; | ||
| 203 | } __packed; | ||
| 204 | /*80*/ | ||
| 205 | |||
| 206 | /*160 v1*/ | ||
| 207 | /*184 v2*/ | ||
| 208 | struct osd_security_parameters { | ||
| 209 | /*160*/u8 integrity_check_value[OSD_CRYPTO_KEYID_SIZE]; | ||
| 210 | /*180*/u8 request_nonce[OSD_CRYPTO_NONCE_SIZE]; | ||
| 211 | /*192*/osd_cdb_offset data_in_integrity_check_offset; | ||
| 212 | /*196*/osd_cdb_offset data_out_integrity_check_offset; | ||
| 213 | } __packed; | ||
| 214 | /*200 v1*/ | ||
| 215 | /*224 v2*/ | ||
| 216 | |||
| 217 | /* FIXME: osdv2_security_parameters */ | ||
| 218 | |||
| 219 | struct osdv1_cdb { | ||
| 220 | struct osd_cdb_head h; | ||
| 221 | u8 caps[OSDv1_CAP_LEN]; | ||
| 222 | struct osd_security_parameters sec_params; | ||
| 223 | } __packed; | ||
| 224 | |||
| 225 | struct osdv2_cdb { | ||
| 226 | struct osd_cdb_head h; | ||
| 227 | u8 caps[OSD_CAP_LEN]; | ||
| 228 | struct osd_security_parameters sec_params; | ||
| 229 | /* FIXME: osdv2_security_parameters */ | ||
| 230 | } __packed; | ||
| 231 | |||
| 232 | struct osd_cdb { | ||
| 233 | union { | ||
| 234 | struct osdv1_cdb v1; | ||
| 235 | struct osdv2_cdb v2; | ||
| 236 | u8 buff[OSD_TOTAL_CDB_LEN]; | ||
| 237 | }; | ||
| 238 | } __packed; | ||
| 239 | |||
| 240 | static inline struct osd_cdb_head *osd_cdb_head(struct osd_cdb *ocdb) | ||
| 241 | { | ||
| 242 | return (struct osd_cdb_head *)ocdb->buff; | ||
| 243 | } | ||
| 244 | |||
| 245 | /* define both version actions | ||
| 246 | * Ex name = FORMAT_OSD we have OSD_ACT_FORMAT_OSD && OSDv1_ACT_FORMAT_OSD | ||
| 247 | */ | ||
| 248 | #define OSD_ACT___(Name, Num) \ | ||
| 249 | OSD_ACT_##Name = __constant_cpu_to_be16(0x8880 + Num), \ | ||
| 250 | OSDv1_ACT_##Name = __constant_cpu_to_be16(0x8800 + Num), | ||
| 251 | |||
| 252 | /* V2 only actions */ | ||
| 253 | #define OSD_ACT_V2(Name, Num) \ | ||
| 254 | OSD_ACT_##Name = __constant_cpu_to_be16(0x8880 + Num), | ||
| 255 | |||
| 256 | #define OSD_ACT_V1_V2(Name, Num1, Num2) \ | ||
| 257 | OSD_ACT_##Name = __constant_cpu_to_be16(Num2), \ | ||
| 258 | OSDv1_ACT_##Name = __constant_cpu_to_be16(Num1), | ||
| 259 | |||
| 260 | enum osd_service_actions { | ||
| 261 | OSD_ACT_V2(OBJECT_STRUCTURE_CHECK, 0x00) | ||
| 262 | OSD_ACT___(FORMAT_OSD, 0x01) | ||
| 263 | OSD_ACT___(CREATE, 0x02) | ||
| 264 | OSD_ACT___(LIST, 0x03) | ||
| 265 | OSD_ACT_V2(PUNCH, 0x04) | ||
| 266 | OSD_ACT___(READ, 0x05) | ||
| 267 | OSD_ACT___(WRITE, 0x06) | ||
| 268 | OSD_ACT___(APPEND, 0x07) | ||
| 269 | OSD_ACT___(FLUSH, 0x08) | ||
| 270 | OSD_ACT_V2(CLEAR, 0x09) | ||
| 271 | OSD_ACT___(REMOVE, 0x0A) | ||
| 272 | OSD_ACT___(CREATE_PARTITION, 0x0B) | ||
| 273 | OSD_ACT___(REMOVE_PARTITION, 0x0C) | ||
| 274 | OSD_ACT___(GET_ATTRIBUTES, 0x0E) | ||
| 275 | OSD_ACT___(SET_ATTRIBUTES, 0x0F) | ||
| 276 | OSD_ACT___(CREATE_AND_WRITE, 0x12) | ||
| 277 | OSD_ACT___(CREATE_COLLECTION, 0x15) | ||
| 278 | OSD_ACT___(REMOVE_COLLECTION, 0x16) | ||
| 279 | OSD_ACT___(LIST_COLLECTION, 0x17) | ||
| 280 | OSD_ACT___(SET_KEY, 0x18) | ||
| 281 | OSD_ACT___(SET_MASTER_KEY, 0x19) | ||
| 282 | OSD_ACT___(FLUSH_COLLECTION, 0x1A) | ||
| 283 | OSD_ACT___(FLUSH_PARTITION, 0x1B) | ||
| 284 | OSD_ACT___(FLUSH_OSD, 0x1C) | ||
| 285 | |||
| 286 | OSD_ACT_V2(QUERY, 0x20) | ||
| 287 | OSD_ACT_V2(REMOVE_MEMBER_OBJECTS, 0x21) | ||
| 288 | OSD_ACT_V2(GET_MEMBER_ATTRIBUTES, 0x22) | ||
| 289 | OSD_ACT_V2(SET_MEMBER_ATTRIBUTES, 0x23) | ||
| 290 | OSD_ACT_V2(READ_MAP, 0x31) | ||
| 291 | |||
| 292 | OSD_ACT_V1_V2(PERFORM_SCSI_COMMAND, 0x8F7E, 0x8F7C) | ||
| 293 | OSD_ACT_V1_V2(SCSI_TASK_MANAGEMENT, 0x8F7F, 0x8F7D) | ||
| 294 | /* 0x8F80 to 0x8FFF are Vendor specific */ | ||
| 295 | }; | ||
| 296 | |||
| 297 | /* osd2r03: 7.1.3.2 List entry format for retrieving attributes */ | ||
| 298 | struct osd_attributes_list_attrid { | ||
| 299 | __be32 attr_page; | ||
| 300 | __be32 attr_id; | ||
| 301 | } __packed; | ||
| 302 | |||
| 303 | /* | ||
| 304 | * osd2r03: 7.1.3.3 List entry format for retrieved attributes and | ||
| 305 | * for setting attributes | ||
| 306 | * NOTE: v2 is 8-bytes aligned, v1 is not aligned. | ||
| 307 | */ | ||
| 308 | struct osd_attributes_list_element { | ||
| 309 | __be32 attr_page; | ||
| 310 | __be32 attr_id; | ||
| 311 | __be16 attr_bytes; | ||
| 312 | u8 attr_val[0]; | ||
| 313 | } __packed; | ||
| 314 | |||
| 315 | enum { | ||
| 316 | OSDv1_ATTRIBUTES_ELEM_ALIGN = 1, | ||
| 317 | OSD_ATTRIBUTES_ELEM_ALIGN = 8, | ||
| 318 | }; | ||
| 319 | |||
| 320 | enum { | ||
| 321 | OSD_ATTR_LIST_ALL_PAGES = 0xFFFFFFFF, | ||
| 322 | OSD_ATTR_LIST_ALL_IN_PAGE = 0xFFFFFFFF, | ||
| 323 | }; | ||
| 324 | |||
| 325 | static inline unsigned osdv1_attr_list_elem_size(unsigned len) | ||
| 326 | { | ||
| 327 | return ALIGN(len + sizeof(struct osd_attributes_list_element), | ||
| 328 | OSDv1_ATTRIBUTES_ELEM_ALIGN); | ||
| 329 | } | ||
| 330 | |||
| 331 | static inline unsigned osdv2_attr_list_elem_size(unsigned len) | ||
| 332 | { | ||
| 333 | return ALIGN(len + sizeof(struct osd_attributes_list_element), | ||
| 334 | OSD_ATTRIBUTES_ELEM_ALIGN); | ||
| 335 | } | ||
| 336 | |||
| 337 | /* | ||
| 338 | * osd2r03: 7.1.3 OSD attributes lists (Table 184) — List type values | ||
| 339 | */ | ||
| 340 | enum osd_attr_list_types { | ||
| 341 | OSD_ATTR_LIST_GET = 0x1, /* descriptors only */ | ||
| 342 | OSD_ATTR_LIST_SET_RETRIEVE = 0x9, /*descriptors/values variable-length*/ | ||
| 343 | OSD_V2_ATTR_LIST_MULTIPLE = 0xE, /* ver2, Multiple Objects lists*/ | ||
| 344 | OSD_V1_ATTR_LIST_CREATE_MULTIPLE = 0xF,/*ver1, used by create_multple*/ | ||
| 345 | }; | ||
| 346 | |||
| 347 | /* osd2r03: 7.1.3.4 Multi-object retrieved attributes format */ | ||
| 348 | struct osd_attributes_list_multi_header { | ||
| 349 | __be64 object_id; | ||
| 350 | u8 object_type; /* object_type enum below */ | ||
| 351 | u8 reserved[5]; | ||
| 352 | __be16 list_bytes; | ||
| 353 | /* followed by struct osd_attributes_list_element's */ | ||
| 354 | }; | ||
| 355 | |||
| 356 | struct osdv1_attributes_list_header { | ||
| 357 | u8 type; /* low 4-bit only */ | ||
| 358 | u8 pad; | ||
| 359 | __be16 list_bytes; /* Initiator shall set to Zero. Only set by target */ | ||
| 360 | /* | ||
| 361 | * type=9 followed by struct osd_attributes_list_element's | ||
| 362 | * type=E followed by struct osd_attributes_list_multi_header's | ||
| 363 | */ | ||
| 364 | } __packed; | ||
| 365 | |||
| 366 | static inline unsigned osdv1_list_size(struct osdv1_attributes_list_header *h) | ||
| 367 | { | ||
| 368 | return be16_to_cpu(h->list_bytes); | ||
| 369 | } | ||
| 370 | |||
| 371 | struct osdv2_attributes_list_header { | ||
| 372 | u8 type; /* lower 4-bits only */ | ||
| 373 | u8 pad[3]; | ||
| 374 | /*4*/ __be32 list_bytes; /* Initiator shall set to zero. Only set by target */ | ||
| 375 | /* | ||
| 376 | * type=9 followed by struct osd_attributes_list_element's | ||
| 377 | * type=E followed by struct osd_attributes_list_multi_header's | ||
| 378 | */ | ||
| 379 | } __packed; | ||
| 380 | |||
| 381 | static inline unsigned osdv2_list_size(struct osdv2_attributes_list_header *h) | ||
| 382 | { | ||
| 383 | return be32_to_cpu(h->list_bytes); | ||
| 384 | } | ||
| 385 | |||
| 386 | /* (osd-r10 6.13) | ||
| 387 | * osd2r03: 6.15 LIST (Table 79) LIST command parameter data. | ||
| 388 | * for root_lstchg below | ||
| 389 | */ | ||
| 390 | enum { | ||
| 391 | OSD_OBJ_ID_LIST_PAR = 0x1, /* V1-only. Not used in V2 */ | ||
| 392 | OSD_OBJ_ID_LIST_LSTCHG = 0x2, | ||
| 393 | }; | ||
| 394 | |||
| 395 | /* | ||
| 396 | * osd2r03: 6.15.2 LIST command parameter data | ||
| 397 | * (Also for LIST COLLECTION) | ||
| 398 | */ | ||
| 399 | struct osd_obj_id_list { | ||
| 400 | __be64 list_bytes; /* bytes in list excluding list_bytes (-8) */ | ||
| 401 | __be64 continuation_id; | ||
| 402 | __be32 list_identifier; | ||
| 403 | u8 pad[3]; | ||
| 404 | u8 root_lstchg; | ||
| 405 | __be64 object_ids[0]; | ||
| 406 | } __packed; | ||
| 407 | |||
| 408 | static inline bool osd_is_obj_list_done(struct osd_obj_id_list *list, | ||
| 409 | bool *is_changed) | ||
| 410 | { | ||
| 411 | *is_changed = (0 != (list->root_lstchg & OSD_OBJ_ID_LIST_LSTCHG)); | ||
| 412 | return 0 != list->continuation_id; | ||
| 413 | } | ||
| 414 | |||
| 415 | /* | ||
| 416 | * osd2r03: 4.12.4.5 The ALLDATA security method | ||
| 417 | */ | ||
| 418 | struct osd_data_out_integrity_info { | ||
| 419 | __be64 data_bytes; | ||
| 420 | __be64 set_attributes_bytes; | ||
| 421 | __be64 get_attributes_bytes; | ||
| 422 | __be64 integrity_check_value; | ||
| 423 | } __packed; | ||
| 424 | |||
| 425 | struct osd_data_in_integrity_info { | ||
| 426 | __be64 data_bytes; | ||
| 427 | __be64 retrieved_attributes_bytes; | ||
| 428 | __be64 integrity_check_value; | ||
| 429 | } __packed; | ||
| 430 | |||
| 431 | struct osd_timestamp { | ||
| 432 | u8 time[6]; /* number of milliseconds since 1/1/1970 UT (big endian) */ | ||
| 433 | } __packed; | ||
| 434 | /* FIXME: define helper functions to convert to/from osd time format */ | ||
| 435 | |||
| 436 | /* | ||
| 437 | * Capability & Security definitions | ||
| 438 | * osd2r03: 4.11.2.2 Capability format | ||
| 439 | * osd2r03: 5.2.8 Security parameters | ||
| 440 | */ | ||
| 441 | |||
| 442 | struct osd_key_identifier { | ||
| 443 | u8 id[7]; /* if you know why 7 please email bharrosh@panasas.com */ | ||
| 444 | } __packed; | ||
| 445 | |||
| 446 | /* for osd_capability.format */ | ||
| 447 | enum { | ||
| 448 | OSD_SEC_CAP_FORMAT_NO_CAPS = 0, | ||
| 449 | OSD_SEC_CAP_FORMAT_VER1 = 1, | ||
| 450 | OSD_SEC_CAP_FORMAT_VER2 = 2, | ||
| 451 | }; | ||
| 452 | |||
| 453 | /* security_method */ | ||
| 454 | enum { | ||
| 455 | OSD_SEC_NOSEC = 0, | ||
| 456 | OSD_SEC_CAPKEY = 1, | ||
| 457 | OSD_SEC_CMDRSP = 2, | ||
| 458 | OSD_SEC_ALLDATA = 3, | ||
| 459 | }; | ||
| 460 | |||
| 461 | enum object_type { | ||
| 462 | OSD_SEC_OBJ_ROOT = 0x1, | ||
| 463 | OSD_SEC_OBJ_PARTITION = 0x2, | ||
| 464 | OSD_SEC_OBJ_COLLECTION = 0x40, | ||
| 465 | OSD_SEC_OBJ_USER = 0x80, | ||
| 466 | }; | ||
| 467 | |||
| 468 | enum osd_capability_bit_masks { | ||
| 469 | OSD_SEC_CAP_APPEND = BIT(0), | ||
| 470 | OSD_SEC_CAP_OBJ_MGMT = BIT(1), | ||
| 471 | OSD_SEC_CAP_REMOVE = BIT(2), | ||
| 472 | OSD_SEC_CAP_CREATE = BIT(3), | ||
| 473 | OSD_SEC_CAP_SET_ATTR = BIT(4), | ||
| 474 | OSD_SEC_CAP_GET_ATTR = BIT(5), | ||
| 475 | OSD_SEC_CAP_WRITE = BIT(6), | ||
| 476 | OSD_SEC_CAP_READ = BIT(7), | ||
| 477 | |||
| 478 | OSD_SEC_CAP_NONE1 = BIT(8), | ||
| 479 | OSD_SEC_CAP_NONE2 = BIT(9), | ||
| 480 | OSD_SEC_CAP_NONE3 = BIT(10), | ||
| 481 | OSD_SEC_CAP_QUERY = BIT(11), /*v2 only*/ | ||
| 482 | OSD_SEC_CAP_M_OBJECT = BIT(12), /*v2 only*/ | ||
| 483 | OSD_SEC_CAP_POL_SEC = BIT(13), | ||
| 484 | OSD_SEC_CAP_GLOBAL = BIT(14), | ||
| 485 | OSD_SEC_CAP_DEV_MGMT = BIT(15), | ||
| 486 | }; | ||
| 487 | |||
| 488 | /* for object_descriptor_type (hi nibble used) */ | ||
| 489 | enum { | ||
| 490 | OSD_SEC_OBJ_DESC_NONE = 0, /* Not allowed */ | ||
| 491 | OSD_SEC_OBJ_DESC_OBJ = 1 << 4, /* v1: also collection */ | ||
| 492 | OSD_SEC_OBJ_DESC_PAR = 2 << 4, /* also root */ | ||
| 493 | OSD_SEC_OBJ_DESC_COL = 3 << 4, /* v2 only */ | ||
| 494 | }; | ||
| 495 | |||
| 496 | /* (osd-r10:4.9.2.2) | ||
| 497 | * osd2r03:4.11.2.2 Capability format | ||
| 498 | */ | ||
| 499 | struct osd_capability_head { | ||
| 500 | u8 format; /* low nibble */ | ||
| 501 | u8 integrity_algorithm__key_version; /* MAKE_BYTE(integ_alg, key_ver) */ | ||
| 502 | u8 security_method; | ||
| 503 | u8 reserved1; | ||
| 504 | /*04*/ struct osd_timestamp expiration_time; | ||
| 505 | /*10*/ u8 audit[20]; | ||
| 506 | /*30*/ u8 discriminator[12]; | ||
| 507 | /*42*/ struct osd_timestamp object_created_time; | ||
| 508 | /*48*/ u8 object_type; | ||
| 509 | /*49*/ u8 permissions_bit_mask[5]; | ||
| 510 | /*54*/ u8 reserved2; | ||
| 511 | /*55*/ u8 object_descriptor_type; /* high nibble */ | ||
| 512 | } __packed; | ||
| 513 | |||
| 514 | /*56 v1*/ | ||
| 515 | struct osdv1_cap_object_descriptor { | ||
| 516 | union { | ||
| 517 | struct { | ||
| 518 | /*56*/ __be32 policy_access_tag; | ||
| 519 | /*60*/ __be64 allowed_partition_id; | ||
| 520 | /*68*/ __be64 allowed_object_id; | ||
| 521 | /*76*/ __be32 reserved; | ||
| 522 | } __packed obj_desc; | ||
| 523 | |||
| 524 | /*56*/ u8 object_descriptor[24]; | ||
| 525 | }; | ||
| 526 | } __packed; | ||
| 527 | /*80 v1*/ | ||
| 528 | |||
| 529 | /*56 v2*/ | ||
| 530 | struct osd_cap_object_descriptor { | ||
| 531 | union { | ||
| 532 | struct { | ||
| 533 | /*56*/ __be32 allowed_attributes_access; | ||
| 534 | /*60*/ __be32 policy_access_tag; | ||
| 535 | /*64*/ __be16 boot_epoch; | ||
| 536 | /*66*/ u8 reserved[6]; | ||
| 537 | /*72*/ __be64 allowed_partition_id; | ||
| 538 | /*80*/ __be64 allowed_object_id; | ||
| 539 | /*88*/ __be64 allowed_range_length; | ||
| 540 | /*96*/ __be64 allowed_range_start; | ||
| 541 | } __packed obj_desc; | ||
| 542 | |||
| 543 | /*56*/ u8 object_descriptor[48]; | ||
| 544 | }; | ||
| 545 | } __packed; | ||
| 546 | /*104 v2*/ | ||
| 547 | |||
| 548 | struct osdv1_capability { | ||
| 549 | struct osd_capability_head h; | ||
| 550 | struct osdv1_cap_object_descriptor od; | ||
| 551 | } __packed; | ||
| 552 | |||
| 553 | struct osd_capability { | ||
| 554 | struct osd_capability_head h; | ||
| 555 | /* struct osd_cap_object_descriptor od;*/ | ||
| 556 | struct osdv1_cap_object_descriptor od; /* FIXME: Pete rev-001 sup */ | ||
| 557 | } __packed; | ||
| 558 | |||
| 559 | /** | ||
| 560 | * osd_sec_set_caps - set cap-bits into the capabilities header | ||
| 561 | * | ||
| 562 | * @cap: The osd_capability_head to set cap bits to. | ||
| 563 | * @bit_mask: Use an ORed list of enum osd_capability_bit_masks values | ||
| 564 | * | ||
| 565 | * permissions_bit_mask is unaligned use below to set into caps | ||
| 566 | * in a version independent way | ||
| 567 | */ | ||
| 568 | static inline void osd_sec_set_caps(struct osd_capability_head *cap, | ||
| 569 | u16 bit_mask) | ||
| 570 | { | ||
| 571 | /* | ||
| 572 | *Note: The bits above are defined LE order this is because this way | ||
| 573 | * they can grow in the future to more then 16, and still retain | ||
| 574 | * there constant values. | ||
| 575 | */ | ||
| 576 | put_unaligned_le16(bit_mask, &cap->permissions_bit_mask); | ||
| 577 | } | ||
| 578 | |||
| 579 | #endif /* ndef __OSD_PROTOCOL_H__ */ | ||
diff --git a/include/scsi/osd_sec.h b/include/scsi/osd_sec.h new file mode 100644 index 000000000000..4c09fee8ae1e --- /dev/null +++ b/include/scsi/osd_sec.h | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | /* | ||
| 2 | * osd_sec.h - OSD security manager API | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | ||
| 5 | * | ||
| 6 | * Authors: | ||
| 7 | * Boaz Harrosh <bharrosh@panasas.com> | ||
| 8 | * Benny Halevy <bhalevy@panasas.com> | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License version 2 | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | #ifndef __OSD_SEC_H__ | ||
| 15 | #define __OSD_SEC_H__ | ||
| 16 | |||
| 17 | #include "osd_protocol.h" | ||
| 18 | #include "osd_types.h" | ||
| 19 | |||
| 20 | /* | ||
| 21 | * Contains types and constants of osd capabilities and security | ||
| 22 | * encoding/decoding. | ||
| 23 | * API is trying to keep security abstract so initiator of an object | ||
| 24 | * based pNFS client knows as little as possible about security and | ||
| 25 | * capabilities. It is the Server's osd-initiator place to know more. | ||
| 26 | * Also can be used by osd-target. | ||
| 27 | */ | ||
| 28 | void osd_sec_encode_caps(void *caps, ...);/* NI */ | ||
| 29 | void osd_sec_init_nosec_doall_caps(void *caps, | ||
| 30 | const struct osd_obj_id *obj, bool is_collection, const bool is_v1); | ||
| 31 | |||
| 32 | bool osd_is_sec_alldata(struct osd_security_parameters *sec_params); | ||
| 33 | |||
| 34 | /* Conditionally sign the CDB according to security setting in ocdb | ||
| 35 | * with cap_key */ | ||
| 36 | void osd_sec_sign_cdb(struct osd_cdb *ocdb, const u8 *cap_key); | ||
| 37 | |||
| 38 | /* Unconditionally sign the BIO data with cap_key. | ||
| 39 | * Check for osd_is_sec_alldata() was done prior to calling this. */ | ||
| 40 | void osd_sec_sign_data(void *data_integ, struct bio *bio, const u8 *cap_key); | ||
| 41 | |||
| 42 | /* Version independent copy of caps into the cdb */ | ||
| 43 | void osd_set_caps(struct osd_cdb *cdb, const void *caps); | ||
| 44 | |||
| 45 | #endif /* ndef __OSD_SEC_H__ */ | ||
diff --git a/include/scsi/osd_sense.h b/include/scsi/osd_sense.h new file mode 100644 index 000000000000..ff9b33c773c7 --- /dev/null +++ b/include/scsi/osd_sense.h | |||
| @@ -0,0 +1,260 @@ | |||
| 1 | /* | ||
| 2 | * osd_sense.h - OSD Related sense handling definitions. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | ||
| 5 | * | ||
| 6 | * Authors: | ||
| 7 | * Boaz Harrosh <bharrosh@panasas.com> | ||
| 8 | * Benny Halevy <bhalevy@panasas.com> | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License version 2 | ||
| 12 | * | ||
| 13 | * This file contains types and constants that are defined by the protocol | ||
| 14 | * Note: All names and symbols are taken from the OSD standard's text. | ||
| 15 | */ | ||
| 16 | #ifndef __OSD_SENSE_H__ | ||
| 17 | #define __OSD_SENSE_H__ | ||
| 18 | |||
| 19 | #include <scsi/osd_protocol.h> | ||
| 20 | |||
| 21 | /* SPC3r23 4.5.6 Sense key and sense code definitions table 27 */ | ||
| 22 | enum scsi_sense_keys { | ||
| 23 | scsi_sk_no_sense = 0x0, | ||
| 24 | scsi_sk_recovered_error = 0x1, | ||
| 25 | scsi_sk_not_ready = 0x2, | ||
| 26 | scsi_sk_medium_error = 0x3, | ||
| 27 | scsi_sk_hardware_error = 0x4, | ||
| 28 | scsi_sk_illegal_request = 0x5, | ||
| 29 | scsi_sk_unit_attention = 0x6, | ||
| 30 | scsi_sk_data_protect = 0x7, | ||
| 31 | scsi_sk_blank_check = 0x8, | ||
| 32 | scsi_sk_vendor_specific = 0x9, | ||
| 33 | scsi_sk_copy_aborted = 0xa, | ||
| 34 | scsi_sk_aborted_command = 0xb, | ||
| 35 | scsi_sk_volume_overflow = 0xd, | ||
| 36 | scsi_sk_miscompare = 0xe, | ||
| 37 | scsi_sk_reserved = 0xf, | ||
| 38 | }; | ||
| 39 | |||
| 40 | /* SPC3r23 4.5.6 Sense key and sense code definitions table 28 */ | ||
| 41 | /* Note: only those which can be returned by an OSD target. Most of | ||
| 42 | * these errors are taken care of by the generic scsi layer. | ||
| 43 | */ | ||
| 44 | enum osd_additional_sense_codes { | ||
| 45 | scsi_no_additional_sense_information = 0x0000, | ||
| 46 | scsi_operation_in_progress = 0x0016, | ||
| 47 | scsi_cleaning_requested = 0x0017, | ||
| 48 | scsi_lunr_cause_not_reportable = 0x0400, | ||
| 49 | scsi_logical_unit_is_in_process_of_becoming_ready = 0x0401, | ||
| 50 | scsi_lunr_initializing_command_required = 0x0402, | ||
| 51 | scsi_lunr_manual_intervention_required = 0x0403, | ||
| 52 | scsi_lunr_operation_in_progress = 0x0407, | ||
| 53 | scsi_lunr_selftest_in_progress = 0x0409, | ||
| 54 | scsi_luna_asymmetric_access_state_transition = 0x040a, | ||
| 55 | scsi_luna_target_port_in_standby_state = 0x040b, | ||
| 56 | scsi_luna_target_port_in_unavailable_state = 0x040c, | ||
| 57 | scsi_lunr_notify_enable_spinup_required = 0x0411, | ||
| 58 | scsi_logical_unit_does_not_respond_to_selection = 0x0500, | ||
| 59 | scsi_logical_unit_communication_failure = 0x0800, | ||
| 60 | scsi_logical_unit_communication_timeout = 0x0801, | ||
| 61 | scsi_logical_unit_communication_parity_error = 0x0802, | ||
| 62 | scsi_error_log_overflow = 0x0a00, | ||
| 63 | scsi_warning = 0x0b00, | ||
| 64 | scsi_warning_specified_temperature_exceeded = 0x0b01, | ||
| 65 | scsi_warning_enclosure_degraded = 0x0b02, | ||
| 66 | scsi_write_error_unexpected_unsolicited_data = 0x0c0c, | ||
| 67 | scsi_write_error_not_enough_unsolicited_data = 0x0c0d, | ||
| 68 | scsi_invalid_information_unit = 0x0e00, | ||
| 69 | scsi_invalid_field_in_command_information_unit = 0x0e03, | ||
| 70 | scsi_read_error_failed_retransmission_request = 0x1113, | ||
| 71 | scsi_parameter_list_length_error = 0x1a00, | ||
| 72 | scsi_invalid_command_operation_code = 0x2000, | ||
| 73 | scsi_invalid_field_in_cdb = 0x2400, | ||
| 74 | osd_security_audit_value_frozen = 0x2404, | ||
| 75 | osd_security_working_key_frozen = 0x2405, | ||
| 76 | osd_nonce_not_unique = 0x2406, | ||
| 77 | osd_nonce_timestamp_out_of_range = 0x2407, | ||
| 78 | scsi_logical_unit_not_supported = 0x2500, | ||
| 79 | scsi_invalid_field_in_parameter_list = 0x2600, | ||
| 80 | scsi_parameter_not_supported = 0x2601, | ||
| 81 | scsi_parameter_value_invalid = 0x2602, | ||
| 82 | scsi_invalid_release_of_persistent_reservation = 0x2604, | ||
| 83 | osd_invalid_dataout_buffer_integrity_check_value = 0x260f, | ||
| 84 | scsi_not_ready_to_ready_change_medium_may_have_changed = 0x2800, | ||
| 85 | scsi_power_on_reset_or_bus_device_reset_occurred = 0x2900, | ||
| 86 | scsi_power_on_occurred = 0x2901, | ||
| 87 | scsi_scsi_bus_reset_occurred = 0x2902, | ||
| 88 | scsi_bus_device_reset_function_occurred = 0x2903, | ||
| 89 | scsi_device_internal_reset = 0x2904, | ||
| 90 | scsi_transceiver_mode_changed_to_single_ended = 0x2905, | ||
| 91 | scsi_transceiver_mode_changed_to_lvd = 0x2906, | ||
| 92 | scsi_i_t_nexus_loss_occurred = 0x2907, | ||
| 93 | scsi_parameters_changed = 0x2a00, | ||
| 94 | scsi_mode_parameters_changed = 0x2a01, | ||
| 95 | scsi_asymmetric_access_state_changed = 0x2a06, | ||
| 96 | scsi_priority_changed = 0x2a08, | ||
| 97 | scsi_command_sequence_error = 0x2c00, | ||
| 98 | scsi_previous_busy_status = 0x2c07, | ||
| 99 | scsi_previous_task_set_full_status = 0x2c08, | ||
| 100 | scsi_previous_reservation_conflict_status = 0x2c09, | ||
| 101 | osd_partition_or_collection_contains_user_objects = 0x2c0a, | ||
| 102 | scsi_commands_cleared_by_another_initiator = 0x2f00, | ||
| 103 | scsi_cleaning_failure = 0x3007, | ||
| 104 | scsi_enclosure_failure = 0x3400, | ||
| 105 | scsi_enclosure_services_failure = 0x3500, | ||
| 106 | scsi_unsupported_enclosure_function = 0x3501, | ||
| 107 | scsi_enclosure_services_unavailable = 0x3502, | ||
| 108 | scsi_enclosure_services_transfer_failure = 0x3503, | ||
| 109 | scsi_enclosure_services_transfer_refused = 0x3504, | ||
| 110 | scsi_enclosure_services_checksum_error = 0x3505, | ||
| 111 | scsi_rounded_parameter = 0x3700, | ||
| 112 | osd_read_past_end_of_user_object = 0x3b17, | ||
| 113 | scsi_logical_unit_has_not_self_configured_yet = 0x3e00, | ||
| 114 | scsi_logical_unit_failure = 0x3e01, | ||
| 115 | scsi_timeout_on_logical_unit = 0x3e02, | ||
| 116 | scsi_logical_unit_failed_selftest = 0x3e03, | ||
| 117 | scsi_logical_unit_unable_to_update_selftest_log = 0x3e04, | ||
| 118 | scsi_target_operating_conditions_have_changed = 0x3f00, | ||
| 119 | scsi_microcode_has_been_changed = 0x3f01, | ||
| 120 | scsi_inquiry_data_has_changed = 0x3f03, | ||
| 121 | scsi_echo_buffer_overwritten = 0x3f0f, | ||
| 122 | scsi_diagnostic_failure_on_component_nn_first = 0x4080, | ||
| 123 | scsi_diagnostic_failure_on_component_nn_last = 0x40ff, | ||
| 124 | scsi_message_error = 0x4300, | ||
| 125 | scsi_internal_target_failure = 0x4400, | ||
| 126 | scsi_select_or_reselect_failure = 0x4500, | ||
| 127 | scsi_scsi_parity_error = 0x4700, | ||
| 128 | scsi_data_phase_crc_error_detected = 0x4701, | ||
| 129 | scsi_scsi_parity_error_detected_during_st_data_phase = 0x4702, | ||
| 130 | scsi_asynchronous_information_protection_error_detected = 0x4704, | ||
| 131 | scsi_protocol_service_crc_error = 0x4705, | ||
| 132 | scsi_phy_test_function_in_progress = 0x4706, | ||
| 133 | scsi_invalid_message_error = 0x4900, | ||
| 134 | scsi_command_phase_error = 0x4a00, | ||
| 135 | scsi_data_phase_error = 0x4b00, | ||
| 136 | scsi_logical_unit_failed_self_configuration = 0x4c00, | ||
| 137 | scsi_overlapped_commands_attempted = 0x4e00, | ||
| 138 | osd_quota_error = 0x5507, | ||
| 139 | scsi_failure_prediction_threshold_exceeded = 0x5d00, | ||
| 140 | scsi_failure_prediction_threshold_exceeded_false = 0x5dff, | ||
| 141 | scsi_voltage_fault = 0x6500, | ||
| 142 | }; | ||
| 143 | |||
| 144 | enum scsi_descriptor_types { | ||
| 145 | scsi_sense_information = 0x0, | ||
| 146 | scsi_sense_command_specific_information = 0x1, | ||
| 147 | scsi_sense_key_specific = 0x2, | ||
| 148 | scsi_sense_field_replaceable_unit = 0x3, | ||
| 149 | scsi_sense_stream_commands = 0x4, | ||
| 150 | scsi_sense_block_commands = 0x5, | ||
| 151 | osd_sense_object_identification = 0x6, | ||
| 152 | osd_sense_response_integrity_check = 0x7, | ||
| 153 | osd_sense_attribute_identification = 0x8, | ||
| 154 | scsi_sense_ata_return = 0x9, | ||
| 155 | |||
| 156 | scsi_sense_Reserved_first = 0x0A, | ||
| 157 | scsi_sense_Reserved_last = 0x7F, | ||
| 158 | scsi_sense_Vendor_specific_first = 0x80, | ||
| 159 | scsi_sense_Vendor_specific_last = 0xFF, | ||
| 160 | }; | ||
| 161 | |||
| 162 | struct scsi_sense_descriptor { /* for picking into desc type */ | ||
| 163 | u8 descriptor_type; /* one of enum scsi_descriptor_types */ | ||
| 164 | u8 additional_length; /* n - 1 */ | ||
| 165 | u8 data[]; | ||
| 166 | } __packed; | ||
| 167 | |||
| 168 | /* OSD deploys only scsi descriptor_based sense buffers */ | ||
| 169 | struct scsi_sense_descriptor_based { | ||
| 170 | /*0*/ u8 response_code; /* 0x72 or 0x73 */ | ||
| 171 | /*1*/ u8 sense_key; /* one of enum scsi_sense_keys (4 lower bits) */ | ||
| 172 | /*2*/ __be16 additional_sense_code; /* enum osd_additional_sense_codes */ | ||
| 173 | /*4*/ u8 Reserved[3]; | ||
| 174 | /*7*/ u8 additional_sense_length; /* n - 7 */ | ||
| 175 | /*8*/ struct scsi_sense_descriptor ssd[0]; /* variable length, 1 or more */ | ||
| 176 | } __packed; | ||
| 177 | |||
| 178 | /* some descriptors deployed by OSD */ | ||
| 179 | |||
| 180 | /* SPC3r23 4.5.2.3 Command-specific information sense data descriptor */ | ||
| 181 | /* Note: this is the same for descriptor_type=00 but with type=00 the | ||
| 182 | * Reserved[0] == 0x80 (ie. bit-7 set) | ||
| 183 | */ | ||
| 184 | struct scsi_sense_command_specific_data_descriptor { | ||
| 185 | /*0*/ u8 descriptor_type; /* (00h/01h) */ | ||
| 186 | /*1*/ u8 additional_length; /* (0Ah) */ | ||
| 187 | /*2*/ u8 Reserved[2]; | ||
| 188 | /*4*/ __be64 information; | ||
| 189 | } __packed; | ||
| 190 | /*12*/ | ||
| 191 | |||
| 192 | struct scsi_sense_key_specific_data_descriptor { | ||
| 193 | /*0*/ u8 descriptor_type; /* (02h) */ | ||
| 194 | /*1*/ u8 additional_length; /* (06h) */ | ||
| 195 | /*2*/ u8 Reserved[2]; | ||
| 196 | /* SKSV, C/D, Reserved (2), BPV, BIT POINTER (3) */ | ||
| 197 | /*4*/ u8 sksv_cd_bpv_bp; | ||
| 198 | /*5*/ __be16 value; /* field-pointer/progress-value/retry-count/... */ | ||
| 199 | /*7*/ u8 Reserved2; | ||
| 200 | } __packed; | ||
| 201 | /*8*/ | ||
| 202 | |||
| 203 | /* 4.16.2.1 OSD error identification sense data descriptor - table 52 */ | ||
| 204 | /* Note: these bits are defined LE order for easy definition, this way the BIT() | ||
| 205 | * number is the same as in the documentation. Below members at | ||
| 206 | * osd_sense_identification_data_descriptor are therefore defined __le32. | ||
| 207 | */ | ||
| 208 | enum osd_command_functions_bits { | ||
| 209 | OSD_CFB_COMMAND = BIT(4), | ||
| 210 | OSD_CFB_CMD_CAP_VERIFIED = BIT(5), | ||
| 211 | OSD_CFB_VALIDATION = BIT(7), | ||
| 212 | OSD_CFB_IMP_ST_ATT = BIT(12), | ||
| 213 | OSD_CFB_SET_ATT = BIT(20), | ||
| 214 | OSD_CFB_SA_CAP_VERIFIED = BIT(21), | ||
| 215 | OSD_CFB_GET_ATT = BIT(28), | ||
| 216 | OSD_CFB_GA_CAP_VERIFIED = BIT(29), | ||
| 217 | }; | ||
| 218 | |||
| 219 | struct osd_sense_identification_data_descriptor { | ||
| 220 | /*0*/ u8 descriptor_type; /* (06h) */ | ||
| 221 | /*1*/ u8 additional_length; /* (1Eh) */ | ||
| 222 | /*2*/ u8 Reserved[6]; | ||
| 223 | /*8*/ __le32 not_initiated_functions; /*osd_command_functions_bits*/ | ||
| 224 | /*12*/ __le32 completed_functions; /*osd_command_functions_bits*/ | ||
| 225 | /*16*/ __be64 partition_id; | ||
| 226 | /*24*/ __be64 object_id; | ||
| 227 | } __packed; | ||
| 228 | /*32*/ | ||
| 229 | |||
| 230 | struct osd_sense_response_integrity_check_descriptor { | ||
| 231 | /*0*/ u8 descriptor_type; /* (07h) */ | ||
| 232 | /*1*/ u8 additional_length; /* (20h) */ | ||
| 233 | /*2*/ u8 integrity_check_value[32]; /*FIXME: OSDv2_CRYPTO_KEYID_SIZE*/ | ||
| 234 | } __packed; | ||
| 235 | /*34*/ | ||
| 236 | |||
| 237 | struct osd_sense_attributes_data_descriptor { | ||
| 238 | /*0*/ u8 descriptor_type; /* (08h) */ | ||
| 239 | /*1*/ u8 additional_length; /* (n-2) */ | ||
| 240 | /*2*/ u8 Reserved[6]; | ||
| 241 | struct osd_sense_attr { | ||
| 242 | /*8*/ __be32 attr_page; | ||
| 243 | /*12*/ __be32 attr_id; | ||
| 244 | /*16*/ } sense_attrs[0]; /* 1 or more */ | ||
| 245 | } __packed; | ||
| 246 | /*variable*/ | ||
| 247 | |||
| 248 | /* Dig into scsi_sk_illegal_request/scsi_invalid_field_in_cdb errors */ | ||
| 249 | |||
| 250 | /*FIXME: Support also field in CAPS*/ | ||
| 251 | #define OSD_CDB_OFFSET(F) offsetof(struct osd_cdb_head, F) | ||
| 252 | |||
| 253 | enum osdv2_cdb_field_offset { | ||
| 254 | OSDv1_CFO_STARTING_BYTE = OSD_CDB_OFFSET(v1.start_address), | ||
| 255 | OSD_CFO_STARTING_BYTE = OSD_CDB_OFFSET(v2.start_address), | ||
| 256 | OSD_CFO_PARTITION_ID = OSD_CDB_OFFSET(partition), | ||
| 257 | OSD_CFO_OBJECT_ID = OSD_CDB_OFFSET(object), | ||
| 258 | }; | ||
| 259 | |||
| 260 | #endif /* ndef __OSD_SENSE_H__ */ | ||
diff --git a/include/scsi/osd_types.h b/include/scsi/osd_types.h new file mode 100644 index 000000000000..3f5e88cc75c0 --- /dev/null +++ b/include/scsi/osd_types.h | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | /* | ||
| 2 | * osd_types.h - Types and constants which are not part of the protocol. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | ||
| 5 | * | ||
| 6 | * Authors: | ||
| 7 | * Boaz Harrosh <bharrosh@panasas.com> | ||
| 8 | * Benny Halevy <bhalevy@panasas.com> | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License version 2 | ||
| 12 | * | ||
| 13 | * Contains types and constants that are implementation specific and are | ||
| 14 | * used by more than one part of the osd library. | ||
| 15 | * (Eg initiator/target/security_manager/...) | ||
| 16 | */ | ||
| 17 | #ifndef __OSD_TYPES_H__ | ||
| 18 | #define __OSD_TYPES_H__ | ||
| 19 | |||
| 20 | struct osd_systemid { | ||
| 21 | u8 data[OSD_SYSTEMID_LEN]; | ||
| 22 | }; | ||
| 23 | |||
| 24 | typedef u64 __bitwise osd_id; | ||
| 25 | |||
| 26 | struct osd_obj_id { | ||
| 27 | osd_id partition; | ||
| 28 | osd_id id; | ||
| 29 | }; | ||
| 30 | |||
| 31 | static const struct __weak osd_obj_id osd_root_object = {0, 0}; | ||
| 32 | |||
| 33 | struct osd_attr { | ||
| 34 | u32 attr_page; | ||
| 35 | u32 attr_id; | ||
| 36 | u16 len; /* byte count of operand */ | ||
| 37 | void *val_ptr; /* in network order */ | ||
| 38 | }; | ||
| 39 | |||
| 40 | #endif /* ndef __OSD_TYPES_H__ */ | ||
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index a109165714d6..084478e14d24 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
| @@ -9,7 +9,8 @@ | |||
| 9 | #define _SCSI_SCSI_H | 9 | #define _SCSI_SCSI_H |
| 10 | 10 | ||
| 11 | #include <linux/types.h> | 11 | #include <linux/types.h> |
| 12 | #include <scsi/scsi_cmnd.h> | 12 | |
| 13 | struct scsi_cmnd; | ||
| 13 | 14 | ||
| 14 | /* | 15 | /* |
| 15 | * The maximum number of SG segments that we will put inside a | 16 | * The maximum number of SG segments that we will put inside a |
| @@ -263,6 +264,7 @@ static inline int scsi_status_is_good(int status) | |||
| 263 | #define TYPE_RAID 0x0c | 264 | #define TYPE_RAID 0x0c |
| 264 | #define TYPE_ENCLOSURE 0x0d /* Enclosure Services Device */ | 265 | #define TYPE_ENCLOSURE 0x0d /* Enclosure Services Device */ |
| 265 | #define TYPE_RBC 0x0e | 266 | #define TYPE_RBC 0x0e |
| 267 | #define TYPE_OSD 0x11 | ||
| 266 | #define TYPE_NO_LUN 0x7f | 268 | #define TYPE_NO_LUN 0x7f |
| 267 | 269 | ||
| 268 | /* SCSI protocols; these are taken from SPC-3 section 7.5 */ | 270 | /* SCSI protocols; these are taken from SPC-3 section 7.5 */ |
| @@ -402,16 +404,6 @@ static inline int scsi_is_wlun(unsigned int lun) | |||
| 402 | #define DRIVER_HARD 0x07 | 404 | #define DRIVER_HARD 0x07 |
| 403 | #define DRIVER_SENSE 0x08 | 405 | #define DRIVER_SENSE 0x08 |
| 404 | 406 | ||
| 405 | #define SUGGEST_RETRY 0x10 | ||
| 406 | #define SUGGEST_ABORT 0x20 | ||
| 407 | #define SUGGEST_REMAP 0x30 | ||
| 408 | #define SUGGEST_DIE 0x40 | ||
| 409 | #define SUGGEST_SENSE 0x80 | ||
| 410 | #define SUGGEST_IS_OK 0xff | ||
| 411 | |||
| 412 | #define DRIVER_MASK 0x0f | ||
| 413 | #define SUGGEST_MASK 0xf0 | ||
| 414 | |||
| 415 | /* | 407 | /* |
| 416 | * Internal return values. | 408 | * Internal return values. |
| 417 | */ | 409 | */ |
| @@ -447,23 +439,6 @@ static inline int scsi_is_wlun(unsigned int lun) | |||
| 447 | #define msg_byte(result) (((result) >> 8) & 0xff) | 439 | #define msg_byte(result) (((result) >> 8) & 0xff) |
| 448 | #define host_byte(result) (((result) >> 16) & 0xff) | 440 | #define host_byte(result) (((result) >> 16) & 0xff) |
| 449 | #define driver_byte(result) (((result) >> 24) & 0xff) | 441 | #define driver_byte(result) (((result) >> 24) & 0xff) |
| 450 | #define suggestion(result) (driver_byte(result) & SUGGEST_MASK) | ||
| 451 | |||
| 452 | static inline void set_msg_byte(struct scsi_cmnd *cmd, char status) | ||
| 453 | { | ||
| 454 | cmd->result |= status << 8; | ||
| 455 | } | ||
| 456 | |||
| 457 | static inline void set_host_byte(struct scsi_cmnd *cmd, char status) | ||
| 458 | { | ||
| 459 | cmd->result |= status << 16; | ||
| 460 | } | ||
| 461 | |||
| 462 | static inline void set_driver_byte(struct scsi_cmnd *cmd, char status) | ||
| 463 | { | ||
| 464 | cmd->result |= status << 24; | ||
| 465 | } | ||
| 466 | |||
| 467 | 442 | ||
| 468 | #define sense_class(sense) (((sense) >> 4) & 0x7) | 443 | #define sense_class(sense) (((sense) >> 4) & 0x7) |
| 469 | #define sense_error(sense) ((sense) & 0xf) | 444 | #define sense_error(sense) ((sense) & 0xf) |
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 855bf95963e7..43b50d36925c 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
| @@ -291,4 +291,19 @@ static inline struct scsi_data_buffer *scsi_prot(struct scsi_cmnd *cmd) | |||
| 291 | #define scsi_for_each_prot_sg(cmd, sg, nseg, __i) \ | 291 | #define scsi_for_each_prot_sg(cmd, sg, nseg, __i) \ |
| 292 | for_each_sg(scsi_prot_sglist(cmd), sg, nseg, __i) | 292 | for_each_sg(scsi_prot_sglist(cmd), sg, nseg, __i) |
| 293 | 293 | ||
| 294 | static inline void set_msg_byte(struct scsi_cmnd *cmd, char status) | ||
| 295 | { | ||
| 296 | cmd->result |= status << 8; | ||
| 297 | } | ||
| 298 | |||
| 299 | static inline void set_host_byte(struct scsi_cmnd *cmd, char status) | ||
| 300 | { | ||
| 301 | cmd->result |= status << 16; | ||
| 302 | } | ||
| 303 | |||
| 304 | static inline void set_driver_byte(struct scsi_cmnd *cmd, char status) | ||
| 305 | { | ||
| 306 | cmd->result |= status << 24; | ||
| 307 | } | ||
| 308 | |||
| 294 | #endif /* _SCSI_SCSI_CMND_H */ | 309 | #endif /* _SCSI_SCSI_CMND_H */ |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 01a4c58f8bad..3f566af3f101 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
| @@ -340,6 +340,7 @@ extern int scsi_mode_select(struct scsi_device *sdev, int pf, int sp, | |||
| 340 | struct scsi_sense_hdr *); | 340 | struct scsi_sense_hdr *); |
| 341 | extern int scsi_test_unit_ready(struct scsi_device *sdev, int timeout, | 341 | extern int scsi_test_unit_ready(struct scsi_device *sdev, int timeout, |
| 342 | int retries, struct scsi_sense_hdr *sshdr); | 342 | int retries, struct scsi_sense_hdr *sshdr); |
| 343 | extern unsigned char *scsi_get_vpd_page(struct scsi_device *, u8 page); | ||
| 343 | extern int scsi_device_set_state(struct scsi_device *sdev, | 344 | extern int scsi_device_set_state(struct scsi_device *sdev, |
| 344 | enum scsi_device_state state); | 345 | enum scsi_device_state state); |
| 345 | extern struct scsi_event *sdev_evt_alloc(enum scsi_device_event evt_type, | 346 | extern struct scsi_event *sdev_evt_alloc(enum scsi_device_event evt_type, |
| @@ -370,12 +371,6 @@ extern int scsi_execute_req(struct scsi_device *sdev, const unsigned char *cmd, | |||
| 370 | int data_direction, void *buffer, unsigned bufflen, | 371 | int data_direction, void *buffer, unsigned bufflen, |
| 371 | struct scsi_sense_hdr *, int timeout, int retries, | 372 | struct scsi_sense_hdr *, int timeout, int retries, |
| 372 | int *resid); | 373 | int *resid); |
| 373 | extern int scsi_execute_async(struct scsi_device *sdev, | ||
| 374 | const unsigned char *cmd, int cmd_len, int data_direction, | ||
| 375 | void *buffer, unsigned bufflen, int use_sg, | ||
| 376 | int timeout, int retries, void *privdata, | ||
| 377 | void (*done)(void *, char *, int, int), | ||
| 378 | gfp_t gfp); | ||
| 379 | 374 | ||
| 380 | static inline int __must_check scsi_device_reprobe(struct scsi_device *sdev) | 375 | static inline int __must_check scsi_device_reprobe(struct scsi_device *sdev) |
| 381 | { | 376 | { |
| @@ -400,7 +395,8 @@ static inline unsigned int sdev_id(struct scsi_device *sdev) | |||
| 400 | */ | 395 | */ |
| 401 | static inline int scsi_device_online(struct scsi_device *sdev) | 396 | static inline int scsi_device_online(struct scsi_device *sdev) |
| 402 | { | 397 | { |
| 403 | return sdev->sdev_state != SDEV_OFFLINE; | 398 | return (sdev->sdev_state != SDEV_OFFLINE && |
| 399 | sdev->sdev_state != SDEV_DEL); | ||
| 404 | } | 400 | } |
| 405 | static inline int scsi_device_blocked(struct scsi_device *sdev) | 401 | static inline int scsi_device_blocked(struct scsi_device *sdev) |
| 406 | { | 402 | { |
diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h index b50aabe2861e..457588e1119b 100644 --- a/include/scsi/scsi_transport_iscsi.h +++ b/include/scsi/scsi_transport_iscsi.h | |||
| @@ -88,7 +88,7 @@ struct iscsi_transport { | |||
| 88 | uint64_t host_param_mask; | 88 | uint64_t host_param_mask; |
| 89 | struct iscsi_cls_session *(*create_session) (struct iscsi_endpoint *ep, | 89 | struct iscsi_cls_session *(*create_session) (struct iscsi_endpoint *ep, |
| 90 | uint16_t cmds_max, uint16_t qdepth, | 90 | uint16_t cmds_max, uint16_t qdepth, |
| 91 | uint32_t sn, uint32_t *hn); | 91 | uint32_t sn); |
| 92 | void (*destroy_session) (struct iscsi_cls_session *session); | 92 | void (*destroy_session) (struct iscsi_cls_session *session); |
| 93 | struct iscsi_cls_conn *(*create_conn) (struct iscsi_cls_session *sess, | 93 | struct iscsi_cls_conn *(*create_conn) (struct iscsi_cls_session *sess, |
| 94 | uint32_t cid); | 94 | uint32_t cid); |
| @@ -206,8 +206,6 @@ struct iscsi_cls_session { | |||
| 206 | struct iscsi_cls_host { | 206 | struct iscsi_cls_host { |
| 207 | atomic_t nr_scans; | 207 | atomic_t nr_scans; |
| 208 | struct mutex mutex; | 208 | struct mutex mutex; |
| 209 | struct workqueue_struct *scan_workq; | ||
| 210 | char scan_workq_name[20]; | ||
| 211 | }; | 209 | }; |
| 212 | 210 | ||
| 213 | extern void iscsi_host_for_each_session(struct Scsi_Host *shost, | 211 | extern void iscsi_host_for_each_session(struct Scsi_Host *shost, |
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..6add80fc2512 100644 --- a/include/sound/asound.h +++ b/include/sound/asound.h | |||
| @@ -23,9 +23,10 @@ | |||
| 23 | #ifndef __SOUND_ASOUND_H | 23 | #ifndef __SOUND_ASOUND_H |
| 24 | #define __SOUND_ASOUND_H | 24 | #define __SOUND_ASOUND_H |
| 25 | 25 | ||
| 26 | #include <linux/types.h> | ||
| 27 | |||
| 26 | #ifdef __KERNEL__ | 28 | #ifdef __KERNEL__ |
| 27 | #include <linux/ioctl.h> | 29 | #include <linux/ioctl.h> |
| 28 | #include <linux/types.h> | ||
| 29 | #include <linux/time.h> | 30 | #include <linux/time.h> |
| 30 | #include <asm/byteorder.h> | 31 | #include <asm/byteorder.h> |
| 31 | 32 | ||
| @@ -126,12 +127,10 @@ struct snd_hwdep_dsp_image { | |||
| 126 | unsigned long driver_data; /* W: driver-specific data */ | 127 | unsigned long driver_data; /* W: driver-specific data */ |
| 127 | }; | 128 | }; |
| 128 | 129 | ||
| 129 | enum { | 130 | #define SNDRV_HWDEP_IOCTL_PVERSION _IOR ('H', 0x00, int) |
| 130 | SNDRV_HWDEP_IOCTL_PVERSION = _IOR ('H', 0x00, int), | 131 | #define SNDRV_HWDEP_IOCTL_INFO _IOR ('H', 0x01, struct snd_hwdep_info) |
| 131 | SNDRV_HWDEP_IOCTL_INFO = _IOR ('H', 0x01, struct snd_hwdep_info), | 132 | #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), | 133 | #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 | 134 | ||
| 136 | /***************************************************************************** | 135 | /***************************************************************************** |
| 137 | * * | 136 | * * |
| @@ -342,7 +341,7 @@ struct snd_interval { | |||
| 342 | #define SNDRV_MASK_MAX 256 | 341 | #define SNDRV_MASK_MAX 256 |
| 343 | 342 | ||
| 344 | struct snd_mask { | 343 | struct snd_mask { |
| 345 | u_int32_t bits[(SNDRV_MASK_MAX+31)/32]; | 344 | __u32 bits[(SNDRV_MASK_MAX+31)/32]; |
| 346 | }; | 345 | }; |
| 347 | 346 | ||
| 348 | struct snd_pcm_hw_params { | 347 | struct snd_pcm_hw_params { |
| @@ -385,7 +384,7 @@ struct snd_pcm_sw_params { | |||
| 385 | 384 | ||
| 386 | struct snd_pcm_channel_info { | 385 | struct snd_pcm_channel_info { |
| 387 | unsigned int channel; | 386 | unsigned int channel; |
| 388 | off_t offset; /* mmap offset */ | 387 | __kernel_off_t offset; /* mmap offset */ |
| 389 | unsigned int first; /* offset to first sample in bits */ | 388 | unsigned int first; /* offset to first sample in bits */ |
| 390 | unsigned int step; /* samples distance in bits */ | 389 | unsigned int step; /* samples distance in bits */ |
| 391 | }; | 390 | }; |
| @@ -451,40 +450,35 @@ enum { | |||
| 451 | SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC, | 450 | SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC, |
| 452 | }; | 451 | }; |
| 453 | 452 | ||
| 454 | enum { | 453 | #define SNDRV_PCM_IOCTL_PVERSION _IOR('A', 0x00, int) |
| 455 | SNDRV_PCM_IOCTL_PVERSION = _IOR('A', 0x00, int), | 454 | #define SNDRV_PCM_IOCTL_INFO _IOR('A', 0x01, struct snd_pcm_info) |
| 456 | SNDRV_PCM_IOCTL_INFO = _IOR('A', 0x01, struct snd_pcm_info), | 455 | #define SNDRV_PCM_IOCTL_TSTAMP _IOW('A', 0x02, int) |
| 457 | SNDRV_PCM_IOCTL_TSTAMP = _IOW('A', 0x02, int), | 456 | #define SNDRV_PCM_IOCTL_TTSTAMP _IOW('A', 0x03, int) |
| 458 | SNDRV_PCM_IOCTL_TTSTAMP = _IOW('A', 0x03, int), | 457 | #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), | 458 | #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), | 459 | #define SNDRV_PCM_IOCTL_HW_FREE _IO('A', 0x12) |
| 461 | SNDRV_PCM_IOCTL_HW_FREE = _IO('A', 0x12), | 460 | #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), | 461 | #define SNDRV_PCM_IOCTL_STATUS _IOR('A', 0x20, struct snd_pcm_status) |
| 463 | SNDRV_PCM_IOCTL_STATUS = _IOR('A', 0x20, struct snd_pcm_status), | 462 | #define SNDRV_PCM_IOCTL_DELAY _IOR('A', 0x21, snd_pcm_sframes_t) |
| 464 | SNDRV_PCM_IOCTL_DELAY = _IOR('A', 0x21, snd_pcm_sframes_t), | 463 | #define SNDRV_PCM_IOCTL_HWSYNC _IO('A', 0x22) |
| 465 | SNDRV_PCM_IOCTL_HWSYNC = _IO('A', 0x22), | 464 | #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), | 465 | #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), | 466 | #define SNDRV_PCM_IOCTL_PREPARE _IO('A', 0x40) |
| 468 | SNDRV_PCM_IOCTL_PREPARE = _IO('A', 0x40), | 467 | #define SNDRV_PCM_IOCTL_RESET _IO('A', 0x41) |
| 469 | SNDRV_PCM_IOCTL_RESET = _IO('A', 0x41), | 468 | #define SNDRV_PCM_IOCTL_START _IO('A', 0x42) |
| 470 | SNDRV_PCM_IOCTL_START = _IO('A', 0x42), | 469 | #define SNDRV_PCM_IOCTL_DROP _IO('A', 0x43) |
| 471 | SNDRV_PCM_IOCTL_DROP = _IO('A', 0x43), | 470 | #define SNDRV_PCM_IOCTL_DRAIN _IO('A', 0x44) |
| 472 | SNDRV_PCM_IOCTL_DRAIN = _IO('A', 0x44), | 471 | #define SNDRV_PCM_IOCTL_PAUSE _IOW('A', 0x45, int) |
| 473 | SNDRV_PCM_IOCTL_PAUSE = _IOW('A', 0x45, int), | 472 | #define SNDRV_PCM_IOCTL_REWIND _IOW('A', 0x46, snd_pcm_uframes_t) |
| 474 | SNDRV_PCM_IOCTL_REWIND = _IOW('A', 0x46, snd_pcm_uframes_t), | 473 | #define SNDRV_PCM_IOCTL_RESUME _IO('A', 0x47) |
| 475 | SNDRV_PCM_IOCTL_RESUME = _IO('A', 0x47), | 474 | #define SNDRV_PCM_IOCTL_XRUN _IO('A', 0x48) |
| 476 | SNDRV_PCM_IOCTL_XRUN = _IO('A', 0x48), | 475 | #define SNDRV_PCM_IOCTL_FORWARD _IOW('A', 0x49, snd_pcm_uframes_t) |
| 477 | SNDRV_PCM_IOCTL_FORWARD = _IOW('A', 0x49, snd_pcm_uframes_t), | 476 | #define SNDRV_PCM_IOCTL_WRITEI_FRAMES _IOW('A', 0x50, struct snd_xferi) |
| 478 | SNDRV_PCM_IOCTL_WRITEI_FRAMES = _IOW('A', 0x50, struct snd_xferi), | 477 | #define SNDRV_PCM_IOCTL_READI_FRAMES _IOR('A', 0x51, struct snd_xferi) |
| 479 | SNDRV_PCM_IOCTL_READI_FRAMES = _IOR('A', 0x51, struct snd_xferi), | 478 | #define SNDRV_PCM_IOCTL_WRITEN_FRAMES _IOW('A', 0x52, struct snd_xfern) |
| 480 | SNDRV_PCM_IOCTL_WRITEN_FRAMES = _IOW('A', 0x52, struct snd_xfern), | 479 | #define SNDRV_PCM_IOCTL_READN_FRAMES _IOR('A', 0x53, struct snd_xfern) |
| 481 | SNDRV_PCM_IOCTL_READN_FRAMES = _IOR('A', 0x53, struct snd_xfern), | 480 | #define SNDRV_PCM_IOCTL_LINK _IOW('A', 0x60, int) |
| 482 | SNDRV_PCM_IOCTL_LINK = _IOW('A', 0x60, int), | 481 | #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 | 482 | ||
| 489 | /***************************************************************************** | 483 | /***************************************************************************** |
| 490 | * * | 484 | * * |
| @@ -538,14 +532,12 @@ struct snd_rawmidi_status { | |||
| 538 | unsigned char reserved[16]; /* reserved for future use */ | 532 | unsigned char reserved[16]; /* reserved for future use */ |
| 539 | }; | 533 | }; |
| 540 | 534 | ||
| 541 | enum { | 535 | #define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int) |
| 542 | SNDRV_RAWMIDI_IOCTL_PVERSION = _IOR('W', 0x00, int), | 536 | #define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info) |
| 543 | SNDRV_RAWMIDI_IOCTL_INFO = _IOR('W', 0x01, struct snd_rawmidi_info), | 537 | #define SNDRV_RAWMIDI_IOCTL_PARAMS _IOWR('W', 0x10, struct snd_rawmidi_params) |
| 544 | SNDRV_RAWMIDI_IOCTL_PARAMS = _IOWR('W', 0x10, struct snd_rawmidi_params), | 538 | #define SNDRV_RAWMIDI_IOCTL_STATUS _IOWR('W', 0x20, struct snd_rawmidi_status) |
| 545 | SNDRV_RAWMIDI_IOCTL_STATUS = _IOWR('W', 0x20, struct snd_rawmidi_status), | 539 | #define SNDRV_RAWMIDI_IOCTL_DROP _IOW('W', 0x30, int) |
| 546 | SNDRV_RAWMIDI_IOCTL_DROP = _IOW('W', 0x30, int), | 540 | #define SNDRV_RAWMIDI_IOCTL_DRAIN _IOW('W', 0x31, int) |
| 547 | SNDRV_RAWMIDI_IOCTL_DRAIN = _IOW('W', 0x31, int), | ||
| 548 | }; | ||
| 549 | 541 | ||
| 550 | /* | 542 | /* |
| 551 | * Timer section - /dev/snd/timer | 543 | * Timer section - /dev/snd/timer |
| @@ -654,23 +646,21 @@ struct snd_timer_status { | |||
| 654 | unsigned char reserved[64]; /* reserved */ | 646 | unsigned char reserved[64]; /* reserved */ |
| 655 | }; | 647 | }; |
| 656 | 648 | ||
| 657 | enum { | 649 | #define SNDRV_TIMER_IOCTL_PVERSION _IOR('T', 0x00, int) |
| 658 | SNDRV_TIMER_IOCTL_PVERSION = _IOR('T', 0x00, int), | 650 | #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), | 651 | #define SNDRV_TIMER_IOCTL_TREAD _IOW('T', 0x02, int) |
| 660 | SNDRV_TIMER_IOCTL_TREAD = _IOW('T', 0x02, int), | 652 | #define SNDRV_TIMER_IOCTL_GINFO _IOWR('T', 0x03, struct snd_timer_ginfo) |
| 661 | SNDRV_TIMER_IOCTL_GINFO = _IOWR('T', 0x03, struct snd_timer_ginfo), | 653 | #define SNDRV_TIMER_IOCTL_GPARAMS _IOW('T', 0x04, struct snd_timer_gparams) |
| 662 | SNDRV_TIMER_IOCTL_GPARAMS = _IOW('T', 0x04, struct snd_timer_gparams), | 654 | #define SNDRV_TIMER_IOCTL_GSTATUS _IOWR('T', 0x05, struct snd_timer_gstatus) |
| 663 | SNDRV_TIMER_IOCTL_GSTATUS = _IOWR('T', 0x05, struct snd_timer_gstatus), | 655 | #define SNDRV_TIMER_IOCTL_SELECT _IOW('T', 0x10, struct snd_timer_select) |
| 664 | SNDRV_TIMER_IOCTL_SELECT = _IOW('T', 0x10, struct snd_timer_select), | 656 | #define SNDRV_TIMER_IOCTL_INFO _IOR('T', 0x11, struct snd_timer_info) |
| 665 | SNDRV_TIMER_IOCTL_INFO = _IOR('T', 0x11, struct snd_timer_info), | 657 | #define SNDRV_TIMER_IOCTL_PARAMS _IOW('T', 0x12, struct snd_timer_params) |
| 666 | SNDRV_TIMER_IOCTL_PARAMS = _IOW('T', 0x12, struct snd_timer_params), | 658 | #define SNDRV_TIMER_IOCTL_STATUS _IOR('T', 0x14, struct snd_timer_status) |
| 667 | SNDRV_TIMER_IOCTL_STATUS = _IOR('T', 0x14, struct snd_timer_status), | 659 | /* 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 */ | 660 | #define SNDRV_TIMER_IOCTL_START _IO('T', 0xa0) |
| 669 | SNDRV_TIMER_IOCTL_START = _IO('T', 0xa0), | 661 | #define SNDRV_TIMER_IOCTL_STOP _IO('T', 0xa1) |
| 670 | SNDRV_TIMER_IOCTL_STOP = _IO('T', 0xa1), | 662 | #define SNDRV_TIMER_IOCTL_CONTINUE _IO('T', 0xa2) |
| 671 | SNDRV_TIMER_IOCTL_CONTINUE = _IO('T', 0xa2), | 663 | #define SNDRV_TIMER_IOCTL_PAUSE _IO('T', 0xa3) |
| 672 | SNDRV_TIMER_IOCTL_PAUSE = _IO('T', 0xa3), | ||
| 673 | }; | ||
| 674 | 664 | ||
| 675 | struct snd_timer_read { | 665 | struct snd_timer_read { |
| 676 | unsigned int resolution; | 666 | unsigned int resolution; |
| @@ -789,7 +779,7 @@ struct snd_ctl_elem_info { | |||
| 789 | snd_ctl_elem_type_t type; /* R: value type - SNDRV_CTL_ELEM_TYPE_* */ | 779 | snd_ctl_elem_type_t type; /* R: value type - SNDRV_CTL_ELEM_TYPE_* */ |
| 790 | unsigned int access; /* R: value access (bitmask) - SNDRV_CTL_ELEM_ACCESS_* */ | 780 | unsigned int access; /* R: value access (bitmask) - SNDRV_CTL_ELEM_ACCESS_* */ |
| 791 | unsigned int count; /* count of values */ | 781 | unsigned int count; /* count of values */ |
| 792 | pid_t owner; /* owner's PID of this control */ | 782 | __kernel_pid_t owner; /* owner's PID of this control */ |
| 793 | union { | 783 | union { |
| 794 | struct { | 784 | struct { |
| 795 | long min; /* R: minimum value */ | 785 | long min; /* R: minimum value */ |
| @@ -847,33 +837,31 @@ struct snd_ctl_tlv { | |||
| 847 | unsigned int tlv[0]; /* first TLV */ | 837 | unsigned int tlv[0]; /* first TLV */ |
| 848 | }; | 838 | }; |
| 849 | 839 | ||
| 850 | enum { | 840 | #define SNDRV_CTL_IOCTL_PVERSION _IOR('U', 0x00, int) |
| 851 | SNDRV_CTL_IOCTL_PVERSION = _IOR('U', 0x00, int), | 841 | #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), | 842 | #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), | 843 | #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), | 844 | #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), | 845 | #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), | 846 | #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), | 847 | #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), | 848 | #define SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS _IOWR('U', 0x16, int) |
| 859 | SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS = _IOWR('U', 0x16, int), | 849 | #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), | 850 | #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), | 851 | #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), | 852 | #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), | 853 | #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), | 854 | #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), | 855 | #define SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE _IOWR('U', 0x20, int) |
| 866 | SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE = _IOWR('U', 0x20, int), | 856 | #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), | 857 | #define SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE _IOR('U', 0x30, int) |
| 868 | SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE = _IOR('U', 0x30, int), | 858 | #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), | 859 | #define SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE _IOW('U', 0x32, int) |
| 870 | SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE = _IOW('U', 0x32, int), | 860 | #define SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE _IOWR('U', 0x40, int) |
| 871 | SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE = _IOWR('U', 0x40, int), | 861 | #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), | 862 | #define SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE _IOW('U', 0x42, int) |
| 873 | SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE = _IOW('U', 0x42, int), | 863 | #define SNDRV_CTL_IOCTL_POWER _IOWR('U', 0xd0, int) |
| 874 | SNDRV_CTL_IOCTL_POWER = _IOWR('U', 0xd0, int), | 864 | #define SNDRV_CTL_IOCTL_POWER_STATE _IOR('U', 0xd1, int) |
| 875 | SNDRV_CTL_IOCTL_POWER_STATE = _IOR('U', 0xd1, int), | ||
| 876 | }; | ||
| 877 | 865 | ||
| 878 | /* | 866 | /* |
| 879 | * Read interface. | 867 | * Read interface. |
| @@ -919,18 +907,4 @@ struct snd_ctl_event { | |||
| 919 | #define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream" | 907 | #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 | 908 | #define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what |
| 921 | 909 | ||
| 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 */ | 910 | #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/emu10k1.h b/include/sound/emu10k1.h index 10ee28eac018..6a664c3f7c1e 100644 --- a/include/sound/emu10k1.h +++ b/include/sound/emu10k1.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef __SOUND_EMU10K1_H | 1 | #ifndef __SOUND_EMU10K1_H |
| 2 | #define __SOUND_EMU10K1_H | 2 | #define __SOUND_EMU10K1_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | /* | 6 | /* |
| 5 | * Copyright (c) by Jaroslav Kysela <perex@perex.cz>, | 7 | * Copyright (c) by Jaroslav Kysela <perex@perex.cz>, |
| 6 | * Creative Labs, Inc. | 8 | * Creative Labs, Inc. |
| @@ -34,6 +36,7 @@ | |||
| 34 | #include <sound/timer.h> | 36 | #include <sound/timer.h> |
| 35 | #include <linux/interrupt.h> | 37 | #include <linux/interrupt.h> |
| 36 | #include <linux/mutex.h> | 38 | #include <linux/mutex.h> |
| 39 | |||
| 37 | #include <asm/io.h> | 40 | #include <asm/io.h> |
| 38 | 41 | ||
| 39 | /* ------------------- DEFINES -------------------- */ | 42 | /* ------------------- DEFINES -------------------- */ |
| @@ -2171,7 +2174,7 @@ struct snd_emu10k1_fx8010_code { | |||
| 2171 | char name[128]; | 2174 | char name[128]; |
| 2172 | 2175 | ||
| 2173 | DECLARE_BITMAP(gpr_valid, 0x200); /* bitmask of valid initializers */ | 2176 | DECLARE_BITMAP(gpr_valid, 0x200); /* bitmask of valid initializers */ |
| 2174 | u_int32_t __user *gpr_map; /* initializers */ | 2177 | __u32 __user *gpr_map; /* initializers */ |
| 2175 | 2178 | ||
| 2176 | unsigned int gpr_add_control_count; /* count of GPR controls to add/replace */ | 2179 | unsigned int gpr_add_control_count; /* count of GPR controls to add/replace */ |
| 2177 | struct snd_emu10k1_fx8010_control_gpr __user *gpr_add_controls; /* GPR controls to add/replace */ | 2180 | struct snd_emu10k1_fx8010_control_gpr __user *gpr_add_controls; /* GPR controls to add/replace */ |
| @@ -2184,11 +2187,11 @@ struct snd_emu10k1_fx8010_code { | |||
| 2184 | struct snd_emu10k1_fx8010_control_gpr __user *gpr_list_controls; /* listed GPR controls */ | 2187 | struct snd_emu10k1_fx8010_control_gpr __user *gpr_list_controls; /* listed GPR controls */ |
| 2185 | 2188 | ||
| 2186 | DECLARE_BITMAP(tram_valid, 0x100); /* bitmask of valid initializers */ | 2189 | DECLARE_BITMAP(tram_valid, 0x100); /* bitmask of valid initializers */ |
| 2187 | u_int32_t __user *tram_data_map; /* data initializers */ | 2190 | __u32 __user *tram_data_map; /* data initializers */ |
| 2188 | u_int32_t __user *tram_addr_map; /* map initializers */ | 2191 | __u32 __user *tram_addr_map; /* map initializers */ |
| 2189 | 2192 | ||
| 2190 | DECLARE_BITMAP(code_valid, 1024); /* bitmask of valid instructions */ | 2193 | DECLARE_BITMAP(code_valid, 1024); /* bitmask of valid instructions */ |
| 2191 | u_int32_t __user *code; /* one instruction - 64 bits */ | 2194 | __u32 __user *code; /* one instruction - 64 bits */ |
| 2192 | }; | 2195 | }; |
| 2193 | 2196 | ||
| 2194 | struct snd_emu10k1_fx8010_tram { | 2197 | struct snd_emu10k1_fx8010_tram { |
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/tea575x-tuner.h b/include/sound/tea575x-tuner.h index 426899e529c5..5718a02d3afb 100644 --- a/include/sound/tea575x-tuner.h +++ b/include/sound/tea575x-tuner.h | |||
| @@ -22,8 +22,9 @@ | |||
| 22 | * | 22 | * |
| 23 | */ | 23 | */ |
| 24 | 24 | ||
| 25 | #include <linux/videodev.h> | 25 | #include <linux/videodev2.h> |
| 26 | #include <media/v4l2-dev.h> | 26 | #include <media/v4l2-dev.h> |
| 27 | #include <media/v4l2-ioctl.h> | ||
| 27 | 28 | ||
| 28 | struct snd_tea575x; | 29 | struct snd_tea575x; |
| 29 | 30 | ||
| @@ -35,11 +36,10 @@ struct snd_tea575x_ops { | |||
| 35 | 36 | ||
| 36 | struct snd_tea575x { | 37 | struct snd_tea575x { |
| 37 | struct snd_card *card; | 38 | struct snd_card *card; |
| 38 | struct video_device vd; /* video device */ | 39 | struct video_device *vd; /* video device */ |
| 39 | struct v4l2_file_operations fops; | ||
| 40 | int dev_nr; /* requested device number + 1 */ | 40 | int dev_nr; /* requested device number + 1 */ |
| 41 | int vd_registered; /* video device is registered */ | ||
| 42 | int tea5759; /* 5759 chip is present */ | 41 | int tea5759; /* 5759 chip is present */ |
| 42 | int mute; /* Device is muted? */ | ||
| 43 | unsigned int freq_fixup; /* crystal onboard */ | 43 | unsigned int freq_fixup; /* crystal onboard */ |
| 44 | unsigned int val; /* hw value */ | 44 | unsigned int val; /* hw value */ |
| 45 | unsigned long freq; /* frequency */ | 45 | unsigned long freq; /* frequency */ |
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 | ||
diff --git a/include/video/broadsheetfb.h b/include/video/broadsheetfb.h new file mode 100644 index 000000000000..a758534c0272 --- /dev/null +++ b/include/video/broadsheetfb.h | |||
| @@ -0,0 +1,59 @@ | |||
| 1 | /* | ||
| 2 | * broadsheetfb.h - definitions for the broadsheet framebuffer driver | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008 by Jaya Kumar | ||
| 5 | * | ||
| 6 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 7 | * License. See the file COPYING in the main directory of this archive for | ||
| 8 | * more details. | ||
| 9 | * | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef _LINUX_BROADSHEETFB_H_ | ||
| 13 | #define _LINUX_BROADSHEETFB_H_ | ||
| 14 | |||
| 15 | /* Broadsheet command defines */ | ||
| 16 | #define BS_CMD_INIT_SYS_RUN 0x06 | ||
| 17 | #define BS_CMD_INIT_DSPE_CFG 0x09 | ||
| 18 | #define BS_CMD_INIT_DSPE_TMG 0x0A | ||
| 19 | #define BS_CMD_INIT_ROTMODE 0x0B | ||
| 20 | #define BS_CMD_RD_REG 0x10 | ||
| 21 | #define BS_CMD_WR_REG 0x11 | ||
| 22 | #define BS_CMD_LD_IMG 0x20 | ||
| 23 | #define BS_CMD_LD_IMG_AREA 0x22 | ||
| 24 | #define BS_CMD_LD_IMG_END 0x23 | ||
| 25 | #define BS_CMD_WAIT_DSPE_TRG 0x28 | ||
| 26 | #define BS_CMD_WAIT_DSPE_FREND 0x29 | ||
| 27 | #define BS_CMD_RD_WFM_INFO 0x30 | ||
| 28 | #define BS_CMD_UPD_INIT 0x32 | ||
| 29 | #define BS_CMD_UPD_FULL 0x33 | ||
| 30 | #define BS_CMD_UPD_GDRV_CLR 0x37 | ||
| 31 | |||
| 32 | /* Broadsheet pin interface specific defines */ | ||
| 33 | #define BS_CS 0x01 | ||
| 34 | #define BS_DC 0x02 | ||
| 35 | #define BS_WR 0x03 | ||
| 36 | |||
| 37 | /* struct used by broadsheet. board specific stuff comes from *board */ | ||
| 38 | struct broadsheetfb_par { | ||
| 39 | struct fb_info *info; | ||
| 40 | struct broadsheet_board *board; | ||
| 41 | void (*write_reg)(struct broadsheetfb_par *, u16 reg, u16 val); | ||
| 42 | u16 (*read_reg)(struct broadsheetfb_par *, u16 reg); | ||
| 43 | wait_queue_head_t waitq; | ||
| 44 | }; | ||
| 45 | |||
| 46 | /* board specific routines */ | ||
| 47 | struct broadsheet_board { | ||
| 48 | struct module *owner; | ||
| 49 | int (*init)(struct broadsheetfb_par *); | ||
| 50 | int (*wait_for_rdy)(struct broadsheetfb_par *); | ||
| 51 | void (*set_ctl)(struct broadsheetfb_par *, unsigned char, u8); | ||
| 52 | void (*set_hdb)(struct broadsheetfb_par *, u16); | ||
| 53 | u16 (*get_hdb)(struct broadsheetfb_par *); | ||
| 54 | void (*cleanup)(struct broadsheetfb_par *); | ||
| 55 | int (*get_panel_type)(void); | ||
| 56 | int (*setup_irq)(struct fb_info *); | ||
| 57 | }; | ||
| 58 | |||
| 59 | #endif | ||
