diff options
Diffstat (limited to 'include')
264 files changed, 9975 insertions, 2093 deletions
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h index 4db89e98535d..82ec6a3c0500 100644 --- a/include/acpi/acpixf.h +++ b/include/acpi/acpixf.h | |||
| @@ -47,7 +47,7 @@ | |||
| 47 | 47 | ||
| 48 | /* Current ACPICA subsystem version in YYYYMMDD format */ | 48 | /* Current ACPICA subsystem version in YYYYMMDD format */ |
| 49 | 49 | ||
| 50 | #define ACPI_CA_VERSION 0x20090320 | 50 | #define ACPI_CA_VERSION 0x20090521 |
| 51 | 51 | ||
| 52 | #include "actypes.h" | 52 | #include "actypes.h" |
| 53 | #include "actbl.h" | 53 | #include "actbl.h" |
| @@ -201,6 +201,8 @@ acpi_evaluate_object_typed(acpi_handle object, | |||
| 201 | acpi_status | 201 | acpi_status |
| 202 | acpi_get_object_info(acpi_handle handle, struct acpi_buffer *return_buffer); | 202 | acpi_get_object_info(acpi_handle handle, struct acpi_buffer *return_buffer); |
| 203 | 203 | ||
| 204 | acpi_status acpi_install_method(u8 *buffer); | ||
| 205 | |||
| 204 | acpi_status | 206 | acpi_status |
| 205 | acpi_get_next_object(acpi_object_type type, | 207 | acpi_get_next_object(acpi_object_type type, |
| 206 | acpi_handle parent, | 208 | acpi_handle parent, |
| @@ -375,7 +377,7 @@ acpi_status acpi_leave_sleep_state_prep(u8 sleep_state); | |||
| 375 | acpi_status acpi_leave_sleep_state(u8 sleep_state); | 377 | acpi_status acpi_leave_sleep_state(u8 sleep_state); |
| 376 | 378 | ||
| 377 | /* | 379 | /* |
| 378 | * Debug output | 380 | * Error/Warning output |
| 379 | */ | 381 | */ |
| 380 | void ACPI_INTERNAL_VAR_XFACE | 382 | void ACPI_INTERNAL_VAR_XFACE |
| 381 | acpi_error(const char *module_name, | 383 | acpi_error(const char *module_name, |
| @@ -394,6 +396,9 @@ void ACPI_INTERNAL_VAR_XFACE | |||
| 394 | acpi_info(const char *module_name, | 396 | acpi_info(const char *module_name, |
| 395 | u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3); | 397 | u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3); |
| 396 | 398 | ||
| 399 | /* | ||
| 400 | * Debug output | ||
| 401 | */ | ||
| 397 | #ifdef ACPI_DEBUG_OUTPUT | 402 | #ifdef ACPI_DEBUG_OUTPUT |
| 398 | 403 | ||
| 399 | void ACPI_INTERNAL_VAR_XFACE | 404 | void ACPI_INTERNAL_VAR_XFACE |
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h index f555d927f7c0..37ba576d06e8 100644 --- a/include/acpi/actypes.h +++ b/include/acpi/actypes.h | |||
| @@ -429,20 +429,12 @@ typedef unsigned long long acpi_integer; | |||
| 429 | 429 | ||
| 430 | /* Data manipulation */ | 430 | /* Data manipulation */ |
| 431 | 431 | ||
| 432 | #define ACPI_LOWORD(l) ((u16)(u32)(l)) | 432 | #define ACPI_LOBYTE(integer) ((u8) (u16)(integer)) |
| 433 | #define ACPI_HIWORD(l) ((u16)((((u32)(l)) >> 16) & 0xFFFF)) | 433 | #define ACPI_HIBYTE(integer) ((u8) (((u16)(integer)) >> 8)) |
| 434 | #define ACPI_LOBYTE(l) ((u8)(u16)(l)) | 434 | #define ACPI_LOWORD(integer) ((u16) (u32)(integer)) |
| 435 | #define ACPI_HIBYTE(l) ((u8)((((u16)(l)) >> 8) & 0xFF)) | 435 | #define ACPI_HIWORD(integer) ((u16)(((u32)(integer)) >> 16)) |
| 436 | 436 | #define ACPI_LODWORD(integer64) ((u32) (u64)(integer64)) | |
| 437 | /* Full 64-bit integer must be available on both 32-bit and 64-bit platforms */ | 437 | #define ACPI_HIDWORD(integer64) ((u32)(((u64)(integer64)) >> 32)) |
| 438 | |||
| 439 | struct acpi_integer_overlay { | ||
| 440 | u32 lo_dword; | ||
| 441 | u32 hi_dword; | ||
| 442 | }; | ||
| 443 | |||
| 444 | #define ACPI_LODWORD(integer) (ACPI_CAST_PTR (struct acpi_integer_overlay, &integer)->lo_dword) | ||
| 445 | #define ACPI_HIDWORD(integer) (ACPI_CAST_PTR (struct acpi_integer_overlay, &integer)->hi_dword) | ||
| 446 | 438 | ||
| 447 | #define ACPI_SET_BIT(target,bit) ((target) |= (bit)) | 439 | #define ACPI_SET_BIT(target,bit) ((target) |= (bit)) |
| 448 | #define ACPI_CLEAR_BIT(target,bit) ((target) &= ~(bit)) | 440 | #define ACPI_CLEAR_BIT(target,bit) ((target) &= ~(bit)) |
diff --git a/include/acpi/platform/acgcc.h b/include/acpi/platform/acgcc.h index 8e2cdc57b197..935c5d7fc86e 100644 --- a/include/acpi/platform/acgcc.h +++ b/include/acpi/platform/acgcc.h | |||
| @@ -62,4 +62,8 @@ | |||
| 62 | */ | 62 | */ |
| 63 | #define ACPI_UNUSED_VAR __attribute__ ((unused)) | 63 | #define ACPI_UNUSED_VAR __attribute__ ((unused)) |
| 64 | 64 | ||
| 65 | #ifdef _ANSI | ||
| 66 | #define inline | ||
| 67 | #endif | ||
| 68 | |||
| 65 | #endif /* __ACGCC_H__ */ | 69 | #endif /* __ACGCC_H__ */ |
diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h index 6d49b2a498c4..fcb8e4b159b1 100644 --- a/include/acpi/platform/aclinux.h +++ b/include/acpi/platform/aclinux.h | |||
| @@ -1,11 +1,11 @@ | |||
| 1 | /****************************************************************************** | 1 | /****************************************************************************** |
| 2 | * | 2 | * |
| 3 | * Name: aclinux.h - OS specific defines, etc. | 3 | * Name: aclinux.h - OS specific defines, etc. for Linux |
| 4 | * | 4 | * |
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2008, Intel Corp. | 8 | * Copyright (C) 2000 - 2009, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
| @@ -44,10 +44,13 @@ | |||
| 44 | #ifndef __ACLINUX_H__ | 44 | #ifndef __ACLINUX_H__ |
| 45 | #define __ACLINUX_H__ | 45 | #define __ACLINUX_H__ |
| 46 | 46 | ||
| 47 | /* Common (in-kernel/user-space) ACPICA configuration */ | ||
| 48 | |||
| 47 | #define ACPI_USE_SYSTEM_CLIBRARY | 49 | #define ACPI_USE_SYSTEM_CLIBRARY |
| 48 | #define ACPI_USE_DO_WHILE_0 | 50 | #define ACPI_USE_DO_WHILE_0 |
| 49 | #define ACPI_MUTEX_TYPE ACPI_BINARY_SEMAPHORE | 51 | #define ACPI_MUTEX_TYPE ACPI_BINARY_SEMAPHORE |
| 50 | 52 | ||
| 53 | |||
| 51 | #ifdef __KERNEL__ | 54 | #ifdef __KERNEL__ |
| 52 | 55 | ||
| 53 | #include <linux/string.h> | 56 | #include <linux/string.h> |
| @@ -63,15 +66,18 @@ | |||
| 63 | #include <linux/spinlock_types.h> | 66 | #include <linux/spinlock_types.h> |
| 64 | #include <asm/current.h> | 67 | #include <asm/current.h> |
| 65 | 68 | ||
| 66 | /* Host-dependent types and defines */ | 69 | /* Host-dependent types and defines for in-kernel ACPICA */ |
| 67 | 70 | ||
| 68 | #define ACPI_MACHINE_WIDTH BITS_PER_LONG | 71 | #define ACPI_MACHINE_WIDTH BITS_PER_LONG |
| 69 | #define acpi_cache_t struct kmem_cache | ||
| 70 | #define acpi_spinlock spinlock_t * | ||
| 71 | #define ACPI_EXPORT_SYMBOL(symbol) EXPORT_SYMBOL(symbol); | 72 | #define ACPI_EXPORT_SYMBOL(symbol) EXPORT_SYMBOL(symbol); |
| 72 | #define strtoul simple_strtoul | 73 | #define strtoul simple_strtoul |
| 73 | 74 | ||
| 74 | #else /* !__KERNEL__ */ | 75 | #define acpi_cache_t struct kmem_cache |
| 76 | #define acpi_spinlock spinlock_t * | ||
| 77 | #define acpi_cpu_flags unsigned long | ||
| 78 | #define acpi_thread_id struct task_struct * | ||
| 79 | |||
| 80 | #else /* !__KERNEL__ */ | ||
| 75 | 81 | ||
| 76 | #include <stdarg.h> | 82 | #include <stdarg.h> |
| 77 | #include <string.h> | 83 | #include <string.h> |
| @@ -79,6 +85,11 @@ | |||
| 79 | #include <ctype.h> | 85 | #include <ctype.h> |
| 80 | #include <unistd.h> | 86 | #include <unistd.h> |
| 81 | 87 | ||
| 88 | /* Host-dependent types and defines for user-space ACPICA */ | ||
| 89 | |||
| 90 | #define ACPI_FLUSH_CPU_CACHE() | ||
| 91 | #define acpi_thread_id pthread_t | ||
| 92 | |||
| 82 | #if defined(__ia64__) || defined(__x86_64__) | 93 | #if defined(__ia64__) || defined(__x86_64__) |
| 83 | #define ACPI_MACHINE_WIDTH 64 | 94 | #define ACPI_MACHINE_WIDTH 64 |
| 84 | #define COMPILER_DEPENDENT_INT64 long | 95 | #define COMPILER_DEPENDENT_INT64 long |
| @@ -94,17 +105,17 @@ | |||
| 94 | #define __cdecl | 105 | #define __cdecl |
| 95 | #endif | 106 | #endif |
| 96 | 107 | ||
| 97 | #define ACPI_FLUSH_CPU_CACHE() | 108 | #endif /* __KERNEL__ */ |
| 98 | #endif /* __KERNEL__ */ | ||
| 99 | 109 | ||
| 100 | /* Linux uses GCC */ | 110 | /* Linux uses GCC */ |
| 101 | 111 | ||
| 102 | #include "acgcc.h" | 112 | #include "acgcc.h" |
| 103 | 113 | ||
| 104 | #define acpi_cpu_flags unsigned long | ||
| 105 | |||
| 106 | #define acpi_thread_id struct task_struct * | ||
| 107 | 114 | ||
| 115 | #ifdef __KERNEL__ | ||
| 116 | /* | ||
| 117 | * Overrides for in-kernel ACPICA | ||
| 118 | */ | ||
| 108 | static inline acpi_thread_id acpi_os_get_thread_id(void) | 119 | static inline acpi_thread_id acpi_os_get_thread_id(void) |
| 109 | { | 120 | { |
| 110 | return current; | 121 | return current; |
| @@ -119,30 +130,32 @@ static inline acpi_thread_id acpi_os_get_thread_id(void) | |||
| 119 | #include <acpi/actypes.h> | 130 | #include <acpi/actypes.h> |
| 120 | static inline void *acpi_os_allocate(acpi_size size) | 131 | static inline void *acpi_os_allocate(acpi_size size) |
| 121 | { | 132 | { |
| 122 | return kmalloc(size, irqs_disabled()? GFP_ATOMIC : GFP_KERNEL); | 133 | return kmalloc(size, irqs_disabled() ? GFP_ATOMIC : GFP_KERNEL); |
| 123 | } | 134 | } |
| 135 | |||
| 124 | static inline void *acpi_os_allocate_zeroed(acpi_size size) | 136 | static inline void *acpi_os_allocate_zeroed(acpi_size size) |
| 125 | { | 137 | { |
| 126 | return kzalloc(size, irqs_disabled()? GFP_ATOMIC : GFP_KERNEL); | 138 | return kzalloc(size, irqs_disabled() ? GFP_ATOMIC : GFP_KERNEL); |
| 127 | } | 139 | } |
| 128 | 140 | ||
| 129 | static inline void *acpi_os_acquire_object(acpi_cache_t * cache) | 141 | static inline void *acpi_os_acquire_object(acpi_cache_t * cache) |
| 130 | { | 142 | { |
| 131 | return kmem_cache_zalloc(cache, | 143 | return kmem_cache_zalloc(cache, |
| 132 | irqs_disabled()? GFP_ATOMIC : GFP_KERNEL); | 144 | irqs_disabled() ? GFP_ATOMIC : GFP_KERNEL); |
| 133 | } | 145 | } |
| 134 | 146 | ||
| 135 | #define ACPI_ALLOCATE(a) acpi_os_allocate(a) | 147 | #define ACPI_ALLOCATE(a) acpi_os_allocate(a) |
| 136 | #define ACPI_ALLOCATE_ZEROED(a) acpi_os_allocate_zeroed(a) | 148 | #define ACPI_ALLOCATE_ZEROED(a) acpi_os_allocate_zeroed(a) |
| 137 | #define ACPI_FREE(a) kfree(a) | 149 | #define ACPI_FREE(a) kfree(a) |
| 138 | 150 | ||
| 139 | /* | 151 | /* Used within ACPICA to show where it is safe to preempt execution */ |
| 140 | * We need to show where it is safe to preempt execution of ACPICA | 152 | |
| 141 | */ | 153 | #define ACPI_PREEMPTION_POINT() \ |
| 142 | #define ACPI_PREEMPTION_POINT() \ | 154 | do { \ |
| 143 | do { \ | 155 | if (!irqs_disabled()) \ |
| 144 | if (!irqs_disabled()) \ | 156 | cond_resched(); \ |
| 145 | cond_resched(); \ | ||
| 146 | } while (0) | 157 | } while (0) |
| 147 | 158 | ||
| 148 | #endif /* __ACLINUX_H__ */ | 159 | #endif /* __KERNEL__ */ |
| 160 | |||
| 161 | #endif /* __ACLINUX_H__ */ | ||
diff --git a/include/asm-generic/Kbuild b/include/asm-generic/Kbuild index 4c9932a2503f..eb62334cda29 100644 --- a/include/asm-generic/Kbuild +++ b/include/asm-generic/Kbuild | |||
| @@ -1,11 +1,33 @@ | |||
| 1 | header-y += auxvec.h | ||
| 2 | header-y += bitsperlong.h | ||
| 1 | header-y += errno-base.h | 3 | header-y += errno-base.h |
| 2 | header-y += errno.h | 4 | header-y += errno.h |
| 3 | header-y += fcntl.h | 5 | header-y += fcntl.h |
| 4 | header-y += ioctl.h | 6 | header-y += ioctl.h |
| 7 | header-y += ioctls.h | ||
| 8 | header-y += ipcbuf.h | ||
| 9 | header-y += mman-common.h | ||
| 5 | header-y += mman.h | 10 | header-y += mman.h |
| 11 | header-y += msgbuf.h | ||
| 12 | header-y += param.h | ||
| 6 | header-y += poll.h | 13 | header-y += poll.h |
| 14 | header-y += posix_types.h | ||
| 15 | header-y += sembuf.h | ||
| 16 | header-y += setup.h | ||
| 17 | header-y += shmbuf.h | ||
| 18 | header-y += shmparam.h | ||
| 19 | header-y += signal-defs.h | ||
| 7 | header-y += signal.h | 20 | header-y += signal.h |
| 21 | header-y += socket.h | ||
| 22 | header-y += sockios.h | ||
| 23 | header-y += stat.h | ||
| 8 | header-y += statfs.h | 24 | header-y += statfs.h |
| 25 | header-y += swab.h | ||
| 26 | header-y += termbits.h | ||
| 27 | header-y += termios.h | ||
| 28 | header-y += types.h | ||
| 29 | header-y += ucontext.h | ||
| 30 | header-y += unistd.h | ||
| 9 | 31 | ||
| 10 | unifdef-y += int-l64.h | 32 | unifdef-y += int-l64.h |
| 11 | unifdef-y += int-ll64.h | 33 | unifdef-y += int-ll64.h |
diff --git a/include/asm-generic/Kbuild.asm b/include/asm-generic/Kbuild.asm index 70d185534b9d..290910e4ede4 100644 --- a/include/asm-generic/Kbuild.asm +++ b/include/asm-generic/Kbuild.asm | |||
| @@ -9,6 +9,7 @@ unifdef-y += a.out.h | |||
| 9 | endif | 9 | endif |
| 10 | unifdef-y += auxvec.h | 10 | unifdef-y += auxvec.h |
| 11 | unifdef-y += byteorder.h | 11 | unifdef-y += byteorder.h |
| 12 | unifdef-y += bitsperlong.h | ||
| 12 | unifdef-y += errno.h | 13 | unifdef-y += errno.h |
| 13 | unifdef-y += fcntl.h | 14 | unifdef-y += fcntl.h |
| 14 | unifdef-y += ioctl.h | 15 | unifdef-y += ioctl.h |
diff --git a/include/asm-generic/atomic-long.h b/include/asm-generic/atomic-long.h new file mode 100644 index 000000000000..b7babf0206b8 --- /dev/null +++ b/include/asm-generic/atomic-long.h | |||
| @@ -0,0 +1,258 @@ | |||
| 1 | #ifndef _ASM_GENERIC_ATOMIC_LONG_H | ||
| 2 | #define _ASM_GENERIC_ATOMIC_LONG_H | ||
| 3 | /* | ||
| 4 | * Copyright (C) 2005 Silicon Graphics, Inc. | ||
| 5 | * Christoph Lameter | ||
| 6 | * | ||
| 7 | * Allows to provide arch independent atomic definitions without the need to | ||
| 8 | * edit all arch specific atomic.h files. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #include <asm/types.h> | ||
| 12 | |||
| 13 | /* | ||
| 14 | * Suppport for atomic_long_t | ||
| 15 | * | ||
| 16 | * Casts for parameters are avoided for existing atomic functions in order to | ||
| 17 | * avoid issues with cast-as-lval under gcc 4.x and other limitations that the | ||
| 18 | * macros of a platform may have. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #if BITS_PER_LONG == 64 | ||
| 22 | |||
| 23 | typedef atomic64_t atomic_long_t; | ||
| 24 | |||
| 25 | #define ATOMIC_LONG_INIT(i) ATOMIC64_INIT(i) | ||
| 26 | |||
| 27 | static inline long atomic_long_read(atomic_long_t *l) | ||
| 28 | { | ||
| 29 | atomic64_t *v = (atomic64_t *)l; | ||
| 30 | |||
| 31 | return (long)atomic64_read(v); | ||
| 32 | } | ||
| 33 | |||
| 34 | static inline void atomic_long_set(atomic_long_t *l, long i) | ||
| 35 | { | ||
| 36 | atomic64_t *v = (atomic64_t *)l; | ||
| 37 | |||
| 38 | atomic64_set(v, i); | ||
| 39 | } | ||
| 40 | |||
| 41 | static inline void atomic_long_inc(atomic_long_t *l) | ||
| 42 | { | ||
| 43 | atomic64_t *v = (atomic64_t *)l; | ||
| 44 | |||
| 45 | atomic64_inc(v); | ||
| 46 | } | ||
| 47 | |||
| 48 | static inline void atomic_long_dec(atomic_long_t *l) | ||
| 49 | { | ||
| 50 | atomic64_t *v = (atomic64_t *)l; | ||
| 51 | |||
| 52 | atomic64_dec(v); | ||
| 53 | } | ||
| 54 | |||
| 55 | static inline void atomic_long_add(long i, atomic_long_t *l) | ||
| 56 | { | ||
| 57 | atomic64_t *v = (atomic64_t *)l; | ||
| 58 | |||
| 59 | atomic64_add(i, v); | ||
| 60 | } | ||
| 61 | |||
| 62 | static inline void atomic_long_sub(long i, atomic_long_t *l) | ||
| 63 | { | ||
| 64 | atomic64_t *v = (atomic64_t *)l; | ||
| 65 | |||
| 66 | atomic64_sub(i, v); | ||
| 67 | } | ||
| 68 | |||
| 69 | static inline int atomic_long_sub_and_test(long i, atomic_long_t *l) | ||
| 70 | { | ||
| 71 | atomic64_t *v = (atomic64_t *)l; | ||
| 72 | |||
| 73 | return atomic64_sub_and_test(i, v); | ||
| 74 | } | ||
| 75 | |||
| 76 | static inline int atomic_long_dec_and_test(atomic_long_t *l) | ||
| 77 | { | ||
| 78 | atomic64_t *v = (atomic64_t *)l; | ||
| 79 | |||
| 80 | return atomic64_dec_and_test(v); | ||
| 81 | } | ||
| 82 | |||
| 83 | static inline int atomic_long_inc_and_test(atomic_long_t *l) | ||
| 84 | { | ||
| 85 | atomic64_t *v = (atomic64_t *)l; | ||
| 86 | |||
| 87 | return atomic64_inc_and_test(v); | ||
| 88 | } | ||
| 89 | |||
| 90 | static inline int atomic_long_add_negative(long i, atomic_long_t *l) | ||
| 91 | { | ||
| 92 | atomic64_t *v = (atomic64_t *)l; | ||
| 93 | |||
| 94 | return atomic64_add_negative(i, v); | ||
| 95 | } | ||
| 96 | |||
| 97 | static inline long atomic_long_add_return(long i, atomic_long_t *l) | ||
| 98 | { | ||
| 99 | atomic64_t *v = (atomic64_t *)l; | ||
| 100 | |||
| 101 | return (long)atomic64_add_return(i, v); | ||
| 102 | } | ||
| 103 | |||
| 104 | static inline long atomic_long_sub_return(long i, atomic_long_t *l) | ||
| 105 | { | ||
| 106 | atomic64_t *v = (atomic64_t *)l; | ||
| 107 | |||
| 108 | return (long)atomic64_sub_return(i, v); | ||
| 109 | } | ||
| 110 | |||
| 111 | static inline long atomic_long_inc_return(atomic_long_t *l) | ||
| 112 | { | ||
| 113 | atomic64_t *v = (atomic64_t *)l; | ||
| 114 | |||
| 115 | return (long)atomic64_inc_return(v); | ||
| 116 | } | ||
| 117 | |||
| 118 | static inline long atomic_long_dec_return(atomic_long_t *l) | ||
| 119 | { | ||
| 120 | atomic64_t *v = (atomic64_t *)l; | ||
| 121 | |||
| 122 | return (long)atomic64_dec_return(v); | ||
| 123 | } | ||
| 124 | |||
| 125 | static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) | ||
| 126 | { | ||
| 127 | atomic64_t *v = (atomic64_t *)l; | ||
| 128 | |||
| 129 | return (long)atomic64_add_unless(v, a, u); | ||
| 130 | } | ||
| 131 | |||
| 132 | #define atomic_long_inc_not_zero(l) atomic64_inc_not_zero((atomic64_t *)(l)) | ||
| 133 | |||
| 134 | #define atomic_long_cmpxchg(l, old, new) \ | ||
| 135 | (atomic64_cmpxchg((atomic64_t *)(l), (old), (new))) | ||
| 136 | #define atomic_long_xchg(v, new) \ | ||
| 137 | (atomic64_xchg((atomic64_t *)(v), (new))) | ||
| 138 | |||
| 139 | #else /* BITS_PER_LONG == 64 */ | ||
| 140 | |||
| 141 | typedef atomic_t atomic_long_t; | ||
| 142 | |||
| 143 | #define ATOMIC_LONG_INIT(i) ATOMIC_INIT(i) | ||
| 144 | static inline long atomic_long_read(atomic_long_t *l) | ||
| 145 | { | ||
| 146 | atomic_t *v = (atomic_t *)l; | ||
| 147 | |||
| 148 | return (long)atomic_read(v); | ||
| 149 | } | ||
| 150 | |||
| 151 | static inline void atomic_long_set(atomic_long_t *l, long i) | ||
| 152 | { | ||
| 153 | atomic_t *v = (atomic_t *)l; | ||
| 154 | |||
| 155 | atomic_set(v, i); | ||
| 156 | } | ||
| 157 | |||
| 158 | static inline void atomic_long_inc(atomic_long_t *l) | ||
| 159 | { | ||
| 160 | atomic_t *v = (atomic_t *)l; | ||
| 161 | |||
| 162 | atomic_inc(v); | ||
| 163 | } | ||
| 164 | |||
| 165 | static inline void atomic_long_dec(atomic_long_t *l) | ||
| 166 | { | ||
| 167 | atomic_t *v = (atomic_t *)l; | ||
| 168 | |||
| 169 | atomic_dec(v); | ||
| 170 | } | ||
| 171 | |||
| 172 | static inline void atomic_long_add(long i, atomic_long_t *l) | ||
| 173 | { | ||
| 174 | atomic_t *v = (atomic_t *)l; | ||
| 175 | |||
| 176 | atomic_add(i, v); | ||
| 177 | } | ||
| 178 | |||
| 179 | static inline void atomic_long_sub(long i, atomic_long_t *l) | ||
| 180 | { | ||
| 181 | atomic_t *v = (atomic_t *)l; | ||
| 182 | |||
| 183 | atomic_sub(i, v); | ||
| 184 | } | ||
| 185 | |||
| 186 | static inline int atomic_long_sub_and_test(long i, atomic_long_t *l) | ||
| 187 | { | ||
| 188 | atomic_t *v = (atomic_t *)l; | ||
| 189 | |||
| 190 | return atomic_sub_and_test(i, v); | ||
| 191 | } | ||
| 192 | |||
| 193 | static inline int atomic_long_dec_and_test(atomic_long_t *l) | ||
| 194 | { | ||
| 195 | atomic_t *v = (atomic_t *)l; | ||
| 196 | |||
| 197 | return atomic_dec_and_test(v); | ||
| 198 | } | ||
| 199 | |||
| 200 | static inline int atomic_long_inc_and_test(atomic_long_t *l) | ||
| 201 | { | ||
| 202 | atomic_t *v = (atomic_t *)l; | ||
| 203 | |||
| 204 | return atomic_inc_and_test(v); | ||
| 205 | } | ||
| 206 | |||
| 207 | static inline int atomic_long_add_negative(long i, atomic_long_t *l) | ||
| 208 | { | ||
| 209 | atomic_t *v = (atomic_t *)l; | ||
| 210 | |||
| 211 | return atomic_add_negative(i, v); | ||
| 212 | } | ||
| 213 | |||
| 214 | static inline long atomic_long_add_return(long i, atomic_long_t *l) | ||
| 215 | { | ||
| 216 | atomic_t *v = (atomic_t *)l; | ||
| 217 | |||
| 218 | return (long)atomic_add_return(i, v); | ||
| 219 | } | ||
| 220 | |||
| 221 | static inline long atomic_long_sub_return(long i, atomic_long_t *l) | ||
| 222 | { | ||
| 223 | atomic_t *v = (atomic_t *)l; | ||
| 224 | |||
| 225 | return (long)atomic_sub_return(i, v); | ||
| 226 | } | ||
| 227 | |||
| 228 | static inline long atomic_long_inc_return(atomic_long_t *l) | ||
| 229 | { | ||
| 230 | atomic_t *v = (atomic_t *)l; | ||
| 231 | |||
| 232 | return (long)atomic_inc_return(v); | ||
| 233 | } | ||
| 234 | |||
| 235 | static inline long atomic_long_dec_return(atomic_long_t *l) | ||
| 236 | { | ||
| 237 | atomic_t *v = (atomic_t *)l; | ||
| 238 | |||
| 239 | return (long)atomic_dec_return(v); | ||
| 240 | } | ||
| 241 | |||
| 242 | static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) | ||
| 243 | { | ||
| 244 | atomic_t *v = (atomic_t *)l; | ||
| 245 | |||
| 246 | return (long)atomic_add_unless(v, a, u); | ||
| 247 | } | ||
| 248 | |||
| 249 | #define atomic_long_inc_not_zero(l) atomic_inc_not_zero((atomic_t *)(l)) | ||
| 250 | |||
| 251 | #define atomic_long_cmpxchg(l, old, new) \ | ||
| 252 | (atomic_cmpxchg((atomic_t *)(l), (old), (new))) | ||
| 253 | #define atomic_long_xchg(v, new) \ | ||
| 254 | (atomic_xchg((atomic_t *)(v), (new))) | ||
| 255 | |||
| 256 | #endif /* BITS_PER_LONG == 64 */ | ||
| 257 | |||
| 258 | #endif /* _ASM_GENERIC_ATOMIC_LONG_H */ | ||
diff --git a/include/asm-generic/atomic.h b/include/asm-generic/atomic.h index 81d3be459efb..c99c64dc5f3d 100644 --- a/include/asm-generic/atomic.h +++ b/include/asm-generic/atomic.h | |||
| @@ -1,258 +1,165 @@ | |||
| 1 | #ifndef _ASM_GENERIC_ATOMIC_H | ||
| 2 | #define _ASM_GENERIC_ATOMIC_H | ||
| 3 | /* | 1 | /* |
| 4 | * Copyright (C) 2005 Silicon Graphics, Inc. | 2 | * Generic C implementation of atomic counter operations |
| 5 | * Christoph Lameter | 3 | * Originally implemented for MN10300. |
| 6 | * | 4 | * |
| 7 | * Allows to provide arch independent atomic definitions without the need to | 5 | * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. |
| 8 | * edit all arch specific atomic.h files. | 6 | * Written by David Howells (dhowells@redhat.com) |
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or | ||
| 9 | * modify it under the terms of the GNU General Public Licence | ||
| 10 | * as published by the Free Software Foundation; either version | ||
| 11 | * 2 of the Licence, or (at your option) any later version. | ||
| 9 | */ | 12 | */ |
| 13 | #ifndef __ASM_GENERIC_ATOMIC_H | ||
| 14 | #define __ASM_GENERIC_ATOMIC_H | ||
| 10 | 15 | ||
| 11 | #include <asm/types.h> | 16 | #ifdef CONFIG_SMP |
| 17 | #error not SMP safe | ||
| 18 | #endif | ||
| 12 | 19 | ||
| 13 | /* | 20 | /* |
| 14 | * Suppport for atomic_long_t | 21 | * Atomic operations that C can't guarantee us. Useful for |
| 15 | * | 22 | * resource counting etc.. |
| 16 | * Casts for parameters are avoided for existing atomic functions in order to | ||
| 17 | * avoid issues with cast-as-lval under gcc 4.x and other limitations that the | ||
| 18 | * macros of a platform may have. | ||
| 19 | */ | 23 | */ |
| 20 | 24 | ||
| 21 | #if BITS_PER_LONG == 64 | 25 | #define ATOMIC_INIT(i) { (i) } |
| 22 | |||
| 23 | typedef atomic64_t atomic_long_t; | ||
| 24 | |||
| 25 | #define ATOMIC_LONG_INIT(i) ATOMIC64_INIT(i) | ||
| 26 | 26 | ||
| 27 | static inline long atomic_long_read(atomic_long_t *l) | 27 | #ifdef __KERNEL__ |
| 28 | { | ||
| 29 | atomic64_t *v = (atomic64_t *)l; | ||
| 30 | |||
| 31 | return (long)atomic64_read(v); | ||
| 32 | } | ||
| 33 | |||
| 34 | static inline void atomic_long_set(atomic_long_t *l, long i) | ||
| 35 | { | ||
| 36 | atomic64_t *v = (atomic64_t *)l; | ||
| 37 | |||
| 38 | atomic64_set(v, i); | ||
| 39 | } | ||
| 40 | |||
| 41 | static inline void atomic_long_inc(atomic_long_t *l) | ||
| 42 | { | ||
| 43 | atomic64_t *v = (atomic64_t *)l; | ||
| 44 | |||
| 45 | atomic64_inc(v); | ||
| 46 | } | ||
| 47 | |||
| 48 | static inline void atomic_long_dec(atomic_long_t *l) | ||
| 49 | { | ||
| 50 | atomic64_t *v = (atomic64_t *)l; | ||
| 51 | |||
| 52 | atomic64_dec(v); | ||
| 53 | } | ||
| 54 | |||
| 55 | static inline void atomic_long_add(long i, atomic_long_t *l) | ||
| 56 | { | ||
| 57 | atomic64_t *v = (atomic64_t *)l; | ||
| 58 | |||
| 59 | atomic64_add(i, v); | ||
| 60 | } | ||
| 61 | |||
| 62 | static inline void atomic_long_sub(long i, atomic_long_t *l) | ||
| 63 | { | ||
| 64 | atomic64_t *v = (atomic64_t *)l; | ||
| 65 | |||
| 66 | atomic64_sub(i, v); | ||
| 67 | } | ||
| 68 | |||
| 69 | static inline int atomic_long_sub_and_test(long i, atomic_long_t *l) | ||
| 70 | { | ||
| 71 | atomic64_t *v = (atomic64_t *)l; | ||
| 72 | |||
| 73 | return atomic64_sub_and_test(i, v); | ||
| 74 | } | ||
| 75 | |||
| 76 | static inline int atomic_long_dec_and_test(atomic_long_t *l) | ||
| 77 | { | ||
| 78 | atomic64_t *v = (atomic64_t *)l; | ||
| 79 | |||
| 80 | return atomic64_dec_and_test(v); | ||
| 81 | } | ||
| 82 | |||
| 83 | static inline int atomic_long_inc_and_test(atomic_long_t *l) | ||
| 84 | { | ||
| 85 | atomic64_t *v = (atomic64_t *)l; | ||
| 86 | |||
| 87 | return atomic64_inc_and_test(v); | ||
| 88 | } | ||
| 89 | |||
| 90 | static inline int atomic_long_add_negative(long i, atomic_long_t *l) | ||
| 91 | { | ||
| 92 | atomic64_t *v = (atomic64_t *)l; | ||
| 93 | |||
| 94 | return atomic64_add_negative(i, v); | ||
| 95 | } | ||
| 96 | |||
| 97 | static inline long atomic_long_add_return(long i, atomic_long_t *l) | ||
| 98 | { | ||
| 99 | atomic64_t *v = (atomic64_t *)l; | ||
| 100 | |||
| 101 | return (long)atomic64_add_return(i, v); | ||
| 102 | } | ||
| 103 | |||
| 104 | static inline long atomic_long_sub_return(long i, atomic_long_t *l) | ||
| 105 | { | ||
| 106 | atomic64_t *v = (atomic64_t *)l; | ||
| 107 | 28 | ||
| 108 | return (long)atomic64_sub_return(i, v); | 29 | /** |
| 109 | } | 30 | * atomic_read - read atomic variable |
| 110 | 31 | * @v: pointer of type atomic_t | |
| 111 | static inline long atomic_long_inc_return(atomic_long_t *l) | 32 | * |
| 112 | { | 33 | * Atomically reads the value of @v. Note that the guaranteed |
| 113 | atomic64_t *v = (atomic64_t *)l; | 34 | * useful range of an atomic_t is only 24 bits. |
| 114 | 35 | */ | |
| 115 | return (long)atomic64_inc_return(v); | 36 | #define atomic_read(v) ((v)->counter) |
| 116 | } | ||
| 117 | |||
| 118 | static inline long atomic_long_dec_return(atomic_long_t *l) | ||
| 119 | { | ||
| 120 | atomic64_t *v = (atomic64_t *)l; | ||
| 121 | |||
| 122 | return (long)atomic64_dec_return(v); | ||
| 123 | } | ||
| 124 | |||
| 125 | static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) | ||
| 126 | { | ||
| 127 | atomic64_t *v = (atomic64_t *)l; | ||
| 128 | |||
| 129 | return (long)atomic64_add_unless(v, a, u); | ||
| 130 | } | ||
| 131 | |||
| 132 | #define atomic_long_inc_not_zero(l) atomic64_inc_not_zero((atomic64_t *)(l)) | ||
| 133 | |||
| 134 | #define atomic_long_cmpxchg(l, old, new) \ | ||
| 135 | (atomic64_cmpxchg((atomic64_t *)(l), (old), (new))) | ||
| 136 | #define atomic_long_xchg(v, new) \ | ||
| 137 | (atomic64_xchg((atomic64_t *)(v), (new))) | ||
| 138 | |||
| 139 | #else /* BITS_PER_LONG == 64 */ | ||
| 140 | |||
| 141 | typedef atomic_t atomic_long_t; | ||
| 142 | |||
| 143 | #define ATOMIC_LONG_INIT(i) ATOMIC_INIT(i) | ||
| 144 | static inline long atomic_long_read(atomic_long_t *l) | ||
| 145 | { | ||
| 146 | atomic_t *v = (atomic_t *)l; | ||
| 147 | |||
| 148 | return (long)atomic_read(v); | ||
| 149 | } | ||
| 150 | 37 | ||
| 151 | static inline void atomic_long_set(atomic_long_t *l, long i) | 38 | /** |
| 152 | { | 39 | * atomic_set - set atomic variable |
| 153 | atomic_t *v = (atomic_t *)l; | 40 | * @v: pointer of type atomic_t |
| 41 | * @i: required value | ||
| 42 | * | ||
| 43 | * Atomically sets the value of @v to @i. Note that the guaranteed | ||
| 44 | * useful range of an atomic_t is only 24 bits. | ||
| 45 | */ | ||
| 46 | #define atomic_set(v, i) (((v)->counter) = (i)) | ||
| 154 | 47 | ||
| 155 | atomic_set(v, i); | 48 | #include <asm/system.h> |
| 156 | } | ||
| 157 | 49 | ||
| 158 | static inline void atomic_long_inc(atomic_long_t *l) | 50 | /** |
| 51 | * atomic_add_return - add integer to atomic variable | ||
| 52 | * @i: integer value to add | ||
| 53 | * @v: pointer of type atomic_t | ||
| 54 | * | ||
| 55 | * Atomically adds @i to @v and returns the result | ||
| 56 | * Note that the guaranteed useful range of an atomic_t is only 24 bits. | ||
| 57 | */ | ||
| 58 | static inline int atomic_add_return(int i, atomic_t *v) | ||
| 159 | { | 59 | { |
| 160 | atomic_t *v = (atomic_t *)l; | 60 | unsigned long flags; |
| 161 | 61 | int temp; | |
| 162 | atomic_inc(v); | ||
| 163 | } | ||
| 164 | 62 | ||
| 165 | static inline void atomic_long_dec(atomic_long_t *l) | 63 | local_irq_save(flags); |
| 166 | { | 64 | temp = v->counter; |
| 167 | atomic_t *v = (atomic_t *)l; | 65 | temp += i; |
| 66 | v->counter = temp; | ||
| 67 | local_irq_restore(flags); | ||
| 168 | 68 | ||
| 169 | atomic_dec(v); | 69 | return temp; |
| 170 | } | 70 | } |
| 171 | 71 | ||
| 172 | static inline void atomic_long_add(long i, atomic_long_t *l) | 72 | /** |
| 73 | * atomic_sub_return - subtract integer from atomic variable | ||
| 74 | * @i: integer value to subtract | ||
| 75 | * @v: pointer of type atomic_t | ||
| 76 | * | ||
| 77 | * Atomically subtracts @i from @v and returns the result | ||
| 78 | * Note that the guaranteed useful range of an atomic_t is only 24 bits. | ||
| 79 | */ | ||
| 80 | static inline int atomic_sub_return(int i, atomic_t *v) | ||
| 173 | { | 81 | { |
| 174 | atomic_t *v = (atomic_t *)l; | 82 | unsigned long flags; |
| 175 | 83 | int temp; | |
| 176 | atomic_add(i, v); | ||
| 177 | } | ||
| 178 | 84 | ||
| 179 | static inline void atomic_long_sub(long i, atomic_long_t *l) | 85 | local_irq_save(flags); |
| 180 | { | 86 | temp = v->counter; |
| 181 | atomic_t *v = (atomic_t *)l; | 87 | temp -= i; |
| 88 | v->counter = temp; | ||
| 89 | local_irq_restore(flags); | ||
| 182 | 90 | ||
| 183 | atomic_sub(i, v); | 91 | return temp; |
| 184 | } | 92 | } |
| 185 | 93 | ||
| 186 | static inline int atomic_long_sub_and_test(long i, atomic_long_t *l) | 94 | static inline int atomic_add_negative(int i, atomic_t *v) |
| 187 | { | 95 | { |
| 188 | atomic_t *v = (atomic_t *)l; | 96 | return atomic_add_return(i, v) < 0; |
| 189 | |||
| 190 | return atomic_sub_and_test(i, v); | ||
| 191 | } | 97 | } |
| 192 | 98 | ||
| 193 | static inline int atomic_long_dec_and_test(atomic_long_t *l) | 99 | static inline void atomic_add(int i, atomic_t *v) |
| 194 | { | 100 | { |
| 195 | atomic_t *v = (atomic_t *)l; | 101 | atomic_add_return(i, v); |
| 196 | |||
| 197 | return atomic_dec_and_test(v); | ||
| 198 | } | 102 | } |
| 199 | 103 | ||
| 200 | static inline int atomic_long_inc_and_test(atomic_long_t *l) | 104 | static inline void atomic_sub(int i, atomic_t *v) |
| 201 | { | 105 | { |
| 202 | atomic_t *v = (atomic_t *)l; | 106 | atomic_sub_return(i, v); |
| 203 | |||
| 204 | return atomic_inc_and_test(v); | ||
| 205 | } | 107 | } |
| 206 | 108 | ||
| 207 | static inline int atomic_long_add_negative(long i, atomic_long_t *l) | 109 | static inline void atomic_inc(atomic_t *v) |
| 208 | { | 110 | { |
| 209 | atomic_t *v = (atomic_t *)l; | 111 | atomic_add_return(1, v); |
| 210 | |||
| 211 | return atomic_add_negative(i, v); | ||
| 212 | } | 112 | } |
| 213 | 113 | ||
| 214 | static inline long atomic_long_add_return(long i, atomic_long_t *l) | 114 | static inline void atomic_dec(atomic_t *v) |
| 215 | { | 115 | { |
| 216 | atomic_t *v = (atomic_t *)l; | 116 | atomic_sub_return(1, v); |
| 217 | |||
| 218 | return (long)atomic_add_return(i, v); | ||
| 219 | } | 117 | } |
| 220 | 118 | ||
| 221 | static inline long atomic_long_sub_return(long i, atomic_long_t *l) | 119 | #define atomic_dec_return(v) atomic_sub_return(1, (v)) |
| 222 | { | 120 | #define atomic_inc_return(v) atomic_add_return(1, (v)) |
| 223 | atomic_t *v = (atomic_t *)l; | ||
| 224 | 121 | ||
| 225 | return (long)atomic_sub_return(i, v); | 122 | #define atomic_sub_and_test(i, v) (atomic_sub_return((i), (v)) == 0) |
| 226 | } | 123 | #define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0) |
| 124 | #define atomic_inc_and_test(v) (atomic_add_return(1, (v)) == 0) | ||
| 227 | 125 | ||
| 228 | static inline long atomic_long_inc_return(atomic_long_t *l) | 126 | #define atomic_add_unless(v, a, u) \ |
| 229 | { | 127 | ({ \ |
| 230 | atomic_t *v = (atomic_t *)l; | 128 | int c, old; \ |
| 129 | c = atomic_read(v); \ | ||
| 130 | while (c != (u) && (old = atomic_cmpxchg((v), c, c + (a))) != c) \ | ||
| 131 | c = old; \ | ||
| 132 | c != (u); \ | ||
| 133 | }) | ||
| 231 | 134 | ||
| 232 | return (long)atomic_inc_return(v); | 135 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) |
| 233 | } | ||
| 234 | 136 | ||
| 235 | static inline long atomic_long_dec_return(atomic_long_t *l) | 137 | static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr) |
| 236 | { | 138 | { |
| 237 | atomic_t *v = (atomic_t *)l; | 139 | unsigned long flags; |
| 238 | 140 | ||
| 239 | return (long)atomic_dec_return(v); | 141 | mask = ~mask; |
| 142 | local_irq_save(flags); | ||
| 143 | *addr &= mask; | ||
| 144 | local_irq_restore(flags); | ||
| 240 | } | 145 | } |
| 241 | 146 | ||
| 242 | static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) | 147 | #define atomic_xchg(ptr, v) (xchg(&(ptr)->counter, (v))) |
| 243 | { | 148 | #define atomic_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), (old), (new))) |
| 244 | atomic_t *v = (atomic_t *)l; | ||
| 245 | 149 | ||
| 246 | return (long)atomic_add_unless(v, a, u); | 150 | #define cmpxchg_local(ptr, o, n) \ |
| 247 | } | 151 | ((__typeof__(*(ptr)))__cmpxchg_local_generic((ptr), (unsigned long)(o),\ |
| 152 | (unsigned long)(n), sizeof(*(ptr)))) | ||
| 248 | 153 | ||
| 249 | #define atomic_long_inc_not_zero(l) atomic_inc_not_zero((atomic_t *)(l)) | 154 | #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) |
| 250 | 155 | ||
| 251 | #define atomic_long_cmpxchg(l, old, new) \ | 156 | /* Assume that atomic operations are already serializing */ |
| 252 | (atomic_cmpxchg((atomic_t *)(l), (old), (new))) | 157 | #define smp_mb__before_atomic_dec() barrier() |
| 253 | #define atomic_long_xchg(v, new) \ | 158 | #define smp_mb__after_atomic_dec() barrier() |
| 254 | (atomic_xchg((atomic_t *)(v), (new))) | 159 | #define smp_mb__before_atomic_inc() barrier() |
| 160 | #define smp_mb__after_atomic_inc() barrier() | ||
| 255 | 161 | ||
| 256 | #endif /* BITS_PER_LONG == 64 */ | 162 | #include <asm-generic/atomic-long.h> |
| 257 | 163 | ||
| 258 | #endif /* _ASM_GENERIC_ATOMIC_H */ | 164 | #endif /* __KERNEL__ */ |
| 165 | #endif /* __ASM_GENERIC_ATOMIC_H */ | ||
diff --git a/include/asm-generic/atomic64.h b/include/asm-generic/atomic64.h new file mode 100644 index 000000000000..b18ce4f9ee3d --- /dev/null +++ b/include/asm-generic/atomic64.h | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | /* | ||
| 2 | * Generic implementation of 64-bit atomics using spinlocks, | ||
| 3 | * useful on processors that don't have 64-bit atomic instructions. | ||
| 4 | * | ||
| 5 | * Copyright © 2009 Paul Mackerras, IBM Corp. <paulus@au1.ibm.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License | ||
| 9 | * as published by the Free Software Foundation; either version | ||
| 10 | * 2 of the License, or (at your option) any later version. | ||
| 11 | */ | ||
| 12 | #ifndef _ASM_GENERIC_ATOMIC64_H | ||
| 13 | #define _ASM_GENERIC_ATOMIC64_H | ||
| 14 | |||
| 15 | typedef struct { | ||
| 16 | long long counter; | ||
| 17 | } atomic64_t; | ||
| 18 | |||
| 19 | #define ATOMIC64_INIT(i) { (i) } | ||
| 20 | |||
| 21 | extern long long atomic64_read(const atomic64_t *v); | ||
| 22 | extern void atomic64_set(atomic64_t *v, long long i); | ||
| 23 | extern void atomic64_add(long long a, atomic64_t *v); | ||
| 24 | extern long long atomic64_add_return(long long a, atomic64_t *v); | ||
| 25 | extern void atomic64_sub(long long a, atomic64_t *v); | ||
| 26 | extern long long atomic64_sub_return(long long a, atomic64_t *v); | ||
| 27 | extern long long atomic64_dec_if_positive(atomic64_t *v); | ||
| 28 | extern long long atomic64_cmpxchg(atomic64_t *v, long long o, long long n); | ||
| 29 | extern long long atomic64_xchg(atomic64_t *v, long long new); | ||
| 30 | extern int atomic64_add_unless(atomic64_t *v, long long a, long long u); | ||
| 31 | |||
| 32 | #define atomic64_add_negative(a, v) (atomic64_add_return((a), (v)) < 0) | ||
| 33 | #define atomic64_inc(v) atomic64_add(1LL, (v)) | ||
| 34 | #define atomic64_inc_return(v) atomic64_add_return(1LL, (v)) | ||
| 35 | #define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0) | ||
| 36 | #define atomic64_sub_and_test(a, v) (atomic64_sub_return((a), (v)) == 0) | ||
| 37 | #define atomic64_dec(v) atomic64_sub(1LL, (v)) | ||
| 38 | #define atomic64_dec_return(v) atomic64_sub_return(1LL, (v)) | ||
| 39 | #define atomic64_dec_and_test(v) (atomic64_dec_return((v)) == 0) | ||
| 40 | #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1LL, 0LL) | ||
| 41 | |||
| 42 | #endif /* _ASM_GENERIC_ATOMIC64_H */ | ||
diff --git a/include/asm-generic/auxvec.h b/include/asm-generic/auxvec.h new file mode 100644 index 000000000000..b99573b0ad12 --- /dev/null +++ b/include/asm-generic/auxvec.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #ifndef __ASM_GENERIC_AUXVEC_H | ||
| 2 | #define __ASM_GENERIC_AUXVEC_H | ||
| 3 | /* | ||
| 4 | * Not all architectures need their own auxvec.h, the most | ||
| 5 | * common definitions are already in linux/auxvec.h. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #endif /* __ASM_GENERIC_AUXVEC_H */ | ||
diff --git a/include/asm-generic/bitops.h b/include/asm-generic/bitops.h index c9f369c4bd7e..a54f4421a24d 100644 --- a/include/asm-generic/bitops.h +++ b/include/asm-generic/bitops.h | |||
| @@ -1,19 +1,29 @@ | |||
| 1 | #ifndef _ASM_GENERIC_BITOPS_H_ | 1 | #ifndef __ASM_GENERIC_BITOPS_H |
| 2 | #define _ASM_GENERIC_BITOPS_H_ | 2 | #define __ASM_GENERIC_BITOPS_H |
| 3 | 3 | ||
| 4 | /* | 4 | /* |
| 5 | * For the benefit of those who are trying to port Linux to another | 5 | * For the benefit of those who are trying to port Linux to another |
| 6 | * architecture, here are some C-language equivalents. You should | 6 | * architecture, here are some C-language equivalents. You should |
| 7 | * recode these in the native assembly language, if at all possible. | 7 | * recode these in the native assembly language, if at all possible. |
| 8 | * | 8 | * |
| 9 | * C language equivalents written by Theodore Ts'o, 9/26/92 | 9 | * C language equivalents written by Theodore Ts'o, 9/26/92 |
| 10 | */ | 10 | */ |
| 11 | 11 | ||
| 12 | #include <asm-generic/bitops/atomic.h> | 12 | #include <linux/irqflags.h> |
| 13 | #include <asm-generic/bitops/non-atomic.h> | 13 | #include <linux/compiler.h> |
| 14 | |||
| 15 | /* | ||
| 16 | * clear_bit may not imply a memory barrier | ||
| 17 | */ | ||
| 18 | #ifndef smp_mb__before_clear_bit | ||
| 19 | #define smp_mb__before_clear_bit() smp_mb() | ||
| 20 | #define smp_mb__after_clear_bit() smp_mb() | ||
| 21 | #endif | ||
| 22 | |||
| 14 | #include <asm-generic/bitops/__ffs.h> | 23 | #include <asm-generic/bitops/__ffs.h> |
| 15 | #include <asm-generic/bitops/ffz.h> | 24 | #include <asm-generic/bitops/ffz.h> |
| 16 | #include <asm-generic/bitops/fls.h> | 25 | #include <asm-generic/bitops/fls.h> |
| 26 | #include <asm-generic/bitops/__fls.h> | ||
| 17 | #include <asm-generic/bitops/fls64.h> | 27 | #include <asm-generic/bitops/fls64.h> |
| 18 | #include <asm-generic/bitops/find.h> | 28 | #include <asm-generic/bitops/find.h> |
| 19 | 29 | ||
| @@ -26,8 +36,10 @@ | |||
| 26 | #include <asm-generic/bitops/hweight.h> | 36 | #include <asm-generic/bitops/hweight.h> |
| 27 | #include <asm-generic/bitops/lock.h> | 37 | #include <asm-generic/bitops/lock.h> |
| 28 | 38 | ||
| 39 | #include <asm-generic/bitops/atomic.h> | ||
| 40 | #include <asm-generic/bitops/non-atomic.h> | ||
| 29 | #include <asm-generic/bitops/ext2-non-atomic.h> | 41 | #include <asm-generic/bitops/ext2-non-atomic.h> |
| 30 | #include <asm-generic/bitops/ext2-atomic.h> | 42 | #include <asm-generic/bitops/ext2-atomic.h> |
| 31 | #include <asm-generic/bitops/minix.h> | 43 | #include <asm-generic/bitops/minix.h> |
| 32 | 44 | ||
| 33 | #endif /* _ASM_GENERIC_BITOPS_H */ | 45 | #endif /* __ASM_GENERIC_BITOPS_H */ |
diff --git a/include/asm-generic/bitops/atomic.h b/include/asm-generic/bitops/atomic.h index 4657f3e410fc..c8946465e63a 100644 --- a/include/asm-generic/bitops/atomic.h +++ b/include/asm-generic/bitops/atomic.h | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #define _ASM_GENERIC_BITOPS_ATOMIC_H_ | 2 | #define _ASM_GENERIC_BITOPS_ATOMIC_H_ |
| 3 | 3 | ||
| 4 | #include <asm/types.h> | 4 | #include <asm/types.h> |
| 5 | #include <asm/system.h> | ||
| 5 | 6 | ||
| 6 | #ifdef CONFIG_SMP | 7 | #ifdef CONFIG_SMP |
| 7 | #include <asm/spinlock.h> | 8 | #include <asm/spinlock.h> |
diff --git a/include/asm-generic/bitsperlong.h b/include/asm-generic/bitsperlong.h new file mode 100644 index 000000000000..4ae54e07de83 --- /dev/null +++ b/include/asm-generic/bitsperlong.h | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | #ifndef __ASM_GENERIC_BITS_PER_LONG | ||
| 2 | #define __ASM_GENERIC_BITS_PER_LONG | ||
| 3 | |||
| 4 | /* | ||
| 5 | * There seems to be no way of detecting this automatically from user | ||
| 6 | * space, so 64 bit architectures should override this in their | ||
| 7 | * bitsperlong.h. In particular, an architecture that supports | ||
| 8 | * both 32 and 64 bit user space must not rely on CONFIG_64BIT | ||
| 9 | * to decide it, but rather check a compiler provided macro. | ||
| 10 | */ | ||
| 11 | #ifndef __BITS_PER_LONG | ||
| 12 | #define __BITS_PER_LONG 32 | ||
| 13 | #endif | ||
| 14 | |||
| 15 | #ifdef __KERNEL__ | ||
| 16 | |||
| 17 | #ifdef CONFIG_64BIT | ||
| 18 | #define BITS_PER_LONG 64 | ||
| 19 | #else | ||
| 20 | #define BITS_PER_LONG 32 | ||
| 21 | #endif /* CONFIG_64BIT */ | ||
| 22 | |||
| 23 | /* | ||
| 24 | * FIXME: The check currently breaks x86-64 build, so it's | ||
| 25 | * temporarily disabled. Please fix x86-64 and reenable | ||
| 26 | */ | ||
| 27 | #if 0 && BITS_PER_LONG != __BITS_PER_LONG | ||
| 28 | #error Inconsistent word size. Check asm/bitsperlong.h | ||
| 29 | #endif | ||
| 30 | |||
| 31 | #endif /* __KERNEL__ */ | ||
| 32 | #endif /* __ASM_GENERIC_BITS_PER_LONG */ | ||
diff --git a/include/asm-generic/bugs.h b/include/asm-generic/bugs.h new file mode 100644 index 000000000000..6c4f62ea714d --- /dev/null +++ b/include/asm-generic/bugs.h | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | #ifndef __ASM_GENERIC_BUGS_H | ||
| 2 | #define __ASM_GENERIC_BUGS_H | ||
| 3 | /* | ||
| 4 | * This file is included by 'init/main.c' to check for | ||
| 5 | * architecture-dependent bugs. | ||
| 6 | */ | ||
| 7 | |||
| 8 | static inline void check_bugs(void) { } | ||
| 9 | |||
| 10 | #endif /* __ASM_GENERIC_BUGS_H */ | ||
diff --git a/include/asm-generic/cache.h b/include/asm-generic/cache.h new file mode 100644 index 000000000000..1bfcfe5c2237 --- /dev/null +++ b/include/asm-generic/cache.h | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | #ifndef __ASM_GENERIC_CACHE_H | ||
| 2 | #define __ASM_GENERIC_CACHE_H | ||
| 3 | /* | ||
| 4 | * 32 bytes appears to be the most common cache line size, | ||
| 5 | * so make that the default here. Architectures with larger | ||
| 6 | * cache lines need to provide their own cache.h. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #define L1_CACHE_SHIFT 5 | ||
| 10 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) | ||
| 11 | |||
| 12 | #endif /* __ASM_GENERIC_CACHE_H */ | ||
diff --git a/include/asm-generic/cacheflush.h b/include/asm-generic/cacheflush.h new file mode 100644 index 000000000000..ba4ec39a1131 --- /dev/null +++ b/include/asm-generic/cacheflush.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | #ifndef __ASM_CACHEFLUSH_H | ||
| 2 | #define __ASM_CACHEFLUSH_H | ||
| 3 | |||
| 4 | /* Keep includes the same across arches. */ | ||
| 5 | #include <linux/mm.h> | ||
| 6 | |||
| 7 | /* | ||
| 8 | * The cache doesn't need to be flushed when TLB entries change when | ||
| 9 | * the cache is mapped to physical memory, not virtual memory | ||
| 10 | */ | ||
| 11 | #define flush_cache_all() do { } while (0) | ||
| 12 | #define flush_cache_mm(mm) do { } while (0) | ||
| 13 | #define flush_cache_dup_mm(mm) do { } while (0) | ||
| 14 | #define flush_cache_range(vma, start, end) do { } while (0) | ||
| 15 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) | ||
| 16 | #define flush_dcache_page(page) do { } while (0) | ||
| 17 | #define flush_dcache_mmap_lock(mapping) do { } while (0) | ||
| 18 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | ||
| 19 | #define flush_icache_range(start, end) do { } while (0) | ||
| 20 | #define flush_icache_page(vma,pg) do { } while (0) | ||
| 21 | #define flush_icache_user_range(vma,pg,adr,len) do { } while (0) | ||
| 22 | #define flush_cache_vmap(start, end) do { } while (0) | ||
| 23 | #define flush_cache_vunmap(start, end) do { } while (0) | ||
| 24 | |||
| 25 | #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ | ||
| 26 | memcpy(dst, src, len) | ||
| 27 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ | ||
| 28 | memcpy(dst, src, len) | ||
| 29 | |||
| 30 | #endif /* __ASM_CACHEFLUSH_H */ | ||
diff --git a/include/asm-generic/checksum.h b/include/asm-generic/checksum.h new file mode 100644 index 000000000000..4647c762d970 --- /dev/null +++ b/include/asm-generic/checksum.h | |||
| @@ -0,0 +1,79 @@ | |||
| 1 | #ifndef __ASM_GENERIC_CHECKSUM_H | ||
| 2 | #define __ASM_GENERIC_CHECKSUM_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * computes the checksum of a memory block at buff, length len, | ||
| 6 | * and adds in "sum" (32-bit) | ||
| 7 | * | ||
| 8 | * returns a 32-bit number suitable for feeding into itself | ||
| 9 | * or csum_tcpudp_magic | ||
| 10 | * | ||
| 11 | * this function must be called with even lengths, except | ||
| 12 | * for the last fragment, which may be odd | ||
| 13 | * | ||
| 14 | * it's best to have buff aligned on a 32-bit boundary | ||
| 15 | */ | ||
| 16 | extern __wsum csum_partial(const void *buff, int len, __wsum sum); | ||
| 17 | |||
| 18 | /* | ||
| 19 | * the same as csum_partial, but copies from src while it | ||
| 20 | * checksums | ||
| 21 | * | ||
| 22 | * here even more important to align src and dst on a 32-bit (or even | ||
| 23 | * better 64-bit) boundary | ||
| 24 | */ | ||
| 25 | extern __wsum csum_partial_copy(const void *src, void *dst, int len, __wsum sum); | ||
| 26 | |||
| 27 | /* | ||
| 28 | * the same as csum_partial_copy, but copies from user space. | ||
| 29 | * | ||
| 30 | * here even more important to align src and dst on a 32-bit (or even | ||
| 31 | * better 64-bit) boundary | ||
| 32 | */ | ||
| 33 | extern __wsum csum_partial_copy_from_user(const void __user *src, void *dst, | ||
| 34 | int len, __wsum sum, int *csum_err); | ||
| 35 | |||
| 36 | #define csum_partial_copy_nocheck(src, dst, len, sum) \ | ||
| 37 | csum_partial_copy((src), (dst), (len), (sum)) | ||
| 38 | |||
| 39 | /* | ||
| 40 | * This is a version of ip_compute_csum() optimized for IP headers, | ||
| 41 | * which always checksum on 4 octet boundaries. | ||
| 42 | */ | ||
| 43 | extern __sum16 ip_fast_csum(const void *iph, unsigned int ihl); | ||
| 44 | |||
| 45 | /* | ||
| 46 | * Fold a partial checksum | ||
| 47 | */ | ||
| 48 | static inline __sum16 csum_fold(__wsum csum) | ||
| 49 | { | ||
| 50 | u32 sum = (__force u32)csum; | ||
| 51 | sum = (sum & 0xffff) + (sum >> 16); | ||
| 52 | sum = (sum & 0xffff) + (sum >> 16); | ||
| 53 | return (__force __sum16)~sum; | ||
| 54 | } | ||
| 55 | |||
| 56 | #ifndef csum_tcpudp_nofold | ||
| 57 | /* | ||
| 58 | * computes the checksum of the TCP/UDP pseudo-header | ||
| 59 | * returns a 16-bit checksum, already complemented | ||
| 60 | */ | ||
| 61 | extern __wsum | ||
| 62 | csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len, | ||
| 63 | unsigned short proto, __wsum sum); | ||
| 64 | #endif | ||
| 65 | |||
| 66 | static inline __sum16 | ||
| 67 | csum_tcpudp_magic(__be32 saddr, __be32 daddr, unsigned short len, | ||
| 68 | unsigned short proto, __wsum sum) | ||
| 69 | { | ||
| 70 | return csum_fold(csum_tcpudp_nofold(saddr, daddr, len, proto, sum)); | ||
| 71 | } | ||
| 72 | |||
| 73 | /* | ||
| 74 | * this routine is used for miscellaneous IP-like checksums, mainly | ||
| 75 | * in icmp.c | ||
| 76 | */ | ||
| 77 | extern __sum16 ip_compute_csum(const void *buff, int len); | ||
| 78 | |||
| 79 | #endif /* __ASM_GENERIC_CHECKSUM_H */ | ||
diff --git a/include/asm-generic/current.h b/include/asm-generic/current.h new file mode 100644 index 000000000000..5e86f6ae7cab --- /dev/null +++ b/include/asm-generic/current.h | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #ifndef __ASM_GENERIC_CURRENT_H | ||
| 2 | #define __ASM_GENERIC_CURRENT_H | ||
| 3 | |||
| 4 | #include <linux/thread_info.h> | ||
| 5 | |||
| 6 | #define get_current() (current_thread_info()->task) | ||
| 7 | #define current get_current() | ||
| 8 | |||
| 9 | #endif /* __ASM_GENERIC_CURRENT_H */ | ||
diff --git a/include/asm-generic/delay.h b/include/asm-generic/delay.h new file mode 100644 index 000000000000..4586fec75ddb --- /dev/null +++ b/include/asm-generic/delay.h | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #ifndef __ASM_GENERIC_DELAY_H | ||
| 2 | #define __ASM_GENERIC_DELAY_H | ||
| 3 | |||
| 4 | extern void __udelay(unsigned long usecs); | ||
| 5 | extern void __delay(unsigned long loops); | ||
| 6 | |||
| 7 | #define udelay(n) __udelay(n) | ||
| 8 | |||
| 9 | #endif /* __ASM_GENERIC_DELAY_H */ | ||
diff --git a/include/asm-generic/dma.h b/include/asm-generic/dma.h new file mode 100644 index 000000000000..9dfc3a7f36d2 --- /dev/null +++ b/include/asm-generic/dma.h | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | #ifndef __ASM_GENERIC_DMA_H | ||
| 2 | #define __ASM_GENERIC_DMA_H | ||
| 3 | /* | ||
| 4 | * This file traditionally describes the i8237 PC style DMA controller. | ||
| 5 | * Most architectures don't have these any more and can get the minimal | ||
| 6 | * implementation from kernel/dma.c by not defining MAX_DMA_CHANNELS. | ||
| 7 | * | ||
| 8 | * Some code relies on seeing MAX_DMA_ADDRESS though. | ||
| 9 | */ | ||
| 10 | #define MAX_DMA_ADDRESS PAGE_OFFSET | ||
| 11 | |||
| 12 | extern int request_dma(unsigned int dmanr, const char *device_id); | ||
| 13 | extern void free_dma(unsigned int dmanr); | ||
| 14 | |||
| 15 | #endif /* __ASM_GENERIC_DMA_H */ | ||
diff --git a/include/asm-generic/errno.h b/include/asm-generic/errno.h index e8852c092fea..28cc03bf19e6 100644 --- a/include/asm-generic/errno.h +++ b/include/asm-generic/errno.h | |||
| @@ -106,4 +106,6 @@ | |||
| 106 | #define EOWNERDEAD 130 /* Owner died */ | 106 | #define EOWNERDEAD 130 /* Owner died */ |
| 107 | #define ENOTRECOVERABLE 131 /* State not recoverable */ | 107 | #define ENOTRECOVERABLE 131 /* State not recoverable */ |
| 108 | 108 | ||
| 109 | #define ERFKILL 132 /* Operation not possible due to RF-kill */ | ||
| 110 | |||
| 109 | #endif | 111 | #endif |
diff --git a/include/asm-generic/fb.h b/include/asm-generic/fb.h new file mode 100644 index 000000000000..fe8ca7fcea00 --- /dev/null +++ b/include/asm-generic/fb.h | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | #ifndef __ASM_GENERIC_FB_H_ | ||
| 2 | #define __ASM_GENERIC_FB_H_ | ||
| 3 | #include <linux/fb.h> | ||
| 4 | |||
| 5 | #define fb_pgprotect(...) do {} while (0) | ||
| 6 | |||
| 7 | static inline int fb_is_primary_device(struct fb_info *info) | ||
| 8 | { | ||
| 9 | return 0; | ||
| 10 | } | ||
| 11 | |||
| 12 | #endif /* __ASM_GENERIC_FB_H_ */ | ||
diff --git a/include/asm-generic/getorder.h b/include/asm-generic/getorder.h new file mode 100644 index 000000000000..67e7245dc9b3 --- /dev/null +++ b/include/asm-generic/getorder.h | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | #ifndef __ASM_GENERIC_GETORDER_H | ||
| 2 | #define __ASM_GENERIC_GETORDER_H | ||
| 3 | |||
| 4 | #ifndef __ASSEMBLY__ | ||
| 5 | |||
| 6 | #include <linux/compiler.h> | ||
| 7 | |||
| 8 | /* Pure 2^n version of get_order */ | ||
| 9 | static inline __attribute_const__ int get_order(unsigned long size) | ||
| 10 | { | ||
| 11 | int order; | ||
| 12 | |||
| 13 | size = (size - 1) >> (PAGE_SHIFT - 1); | ||
| 14 | order = -1; | ||
| 15 | do { | ||
| 16 | size >>= 1; | ||
| 17 | order++; | ||
| 18 | } while (size); | ||
| 19 | return order; | ||
| 20 | } | ||
| 21 | |||
| 22 | #endif /* __ASSEMBLY__ */ | ||
| 23 | |||
| 24 | #endif /* __ASM_GENERIC_GETORDER_H */ | ||
diff --git a/include/asm-generic/hardirq.h b/include/asm-generic/hardirq.h new file mode 100644 index 000000000000..3d5d2c906ab3 --- /dev/null +++ b/include/asm-generic/hardirq.h | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | #ifndef __ASM_GENERIC_HARDIRQ_H | ||
| 2 | #define __ASM_GENERIC_HARDIRQ_H | ||
| 3 | |||
| 4 | #include <linux/cache.h> | ||
| 5 | #include <linux/threads.h> | ||
| 6 | #include <linux/irq.h> | ||
| 7 | |||
| 8 | typedef struct { | ||
| 9 | unsigned long __softirq_pending; | ||
| 10 | } ____cacheline_aligned irq_cpustat_t; | ||
| 11 | |||
| 12 | #include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ | ||
| 13 | |||
| 14 | #ifndef HARDIRQ_BITS | ||
| 15 | #define HARDIRQ_BITS 8 | ||
| 16 | #endif | ||
| 17 | |||
| 18 | /* | ||
| 19 | * The hardirq mask has to be large enough to have | ||
| 20 | * space for potentially all IRQ sources in the system | ||
| 21 | * nesting on a single CPU: | ||
| 22 | */ | ||
| 23 | #if (1 << HARDIRQ_BITS) < NR_IRQS | ||
| 24 | # error HARDIRQ_BITS is too low! | ||
| 25 | #endif | ||
| 26 | |||
| 27 | #ifndef ack_bad_irq | ||
| 28 | static inline void ack_bad_irq(unsigned int irq) | ||
| 29 | { | ||
| 30 | printk(KERN_CRIT "unexpected IRQ trap at vector %02x\n", irq); | ||
| 31 | } | ||
| 32 | #endif | ||
| 33 | |||
| 34 | #endif /* __ASM_GENERIC_HARDIRQ_H */ | ||
diff --git a/include/asm-generic/hw_irq.h b/include/asm-generic/hw_irq.h new file mode 100644 index 000000000000..89036d7b40e0 --- /dev/null +++ b/include/asm-generic/hw_irq.h | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #ifndef __ASM_GENERIC_HW_IRQ_H | ||
| 2 | #define __ASM_GENERIC_HW_IRQ_H | ||
| 3 | /* | ||
| 4 | * hw_irq.h has internal declarations for the low-level interrupt | ||
| 5 | * controller, like the original i8259A. | ||
| 6 | * In general, this is not needed for new architectures. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #endif /* __ASM_GENERIC_HW_IRQ_H */ | ||
diff --git a/include/asm-generic/int-l64.h b/include/asm-generic/int-l64.h index 2af9b75d77db..1ca3efc976cc 100644 --- a/include/asm-generic/int-l64.h +++ b/include/asm-generic/int-l64.h | |||
| @@ -8,6 +8,8 @@ | |||
| 8 | #ifndef _ASM_GENERIC_INT_L64_H | 8 | #ifndef _ASM_GENERIC_INT_L64_H |
| 9 | #define _ASM_GENERIC_INT_L64_H | 9 | #define _ASM_GENERIC_INT_L64_H |
| 10 | 10 | ||
| 11 | #include <asm/bitsperlong.h> | ||
| 12 | |||
| 11 | #ifndef __ASSEMBLY__ | 13 | #ifndef __ASSEMBLY__ |
| 12 | /* | 14 | /* |
| 13 | * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the | 15 | * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the |
diff --git a/include/asm-generic/int-ll64.h b/include/asm-generic/int-ll64.h index f9bc9ac29b36..f394147c0739 100644 --- a/include/asm-generic/int-ll64.h +++ b/include/asm-generic/int-ll64.h | |||
| @@ -8,6 +8,8 @@ | |||
| 8 | #ifndef _ASM_GENERIC_INT_LL64_H | 8 | #ifndef _ASM_GENERIC_INT_LL64_H |
| 9 | #define _ASM_GENERIC_INT_LL64_H | 9 | #define _ASM_GENERIC_INT_LL64_H |
| 10 | 10 | ||
| 11 | #include <asm/bitsperlong.h> | ||
| 12 | |||
| 11 | #ifndef __ASSEMBLY__ | 13 | #ifndef __ASSEMBLY__ |
| 12 | /* | 14 | /* |
| 13 | * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the | 15 | * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the |
diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h new file mode 100644 index 000000000000..bcee6365dca0 --- /dev/null +++ b/include/asm-generic/io.h | |||
| @@ -0,0 +1,300 @@ | |||
| 1 | /* Generic I/O port emulation, based on MN10300 code | ||
| 2 | * | ||
| 3 | * Copyright (C) 2007 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 Licence | ||
| 8 | * as published by the Free Software Foundation; either version | ||
| 9 | * 2 of the Licence, or (at your option) any later version. | ||
| 10 | */ | ||
| 11 | #ifndef __ASM_GENERIC_IO_H | ||
| 12 | #define __ASM_GENERIC_IO_H | ||
| 13 | |||
| 14 | #include <asm/page.h> /* I/O is all done through memory accesses */ | ||
| 15 | #include <asm/cacheflush.h> | ||
| 16 | #include <linux/types.h> | ||
| 17 | |||
| 18 | #ifdef CONFIG_GENERIC_IOMAP | ||
| 19 | #include <asm-generic/iomap.h> | ||
| 20 | #endif | ||
| 21 | |||
| 22 | #define mmiowb() do {} while (0) | ||
| 23 | |||
| 24 | /*****************************************************************************/ | ||
| 25 | /* | ||
| 26 | * readX/writeX() are used to access memory mapped devices. On some | ||
| 27 | * architectures the memory mapped IO stuff needs to be accessed | ||
| 28 | * differently. On the simple architectures, we just read/write the | ||
| 29 | * memory location directly. | ||
| 30 | */ | ||
| 31 | static inline u8 __raw_readb(const volatile void __iomem *addr) | ||
| 32 | { | ||
| 33 | return *(const volatile u8 __force *) addr; | ||
| 34 | } | ||
| 35 | |||
| 36 | static inline u16 __raw_readw(const volatile void __iomem *addr) | ||
| 37 | { | ||
| 38 | return *(const volatile u16 __force *) addr; | ||
| 39 | } | ||
| 40 | |||
| 41 | static inline u32 __raw_readl(const volatile void __iomem *addr) | ||
| 42 | { | ||
| 43 | return *(const volatile u32 __force *) addr; | ||
| 44 | } | ||
| 45 | |||
| 46 | #define readb __raw_readb | ||
| 47 | #define readw(addr) __le16_to_cpu(__raw_readw(addr)) | ||
| 48 | #define readl(addr) __le32_to_cpu(__raw_readl(addr)) | ||
| 49 | |||
| 50 | static inline void __raw_writeb(u8 b, volatile void __iomem *addr) | ||
| 51 | { | ||
| 52 | *(volatile u8 __force *) addr = b; | ||
| 53 | } | ||
| 54 | |||
| 55 | static inline void __raw_writew(u16 b, volatile void __iomem *addr) | ||
| 56 | { | ||
| 57 | *(volatile u16 __force *) addr = b; | ||
| 58 | } | ||
| 59 | |||
| 60 | static inline void __raw_writel(u32 b, volatile void __iomem *addr) | ||
| 61 | { | ||
| 62 | *(volatile u32 __force *) addr = b; | ||
| 63 | } | ||
| 64 | |||
| 65 | #define writeb __raw_writeb | ||
| 66 | #define writew(b,addr) __raw_writew(__cpu_to_le16(b),addr) | ||
| 67 | #define writel(b,addr) __raw_writel(__cpu_to_le32(b),addr) | ||
| 68 | |||
| 69 | #ifdef CONFIG_64BIT | ||
| 70 | static inline u64 __raw_readq(const volatile void __iomem *addr) | ||
| 71 | { | ||
| 72 | return *(const volatile u64 __force *) addr; | ||
| 73 | } | ||
| 74 | #define readq(addr) __le64_to_cpu(__raw_readq(addr)) | ||
| 75 | |||
| 76 | static inline void __raw_writeq(u64 b, volatile void __iomem *addr) | ||
| 77 | { | ||
| 78 | *(volatile u64 __force *) addr = b; | ||
| 79 | } | ||
| 80 | #define writeq(b,addr) __raw_writeq(__cpu_to_le64(b),addr) | ||
| 81 | #endif | ||
| 82 | |||
| 83 | /*****************************************************************************/ | ||
| 84 | /* | ||
| 85 | * traditional input/output functions | ||
| 86 | */ | ||
| 87 | |||
| 88 | static inline u8 inb(unsigned long addr) | ||
| 89 | { | ||
| 90 | return readb((volatile void __iomem *) addr); | ||
| 91 | } | ||
| 92 | |||
| 93 | static inline u16 inw(unsigned long addr) | ||
| 94 | { | ||
| 95 | return readw((volatile void __iomem *) addr); | ||
| 96 | } | ||
| 97 | |||
| 98 | static inline u32 inl(unsigned long addr) | ||
| 99 | { | ||
| 100 | return readl((volatile void __iomem *) addr); | ||
| 101 | } | ||
| 102 | |||
| 103 | static inline void outb(u8 b, unsigned long addr) | ||
| 104 | { | ||
| 105 | writeb(b, (volatile void __iomem *) addr); | ||
| 106 | } | ||
| 107 | |||
| 108 | static inline void outw(u16 b, unsigned long addr) | ||
| 109 | { | ||
| 110 | writew(b, (volatile void __iomem *) addr); | ||
| 111 | } | ||
| 112 | |||
| 113 | static inline void outl(u32 b, unsigned long addr) | ||
| 114 | { | ||
| 115 | writel(b, (volatile void __iomem *) addr); | ||
| 116 | } | ||
| 117 | |||
| 118 | #define inb_p(addr) inb(addr) | ||
| 119 | #define inw_p(addr) inw(addr) | ||
| 120 | #define inl_p(addr) inl(addr) | ||
| 121 | #define outb_p(x, addr) outb((x), (addr)) | ||
| 122 | #define outw_p(x, addr) outw((x), (addr)) | ||
| 123 | #define outl_p(x, addr) outl((x), (addr)) | ||
| 124 | |||
| 125 | static inline void insb(unsigned long addr, void *buffer, int count) | ||
| 126 | { | ||
| 127 | if (count) { | ||
| 128 | u8 *buf = buffer; | ||
| 129 | do { | ||
| 130 | u8 x = inb(addr); | ||
| 131 | *buf++ = x; | ||
| 132 | } while (--count); | ||
| 133 | } | ||
| 134 | } | ||
| 135 | |||
| 136 | static inline void insw(unsigned long addr, void *buffer, int count) | ||
| 137 | { | ||
| 138 | if (count) { | ||
| 139 | u16 *buf = buffer; | ||
| 140 | do { | ||
| 141 | u16 x = inw(addr); | ||
| 142 | *buf++ = x; | ||
| 143 | } while (--count); | ||
| 144 | } | ||
| 145 | } | ||
| 146 | |||
| 147 | static inline void insl(unsigned long addr, void *buffer, int count) | ||
| 148 | { | ||
| 149 | if (count) { | ||
| 150 | u32 *buf = buffer; | ||
| 151 | do { | ||
| 152 | u32 x = inl(addr); | ||
| 153 | *buf++ = x; | ||
| 154 | } while (--count); | ||
| 155 | } | ||
| 156 | } | ||
| 157 | |||
| 158 | static inline void outsb(unsigned long addr, const void *buffer, int count) | ||
| 159 | { | ||
| 160 | if (count) { | ||
| 161 | const u8 *buf = buffer; | ||
| 162 | do { | ||
| 163 | outb(*buf++, addr); | ||
| 164 | } while (--count); | ||
| 165 | } | ||
| 166 | } | ||
| 167 | |||
| 168 | static inline void outsw(unsigned long addr, const void *buffer, int count) | ||
| 169 | { | ||
| 170 | if (count) { | ||
| 171 | const u16 *buf = buffer; | ||
| 172 | do { | ||
| 173 | outw(*buf++, addr); | ||
| 174 | } while (--count); | ||
| 175 | } | ||
| 176 | } | ||
| 177 | |||
| 178 | static inline void outsl(unsigned long addr, const void *buffer, int count) | ||
| 179 | { | ||
| 180 | if (count) { | ||
| 181 | const u32 *buf = buffer; | ||
| 182 | do { | ||
| 183 | outl(*buf++, addr); | ||
| 184 | } while (--count); | ||
| 185 | } | ||
| 186 | } | ||
| 187 | |||
| 188 | #ifndef CONFIG_GENERIC_IOMAP | ||
| 189 | #define ioread8(addr) readb(addr) | ||
| 190 | #define ioread16(addr) readw(addr) | ||
| 191 | #define ioread32(addr) readl(addr) | ||
| 192 | |||
| 193 | #define iowrite8(v, addr) writeb((v), (addr)) | ||
| 194 | #define iowrite16(v, addr) writew((v), (addr)) | ||
| 195 | #define iowrite32(v, addr) writel((v), (addr)) | ||
| 196 | |||
| 197 | #define ioread8_rep(p, dst, count) \ | ||
| 198 | insb((unsigned long) (p), (dst), (count)) | ||
| 199 | #define ioread16_rep(p, dst, count) \ | ||
| 200 | insw((unsigned long) (p), (dst), (count)) | ||
| 201 | #define ioread32_rep(p, dst, count) \ | ||
| 202 | insl((unsigned long) (p), (dst), (count)) | ||
| 203 | |||
| 204 | #define iowrite8_rep(p, src, count) \ | ||
| 205 | outsb((unsigned long) (p), (src), (count)) | ||
| 206 | #define iowrite16_rep(p, src, count) \ | ||
| 207 | outsw((unsigned long) (p), (src), (count)) | ||
| 208 | #define iowrite32_rep(p, src, count) \ | ||
| 209 | outsl((unsigned long) (p), (src), (count)) | ||
| 210 | #endif /* CONFIG_GENERIC_IOMAP */ | ||
| 211 | |||
| 212 | |||
| 213 | #define IO_SPACE_LIMIT 0xffffffff | ||
| 214 | |||
| 215 | #ifdef __KERNEL__ | ||
| 216 | |||
| 217 | #include <linux/vmalloc.h> | ||
| 218 | #define __io_virt(x) ((void __force *) (x)) | ||
| 219 | |||
| 220 | #ifndef CONFIG_GENERIC_IOMAP | ||
| 221 | /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ | ||
| 222 | struct pci_dev; | ||
| 223 | extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max); | ||
| 224 | static inline void pci_iounmap(struct pci_dev *dev, void __iomem *p) | ||
| 225 | { | ||
| 226 | } | ||
| 227 | #endif /* CONFIG_GENERIC_IOMAP */ | ||
| 228 | |||
| 229 | /* | ||
| 230 | * Change virtual addresses to physical addresses and vv. | ||
| 231 | * These are pretty trivial | ||
| 232 | */ | ||
| 233 | static inline unsigned long virt_to_phys(volatile void *address) | ||
| 234 | { | ||
| 235 | return __pa((unsigned long)address); | ||
| 236 | } | ||
| 237 | |||
| 238 | static inline void *phys_to_virt(unsigned long address) | ||
| 239 | { | ||
| 240 | return __va(address); | ||
| 241 | } | ||
| 242 | |||
| 243 | /* | ||
| 244 | * Change "struct page" to physical address. | ||
| 245 | */ | ||
| 246 | static inline void __iomem *ioremap(phys_addr_t offset, unsigned long size) | ||
| 247 | { | ||
| 248 | return (void __iomem*) (unsigned long)offset; | ||
| 249 | } | ||
| 250 | |||
| 251 | #define __ioremap(offset, size, flags) ioremap(offset, size) | ||
| 252 | |||
| 253 | #ifndef ioremap_nocache | ||
| 254 | #define ioremap_nocache ioremap | ||
| 255 | #endif | ||
| 256 | |||
| 257 | #ifndef ioremap_wc | ||
| 258 | #define ioremap_wc ioremap_nocache | ||
| 259 | #endif | ||
| 260 | |||
| 261 | static inline void iounmap(void *addr) | ||
| 262 | { | ||
| 263 | } | ||
| 264 | |||
| 265 | #ifndef CONFIG_GENERIC_IOMAP | ||
| 266 | static inline void __iomem *ioport_map(unsigned long port, unsigned int nr) | ||
| 267 | { | ||
| 268 | return (void __iomem *) port; | ||
| 269 | } | ||
| 270 | |||
| 271 | static inline void ioport_unmap(void __iomem *p) | ||
| 272 | { | ||
| 273 | } | ||
| 274 | #else /* CONFIG_GENERIC_IOMAP */ | ||
| 275 | extern void __iomem *ioport_map(unsigned long port, unsigned int nr); | ||
| 276 | extern void ioport_unmap(void __iomem *p); | ||
| 277 | #endif /* CONFIG_GENERIC_IOMAP */ | ||
| 278 | |||
| 279 | #define xlate_dev_kmem_ptr(p) p | ||
| 280 | #define xlate_dev_mem_ptr(p) ((void *) (p)) | ||
| 281 | |||
| 282 | #ifndef virt_to_bus | ||
| 283 | static inline unsigned long virt_to_bus(volatile void *address) | ||
| 284 | { | ||
| 285 | return ((unsigned long) address); | ||
| 286 | } | ||
| 287 | |||
| 288 | static inline void *bus_to_virt(unsigned long address) | ||
| 289 | { | ||
| 290 | return (void *) address; | ||
| 291 | } | ||
| 292 | #endif | ||
| 293 | |||
| 294 | #define memset_io(a, b, c) memset(__io_virt(a), (b), (c)) | ||
| 295 | #define memcpy_fromio(a, b, c) memcpy((a), __io_virt(b), (c)) | ||
| 296 | #define memcpy_toio(a, b, c) memcpy(__io_virt(a), (b), (c)) | ||
| 297 | |||
| 298 | #endif /* __KERNEL__ */ | ||
| 299 | |||
| 300 | #endif /* __ASM_GENERIC_IO_H */ | ||
diff --git a/include/asm-generic/ioctls.h b/include/asm-generic/ioctls.h new file mode 100644 index 000000000000..a799e20a769e --- /dev/null +++ b/include/asm-generic/ioctls.h | |||
| @@ -0,0 +1,110 @@ | |||
| 1 | #ifndef __ASM_GENERIC_IOCTLS_H | ||
| 2 | #define __ASM_GENERIC_IOCTLS_H | ||
| 3 | |||
| 4 | #include <linux/ioctl.h> | ||
| 5 | |||
| 6 | /* | ||
| 7 | * These are the most common definitions for tty ioctl numbers. | ||
| 8 | * Most of them do not use the recommended _IOC(), but there is | ||
| 9 | * probably some source code out there hardcoding the number, | ||
| 10 | * so we might as well use them for all new platforms. | ||
| 11 | * | ||
| 12 | * The architectures that use different values here typically | ||
| 13 | * try to be compatible with some Unix variants for the same | ||
| 14 | * architecture. | ||
| 15 | */ | ||
| 16 | |||
| 17 | /* 0x54 is just a magic number to make these relatively unique ('T') */ | ||
| 18 | |||
| 19 | #define TCGETS 0x5401 | ||
| 20 | #define TCSETS 0x5402 | ||
| 21 | #define TCSETSW 0x5403 | ||
| 22 | #define TCSETSF 0x5404 | ||
| 23 | #define TCGETA 0x5405 | ||
| 24 | #define TCSETA 0x5406 | ||
| 25 | #define TCSETAW 0x5407 | ||
| 26 | #define TCSETAF 0x5408 | ||
| 27 | #define TCSBRK 0x5409 | ||
| 28 | #define TCXONC 0x540A | ||
| 29 | #define TCFLSH 0x540B | ||
| 30 | #define TIOCEXCL 0x540C | ||
| 31 | #define TIOCNXCL 0x540D | ||
| 32 | #define TIOCSCTTY 0x540E | ||
| 33 | #define TIOCGPGRP 0x540F | ||
| 34 | #define TIOCSPGRP 0x5410 | ||
| 35 | #define TIOCOUTQ 0x5411 | ||
| 36 | #define TIOCSTI 0x5412 | ||
| 37 | #define TIOCGWINSZ 0x5413 | ||
| 38 | #define TIOCSWINSZ 0x5414 | ||
| 39 | #define TIOCMGET 0x5415 | ||
| 40 | #define TIOCMBIS 0x5416 | ||
| 41 | #define TIOCMBIC 0x5417 | ||
| 42 | #define TIOCMSET 0x5418 | ||
| 43 | #define TIOCGSOFTCAR 0x5419 | ||
| 44 | #define TIOCSSOFTCAR 0x541A | ||
| 45 | #define FIONREAD 0x541B | ||
| 46 | #define TIOCINQ FIONREAD | ||
| 47 | #define TIOCLINUX 0x541C | ||
| 48 | #define TIOCCONS 0x541D | ||
| 49 | #define TIOCGSERIAL 0x541E | ||
| 50 | #define TIOCSSERIAL 0x541F | ||
| 51 | #define TIOCPKT 0x5420 | ||
| 52 | #define FIONBIO 0x5421 | ||
| 53 | #define TIOCNOTTY 0x5422 | ||
| 54 | #define TIOCSETD 0x5423 | ||
| 55 | #define TIOCGETD 0x5424 | ||
| 56 | #define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */ | ||
| 57 | #define TIOCSBRK 0x5427 /* BSD compatibility */ | ||
| 58 | #define TIOCCBRK 0x5428 /* BSD compatibility */ | ||
| 59 | #define TIOCGSID 0x5429 /* Return the session ID of FD */ | ||
| 60 | #define TCGETS2 _IOR('T', 0x2A, struct termios2) | ||
| 61 | #define TCSETS2 _IOW('T', 0x2B, struct termios2) | ||
| 62 | #define TCSETSW2 _IOW('T', 0x2C, struct termios2) | ||
| 63 | #define TCSETSF2 _IOW('T', 0x2D, struct termios2) | ||
| 64 | #define TIOCGRS485 0x542E | ||
| 65 | #define TIOCSRS485 0x542F | ||
| 66 | #define TIOCGPTN _IOR('T', 0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ | ||
| 67 | #define TIOCSPTLCK _IOW('T', 0x31, int) /* Lock/unlock Pty */ | ||
| 68 | #define TCGETX 0x5432 /* SYS5 TCGETX compatibility */ | ||
| 69 | #define TCSETX 0x5433 | ||
| 70 | #define TCSETXF 0x5434 | ||
| 71 | #define TCSETXW 0x5435 | ||
| 72 | |||
| 73 | #define FIONCLEX 0x5450 | ||
| 74 | #define FIOCLEX 0x5451 | ||
| 75 | #define FIOASYNC 0x5452 | ||
| 76 | #define TIOCSERCONFIG 0x5453 | ||
| 77 | #define TIOCSERGWILD 0x5454 | ||
| 78 | #define TIOCSERSWILD 0x5455 | ||
| 79 | #define TIOCGLCKTRMIOS 0x5456 | ||
| 80 | #define TIOCSLCKTRMIOS 0x5457 | ||
| 81 | #define TIOCSERGSTRUCT 0x5458 /* For debugging only */ | ||
| 82 | #define TIOCSERGETLSR 0x5459 /* Get line status register */ | ||
| 83 | #define TIOCSERGETMULTI 0x545A /* Get multiport config */ | ||
| 84 | #define TIOCSERSETMULTI 0x545B /* Set multiport config */ | ||
| 85 | |||
| 86 | #define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ | ||
| 87 | #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ | ||
| 88 | |||
| 89 | /* | ||
| 90 | * some architectures define FIOQSIZE as 0x545E, which is used for | ||
| 91 | * TIOCGHAYESESP on others | ||
| 92 | */ | ||
| 93 | #ifndef FIOQSIZE | ||
| 94 | # define TIOCGHAYESESP 0x545E /* Get Hayes ESP configuration */ | ||
| 95 | # define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */ | ||
| 96 | # define FIOQSIZE 0x5460 | ||
| 97 | #endif | ||
| 98 | |||
| 99 | /* Used for packet mode */ | ||
| 100 | #define TIOCPKT_DATA 0 | ||
| 101 | #define TIOCPKT_FLUSHREAD 1 | ||
| 102 | #define TIOCPKT_FLUSHWRITE 2 | ||
| 103 | #define TIOCPKT_STOP 4 | ||
| 104 | #define TIOCPKT_START 8 | ||
| 105 | #define TIOCPKT_NOSTOP 16 | ||
| 106 | #define TIOCPKT_DOSTOP 32 | ||
| 107 | |||
| 108 | #define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ | ||
| 109 | |||
| 110 | #endif /* __ASM_GENERIC_IOCTLS_H */ | ||
diff --git a/include/asm-generic/ipcbuf.h b/include/asm-generic/ipcbuf.h new file mode 100644 index 000000000000..76982b2a1b58 --- /dev/null +++ b/include/asm-generic/ipcbuf.h | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | #ifndef __ASM_GENERIC_IPCBUF_H | ||
| 2 | #define __ASM_GENERIC_IPCBUF_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * The generic ipc64_perm structure: | ||
| 6 | * Note extra padding because this structure is passed back and forth | ||
| 7 | * between kernel and user space. | ||
| 8 | * | ||
| 9 | * ipc64_perm was originally meant to be architecture specific, but | ||
| 10 | * everyone just ended up making identical copies without specific | ||
| 11 | * optimizations, so we may just as well all use the same one. | ||
| 12 | * | ||
| 13 | * Pad space is left for: | ||
| 14 | * - 32-bit mode_t on architectures that only had 16 bit | ||
| 15 | * - 32-bit seq | ||
| 16 | * - 2 miscellaneous 32-bit values | ||
| 17 | */ | ||
| 18 | |||
| 19 | struct ipc64_perm { | ||
| 20 | __kernel_key_t key; | ||
| 21 | __kernel_uid32_t uid; | ||
| 22 | __kernel_gid32_t gid; | ||
| 23 | __kernel_uid32_t cuid; | ||
| 24 | __kernel_gid32_t cgid; | ||
| 25 | __kernel_mode_t mode; | ||
| 26 | /* pad if mode_t is u16: */ | ||
| 27 | unsigned char __pad1[4 - sizeof(__kernel_mode_t)]; | ||
| 28 | unsigned short seq; | ||
| 29 | unsigned short __pad2; | ||
| 30 | unsigned long __unused1; | ||
| 31 | unsigned long __unused2; | ||
| 32 | }; | ||
| 33 | |||
| 34 | #endif /* __ASM_GENERIC_IPCBUF_H */ | ||
diff --git a/include/asm-generic/irq.h b/include/asm-generic/irq.h new file mode 100644 index 000000000000..b90ec0bc485f --- /dev/null +++ b/include/asm-generic/irq.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | #ifndef __ASM_GENERIC_IRQ_H | ||
| 2 | #define __ASM_GENERIC_IRQ_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * NR_IRQS is the upper bound of how many interrupts can be handled | ||
| 6 | * in the platform. It is used to size the static irq_map array, | ||
| 7 | * so don't make it too big. | ||
| 8 | */ | ||
| 9 | #ifndef NR_IRQS | ||
| 10 | #define NR_IRQS 64 | ||
| 11 | #endif | ||
| 12 | |||
| 13 | static inline int irq_canonicalize(int irq) | ||
| 14 | { | ||
| 15 | return irq; | ||
| 16 | } | ||
| 17 | |||
| 18 | #endif /* __ASM_GENERIC_IRQ_H */ | ||
diff --git a/include/asm-generic/irqflags.h b/include/asm-generic/irqflags.h new file mode 100644 index 000000000000..9aebf618275a --- /dev/null +++ b/include/asm-generic/irqflags.h | |||
| @@ -0,0 +1,72 @@ | |||
| 1 | #ifndef __ASM_GENERIC_IRQFLAGS_H | ||
| 2 | #define __ASM_GENERIC_IRQFLAGS_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * All architectures should implement at least the first two functions, | ||
| 6 | * usually inline assembly will be the best way. | ||
| 7 | */ | ||
| 8 | #ifndef RAW_IRQ_DISABLED | ||
| 9 | #define RAW_IRQ_DISABLED 0 | ||
| 10 | #define RAW_IRQ_ENABLED 1 | ||
| 11 | #endif | ||
| 12 | |||
| 13 | /* read interrupt enabled status */ | ||
| 14 | #ifndef __raw_local_save_flags | ||
| 15 | unsigned long __raw_local_save_flags(void); | ||
| 16 | #endif | ||
| 17 | |||
| 18 | /* set interrupt enabled status */ | ||
| 19 | #ifndef raw_local_irq_restore | ||
| 20 | void raw_local_irq_restore(unsigned long flags); | ||
| 21 | #endif | ||
| 22 | |||
| 23 | /* get status and disable interrupts */ | ||
| 24 | #ifndef __raw_local_irq_save | ||
| 25 | static inline unsigned long __raw_local_irq_save(void) | ||
| 26 | { | ||
| 27 | unsigned long flags; | ||
| 28 | flags = __raw_local_save_flags(); | ||
| 29 | raw_local_irq_restore(RAW_IRQ_DISABLED); | ||
| 30 | return flags; | ||
| 31 | } | ||
| 32 | #endif | ||
| 33 | |||
| 34 | /* test flags */ | ||
| 35 | #ifndef raw_irqs_disabled_flags | ||
| 36 | static inline int raw_irqs_disabled_flags(unsigned long flags) | ||
| 37 | { | ||
| 38 | return flags == RAW_IRQ_DISABLED; | ||
| 39 | } | ||
| 40 | #endif | ||
| 41 | |||
| 42 | /* unconditionally enable interrupts */ | ||
| 43 | #ifndef raw_local_irq_enable | ||
| 44 | static inline void raw_local_irq_enable(void) | ||
| 45 | { | ||
| 46 | raw_local_irq_restore(RAW_IRQ_ENABLED); | ||
| 47 | } | ||
| 48 | #endif | ||
| 49 | |||
| 50 | /* unconditionally disable interrupts */ | ||
| 51 | #ifndef raw_local_irq_disable | ||
| 52 | static inline void raw_local_irq_disable(void) | ||
| 53 | { | ||
| 54 | raw_local_irq_restore(RAW_IRQ_DISABLED); | ||
| 55 | } | ||
| 56 | #endif | ||
| 57 | |||
| 58 | /* test hardware interrupt enable bit */ | ||
| 59 | #ifndef raw_irqs_disabled | ||
| 60 | static inline int raw_irqs_disabled(void) | ||
| 61 | { | ||
| 62 | return raw_irqs_disabled_flags(__raw_local_save_flags()); | ||
| 63 | } | ||
| 64 | #endif | ||
| 65 | |||
| 66 | #define raw_local_save_flags(flags) \ | ||
| 67 | do { (flags) = __raw_local_save_flags(); } while (0) | ||
| 68 | |||
| 69 | #define raw_local_irq_save(flags) \ | ||
| 70 | do { (flags) = __raw_local_irq_save(); } while (0) | ||
| 71 | |||
| 72 | #endif /* __ASM_GENERIC_IRQFLAGS_H */ | ||
diff --git a/include/asm-generic/kmap_types.h b/include/asm-generic/kmap_types.h new file mode 100644 index 000000000000..58c33055c304 --- /dev/null +++ b/include/asm-generic/kmap_types.h | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | #ifndef _ASM_GENERIC_KMAP_TYPES_H | ||
| 2 | #define _ASM_GENERIC_KMAP_TYPES_H | ||
| 3 | |||
| 4 | #ifdef CONFIG_DEBUG_HIGHMEM | ||
| 5 | # define D(n) __KM_FENCE_##n , | ||
| 6 | #else | ||
| 7 | # define D(n) | ||
| 8 | #endif | ||
| 9 | |||
| 10 | enum km_type { | ||
| 11 | D(0) KM_BOUNCE_READ, | ||
| 12 | D(1) KM_SKB_SUNRPC_DATA, | ||
| 13 | D(2) KM_SKB_DATA_SOFTIRQ, | ||
| 14 | D(3) KM_USER0, | ||
| 15 | D(4) KM_USER1, | ||
| 16 | D(5) KM_BIO_SRC_IRQ, | ||
| 17 | D(6) KM_BIO_DST_IRQ, | ||
| 18 | D(7) KM_PTE0, | ||
| 19 | D(8) KM_PTE1, | ||
| 20 | D(9) KM_IRQ0, | ||
| 21 | D(10) KM_IRQ1, | ||
| 22 | D(11) KM_SOFTIRQ0, | ||
| 23 | D(12) KM_SOFTIRQ1, | ||
| 24 | D(13) KM_SYNC_ICACHE, | ||
| 25 | D(14) KM_SYNC_DCACHE, | ||
| 26 | D(15) KM_UML_USERCOPY, /* UML specific, for copy_*_user - used in do_op_one_page */ | ||
| 27 | D(16) KM_TYPE_NR | ||
| 28 | }; | ||
| 29 | |||
| 30 | #undef D | ||
| 31 | |||
| 32 | #endif | ||
diff --git a/include/asm-generic/linkage.h b/include/asm-generic/linkage.h new file mode 100644 index 000000000000..fef7a01e5415 --- /dev/null +++ b/include/asm-generic/linkage.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #ifndef __ASM_GENERIC_LINKAGE_H | ||
| 2 | #define __ASM_GENERIC_LINKAGE_H | ||
| 3 | /* | ||
| 4 | * linux/linkage.h provides reasonable defaults. | ||
| 5 | * an architecture can override them by providing its own version. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #endif /* __ASM_GENERIC_LINKAGE_H */ | ||
diff --git a/include/asm-generic/mman-common.h b/include/asm-generic/mman-common.h new file mode 100644 index 000000000000..3b69ad34189a --- /dev/null +++ b/include/asm-generic/mman-common.h | |||
| @@ -0,0 +1,41 @@ | |||
| 1 | #ifndef __ASM_GENERIC_MMAN_COMMON_H | ||
| 2 | #define __ASM_GENERIC_MMAN_COMMON_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | Author: Michael S. Tsirkin <mst@mellanox.co.il>, Mellanox Technologies Ltd. | ||
| 6 | Based on: asm-xxx/mman.h | ||
| 7 | */ | ||
| 8 | |||
| 9 | #define PROT_READ 0x1 /* page can be read */ | ||
| 10 | #define PROT_WRITE 0x2 /* page can be written */ | ||
| 11 | #define PROT_EXEC 0x4 /* page can be executed */ | ||
| 12 | #define PROT_SEM 0x8 /* page may be used for atomic ops */ | ||
| 13 | #define PROT_NONE 0x0 /* page can not be accessed */ | ||
| 14 | #define PROT_GROWSDOWN 0x01000000 /* mprotect flag: extend change to start of growsdown vma */ | ||
| 15 | #define PROT_GROWSUP 0x02000000 /* mprotect flag: extend change to end of growsup vma */ | ||
| 16 | |||
| 17 | #define MAP_SHARED 0x01 /* Share changes */ | ||
| 18 | #define MAP_PRIVATE 0x02 /* Changes are private */ | ||
| 19 | #define MAP_TYPE 0x0f /* Mask for type of mapping */ | ||
| 20 | #define MAP_FIXED 0x10 /* Interpret addr exactly */ | ||
| 21 | #define MAP_ANONYMOUS 0x20 /* don't use a file */ | ||
| 22 | |||
| 23 | #define MS_ASYNC 1 /* sync memory asynchronously */ | ||
| 24 | #define MS_INVALIDATE 2 /* invalidate the caches */ | ||
| 25 | #define MS_SYNC 4 /* synchronous memory sync */ | ||
| 26 | |||
| 27 | #define MADV_NORMAL 0 /* no further special treatment */ | ||
| 28 | #define MADV_RANDOM 1 /* expect random page references */ | ||
| 29 | #define MADV_SEQUENTIAL 2 /* expect sequential page references */ | ||
| 30 | #define MADV_WILLNEED 3 /* will need these pages */ | ||
| 31 | #define MADV_DONTNEED 4 /* don't need these pages */ | ||
| 32 | |||
| 33 | /* common parameters: try to keep these consistent across architectures */ | ||
| 34 | #define MADV_REMOVE 9 /* remove these pages & resources */ | ||
| 35 | #define MADV_DONTFORK 10 /* don't inherit across fork */ | ||
| 36 | #define MADV_DOFORK 11 /* do inherit across fork */ | ||
| 37 | |||
| 38 | /* compatibility flags */ | ||
| 39 | #define MAP_FILE 0 | ||
| 40 | |||
| 41 | #endif /* __ASM_GENERIC_MMAN_COMMON_H */ | ||
diff --git a/include/asm-generic/mman.h b/include/asm-generic/mman.h index 5e3dde2ee5ad..7cab4de2bca6 100644 --- a/include/asm-generic/mman.h +++ b/include/asm-generic/mman.h | |||
| @@ -1,41 +1,18 @@ | |||
| 1 | #ifndef _ASM_GENERIC_MMAN_H | 1 | #ifndef __ASM_GENERIC_MMAN_H |
| 2 | #define _ASM_GENERIC_MMAN_H | 2 | #define __ASM_GENERIC_MMAN_H |
| 3 | 3 | ||
| 4 | /* | 4 | #include <asm-generic/mman-common.h> |
| 5 | Author: Michael S. Tsirkin <mst@mellanox.co.il>, Mellanox Technologies Ltd. | ||
| 6 | Based on: asm-xxx/mman.h | ||
| 7 | */ | ||
| 8 | 5 | ||
| 9 | #define PROT_READ 0x1 /* page can be read */ | 6 | #define MAP_GROWSDOWN 0x0100 /* stack-like segment */ |
| 10 | #define PROT_WRITE 0x2 /* page can be written */ | 7 | #define MAP_DENYWRITE 0x0800 /* ETXTBSY */ |
| 11 | #define PROT_EXEC 0x4 /* page can be executed */ | 8 | #define MAP_EXECUTABLE 0x1000 /* mark it as an executable */ |
| 12 | #define PROT_SEM 0x8 /* page may be used for atomic ops */ | 9 | #define MAP_LOCKED 0x2000 /* pages are locked */ |
| 13 | #define PROT_NONE 0x0 /* page can not be accessed */ | 10 | #define MAP_NORESERVE 0x4000 /* don't check for reservations */ |
| 14 | #define PROT_GROWSDOWN 0x01000000 /* mprotect flag: extend change to start of growsdown vma */ | 11 | #define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ |
| 15 | #define PROT_GROWSUP 0x02000000 /* mprotect flag: extend change to end of growsup vma */ | 12 | #define MAP_NONBLOCK 0x10000 /* do not block on IO */ |
| 13 | #define MAP_STACK 0x20000 /* give out an address that is best suited for process/thread stacks */ | ||
| 16 | 14 | ||
| 17 | #define MAP_SHARED 0x01 /* Share changes */ | 15 | #define MCL_CURRENT 1 /* lock all current mappings */ |
| 18 | #define MAP_PRIVATE 0x02 /* Changes are private */ | 16 | #define MCL_FUTURE 2 /* lock all future mappings */ |
| 19 | #define MAP_TYPE 0x0f /* Mask for type of mapping */ | ||
| 20 | #define MAP_FIXED 0x10 /* Interpret addr exactly */ | ||
| 21 | #define MAP_ANONYMOUS 0x20 /* don't use a file */ | ||
| 22 | 17 | ||
| 23 | #define MS_ASYNC 1 /* sync memory asynchronously */ | 18 | #endif /* __ASM_GENERIC_MMAN_H */ |
| 24 | #define MS_INVALIDATE 2 /* invalidate the caches */ | ||
| 25 | #define MS_SYNC 4 /* synchronous memory sync */ | ||
| 26 | |||
| 27 | #define MADV_NORMAL 0 /* no further special treatment */ | ||
| 28 | #define MADV_RANDOM 1 /* expect random page references */ | ||
| 29 | #define MADV_SEQUENTIAL 2 /* expect sequential page references */ | ||
| 30 | #define MADV_WILLNEED 3 /* will need these pages */ | ||
| 31 | #define MADV_DONTNEED 4 /* don't need these pages */ | ||
| 32 | |||
| 33 | /* common parameters: try to keep these consistent across architectures */ | ||
| 34 | #define MADV_REMOVE 9 /* remove these pages & resources */ | ||
| 35 | #define MADV_DONTFORK 10 /* don't inherit across fork */ | ||
| 36 | #define MADV_DOFORK 11 /* do inherit across fork */ | ||
| 37 | |||
| 38 | /* compatibility flags */ | ||
| 39 | #define MAP_FILE 0 | ||
| 40 | |||
| 41 | #endif | ||
diff --git a/include/asm-generic/mmu.h b/include/asm-generic/mmu.h new file mode 100644 index 000000000000..4f4aa56d6b52 --- /dev/null +++ b/include/asm-generic/mmu.h | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | #ifndef __ASM_GENERIC_MMU_H | ||
| 2 | #define __ASM_GENERIC_MMU_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * This is the mmu.h header for nommu implementations. | ||
| 6 | * Architectures with an MMU need something more complex. | ||
| 7 | */ | ||
| 8 | #ifndef __ASSEMBLY__ | ||
| 9 | typedef struct { | ||
| 10 | struct vm_list_struct *vmlist; | ||
| 11 | unsigned long end_brk; | ||
| 12 | } mm_context_t; | ||
| 13 | #endif | ||
| 14 | |||
| 15 | #endif /* __ASM_GENERIC_MMU_H */ | ||
diff --git a/include/asm-generic/mmu_context.h b/include/asm-generic/mmu_context.h new file mode 100644 index 000000000000..a7eec910ba6c --- /dev/null +++ b/include/asm-generic/mmu_context.h | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | #ifndef __ASM_GENERIC_MMU_CONTEXT_H | ||
| 2 | #define __ASM_GENERIC_MMU_CONTEXT_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Generic hooks for NOMMU architectures, which do not need to do | ||
| 6 | * anything special here. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #include <asm-generic/mm_hooks.h> | ||
| 10 | |||
| 11 | struct task_struct; | ||
| 12 | struct mm_struct; | ||
| 13 | |||
| 14 | static inline void enter_lazy_tlb(struct mm_struct *mm, | ||
| 15 | struct task_struct *tsk) | ||
| 16 | { | ||
| 17 | } | ||
| 18 | |||
| 19 | static inline int init_new_context(struct task_struct *tsk, | ||
| 20 | struct mm_struct *mm) | ||
| 21 | { | ||
| 22 | return 0; | ||
| 23 | } | ||
| 24 | |||
| 25 | static inline void destroy_context(struct mm_struct *mm) | ||
| 26 | { | ||
| 27 | } | ||
| 28 | |||
| 29 | static inline void deactivate_mm(struct task_struct *task, | ||
| 30 | struct mm_struct *mm) | ||
| 31 | { | ||
| 32 | } | ||
| 33 | |||
| 34 | static inline void switch_mm(struct mm_struct *prev, | ||
| 35 | struct mm_struct *next, | ||
| 36 | struct task_struct *tsk) | ||
| 37 | { | ||
| 38 | } | ||
| 39 | |||
| 40 | static inline void activate_mm(struct mm_struct *prev_mm, | ||
| 41 | struct mm_struct *next_mm) | ||
| 42 | { | ||
| 43 | } | ||
| 44 | |||
| 45 | #endif /* __ASM_GENERIC_MMU_CONTEXT_H */ | ||
diff --git a/include/asm-generic/module.h b/include/asm-generic/module.h new file mode 100644 index 000000000000..ed5b44de4c91 --- /dev/null +++ b/include/asm-generic/module.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | #ifndef __ASM_GENERIC_MODULE_H | ||
| 2 | #define __ASM_GENERIC_MODULE_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Many architectures just need a simple module | ||
| 6 | * loader without arch specific data. | ||
| 7 | */ | ||
| 8 | struct mod_arch_specific | ||
| 9 | { | ||
| 10 | }; | ||
| 11 | |||
| 12 | #ifdef CONFIG_64BIT | ||
| 13 | #define Elf_Shdr Elf64_Shdr | ||
| 14 | #define Elf_Sym Elf64_Sym | ||
| 15 | #define Elf_Ehdr Elf64_Ehdr | ||
| 16 | #else | ||
| 17 | #define Elf_Shdr Elf32_Shdr | ||
| 18 | #define Elf_Sym Elf32_Sym | ||
| 19 | #define Elf_Ehdr Elf32_Ehdr | ||
| 20 | #endif | ||
| 21 | |||
| 22 | #endif /* __ASM_GENERIC_MODULE_H */ | ||
diff --git a/include/asm-generic/msgbuf.h b/include/asm-generic/msgbuf.h new file mode 100644 index 000000000000..aec850d9159e --- /dev/null +++ b/include/asm-generic/msgbuf.h | |||
| @@ -0,0 +1,47 @@ | |||
| 1 | #ifndef __ASM_GENERIC_MSGBUF_H | ||
| 2 | #define __ASM_GENERIC_MSGBUF_H | ||
| 3 | |||
| 4 | #include <asm/bitsperlong.h> | ||
| 5 | /* | ||
| 6 | * generic msqid64_ds structure. | ||
| 7 | * | ||
| 8 | * Note extra padding because this structure is passed back and forth | ||
| 9 | * between kernel and user space. | ||
| 10 | * | ||
| 11 | * msqid64_ds was originally meant to be architecture specific, but | ||
| 12 | * everyone just ended up making identical copies without specific | ||
| 13 | * optimizations, so we may just as well all use the same one. | ||
| 14 | * | ||
| 15 | * 64 bit architectures typically define a 64 bit __kernel_time_t, | ||
| 16 | * so they do not need the first three padding words. | ||
| 17 | * On big-endian systems, the padding is in the wrong place. | ||
| 18 | * | ||
| 19 | * Pad space is left for: | ||
| 20 | * - 64-bit time_t to solve y2038 problem | ||
| 21 | * - 2 miscellaneous 32-bit values | ||
| 22 | */ | ||
| 23 | |||
| 24 | struct msqid64_ds { | ||
| 25 | struct ipc64_perm msg_perm; | ||
| 26 | __kernel_time_t msg_stime; /* last msgsnd time */ | ||
| 27 | #if __BITS_PER_LONG != 64 | ||
| 28 | unsigned long __unused1; | ||
| 29 | #endif | ||
| 30 | __kernel_time_t msg_rtime; /* last msgrcv time */ | ||
| 31 | #if __BITS_PER_LONG != 64 | ||
| 32 | unsigned long __unused2; | ||
| 33 | #endif | ||
| 34 | __kernel_time_t msg_ctime; /* last change time */ | ||
| 35 | #if __BITS_PER_LONG != 64 | ||
| 36 | unsigned long __unused3; | ||
| 37 | #endif | ||
| 38 | unsigned long msg_cbytes; /* current number of bytes on queue */ | ||
| 39 | unsigned long msg_qnum; /* number of messages in queue */ | ||
| 40 | unsigned long msg_qbytes; /* max number of bytes on queue */ | ||
| 41 | __kernel_pid_t msg_lspid; /* pid of last msgsnd */ | ||
| 42 | __kernel_pid_t msg_lrpid; /* last receive pid */ | ||
| 43 | unsigned long __unused4; | ||
| 44 | unsigned long __unused5; | ||
| 45 | }; | ||
| 46 | |||
| 47 | #endif /* __ASM_GENERIC_MSGBUF_H */ | ||
diff --git a/include/asm-generic/mutex.h b/include/asm-generic/mutex.h new file mode 100644 index 000000000000..fe91ab502793 --- /dev/null +++ b/include/asm-generic/mutex.h | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #ifndef __ASM_GENERIC_MUTEX_H | ||
| 2 | #define __ASM_GENERIC_MUTEX_H | ||
| 3 | /* | ||
| 4 | * Pull in the generic implementation for the mutex fastpath, | ||
| 5 | * which is a reasonable default on many architectures. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #include <asm-generic/mutex-dec.h> | ||
| 9 | #endif /* __ASM_GENERIC_MUTEX_H */ | ||
diff --git a/include/asm-generic/page.h b/include/asm-generic/page.h index 14db733b8e68..75fec18cdc59 100644 --- a/include/asm-generic/page.h +++ b/include/asm-generic/page.h | |||
| @@ -1,24 +1,99 @@ | |||
| 1 | #ifndef _ASM_GENERIC_PAGE_H | 1 | #ifndef __ASM_GENERIC_PAGE_H |
| 2 | #define _ASM_GENERIC_PAGE_H | 2 | #define __ASM_GENERIC_PAGE_H |
| 3 | /* | ||
| 4 | * Generic page.h implementation, for NOMMU architectures. | ||
| 5 | * This provides the dummy definitions for the memory management. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifdef CONFIG_MMU | ||
| 9 | #error need to prove a real asm/page.h | ||
| 10 | #endif | ||
| 11 | |||
| 12 | |||
| 13 | /* PAGE_SHIFT determines the page size */ | ||
| 14 | |||
| 15 | #define PAGE_SHIFT 12 | ||
| 16 | #ifdef __ASSEMBLY__ | ||
| 17 | #define PAGE_SIZE (1 << PAGE_SHIFT) | ||
| 18 | #else | ||
| 19 | #define PAGE_SIZE (1UL << PAGE_SHIFT) | ||
| 20 | #endif | ||
| 21 | #define PAGE_MASK (~(PAGE_SIZE-1)) | ||
| 22 | |||
| 23 | #include <asm/setup.h> | ||
| 24 | |||
| 25 | #ifndef __ASSEMBLY__ | ||
| 26 | |||
| 27 | #define get_user_page(vaddr) __get_free_page(GFP_KERNEL) | ||
| 28 | #define free_user_page(page, addr) free_page(addr) | ||
| 29 | |||
| 30 | #define clear_page(page) memset((page), 0, PAGE_SIZE) | ||
| 31 | #define copy_page(to,from) memcpy((to), (from), PAGE_SIZE) | ||
| 32 | |||
| 33 | #define clear_user_page(page, vaddr, pg) clear_page(page) | ||
| 34 | #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) | ||
| 35 | |||
| 36 | /* | ||
| 37 | * These are used to make use of C type-checking.. | ||
| 38 | */ | ||
| 39 | typedef struct { | ||
| 40 | unsigned long pte; | ||
| 41 | } pte_t; | ||
| 42 | typedef struct { | ||
| 43 | unsigned long pmd[16]; | ||
| 44 | } pmd_t; | ||
| 45 | typedef struct { | ||
| 46 | unsigned long pgd; | ||
| 47 | } pgd_t; | ||
| 48 | typedef struct { | ||
| 49 | unsigned long pgprot; | ||
| 50 | } pgprot_t; | ||
| 51 | typedef struct page *pgtable_t; | ||
| 52 | |||
| 53 | #define pte_val(x) ((x).pte) | ||
| 54 | #define pmd_val(x) ((&x)->pmd[0]) | ||
| 55 | #define pgd_val(x) ((x).pgd) | ||
| 56 | #define pgprot_val(x) ((x).pgprot) | ||
| 57 | |||
| 58 | #define __pte(x) ((pte_t) { (x) } ) | ||
| 59 | #define __pmd(x) ((pmd_t) { (x) } ) | ||
| 60 | #define __pgd(x) ((pgd_t) { (x) } ) | ||
| 61 | #define __pgprot(x) ((pgprot_t) { (x) } ) | ||
| 62 | |||
| 63 | extern unsigned long memory_start; | ||
| 64 | extern unsigned long memory_end; | ||
| 65 | |||
| 66 | #endif /* !__ASSEMBLY__ */ | ||
| 67 | |||
| 68 | #ifdef CONFIG_KERNEL_RAM_BASE_ADDRESS | ||
| 69 | #define PAGE_OFFSET (CONFIG_KERNEL_RAM_BASE_ADDRESS) | ||
| 70 | #else | ||
| 71 | #define PAGE_OFFSET (0) | ||
| 72 | #endif | ||
| 3 | 73 | ||
| 4 | #ifndef __ASSEMBLY__ | 74 | #ifndef __ASSEMBLY__ |
| 5 | 75 | ||
| 6 | #include <linux/compiler.h> | 76 | #define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET)) |
| 77 | #define __pa(x) ((unsigned long) (x) - PAGE_OFFSET) | ||
| 78 | |||
| 79 | #define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) | ||
| 80 | #define pfn_to_virt(pfn) __va((pfn) << PAGE_SHIFT) | ||
| 81 | |||
| 82 | #define virt_to_page(addr) (mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT)) | ||
| 83 | #define page_to_virt(page) ((((page) - mem_map) << PAGE_SHIFT) + PAGE_OFFSET) | ||
| 84 | |||
| 85 | #ifndef page_to_phys | ||
| 86 | #define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) | ||
| 87 | #endif | ||
| 88 | |||
| 89 | #define pfn_valid(pfn) ((pfn) < max_mapnr) | ||
| 7 | 90 | ||
| 8 | /* Pure 2^n version of get_order */ | 91 | #define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \ |
| 9 | static __inline__ __attribute_const__ int get_order(unsigned long size) | 92 | ((void *)(kaddr) < (void *)memory_end)) |
| 10 | { | ||
| 11 | int order; | ||
| 12 | 93 | ||
| 13 | size = (size - 1) >> (PAGE_SHIFT - 1); | 94 | #endif /* __ASSEMBLY__ */ |
| 14 | order = -1; | ||
| 15 | do { | ||
| 16 | size >>= 1; | ||
| 17 | order++; | ||
| 18 | } while (size); | ||
| 19 | return order; | ||
| 20 | } | ||
| 21 | 95 | ||
| 22 | #endif /* __ASSEMBLY__ */ | 96 | #include <asm-generic/memory_model.h> |
| 97 | #include <asm-generic/getorder.h> | ||
| 23 | 98 | ||
| 24 | #endif /* _ASM_GENERIC_PAGE_H */ | 99 | #endif /* __ASM_GENERIC_PAGE_H */ |
diff --git a/include/asm-generic/param.h b/include/asm-generic/param.h new file mode 100644 index 000000000000..cdf8251bfb6c --- /dev/null +++ b/include/asm-generic/param.h | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | #ifndef __ASM_GENERIC_PARAM_H | ||
| 2 | #define __ASM_GENERIC_PARAM_H | ||
| 3 | |||
| 4 | #ifdef __KERNEL__ | ||
| 5 | # define HZ CONFIG_HZ /* Internal kernel timer frequency */ | ||
| 6 | # define USER_HZ 100 /* some user interfaces are */ | ||
| 7 | # define CLOCKS_PER_SEC (USER_HZ) /* in "ticks" like times() */ | ||
| 8 | #endif | ||
| 9 | |||
| 10 | #ifndef HZ | ||
| 11 | #define HZ 100 | ||
| 12 | #endif | ||
| 13 | |||
| 14 | #ifndef EXEC_PAGESIZE | ||
| 15 | #define EXEC_PAGESIZE 4096 | ||
| 16 | #endif | ||
| 17 | |||
| 18 | #ifndef NOGROUP | ||
| 19 | #define NOGROUP (-1) | ||
| 20 | #endif | ||
| 21 | |||
| 22 | #define MAXHOSTNAMELEN 64 /* max length of hostname */ | ||
| 23 | |||
| 24 | #endif /* __ASM_GENERIC_PARAM_H */ | ||
diff --git a/include/asm-generic/parport.h b/include/asm-generic/parport.h new file mode 100644 index 000000000000..40528cb977e8 --- /dev/null +++ b/include/asm-generic/parport.h | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | #ifndef __ASM_GENERIC_PARPORT_H | ||
| 2 | #define __ASM_GENERIC_PARPORT_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * An ISA bus may have i8255 parallel ports at well-known | ||
| 6 | * locations in the I/O space, which are scanned by | ||
| 7 | * parport_pc_find_isa_ports. | ||
| 8 | * | ||
| 9 | * Without ISA support, the driver will only attach | ||
| 10 | * to devices on the PCI bus. | ||
| 11 | */ | ||
| 12 | |||
| 13 | static int __devinit parport_pc_find_isa_ports(int autoirq, int autodma); | ||
| 14 | static int __devinit parport_pc_find_nonpci_ports(int autoirq, int autodma) | ||
| 15 | { | ||
| 16 | #ifdef CONFIG_ISA | ||
| 17 | return parport_pc_find_isa_ports(autoirq, autodma); | ||
| 18 | #else | ||
| 19 | return 0; | ||
| 20 | #endif | ||
| 21 | } | ||
| 22 | |||
| 23 | #endif /* __ASM_GENERIC_PARPORT_H */ | ||
diff --git a/include/asm-generic/pci.h b/include/asm-generic/pci.h index c36a77d3bf44..515c6e2e3218 100644 --- a/include/asm-generic/pci.h +++ b/include/asm-generic/pci.h | |||
| @@ -52,4 +52,12 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) | |||
| 52 | } | 52 | } |
| 53 | #endif /* HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ */ | 53 | #endif /* HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ */ |
| 54 | 54 | ||
| 55 | /* | ||
| 56 | * By default, assume that no iommu is in use and that the PCI | ||
| 57 | * space is mapped to address physical 0. | ||
| 58 | */ | ||
| 59 | #ifndef PCI_DMA_BUS_IS_PHYS | ||
| 60 | #define PCI_DMA_BUS_IS_PHYS (1) | ||
| 55 | #endif | 61 | #endif |
| 62 | |||
| 63 | #endif /* _ASM_GENERIC_PCI_H */ | ||
diff --git a/include/asm-generic/pgalloc.h b/include/asm-generic/pgalloc.h new file mode 100644 index 000000000000..9e429d08b1f8 --- /dev/null +++ b/include/asm-generic/pgalloc.h | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | #ifndef __ASM_GENERIC_PGALLOC_H | ||
| 2 | #define __ASM_GENERIC_PGALLOC_H | ||
| 3 | /* | ||
| 4 | * an empty file is enough for a nommu architecture | ||
| 5 | */ | ||
| 6 | #ifdef CONFIG_MMU | ||
| 7 | #error need to implement an architecture specific asm/pgalloc.h | ||
| 8 | #endif | ||
| 9 | |||
| 10 | #define check_pgt_cache() do { } while (0) | ||
| 11 | |||
| 12 | #endif /* __ASM_GENERIC_PGALLOC_H */ | ||
diff --git a/include/asm-generic/posix_types.h b/include/asm-generic/posix_types.h new file mode 100644 index 000000000000..3dab00860e71 --- /dev/null +++ b/include/asm-generic/posix_types.h | |||
| @@ -0,0 +1,165 @@ | |||
| 1 | #ifndef __ASM_GENERIC_POSIX_TYPES_H | ||
| 2 | #define __ASM_GENERIC_POSIX_TYPES_H | ||
| 3 | |||
| 4 | #include <asm/bitsperlong.h> | ||
| 5 | /* | ||
| 6 | * This file is generally used by user-level software, so you need to | ||
| 7 | * be a little careful about namespace pollution etc. | ||
| 8 | * | ||
| 9 | * First the types that are often defined in different ways across | ||
| 10 | * architectures, so that you can override them. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #ifndef __kernel_ino_t | ||
| 14 | typedef unsigned long __kernel_ino_t; | ||
| 15 | #endif | ||
| 16 | |||
| 17 | #ifndef __kernel_mode_t | ||
| 18 | typedef unsigned int __kernel_mode_t; | ||
| 19 | #endif | ||
| 20 | |||
| 21 | #ifndef __kernel_nlink_t | ||
| 22 | typedef unsigned long __kernel_nlink_t; | ||
| 23 | #endif | ||
| 24 | |||
| 25 | #ifndef __kernel_pid_t | ||
| 26 | typedef int __kernel_pid_t; | ||
| 27 | #endif | ||
| 28 | |||
| 29 | #ifndef __kernel_ipc_pid_t | ||
| 30 | typedef int __kernel_ipc_pid_t; | ||
| 31 | #endif | ||
| 32 | |||
| 33 | #ifndef __kernel_uid_t | ||
| 34 | typedef unsigned int __kernel_uid_t; | ||
| 35 | typedef unsigned int __kernel_gid_t; | ||
| 36 | #endif | ||
| 37 | |||
| 38 | #ifndef __kernel_suseconds_t | ||
| 39 | typedef long __kernel_suseconds_t; | ||
| 40 | #endif | ||
| 41 | |||
| 42 | #ifndef __kernel_daddr_t | ||
| 43 | typedef int __kernel_daddr_t; | ||
| 44 | #endif | ||
| 45 | |||
| 46 | #ifndef __kernel_uid32_t | ||
| 47 | typedef __kernel_uid_t __kernel_uid32_t; | ||
| 48 | typedef __kernel_gid_t __kernel_gid32_t; | ||
| 49 | #endif | ||
| 50 | |||
| 51 | #ifndef __kernel_old_uid_t | ||
| 52 | typedef __kernel_uid_t __kernel_old_uid_t; | ||
| 53 | typedef __kernel_gid_t __kernel_old_gid_t; | ||
| 54 | #endif | ||
| 55 | |||
| 56 | #ifndef __kernel_old_dev_t | ||
| 57 | typedef unsigned int __kernel_old_dev_t; | ||
| 58 | #endif | ||
| 59 | |||
| 60 | /* | ||
| 61 | * Most 32 bit architectures use "unsigned int" size_t, | ||
| 62 | * and all 64 bit architectures use "unsigned long" size_t. | ||
| 63 | */ | ||
| 64 | #ifndef __kernel_size_t | ||
| 65 | #if __BITS_PER_LONG != 64 | ||
| 66 | typedef unsigned int __kernel_size_t; | ||
| 67 | typedef int __kernel_ssize_t; | ||
| 68 | typedef int __kernel_ptrdiff_t; | ||
| 69 | #else | ||
| 70 | typedef unsigned long __kernel_size_t; | ||
| 71 | typedef long __kernel_ssize_t; | ||
| 72 | typedef long __kernel_ptrdiff_t; | ||
| 73 | #endif | ||
| 74 | #endif | ||
| 75 | |||
| 76 | /* | ||
| 77 | * anything below here should be completely generic | ||
| 78 | */ | ||
| 79 | typedef long __kernel_off_t; | ||
| 80 | typedef long long __kernel_loff_t; | ||
| 81 | typedef long __kernel_time_t; | ||
| 82 | typedef long __kernel_clock_t; | ||
| 83 | typedef int __kernel_timer_t; | ||
| 84 | typedef int __kernel_clockid_t; | ||
| 85 | typedef char * __kernel_caddr_t; | ||
| 86 | typedef unsigned short __kernel_uid16_t; | ||
| 87 | typedef unsigned short __kernel_gid16_t; | ||
| 88 | |||
| 89 | typedef struct { | ||
| 90 | int val[2]; | ||
| 91 | } __kernel_fsid_t; | ||
| 92 | |||
| 93 | #ifdef __KERNEL__ | ||
| 94 | |||
| 95 | #undef __FD_SET | ||
| 96 | static inline void __FD_SET(unsigned long __fd, __kernel_fd_set *__fdsetp) | ||
| 97 | { | ||
| 98 | unsigned long __tmp = __fd / __NFDBITS; | ||
| 99 | unsigned long __rem = __fd % __NFDBITS; | ||
| 100 | __fdsetp->fds_bits[__tmp] |= (1UL<<__rem); | ||
| 101 | } | ||
| 102 | |||
| 103 | #undef __FD_CLR | ||
| 104 | static inline void __FD_CLR(unsigned long __fd, __kernel_fd_set *__fdsetp) | ||
| 105 | { | ||
| 106 | unsigned long __tmp = __fd / __NFDBITS; | ||
| 107 | unsigned long __rem = __fd % __NFDBITS; | ||
| 108 | __fdsetp->fds_bits[__tmp] &= ~(1UL<<__rem); | ||
| 109 | } | ||
| 110 | |||
| 111 | #undef __FD_ISSET | ||
| 112 | static inline int __FD_ISSET(unsigned long __fd, const __kernel_fd_set *__p) | ||
| 113 | { | ||
| 114 | unsigned long __tmp = __fd / __NFDBITS; | ||
| 115 | unsigned long __rem = __fd % __NFDBITS; | ||
| 116 | return (__p->fds_bits[__tmp] & (1UL<<__rem)) != 0; | ||
| 117 | } | ||
| 118 | |||
| 119 | /* | ||
| 120 | * This will unroll the loop for the normal constant case (8 ints, | ||
| 121 | * for a 256-bit fd_set) | ||
| 122 | */ | ||
| 123 | #undef __FD_ZERO | ||
| 124 | static inline void __FD_ZERO(__kernel_fd_set *__p) | ||
| 125 | { | ||
| 126 | unsigned long *__tmp = __p->fds_bits; | ||
| 127 | int __i; | ||
| 128 | |||
| 129 | if (__builtin_constant_p(__FDSET_LONGS)) { | ||
| 130 | switch (__FDSET_LONGS) { | ||
| 131 | case 16: | ||
| 132 | __tmp[ 0] = 0; __tmp[ 1] = 0; | ||
| 133 | __tmp[ 2] = 0; __tmp[ 3] = 0; | ||
| 134 | __tmp[ 4] = 0; __tmp[ 5] = 0; | ||
| 135 | __tmp[ 6] = 0; __tmp[ 7] = 0; | ||
| 136 | __tmp[ 8] = 0; __tmp[ 9] = 0; | ||
| 137 | __tmp[10] = 0; __tmp[11] = 0; | ||
| 138 | __tmp[12] = 0; __tmp[13] = 0; | ||
| 139 | __tmp[14] = 0; __tmp[15] = 0; | ||
| 140 | return; | ||
| 141 | |||
| 142 | case 8: | ||
| 143 | __tmp[ 0] = 0; __tmp[ 1] = 0; | ||
| 144 | __tmp[ 2] = 0; __tmp[ 3] = 0; | ||
| 145 | __tmp[ 4] = 0; __tmp[ 5] = 0; | ||
| 146 | __tmp[ 6] = 0; __tmp[ 7] = 0; | ||
| 147 | return; | ||
| 148 | |||
| 149 | case 4: | ||
| 150 | __tmp[ 0] = 0; __tmp[ 1] = 0; | ||
| 151 | __tmp[ 2] = 0; __tmp[ 3] = 0; | ||
| 152 | return; | ||
| 153 | } | ||
| 154 | } | ||
| 155 | __i = __FDSET_LONGS; | ||
| 156 | while (__i) { | ||
| 157 | __i--; | ||
| 158 | *__tmp = 0; | ||
| 159 | __tmp++; | ||
| 160 | } | ||
| 161 | } | ||
| 162 | |||
| 163 | #endif /* __KERNEL__ */ | ||
| 164 | |||
| 165 | #endif /* __ASM_GENERIC_POSIX_TYPES_H */ | ||
diff --git a/include/asm-generic/rtc.h b/include/asm-generic/rtc.h index 763e3b060f43..fa86f240c874 100644 --- a/include/asm-generic/rtc.h +++ b/include/asm-generic/rtc.h | |||
| @@ -202,7 +202,7 @@ static inline unsigned int get_rtc_ss(void) | |||
| 202 | { | 202 | { |
| 203 | struct rtc_time h; | 203 | struct rtc_time h; |
| 204 | 204 | ||
| 205 | __get_rtc_time(&h); | 205 | get_rtc_time(&h); |
| 206 | return h.tm_sec; | 206 | return h.tm_sec; |
| 207 | } | 207 | } |
| 208 | 208 | ||
diff --git a/include/asm-generic/scatterlist.h b/include/asm-generic/scatterlist.h new file mode 100644 index 000000000000..8b9454496a7c --- /dev/null +++ b/include/asm-generic/scatterlist.h | |||
| @@ -0,0 +1,43 @@ | |||
| 1 | #ifndef __ASM_GENERIC_SCATTERLIST_H | ||
| 2 | #define __ASM_GENERIC_SCATTERLIST_H | ||
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 6 | struct scatterlist { | ||
| 7 | #ifdef CONFIG_DEBUG_SG | ||
| 8 | unsigned long sg_magic; | ||
| 9 | #endif | ||
| 10 | unsigned long page_link; | ||
| 11 | unsigned int offset; | ||
| 12 | unsigned int length; | ||
| 13 | dma_addr_t dma_address; | ||
| 14 | unsigned int dma_length; | ||
| 15 | }; | ||
| 16 | |||
| 17 | /* | ||
| 18 | * These macros should be used after a dma_map_sg call has been done | ||
| 19 | * to get bus addresses of each of the SG entries and their lengths. | ||
| 20 | * You should only work with the number of sg entries pci_map_sg | ||
| 21 | * returns, or alternatively stop on the first sg_dma_len(sg) which | ||
| 22 | * is 0. | ||
| 23 | */ | ||
| 24 | #define sg_dma_address(sg) ((sg)->dma_address) | ||
| 25 | #ifndef sg_dma_len | ||
| 26 | /* | ||
| 27 | * Normally, you have an iommu on 64 bit machines, but not on 32 bit | ||
| 28 | * machines. Architectures that are differnt should override this. | ||
| 29 | */ | ||
| 30 | #if __BITS_PER_LONG == 64 | ||
| 31 | #define sg_dma_len(sg) ((sg)->dma_length) | ||
| 32 | #else | ||
| 33 | #define sg_dma_len(sg) ((sg)->length) | ||
| 34 | #endif /* 64 bit */ | ||
| 35 | #endif /* sg_dma_len */ | ||
| 36 | |||
| 37 | #ifndef ISA_DMA_THRESHOLD | ||
| 38 | #define ISA_DMA_THRESHOLD (~0UL) | ||
| 39 | #endif | ||
| 40 | |||
| 41 | #define ARCH_HAS_SG_CHAIN | ||
| 42 | |||
| 43 | #endif /* __ASM_GENERIC_SCATTERLIST_H */ | ||
diff --git a/include/asm-generic/segment.h b/include/asm-generic/segment.h new file mode 100644 index 000000000000..5580eace622c --- /dev/null +++ b/include/asm-generic/segment.h | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #ifndef __ASM_GENERIC_SEGMENT_H | ||
| 2 | #define __ASM_GENERIC_SEGMENT_H | ||
| 3 | /* | ||
| 4 | * Only here because we have some old header files that expect it... | ||
| 5 | * | ||
| 6 | * New architectures probably don't want to have their own version. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #endif /* __ASM_GENERIC_SEGMENT_H */ | ||
diff --git a/include/asm-generic/sembuf.h b/include/asm-generic/sembuf.h new file mode 100644 index 000000000000..4cb2c13e5090 --- /dev/null +++ b/include/asm-generic/sembuf.h | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | #ifndef __ASM_GENERIC_SEMBUF_H | ||
| 2 | #define __ASM_GENERIC_SEMBUF_H | ||
| 3 | |||
| 4 | #include <asm/bitsperlong.h> | ||
| 5 | |||
| 6 | /* | ||
| 7 | * The semid64_ds structure for x86 architecture. | ||
| 8 | * Note extra padding because this structure is passed back and forth | ||
| 9 | * between kernel and user space. | ||
| 10 | * | ||
| 11 | * semid64_ds was originally meant to be architecture specific, but | ||
| 12 | * everyone just ended up making identical copies without specific | ||
| 13 | * optimizations, so we may just as well all use the same one. | ||
| 14 | * | ||
| 15 | * 64 bit architectures typically define a 64 bit __kernel_time_t, | ||
| 16 | * so they do not need the first two padding words. | ||
| 17 | * On big-endian systems, the padding is in the wrong place. | ||
| 18 | * | ||
| 19 | * Pad space is left for: | ||
| 20 | * - 64-bit time_t to solve y2038 problem | ||
| 21 | * - 2 miscellaneous 32-bit values | ||
| 22 | */ | ||
| 23 | struct semid64_ds { | ||
| 24 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | ||
| 25 | __kernel_time_t sem_otime; /* last semop time */ | ||
| 26 | #if __BITS_PER_LONG != 64 | ||
| 27 | unsigned long __unused1; | ||
| 28 | #endif | ||
| 29 | __kernel_time_t sem_ctime; /* last change time */ | ||
| 30 | #if __BITS_PER_LONG != 64 | ||
| 31 | unsigned long __unused2; | ||
| 32 | #endif | ||
| 33 | unsigned long sem_nsems; /* no. of semaphores in array */ | ||
| 34 | unsigned long __unused3; | ||
| 35 | unsigned long __unused4; | ||
| 36 | }; | ||
| 37 | |||
| 38 | #endif /* __ASM_GENERIC_SEMBUF_H */ | ||
diff --git a/include/asm-generic/serial.h b/include/asm-generic/serial.h new file mode 100644 index 000000000000..5e291090fe04 --- /dev/null +++ b/include/asm-generic/serial.h | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | #ifndef __ASM_GENERIC_SERIAL_H | ||
| 2 | #define __ASM_GENERIC_SERIAL_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * This should not be an architecture specific #define, oh well. | ||
| 6 | * | ||
| 7 | * Traditionally, it just describes i8250 and related serial ports | ||
| 8 | * that have this clock rate. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #define BASE_BAUD (1843200 / 16) | ||
| 12 | |||
| 13 | #endif /* __ASM_GENERIC_SERIAL_H */ | ||
diff --git a/include/asm-generic/setup.h b/include/asm-generic/setup.h new file mode 100644 index 000000000000..6fc26a51003c --- /dev/null +++ b/include/asm-generic/setup.h | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #ifndef __ASM_GENERIC_SETUP_H | ||
| 2 | #define __ASM_GENERIC_SETUP_H | ||
| 3 | |||
| 4 | #define COMMAND_LINE_SIZE 512 | ||
| 5 | |||
| 6 | #endif /* __ASM_GENERIC_SETUP_H */ | ||
diff --git a/include/asm-generic/shmbuf.h b/include/asm-generic/shmbuf.h new file mode 100644 index 000000000000..5768fa60ac82 --- /dev/null +++ b/include/asm-generic/shmbuf.h | |||
| @@ -0,0 +1,59 @@ | |||
| 1 | #ifndef __ASM_GENERIC_SHMBUF_H | ||
| 2 | #define __ASM_GENERIC_SHMBUF_H | ||
| 3 | |||
| 4 | #include <asm/bitsperlong.h> | ||
| 5 | |||
| 6 | /* | ||
| 7 | * The shmid64_ds structure for x86 architecture. | ||
| 8 | * Note extra padding because this structure is passed back and forth | ||
| 9 | * between kernel and user space. | ||
| 10 | * | ||
| 11 | * shmid64_ds was originally meant to be architecture specific, but | ||
| 12 | * everyone just ended up making identical copies without specific | ||
| 13 | * optimizations, so we may just as well all use the same one. | ||
| 14 | * | ||
| 15 | * 64 bit architectures typically define a 64 bit __kernel_time_t, | ||
| 16 | * so they do not need the first two padding words. | ||
| 17 | * On big-endian systems, the padding is in the wrong place. | ||
| 18 | * | ||
| 19 | * | ||
| 20 | * Pad space is left for: | ||
| 21 | * - 64-bit time_t to solve y2038 problem | ||
| 22 | * - 2 miscellaneous 32-bit values | ||
| 23 | */ | ||
| 24 | |||
| 25 | struct shmid64_ds { | ||
| 26 | struct ipc64_perm shm_perm; /* operation perms */ | ||
| 27 | size_t shm_segsz; /* size of segment (bytes) */ | ||
| 28 | __kernel_time_t shm_atime; /* last attach time */ | ||
| 29 | #if __BITS_PER_LONG != 64 | ||
| 30 | unsigned long __unused1; | ||
| 31 | #endif | ||
| 32 | __kernel_time_t shm_dtime; /* last detach time */ | ||
| 33 | #if __BITS_PER_LONG != 64 | ||
| 34 | unsigned long __unused2; | ||
| 35 | #endif | ||
| 36 | __kernel_time_t shm_ctime; /* last change time */ | ||
| 37 | #if __BITS_PER_LONG != 64 | ||
| 38 | unsigned long __unused3; | ||
| 39 | #endif | ||
| 40 | __kernel_pid_t shm_cpid; /* pid of creator */ | ||
| 41 | __kernel_pid_t shm_lpid; /* pid of last operator */ | ||
| 42 | unsigned long shm_nattch; /* no. of current attaches */ | ||
| 43 | unsigned long __unused4; | ||
| 44 | unsigned long __unused5; | ||
| 45 | }; | ||
| 46 | |||
| 47 | struct shminfo64 { | ||
| 48 | unsigned long shmmax; | ||
| 49 | unsigned long shmmin; | ||
| 50 | unsigned long shmmni; | ||
| 51 | unsigned long shmseg; | ||
| 52 | unsigned long shmall; | ||
| 53 | unsigned long __unused1; | ||
| 54 | unsigned long __unused2; | ||
| 55 | unsigned long __unused3; | ||
| 56 | unsigned long __unused4; | ||
| 57 | }; | ||
| 58 | |||
| 59 | #endif /* __ASM_GENERIC_SHMBUF_H */ | ||
diff --git a/include/asm-generic/shmparam.h b/include/asm-generic/shmparam.h new file mode 100644 index 000000000000..51a3852de733 --- /dev/null +++ b/include/asm-generic/shmparam.h | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #ifndef __ASM_GENERIC_SHMPARAM_H | ||
| 2 | #define __ASM_GENERIC_SHMPARAM_H | ||
| 3 | |||
| 4 | #define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ | ||
| 5 | |||
| 6 | #endif /* _ASM_GENERIC_SHMPARAM_H */ | ||
diff --git a/include/asm-generic/signal-defs.h b/include/asm-generic/signal-defs.h new file mode 100644 index 000000000000..00f95df54297 --- /dev/null +++ b/include/asm-generic/signal-defs.h | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | #ifndef __ASM_GENERIC_SIGNAL_DEFS_H | ||
| 2 | #define __ASM_GENERIC_SIGNAL_DEFS_H | ||
| 3 | |||
| 4 | #include <linux/compiler.h> | ||
| 5 | |||
| 6 | #ifndef SIG_BLOCK | ||
| 7 | #define SIG_BLOCK 0 /* for blocking signals */ | ||
| 8 | #endif | ||
| 9 | #ifndef SIG_UNBLOCK | ||
| 10 | #define SIG_UNBLOCK 1 /* for unblocking signals */ | ||
| 11 | #endif | ||
| 12 | #ifndef SIG_SETMASK | ||
| 13 | #define SIG_SETMASK 2 /* for setting the signal mask */ | ||
| 14 | #endif | ||
| 15 | |||
| 16 | #ifndef __ASSEMBLY__ | ||
| 17 | typedef void __signalfn_t(int); | ||
| 18 | typedef __signalfn_t __user *__sighandler_t; | ||
| 19 | |||
| 20 | typedef void __restorefn_t(void); | ||
| 21 | typedef __restorefn_t __user *__sigrestore_t; | ||
| 22 | |||
| 23 | #define SIG_DFL ((__force __sighandler_t)0) /* default signal handling */ | ||
| 24 | #define SIG_IGN ((__force __sighandler_t)1) /* ignore signal */ | ||
| 25 | #define SIG_ERR ((__force __sighandler_t)-1) /* error return from signal */ | ||
| 26 | #endif | ||
| 27 | |||
| 28 | #endif /* __ASM_GENERIC_SIGNAL_DEFS_H */ | ||
diff --git a/include/asm-generic/signal.h b/include/asm-generic/signal.h index dae1d8720076..555c0aee8a47 100644 --- a/include/asm-generic/signal.h +++ b/include/asm-generic/signal.h | |||
| @@ -1,28 +1,131 @@ | |||
| 1 | #ifndef __ASM_GENERIC_SIGNAL_H | 1 | #ifndef __ASM_GENERIC_SIGNAL_H |
| 2 | #define __ASM_GENERIC_SIGNAL_H | 2 | #define __ASM_GENERIC_SIGNAL_H |
| 3 | 3 | ||
| 4 | #include <linux/compiler.h> | 4 | #include <linux/types.h> |
| 5 | 5 | ||
| 6 | #ifndef SIG_BLOCK | 6 | #define _NSIG 64 |
| 7 | #define SIG_BLOCK 0 /* for blocking signals */ | 7 | #define _NSIG_BPW __BITS_PER_LONG |
| 8 | #endif | 8 | #define _NSIG_WORDS (_NSIG / _NSIG_BPW) |
| 9 | #ifndef SIG_UNBLOCK | 9 | |
| 10 | #define SIG_UNBLOCK 1 /* for unblocking signals */ | 10 | #define SIGHUP 1 |
| 11 | #endif | 11 | #define SIGINT 2 |
| 12 | #ifndef SIG_SETMASK | 12 | #define SIGQUIT 3 |
| 13 | #define SIG_SETMASK 2 /* for setting the signal mask */ | 13 | #define SIGILL 4 |
| 14 | #define SIGTRAP 5 | ||
| 15 | #define SIGABRT 6 | ||
| 16 | #define SIGIOT 6 | ||
| 17 | #define SIGBUS 7 | ||
| 18 | #define SIGFPE 8 | ||
| 19 | #define SIGKILL 9 | ||
| 20 | #define SIGUSR1 10 | ||
| 21 | #define SIGSEGV 11 | ||
| 22 | #define SIGUSR2 12 | ||
| 23 | #define SIGPIPE 13 | ||
| 24 | #define SIGALRM 14 | ||
| 25 | #define SIGTERM 15 | ||
| 26 | #define SIGSTKFLT 16 | ||
| 27 | #define SIGCHLD 17 | ||
| 28 | #define SIGCONT 18 | ||
| 29 | #define SIGSTOP 19 | ||
| 30 | #define SIGTSTP 20 | ||
| 31 | #define SIGTTIN 21 | ||
| 32 | #define SIGTTOU 22 | ||
| 33 | #define SIGURG 23 | ||
| 34 | #define SIGXCPU 24 | ||
| 35 | #define SIGXFSZ 25 | ||
| 36 | #define SIGVTALRM 26 | ||
| 37 | #define SIGPROF 27 | ||
| 38 | #define SIGWINCH 28 | ||
| 39 | #define SIGIO 29 | ||
| 40 | #define SIGPOLL SIGIO | ||
| 41 | /* | ||
| 42 | #define SIGLOST 29 | ||
| 43 | */ | ||
| 44 | #define SIGPWR 30 | ||
| 45 | #define SIGSYS 31 | ||
| 46 | #define SIGUNUSED 31 | ||
| 47 | |||
| 48 | /* These should not be considered constants from userland. */ | ||
| 49 | #define SIGRTMIN 32 | ||
| 50 | #ifndef SIGRTMAX | ||
| 51 | #define SIGRTMAX _NSIG | ||
| 14 | #endif | 52 | #endif |
| 15 | 53 | ||
| 54 | /* | ||
| 55 | * SA_FLAGS values: | ||
| 56 | * | ||
| 57 | * SA_ONSTACK indicates that a registered stack_t will be used. | ||
| 58 | * SA_RESTART flag to get restarting signals (which were the default long ago) | ||
| 59 | * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. | ||
| 60 | * SA_RESETHAND clears the handler when the signal is delivered. | ||
| 61 | * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. | ||
| 62 | * SA_NODEFER prevents the current signal from being masked in the handler. | ||
| 63 | * | ||
| 64 | * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single | ||
| 65 | * Unix names RESETHAND and NODEFER respectively. | ||
| 66 | */ | ||
| 67 | #define SA_NOCLDSTOP 0x00000001 | ||
| 68 | #define SA_NOCLDWAIT 0x00000002 | ||
| 69 | #define SA_SIGINFO 0x00000004 | ||
| 70 | #define SA_ONSTACK 0x08000000 | ||
| 71 | #define SA_RESTART 0x10000000 | ||
| 72 | #define SA_NODEFER 0x40000000 | ||
| 73 | #define SA_RESETHAND 0x80000000 | ||
| 74 | |||
| 75 | #define SA_NOMASK SA_NODEFER | ||
| 76 | #define SA_ONESHOT SA_RESETHAND | ||
| 77 | |||
| 78 | /* | ||
| 79 | * New architectures should not define the obsolete | ||
| 80 | * SA_RESTORER 0x04000000 | ||
| 81 | */ | ||
| 82 | |||
| 83 | /* | ||
| 84 | * sigaltstack controls | ||
| 85 | */ | ||
| 86 | #define SS_ONSTACK 1 | ||
| 87 | #define SS_DISABLE 2 | ||
| 88 | |||
| 89 | #define MINSIGSTKSZ 2048 | ||
| 90 | #define SIGSTKSZ 8192 | ||
| 91 | |||
| 16 | #ifndef __ASSEMBLY__ | 92 | #ifndef __ASSEMBLY__ |
| 17 | typedef void __signalfn_t(int); | 93 | typedef struct { |
| 18 | typedef __signalfn_t __user *__sighandler_t; | 94 | unsigned long sig[_NSIG_WORDS]; |
| 95 | } sigset_t; | ||
| 96 | |||
| 97 | /* not actually used, but required for linux/syscalls.h */ | ||
| 98 | typedef unsigned long old_sigset_t; | ||
| 19 | 99 | ||
| 20 | typedef void __restorefn_t(void); | 100 | #include <asm-generic/signal-defs.h> |
| 21 | typedef __restorefn_t __user *__sigrestore_t; | ||
| 22 | 101 | ||
| 23 | #define SIG_DFL ((__force __sighandler_t)0) /* default signal handling */ | 102 | struct sigaction { |
| 24 | #define SIG_IGN ((__force __sighandler_t)1) /* ignore signal */ | 103 | __sighandler_t sa_handler; |
| 25 | #define SIG_ERR ((__force __sighandler_t)-1) /* error return from signal */ | 104 | unsigned long sa_flags; |
| 105 | #ifdef SA_RESTORER | ||
| 106 | __sigrestore_t sa_restorer; | ||
| 26 | #endif | 107 | #endif |
| 108 | sigset_t sa_mask; /* mask last for extensibility */ | ||
| 109 | }; | ||
| 110 | |||
| 111 | struct k_sigaction { | ||
| 112 | struct sigaction sa; | ||
| 113 | }; | ||
| 114 | |||
| 115 | typedef struct sigaltstack { | ||
| 116 | void __user *ss_sp; | ||
| 117 | int ss_flags; | ||
| 118 | size_t ss_size; | ||
| 119 | } stack_t; | ||
| 120 | |||
| 121 | #ifdef __KERNEL__ | ||
| 122 | |||
| 123 | #include <asm/sigcontext.h> | ||
| 124 | #undef __HAVE_ARCH_SIG_BITOPS | ||
| 125 | |||
| 126 | #define ptrace_signal_deliver(regs, cookie) do { } while (0) | ||
| 127 | |||
| 128 | #endif /* __KERNEL__ */ | ||
| 129 | #endif /* __ASSEMBLY__ */ | ||
| 27 | 130 | ||
| 28 | #endif /* __ASM_GENERIC_SIGNAL_H */ | 131 | #endif /* _ASM_GENERIC_SIGNAL_H */ |
diff --git a/include/asm-generic/socket.h b/include/asm-generic/socket.h new file mode 100644 index 000000000000..5d79e409241c --- /dev/null +++ b/include/asm-generic/socket.h | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | #ifndef __ASM_GENERIC_SOCKET_H | ||
| 2 | #define __ASM_GENERIC_SOCKET_H | ||
| 3 | |||
| 4 | #include <asm/sockios.h> | ||
| 5 | |||
| 6 | /* For setsockopt(2) */ | ||
| 7 | #define SOL_SOCKET 1 | ||
| 8 | |||
| 9 | #define SO_DEBUG 1 | ||
| 10 | #define SO_REUSEADDR 2 | ||
| 11 | #define SO_TYPE 3 | ||
| 12 | #define SO_ERROR 4 | ||
| 13 | #define SO_DONTROUTE 5 | ||
| 14 | #define SO_BROADCAST 6 | ||
| 15 | #define SO_SNDBUF 7 | ||
| 16 | #define SO_RCVBUF 8 | ||
| 17 | #define SO_SNDBUFFORCE 32 | ||
| 18 | #define SO_RCVBUFFORCE 33 | ||
| 19 | #define SO_KEEPALIVE 9 | ||
| 20 | #define SO_OOBINLINE 10 | ||
| 21 | #define SO_NO_CHECK 11 | ||
| 22 | #define SO_PRIORITY 12 | ||
| 23 | #define SO_LINGER 13 | ||
| 24 | #define SO_BSDCOMPAT 14 | ||
| 25 | /* To add :#define SO_REUSEPORT 15 */ | ||
| 26 | |||
| 27 | #ifndef SO_PASSCRED /* powerpc only differs in these */ | ||
| 28 | #define SO_PASSCRED 16 | ||
| 29 | #define SO_PEERCRED 17 | ||
| 30 | #define SO_RCVLOWAT 18 | ||
| 31 | #define SO_SNDLOWAT 19 | ||
| 32 | #define SO_RCVTIMEO 20 | ||
| 33 | #define SO_SNDTIMEO 21 | ||
| 34 | #endif | ||
| 35 | |||
| 36 | /* Security levels - as per NRL IPv6 - don't actually do anything */ | ||
| 37 | #define SO_SECURITY_AUTHENTICATION 22 | ||
| 38 | #define SO_SECURITY_ENCRYPTION_TRANSPORT 23 | ||
| 39 | #define SO_SECURITY_ENCRYPTION_NETWORK 24 | ||
| 40 | |||
| 41 | #define SO_BINDTODEVICE 25 | ||
| 42 | |||
| 43 | /* Socket filtering */ | ||
| 44 | #define SO_ATTACH_FILTER 26 | ||
| 45 | #define SO_DETACH_FILTER 27 | ||
| 46 | |||
| 47 | #define SO_PEERNAME 28 | ||
| 48 | #define SO_TIMESTAMP 29 | ||
| 49 | #define SCM_TIMESTAMP SO_TIMESTAMP | ||
| 50 | |||
| 51 | #define SO_ACCEPTCONN 30 | ||
| 52 | |||
| 53 | #define SO_PEERSEC 31 | ||
| 54 | #define SO_PASSSEC 34 | ||
| 55 | #define SO_TIMESTAMPNS 35 | ||
| 56 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | ||
| 57 | |||
| 58 | #define SO_MARK 36 | ||
| 59 | |||
| 60 | #define SO_TIMESTAMPING 37 | ||
| 61 | #define SCM_TIMESTAMPING SO_TIMESTAMPING | ||
| 62 | |||
| 63 | #endif /* __ASM_GENERIC_SOCKET_H */ | ||
diff --git a/include/asm-generic/sockios.h b/include/asm-generic/sockios.h new file mode 100644 index 000000000000..9a61a369b901 --- /dev/null +++ b/include/asm-generic/sockios.h | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | #ifndef __ASM_GENERIC_SOCKIOS_H | ||
| 2 | #define __ASM_GENERIC_SOCKIOS_H | ||
| 3 | |||
| 4 | /* Socket-level I/O control calls. */ | ||
| 5 | #define FIOSETOWN 0x8901 | ||
| 6 | #define SIOCSPGRP 0x8902 | ||
| 7 | #define FIOGETOWN 0x8903 | ||
| 8 | #define SIOCGPGRP 0x8904 | ||
| 9 | #define SIOCATMARK 0x8905 | ||
| 10 | #define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ | ||
| 11 | #define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ | ||
| 12 | |||
| 13 | #endif /* __ASM_GENERIC_SOCKIOS_H */ | ||
diff --git a/include/asm-generic/spinlock.h b/include/asm-generic/spinlock.h new file mode 100644 index 000000000000..1547a03ac50f --- /dev/null +++ b/include/asm-generic/spinlock.h | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | #ifndef __ASM_GENERIC_SPINLOCK_H | ||
| 2 | #define __ASM_GENERIC_SPINLOCK_H | ||
| 3 | /* | ||
| 4 | * You need to implement asm/spinlock.h for SMP support. The generic | ||
| 5 | * version does not handle SMP. | ||
| 6 | */ | ||
| 7 | #ifdef CONFIG_SMP | ||
| 8 | #error need an architecture specific asm/spinlock.h | ||
| 9 | #endif | ||
| 10 | |||
| 11 | #endif /* __ASM_GENERIC_SPINLOCK_H */ | ||
diff --git a/include/asm-generic/stat.h b/include/asm-generic/stat.h new file mode 100644 index 000000000000..47e64170305d --- /dev/null +++ b/include/asm-generic/stat.h | |||
| @@ -0,0 +1,72 @@ | |||
| 1 | #ifndef __ASM_GENERIC_STAT_H | ||
| 2 | #define __ASM_GENERIC_STAT_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Everybody gets this wrong and has to stick with it for all | ||
| 6 | * eternity. Hopefully, this version gets used by new architectures | ||
| 7 | * so they don't fall into the same traps. | ||
| 8 | * | ||
| 9 | * stat64 is copied from powerpc64, with explicit padding added. | ||
| 10 | * stat is the same structure layout on 64-bit, without the 'long long' | ||
| 11 | * types. | ||
| 12 | * | ||
| 13 | * By convention, 64 bit architectures use the stat interface, while | ||
| 14 | * 32 bit architectures use the stat64 interface. Note that we don't | ||
| 15 | * provide an __old_kernel_stat here, which new architecture should | ||
| 16 | * not have to start with. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <asm/bitsperlong.h> | ||
| 20 | |||
| 21 | #define STAT_HAVE_NSEC 1 | ||
| 22 | |||
| 23 | struct stat { | ||
| 24 | unsigned long st_dev; /* Device. */ | ||
| 25 | unsigned long st_ino; /* File serial number. */ | ||
| 26 | unsigned int st_mode; /* File mode. */ | ||
| 27 | unsigned int st_nlink; /* Link count. */ | ||
| 28 | unsigned int st_uid; /* User ID of the file's owner. */ | ||
| 29 | unsigned int st_gid; /* Group ID of the file's group. */ | ||
| 30 | unsigned long st_rdev; /* Device number, if device. */ | ||
| 31 | unsigned long __pad1; | ||
| 32 | long st_size; /* Size of file, in bytes. */ | ||
| 33 | int st_blksize; /* Optimal block size for I/O. */ | ||
| 34 | int __pad2; | ||
| 35 | long st_blocks; /* Number 512-byte blocks allocated. */ | ||
| 36 | int st_atime; /* Time of last access. */ | ||
| 37 | unsigned int st_atime_nsec; | ||
| 38 | int st_mtime; /* Time of last modification. */ | ||
| 39 | unsigned int st_mtime_nsec; | ||
| 40 | int st_ctime; /* Time of last status change. */ | ||
| 41 | unsigned int st_ctime_nsec; | ||
| 42 | unsigned int __unused4; | ||
| 43 | unsigned int __unused5; | ||
| 44 | }; | ||
| 45 | |||
| 46 | #if __BITS_PER_LONG != 64 | ||
| 47 | /* This matches struct stat64 in glibc2.1. Only used for 32 bit. */ | ||
| 48 | struct stat64 { | ||
| 49 | unsigned long long st_dev; /* Device. */ | ||
| 50 | unsigned long long st_ino; /* File serial number. */ | ||
| 51 | unsigned int st_mode; /* File mode. */ | ||
| 52 | unsigned int st_nlink; /* Link count. */ | ||
| 53 | unsigned int st_uid; /* User ID of the file's owner. */ | ||
| 54 | unsigned int st_gid; /* Group ID of the file's group. */ | ||
| 55 | unsigned long long st_rdev; /* Device number, if device. */ | ||
| 56 | unsigned long long __pad1; | ||
| 57 | long long st_size; /* Size of file, in bytes. */ | ||
| 58 | int st_blksize; /* Optimal block size for I/O. */ | ||
| 59 | int __pad2; | ||
| 60 | long long st_blocks; /* Number 512-byte blocks allocated. */ | ||
| 61 | int st_atime; /* Time of last access. */ | ||
| 62 | unsigned int st_atime_nsec; | ||
| 63 | int st_mtime; /* Time of last modification. */ | ||
| 64 | unsigned int st_mtime_nsec; | ||
| 65 | int st_ctime; /* Time of last status change. */ | ||
| 66 | unsigned int st_ctime_nsec; | ||
| 67 | unsigned int __unused4; | ||
| 68 | unsigned int __unused5; | ||
| 69 | }; | ||
| 70 | #endif | ||
| 71 | |||
| 72 | #endif /* __ASM_GENERIC_STAT_H */ | ||
diff --git a/include/asm-generic/string.h b/include/asm-generic/string.h new file mode 100644 index 000000000000..de5e0201459f --- /dev/null +++ b/include/asm-generic/string.h | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | #ifndef __ASM_GENERIC_STRING_H | ||
| 2 | #define __ASM_GENERIC_STRING_H | ||
| 3 | /* | ||
| 4 | * The kernel provides all required functions in lib/string.c | ||
| 5 | * | ||
| 6 | * Architectures probably want to provide at least their own optimized | ||
| 7 | * memcpy and memset functions though. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #endif /* __ASM_GENERIC_STRING_H */ | ||
diff --git a/include/asm-generic/swab.h b/include/asm-generic/swab.h new file mode 100644 index 000000000000..a8e9029d9eba --- /dev/null +++ b/include/asm-generic/swab.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | #ifndef _ASM_GENERIC_SWAB_H | ||
| 2 | #define _ASM_GENERIC_SWAB_H | ||
| 3 | |||
| 4 | #include <asm/bitsperlong.h> | ||
| 5 | |||
| 6 | /* | ||
| 7 | * 32 bit architectures typically (but not always) want to | ||
| 8 | * set __SWAB_64_THRU_32__. In user space, this is only | ||
| 9 | * valid if the compiler supports 64 bit data types. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #if __BITS_PER_LONG == 32 | ||
| 13 | #if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__) | ||
| 14 | #define __SWAB_64_THRU_32__ | ||
| 15 | #endif | ||
| 16 | #endif | ||
| 17 | |||
| 18 | #endif /* _ASM_GENERIC_SWAB_H */ | ||
diff --git a/include/asm-generic/syscalls.h b/include/asm-generic/syscalls.h new file mode 100644 index 000000000000..df84e3b04555 --- /dev/null +++ b/include/asm-generic/syscalls.h | |||
| @@ -0,0 +1,60 @@ | |||
| 1 | #ifndef __ASM_GENERIC_SYSCALLS_H | ||
| 2 | #define __ASM_GENERIC_SYSCALLS_H | ||
| 3 | |||
| 4 | #include <linux/compiler.h> | ||
| 5 | #include <linux/linkage.h> | ||
| 6 | |||
| 7 | /* | ||
| 8 | * Calling conventions for these system calls can differ, so | ||
| 9 | * it's possible to override them. | ||
| 10 | */ | ||
| 11 | #ifndef sys_clone | ||
| 12 | asmlinkage long sys_clone(unsigned long clone_flags, unsigned long newsp, | ||
| 13 | void __user *parent_tid, void __user *child_tid, | ||
| 14 | struct pt_regs *regs); | ||
| 15 | #endif | ||
| 16 | |||
| 17 | #ifndef sys_fork | ||
| 18 | asmlinkage long sys_fork(struct pt_regs *regs); | ||
| 19 | #endif | ||
| 20 | |||
| 21 | #ifndef sys_vfork | ||
| 22 | asmlinkage long sys_vfork(struct pt_regs *regs); | ||
| 23 | #endif | ||
| 24 | |||
| 25 | #ifndef sys_execve | ||
| 26 | asmlinkage long sys_execve(char __user *filename, char __user * __user *argv, | ||
| 27 | char __user * __user *envp, struct pt_regs *regs); | ||
| 28 | #endif | ||
| 29 | |||
| 30 | #ifndef sys_mmap2 | ||
| 31 | asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, | ||
| 32 | unsigned long prot, unsigned long flags, | ||
| 33 | unsigned long fd, unsigned long pgoff); | ||
| 34 | #endif | ||
| 35 | |||
| 36 | #ifndef sys_mmap | ||
| 37 | asmlinkage long sys_mmap(unsigned long addr, unsigned long len, | ||
| 38 | unsigned long prot, unsigned long flags, | ||
| 39 | unsigned long fd, off_t pgoff); | ||
| 40 | #endif | ||
| 41 | |||
| 42 | #ifndef sys_sigaltstack | ||
| 43 | asmlinkage long sys_sigaltstack(const stack_t __user *, stack_t __user *, | ||
| 44 | struct pt_regs *); | ||
| 45 | #endif | ||
| 46 | |||
| 47 | #ifndef sys_rt_sigreturn | ||
| 48 | asmlinkage long sys_rt_sigreturn(struct pt_regs *regs); | ||
| 49 | #endif | ||
| 50 | |||
| 51 | #ifndef sys_rt_sigsuspend | ||
| 52 | asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize); | ||
| 53 | #endif | ||
| 54 | |||
| 55 | #ifndef sys_rt_sigaction | ||
| 56 | asmlinkage long sys_rt_sigaction(int sig, const struct sigaction __user *act, | ||
| 57 | struct sigaction __user *oact, size_t sigsetsize); | ||
| 58 | #endif | ||
| 59 | |||
| 60 | #endif /* __ASM_GENERIC_SYSCALLS_H */ | ||
diff --git a/include/asm-generic/system.h b/include/asm-generic/system.h new file mode 100644 index 000000000000..efa403b5e121 --- /dev/null +++ b/include/asm-generic/system.h | |||
| @@ -0,0 +1,161 @@ | |||
| 1 | /* Generic system definitions, based on MN10300 definitions. | ||
| 2 | * | ||
| 3 | * It should be possible to use these on really simple architectures, | ||
| 4 | * but it serves more as a starting point for new ports. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. | ||
| 7 | * Written by David Howells (dhowells@redhat.com) | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or | ||
| 10 | * modify it under the terms of the GNU General Public Licence | ||
| 11 | * as published by the Free Software Foundation; either version | ||
| 12 | * 2 of the Licence, or (at your option) any later version. | ||
| 13 | */ | ||
| 14 | #ifndef __ASM_GENERIC_SYSTEM_H | ||
| 15 | #define __ASM_GENERIC_SYSTEM_H | ||
| 16 | |||
| 17 | #ifdef __KERNEL__ | ||
| 18 | #ifndef __ASSEMBLY__ | ||
| 19 | |||
| 20 | #include <linux/types.h> | ||
| 21 | #include <linux/irqflags.h> | ||
| 22 | |||
| 23 | #include <asm/cmpxchg-local.h> | ||
| 24 | |||
| 25 | struct task_struct; | ||
| 26 | |||
| 27 | /* context switching is now performed out-of-line in switch_to.S */ | ||
| 28 | extern struct task_struct *__switch_to(struct task_struct *, | ||
| 29 | struct task_struct *); | ||
| 30 | #define switch_to(prev, next, last) \ | ||
| 31 | do { \ | ||
| 32 | ((last) = __switch_to((prev), (next))); \ | ||
| 33 | } while (0) | ||
| 34 | |||
| 35 | #define arch_align_stack(x) (x) | ||
| 36 | |||
| 37 | #define nop() asm volatile ("nop") | ||
| 38 | |||
| 39 | #endif /* !__ASSEMBLY__ */ | ||
| 40 | |||
| 41 | /* | ||
| 42 | * Force strict CPU ordering. | ||
| 43 | * And yes, this is required on UP too when we're talking | ||
| 44 | * to devices. | ||
| 45 | * | ||
| 46 | * This implementation only contains a compiler barrier. | ||
| 47 | */ | ||
| 48 | |||
| 49 | #define mb() asm volatile ("": : :"memory") | ||
| 50 | #define rmb() mb() | ||
| 51 | #define wmb() asm volatile ("": : :"memory") | ||
| 52 | |||
| 53 | #ifdef CONFIG_SMP | ||
| 54 | #define smp_mb() mb() | ||
| 55 | #define smp_rmb() rmb() | ||
| 56 | #define smp_wmb() wmb() | ||
| 57 | #else | ||
| 58 | #define smp_mb() barrier() | ||
| 59 | #define smp_rmb() barrier() | ||
| 60 | #define smp_wmb() barrier() | ||
| 61 | #endif | ||
| 62 | |||
| 63 | #define set_mb(var, value) do { var = value; mb(); } while (0) | ||
| 64 | #define set_wmb(var, value) do { var = value; wmb(); } while (0) | ||
| 65 | |||
| 66 | #define read_barrier_depends() do {} while (0) | ||
| 67 | #define smp_read_barrier_depends() do {} while (0) | ||
| 68 | |||
| 69 | /* | ||
| 70 | * we make sure local_irq_enable() doesn't cause priority inversion | ||
| 71 | */ | ||
| 72 | #ifndef __ASSEMBLY__ | ||
| 73 | |||
| 74 | /* This function doesn't exist, so you'll get a linker error | ||
| 75 | * if something tries to do an invalid xchg(). */ | ||
| 76 | extern void __xchg_called_with_bad_pointer(void); | ||
| 77 | |||
| 78 | static inline | ||
| 79 | unsigned long __xchg(unsigned long x, volatile void *ptr, int size) | ||
| 80 | { | ||
| 81 | unsigned long ret, flags; | ||
| 82 | |||
| 83 | switch (size) { | ||
| 84 | case 1: | ||
| 85 | #ifdef __xchg_u8 | ||
| 86 | return __xchg_u8(x, ptr); | ||
| 87 | #else | ||
| 88 | local_irq_save(flags); | ||
| 89 | ret = *(volatile u8 *)ptr; | ||
| 90 | *(volatile u8 *)ptr = x; | ||
| 91 | local_irq_restore(flags); | ||
| 92 | return ret; | ||
| 93 | #endif /* __xchg_u8 */ | ||
| 94 | |||
| 95 | case 2: | ||
| 96 | #ifdef __xchg_u16 | ||
| 97 | return __xchg_u16(x, ptr); | ||
| 98 | #else | ||
| 99 | local_irq_save(flags); | ||
| 100 | ret = *(volatile u16 *)ptr; | ||
| 101 | *(volatile u16 *)ptr = x; | ||
| 102 | local_irq_restore(flags); | ||
| 103 | return ret; | ||
| 104 | #endif /* __xchg_u16 */ | ||
| 105 | |||
| 106 | case 4: | ||
| 107 | #ifdef __xchg_u32 | ||
| 108 | return __xchg_u32(x, ptr); | ||
| 109 | #else | ||
| 110 | local_irq_save(flags); | ||
| 111 | ret = *(volatile u32 *)ptr; | ||
| 112 | *(volatile u32 *)ptr = x; | ||
| 113 | local_irq_restore(flags); | ||
| 114 | return ret; | ||
| 115 | #endif /* __xchg_u32 */ | ||
| 116 | |||
| 117 | #ifdef CONFIG_64BIT | ||
| 118 | case 8: | ||
| 119 | #ifdef __xchg_u64 | ||
| 120 | return __xchg_u64(x, ptr); | ||
| 121 | #else | ||
| 122 | local_irq_save(flags); | ||
| 123 | ret = *(volatile u64 *)ptr; | ||
| 124 | *(volatile u64 *)ptr = x; | ||
| 125 | local_irq_restore(flags); | ||
| 126 | return ret; | ||
| 127 | #endif /* __xchg_u64 */ | ||
| 128 | #endif /* CONFIG_64BIT */ | ||
| 129 | |||
| 130 | default: | ||
| 131 | __xchg_called_with_bad_pointer(); | ||
| 132 | return x; | ||
| 133 | } | ||
| 134 | } | ||
| 135 | |||
| 136 | #define xchg(ptr, x) \ | ||
| 137 | ((__typeof__(*(ptr))) __xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) | ||
| 138 | |||
| 139 | static inline unsigned long __cmpxchg(volatile unsigned long *m, | ||
| 140 | unsigned long old, unsigned long new) | ||
| 141 | { | ||
| 142 | unsigned long retval; | ||
| 143 | unsigned long flags; | ||
| 144 | |||
| 145 | local_irq_save(flags); | ||
| 146 | retval = *m; | ||
| 147 | if (retval == old) | ||
| 148 | *m = new; | ||
| 149 | local_irq_restore(flags); | ||
| 150 | return retval; | ||
| 151 | } | ||
| 152 | |||
| 153 | #define cmpxchg(ptr, o, n) \ | ||
| 154 | ((__typeof__(*(ptr))) __cmpxchg((unsigned long *)(ptr), \ | ||
| 155 | (unsigned long)(o), \ | ||
| 156 | (unsigned long)(n))) | ||
| 157 | |||
| 158 | #endif /* !__ASSEMBLY__ */ | ||
| 159 | |||
| 160 | #endif /* __KERNEL__ */ | ||
| 161 | #endif /* __ASM_GENERIC_SYSTEM_H */ | ||
diff --git a/include/asm-generic/termbits.h b/include/asm-generic/termbits.h new file mode 100644 index 000000000000..1c9773d48cb0 --- /dev/null +++ b/include/asm-generic/termbits.h | |||
| @@ -0,0 +1,198 @@ | |||
| 1 | #ifndef __ASM_GENERIC_TERMBITS_H | ||
| 2 | #define __ASM_GENERIC_TERMBITS_H | ||
| 3 | |||
| 4 | #include <linux/posix_types.h> | ||
| 5 | |||
| 6 | typedef unsigned char cc_t; | ||
| 7 | typedef unsigned int speed_t; | ||
| 8 | typedef unsigned int tcflag_t; | ||
| 9 | |||
| 10 | #define NCCS 19 | ||
| 11 | struct termios { | ||
| 12 | tcflag_t c_iflag; /* input mode flags */ | ||
| 13 | tcflag_t c_oflag; /* output mode flags */ | ||
| 14 | tcflag_t c_cflag; /* control mode flags */ | ||
| 15 | tcflag_t c_lflag; /* local mode flags */ | ||
| 16 | cc_t c_line; /* line discipline */ | ||
| 17 | cc_t c_cc[NCCS]; /* control characters */ | ||
| 18 | }; | ||
| 19 | |||
| 20 | struct termios2 { | ||
| 21 | tcflag_t c_iflag; /* input mode flags */ | ||
| 22 | tcflag_t c_oflag; /* output mode flags */ | ||
| 23 | tcflag_t c_cflag; /* control mode flags */ | ||
| 24 | tcflag_t c_lflag; /* local mode flags */ | ||
| 25 | cc_t c_line; /* line discipline */ | ||
| 26 | cc_t c_cc[NCCS]; /* control characters */ | ||
| 27 | speed_t c_ispeed; /* input speed */ | ||
| 28 | speed_t c_ospeed; /* output speed */ | ||
| 29 | }; | ||
| 30 | |||
| 31 | struct ktermios { | ||
| 32 | tcflag_t c_iflag; /* input mode flags */ | ||
| 33 | tcflag_t c_oflag; /* output mode flags */ | ||
| 34 | tcflag_t c_cflag; /* control mode flags */ | ||
| 35 | tcflag_t c_lflag; /* local mode flags */ | ||
| 36 | cc_t c_line; /* line discipline */ | ||
| 37 | cc_t c_cc[NCCS]; /* control characters */ | ||
| 38 | speed_t c_ispeed; /* input speed */ | ||
| 39 | speed_t c_ospeed; /* output speed */ | ||
| 40 | }; | ||
| 41 | |||
| 42 | /* c_cc characters */ | ||
| 43 | #define VINTR 0 | ||
| 44 | #define VQUIT 1 | ||
| 45 | #define VERASE 2 | ||
| 46 | #define VKILL 3 | ||
| 47 | #define VEOF 4 | ||
| 48 | #define VTIME 5 | ||
| 49 | #define VMIN 6 | ||
| 50 | #define VSWTC 7 | ||
| 51 | #define VSTART 8 | ||
| 52 | #define VSTOP 9 | ||
| 53 | #define VSUSP 10 | ||
| 54 | #define VEOL 11 | ||
| 55 | #define VREPRINT 12 | ||
| 56 | #define VDISCARD 13 | ||
| 57 | #define VWERASE 14 | ||
| 58 | #define VLNEXT 15 | ||
| 59 | #define VEOL2 16 | ||
| 60 | |||
| 61 | /* c_iflag bits */ | ||
| 62 | #define IGNBRK 0000001 | ||
| 63 | #define BRKINT 0000002 | ||
| 64 | #define IGNPAR 0000004 | ||
| 65 | #define PARMRK 0000010 | ||
| 66 | #define INPCK 0000020 | ||
| 67 | #define ISTRIP 0000040 | ||
| 68 | #define INLCR 0000100 | ||
| 69 | #define IGNCR 0000200 | ||
| 70 | #define ICRNL 0000400 | ||
| 71 | #define IUCLC 0001000 | ||
| 72 | #define IXON 0002000 | ||
| 73 | #define IXANY 0004000 | ||
| 74 | #define IXOFF 0010000 | ||
| 75 | #define IMAXBEL 0020000 | ||
| 76 | #define IUTF8 0040000 | ||
| 77 | |||
| 78 | /* c_oflag bits */ | ||
| 79 | #define OPOST 0000001 | ||
| 80 | #define OLCUC 0000002 | ||
| 81 | #define ONLCR 0000004 | ||
| 82 | #define OCRNL 0000010 | ||
| 83 | #define ONOCR 0000020 | ||
| 84 | #define ONLRET 0000040 | ||
| 85 | #define OFILL 0000100 | ||
| 86 | #define OFDEL 0000200 | ||
| 87 | #define NLDLY 0000400 | ||
| 88 | #define NL0 0000000 | ||
| 89 | #define NL1 0000400 | ||
| 90 | #define CRDLY 0003000 | ||
| 91 | #define CR0 0000000 | ||
| 92 | #define CR1 0001000 | ||
| 93 | #define CR2 0002000 | ||
| 94 | #define CR3 0003000 | ||
| 95 | #define TABDLY 0014000 | ||
| 96 | #define TAB0 0000000 | ||
| 97 | #define TAB1 0004000 | ||
| 98 | #define TAB2 0010000 | ||
| 99 | #define TAB3 0014000 | ||
| 100 | #define XTABS 0014000 | ||
| 101 | #define BSDLY 0020000 | ||
| 102 | #define BS0 0000000 | ||
| 103 | #define BS1 0020000 | ||
| 104 | #define VTDLY 0040000 | ||
| 105 | #define VT0 0000000 | ||
| 106 | #define VT1 0040000 | ||
| 107 | #define FFDLY 0100000 | ||
| 108 | #define FF0 0000000 | ||
| 109 | #define FF1 0100000 | ||
| 110 | |||
| 111 | /* c_cflag bit meaning */ | ||
| 112 | #define CBAUD 0010017 | ||
| 113 | #define B0 0000000 /* hang up */ | ||
| 114 | #define B50 0000001 | ||
| 115 | #define B75 0000002 | ||
| 116 | #define B110 0000003 | ||
| 117 | #define B134 0000004 | ||
| 118 | #define B150 0000005 | ||
| 119 | #define B200 0000006 | ||
| 120 | #define B300 0000007 | ||
| 121 | #define B600 0000010 | ||
| 122 | #define B1200 0000011 | ||
| 123 | #define B1800 0000012 | ||
| 124 | #define B2400 0000013 | ||
| 125 | #define B4800 0000014 | ||
| 126 | #define B9600 0000015 | ||
| 127 | #define B19200 0000016 | ||
| 128 | #define B38400 0000017 | ||
| 129 | #define EXTA B19200 | ||
| 130 | #define EXTB B38400 | ||
| 131 | #define CSIZE 0000060 | ||
| 132 | #define CS5 0000000 | ||
| 133 | #define CS6 0000020 | ||
| 134 | #define CS7 0000040 | ||
| 135 | #define CS8 0000060 | ||
| 136 | #define CSTOPB 0000100 | ||
| 137 | #define CREAD 0000200 | ||
| 138 | #define PARENB 0000400 | ||
| 139 | #define PARODD 0001000 | ||
| 140 | #define HUPCL 0002000 | ||
| 141 | #define CLOCAL 0004000 | ||
| 142 | #define CBAUDEX 0010000 | ||
| 143 | #define BOTHER 0010000 | ||
| 144 | #define B57600 0010001 | ||
| 145 | #define B115200 0010002 | ||
| 146 | #define B230400 0010003 | ||
| 147 | #define B460800 0010004 | ||
| 148 | #define B500000 0010005 | ||
| 149 | #define B576000 0010006 | ||
| 150 | #define B921600 0010007 | ||
| 151 | #define B1000000 0010010 | ||
| 152 | #define B1152000 0010011 | ||
| 153 | #define B1500000 0010012 | ||
| 154 | #define B2000000 0010013 | ||
| 155 | #define B2500000 0010014 | ||
| 156 | #define B3000000 0010015 | ||
| 157 | #define B3500000 0010016 | ||
| 158 | #define B4000000 0010017 | ||
| 159 | #define CIBAUD 002003600000 /* input baud rate */ | ||
| 160 | #define CMSPAR 010000000000 /* mark or space (stick) parity */ | ||
| 161 | #define CRTSCTS 020000000000 /* flow control */ | ||
| 162 | |||
| 163 | #define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */ | ||
| 164 | |||
| 165 | /* c_lflag bits */ | ||
| 166 | #define ISIG 0000001 | ||
| 167 | #define ICANON 0000002 | ||
| 168 | #define XCASE 0000004 | ||
| 169 | #define ECHO 0000010 | ||
| 170 | #define ECHOE 0000020 | ||
| 171 | #define ECHOK 0000040 | ||
| 172 | #define ECHONL 0000100 | ||
| 173 | #define NOFLSH 0000200 | ||
| 174 | #define TOSTOP 0000400 | ||
| 175 | #define ECHOCTL 0001000 | ||
| 176 | #define ECHOPRT 0002000 | ||
| 177 | #define ECHOKE 0004000 | ||
| 178 | #define FLUSHO 0010000 | ||
| 179 | #define PENDIN 0040000 | ||
| 180 | #define IEXTEN 0100000 | ||
| 181 | |||
| 182 | /* tcflow() and TCXONC use these */ | ||
| 183 | #define TCOOFF 0 | ||
| 184 | #define TCOON 1 | ||
| 185 | #define TCIOFF 2 | ||
| 186 | #define TCION 3 | ||
| 187 | |||
| 188 | /* tcflush() and TCFLSH use these */ | ||
| 189 | #define TCIFLUSH 0 | ||
| 190 | #define TCOFLUSH 1 | ||
| 191 | #define TCIOFLUSH 2 | ||
| 192 | |||
| 193 | /* tcsetattr uses these */ | ||
| 194 | #define TCSANOW 0 | ||
| 195 | #define TCSADRAIN 1 | ||
| 196 | #define TCSAFLUSH 2 | ||
| 197 | |||
| 198 | #endif /* __ASM_GENERIC_TERMBITS_H */ | ||
diff --git a/include/asm-generic/termios-base.h b/include/asm-generic/termios-base.h new file mode 100644 index 000000000000..0a769feb22b0 --- /dev/null +++ b/include/asm-generic/termios-base.h | |||
| @@ -0,0 +1,77 @@ | |||
| 1 | /* termios.h: generic termios/termio user copying/translation | ||
| 2 | */ | ||
| 3 | |||
| 4 | #ifndef _ASM_GENERIC_TERMIOS_BASE_H | ||
| 5 | #define _ASM_GENERIC_TERMIOS_BASE_H | ||
| 6 | |||
| 7 | #include <asm/uaccess.h> | ||
| 8 | |||
| 9 | #ifndef __ARCH_TERMIO_GETPUT | ||
| 10 | |||
| 11 | /* | ||
| 12 | * Translate a "termio" structure into a "termios". Ugh. | ||
| 13 | */ | ||
| 14 | static inline int user_termio_to_kernel_termios(struct ktermios *termios, | ||
| 15 | struct termio __user *termio) | ||
| 16 | { | ||
| 17 | unsigned short tmp; | ||
| 18 | |||
| 19 | if (get_user(tmp, &termio->c_iflag) < 0) | ||
| 20 | goto fault; | ||
| 21 | termios->c_iflag = (0xffff0000 & termios->c_iflag) | tmp; | ||
| 22 | |||
| 23 | if (get_user(tmp, &termio->c_oflag) < 0) | ||
| 24 | goto fault; | ||
| 25 | termios->c_oflag = (0xffff0000 & termios->c_oflag) | tmp; | ||
| 26 | |||
| 27 | if (get_user(tmp, &termio->c_cflag) < 0) | ||
| 28 | goto fault; | ||
| 29 | termios->c_cflag = (0xffff0000 & termios->c_cflag) | tmp; | ||
| 30 | |||
| 31 | if (get_user(tmp, &termio->c_lflag) < 0) | ||
| 32 | goto fault; | ||
| 33 | termios->c_lflag = (0xffff0000 & termios->c_lflag) | tmp; | ||
| 34 | |||
| 35 | if (get_user(termios->c_line, &termio->c_line) < 0) | ||
| 36 | goto fault; | ||
| 37 | |||
| 38 | if (copy_from_user(termios->c_cc, termio->c_cc, NCC) != 0) | ||
| 39 | goto fault; | ||
| 40 | |||
| 41 | return 0; | ||
| 42 | |||
| 43 | fault: | ||
| 44 | return -EFAULT; | ||
| 45 | } | ||
| 46 | |||
| 47 | /* | ||
| 48 | * Translate a "termios" structure into a "termio". Ugh. | ||
| 49 | */ | ||
| 50 | static inline int kernel_termios_to_user_termio(struct termio __user *termio, | ||
| 51 | struct ktermios *termios) | ||
| 52 | { | ||
| 53 | if (put_user(termios->c_iflag, &termio->c_iflag) < 0 || | ||
| 54 | put_user(termios->c_oflag, &termio->c_oflag) < 0 || | ||
| 55 | put_user(termios->c_cflag, &termio->c_cflag) < 0 || | ||
| 56 | put_user(termios->c_lflag, &termio->c_lflag) < 0 || | ||
| 57 | put_user(termios->c_line, &termio->c_line) < 0 || | ||
| 58 | copy_to_user(termio->c_cc, termios->c_cc, NCC) != 0) | ||
| 59 | return -EFAULT; | ||
| 60 | |||
| 61 | return 0; | ||
| 62 | } | ||
| 63 | |||
| 64 | #ifndef user_termios_to_kernel_termios | ||
| 65 | #define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios)) | ||
| 66 | #endif | ||
| 67 | |||
| 68 | #ifndef kernel_termios_to_user_termios | ||
| 69 | #define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios)) | ||
| 70 | #endif | ||
| 71 | |||
| 72 | #define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios)) | ||
| 73 | #define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios)) | ||
| 74 | |||
| 75 | #endif /* __ARCH_TERMIO_GETPUT */ | ||
| 76 | |||
| 77 | #endif /* _ASM_GENERIC_TERMIOS_BASE_H */ | ||
diff --git a/include/asm-generic/termios.h b/include/asm-generic/termios.h index 7d39ecc92d94..d0922adc56d4 100644 --- a/include/asm-generic/termios.h +++ b/include/asm-generic/termios.h | |||
| @@ -1,18 +1,68 @@ | |||
| 1 | /* termios.h: generic termios/termio user copying/translation | ||
| 2 | */ | ||
| 3 | |||
| 4 | #ifndef _ASM_GENERIC_TERMIOS_H | 1 | #ifndef _ASM_GENERIC_TERMIOS_H |
| 5 | #define _ASM_GENERIC_TERMIOS_H | 2 | #define _ASM_GENERIC_TERMIOS_H |
| 3 | /* | ||
| 4 | * Most architectures have straight copies of the x86 code, with | ||
| 5 | * varying levels of bug fixes on top. Usually it's a good idea | ||
| 6 | * to use this generic version instead, but be careful to avoid | ||
| 7 | * ABI changes. | ||
| 8 | * New architectures should not provide their own version. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #include <asm/termbits.h> | ||
| 12 | #include <asm/ioctls.h> | ||
| 13 | |||
| 14 | struct winsize { | ||
| 15 | unsigned short ws_row; | ||
| 16 | unsigned short ws_col; | ||
| 17 | unsigned short ws_xpixel; | ||
| 18 | unsigned short ws_ypixel; | ||
| 19 | }; | ||
| 20 | |||
| 21 | #define NCC 8 | ||
| 22 | struct termio { | ||
| 23 | unsigned short c_iflag; /* input mode flags */ | ||
| 24 | unsigned short c_oflag; /* output mode flags */ | ||
| 25 | unsigned short c_cflag; /* control mode flags */ | ||
| 26 | unsigned short c_lflag; /* local mode flags */ | ||
| 27 | unsigned char c_line; /* line discipline */ | ||
| 28 | unsigned char c_cc[NCC]; /* control characters */ | ||
| 29 | }; | ||
| 30 | |||
| 31 | /* modem lines */ | ||
| 32 | #define TIOCM_LE 0x001 | ||
| 33 | #define TIOCM_DTR 0x002 | ||
| 34 | #define TIOCM_RTS 0x004 | ||
| 35 | #define TIOCM_ST 0x008 | ||
| 36 | #define TIOCM_SR 0x010 | ||
| 37 | #define TIOCM_CTS 0x020 | ||
| 38 | #define TIOCM_CAR 0x040 | ||
| 39 | #define TIOCM_RNG 0x080 | ||
| 40 | #define TIOCM_DSR 0x100 | ||
| 41 | #define TIOCM_CD TIOCM_CAR | ||
| 42 | #define TIOCM_RI TIOCM_RNG | ||
| 43 | #define TIOCM_OUT1 0x2000 | ||
| 44 | #define TIOCM_OUT2 0x4000 | ||
| 45 | #define TIOCM_LOOP 0x8000 | ||
| 46 | |||
| 47 | /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ | ||
| 48 | |||
| 49 | #ifdef __KERNEL__ | ||
| 6 | 50 | ||
| 7 | #include <asm/uaccess.h> | 51 | #include <asm/uaccess.h> |
| 8 | 52 | ||
| 9 | #ifndef __ARCH_TERMIO_GETPUT | 53 | /* intr=^C quit=^\ erase=del kill=^U |
| 54 | eof=^D vtime=\0 vmin=\1 sxtc=\0 | ||
| 55 | start=^Q stop=^S susp=^Z eol=\0 | ||
| 56 | reprint=^R discard=^U werase=^W lnext=^V | ||
| 57 | eol2=\0 | ||
| 58 | */ | ||
| 59 | #define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" | ||
| 10 | 60 | ||
| 11 | /* | 61 | /* |
| 12 | * Translate a "termio" structure into a "termios". Ugh. | 62 | * Translate a "termio" structure into a "termios". Ugh. |
| 13 | */ | 63 | */ |
| 14 | static inline int user_termio_to_kernel_termios(struct ktermios *termios, | 64 | static inline int user_termio_to_kernel_termios(struct ktermios *termios, |
| 15 | struct termio __user *termio) | 65 | const struct termio __user *termio) |
| 16 | { | 66 | { |
| 17 | unsigned short tmp; | 67 | unsigned short tmp; |
| 18 | 68 | ||
| @@ -61,17 +111,44 @@ static inline int kernel_termios_to_user_termio(struct termio __user *termio, | |||
| 61 | return 0; | 111 | return 0; |
| 62 | } | 112 | } |
| 63 | 113 | ||
| 64 | #ifndef user_termios_to_kernel_termios | 114 | #ifdef TCGETS2 |
| 65 | #define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios)) | 115 | static inline int user_termios_to_kernel_termios(struct ktermios *k, |
| 66 | #endif | 116 | struct termios2 __user *u) |
| 117 | { | ||
| 118 | return copy_from_user(k, u, sizeof(struct termios2)); | ||
| 119 | } | ||
| 67 | 120 | ||
| 68 | #ifndef kernel_termios_to_user_termios | 121 | static inline int kernel_termios_to_user_termios(struct termios2 __user *u, |
| 69 | #define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios)) | 122 | struct ktermios *k) |
| 70 | #endif | 123 | { |
| 124 | return copy_to_user(u, k, sizeof(struct termios2)); | ||
| 125 | } | ||
| 71 | 126 | ||
| 72 | #define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios)) | 127 | static inline int user_termios_to_kernel_termios_1(struct ktermios *k, |
| 73 | #define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios)) | 128 | struct termios __user *u) |
| 129 | { | ||
| 130 | return copy_from_user(k, u, sizeof(struct termios)); | ||
| 131 | } | ||
| 132 | |||
| 133 | static inline int kernel_termios_to_user_termios_1(struct termios __user *u, | ||
| 134 | struct ktermios *k) | ||
| 135 | { | ||
| 136 | return copy_to_user(u, k, sizeof(struct termios)); | ||
| 137 | } | ||
| 138 | #else /* TCGETS2 */ | ||
| 139 | static inline int user_termios_to_kernel_termios(struct ktermios *k, | ||
| 140 | struct termios __user *u) | ||
| 141 | { | ||
| 142 | return copy_from_user(k, u, sizeof(struct termios)); | ||
| 143 | } | ||
| 144 | |||
| 145 | static inline int kernel_termios_to_user_termios(struct termios __user *u, | ||
| 146 | struct ktermios *k) | ||
| 147 | { | ||
| 148 | return copy_to_user(u, k, sizeof(struct termios)); | ||
| 149 | } | ||
| 150 | #endif /* TCGETS2 */ | ||
| 74 | 151 | ||
| 75 | #endif /* __ARCH_TERMIO_GETPUT */ | 152 | #endif /* __KERNEL__ */ |
| 76 | 153 | ||
| 77 | #endif /* _ASM_GENERIC_TERMIOS_H */ | 154 | #endif /* _ASM_GENERIC_TERMIOS_H */ |
diff --git a/include/asm-generic/timex.h b/include/asm-generic/timex.h new file mode 100644 index 000000000000..b2243cb8d6f6 --- /dev/null +++ b/include/asm-generic/timex.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | #ifndef __ASM_GENERIC_TIMEX_H | ||
| 2 | #define __ASM_GENERIC_TIMEX_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * If you have a cycle counter, return the value here. | ||
| 6 | */ | ||
| 7 | typedef unsigned long cycles_t; | ||
| 8 | #ifndef get_cycles | ||
| 9 | static inline cycles_t get_cycles(void) | ||
| 10 | { | ||
| 11 | return 0; | ||
| 12 | } | ||
| 13 | #endif | ||
| 14 | |||
| 15 | /* | ||
| 16 | * Architectures are encouraged to implement read_current_timer | ||
| 17 | * and define this in order to avoid the expensive delay loop | ||
| 18 | * calibration during boot. | ||
| 19 | */ | ||
| 20 | #undef ARCH_HAS_READ_CURRENT_TIMER | ||
| 21 | |||
| 22 | #endif /* __ASM_GENERIC_TIMEX_H */ | ||
diff --git a/include/asm-generic/tlbflush.h b/include/asm-generic/tlbflush.h new file mode 100644 index 000000000000..c7af037024c7 --- /dev/null +++ b/include/asm-generic/tlbflush.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | #ifndef __ASM_GENERIC_TLBFLUSH_H | ||
| 2 | #define __ASM_GENERIC_TLBFLUSH_H | ||
| 3 | /* | ||
| 4 | * This is a dummy tlbflush implementation that can be used on all | ||
| 5 | * nommu architectures. | ||
| 6 | * If you have an MMU, you need to write your own functions. | ||
| 7 | */ | ||
| 8 | #ifdef CONFIG_MMU | ||
| 9 | #error need to implement an architecture specific asm/tlbflush.h | ||
| 10 | #endif | ||
| 11 | |||
| 12 | static inline void flush_tlb_mm(struct mm_struct *mm) | ||
| 13 | { | ||
| 14 | BUG(); | ||
| 15 | } | ||
| 16 | |||
| 17 | |||
| 18 | #endif /* __ASM_GENERIC_TLBFLUSH_H */ | ||
diff --git a/include/asm-generic/types.h b/include/asm-generic/types.h new file mode 100644 index 000000000000..fba7d33ca3f2 --- /dev/null +++ b/include/asm-generic/types.h | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | #ifndef _ASM_GENERIC_TYPES_H | ||
| 2 | #define _ASM_GENERIC_TYPES_H | ||
| 3 | /* | ||
| 4 | * int-ll64 is used practically everywhere now, | ||
| 5 | * so use it as a reasonable default. | ||
| 6 | */ | ||
| 7 | #include <asm-generic/int-ll64.h> | ||
| 8 | |||
| 9 | #ifndef __ASSEMBLY__ | ||
| 10 | |||
| 11 | typedef unsigned short umode_t; | ||
| 12 | |||
| 13 | #endif /* __ASSEMBLY__ */ | ||
| 14 | |||
| 15 | /* | ||
| 16 | * These aren't exported outside the kernel to avoid name space clashes | ||
| 17 | */ | ||
| 18 | #ifdef __KERNEL__ | ||
| 19 | #ifndef __ASSEMBLY__ | ||
| 20 | /* | ||
| 21 | * DMA addresses may be very different from physical addresses | ||
| 22 | * and pointers. i386 and powerpc may have 64 bit DMA on 32 bit | ||
| 23 | * systems, while sparc64 uses 32 bit DMA addresses for 64 bit | ||
| 24 | * physical addresses. | ||
| 25 | * This default defines dma_addr_t to have the same size as | ||
| 26 | * phys_addr_t, which is the most common way. | ||
| 27 | * Do not define the dma64_addr_t type, which never really | ||
| 28 | * worked. | ||
| 29 | */ | ||
| 30 | #ifndef dma_addr_t | ||
| 31 | #ifdef CONFIG_PHYS_ADDR_T_64BIT | ||
| 32 | typedef u64 dma_addr_t; | ||
| 33 | #else | ||
| 34 | typedef u32 dma_addr_t; | ||
| 35 | #endif /* CONFIG_PHYS_ADDR_T_64BIT */ | ||
| 36 | #endif /* dma_addr_t */ | ||
| 37 | |||
| 38 | #endif /* __ASSEMBLY__ */ | ||
| 39 | |||
| 40 | #endif /* __KERNEL__ */ | ||
| 41 | |||
| 42 | #endif /* _ASM_GENERIC_TYPES_H */ | ||
diff --git a/include/asm-generic/uaccess-unaligned.h b/include/asm-generic/uaccess-unaligned.h new file mode 100644 index 000000000000..67deb898f0c5 --- /dev/null +++ b/include/asm-generic/uaccess-unaligned.h | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | #ifndef __ASM_GENERIC_UACCESS_UNALIGNED_H | ||
| 2 | #define __ASM_GENERIC_UACCESS_UNALIGNED_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * This macro should be used instead of __get_user() when accessing | ||
| 6 | * values at locations that are not known to be aligned. | ||
| 7 | */ | ||
| 8 | #define __get_user_unaligned(x, ptr) \ | ||
| 9 | ({ \ | ||
| 10 | __typeof__ (*(ptr)) __x; \ | ||
| 11 | __copy_from_user(&__x, (ptr), sizeof(*(ptr))) ? -EFAULT : 0; \ | ||
| 12 | (x) = __x; \ | ||
| 13 | }) | ||
| 14 | |||
| 15 | |||
| 16 | /* | ||
| 17 | * This macro should be used instead of __put_user() when accessing | ||
| 18 | * values at locations that are not known to be aligned. | ||
| 19 | */ | ||
| 20 | #define __put_user_unaligned(x, ptr) \ | ||
| 21 | ({ \ | ||
| 22 | __typeof__ (*(ptr)) __x = (x); \ | ||
| 23 | __copy_to_user((ptr), &__x, sizeof(*(ptr))) ? -EFAULT : 0; \ | ||
| 24 | }) | ||
| 25 | |||
| 26 | #endif /* __ASM_GENERIC_UACCESS_UNALIGNED_H */ | ||
diff --git a/include/asm-generic/uaccess.h b/include/asm-generic/uaccess.h index 549cb3a1640a..6d8cab22e294 100644 --- a/include/asm-generic/uaccess.h +++ b/include/asm-generic/uaccess.h | |||
| @@ -1,26 +1,325 @@ | |||
| 1 | #ifndef _ASM_GENERIC_UACCESS_H_ | 1 | #ifndef __ASM_GENERIC_UACCESS_H |
| 2 | #define _ASM_GENERIC_UACCESS_H_ | 2 | #define __ASM_GENERIC_UACCESS_H |
| 3 | 3 | ||
| 4 | /* | 4 | /* |
| 5 | * This macro should be used instead of __get_user() when accessing | 5 | * User space memory access functions, these should work |
| 6 | * values at locations that are not known to be aligned. | 6 | * on a ny machine that has kernel and user data in the same |
| 7 | * address space, e.g. all NOMMU machines. | ||
| 7 | */ | 8 | */ |
| 8 | #define __get_user_unaligned(x, ptr) \ | 9 | #include <linux/sched.h> |
| 9 | ({ \ | 10 | #include <linux/mm.h> |
| 10 | __typeof__ (*(ptr)) __x; \ | 11 | #include <linux/string.h> |
| 11 | __copy_from_user(&__x, (ptr), sizeof(*(ptr))) ? -EFAULT : 0; \ | 12 | |
| 12 | (x) = __x; \ | 13 | #include <asm/segment.h> |
| 13 | }) | 14 | |
| 15 | #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) }) | ||
| 16 | |||
| 17 | #ifndef KERNEL_DS | ||
| 18 | #define KERNEL_DS MAKE_MM_SEG(~0UL) | ||
| 19 | #endif | ||
| 20 | |||
| 21 | #ifndef USER_DS | ||
| 22 | #define USER_DS MAKE_MM_SEG(TASK_SIZE - 1) | ||
| 23 | #endif | ||
| 24 | |||
| 25 | #ifndef get_fs | ||
| 26 | #define get_ds() (KERNEL_DS) | ||
| 27 | #define get_fs() (current_thread_info()->addr_limit) | ||
| 28 | |||
| 29 | static inline void set_fs(mm_segment_t fs) | ||
| 30 | { | ||
| 31 | current_thread_info()->addr_limit = fs; | ||
| 32 | } | ||
| 33 | #endif | ||
| 14 | 34 | ||
| 35 | #define segment_eq(a, b) ((a).seg == (b).seg) | ||
| 36 | |||
| 37 | #define VERIFY_READ 0 | ||
| 38 | #define VERIFY_WRITE 1 | ||
| 39 | |||
| 40 | #define access_ok(type, addr, size) __access_ok((unsigned long)(addr),(size)) | ||
| 41 | |||
| 42 | /* | ||
| 43 | * The architecture should really override this if possible, at least | ||
| 44 | * doing a check on the get_fs() | ||
| 45 | */ | ||
| 46 | #ifndef __access_ok | ||
| 47 | static inline int __access_ok(unsigned long addr, unsigned long size) | ||
| 48 | { | ||
| 49 | return 1; | ||
| 50 | } | ||
| 51 | #endif | ||
| 15 | 52 | ||
| 16 | /* | 53 | /* |
| 17 | * This macro should be used instead of __put_user() when accessing | 54 | * The exception table consists of pairs of addresses: the first is the |
| 18 | * values at locations that are not known to be aligned. | 55 | * address of an instruction that is allowed to fault, and the second is |
| 56 | * the address at which the program should continue. No registers are | ||
| 57 | * modified, so it is entirely up to the continuation code to figure out | ||
| 58 | * what to do. | ||
| 59 | * | ||
| 60 | * All the routines below use bits of fixup code that are out of line | ||
| 61 | * with the main instruction path. This means when everything is well, | ||
| 62 | * we don't even have to jump over them. Further, they do not intrude | ||
| 63 | * on our cache or tlb entries. | ||
| 19 | */ | 64 | */ |
| 20 | #define __put_user_unaligned(x, ptr) \ | 65 | |
| 21 | ({ \ | 66 | struct exception_table_entry |
| 22 | __typeof__ (*(ptr)) __x = (x); \ | 67 | { |
| 23 | __copy_to_user((ptr), &__x, sizeof(*(ptr))) ? -EFAULT : 0; \ | 68 | unsigned long insn, fixup; |
| 69 | }; | ||
| 70 | |||
| 71 | /* Returns 0 if exception not found and fixup otherwise. */ | ||
| 72 | extern unsigned long search_exception_table(unsigned long); | ||
| 73 | |||
| 74 | /* | ||
| 75 | * architectures with an MMU should override these two | ||
| 76 | */ | ||
| 77 | #ifndef __copy_from_user | ||
| 78 | static inline __must_check long __copy_from_user(void *to, | ||
| 79 | const void __user * from, unsigned long n) | ||
| 80 | { | ||
| 81 | if (__builtin_constant_p(n)) { | ||
| 82 | switch(n) { | ||
| 83 | case 1: | ||
| 84 | *(u8 *)to = *(u8 __force *)from; | ||
| 85 | return 0; | ||
| 86 | case 2: | ||
| 87 | *(u16 *)to = *(u16 __force *)from; | ||
| 88 | return 0; | ||
| 89 | case 4: | ||
| 90 | *(u32 *)to = *(u32 __force *)from; | ||
| 91 | return 0; | ||
| 92 | #ifdef CONFIG_64BIT | ||
| 93 | case 8: | ||
| 94 | *(u64 *)to = *(u64 __force *)from; | ||
| 95 | return 0; | ||
| 96 | #endif | ||
| 97 | default: | ||
| 98 | break; | ||
| 99 | } | ||
| 100 | } | ||
| 101 | |||
| 102 | memcpy(to, (const void __force *)from, n); | ||
| 103 | return 0; | ||
| 104 | } | ||
| 105 | #endif | ||
| 106 | |||
| 107 | #ifndef __copy_to_user | ||
| 108 | static inline __must_check long __copy_to_user(void __user *to, | ||
| 109 | const void *from, unsigned long n) | ||
| 110 | { | ||
| 111 | if (__builtin_constant_p(n)) { | ||
| 112 | switch(n) { | ||
| 113 | case 1: | ||
| 114 | *(u8 __force *)to = *(u8 *)from; | ||
| 115 | return 0; | ||
| 116 | case 2: | ||
| 117 | *(u16 __force *)to = *(u16 *)from; | ||
| 118 | return 0; | ||
| 119 | case 4: | ||
| 120 | *(u32 __force *)to = *(u32 *)from; | ||
| 121 | return 0; | ||
| 122 | #ifdef CONFIG_64BIT | ||
| 123 | case 8: | ||
| 124 | *(u64 __force *)to = *(u64 *)from; | ||
| 125 | return 0; | ||
| 126 | #endif | ||
| 127 | default: | ||
| 128 | break; | ||
| 129 | } | ||
| 130 | } | ||
| 131 | |||
| 132 | memcpy((void __force *)to, from, n); | ||
| 133 | return 0; | ||
| 134 | } | ||
| 135 | #endif | ||
| 136 | |||
| 137 | /* | ||
| 138 | * These are the main single-value transfer routines. They automatically | ||
| 139 | * use the right size if we just have the right pointer type. | ||
| 140 | * This version just falls back to copy_{from,to}_user, which should | ||
| 141 | * provide a fast-path for small values. | ||
| 142 | */ | ||
| 143 | #define __put_user(x, ptr) \ | ||
| 144 | ({ \ | ||
| 145 | __typeof__(*(ptr)) __x = (x); \ | ||
| 146 | int __pu_err = -EFAULT; \ | ||
| 147 | __chk_user_ptr(ptr); \ | ||
| 148 | switch (sizeof (*(ptr))) { \ | ||
| 149 | case 1: \ | ||
| 150 | case 2: \ | ||
| 151 | case 4: \ | ||
| 152 | case 8: \ | ||
| 153 | __pu_err = __put_user_fn(sizeof (*(ptr)), \ | ||
| 154 | ptr, &__x); \ | ||
| 155 | break; \ | ||
| 156 | default: \ | ||
| 157 | __put_user_bad(); \ | ||
| 158 | break; \ | ||
| 159 | } \ | ||
| 160 | __pu_err; \ | ||
| 161 | }) | ||
| 162 | |||
| 163 | #define put_user(x, ptr) \ | ||
| 164 | ({ \ | ||
| 165 | might_sleep(); \ | ||
| 166 | __access_ok(ptr, sizeof (*ptr)) ? \ | ||
| 167 | __put_user(x, ptr) : \ | ||
| 168 | -EFAULT; \ | ||
| 24 | }) | 169 | }) |
| 25 | 170 | ||
| 26 | #endif /* _ASM_GENERIC_UACCESS_H */ | 171 | static inline int __put_user_fn(size_t size, void __user *ptr, void *x) |
| 172 | { | ||
| 173 | size = __copy_to_user(ptr, x, size); | ||
| 174 | return size ? -EFAULT : size; | ||
| 175 | } | ||
| 176 | |||
| 177 | extern int __put_user_bad(void) __attribute__((noreturn)); | ||
| 178 | |||
| 179 | #define __get_user(x, ptr) \ | ||
| 180 | ({ \ | ||
| 181 | int __gu_err = -EFAULT; \ | ||
| 182 | __chk_user_ptr(ptr); \ | ||
| 183 | switch (sizeof(*(ptr))) { \ | ||
| 184 | case 1: { \ | ||
| 185 | unsigned char __x; \ | ||
| 186 | __gu_err = __get_user_fn(sizeof (*(ptr)), \ | ||
| 187 | ptr, &__x); \ | ||
| 188 | (x) = *(__force __typeof__(*(ptr)) *) &__x; \ | ||
| 189 | break; \ | ||
| 190 | }; \ | ||
| 191 | case 2: { \ | ||
| 192 | unsigned short __x; \ | ||
| 193 | __gu_err = __get_user_fn(sizeof (*(ptr)), \ | ||
| 194 | ptr, &__x); \ | ||
| 195 | (x) = *(__force __typeof__(*(ptr)) *) &__x; \ | ||
| 196 | break; \ | ||
| 197 | }; \ | ||
| 198 | case 4: { \ | ||
| 199 | unsigned int __x; \ | ||
| 200 | __gu_err = __get_user_fn(sizeof (*(ptr)), \ | ||
| 201 | ptr, &__x); \ | ||
| 202 | (x) = *(__force __typeof__(*(ptr)) *) &__x; \ | ||
| 203 | break; \ | ||
| 204 | }; \ | ||
| 205 | case 8: { \ | ||
| 206 | unsigned long long __x; \ | ||
| 207 | __gu_err = __get_user_fn(sizeof (*(ptr)), \ | ||
| 208 | ptr, &__x); \ | ||
| 209 | (x) = *(__force __typeof__(*(ptr)) *) &__x; \ | ||
| 210 | break; \ | ||
| 211 | }; \ | ||
| 212 | default: \ | ||
| 213 | __get_user_bad(); \ | ||
| 214 | break; \ | ||
| 215 | } \ | ||
| 216 | __gu_err; \ | ||
| 217 | }) | ||
| 218 | |||
| 219 | #define get_user(x, ptr) \ | ||
| 220 | ({ \ | ||
| 221 | might_sleep(); \ | ||
| 222 | __access_ok(ptr, sizeof (*ptr)) ? \ | ||
| 223 | __get_user(x, ptr) : \ | ||
| 224 | -EFAULT; \ | ||
| 225 | }) | ||
| 226 | |||
| 227 | static inline int __get_user_fn(size_t size, const void __user *ptr, void *x) | ||
| 228 | { | ||
| 229 | size = __copy_from_user(x, ptr, size); | ||
| 230 | return size ? -EFAULT : size; | ||
| 231 | } | ||
| 232 | |||
| 233 | extern int __get_user_bad(void) __attribute__((noreturn)); | ||
| 234 | |||
| 235 | #ifndef __copy_from_user_inatomic | ||
| 236 | #define __copy_from_user_inatomic __copy_from_user | ||
| 237 | #endif | ||
| 238 | |||
| 239 | #ifndef __copy_to_user_inatomic | ||
| 240 | #define __copy_to_user_inatomic __copy_to_user | ||
| 241 | #endif | ||
| 242 | |||
| 243 | static inline long copy_from_user(void *to, | ||
| 244 | const void __user * from, unsigned long n) | ||
| 245 | { | ||
| 246 | might_sleep(); | ||
| 247 | if (__access_ok(from, n)) | ||
| 248 | return __copy_from_user(to, from, n); | ||
| 249 | else | ||
| 250 | return n; | ||
| 251 | } | ||
| 252 | |||
| 253 | static inline long copy_to_user(void __user *to, | ||
| 254 | const void *from, unsigned long n) | ||
| 255 | { | ||
| 256 | might_sleep(); | ||
| 257 | if (__access_ok(to, n)) | ||
| 258 | return __copy_to_user(to, from, n); | ||
| 259 | else | ||
| 260 | return n; | ||
| 261 | } | ||
| 262 | |||
| 263 | /* | ||
| 264 | * Copy a null terminated string from userspace. | ||
| 265 | */ | ||
| 266 | #ifndef __strncpy_from_user | ||
| 267 | static inline long | ||
| 268 | __strncpy_from_user(char *dst, const char __user *src, long count) | ||
| 269 | { | ||
| 270 | char *tmp; | ||
| 271 | strncpy(dst, (const char __force *)src, count); | ||
| 272 | for (tmp = dst; *tmp && count > 0; tmp++, count--) | ||
| 273 | ; | ||
| 274 | return (tmp - dst); | ||
| 275 | } | ||
| 276 | #endif | ||
| 277 | |||
| 278 | static inline long | ||
| 279 | strncpy_from_user(char *dst, const char __user *src, long count) | ||
| 280 | { | ||
| 281 | if (!__access_ok(src, 1)) | ||
| 282 | return -EFAULT; | ||
| 283 | return __strncpy_from_user(dst, src, count); | ||
| 284 | } | ||
| 285 | |||
| 286 | /* | ||
| 287 | * Return the size of a string (including the ending 0) | ||
| 288 | * | ||
| 289 | * Return 0 on exception, a value greater than N if too long | ||
| 290 | */ | ||
| 291 | #ifndef strnlen_user | ||
| 292 | static inline long strnlen_user(const char __user *src, long n) | ||
| 293 | { | ||
| 294 | return strlen((void * __force)src) + 1; | ||
| 295 | } | ||
| 296 | #endif | ||
| 297 | |||
| 298 | static inline long strlen_user(const char __user *src) | ||
| 299 | { | ||
| 300 | return strnlen_user(src, 32767); | ||
| 301 | } | ||
| 302 | |||
| 303 | /* | ||
| 304 | * Zero Userspace | ||
| 305 | */ | ||
| 306 | #ifndef __clear_user | ||
| 307 | static inline __must_check unsigned long | ||
| 308 | __clear_user(void __user *to, unsigned long n) | ||
| 309 | { | ||
| 310 | memset((void __force *)to, 0, n); | ||
| 311 | return 0; | ||
| 312 | } | ||
| 313 | #endif | ||
| 314 | |||
| 315 | static inline __must_check unsigned long | ||
| 316 | clear_user(void __user *to, unsigned long n) | ||
| 317 | { | ||
| 318 | might_sleep(); | ||
| 319 | if (!__access_ok(to, n)) | ||
| 320 | return n; | ||
| 321 | |||
| 322 | return __clear_user(to, n); | ||
| 323 | } | ||
| 324 | |||
| 325 | #endif /* __ASM_GENERIC_UACCESS_H */ | ||
diff --git a/include/asm-generic/ucontext.h b/include/asm-generic/ucontext.h new file mode 100644 index 000000000000..ad77343e8a9a --- /dev/null +++ b/include/asm-generic/ucontext.h | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | #ifndef __ASM_GENERIC_UCONTEXT_H | ||
| 2 | #define __ASM_GENERIC_UCONTEXT_H | ||
| 3 | |||
| 4 | struct ucontext { | ||
| 5 | unsigned long uc_flags; | ||
| 6 | struct ucontext *uc_link; | ||
| 7 | stack_t uc_stack; | ||
| 8 | struct sigcontext uc_mcontext; | ||
| 9 | sigset_t uc_sigmask; /* mask last for extensibility */ | ||
| 10 | }; | ||
| 11 | |||
| 12 | #endif /* __ASM_GENERIC_UCONTEXT_H */ | ||
diff --git a/include/asm-generic/unaligned.h b/include/asm-generic/unaligned.h new file mode 100644 index 000000000000..03cf5936bad6 --- /dev/null +++ b/include/asm-generic/unaligned.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | #ifndef __ASM_GENERIC_UNALIGNED_H | ||
| 2 | #define __ASM_GENERIC_UNALIGNED_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * This is the most generic implementation of unaligned accesses | ||
| 6 | * and should work almost anywhere. | ||
| 7 | * | ||
| 8 | * If an architecture can handle unaligned accesses in hardware, | ||
| 9 | * it may want to use the linux/unaligned/access_ok.h implementation | ||
| 10 | * instead. | ||
| 11 | */ | ||
| 12 | #include <asm/byteorder.h> | ||
| 13 | |||
| 14 | #if defined(__LITTLE_ENDIAN) | ||
| 15 | # include <linux/unaligned/le_struct.h> | ||
| 16 | # include <linux/unaligned/be_byteshift.h> | ||
| 17 | # include <linux/unaligned/generic.h> | ||
| 18 | # define get_unaligned __get_unaligned_le | ||
| 19 | # define put_unaligned __put_unaligned_le | ||
| 20 | #elif defined(__BIG_ENDIAN) | ||
| 21 | # include <linux/unaligned/be_struct.h> | ||
| 22 | # include <linux/unaligned/le_byteshift.h> | ||
| 23 | # include <linux/unaligned/generic.h> | ||
| 24 | # define get_unaligned __get_unaligned_be | ||
| 25 | # define put_unaligned __put_unaligned_be | ||
| 26 | #else | ||
| 27 | # error need to define endianess | ||
| 28 | #endif | ||
| 29 | |||
| 30 | #endif /* __ASM_GENERIC_UNALIGNED_H */ | ||
diff --git a/include/asm-generic/unistd.h b/include/asm-generic/unistd.h new file mode 100644 index 000000000000..5b34b6233d6d --- /dev/null +++ b/include/asm-generic/unistd.h | |||
| @@ -0,0 +1,854 @@ | |||
| 1 | #if !defined(_ASM_GENERIC_UNISTD_H) || defined(__SYSCALL) | ||
| 2 | #define _ASM_GENERIC_UNISTD_H | ||
| 3 | |||
| 4 | #include <asm/bitsperlong.h> | ||
| 5 | |||
| 6 | /* | ||
| 7 | * This file contains the system call numbers, based on the | ||
| 8 | * layout of the x86-64 architecture, which embeds the | ||
| 9 | * pointer to the syscall in the table. | ||
| 10 | * | ||
| 11 | * As a basic principle, no duplication of functionality | ||
| 12 | * should be added, e.g. we don't use lseek when llseek | ||
| 13 | * is present. New architectures should use this file | ||
| 14 | * and implement the less feature-full calls in user space. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #ifndef __SYSCALL | ||
| 18 | #define __SYSCALL(x, y) | ||
| 19 | #endif | ||
| 20 | |||
| 21 | #if __BITS_PER_LONG == 32 | ||
| 22 | #define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _32) | ||
| 23 | #else | ||
| 24 | #define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _64) | ||
| 25 | #endif | ||
| 26 | |||
| 27 | #define __NR_io_setup 0 | ||
| 28 | __SYSCALL(__NR_io_setup, sys_io_setup) | ||
| 29 | #define __NR_io_destroy 1 | ||
| 30 | __SYSCALL(__NR_io_destroy, sys_io_destroy) | ||
| 31 | #define __NR_io_submit 2 | ||
| 32 | __SYSCALL(__NR_io_submit, sys_io_submit) | ||
| 33 | #define __NR_io_cancel 3 | ||
| 34 | __SYSCALL(__NR_io_cancel, sys_io_cancel) | ||
| 35 | #define __NR_io_getevents 4 | ||
| 36 | __SYSCALL(__NR_io_getevents, sys_io_getevents) | ||
| 37 | |||
| 38 | /* fs/xattr.c */ | ||
| 39 | #define __NR_setxattr 5 | ||
| 40 | __SYSCALL(__NR_setxattr, sys_setxattr) | ||
| 41 | #define __NR_lsetxattr 6 | ||
| 42 | __SYSCALL(__NR_lsetxattr, sys_lsetxattr) | ||
| 43 | #define __NR_fsetxattr 7 | ||
| 44 | __SYSCALL(__NR_fsetxattr, sys_fsetxattr) | ||
| 45 | #define __NR_getxattr 8 | ||
| 46 | __SYSCALL(__NR_getxattr, sys_getxattr) | ||
| 47 | #define __NR_lgetxattr 9 | ||
| 48 | __SYSCALL(__NR_lgetxattr, sys_lgetxattr) | ||
| 49 | #define __NR_fgetxattr 10 | ||
| 50 | __SYSCALL(__NR_fgetxattr, sys_fgetxattr) | ||
| 51 | #define __NR_listxattr 11 | ||
| 52 | __SYSCALL(__NR_listxattr, sys_listxattr) | ||
| 53 | #define __NR_llistxattr 12 | ||
| 54 | __SYSCALL(__NR_llistxattr, sys_llistxattr) | ||
| 55 | #define __NR_flistxattr 13 | ||
| 56 | __SYSCALL(__NR_flistxattr, sys_flistxattr) | ||
| 57 | #define __NR_removexattr 14 | ||
| 58 | __SYSCALL(__NR_removexattr, sys_removexattr) | ||
| 59 | #define __NR_lremovexattr 15 | ||
| 60 | __SYSCALL(__NR_lremovexattr, sys_lremovexattr) | ||
| 61 | #define __NR_fremovexattr 16 | ||
| 62 | __SYSCALL(__NR_fremovexattr, sys_fremovexattr) | ||
| 63 | |||
| 64 | /* fs/dcache.c */ | ||
| 65 | #define __NR_getcwd 17 | ||
| 66 | __SYSCALL(__NR_getcwd, sys_getcwd) | ||
| 67 | |||
| 68 | /* fs/cookies.c */ | ||
| 69 | #define __NR_lookup_dcookie 18 | ||
| 70 | __SYSCALL(__NR_lookup_dcookie, sys_lookup_dcookie) | ||
| 71 | |||
| 72 | /* fs/eventfd.c */ | ||
| 73 | #define __NR_eventfd2 19 | ||
| 74 | __SYSCALL(__NR_eventfd2, sys_eventfd2) | ||
| 75 | |||
| 76 | /* fs/eventpoll.c */ | ||
| 77 | #define __NR_epoll_create1 20 | ||
| 78 | __SYSCALL(__NR_epoll_create1, sys_epoll_create1) | ||
| 79 | #define __NR_epoll_ctl 21 | ||
| 80 | __SYSCALL(__NR_epoll_ctl, sys_epoll_ctl) | ||
| 81 | #define __NR_epoll_pwait 22 | ||
| 82 | __SYSCALL(__NR_epoll_pwait, sys_epoll_pwait) | ||
| 83 | |||
| 84 | /* fs/fcntl.c */ | ||
| 85 | #define __NR_dup 23 | ||
| 86 | __SYSCALL(__NR_dup, sys_dup) | ||
| 87 | #define __NR_dup3 24 | ||
| 88 | __SYSCALL(__NR_dup3, sys_dup3) | ||
| 89 | #define __NR3264_fcntl 25 | ||
| 90 | __SC_3264(__NR3264_fcntl, sys_fcntl64, sys_fcntl) | ||
| 91 | |||
| 92 | /* fs/inotify_user.c */ | ||
| 93 | #define __NR_inotify_init1 26 | ||
| 94 | __SYSCALL(__NR_inotify_init1, sys_inotify_init1) | ||
| 95 | #define __NR_inotify_add_watch 27 | ||
| 96 | __SYSCALL(__NR_inotify_add_watch, sys_inotify_add_watch) | ||
| 97 | #define __NR_inotify_rm_watch 28 | ||
| 98 | __SYSCALL(__NR_inotify_rm_watch, sys_inotify_rm_watch) | ||
| 99 | |||
| 100 | /* fs/ioctl.c */ | ||
| 101 | #define __NR_ioctl 29 | ||
| 102 | __SYSCALL(__NR_ioctl, sys_ioctl) | ||
| 103 | |||
| 104 | /* fs/ioprio.c */ | ||
| 105 | #define __NR_ioprio_set 30 | ||
| 106 | __SYSCALL(__NR_ioprio_set, sys_ioprio_set) | ||
| 107 | #define __NR_ioprio_get 31 | ||
| 108 | __SYSCALL(__NR_ioprio_get, sys_ioprio_get) | ||
| 109 | |||
| 110 | /* fs/locks.c */ | ||
| 111 | #define __NR_flock 32 | ||
| 112 | __SYSCALL(__NR_flock, sys_flock) | ||
| 113 | |||
| 114 | /* fs/namei.c */ | ||
| 115 | #define __NR_mknodat 33 | ||
| 116 | __SYSCALL(__NR_mknodat, sys_mknodat) | ||
| 117 | #define __NR_mkdirat 34 | ||
| 118 | __SYSCALL(__NR_mkdirat, sys_mkdirat) | ||
| 119 | #define __NR_unlinkat 35 | ||
| 120 | __SYSCALL(__NR_unlinkat, sys_unlinkat) | ||
| 121 | #define __NR_symlinkat 36 | ||
| 122 | __SYSCALL(__NR_symlinkat, sys_symlinkat) | ||
| 123 | #define __NR_linkat 37 | ||
| 124 | __SYSCALL(__NR_linkat, sys_linkat) | ||
| 125 | #define __NR_renameat 38 | ||
| 126 | __SYSCALL(__NR_renameat, sys_renameat) | ||
| 127 | |||
| 128 | /* fs/namespace.c */ | ||
| 129 | #define __NR_umount2 39 | ||
| 130 | __SYSCALL(__NR_umount2, sys_umount) | ||
| 131 | #define __NR_mount 40 | ||
| 132 | __SYSCALL(__NR_mount, sys_mount) | ||
| 133 | #define __NR_pivot_root 41 | ||
| 134 | __SYSCALL(__NR_pivot_root, sys_pivot_root) | ||
| 135 | |||
| 136 | /* fs/nfsctl.c */ | ||
| 137 | #define __NR_nfsservctl 42 | ||
| 138 | __SYSCALL(__NR_nfsservctl, sys_nfsservctl) | ||
| 139 | |||
| 140 | /* fs/open.c */ | ||
| 141 | #define __NR3264_statfs 43 | ||
| 142 | __SC_3264(__NR3264_statfs, sys_statfs64, sys_statfs) | ||
| 143 | #define __NR3264_fstatfs 44 | ||
| 144 | __SC_3264(__NR3264_fstatfs, sys_fstatfs64, sys_fstatfs) | ||
| 145 | #define __NR3264_truncate 45 | ||
| 146 | __SC_3264(__NR3264_truncate, sys_truncate64, sys_truncate) | ||
| 147 | #define __NR3264_ftruncate 46 | ||
| 148 | __SC_3264(__NR3264_ftruncate, sys_ftruncate64, sys_ftruncate) | ||
| 149 | |||
| 150 | #define __NR_fallocate 47 | ||
| 151 | __SYSCALL(__NR_fallocate, sys_fallocate) | ||
| 152 | #define __NR_faccessat 48 | ||
| 153 | __SYSCALL(__NR_faccessat, sys_faccessat) | ||
| 154 | #define __NR_chdir 49 | ||
| 155 | __SYSCALL(__NR_chdir, sys_chdir) | ||
| 156 | #define __NR_fchdir 50 | ||
| 157 | __SYSCALL(__NR_fchdir, sys_fchdir) | ||
| 158 | #define __NR_chroot 51 | ||
| 159 | __SYSCALL(__NR_chroot, sys_chroot) | ||
| 160 | #define __NR_fchmod 52 | ||
| 161 | __SYSCALL(__NR_fchmod, sys_fchmod) | ||
| 162 | #define __NR_fchmodat 53 | ||
| 163 | __SYSCALL(__NR_fchmodat, sys_fchmodat) | ||
| 164 | #define __NR_fchownat 54 | ||
| 165 | __SYSCALL(__NR_fchownat, sys_fchownat) | ||
| 166 | #define __NR_fchown 55 | ||
| 167 | __SYSCALL(__NR_fchown, sys_fchown) | ||
| 168 | #define __NR_openat 56 | ||
| 169 | __SYSCALL(__NR_openat, sys_openat) | ||
| 170 | #define __NR_close 57 | ||
| 171 | __SYSCALL(__NR_close, sys_close) | ||
| 172 | #define __NR_vhangup 58 | ||
| 173 | __SYSCALL(__NR_vhangup, sys_vhangup) | ||
| 174 | |||
| 175 | /* fs/pipe.c */ | ||
| 176 | #define __NR_pipe2 59 | ||
| 177 | __SYSCALL(__NR_pipe2, sys_pipe2) | ||
| 178 | |||
| 179 | /* fs/quota.c */ | ||
| 180 | #define __NR_quotactl 60 | ||
| 181 | __SYSCALL(__NR_quotactl, sys_quotactl) | ||
| 182 | |||
| 183 | /* fs/readdir.c */ | ||
| 184 | #define __NR_getdents64 61 | ||
| 185 | __SYSCALL(__NR_getdents64, sys_getdents64) | ||
| 186 | |||
| 187 | /* fs/read_write.c */ | ||
| 188 | #define __NR3264_lseek 62 | ||
| 189 | __SC_3264(__NR3264_lseek, sys_llseek, sys_lseek) | ||
| 190 | #define __NR_read 63 | ||
| 191 | __SYSCALL(__NR_read, sys_read) | ||
| 192 | #define __NR_write 64 | ||
| 193 | __SYSCALL(__NR_write, sys_write) | ||
| 194 | #define __NR_readv 65 | ||
| 195 | __SYSCALL(__NR_readv, sys_readv) | ||
| 196 | #define __NR_writev 66 | ||
| 197 | __SYSCALL(__NR_writev, sys_writev) | ||
| 198 | #define __NR_pread64 67 | ||
| 199 | __SYSCALL(__NR_pread64, sys_pread64) | ||
| 200 | #define __NR_pwrite64 68 | ||
| 201 | __SYSCALL(__NR_pwrite64, sys_pwrite64) | ||
| 202 | #define __NR_preadv 69 | ||
| 203 | __SYSCALL(__NR_preadv, sys_preadv) | ||
| 204 | #define __NR_pwritev 70 | ||
| 205 | __SYSCALL(__NR_pwritev, sys_pwritev) | ||
| 206 | |||
| 207 | /* fs/sendfile.c */ | ||
| 208 | #define __NR3264_sendfile 71 | ||
| 209 | __SC_3264(__NR3264_sendfile, sys_sendfile64, sys_sendfile) | ||
| 210 | |||
| 211 | /* fs/select.c */ | ||
| 212 | #define __NR_pselect6 72 | ||
| 213 | __SYSCALL(__NR_pselect6, sys_pselect6) | ||
| 214 | #define __NR_ppoll 73 | ||
| 215 | __SYSCALL(__NR_ppoll, sys_ppoll) | ||
| 216 | |||
| 217 | /* fs/signalfd.c */ | ||
| 218 | #define __NR_signalfd4 74 | ||
| 219 | __SYSCALL(__NR_signalfd4, sys_signalfd4) | ||
| 220 | |||
| 221 | /* fs/splice.c */ | ||
| 222 | #define __NR_vmsplice 75 | ||
| 223 | __SYSCALL(__NR_vmsplice, sys_vmsplice) | ||
| 224 | #define __NR_splice 76 | ||
| 225 | __SYSCALL(__NR_splice, sys_splice) | ||
| 226 | #define __NR_tee 77 | ||
| 227 | __SYSCALL(__NR_tee, sys_tee) | ||
| 228 | |||
| 229 | /* fs/stat.c */ | ||
| 230 | #define __NR_readlinkat 78 | ||
| 231 | __SYSCALL(__NR_readlinkat, sys_readlinkat) | ||
| 232 | #define __NR3264_fstatat 79 | ||
| 233 | __SC_3264(__NR3264_fstatat, sys_fstatat64, sys_newfstatat) | ||
| 234 | #define __NR3264_fstat 80 | ||
| 235 | __SC_3264(__NR3264_fstat, sys_fstat64, sys_newfstat) | ||
| 236 | |||
| 237 | /* fs/sync.c */ | ||
| 238 | #define __NR_sync 81 | ||
| 239 | __SYSCALL(__NR_sync, sys_sync) | ||
| 240 | #define __NR_fsync 82 | ||
| 241 | __SYSCALL(__NR_fsync, sys_fsync) | ||
| 242 | #define __NR_fdatasync 83 | ||
| 243 | __SYSCALL(__NR_fdatasync, sys_fdatasync) | ||
| 244 | #define __NR_sync_file_range 84 | ||
| 245 | __SYSCALL(__NR_sync_file_range, sys_sync_file_range) /* .long sys_sync_file_range2, */ | ||
| 246 | |||
| 247 | /* fs/timerfd.c */ | ||
| 248 | #define __NR_timerfd_create 85 | ||
| 249 | __SYSCALL(__NR_timerfd_create, sys_timerfd_create) | ||
| 250 | #define __NR_timerfd_settime 86 | ||
| 251 | __SYSCALL(__NR_timerfd_settime, sys_timerfd_settime) | ||
| 252 | #define __NR_timerfd_gettime 87 | ||
| 253 | __SYSCALL(__NR_timerfd_gettime, sys_timerfd_gettime) | ||
| 254 | |||
| 255 | /* fs/utimes.c */ | ||
| 256 | #define __NR_utimensat 88 | ||
| 257 | __SYSCALL(__NR_utimensat, sys_utimensat) | ||
| 258 | |||
| 259 | /* kernel/acct.c */ | ||
| 260 | #define __NR_acct 89 | ||
| 261 | __SYSCALL(__NR_acct, sys_acct) | ||
| 262 | |||
| 263 | /* kernel/capability.c */ | ||
| 264 | #define __NR_capget 90 | ||
| 265 | __SYSCALL(__NR_capget, sys_capget) | ||
| 266 | #define __NR_capset 91 | ||
| 267 | __SYSCALL(__NR_capset, sys_capset) | ||
| 268 | |||
| 269 | /* kernel/exec_domain.c */ | ||
| 270 | #define __NR_personality 92 | ||
| 271 | __SYSCALL(__NR_personality, sys_personality) | ||
| 272 | |||
| 273 | /* kernel/exit.c */ | ||
| 274 | #define __NR_exit 93 | ||
| 275 | __SYSCALL(__NR_exit, sys_exit) | ||
| 276 | #define __NR_exit_group 94 | ||
| 277 | __SYSCALL(__NR_exit_group, sys_exit_group) | ||
| 278 | #define __NR_waitid 95 | ||
| 279 | __SYSCALL(__NR_waitid, sys_waitid) | ||
| 280 | |||
| 281 | /* kernel/fork.c */ | ||
| 282 | #define __NR_set_tid_address 96 | ||
| 283 | __SYSCALL(__NR_set_tid_address, sys_set_tid_address) | ||
| 284 | #define __NR_unshare 97 | ||
| 285 | __SYSCALL(__NR_unshare, sys_unshare) | ||
| 286 | |||
| 287 | /* kernel/futex.c */ | ||
| 288 | #define __NR_futex 98 | ||
| 289 | __SYSCALL(__NR_futex, sys_futex) | ||
| 290 | #define __NR_set_robust_list 99 | ||
| 291 | __SYSCALL(__NR_set_robust_list, sys_set_robust_list) | ||
| 292 | #define __NR_get_robust_list 100 | ||
| 293 | __SYSCALL(__NR_get_robust_list, sys_get_robust_list) | ||
| 294 | |||
| 295 | /* kernel/hrtimer.c */ | ||
| 296 | #define __NR_nanosleep 101 | ||
| 297 | __SYSCALL(__NR_nanosleep, sys_nanosleep) | ||
| 298 | |||
| 299 | /* kernel/itimer.c */ | ||
| 300 | #define __NR_getitimer 102 | ||
| 301 | __SYSCALL(__NR_getitimer, sys_getitimer) | ||
| 302 | #define __NR_setitimer 103 | ||
| 303 | __SYSCALL(__NR_setitimer, sys_setitimer) | ||
| 304 | |||
| 305 | /* kernel/kexec.c */ | ||
| 306 | #define __NR_kexec_load 104 | ||
| 307 | __SYSCALL(__NR_kexec_load, sys_kexec_load) | ||
| 308 | |||
| 309 | /* kernel/module.c */ | ||
| 310 | #define __NR_init_module 105 | ||
| 311 | __SYSCALL(__NR_init_module, sys_init_module) | ||
| 312 | #define __NR_delete_module 106 | ||
| 313 | __SYSCALL(__NR_delete_module, sys_delete_module) | ||
| 314 | |||
| 315 | /* kernel/posix-timers.c */ | ||
| 316 | #define __NR_timer_create 107 | ||
| 317 | __SYSCALL(__NR_timer_create, sys_timer_create) | ||
| 318 | #define __NR_timer_gettime 108 | ||
| 319 | __SYSCALL(__NR_timer_gettime, sys_timer_gettime) | ||
| 320 | #define __NR_timer_getoverrun 109 | ||
| 321 | __SYSCALL(__NR_timer_getoverrun, sys_timer_getoverrun) | ||
| 322 | #define __NR_timer_settime 110 | ||
| 323 | __SYSCALL(__NR_timer_settime, sys_timer_settime) | ||
| 324 | #define __NR_timer_delete 111 | ||
| 325 | __SYSCALL(__NR_timer_delete, sys_timer_delete) | ||
| 326 | #define __NR_clock_settime 112 | ||
| 327 | __SYSCALL(__NR_clock_settime, sys_clock_settime) | ||
| 328 | #define __NR_clock_gettime 113 | ||
| 329 | __SYSCALL(__NR_clock_gettime, sys_clock_gettime) | ||
| 330 | #define __NR_clock_getres 114 | ||
| 331 | __SYSCALL(__NR_clock_getres, sys_clock_getres) | ||
| 332 | #define __NR_clock_nanosleep 115 | ||
| 333 | __SYSCALL(__NR_clock_nanosleep, sys_clock_nanosleep) | ||
| 334 | |||
| 335 | /* kernel/printk.c */ | ||
| 336 | #define __NR_syslog 116 | ||
| 337 | __SYSCALL(__NR_syslog, sys_syslog) | ||
| 338 | |||
| 339 | /* kernel/ptrace.c */ | ||
| 340 | #define __NR_ptrace 117 | ||
| 341 | __SYSCALL(__NR_ptrace, sys_ptrace) | ||
| 342 | |||
| 343 | /* kernel/sched.c */ | ||
| 344 | #define __NR_sched_setparam 118 | ||
| 345 | __SYSCALL(__NR_sched_setparam, sys_sched_setparam) | ||
| 346 | #define __NR_sched_setscheduler 119 | ||
| 347 | __SYSCALL(__NR_sched_setscheduler, sys_sched_setscheduler) | ||
| 348 | #define __NR_sched_getscheduler 120 | ||
| 349 | __SYSCALL(__NR_sched_getscheduler, sys_sched_getscheduler) | ||
| 350 | #define __NR_sched_getparam 121 | ||
| 351 | __SYSCALL(__NR_sched_getparam, sys_sched_getparam) | ||
| 352 | #define __NR_sched_setaffinity 122 | ||
| 353 | __SYSCALL(__NR_sched_setaffinity, sys_sched_setaffinity) | ||
| 354 | #define __NR_sched_getaffinity 123 | ||
| 355 | __SYSCALL(__NR_sched_getaffinity, sys_sched_getaffinity) | ||
| 356 | #define __NR_sched_yield 124 | ||
| 357 | __SYSCALL(__NR_sched_yield, sys_sched_yield) | ||
| 358 | #define __NR_sched_get_priority_max 125 | ||
| 359 | __SYSCALL(__NR_sched_get_priority_max, sys_sched_get_priority_max) | ||
| 360 | #define __NR_sched_get_priority_min 126 | ||
| 361 | __SYSCALL(__NR_sched_get_priority_min, sys_sched_get_priority_min) | ||
| 362 | #define __NR_sched_rr_get_interval 127 | ||
| 363 | __SYSCALL(__NR_sched_rr_get_interval, sys_sched_rr_get_interval) | ||
| 364 | |||
| 365 | /* kernel/signal.c */ | ||
| 366 | #define __NR_restart_syscall 128 | ||
| 367 | __SYSCALL(__NR_restart_syscall, sys_restart_syscall) | ||
| 368 | #define __NR_kill 129 | ||
| 369 | __SYSCALL(__NR_kill, sys_kill) | ||
| 370 | #define __NR_tkill 130 | ||
| 371 | __SYSCALL(__NR_tkill, sys_tkill) | ||
| 372 | #define __NR_tgkill 131 | ||
| 373 | __SYSCALL(__NR_tgkill, sys_tgkill) | ||
| 374 | #define __NR_sigaltstack 132 | ||
| 375 | __SYSCALL(__NR_sigaltstack, sys_sigaltstack) | ||
| 376 | #define __NR_rt_sigsuspend 133 | ||
| 377 | __SYSCALL(__NR_rt_sigsuspend, sys_rt_sigsuspend) /* __ARCH_WANT_SYS_RT_SIGSUSPEND */ | ||
| 378 | #define __NR_rt_sigaction 134 | ||
| 379 | __SYSCALL(__NR_rt_sigaction, sys_rt_sigaction) /* __ARCH_WANT_SYS_RT_SIGACTION */ | ||
| 380 | #define __NR_rt_sigprocmask 135 | ||
| 381 | __SYSCALL(__NR_rt_sigprocmask, sys_rt_sigprocmask) | ||
| 382 | #define __NR_rt_sigpending 136 | ||
| 383 | __SYSCALL(__NR_rt_sigpending, sys_rt_sigpending) | ||
| 384 | #define __NR_rt_sigtimedwait 137 | ||
| 385 | __SYSCALL(__NR_rt_sigtimedwait, sys_rt_sigtimedwait) | ||
| 386 | #define __NR_rt_sigqueueinfo 138 | ||
| 387 | __SYSCALL(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo) | ||
| 388 | #define __NR_rt_sigreturn 139 | ||
| 389 | __SYSCALL(__NR_rt_sigreturn, sys_rt_sigreturn) /* sys_rt_sigreturn_wrapper, */ | ||
| 390 | |||
| 391 | /* kernel/sys.c */ | ||
| 392 | #define __NR_setpriority 140 | ||
| 393 | __SYSCALL(__NR_setpriority, sys_setpriority) | ||
| 394 | #define __NR_getpriority 141 | ||
| 395 | __SYSCALL(__NR_getpriority, sys_getpriority) | ||
| 396 | #define __NR_reboot 142 | ||
| 397 | __SYSCALL(__NR_reboot, sys_reboot) | ||
| 398 | #define __NR_setregid 143 | ||
| 399 | __SYSCALL(__NR_setregid, sys_setregid) | ||
| 400 | #define __NR_setgid 144 | ||
| 401 | __SYSCALL(__NR_setgid, sys_setgid) | ||
| 402 | #define __NR_setreuid 145 | ||
| 403 | __SYSCALL(__NR_setreuid, sys_setreuid) | ||
| 404 | #define __NR_setuid 146 | ||
| 405 | __SYSCALL(__NR_setuid, sys_setuid) | ||
| 406 | #define __NR_setresuid 147 | ||
| 407 | __SYSCALL(__NR_setresuid, sys_setresuid) | ||
| 408 | #define __NR_getresuid 148 | ||
| 409 | __SYSCALL(__NR_getresuid, sys_getresuid) | ||
| 410 | #define __NR_setresgid 149 | ||
| 411 | __SYSCALL(__NR_setresgid, sys_setresgid) | ||
| 412 | #define __NR_getresgid 150 | ||
| 413 | __SYSCALL(__NR_getresgid, sys_getresgid) | ||
| 414 | #define __NR_setfsuid 151 | ||
| 415 | __SYSCALL(__NR_setfsuid, sys_setfsuid) | ||
| 416 | #define __NR_setfsgid 152 | ||
| 417 | __SYSCALL(__NR_setfsgid, sys_setfsgid) | ||
| 418 | #define __NR_times 153 | ||
| 419 | __SYSCALL(__NR_times, sys_times) | ||
| 420 | #define __NR_setpgid 154 | ||
| 421 | __SYSCALL(__NR_setpgid, sys_setpgid) | ||
| 422 | #define __NR_getpgid 155 | ||
| 423 | __SYSCALL(__NR_getpgid, sys_getpgid) | ||
| 424 | #define __NR_getsid 156 | ||
| 425 | __SYSCALL(__NR_getsid, sys_getsid) | ||
| 426 | #define __NR_setsid 157 | ||
| 427 | __SYSCALL(__NR_setsid, sys_setsid) | ||
| 428 | #define __NR_getgroups 158 | ||
| 429 | __SYSCALL(__NR_getgroups, sys_getgroups) | ||
| 430 | #define __NR_setgroups 159 | ||
| 431 | __SYSCALL(__NR_setgroups, sys_setgroups) | ||
| 432 | #define __NR_uname 160 | ||
| 433 | __SYSCALL(__NR_uname, sys_newuname) | ||
| 434 | #define __NR_sethostname 161 | ||
| 435 | __SYSCALL(__NR_sethostname, sys_sethostname) | ||
| 436 | #define __NR_setdomainname 162 | ||
| 437 | __SYSCALL(__NR_setdomainname, sys_setdomainname) | ||
| 438 | #define __NR_getrlimit 163 | ||
| 439 | __SYSCALL(__NR_getrlimit, sys_getrlimit) | ||
| 440 | #define __NR_setrlimit 164 | ||
| 441 | __SYSCALL(__NR_setrlimit, sys_setrlimit) | ||
| 442 | #define __NR_getrusage 165 | ||
| 443 | __SYSCALL(__NR_getrusage, sys_getrusage) | ||
| 444 | #define __NR_umask 166 | ||
| 445 | __SYSCALL(__NR_umask, sys_umask) | ||
| 446 | #define __NR_prctl 167 | ||
| 447 | __SYSCALL(__NR_prctl, sys_prctl) | ||
| 448 | #define __NR_getcpu 168 | ||
| 449 | __SYSCALL(__NR_getcpu, sys_getcpu) | ||
| 450 | |||
| 451 | /* kernel/time.c */ | ||
| 452 | #define __NR_gettimeofday 169 | ||
| 453 | __SYSCALL(__NR_gettimeofday, sys_gettimeofday) | ||
| 454 | #define __NR_settimeofday 170 | ||
| 455 | __SYSCALL(__NR_settimeofday, sys_settimeofday) | ||
| 456 | #define __NR_adjtimex 171 | ||
| 457 | __SYSCALL(__NR_adjtimex, sys_adjtimex) | ||
| 458 | |||
| 459 | /* kernel/timer.c */ | ||
| 460 | #define __NR_getpid 172 | ||
| 461 | __SYSCALL(__NR_getpid, sys_getpid) | ||
| 462 | #define __NR_getppid 173 | ||
| 463 | __SYSCALL(__NR_getppid, sys_getppid) | ||
| 464 | #define __NR_getuid 174 | ||
| 465 | __SYSCALL(__NR_getuid, sys_getuid) | ||
| 466 | #define __NR_geteuid 175 | ||
| 467 | __SYSCALL(__NR_geteuid, sys_geteuid) | ||
| 468 | #define __NR_getgid 176 | ||
| 469 | __SYSCALL(__NR_getgid, sys_getgid) | ||
| 470 | #define __NR_getegid 177 | ||
| 471 | __SYSCALL(__NR_getegid, sys_getegid) | ||
| 472 | #define __NR_gettid 178 | ||
| 473 | __SYSCALL(__NR_gettid, sys_gettid) | ||
| 474 | #define __NR_sysinfo 179 | ||
| 475 | __SYSCALL(__NR_sysinfo, sys_sysinfo) | ||
| 476 | |||
| 477 | /* ipc/mqueue.c */ | ||
| 478 | #define __NR_mq_open 180 | ||
| 479 | __SYSCALL(__NR_mq_open, sys_mq_open) | ||
| 480 | #define __NR_mq_unlink 181 | ||
| 481 | __SYSCALL(__NR_mq_unlink, sys_mq_unlink) | ||
| 482 | #define __NR_mq_timedsend 182 | ||
| 483 | __SYSCALL(__NR_mq_timedsend, sys_mq_timedsend) | ||
| 484 | #define __NR_mq_timedreceive 183 | ||
| 485 | __SYSCALL(__NR_mq_timedreceive, sys_mq_timedreceive) | ||
| 486 | #define __NR_mq_notify 184 | ||
| 487 | __SYSCALL(__NR_mq_notify, sys_mq_notify) | ||
| 488 | #define __NR_mq_getsetattr 185 | ||
| 489 | __SYSCALL(__NR_mq_getsetattr, sys_mq_getsetattr) | ||
| 490 | |||
| 491 | /* ipc/msg.c */ | ||
| 492 | #define __NR_msgget 186 | ||
| 493 | __SYSCALL(__NR_msgget, sys_msgget) | ||
| 494 | #define __NR_msgctl 187 | ||
| 495 | __SYSCALL(__NR_msgctl, sys_msgctl) | ||
| 496 | #define __NR_msgrcv 188 | ||
| 497 | __SYSCALL(__NR_msgrcv, sys_msgrcv) | ||
| 498 | #define __NR_msgsnd 189 | ||
| 499 | __SYSCALL(__NR_msgsnd, sys_msgsnd) | ||
| 500 | |||
| 501 | /* ipc/sem.c */ | ||
| 502 | #define __NR_semget 190 | ||
| 503 | __SYSCALL(__NR_semget, sys_semget) | ||
| 504 | #define __NR_semctl 191 | ||
| 505 | __SYSCALL(__NR_semctl, sys_semctl) | ||
| 506 | #define __NR_semtimedop 192 | ||
| 507 | __SYSCALL(__NR_semtimedop, sys_semtimedop) | ||
| 508 | #define __NR_semop 193 | ||
| 509 | __SYSCALL(__NR_semop, sys_semop) | ||
| 510 | |||
| 511 | /* ipc/shm.c */ | ||
| 512 | #define __NR_shmget 194 | ||
| 513 | __SYSCALL(__NR_shmget, sys_shmget) | ||
| 514 | #define __NR_shmctl 195 | ||
| 515 | __SYSCALL(__NR_shmctl, sys_shmctl) | ||
| 516 | #define __NR_shmat 196 | ||
| 517 | __SYSCALL(__NR_shmat, sys_shmat) | ||
| 518 | #define __NR_shmdt 197 | ||
| 519 | __SYSCALL(__NR_shmdt, sys_shmdt) | ||
| 520 | |||
| 521 | /* net/socket.c */ | ||
| 522 | #define __NR_socket 198 | ||
| 523 | __SYSCALL(__NR_socket, sys_socket) | ||
| 524 | #define __NR_socketpair 199 | ||
| 525 | __SYSCALL(__NR_socketpair, sys_socketpair) | ||
| 526 | #define __NR_bind 200 | ||
| 527 | __SYSCALL(__NR_bind, sys_bind) | ||
| 528 | #define __NR_listen 201 | ||
| 529 | __SYSCALL(__NR_listen, sys_listen) | ||
| 530 | #define __NR_accept 202 | ||
| 531 | __SYSCALL(__NR_accept, sys_accept) | ||
| 532 | #define __NR_connect 203 | ||
| 533 | __SYSCALL(__NR_connect, sys_connect) | ||
| 534 | #define __NR_getsockname 204 | ||
| 535 | __SYSCALL(__NR_getsockname, sys_getsockname) | ||
| 536 | #define __NR_getpeername 205 | ||
| 537 | __SYSCALL(__NR_getpeername, sys_getpeername) | ||
| 538 | #define __NR_sendto 206 | ||
| 539 | __SYSCALL(__NR_sendto, sys_sendto) | ||
| 540 | #define __NR_recvfrom 207 | ||
| 541 | __SYSCALL(__NR_recvfrom, sys_recvfrom) | ||
| 542 | #define __NR_setsockopt 208 | ||
| 543 | __SYSCALL(__NR_setsockopt, sys_setsockopt) | ||
| 544 | #define __NR_getsockopt 209 | ||
| 545 | __SYSCALL(__NR_getsockopt, sys_getsockopt) | ||
| 546 | #define __NR_shutdown 210 | ||
| 547 | __SYSCALL(__NR_shutdown, sys_shutdown) | ||
| 548 | #define __NR_sendmsg 211 | ||
| 549 | __SYSCALL(__NR_sendmsg, sys_sendmsg) | ||
| 550 | #define __NR_recvmsg 212 | ||
| 551 | __SYSCALL(__NR_recvmsg, sys_recvmsg) | ||
| 552 | |||
| 553 | /* mm/filemap.c */ | ||
| 554 | #define __NR_readahead 213 | ||
| 555 | __SYSCALL(__NR_readahead, sys_readahead) | ||
| 556 | |||
| 557 | /* mm/nommu.c, also with MMU */ | ||
| 558 | #define __NR_brk 214 | ||
| 559 | __SYSCALL(__NR_brk, sys_brk) | ||
| 560 | #define __NR_munmap 215 | ||
| 561 | __SYSCALL(__NR_munmap, sys_munmap) | ||
| 562 | #define __NR_mremap 216 | ||
| 563 | __SYSCALL(__NR_mremap, sys_mremap) | ||
| 564 | |||
| 565 | /* security/keys/keyctl.c */ | ||
| 566 | #define __NR_add_key 217 | ||
| 567 | __SYSCALL(__NR_add_key, sys_add_key) | ||
| 568 | #define __NR_request_key 218 | ||
| 569 | __SYSCALL(__NR_request_key, sys_request_key) | ||
| 570 | #define __NR_keyctl 219 | ||
| 571 | __SYSCALL(__NR_keyctl, sys_keyctl) | ||
| 572 | |||
| 573 | /* arch/example/kernel/sys_example.c */ | ||
| 574 | #define __NR_clone 220 | ||
| 575 | __SYSCALL(__NR_clone, sys_clone) /* .long sys_clone_wrapper */ | ||
| 576 | #define __NR_execve 221 | ||
| 577 | __SYSCALL(__NR_execve, sys_execve) /* .long sys_execve_wrapper */ | ||
| 578 | |||
| 579 | #define __NR3264_mmap 222 | ||
| 580 | __SC_3264(__NR3264_mmap, sys_mmap2, sys_mmap) | ||
| 581 | /* mm/fadvise.c */ | ||
| 582 | #define __NR3264_fadvise64 223 | ||
| 583 | __SC_3264(__NR3264_fadvise64, sys_fadvise64_64, sys_fadvise64) | ||
| 584 | |||
| 585 | /* mm/, CONFIG_MMU only */ | ||
| 586 | #ifndef __ARCH_NOMMU | ||
| 587 | #define __NR_swapon 224 | ||
| 588 | __SYSCALL(__NR_swapon, sys_swapon) | ||
| 589 | #define __NR_swapoff 225 | ||
| 590 | __SYSCALL(__NR_swapoff, sys_swapoff) | ||
| 591 | #define __NR_mprotect 226 | ||
| 592 | __SYSCALL(__NR_mprotect, sys_mprotect) | ||
| 593 | #define __NR_msync 227 | ||
| 594 | __SYSCALL(__NR_msync, sys_msync) | ||
| 595 | #define __NR_mlock 228 | ||
| 596 | __SYSCALL(__NR_mlock, sys_mlock) | ||
| 597 | #define __NR_munlock 229 | ||
| 598 | __SYSCALL(__NR_munlock, sys_munlock) | ||
| 599 | #define __NR_mlockall 230 | ||
| 600 | __SYSCALL(__NR_mlockall, sys_mlockall) | ||
| 601 | #define __NR_munlockall 231 | ||
| 602 | __SYSCALL(__NR_munlockall, sys_munlockall) | ||
| 603 | #define __NR_mincore 232 | ||
| 604 | __SYSCALL(__NR_mincore, sys_mincore) | ||
| 605 | #define __NR_madvise 233 | ||
| 606 | __SYSCALL(__NR_madvise, sys_madvise) | ||
| 607 | #define __NR_remap_file_pages 234 | ||
| 608 | __SYSCALL(__NR_remap_file_pages, sys_remap_file_pages) | ||
| 609 | #define __NR_mbind 235 | ||
| 610 | __SYSCALL(__NR_mbind, sys_mbind) | ||
| 611 | #define __NR_get_mempolicy 236 | ||
| 612 | __SYSCALL(__NR_get_mempolicy, sys_get_mempolicy) | ||
| 613 | #define __NR_set_mempolicy 237 | ||
| 614 | __SYSCALL(__NR_set_mempolicy, sys_set_mempolicy) | ||
| 615 | #define __NR_migrate_pages 238 | ||
| 616 | __SYSCALL(__NR_migrate_pages, sys_migrate_pages) | ||
| 617 | #define __NR_move_pages 239 | ||
| 618 | __SYSCALL(__NR_move_pages, sys_move_pages) | ||
| 619 | #endif | ||
| 620 | |||
| 621 | #undef __NR_syscalls | ||
| 622 | #define __NR_syscalls 240 | ||
| 623 | |||
| 624 | /* | ||
| 625 | * All syscalls below here should go away really, | ||
| 626 | * these are provided for both review and as a porting | ||
| 627 | * help for the C library version. | ||
| 628 | * | ||
| 629 | * Last chance: are any of these important enought to | ||
| 630 | * enable by default? | ||
| 631 | */ | ||
| 632 | #ifdef __ARCH_WANT_SYSCALL_NO_AT | ||
| 633 | #define __NR_open 1024 | ||
| 634 | __SYSCALL(__NR_open, sys_open) | ||
| 635 | #define __NR_link 1025 | ||
| 636 | __SYSCALL(__NR_link, sys_link) | ||
| 637 | #define __NR_unlink 1026 | ||
| 638 | __SYSCALL(__NR_unlink, sys_unlink) | ||
| 639 | #define __NR_mknod 1027 | ||
| 640 | __SYSCALL(__NR_mknod, sys_mknod) | ||
| 641 | #define __NR_chmod 1028 | ||
| 642 | __SYSCALL(__NR_chmod, sys_chmod) | ||
| 643 | #define __NR_chown 1029 | ||
| 644 | __SYSCALL(__NR_chown, sys_chown) | ||
| 645 | #define __NR_mkdir 1030 | ||
| 646 | __SYSCALL(__NR_mkdir, sys_mkdir) | ||
| 647 | #define __NR_rmdir 1031 | ||
| 648 | __SYSCALL(__NR_rmdir, sys_rmdir) | ||
| 649 | #define __NR_lchown 1032 | ||
| 650 | __SYSCALL(__NR_lchown, sys_lchown) | ||
| 651 | #define __NR_access 1033 | ||
| 652 | __SYSCALL(__NR_access, sys_access) | ||
| 653 | #define __NR_rename 1034 | ||
| 654 | __SYSCALL(__NR_rename, sys_rename) | ||
| 655 | #define __NR_readlink 1035 | ||
| 656 | __SYSCALL(__NR_readlink, sys_readlink) | ||
| 657 | #define __NR_symlink 1036 | ||
| 658 | __SYSCALL(__NR_symlink, sys_symlink) | ||
| 659 | #define __NR_utimes 1037 | ||
| 660 | __SYSCALL(__NR_utimes, sys_utimes) | ||
| 661 | #define __NR3264_stat 1038 | ||
| 662 | __SC_3264(__NR3264_stat, sys_stat64, sys_newstat) | ||
| 663 | #define __NR3264_lstat 1039 | ||
| 664 | __SC_3264(__NR3264_lstat, sys_lstat64, sys_newlstat) | ||
| 665 | |||
| 666 | #undef __NR_syscalls | ||
| 667 | #define __NR_syscalls (__NR3264_lstat+1) | ||
| 668 | #endif /* __ARCH_WANT_SYSCALL_NO_AT */ | ||
| 669 | |||
| 670 | #ifdef __ARCH_WANT_SYSCALL_NO_FLAGS | ||
| 671 | #define __NR_pipe 1040 | ||
| 672 | __SYSCALL(__NR_pipe, sys_pipe) | ||
| 673 | #define __NR_dup2 1041 | ||
| 674 | __SYSCALL(__NR_dup2, sys_dup2) | ||
| 675 | #define __NR_epoll_create 1042 | ||
| 676 | __SYSCALL(__NR_epoll_create, sys_epoll_create) | ||
| 677 | #define __NR_inotify_init 1043 | ||
| 678 | __SYSCALL(__NR_inotify_init, sys_inotify_init) | ||
| 679 | #define __NR_eventfd 1044 | ||
| 680 | __SYSCALL(__NR_eventfd, sys_eventfd) | ||
| 681 | #define __NR_signalfd 1045 | ||
| 682 | __SYSCALL(__NR_signalfd, sys_signalfd) | ||
| 683 | |||
| 684 | #undef __NR_syscalls | ||
| 685 | #define __NR_syscalls (__NR_signalfd+1) | ||
| 686 | #endif /* __ARCH_WANT_SYSCALL_NO_FLAGS */ | ||
| 687 | |||
| 688 | #if __BITS_PER_LONG == 32 && defined(__ARCH_WANT_SYSCALL_OFF_T) | ||
| 689 | #define __NR_sendfile 1046 | ||
| 690 | __SYSCALL(__NR_sendfile, sys_sendfile) | ||
| 691 | #define __NR_ftruncate 1047 | ||
| 692 | __SYSCALL(__NR_ftruncate, sys_ftruncate) | ||
| 693 | #define __NR_truncate 1048 | ||
| 694 | __SYSCALL(__NR_truncate, sys_truncate) | ||
| 695 | #define __NR_stat 1049 | ||
| 696 | __SYSCALL(__NR_stat, sys_newstat) | ||
| 697 | #define __NR_lstat 1050 | ||
| 698 | __SYSCALL(__NR_lstat, sys_newlstat) | ||
| 699 | #define __NR_fstat 1051 | ||
| 700 | __SYSCALL(__NR_fstat, sys_newfstat) | ||
| 701 | #define __NR_fcntl 1052 | ||
| 702 | __SYSCALL(__NR_fcntl, sys_fcntl) | ||
| 703 | #define __NR_fadvise64 1053 | ||
| 704 | #define __ARCH_WANT_SYS_FADVISE64 | ||
| 705 | __SYSCALL(__NR_fadvise64, sys_fadvise64) | ||
| 706 | #define __NR_newfstatat 1054 | ||
| 707 | #define __ARCH_WANT_SYS_NEWFSTATAT | ||
| 708 | __SYSCALL(__NR_newfstatat, sys_newfstatat) | ||
| 709 | #define __NR_fstatfs 1055 | ||
| 710 | __SYSCALL(__NR_fstatfs, sys_fstatfs) | ||
| 711 | #define __NR_statfs 1056 | ||
| 712 | __SYSCALL(__NR_statfs, sys_statfs) | ||
| 713 | #define __NR_lseek 1057 | ||
| 714 | __SYSCALL(__NR_lseek, sys_lseek) | ||
| 715 | #define __NR_mmap 1058 | ||
| 716 | __SYSCALL(__NR_mmap, sys_mmap) | ||
| 717 | |||
| 718 | #undef __NR_syscalls | ||
| 719 | #define __NR_syscalls (__NR_mmap+1) | ||
| 720 | #endif /* 32 bit off_t syscalls */ | ||
| 721 | |||
| 722 | #ifdef __ARCH_WANT_SYSCALL_DEPRECATED | ||
| 723 | #define __NR_alarm 1059 | ||
| 724 | #define __ARCH_WANT_SYS_ALARM | ||
| 725 | __SYSCALL(__NR_alarm, sys_alarm) | ||
| 726 | #define __NR_getpgrp 1060 | ||
| 727 | #define __ARCH_WANT_SYS_GETPGRP | ||
| 728 | __SYSCALL(__NR_getpgrp, sys_getpgrp) | ||
| 729 | #define __NR_pause 1061 | ||
| 730 | #define __ARCH_WANT_SYS_PAUSE | ||
| 731 | __SYSCALL(__NR_pause, sys_pause) | ||
| 732 | #define __NR_time 1062 | ||
| 733 | #define __ARCH_WANT_SYS_TIME | ||
| 734 | __SYSCALL(__NR_time, sys_time) | ||
| 735 | #define __NR_utime 1063 | ||
| 736 | #define __ARCH_WANT_SYS_UTIME | ||
| 737 | __SYSCALL(__NR_utime, sys_utime) | ||
| 738 | |||
| 739 | #define __NR_creat 1064 | ||
| 740 | __SYSCALL(__NR_creat, sys_creat) | ||
| 741 | #define __NR_getdents 1065 | ||
| 742 | #define __ARCH_WANT_SYS_GETDENTS | ||
| 743 | __SYSCALL(__NR_getdents, sys_getdents) | ||
| 744 | #define __NR_futimesat 1066 | ||
| 745 | __SYSCALL(__NR_futimesat, sys_futimesat) | ||
| 746 | #define __NR_select 1067 | ||
| 747 | #define __ARCH_WANT_SYS_SELECT | ||
| 748 | __SYSCALL(__NR_select, sys_select) | ||
| 749 | #define __NR_poll 1068 | ||
| 750 | __SYSCALL(__NR_poll, sys_poll) | ||
| 751 | #define __NR_epoll_wait 1069 | ||
| 752 | __SYSCALL(__NR_epoll_wait, sys_epoll_wait) | ||
| 753 | #define __NR_ustat 1070 | ||
| 754 | __SYSCALL(__NR_ustat, sys_ustat) | ||
| 755 | #define __NR_vfork 1071 | ||
| 756 | __SYSCALL(__NR_vfork, sys_vfork) | ||
| 757 | #define __NR_wait4 1072 | ||
| 758 | __SYSCALL(__NR_wait4, sys_wait4) | ||
| 759 | #define __NR_recv 1073 | ||
| 760 | __SYSCALL(__NR_recv, sys_recv) | ||
| 761 | #define __NR_send 1074 | ||
| 762 | __SYSCALL(__NR_send, sys_send) | ||
| 763 | #define __NR_bdflush 1075 | ||
| 764 | __SYSCALL(__NR_bdflush, sys_bdflush) | ||
| 765 | #define __NR_umount 1076 | ||
| 766 | __SYSCALL(__NR_umount, sys_oldumount) | ||
| 767 | #define __ARCH_WANT_SYS_OLDUMOUNT | ||
| 768 | #define __NR_uselib 1077 | ||
| 769 | __SYSCALL(__NR_uselib, sys_uselib) | ||
| 770 | #define __NR__sysctl 1078 | ||
| 771 | __SYSCALL(__NR__sysctl, sys_sysctl) | ||
| 772 | |||
| 773 | #define __NR_fork 1079 | ||
| 774 | #ifdef CONFIG_MMU | ||
| 775 | __SYSCALL(__NR_fork, sys_fork) | ||
| 776 | #else | ||
| 777 | __SYSCALL(__NR_fork, sys_ni_syscall) | ||
| 778 | #endif /* CONFIG_MMU */ | ||
| 779 | |||
| 780 | #undef __NR_syscalls | ||
| 781 | #define __NR_syscalls (__NR_fork+1) | ||
| 782 | |||
| 783 | #endif /* __ARCH_WANT_SYSCALL_DEPRECATED */ | ||
| 784 | |||
| 785 | /* | ||
| 786 | * 32 bit systems traditionally used different | ||
| 787 | * syscalls for off_t and loff_t arguments, while | ||
| 788 | * 64 bit systems only need the off_t version. | ||
| 789 | * For new 32 bit platforms, there is no need to | ||
| 790 | * implement the old 32 bit off_t syscalls, so | ||
| 791 | * they take different names. | ||
| 792 | * Here we map the numbers so that both versions | ||
| 793 | * use the same syscall table layout. | ||
| 794 | */ | ||
| 795 | #if __BITS_PER_LONG == 64 | ||
| 796 | #define __NR_fcntl __NR3264_fcntl | ||
| 797 | #define __NR_statfs __NR3264_statfs | ||
| 798 | #define __NR_fstatfs __NR3264_fstatfs | ||
| 799 | #define __NR_truncate __NR3264_truncate | ||
| 800 | #define __NR_ftruncate __NR3264_truncate | ||
| 801 | #define __NR_lseek __NR3264_lseek | ||
| 802 | #define __NR_sendfile __NR3264_sendfile | ||
| 803 | #define __NR_newfstatat __NR3264_fstatat | ||
| 804 | #define __NR_fstat __NR3264_fstat | ||
| 805 | #define __NR_mmap __NR3264_mmap | ||
| 806 | #define __NR_fadvise64 __NR3264_fadvise64 | ||
| 807 | #ifdef __NR3264_stat | ||
| 808 | #define __NR_stat __NR3264_stat | ||
| 809 | #define __NR_lstat __NR3264_lstat | ||
| 810 | #endif | ||
| 811 | #else | ||
| 812 | #define __NR_fcntl64 __NR3264_fcntl | ||
| 813 | #define __NR_statfs64 __NR3264_statfs | ||
| 814 | #define __NR_fstatfs64 __NR3264_fstatfs | ||
| 815 | #define __NR_truncate64 __NR3264_truncate | ||
| 816 | #define __NR_ftruncate64 __NR3264_truncate | ||
| 817 | #define __NR_llseek __NR3264_lseek | ||
| 818 | #define __NR_sendfile64 __NR3264_sendfile | ||
| 819 | #define __NR_fstatat64 __NR3264_fstatat | ||
| 820 | #define __NR_fstat64 __NR3264_fstat | ||
| 821 | #define __NR_mmap2 __NR3264_mmap | ||
| 822 | #define __NR_fadvise64_64 __NR3264_fadvise64 | ||
| 823 | #ifdef __NR3264_stat | ||
| 824 | #define __NR_stat64 __NR3264_stat | ||
| 825 | #define __NR_lstat64 __NR3264_lstat | ||
| 826 | #endif | ||
| 827 | #endif | ||
| 828 | |||
| 829 | #ifdef __KERNEL__ | ||
| 830 | |||
| 831 | /* | ||
| 832 | * These are required system calls, we should | ||
| 833 | * invert the logic eventually and let them | ||
| 834 | * be selected by default. | ||
| 835 | */ | ||
| 836 | #if __BITS_PER_LONG == 32 | ||
| 837 | #define __ARCH_WANT_STAT64 | ||
| 838 | #define __ARCH_WANT_SYS_LLSEEK | ||
| 839 | #endif | ||
| 840 | #define __ARCH_WANT_SYS_RT_SIGACTION | ||
| 841 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | ||
| 842 | |||
| 843 | /* | ||
| 844 | * "Conditional" syscalls | ||
| 845 | * | ||
| 846 | * What we want is __attribute__((weak,alias("sys_ni_syscall"))), | ||
| 847 | * but it doesn't work on all toolchains, so we just do it by hand | ||
| 848 | */ | ||
| 849 | #ifndef cond_syscall | ||
| 850 | #define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall") | ||
| 851 | #endif | ||
| 852 | |||
| 853 | #endif /* __KERNEL__ */ | ||
| 854 | #endif /* _ASM_GENERIC_UNISTD_H */ | ||
diff --git a/include/asm-generic/user.h b/include/asm-generic/user.h new file mode 100644 index 000000000000..8b9c3c960aeb --- /dev/null +++ b/include/asm-generic/user.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #ifndef __ASM_GENERIC_USER_H | ||
| 2 | #define __ASM_GENERIC_USER_H | ||
| 3 | /* | ||
| 4 | * This file may define a 'struct user' structure. However, it it only | ||
| 5 | * used for a.out file, which are not supported on new architectures. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #endif /* __ASM_GENERIC_USER_H */ | ||
diff --git a/include/asm-generic/vga.h b/include/asm-generic/vga.h new file mode 100644 index 000000000000..36c8ff52016b --- /dev/null +++ b/include/asm-generic/vga.h | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | /* | ||
| 2 | * Access to VGA videoram | ||
| 3 | * | ||
| 4 | * (c) 1998 Martin Mares <mj@ucw.cz> | ||
| 5 | */ | ||
| 6 | #ifndef __ASM_GENERIC_VGA_H | ||
| 7 | #define __ASM_GENERIC_VGA_H | ||
| 8 | |||
| 9 | /* | ||
| 10 | * On most architectures that support VGA, we can just | ||
| 11 | * recalculate addresses and then access the videoram | ||
| 12 | * directly without any black magic. | ||
| 13 | * | ||
| 14 | * Everyone else needs to ioremap the address and use | ||
| 15 | * proper I/O accesses. | ||
| 16 | */ | ||
| 17 | #ifndef VGA_MAP_MEM | ||
| 18 | #define VGA_MAP_MEM(x, s) (unsigned long)phys_to_virt(x) | ||
| 19 | #endif | ||
| 20 | |||
| 21 | #define vga_readb(x) (*(x)) | ||
| 22 | #define vga_writeb(x, y) (*(y) = (x)) | ||
| 23 | |||
| 24 | #endif /* _ASM_GENERIC_VGA_H */ | ||
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index f1736ca7922c..6bdba10fef4a 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
| @@ -1,4 +1,57 @@ | |||
| 1 | #include <linux/section-names.h> | 1 | /* |
| 2 | * Helper macros to support writing architecture specific | ||
| 3 | * linker scripts. | ||
| 4 | * | ||
| 5 | * A minimal linker scripts has following content: | ||
| 6 | * [This is a sample, architectures may have special requiriements] | ||
| 7 | * | ||
| 8 | * OUTPUT_FORMAT(...) | ||
| 9 | * OUTPUT_ARCH(...) | ||
| 10 | * ENTRY(...) | ||
| 11 | * SECTIONS | ||
| 12 | * { | ||
| 13 | * . = START; | ||
| 14 | * __init_begin = .; | ||
| 15 | * HEAD_TEXT_SECTION | ||
| 16 | * INIT_TEXT_SECTION(PAGE_SIZE) | ||
| 17 | * INIT_DATA_SECTION(...) | ||
| 18 | * PERCPU(PAGE_SIZE) | ||
| 19 | * __init_end = .; | ||
| 20 | * | ||
| 21 | * _stext = .; | ||
| 22 | * TEXT_SECTION = 0 | ||
| 23 | * _etext = .; | ||
| 24 | * | ||
| 25 | * _sdata = .; | ||
| 26 | * RO_DATA_SECTION(PAGE_SIZE) | ||
| 27 | * RW_DATA_SECTION(...) | ||
| 28 | * _edata = .; | ||
| 29 | * | ||
| 30 | * EXCEPTION_TABLE(...) | ||
| 31 | * NOTES | ||
| 32 | * | ||
| 33 | * __bss_start = .; | ||
| 34 | * BSS_SECTION(0, 0) | ||
| 35 | * __bss_stop = .; | ||
| 36 | * _end = .; | ||
| 37 | * | ||
| 38 | * /DISCARD/ : { | ||
| 39 | * EXIT_TEXT | ||
| 40 | * EXIT_DATA | ||
| 41 | * EXIT_CALL | ||
| 42 | * } | ||
| 43 | * STABS_DEBUG | ||
| 44 | * DWARF_DEBUG | ||
| 45 | * } | ||
| 46 | * | ||
| 47 | * [__init_begin, __init_end] is the init section that may be freed after init | ||
| 48 | * [_stext, _etext] is the text section | ||
| 49 | * [_sdata, _edata] is the data section | ||
| 50 | * | ||
| 51 | * Some of the included output section have their own set of constants. | ||
| 52 | * Examples are: [__initramfs_start, __initramfs_end] for initramfs and | ||
| 53 | * [__nosave_begin, __nosave_end] for the nosave data | ||
| 54 | */ | ||
| 2 | 55 | ||
| 3 | #ifndef LOAD_OFFSET | 56 | #ifndef LOAD_OFFSET |
| 4 | #define LOAD_OFFSET 0 | 57 | #define LOAD_OFFSET 0 |
| @@ -116,7 +169,36 @@ | |||
| 116 | FTRACE_EVENTS() \ | 169 | FTRACE_EVENTS() \ |
| 117 | TRACE_SYSCALLS() | 170 | TRACE_SYSCALLS() |
| 118 | 171 | ||
| 119 | #define RO_DATA(align) \ | 172 | /* |
| 173 | * Data section helpers | ||
| 174 | */ | ||
| 175 | #define NOSAVE_DATA \ | ||
| 176 | . = ALIGN(PAGE_SIZE); \ | ||
| 177 | VMLINUX_SYMBOL(__nosave_begin) = .; \ | ||
| 178 | *(.data.nosave) \ | ||
| 179 | . = ALIGN(PAGE_SIZE); \ | ||
| 180 | VMLINUX_SYMBOL(__nosave_end) = .; | ||
| 181 | |||
| 182 | #define PAGE_ALIGNED_DATA(page_align) \ | ||
| 183 | . = ALIGN(page_align); \ | ||
| 184 | *(.data.page_aligned) | ||
| 185 | |||
| 186 | #define READ_MOSTLY_DATA(align) \ | ||
| 187 | . = ALIGN(align); \ | ||
| 188 | *(.data.read_mostly) | ||
| 189 | |||
| 190 | #define CACHELINE_ALIGNED_DATA(align) \ | ||
| 191 | . = ALIGN(align); \ | ||
| 192 | *(.data.cacheline_aligned) | ||
| 193 | |||
| 194 | #define INIT_TASK(align) \ | ||
| 195 | . = ALIGN(align); \ | ||
| 196 | *(.data.init_task) | ||
| 197 | |||
| 198 | /* | ||
| 199 | * Read only Data | ||
| 200 | */ | ||
| 201 | #define RO_DATA_SECTION(align) \ | ||
| 120 | . = ALIGN((align)); \ | 202 | . = ALIGN((align)); \ |
| 121 | .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ | 203 | .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ |
| 122 | VMLINUX_SYMBOL(__start_rodata) = .; \ | 204 | VMLINUX_SYMBOL(__start_rodata) = .; \ |
| @@ -270,9 +352,10 @@ | |||
| 270 | } \ | 352 | } \ |
| 271 | . = ALIGN((align)); | 353 | . = ALIGN((align)); |
| 272 | 354 | ||
| 273 | /* RODATA provided for backward compatibility. | 355 | /* RODATA & RO_DATA provided for backward compatibility. |
| 274 | * All archs are supposed to use RO_DATA() */ | 356 | * All archs are supposed to use RO_DATA() */ |
| 275 | #define RODATA RO_DATA(4096) | 357 | #define RODATA RO_DATA_SECTION(4096) |
| 358 | #define RO_DATA(align) RO_DATA_SECTION(align) | ||
| 276 | 359 | ||
| 277 | #define SECURITY_INIT \ | 360 | #define SECURITY_INIT \ |
| 278 | .security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET) { \ | 361 | .security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET) { \ |
| @@ -330,16 +413,42 @@ | |||
| 330 | #endif | 413 | #endif |
| 331 | 414 | ||
| 332 | /* Section used for early init (in .S files) */ | 415 | /* Section used for early init (in .S files) */ |
| 333 | #define HEAD_TEXT *(HEAD_TEXT_SECTION) | 416 | #define HEAD_TEXT *(.head.text) |
| 417 | |||
| 418 | #define HEAD_TEXT_SECTION \ | ||
| 419 | .head.text : AT(ADDR(.head.text) - LOAD_OFFSET) { \ | ||
| 420 | HEAD_TEXT \ | ||
| 421 | } | ||
| 422 | |||
| 423 | /* | ||
| 424 | * Exception table | ||
| 425 | */ | ||
| 426 | #define EXCEPTION_TABLE(align) \ | ||
| 427 | . = ALIGN(align); \ | ||
| 428 | __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { \ | ||
| 429 | VMLINUX_SYMBOL(__start___ex_table) = .; \ | ||
| 430 | *(__ex_table) \ | ||
| 431 | VMLINUX_SYMBOL(__stop___ex_table) = .; \ | ||
| 432 | } | ||
| 433 | |||
| 434 | /* | ||
| 435 | * Init task | ||
| 436 | */ | ||
| 437 | #define INIT_TASK_DATA(align) \ | ||
| 438 | . = ALIGN(align); \ | ||
| 439 | .data.init_task : { \ | ||
| 440 | INIT_TASK \ | ||
| 441 | } | ||
| 334 | 442 | ||
| 335 | /* init and exit section handling */ | 443 | /* init and exit section handling */ |
| 336 | #define INIT_DATA \ | 444 | #define INIT_DATA \ |
| 337 | *(.init.data) \ | 445 | *(.init.data) \ |
| 338 | DEV_DISCARD(init.data) \ | 446 | DEV_DISCARD(init.data) \ |
| 339 | DEV_DISCARD(init.rodata) \ | ||
| 340 | CPU_DISCARD(init.data) \ | 447 | CPU_DISCARD(init.data) \ |
| 341 | CPU_DISCARD(init.rodata) \ | ||
| 342 | MEM_DISCARD(init.data) \ | 448 | MEM_DISCARD(init.data) \ |
| 449 | *(.init.rodata) \ | ||
| 450 | DEV_DISCARD(init.rodata) \ | ||
| 451 | CPU_DISCARD(init.rodata) \ | ||
| 343 | MEM_DISCARD(init.rodata) | 452 | MEM_DISCARD(init.rodata) |
| 344 | 453 | ||
| 345 | #define INIT_TEXT \ | 454 | #define INIT_TEXT \ |
| @@ -363,9 +472,35 @@ | |||
| 363 | CPU_DISCARD(exit.text) \ | 472 | CPU_DISCARD(exit.text) \ |
| 364 | MEM_DISCARD(exit.text) | 473 | MEM_DISCARD(exit.text) |
| 365 | 474 | ||
| 366 | /* DWARF debug sections. | 475 | #define EXIT_CALL \ |
| 367 | Symbols in the DWARF debugging sections are relative to | 476 | *(.exitcall.exit) |
| 368 | the beginning of the section so we begin them at 0. */ | 477 | |
| 478 | /* | ||
| 479 | * bss (Block Started by Symbol) - uninitialized data | ||
| 480 | * zeroed during startup | ||
| 481 | */ | ||
| 482 | #define SBSS \ | ||
| 483 | .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { \ | ||
| 484 | *(.sbss) \ | ||
| 485 | *(.scommon) \ | ||
| 486 | } | ||
| 487 | |||
| 488 | #define BSS(bss_align) \ | ||
| 489 | . = ALIGN(bss_align); \ | ||
| 490 | .bss : AT(ADDR(.bss) - LOAD_OFFSET) { \ | ||
| 491 | VMLINUX_SYMBOL(__bss_start) = .; \ | ||
| 492 | *(.bss.page_aligned) \ | ||
| 493 | *(.dynbss) \ | ||
| 494 | *(.bss) \ | ||
| 495 | *(COMMON) \ | ||
| 496 | VMLINUX_SYMBOL(__bss_stop) = .; \ | ||
| 497 | } | ||
| 498 | |||
| 499 | /* | ||
| 500 | * DWARF debug sections. | ||
| 501 | * Symbols in the DWARF debugging sections are relative to | ||
| 502 | * the beginning of the section so we begin them at 0. | ||
| 503 | */ | ||
| 369 | #define DWARF_DEBUG \ | 504 | #define DWARF_DEBUG \ |
| 370 | /* DWARF 1 */ \ | 505 | /* DWARF 1 */ \ |
| 371 | .debug 0 : { *(.debug) } \ | 506 | .debug 0 : { *(.debug) } \ |
| @@ -432,6 +567,12 @@ | |||
| 432 | VMLINUX_SYMBOL(__stop_notes) = .; \ | 567 | VMLINUX_SYMBOL(__stop_notes) = .; \ |
| 433 | } | 568 | } |
| 434 | 569 | ||
| 570 | #define INIT_SETUP(initsetup_align) \ | ||
| 571 | . = ALIGN(initsetup_align); \ | ||
| 572 | VMLINUX_SYMBOL(__setup_start) = .; \ | ||
| 573 | *(.init.setup) \ | ||
| 574 | VMLINUX_SYMBOL(__setup_end) = .; | ||
| 575 | |||
| 435 | #define INITCALLS \ | 576 | #define INITCALLS \ |
| 436 | *(.initcallearly.init) \ | 577 | *(.initcallearly.init) \ |
| 437 | VMLINUX_SYMBOL(__early_initcall_end) = .; \ | 578 | VMLINUX_SYMBOL(__early_initcall_end) = .; \ |
| @@ -453,6 +594,31 @@ | |||
| 453 | *(.initcall7.init) \ | 594 | *(.initcall7.init) \ |
| 454 | *(.initcall7s.init) | 595 | *(.initcall7s.init) |
| 455 | 596 | ||
| 597 | #define INIT_CALLS \ | ||
| 598 | VMLINUX_SYMBOL(__initcall_start) = .; \ | ||
| 599 | INITCALLS \ | ||
| 600 | VMLINUX_SYMBOL(__initcall_end) = .; | ||
| 601 | |||
| 602 | #define CON_INITCALL \ | ||
| 603 | VMLINUX_SYMBOL(__con_initcall_start) = .; \ | ||
| 604 | *(.con_initcall.init) \ | ||
| 605 | VMLINUX_SYMBOL(__con_initcall_end) = .; | ||
| 606 | |||
| 607 | #define SECURITY_INITCALL \ | ||
| 608 | VMLINUX_SYMBOL(__security_initcall_start) = .; \ | ||
| 609 | *(.security_initcall.init) \ | ||
| 610 | VMLINUX_SYMBOL(__security_initcall_end) = .; | ||
| 611 | |||
| 612 | #ifdef CONFIG_BLK_DEV_INITRD | ||
| 613 | #define INIT_RAM_FS \ | ||
| 614 | . = ALIGN(PAGE_SIZE); \ | ||
| 615 | VMLINUX_SYMBOL(__initramfs_start) = .; \ | ||
| 616 | *(.init.ramfs) \ | ||
| 617 | VMLINUX_SYMBOL(__initramfs_end) = .; | ||
| 618 | #else | ||
| 619 | #define INITRAMFS | ||
| 620 | #endif | ||
| 621 | |||
| 456 | /** | 622 | /** |
| 457 | * PERCPU_VADDR - define output section for percpu area | 623 | * PERCPU_VADDR - define output section for percpu area |
| 458 | * @vaddr: explicit base address (optional) | 624 | * @vaddr: explicit base address (optional) |
| @@ -509,3 +675,58 @@ | |||
| 509 | *(.data.percpu.shared_aligned) \ | 675 | *(.data.percpu.shared_aligned) \ |
| 510 | VMLINUX_SYMBOL(__per_cpu_end) = .; \ | 676 | VMLINUX_SYMBOL(__per_cpu_end) = .; \ |
| 511 | } | 677 | } |
| 678 | |||
| 679 | |||
| 680 | /* | ||
| 681 | * Definition of the high level *_SECTION macros | ||
| 682 | * They will fit only a subset of the architectures | ||
| 683 | */ | ||
| 684 | |||
| 685 | |||
| 686 | /* | ||
| 687 | * Writeable data. | ||
| 688 | * All sections are combined in a single .data section. | ||
| 689 | * The sections following CONSTRUCTORS are arranged so their | ||
| 690 | * typical alignment matches. | ||
| 691 | * A cacheline is typical/always less than a PAGE_SIZE so | ||
| 692 | * the sections that has this restriction (or similar) | ||
| 693 | * is located before the ones requiring PAGE_SIZE alignment. | ||
| 694 | * NOSAVE_DATA starts and ends with a PAGE_SIZE alignment which | ||
| 695 | * matches the requirment of PAGE_ALIGNED_DATA. | ||
| 696 | * | ||
| 697 | * use 0 as page_align if page_aligned data is not used */ | ||
| 698 | #define RW_DATA_SECTION(cacheline, nosave, pagealigned, inittask) \ | ||
| 699 | . = ALIGN(PAGE_SIZE); \ | ||
| 700 | .data : AT(ADDR(.data) - LOAD_OFFSET) { \ | ||
| 701 | INIT_TASK(inittask) \ | ||
| 702 | CACHELINE_ALIGNED_DATA(cacheline) \ | ||
| 703 | READ_MOSTLY_DATA(cacheline) \ | ||
| 704 | DATA_DATA \ | ||
| 705 | CONSTRUCTORS \ | ||
| 706 | NOSAVE_DATA(nosave) \ | ||
| 707 | PAGE_ALIGNED_DATA(pagealigned) \ | ||
| 708 | } | ||
| 709 | |||
| 710 | #define INIT_TEXT_SECTION(inittext_align) \ | ||
| 711 | . = ALIGN(inittext_align); \ | ||
| 712 | .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) { \ | ||
| 713 | VMLINUX_SYMBOL(_sinittext) = .; \ | ||
| 714 | INIT_TEXT \ | ||
| 715 | VMLINUX_SYMBOL(_einittext) = .; \ | ||
| 716 | } | ||
| 717 | |||
| 718 | #define INIT_DATA_SECTION(initsetup_align) \ | ||
| 719 | .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) { \ | ||
| 720 | INIT_DATA \ | ||
| 721 | INIT_SETUP(initsetup_align) \ | ||
| 722 | INIT_CALLS \ | ||
| 723 | CON_INITCALL \ | ||
| 724 | SECURITY_INITCALL \ | ||
| 725 | INIT_RAM_FS \ | ||
| 726 | } | ||
| 727 | |||
| 728 | #define BSS_SECTION(sbss_align, bss_align) \ | ||
| 729 | SBSS \ | ||
| 730 | BSS(bss_align) \ | ||
| 731 | . = ALIGN(4); | ||
| 732 | |||
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index b84d8ae35e6f..d4ddc22e46bb 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
| @@ -86,7 +86,17 @@ struct drm_device; | |||
| 86 | 86 | ||
| 87 | #include "drm_os_linux.h" | 87 | #include "drm_os_linux.h" |
| 88 | #include "drm_hashtab.h" | 88 | #include "drm_hashtab.h" |
| 89 | #include "drm_mm.h" | ||
| 89 | 90 | ||
| 91 | #define DRM_UT_CORE 0x01 | ||
| 92 | #define DRM_UT_DRIVER 0x02 | ||
| 93 | #define DRM_UT_KMS 0x04 | ||
| 94 | #define DRM_UT_MODE 0x08 | ||
| 95 | |||
| 96 | extern void drm_ut_debug_printk(unsigned int request_level, | ||
| 97 | const char *prefix, | ||
| 98 | const char *function_name, | ||
| 99 | const char *format, ...); | ||
| 90 | /***********************************************************************/ | 100 | /***********************************************************************/ |
| 91 | /** \name DRM template customization defaults */ | 101 | /** \name DRM template customization defaults */ |
| 92 | /*@{*/ | 102 | /*@{*/ |
| @@ -186,15 +196,57 @@ struct drm_device; | |||
| 186 | * \param arg arguments | 196 | * \param arg arguments |
| 187 | */ | 197 | */ |
| 188 | #if DRM_DEBUG_CODE | 198 | #if DRM_DEBUG_CODE |
| 189 | #define DRM_DEBUG(fmt, arg...) \ | 199 | #define DRM_DEBUG(fmt, args...) \ |
| 200 | do { \ | ||
| 201 | drm_ut_debug_printk(DRM_UT_CORE, DRM_NAME, \ | ||
| 202 | __func__, fmt, ##args); \ | ||
| 203 | } while (0) | ||
| 204 | |||
| 205 | #define DRM_DEBUG_DRIVER(prefix, fmt, args...) \ | ||
| 206 | do { \ | ||
| 207 | drm_ut_debug_printk(DRM_UT_DRIVER, prefix, \ | ||
| 208 | __func__, fmt, ##args); \ | ||
| 209 | } while (0) | ||
| 210 | #define DRM_DEBUG_KMS(prefix, fmt, args...) \ | ||
| 211 | do { \ | ||
| 212 | drm_ut_debug_printk(DRM_UT_KMS, prefix, \ | ||
| 213 | __func__, fmt, ##args); \ | ||
| 214 | } while (0) | ||
| 215 | #define DRM_DEBUG_MODE(prefix, fmt, args...) \ | ||
| 216 | do { \ | ||
| 217 | drm_ut_debug_printk(DRM_UT_MODE, prefix, \ | ||
| 218 | __func__, fmt, ##args); \ | ||
| 219 | } while (0) | ||
| 220 | #define DRM_LOG(fmt, args...) \ | ||
| 221 | do { \ | ||
| 222 | drm_ut_debug_printk(DRM_UT_CORE, NULL, \ | ||
| 223 | NULL, fmt, ##args); \ | ||
| 224 | } while (0) | ||
| 225 | #define DRM_LOG_KMS(fmt, args...) \ | ||
| 226 | do { \ | ||
| 227 | drm_ut_debug_printk(DRM_UT_KMS, NULL, \ | ||
| 228 | NULL, fmt, ##args); \ | ||
| 229 | } while (0) | ||
| 230 | #define DRM_LOG_MODE(fmt, args...) \ | ||
| 231 | do { \ | ||
| 232 | drm_ut_debug_printk(DRM_UT_MODE, NULL, \ | ||
| 233 | NULL, fmt, ##args); \ | ||
| 234 | } while (0) | ||
| 235 | #define DRM_LOG_DRIVER(fmt, args...) \ | ||
| 190 | do { \ | 236 | do { \ |
| 191 | if ( drm_debug ) \ | 237 | drm_ut_debug_printk(DRM_UT_DRIVER, NULL, \ |
| 192 | printk(KERN_DEBUG \ | 238 | NULL, fmt, ##args); \ |
| 193 | "[" DRM_NAME ":%s] " fmt , \ | ||
| 194 | __func__ , ##arg); \ | ||
| 195 | } while (0) | 239 | } while (0) |
| 196 | #else | 240 | #else |
| 241 | #define DRM_DEBUG_DRIVER(prefix, fmt, args...) do { } while (0) | ||
| 242 | #define DRM_DEBUG_KMS(prefix, fmt, args...) do { } while (0) | ||
| 243 | #define DRM_DEBUG_MODE(prefix, fmt, args...) do { } while (0) | ||
| 197 | #define DRM_DEBUG(fmt, arg...) do { } while (0) | 244 | #define DRM_DEBUG(fmt, arg...) do { } while (0) |
| 245 | #define DRM_LOG(fmt, arg...) do { } while (0) | ||
| 246 | #define DRM_LOG_KMS(fmt, args...) do { } while (0) | ||
| 247 | #define DRM_LOG_MODE(fmt, arg...) do { } while (0) | ||
| 248 | #define DRM_LOG_DRIVER(fmt, arg...) do { } while (0) | ||
| 249 | |||
| 198 | #endif | 250 | #endif |
| 199 | 251 | ||
| 200 | #define DRM_PROC_LIMIT (PAGE_SIZE-80) | 252 | #define DRM_PROC_LIMIT (PAGE_SIZE-80) |
| @@ -237,15 +289,15 @@ struct drm_device; | |||
| 237 | * \param dev DRM device. | 289 | * \param dev DRM device. |
| 238 | * \param filp file pointer of the caller. | 290 | * \param filp file pointer of the caller. |
| 239 | */ | 291 | */ |
| 240 | #define LOCK_TEST_WITH_RETURN( dev, file_priv ) \ | 292 | #define LOCK_TEST_WITH_RETURN( dev, _file_priv ) \ |
| 241 | do { \ | 293 | do { \ |
| 242 | if (!_DRM_LOCK_IS_HELD(file_priv->master->lock.hw_lock->lock) || \ | 294 | if (!_DRM_LOCK_IS_HELD(_file_priv->master->lock.hw_lock->lock) || \ |
| 243 | file_priv->master->lock.file_priv != file_priv) { \ | 295 | _file_priv->master->lock.file_priv != _file_priv) { \ |
| 244 | DRM_ERROR( "%s called without lock held, held %d owner %p %p\n",\ | 296 | DRM_ERROR( "%s called without lock held, held %d owner %p %p\n",\ |
| 245 | __func__, _DRM_LOCK_IS_HELD(file_priv->master->lock.hw_lock->lock),\ | 297 | __func__, _DRM_LOCK_IS_HELD(_file_priv->master->lock.hw_lock->lock),\ |
| 246 | file_priv->master->lock.file_priv, file_priv); \ | 298 | _file_priv->master->lock.file_priv, _file_priv); \ |
| 247 | return -EINVAL; \ | 299 | return -EINVAL; \ |
| 248 | } \ | 300 | } \ |
| 249 | } while (0) | 301 | } while (0) |
| 250 | 302 | ||
| 251 | /** | 303 | /** |
| @@ -502,26 +554,6 @@ struct drm_sigdata { | |||
| 502 | }; | 554 | }; |
| 503 | 555 | ||
| 504 | 556 | ||
| 505 | /* | ||
| 506 | * Generic memory manager structs | ||
| 507 | */ | ||
| 508 | |||
| 509 | struct drm_mm_node { | ||
| 510 | struct list_head fl_entry; | ||
| 511 | struct list_head ml_entry; | ||
| 512 | int free; | ||
| 513 | unsigned long start; | ||
| 514 | unsigned long size; | ||
| 515 | struct drm_mm *mm; | ||
| 516 | void *private; | ||
| 517 | }; | ||
| 518 | |||
| 519 | struct drm_mm { | ||
| 520 | struct list_head fl_entry; | ||
| 521 | struct list_head ml_entry; | ||
| 522 | }; | ||
| 523 | |||
| 524 | |||
| 525 | /** | 557 | /** |
| 526 | * Kernel side of a mapping | 558 | * Kernel side of a mapping |
| 527 | */ | 559 | */ |
| @@ -1385,22 +1417,6 @@ extern char *drm_get_connector_status_name(enum drm_connector_status status); | |||
| 1385 | extern int drm_sysfs_connector_add(struct drm_connector *connector); | 1417 | extern int drm_sysfs_connector_add(struct drm_connector *connector); |
| 1386 | extern void drm_sysfs_connector_remove(struct drm_connector *connector); | 1418 | extern void drm_sysfs_connector_remove(struct drm_connector *connector); |
| 1387 | 1419 | ||
| 1388 | /* | ||
| 1389 | * Basic memory manager support (drm_mm.c) | ||
| 1390 | */ | ||
| 1391 | extern struct drm_mm_node *drm_mm_get_block(struct drm_mm_node * parent, | ||
| 1392 | unsigned long size, | ||
| 1393 | unsigned alignment); | ||
| 1394 | extern void drm_mm_put_block(struct drm_mm_node * cur); | ||
| 1395 | extern struct drm_mm_node *drm_mm_search_free(const struct drm_mm *mm, unsigned long size, | ||
| 1396 | unsigned alignment, int best_match); | ||
| 1397 | extern int drm_mm_init(struct drm_mm *mm, unsigned long start, unsigned long size); | ||
| 1398 | extern void drm_mm_takedown(struct drm_mm *mm); | ||
| 1399 | extern int drm_mm_clean(struct drm_mm *mm); | ||
| 1400 | extern unsigned long drm_mm_tail_space(struct drm_mm *mm); | ||
| 1401 | extern int drm_mm_remove_space_from_tail(struct drm_mm *mm, unsigned long size); | ||
| 1402 | extern int drm_mm_add_space_to_tail(struct drm_mm *mm, unsigned long size); | ||
| 1403 | |||
| 1404 | /* Graphics Execution Manager library functions (drm_gem.c) */ | 1420 | /* Graphics Execution Manager library functions (drm_gem.c) */ |
| 1405 | int drm_gem_init(struct drm_device *dev); | 1421 | int drm_gem_init(struct drm_device *dev); |
| 1406 | void drm_gem_destroy(struct drm_device *dev); | 1422 | void drm_gem_destroy(struct drm_device *dev); |
| @@ -1522,18 +1538,14 @@ static __inline__ void *drm_calloc(size_t nmemb, size_t size, int area) | |||
| 1522 | 1538 | ||
| 1523 | static __inline__ void *drm_calloc_large(size_t nmemb, size_t size) | 1539 | static __inline__ void *drm_calloc_large(size_t nmemb, size_t size) |
| 1524 | { | 1540 | { |
| 1525 | u8 *addr; | 1541 | if (size * nmemb <= PAGE_SIZE) |
| 1526 | |||
| 1527 | if (size <= PAGE_SIZE) | ||
| 1528 | return kcalloc(nmemb, size, GFP_KERNEL); | 1542 | return kcalloc(nmemb, size, GFP_KERNEL); |
| 1529 | 1543 | ||
| 1530 | addr = vmalloc(nmemb * size); | 1544 | if (size != 0 && nmemb > ULONG_MAX / size) |
| 1531 | if (!addr) | ||
| 1532 | return NULL; | 1545 | return NULL; |
| 1533 | 1546 | ||
| 1534 | memset(addr, 0, nmemb * size); | 1547 | return __vmalloc(size * nmemb, |
| 1535 | 1548 | GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO, PAGE_KERNEL); | |
| 1536 | return addr; | ||
| 1537 | } | 1549 | } |
| 1538 | 1550 | ||
| 1539 | static __inline void drm_free_large(void *ptr) | 1551 | static __inline void drm_free_large(void *ptr) |
diff --git a/include/drm/drm_hashtab.h b/include/drm/drm_hashtab.h index cd2b189e1be6..0af087a4d3b3 100644 --- a/include/drm/drm_hashtab.h +++ b/include/drm/drm_hashtab.h | |||
| @@ -35,6 +35,8 @@ | |||
| 35 | #ifndef DRM_HASHTAB_H | 35 | #ifndef DRM_HASHTAB_H |
| 36 | #define DRM_HASHTAB_H | 36 | #define DRM_HASHTAB_H |
| 37 | 37 | ||
| 38 | #include <linux/list.h> | ||
| 39 | |||
| 38 | #define drm_hash_entry(_ptr, _type, _member) container_of(_ptr, _type, _member) | 40 | #define drm_hash_entry(_ptr, _type, _member) container_of(_ptr, _type, _member) |
| 39 | 41 | ||
| 40 | struct drm_hash_item { | 42 | struct drm_hash_item { |
diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h new file mode 100644 index 000000000000..5662f4278ef3 --- /dev/null +++ b/include/drm/drm_mm.h | |||
| @@ -0,0 +1,90 @@ | |||
| 1 | /************************************************************************** | ||
| 2 | * | ||
| 3 | * Copyright 2006-2008 Tungsten Graphics, Inc., Cedar Park, TX. USA. | ||
| 4 | * All Rights Reserved. | ||
| 5 | * | ||
| 6 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 7 | * copy of this software and associated documentation files (the | ||
| 8 | * "Software"), to deal in the Software without restriction, including | ||
| 9 | * without limitation the rights to use, copy, modify, merge, publish, | ||
| 10 | * distribute, sub license, and/or sell copies of the Software, and to | ||
| 11 | * permit persons to whom the Software is furnished to do so, subject to | ||
| 12 | * the following conditions: | ||
| 13 | * | ||
| 14 | * The above copyright notice and this permission notice (including the | ||
| 15 | * next paragraph) shall be included in all copies or substantial portions | ||
| 16 | * of the Software. | ||
| 17 | * | ||
| 18 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 19 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 20 | * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL | ||
| 21 | * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, | ||
| 22 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
| 23 | * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
| 24 | * USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 25 | * | ||
| 26 | * | ||
| 27 | **************************************************************************/ | ||
| 28 | /* | ||
| 29 | * Authors: | ||
| 30 | * Thomas Hellstrom <thomas-at-tungstengraphics-dot-com> | ||
| 31 | */ | ||
| 32 | |||
| 33 | #ifndef _DRM_MM_H_ | ||
| 34 | #define _DRM_MM_H_ | ||
| 35 | |||
| 36 | /* | ||
| 37 | * Generic range manager structs | ||
| 38 | */ | ||
| 39 | #include <linux/list.h> | ||
| 40 | |||
| 41 | struct drm_mm_node { | ||
| 42 | struct list_head fl_entry; | ||
| 43 | struct list_head ml_entry; | ||
| 44 | int free; | ||
| 45 | unsigned long start; | ||
| 46 | unsigned long size; | ||
| 47 | struct drm_mm *mm; | ||
| 48 | void *private; | ||
| 49 | }; | ||
| 50 | |||
| 51 | struct drm_mm { | ||
| 52 | struct list_head fl_entry; | ||
| 53 | struct list_head ml_entry; | ||
| 54 | struct list_head unused_nodes; | ||
| 55 | int num_unused; | ||
| 56 | spinlock_t unused_lock; | ||
| 57 | }; | ||
| 58 | |||
| 59 | /* | ||
| 60 | * Basic range manager support (drm_mm.c) | ||
| 61 | */ | ||
| 62 | |||
| 63 | extern struct drm_mm_node *drm_mm_get_block(struct drm_mm_node *parent, | ||
| 64 | unsigned long size, | ||
| 65 | unsigned alignment); | ||
| 66 | extern struct drm_mm_node *drm_mm_get_block_atomic(struct drm_mm_node *parent, | ||
| 67 | unsigned long size, | ||
| 68 | unsigned alignment); | ||
| 69 | extern void drm_mm_put_block(struct drm_mm_node *cur); | ||
| 70 | extern struct drm_mm_node *drm_mm_search_free(const struct drm_mm *mm, | ||
| 71 | unsigned long size, | ||
| 72 | unsigned alignment, | ||
| 73 | int best_match); | ||
| 74 | extern int drm_mm_init(struct drm_mm *mm, unsigned long start, | ||
| 75 | unsigned long size); | ||
| 76 | extern void drm_mm_takedown(struct drm_mm *mm); | ||
| 77 | extern int drm_mm_clean(struct drm_mm *mm); | ||
| 78 | extern unsigned long drm_mm_tail_space(struct drm_mm *mm); | ||
| 79 | extern int drm_mm_remove_space_from_tail(struct drm_mm *mm, | ||
| 80 | unsigned long size); | ||
| 81 | extern int drm_mm_add_space_to_tail(struct drm_mm *mm, | ||
| 82 | unsigned long size, int atomic); | ||
| 83 | extern int drm_mm_pre_get(struct drm_mm *mm); | ||
| 84 | |||
| 85 | static inline struct drm_mm *drm_get_mm(struct drm_mm_node *block) | ||
| 86 | { | ||
| 87 | return block->mm; | ||
| 88 | } | ||
| 89 | |||
| 90 | #endif | ||
diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h index fc55db780199..f8634ab53b8f 100644 --- a/include/drm/drm_pciids.h +++ b/include/drm/drm_pciids.h | |||
| @@ -254,6 +254,11 @@ | |||
| 254 | {0x1002, 0x940A, 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}, \ | 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}, \ | 256 | {0x1002, 0x940F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \ |
| 257 | {0x1002, 0x94A0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ | ||
| 258 | {0x1002, 0x94A1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ | ||
| 259 | {0x1002, 0x94B1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ | ||
| 260 | {0x1002, 0x94B3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ | ||
| 261 | {0x1002, 0x94B5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ | ||
| 257 | {0x1002, 0x9440, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | 262 | {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}, \ | 263 | {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}, \ | 264 | {0x1002, 0x9442, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ |
| @@ -268,6 +273,8 @@ | |||
| 268 | {0x1002, 0x9456, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | 273 | {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}, \ | 274 | {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}, \ | 275 | {0x1002, 0x945B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
| 276 | {0x1002, 0x9460, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 277 | {0x1002, 0x9462, 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}, \ | 278 | {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}, \ | 279 | {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}, \ | 280 | {0x1002, 0x947A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
| @@ -536,4 +543,6 @@ | |||
| 536 | {0x8086, 0xa001, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ | 543 | {0x8086, 0xa001, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 537 | {0x8086, 0xa011, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ | 544 | {0x8086, 0xa011, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 538 | {0x8086, 0x35e8, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ | 545 | {0x8086, 0x35e8, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 546 | {0x8086, 0x0042, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ | ||
| 547 | {0x8086, 0x0046, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ | ||
| 539 | {0, 0, 0} | 548 | {0, 0, 0} |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 3f0eaa397ef5..a2df7030d49d 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
| @@ -135,6 +135,7 @@ header-y += posix_types.h | |||
| 135 | header-y += ppdev.h | 135 | header-y += ppdev.h |
| 136 | header-y += prctl.h | 136 | header-y += prctl.h |
| 137 | header-y += qnxtypes.h | 137 | header-y += qnxtypes.h |
| 138 | header-y += qnx4_fs.h | ||
| 138 | header-y += radeonfb.h | 139 | header-y += radeonfb.h |
| 139 | header-y += raw.h | 140 | header-y += raw.h |
| 140 | header-y += resource.h | 141 | header-y += resource.h |
| @@ -308,9 +309,9 @@ unifdef-y += poll.h | |||
| 308 | unifdef-y += ppp_defs.h | 309 | unifdef-y += ppp_defs.h |
| 309 | unifdef-y += ppp-comp.h | 310 | unifdef-y += ppp-comp.h |
| 310 | unifdef-y += ptrace.h | 311 | unifdef-y += ptrace.h |
| 311 | unifdef-y += qnx4_fs.h | ||
| 312 | unifdef-y += quota.h | 312 | unifdef-y += quota.h |
| 313 | unifdef-y += random.h | 313 | unifdef-y += random.h |
| 314 | unifdef-y += rfkill.h | ||
| 314 | unifdef-y += irqnr.h | 315 | unifdef-y += irqnr.h |
| 315 | unifdef-y += reboot.h | 316 | unifdef-y += reboot.h |
| 316 | unifdef-y += reiserfs_fs.h | 317 | unifdef-y += reiserfs_fs.h |
diff --git a/include/linux/amba/pl022.h b/include/linux/amba/pl022.h new file mode 100644 index 000000000000..dcad0ffd1755 --- /dev/null +++ b/include/linux/amba/pl022.h | |||
| @@ -0,0 +1,264 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/amba/pl022.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008-2009 ST-Ericsson AB | ||
| 5 | * Copyright (C) 2006 STMicroelectronics Pvt. Ltd. | ||
| 6 | * | ||
| 7 | * Author: Linus Walleij <linus.walleij@stericsson.com> | ||
| 8 | * | ||
| 9 | * Initial version inspired by: | ||
| 10 | * linux-2.6.17-rc3-mm1/drivers/spi/pxa2xx_spi.c | ||
| 11 | * Initial adoption to PL022 by: | ||
| 12 | * Sachin Verma <sachin.verma@st.com> | ||
| 13 | * | ||
| 14 | * This program is free software; you can redistribute it and/or modify | ||
| 15 | * it under the terms of the GNU General Public License as published by | ||
| 16 | * the Free Software Foundation; either version 2 of the License, or | ||
| 17 | * (at your option) any later version. | ||
| 18 | * | ||
| 19 | * This program is distributed in the hope that it will be useful, | ||
| 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 22 | * GNU General Public License for more details. | ||
| 23 | */ | ||
| 24 | |||
| 25 | #ifndef _SSP_PL022_H | ||
| 26 | #define _SSP_PL022_H | ||
| 27 | |||
| 28 | #include <linux/device.h> | ||
| 29 | |||
| 30 | /** | ||
| 31 | * whether SSP is in loopback mode or not | ||
| 32 | */ | ||
| 33 | enum ssp_loopback { | ||
| 34 | LOOPBACK_DISABLED, | ||
| 35 | LOOPBACK_ENABLED | ||
| 36 | }; | ||
| 37 | |||
| 38 | /** | ||
| 39 | * enum ssp_interface - interfaces allowed for this SSP Controller | ||
| 40 | * @SSP_INTERFACE_MOTOROLA_SPI: Motorola Interface | ||
| 41 | * @SSP_INTERFACE_TI_SYNC_SERIAL: Texas Instrument Synchronous Serial | ||
| 42 | * interface | ||
| 43 | * @SSP_INTERFACE_NATIONAL_MICROWIRE: National Semiconductor Microwire | ||
| 44 | * interface | ||
| 45 | * @SSP_INTERFACE_UNIDIRECTIONAL: Unidirectional interface (STn8810 | ||
| 46 | * &STn8815 only) | ||
| 47 | */ | ||
| 48 | enum ssp_interface { | ||
| 49 | SSP_INTERFACE_MOTOROLA_SPI, | ||
| 50 | SSP_INTERFACE_TI_SYNC_SERIAL, | ||
| 51 | SSP_INTERFACE_NATIONAL_MICROWIRE, | ||
| 52 | SSP_INTERFACE_UNIDIRECTIONAL | ||
| 53 | }; | ||
| 54 | |||
| 55 | /** | ||
| 56 | * enum ssp_hierarchy - whether SSP is configured as Master or Slave | ||
| 57 | */ | ||
| 58 | enum ssp_hierarchy { | ||
| 59 | SSP_MASTER, | ||
| 60 | SSP_SLAVE | ||
| 61 | }; | ||
| 62 | |||
| 63 | /** | ||
| 64 | * enum ssp_clock_params - clock parameters, to set SSP clock at a | ||
| 65 | * desired freq | ||
| 66 | */ | ||
| 67 | struct ssp_clock_params { | ||
| 68 | u8 cpsdvsr; /* value from 2 to 254 (even only!) */ | ||
| 69 | u8 scr; /* value from 0 to 255 */ | ||
| 70 | }; | ||
| 71 | |||
| 72 | /** | ||
| 73 | * enum ssp_rx_endian - endianess of Rx FIFO Data | ||
| 74 | */ | ||
| 75 | enum ssp_rx_endian { | ||
| 76 | SSP_RX_MSB, | ||
| 77 | SSP_RX_LSB | ||
| 78 | }; | ||
| 79 | |||
| 80 | /** | ||
| 81 | * enum ssp_tx_endian - endianess of Tx FIFO Data | ||
| 82 | */ | ||
| 83 | enum ssp_tx_endian { | ||
| 84 | SSP_TX_MSB, | ||
| 85 | SSP_TX_LSB | ||
| 86 | }; | ||
| 87 | |||
| 88 | /** | ||
| 89 | * enum ssp_data_size - number of bits in one data element | ||
| 90 | */ | ||
| 91 | enum ssp_data_size { | ||
| 92 | SSP_DATA_BITS_4 = 0x03, SSP_DATA_BITS_5, SSP_DATA_BITS_6, | ||
| 93 | SSP_DATA_BITS_7, SSP_DATA_BITS_8, SSP_DATA_BITS_9, | ||
| 94 | SSP_DATA_BITS_10, SSP_DATA_BITS_11, SSP_DATA_BITS_12, | ||
| 95 | SSP_DATA_BITS_13, SSP_DATA_BITS_14, SSP_DATA_BITS_15, | ||
| 96 | SSP_DATA_BITS_16, SSP_DATA_BITS_17, SSP_DATA_BITS_18, | ||
| 97 | SSP_DATA_BITS_19, SSP_DATA_BITS_20, SSP_DATA_BITS_21, | ||
| 98 | SSP_DATA_BITS_22, SSP_DATA_BITS_23, SSP_DATA_BITS_24, | ||
| 99 | SSP_DATA_BITS_25, SSP_DATA_BITS_26, SSP_DATA_BITS_27, | ||
| 100 | SSP_DATA_BITS_28, SSP_DATA_BITS_29, SSP_DATA_BITS_30, | ||
| 101 | SSP_DATA_BITS_31, SSP_DATA_BITS_32 | ||
| 102 | }; | ||
| 103 | |||
| 104 | /** | ||
| 105 | * enum ssp_mode - SSP mode of operation (Communication modes) | ||
| 106 | */ | ||
| 107 | enum ssp_mode { | ||
| 108 | INTERRUPT_TRANSFER, | ||
| 109 | POLLING_TRANSFER, | ||
| 110 | DMA_TRANSFER | ||
| 111 | }; | ||
| 112 | |||
| 113 | /** | ||
| 114 | * enum ssp_rx_level_trig - receive FIFO watermark level which triggers | ||
| 115 | * IT: Interrupt fires when _N_ or more elements in RX FIFO. | ||
| 116 | */ | ||
| 117 | enum ssp_rx_level_trig { | ||
| 118 | SSP_RX_1_OR_MORE_ELEM, | ||
| 119 | SSP_RX_4_OR_MORE_ELEM, | ||
| 120 | SSP_RX_8_OR_MORE_ELEM, | ||
| 121 | SSP_RX_16_OR_MORE_ELEM, | ||
| 122 | SSP_RX_32_OR_MORE_ELEM | ||
| 123 | }; | ||
| 124 | |||
| 125 | /** | ||
| 126 | * Transmit FIFO watermark level which triggers (IT Interrupt fires | ||
| 127 | * when _N_ or more empty locations in TX FIFO) | ||
| 128 | */ | ||
| 129 | enum ssp_tx_level_trig { | ||
| 130 | SSP_TX_1_OR_MORE_EMPTY_LOC, | ||
| 131 | SSP_TX_4_OR_MORE_EMPTY_LOC, | ||
| 132 | SSP_TX_8_OR_MORE_EMPTY_LOC, | ||
| 133 | SSP_TX_16_OR_MORE_EMPTY_LOC, | ||
| 134 | SSP_TX_32_OR_MORE_EMPTY_LOC | ||
| 135 | }; | ||
| 136 | |||
| 137 | /** | ||
| 138 | * enum SPI Clock Phase - clock phase (Motorola SPI interface only) | ||
| 139 | * @SSP_CLK_RISING_EDGE: Receive data on rising edge | ||
| 140 | * @SSP_CLK_FALLING_EDGE: Receive data on falling edge | ||
| 141 | */ | ||
| 142 | enum ssp_spi_clk_phase { | ||
| 143 | SSP_CLK_RISING_EDGE, | ||
| 144 | SSP_CLK_FALLING_EDGE | ||
| 145 | }; | ||
| 146 | |||
| 147 | /** | ||
| 148 | * enum SPI Clock Polarity - clock polarity (Motorola SPI interface only) | ||
| 149 | * @SSP_CLK_POL_IDLE_LOW: Low inactive level | ||
| 150 | * @SSP_CLK_POL_IDLE_HIGH: High inactive level | ||
| 151 | */ | ||
| 152 | enum ssp_spi_clk_pol { | ||
| 153 | SSP_CLK_POL_IDLE_LOW, | ||
| 154 | SSP_CLK_POL_IDLE_HIGH | ||
| 155 | }; | ||
| 156 | |||
| 157 | /** | ||
| 158 | * Microwire Conrol Lengths Command size in microwire format | ||
| 159 | */ | ||
| 160 | enum ssp_microwire_ctrl_len { | ||
| 161 | SSP_BITS_4 = 0x03, SSP_BITS_5, SSP_BITS_6, | ||
| 162 | SSP_BITS_7, SSP_BITS_8, SSP_BITS_9, | ||
| 163 | SSP_BITS_10, SSP_BITS_11, SSP_BITS_12, | ||
| 164 | SSP_BITS_13, SSP_BITS_14, SSP_BITS_15, | ||
| 165 | SSP_BITS_16, SSP_BITS_17, SSP_BITS_18, | ||
| 166 | SSP_BITS_19, SSP_BITS_20, SSP_BITS_21, | ||
| 167 | SSP_BITS_22, SSP_BITS_23, SSP_BITS_24, | ||
| 168 | SSP_BITS_25, SSP_BITS_26, SSP_BITS_27, | ||
| 169 | SSP_BITS_28, SSP_BITS_29, SSP_BITS_30, | ||
| 170 | SSP_BITS_31, SSP_BITS_32 | ||
| 171 | }; | ||
| 172 | |||
| 173 | /** | ||
| 174 | * enum Microwire Wait State | ||
| 175 | * @SSP_MWIRE_WAIT_ZERO: No wait state inserted after last command bit | ||
| 176 | * @SSP_MWIRE_WAIT_ONE: One wait state inserted after last command bit | ||
| 177 | */ | ||
| 178 | enum ssp_microwire_wait_state { | ||
| 179 | SSP_MWIRE_WAIT_ZERO, | ||
| 180 | SSP_MWIRE_WAIT_ONE | ||
| 181 | }; | ||
| 182 | |||
| 183 | /** | ||
| 184 | * enum Microwire - whether Full/Half Duplex | ||
| 185 | * @SSP_MICROWIRE_CHANNEL_FULL_DUPLEX: SSPTXD becomes bi-directional, | ||
| 186 | * SSPRXD not used | ||
| 187 | * @SSP_MICROWIRE_CHANNEL_HALF_DUPLEX: SSPTXD is an output, SSPRXD is | ||
| 188 | * an input. | ||
| 189 | */ | ||
| 190 | enum ssp_duplex { | ||
| 191 | SSP_MICROWIRE_CHANNEL_FULL_DUPLEX, | ||
| 192 | SSP_MICROWIRE_CHANNEL_HALF_DUPLEX | ||
| 193 | }; | ||
| 194 | |||
| 195 | /** | ||
| 196 | * CHIP select/deselect commands | ||
| 197 | */ | ||
| 198 | enum ssp_chip_select { | ||
| 199 | SSP_CHIP_SELECT, | ||
| 200 | SSP_CHIP_DESELECT | ||
| 201 | }; | ||
| 202 | |||
| 203 | |||
| 204 | /** | ||
| 205 | * struct pl022_ssp_master - device.platform_data for SPI controller devices. | ||
| 206 | * @num_chipselect: chipselects are used to distinguish individual | ||
| 207 | * SPI slaves, and are numbered from zero to num_chipselects - 1. | ||
| 208 | * each slave has a chipselect signal, but it's common that not | ||
| 209 | * every chipselect is connected to a slave. | ||
| 210 | * @enable_dma: if true enables DMA driven transfers. | ||
| 211 | */ | ||
| 212 | struct pl022_ssp_controller { | ||
| 213 | u16 bus_id; | ||
| 214 | u8 num_chipselect; | ||
| 215 | u8 enable_dma:1; | ||
| 216 | }; | ||
| 217 | |||
| 218 | /** | ||
| 219 | * struct ssp_config_chip - spi_board_info.controller_data for SPI | ||
| 220 | * slave devices, copied to spi_device.controller_data. | ||
| 221 | * | ||
| 222 | * @lbm: used for test purpose to internally connect RX and TX | ||
| 223 | * @iface: Interface type(Motorola, TI, Microwire, Universal) | ||
| 224 | * @hierarchy: sets whether interface is master or slave | ||
| 225 | * @slave_tx_disable: SSPTXD is disconnected (in slave mode only) | ||
| 226 | * @clk_freq: Tune freq parameters of SSP(when in master mode) | ||
| 227 | * @endian_rx: Endianess of Data in Rx FIFO | ||
| 228 | * @endian_tx: Endianess of Data in Tx FIFO | ||
| 229 | * @data_size: Width of data element(4 to 32 bits) | ||
| 230 | * @com_mode: communication mode: polling, Interrupt or DMA | ||
| 231 | * @rx_lev_trig: Rx FIFO watermark level (for IT & DMA mode) | ||
| 232 | * @tx_lev_trig: Tx FIFO watermark level (for IT & DMA mode) | ||
| 233 | * @clk_phase: Motorola SPI interface Clock phase | ||
| 234 | * @clk_pol: Motorola SPI interface Clock polarity | ||
| 235 | * @ctrl_len: Microwire interface: Control length | ||
| 236 | * @wait_state: Microwire interface: Wait state | ||
| 237 | * @duplex: Microwire interface: Full/Half duplex | ||
| 238 | * @cs_control: function pointer to board-specific function to | ||
| 239 | * assert/deassert I/O port to control HW generation of devices chip-select. | ||
| 240 | * @dma_xfer_type: Type of DMA xfer (Mem-to-periph or Periph-to-Periph) | ||
| 241 | * @dma_config: DMA configuration for SSP controller and peripheral | ||
| 242 | */ | ||
| 243 | struct pl022_config_chip { | ||
| 244 | struct device *dev; | ||
| 245 | enum ssp_loopback lbm; | ||
| 246 | enum ssp_interface iface; | ||
| 247 | enum ssp_hierarchy hierarchy; | ||
| 248 | bool slave_tx_disable; | ||
| 249 | struct ssp_clock_params clk_freq; | ||
| 250 | enum ssp_rx_endian endian_rx; | ||
| 251 | enum ssp_tx_endian endian_tx; | ||
| 252 | enum ssp_data_size data_size; | ||
| 253 | enum ssp_mode com_mode; | ||
| 254 | enum ssp_rx_level_trig rx_lev_trig; | ||
| 255 | enum ssp_tx_level_trig tx_lev_trig; | ||
| 256 | enum ssp_spi_clk_phase clk_phase; | ||
| 257 | enum ssp_spi_clk_pol clk_pol; | ||
| 258 | enum ssp_microwire_ctrl_len ctrl_len; | ||
| 259 | enum ssp_microwire_wait_state wait_state; | ||
| 260 | enum ssp_duplex duplex; | ||
| 261 | void (*cs_control) (u32 control); | ||
| 262 | }; | ||
| 263 | |||
| 264 | #endif /* _SSP_PL022_H */ | ||
diff --git a/include/linux/amba/serial.h b/include/linux/amba/serial.h index 64a982ea5d5f..5a5a7fd62490 100644 --- a/include/linux/amba/serial.h +++ b/include/linux/amba/serial.h | |||
| @@ -114,6 +114,9 @@ | |||
| 114 | #define UART011_IFLS_TX4_8 (2 << 0) | 114 | #define UART011_IFLS_TX4_8 (2 << 0) |
| 115 | #define UART011_IFLS_TX6_8 (3 << 0) | 115 | #define UART011_IFLS_TX6_8 (3 << 0) |
| 116 | #define UART011_IFLS_TX7_8 (4 << 0) | 116 | #define UART011_IFLS_TX7_8 (4 << 0) |
| 117 | /* special values for ST vendor with deeper fifo */ | ||
| 118 | #define UART011_IFLS_RX_HALF (5 << 3) | ||
| 119 | #define UART011_IFLS_TX_HALF (5 << 0) | ||
| 117 | 120 | ||
| 118 | #define UART011_OEIM (1 << 10) /* overrun error interrupt mask */ | 121 | #define UART011_OEIM (1 << 10) /* overrun error interrupt mask */ |
| 119 | #define UART011_BEIM (1 << 9) /* break error interrupt mask */ | 122 | #define UART011_BEIM (1 << 9) /* break error interrupt mask */ |
diff --git a/include/linux/atmel-mci.h b/include/linux/atmel-mci.h index 2f1f95737acb..57b1846a3c87 100644 --- a/include/linux/atmel-mci.h +++ b/include/linux/atmel-mci.h | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | * @bus_width: Number of data lines wired up the slot | 10 | * @bus_width: Number of data lines wired up the slot |
| 11 | * @detect_pin: GPIO pin wired to the card detect switch | 11 | * @detect_pin: GPIO pin wired to the card detect switch |
| 12 | * @wp_pin: GPIO pin wired to the write protect sensor | 12 | * @wp_pin: GPIO pin wired to the write protect sensor |
| 13 | * @detect_is_active_high: The state of the detect pin when it is active | ||
| 13 | * | 14 | * |
| 14 | * If a given slot is not present on the board, @bus_width should be | 15 | * If a given slot is not present on the board, @bus_width should be |
| 15 | * set to 0. The other fields are ignored in this case. | 16 | * set to 0. The other fields are ignored in this case. |
| @@ -24,6 +25,7 @@ struct mci_slot_pdata { | |||
| 24 | unsigned int bus_width; | 25 | unsigned int bus_width; |
| 25 | int detect_pin; | 26 | int detect_pin; |
| 26 | int wp_pin; | 27 | int wp_pin; |
| 28 | bool detect_is_active_high; | ||
| 27 | }; | 29 | }; |
| 28 | 30 | ||
| 29 | /** | 31 | /** |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 12737be58601..2a04eb54c0dd 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
| @@ -590,6 +590,11 @@ static inline void bio_list_merge_head(struct bio_list *bl, | |||
| 590 | bl->head = bl2->head; | 590 | bl->head = bl2->head; |
| 591 | } | 591 | } |
| 592 | 592 | ||
| 593 | static inline struct bio *bio_list_peek(struct bio_list *bl) | ||
| 594 | { | ||
| 595 | return bl->head; | ||
| 596 | } | ||
| 597 | |||
| 593 | static inline struct bio *bio_list_pop(struct bio_list *bl) | 598 | static inline struct bio *bio_list_pop(struct bio_list *bl) |
| 594 | { | 599 | { |
| 595 | struct bio *bio = bl->head; | 600 | struct bio *bio = bl->head; |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index ebdfde8fe556..8963d9149b5f 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -926,6 +926,7 @@ extern void blk_queue_alignment_offset(struct request_queue *q, | |||
| 926 | unsigned int alignment); | 926 | unsigned int alignment); |
| 927 | extern void blk_queue_io_min(struct request_queue *q, unsigned int min); | 927 | extern void blk_queue_io_min(struct request_queue *q, unsigned int min); |
| 928 | extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt); | 928 | extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt); |
| 929 | extern void blk_set_default_limits(struct queue_limits *lim); | ||
| 929 | extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, | 930 | extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, |
| 930 | sector_t offset); | 931 | sector_t offset); |
| 931 | extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, | 932 | extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, |
| @@ -1226,6 +1227,8 @@ struct block_device_operations { | |||
| 1226 | int (*direct_access) (struct block_device *, sector_t, | 1227 | int (*direct_access) (struct block_device *, sector_t, |
| 1227 | void **, unsigned long *); | 1228 | void **, unsigned long *); |
| 1228 | int (*media_changed) (struct gendisk *); | 1229 | int (*media_changed) (struct gendisk *); |
| 1230 | unsigned long long (*set_capacity) (struct gendisk *, | ||
| 1231 | unsigned long long); | ||
| 1229 | int (*revalidate_disk) (struct gendisk *); | 1232 | int (*revalidate_disk) (struct gendisk *); |
| 1230 | int (*getgeo)(struct block_device *, struct hd_geometry *); | 1233 | int (*getgeo)(struct block_device *, struct hd_geometry *); |
| 1231 | struct module *owner; | 1234 | struct module *owner; |
diff --git a/include/linux/can/Kbuild b/include/linux/can/Kbuild index eff898aac02b..8cb05aae661c 100644 --- a/include/linux/can/Kbuild +++ b/include/linux/can/Kbuild | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | header-y += raw.h | 1 | header-y += raw.h |
| 2 | header-y += bcm.h | 2 | header-y += bcm.h |
| 3 | header-y += error.h | 3 | header-y += error.h |
| 4 | header-y += netlink.h | ||
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h new file mode 100644 index 000000000000..4a37a56f6cdd --- /dev/null +++ b/include/linux/can/dev.h | |||
| @@ -0,0 +1,70 @@ | |||
| 1 | /* | ||
| 2 | * linux/can/dev.h | ||
| 3 | * | ||
| 4 | * Definitions for the CAN network device driver interface | ||
| 5 | * | ||
| 6 | * Copyright (C) 2006 Andrey Volkov <avolkov@varma-el.com> | ||
| 7 | * Varma Electronics Oy | ||
| 8 | * | ||
| 9 | * Copyright (C) 2008 Wolfgang Grandegger <wg@grandegger.com> | ||
| 10 | * | ||
| 11 | * Send feedback to <socketcan-users@lists.berlios.de> | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef CAN_DEV_H | ||
| 15 | #define CAN_DEV_H | ||
| 16 | |||
| 17 | #include <linux/can/netlink.h> | ||
| 18 | #include <linux/can/error.h> | ||
| 19 | |||
| 20 | /* | ||
| 21 | * CAN mode | ||
| 22 | */ | ||
| 23 | enum can_mode { | ||
| 24 | CAN_MODE_STOP = 0, | ||
| 25 | CAN_MODE_START, | ||
| 26 | CAN_MODE_SLEEP | ||
| 27 | }; | ||
| 28 | |||
| 29 | /* | ||
| 30 | * CAN common private data | ||
| 31 | */ | ||
| 32 | #define CAN_ECHO_SKB_MAX 4 | ||
| 33 | |||
| 34 | struct can_priv { | ||
| 35 | struct can_device_stats can_stats; | ||
| 36 | |||
| 37 | struct can_bittiming bittiming; | ||
| 38 | struct can_bittiming_const *bittiming_const; | ||
| 39 | struct can_clock clock; | ||
| 40 | |||
| 41 | enum can_state state; | ||
| 42 | u32 ctrlmode; | ||
| 43 | |||
| 44 | int restart_ms; | ||
| 45 | struct timer_list restart_timer; | ||
| 46 | |||
| 47 | struct sk_buff *echo_skb[CAN_ECHO_SKB_MAX]; | ||
| 48 | |||
| 49 | int (*do_set_bittiming)(struct net_device *dev); | ||
| 50 | int (*do_set_mode)(struct net_device *dev, enum can_mode mode); | ||
| 51 | int (*do_get_state)(const struct net_device *dev, | ||
| 52 | enum can_state *state); | ||
| 53 | }; | ||
| 54 | |||
| 55 | struct net_device *alloc_candev(int sizeof_priv); | ||
| 56 | void free_candev(struct net_device *dev); | ||
| 57 | |||
| 58 | int open_candev(struct net_device *dev); | ||
| 59 | void close_candev(struct net_device *dev); | ||
| 60 | |||
| 61 | int register_candev(struct net_device *dev); | ||
| 62 | void unregister_candev(struct net_device *dev); | ||
| 63 | |||
| 64 | int can_restart_now(struct net_device *dev); | ||
| 65 | void can_bus_off(struct net_device *dev); | ||
| 66 | |||
| 67 | void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, int idx); | ||
| 68 | void can_get_echo_skb(struct net_device *dev, int idx); | ||
| 69 | |||
| 70 | #endif /* CAN_DEV_H */ | ||
diff --git a/include/linux/can/netlink.h b/include/linux/can/netlink.h new file mode 100644 index 000000000000..9ecbb7871c0e --- /dev/null +++ b/include/linux/can/netlink.h | |||
| @@ -0,0 +1,113 @@ | |||
| 1 | /* | ||
| 2 | * linux/can/netlink.h | ||
| 3 | * | ||
| 4 | * Definitions for the CAN netlink interface | ||
| 5 | * | ||
| 6 | * Copyright (c) 2009 Wolfgang Grandegger <wg@grandegger.com> | ||
| 7 | * | ||
| 8 | * Send feedback to <socketcan-users@lists.berlios.de> | ||
| 9 | * | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef CAN_NETLINK_H | ||
| 13 | #define CAN_NETLINK_H | ||
| 14 | |||
| 15 | #include <linux/types.h> | ||
| 16 | |||
| 17 | /* | ||
| 18 | * CAN bit-timing parameters | ||
| 19 | * | ||
| 20 | * For futher information, please read chapter "8 BIT TIMING | ||
| 21 | * REQUIREMENTS" of the "Bosch CAN Specification version 2.0" | ||
| 22 | * at http://www.semiconductors.bosch.de/pdf/can2spec.pdf. | ||
| 23 | */ | ||
| 24 | struct can_bittiming { | ||
| 25 | __u32 bitrate; /* Bit-rate in bits/second */ | ||
| 26 | __u32 sample_point; /* Sample point in one-tenth of a percent */ | ||
| 27 | __u32 tq; /* Time quanta (TQ) in nanoseconds */ | ||
| 28 | __u32 prop_seg; /* Propagation segment in TQs */ | ||
| 29 | __u32 phase_seg1; /* Phase buffer segment 1 in TQs */ | ||
| 30 | __u32 phase_seg2; /* Phase buffer segment 2 in TQs */ | ||
| 31 | __u32 sjw; /* Synchronisation jump width in TQs */ | ||
| 32 | __u32 brp; /* Bit-rate prescaler */ | ||
| 33 | }; | ||
| 34 | |||
| 35 | /* | ||
| 36 | * CAN harware-dependent bit-timing constant | ||
| 37 | * | ||
| 38 | * Used for calculating and checking bit-timing parameters | ||
| 39 | */ | ||
| 40 | struct can_bittiming_const { | ||
| 41 | char name[16]; /* Name of the CAN controller hardware */ | ||
| 42 | __u32 tseg1_min; /* Time segement 1 = prop_seg + phase_seg1 */ | ||
| 43 | __u32 tseg1_max; | ||
| 44 | __u32 tseg2_min; /* Time segement 2 = phase_seg2 */ | ||
| 45 | __u32 tseg2_max; | ||
| 46 | __u32 sjw_max; /* Synchronisation jump width */ | ||
| 47 | __u32 brp_min; /* Bit-rate prescaler */ | ||
| 48 | __u32 brp_max; | ||
| 49 | __u32 brp_inc; | ||
| 50 | }; | ||
| 51 | |||
| 52 | /* | ||
| 53 | * CAN clock parameters | ||
| 54 | */ | ||
| 55 | struct can_clock { | ||
| 56 | __u32 freq; /* CAN system clock frequency in Hz */ | ||
| 57 | }; | ||
| 58 | |||
| 59 | /* | ||
| 60 | * CAN operational and error states | ||
| 61 | */ | ||
| 62 | enum can_state { | ||
| 63 | CAN_STATE_ERROR_ACTIVE = 0, /* RX/TX error count < 96 */ | ||
| 64 | CAN_STATE_ERROR_WARNING, /* RX/TX error count < 128 */ | ||
| 65 | CAN_STATE_ERROR_PASSIVE, /* RX/TX error count < 256 */ | ||
| 66 | CAN_STATE_BUS_OFF, /* RX/TX error count >= 256 */ | ||
| 67 | CAN_STATE_STOPPED, /* Device is stopped */ | ||
| 68 | CAN_STATE_SLEEPING, /* Device is sleeping */ | ||
| 69 | CAN_STATE_MAX | ||
| 70 | }; | ||
| 71 | |||
| 72 | /* | ||
| 73 | * CAN controller mode | ||
| 74 | */ | ||
| 75 | struct can_ctrlmode { | ||
| 76 | __u32 mask; | ||
| 77 | __u32 flags; | ||
| 78 | }; | ||
| 79 | |||
| 80 | #define CAN_CTRLMODE_LOOPBACK 0x1 /* Loopback mode */ | ||
| 81 | #define CAN_CTRLMODE_LISTENONLY 0x2 /* Listen-only mode */ | ||
| 82 | #define CAN_CTRLMODE_3_SAMPLES 0x4 /* Triple sampling mode */ | ||
| 83 | |||
| 84 | /* | ||
| 85 | * CAN device statistics | ||
| 86 | */ | ||
| 87 | struct can_device_stats { | ||
| 88 | __u32 bus_error; /* Bus errors */ | ||
| 89 | __u32 error_warning; /* Changes to error warning state */ | ||
| 90 | __u32 error_passive; /* Changes to error passive state */ | ||
| 91 | __u32 bus_off; /* Changes to bus off state */ | ||
| 92 | __u32 arbitration_lost; /* Arbitration lost errors */ | ||
| 93 | __u32 restarts; /* CAN controller re-starts */ | ||
| 94 | }; | ||
| 95 | |||
| 96 | /* | ||
| 97 | * CAN netlink interface | ||
| 98 | */ | ||
| 99 | enum { | ||
| 100 | IFLA_CAN_UNSPEC, | ||
| 101 | IFLA_CAN_BITTIMING, | ||
| 102 | IFLA_CAN_BITTIMING_CONST, | ||
| 103 | IFLA_CAN_CLOCK, | ||
| 104 | IFLA_CAN_STATE, | ||
| 105 | IFLA_CAN_CTRLMODE, | ||
| 106 | IFLA_CAN_RESTART_MS, | ||
| 107 | IFLA_CAN_RESTART, | ||
| 108 | __IFLA_CAN_MAX | ||
| 109 | }; | ||
| 110 | |||
| 111 | #define IFLA_CAN_MAX (__IFLA_CAN_MAX - 1) | ||
| 112 | |||
| 113 | #endif /* CAN_NETLINK_H */ | ||
diff --git a/include/linux/can/platform/sja1000.h b/include/linux/can/platform/sja1000.h new file mode 100644 index 000000000000..01ee2aeb048d --- /dev/null +++ b/include/linux/can/platform/sja1000.h | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | #ifndef _CAN_PLATFORM_SJA1000_H_ | ||
| 2 | #define _CAN_PLATFORM_SJA1000_H_ | ||
| 3 | |||
| 4 | /* clock divider register */ | ||
| 5 | #define CDR_CLKOUT_MASK 0x07 | ||
| 6 | #define CDR_CLK_OFF 0x08 /* Clock off (CLKOUT pin) */ | ||
| 7 | #define CDR_RXINPEN 0x20 /* TX1 output is RX irq output */ | ||
| 8 | #define CDR_CBP 0x40 /* CAN input comparator bypass */ | ||
| 9 | #define CDR_PELICAN 0x80 /* PeliCAN mode */ | ||
| 10 | |||
| 11 | /* output control register */ | ||
| 12 | #define OCR_MODE_BIPHASE 0x00 | ||
| 13 | #define OCR_MODE_TEST 0x01 | ||
| 14 | #define OCR_MODE_NORMAL 0x02 | ||
| 15 | #define OCR_MODE_CLOCK 0x03 | ||
| 16 | #define OCR_MODE_MASK 0x07 | ||
| 17 | #define OCR_TX0_INVERT 0x04 | ||
| 18 | #define OCR_TX0_PULLDOWN 0x08 | ||
| 19 | #define OCR_TX0_PULLUP 0x10 | ||
| 20 | #define OCR_TX0_PUSHPULL 0x18 | ||
| 21 | #define OCR_TX1_INVERT 0x20 | ||
| 22 | #define OCR_TX1_PULLDOWN 0x40 | ||
| 23 | #define OCR_TX1_PULLUP 0x80 | ||
| 24 | #define OCR_TX1_PUSHPULL 0xc0 | ||
| 25 | #define OCR_TX_MASK 0xfc | ||
| 26 | #define OCR_TX_SHIFT 2 | ||
| 27 | |||
| 28 | struct sja1000_platform_data { | ||
| 29 | u32 clock; /* CAN bus oscillator frequency in Hz */ | ||
| 30 | |||
| 31 | u8 ocr; /* output control register */ | ||
| 32 | u8 cdr; /* clock divider register */ | ||
| 33 | }; | ||
| 34 | |||
| 35 | #endif /* !_CAN_PLATFORM_SJA1000_H_ */ | ||
diff --git a/include/linux/cb710.h b/include/linux/cb710.h new file mode 100644 index 000000000000..63bc9a4d2926 --- /dev/null +++ b/include/linux/cb710.h | |||
| @@ -0,0 +1,231 @@ | |||
| 1 | /* | ||
| 2 | * cb710/cb710.h | ||
| 3 | * | ||
| 4 | * Copyright by Michał Mirosław, 2008-2009 | ||
| 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 | #ifndef LINUX_CB710_DRIVER_H | ||
| 11 | #define LINUX_CB710_DRIVER_H | ||
| 12 | |||
| 13 | #include <linux/io.h> | ||
| 14 | #include <linux/interrupt.h> | ||
| 15 | #include <linux/spinlock.h> | ||
| 16 | #include <linux/pci.h> | ||
| 17 | #include <linux/platform_device.h> | ||
| 18 | #include <linux/mmc/host.h> | ||
| 19 | |||
| 20 | struct cb710_slot; | ||
| 21 | |||
| 22 | typedef int (*cb710_irq_handler_t)(struct cb710_slot *); | ||
| 23 | |||
| 24 | /* per-virtual-slot structure */ | ||
| 25 | struct cb710_slot { | ||
| 26 | struct platform_device pdev; | ||
| 27 | void __iomem *iobase; | ||
| 28 | cb710_irq_handler_t irq_handler; | ||
| 29 | }; | ||
| 30 | |||
| 31 | /* per-device structure */ | ||
| 32 | struct cb710_chip { | ||
| 33 | struct pci_dev *pdev; | ||
| 34 | void __iomem *iobase; | ||
| 35 | unsigned platform_id; | ||
| 36 | #ifdef CONFIG_CB710_DEBUG_ASSUMPTIONS | ||
| 37 | atomic_t slot_refs_count; | ||
| 38 | #endif | ||
| 39 | unsigned slot_mask; | ||
| 40 | unsigned slots; | ||
| 41 | spinlock_t irq_lock; | ||
| 42 | struct cb710_slot slot[0]; | ||
| 43 | }; | ||
| 44 | |||
| 45 | /* NOTE: cb710_chip.slots is modified only during device init/exit and | ||
| 46 | * they are all serialized wrt themselves */ | ||
| 47 | |||
| 48 | /* cb710_chip.slot_mask values */ | ||
| 49 | #define CB710_SLOT_MMC 1 | ||
| 50 | #define CB710_SLOT_MS 2 | ||
| 51 | #define CB710_SLOT_SM 4 | ||
| 52 | |||
| 53 | /* slot port accessors - so the logic is more clear in the code */ | ||
| 54 | #define CB710_PORT_ACCESSORS(t) \ | ||
| 55 | static inline void cb710_write_port_##t(struct cb710_slot *slot, \ | ||
| 56 | unsigned port, u##t value) \ | ||
| 57 | { \ | ||
| 58 | iowrite##t(value, slot->iobase + port); \ | ||
| 59 | } \ | ||
| 60 | \ | ||
| 61 | static inline u##t cb710_read_port_##t(struct cb710_slot *slot, \ | ||
| 62 | unsigned port) \ | ||
| 63 | { \ | ||
| 64 | return ioread##t(slot->iobase + port); \ | ||
| 65 | } \ | ||
| 66 | \ | ||
| 67 | static inline void cb710_modify_port_##t(struct cb710_slot *slot, \ | ||
| 68 | unsigned port, u##t set, u##t clear) \ | ||
| 69 | { \ | ||
| 70 | iowrite##t( \ | ||
| 71 | (ioread##t(slot->iobase + port) & ~clear)|set, \ | ||
| 72 | slot->iobase + port); \ | ||
| 73 | } | ||
| 74 | |||
| 75 | CB710_PORT_ACCESSORS(8) | ||
| 76 | CB710_PORT_ACCESSORS(16) | ||
| 77 | CB710_PORT_ACCESSORS(32) | ||
| 78 | |||
| 79 | void cb710_pci_update_config_reg(struct pci_dev *pdev, | ||
| 80 | int reg, uint32_t and, uint32_t xor); | ||
| 81 | void cb710_set_irq_handler(struct cb710_slot *slot, | ||
| 82 | cb710_irq_handler_t handler); | ||
| 83 | |||
| 84 | /* some device struct walking */ | ||
| 85 | |||
| 86 | static inline struct cb710_slot *cb710_pdev_to_slot( | ||
| 87 | struct platform_device *pdev) | ||
| 88 | { | ||
| 89 | return container_of(pdev, struct cb710_slot, pdev); | ||
| 90 | } | ||
| 91 | |||
| 92 | static inline struct cb710_chip *cb710_slot_to_chip(struct cb710_slot *slot) | ||
| 93 | { | ||
| 94 | return dev_get_drvdata(slot->pdev.dev.parent); | ||
| 95 | } | ||
| 96 | |||
| 97 | static inline struct device *cb710_slot_dev(struct cb710_slot *slot) | ||
| 98 | { | ||
| 99 | return &slot->pdev.dev; | ||
| 100 | } | ||
| 101 | |||
| 102 | static inline struct device *cb710_chip_dev(struct cb710_chip *chip) | ||
| 103 | { | ||
| 104 | return &chip->pdev->dev; | ||
| 105 | } | ||
| 106 | |||
| 107 | /* debugging aids */ | ||
| 108 | |||
| 109 | #ifdef CONFIG_CB710_DEBUG | ||
| 110 | void cb710_dump_regs(struct cb710_chip *chip, unsigned dump); | ||
| 111 | #else | ||
| 112 | #define cb710_dump_regs(c, d) do {} while (0) | ||
| 113 | #endif | ||
| 114 | |||
| 115 | #define CB710_DUMP_REGS_MMC 0x0F | ||
| 116 | #define CB710_DUMP_REGS_MS 0x30 | ||
| 117 | #define CB710_DUMP_REGS_SM 0xC0 | ||
| 118 | #define CB710_DUMP_REGS_ALL 0xFF | ||
| 119 | #define CB710_DUMP_REGS_MASK 0xFF | ||
| 120 | |||
| 121 | #define CB710_DUMP_ACCESS_8 0x100 | ||
| 122 | #define CB710_DUMP_ACCESS_16 0x200 | ||
| 123 | #define CB710_DUMP_ACCESS_32 0x400 | ||
| 124 | #define CB710_DUMP_ACCESS_ALL 0x700 | ||
| 125 | #define CB710_DUMP_ACCESS_MASK 0x700 | ||
| 126 | |||
| 127 | #endif /* LINUX_CB710_DRIVER_H */ | ||
| 128 | /* | ||
| 129 | * cb710/sgbuf2.h | ||
| 130 | * | ||
| 131 | * Copyright by Michał Mirosław, 2008-2009 | ||
| 132 | * | ||
| 133 | * This program is free software; you can redistribute it and/or modify | ||
| 134 | * it under the terms of the GNU General Public License version 2 as | ||
| 135 | * published by the Free Software Foundation. | ||
| 136 | */ | ||
| 137 | #ifndef LINUX_CB710_SG_H | ||
| 138 | #define LINUX_CB710_SG_H | ||
| 139 | |||
| 140 | #include <linux/highmem.h> | ||
| 141 | #include <linux/scatterlist.h> | ||
| 142 | |||
| 143 | /** | ||
| 144 | * cb710_sg_miter_stop_writing - stop mapping iteration after writing | ||
| 145 | * @miter: sg mapping iter to be stopped | ||
| 146 | * | ||
| 147 | * Description: | ||
| 148 | * Stops mapping iterator @miter. @miter should have been started | ||
| 149 | * started using sg_miter_start(). A stopped iteration can be | ||
| 150 | * resumed by calling sg_miter_next() on it. This is useful when | ||
| 151 | * resources (kmap) need to be released during iteration. | ||
| 152 | * | ||
| 153 | * This is a convenience wrapper that will be optimized out for arches | ||
| 154 | * that don't need flush_kernel_dcache_page(). | ||
| 155 | * | ||
| 156 | * Context: | ||
| 157 | * IRQ disabled if the SG_MITER_ATOMIC is set. Don't care otherwise. | ||
| 158 | */ | ||
| 159 | static inline void cb710_sg_miter_stop_writing(struct sg_mapping_iter *miter) | ||
| 160 | { | ||
| 161 | if (miter->page) | ||
| 162 | flush_kernel_dcache_page(miter->page); | ||
| 163 | sg_miter_stop(miter); | ||
| 164 | } | ||
| 165 | |||
| 166 | /* | ||
| 167 | * 32-bit PIO mapping sg iterator | ||
| 168 | * | ||
| 169 | * Hides scatterlist access issues - fragment boundaries, alignment, page | ||
| 170 | * mapping - for drivers using 32-bit-word-at-a-time-PIO (ie. PCI devices | ||
| 171 | * without DMA support). | ||
| 172 | * | ||
| 173 | * Best-case reading (transfer from device): | ||
| 174 | * sg_miter_start(); | ||
| 175 | * cb710_sg_dwiter_write_from_io(); | ||
| 176 | * cb710_sg_miter_stop_writing(); | ||
| 177 | * | ||
| 178 | * Best-case writing (transfer to device): | ||
| 179 | * sg_miter_start(); | ||
| 180 | * cb710_sg_dwiter_read_to_io(); | ||
| 181 | * sg_miter_stop(); | ||
| 182 | */ | ||
| 183 | |||
| 184 | uint32_t cb710_sg_dwiter_read_next_block(struct sg_mapping_iter *miter); | ||
| 185 | void cb710_sg_dwiter_write_next_block(struct sg_mapping_iter *miter, uint32_t data); | ||
| 186 | |||
| 187 | /** | ||
| 188 | * cb710_sg_dwiter_write_from_io - transfer data to mapped buffer from 32-bit IO port | ||
| 189 | * @miter: sg mapping iter | ||
| 190 | * @port: PIO port - IO or MMIO address | ||
| 191 | * @count: number of 32-bit words to transfer | ||
| 192 | * | ||
| 193 | * Description: | ||
| 194 | * Reads @count 32-bit words from register @port and stores it in | ||
| 195 | * buffer iterated by @miter. Data that would overflow the buffer | ||
| 196 | * is silently ignored. Iterator is advanced by 4*@count bytes | ||
| 197 | * or to the buffer's end whichever is closer. | ||
| 198 | * | ||
| 199 | * Context: | ||
| 200 | * IRQ disabled if the SG_MITER_ATOMIC is set. Don't care otherwise. | ||
| 201 | */ | ||
| 202 | static inline void cb710_sg_dwiter_write_from_io(struct sg_mapping_iter *miter, | ||
| 203 | void __iomem *port, size_t count) | ||
| 204 | { | ||
| 205 | while (count-- > 0) | ||
| 206 | cb710_sg_dwiter_write_next_block(miter, ioread32(port)); | ||
| 207 | } | ||
| 208 | |||
| 209 | /** | ||
| 210 | * cb710_sg_dwiter_read_to_io - transfer data to 32-bit IO port from mapped buffer | ||
| 211 | * @miter: sg mapping iter | ||
| 212 | * @port: PIO port - IO or MMIO address | ||
| 213 | * @count: number of 32-bit words to transfer | ||
| 214 | * | ||
| 215 | * Description: | ||
| 216 | * Writes @count 32-bit words to register @port from buffer iterated | ||
| 217 | * through @miter. If buffer ends before @count words are written | ||
| 218 | * missing data is replaced by zeroes. @miter is advanced by 4*@count | ||
| 219 | * bytes or to the buffer's end whichever is closer. | ||
| 220 | * | ||
| 221 | * Context: | ||
| 222 | * IRQ disabled if the SG_MITER_ATOMIC is set. Don't care otherwise. | ||
| 223 | */ | ||
| 224 | static inline void cb710_sg_dwiter_read_to_io(struct sg_mapping_iter *miter, | ||
| 225 | void __iomem *port, size_t count) | ||
| 226 | { | ||
| 227 | while (count-- > 0) | ||
| 228 | iowrite32(cb710_sg_dwiter_read_next_block(miter), port); | ||
| 229 | } | ||
| 230 | |||
| 231 | #endif /* LINUX_CB710_SG_H */ | ||
diff --git a/include/linux/cdev.h b/include/linux/cdev.h index fb4591977b03..f389e319a454 100644 --- a/include/linux/cdev.h +++ b/include/linux/cdev.h | |||
| @@ -28,6 +28,8 @@ int cdev_add(struct cdev *, dev_t, unsigned); | |||
| 28 | 28 | ||
| 29 | void cdev_del(struct cdev *); | 29 | void cdev_del(struct cdev *); |
| 30 | 30 | ||
| 31 | int cdev_index(struct inode *inode); | ||
| 32 | |||
| 31 | void cd_forget(struct inode *); | 33 | void cd_forget(struct inode *); |
| 32 | 34 | ||
| 33 | extern struct backing_dev_info directly_mappable_cdev_bdi; | 35 | extern struct backing_dev_info directly_mappable_cdev_bdi; |
diff --git a/include/linux/clk.h b/include/linux/clk.h index 1db9bbf444a3..1d37f42ac294 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h | |||
| @@ -142,4 +142,17 @@ struct clk *clk_get_parent(struct clk *clk); | |||
| 142 | */ | 142 | */ |
| 143 | struct clk *clk_get_sys(const char *dev_id, const char *con_id); | 143 | struct clk *clk_get_sys(const char *dev_id, const char *con_id); |
| 144 | 144 | ||
| 145 | /** | ||
| 146 | * clk_add_alias - add a new clock alias | ||
| 147 | * @alias: name for clock alias | ||
| 148 | * @alias_dev_name: device name | ||
| 149 | * @id: platform specific clock name | ||
| 150 | * @dev: device | ||
| 151 | * | ||
| 152 | * Allows using generic clock names for drivers by adding a new alias. | ||
| 153 | * Assumes clkdev, see clkdev.h for more info. | ||
| 154 | */ | ||
| 155 | int clk_add_alias(const char *alias, const char *alias_dev_name, char *id, | ||
| 156 | struct device *dev); | ||
| 157 | |||
| 145 | #endif | 158 | #endif |
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 3a1dbba4d3ae..20a100fe2b4f 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h | |||
| @@ -143,3 +143,12 @@ extern void clockevents_notify(unsigned long reason, void *arg); | |||
| 143 | #endif | 143 | #endif |
| 144 | 144 | ||
| 145 | #endif | 145 | #endif |
| 146 | |||
| 147 | #ifdef CONFIG_GENERIC_CLOCKEVENTS | ||
| 148 | extern ktime_t clockevents_get_next_event(int cpu); | ||
| 149 | #else | ||
| 150 | static inline ktime_t clockevents_get_next_event(int cpu) | ||
| 151 | { | ||
| 152 | return (ktime_t) { .tv64 = KTIME_MAX }; | ||
| 153 | } | ||
| 154 | #endif | ||
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 37bcb50a4d7c..04fb5135b4e1 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
| @@ -261,6 +261,11 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); | |||
| 261 | # define __section(S) __attribute__ ((__section__(#S))) | 261 | # define __section(S) __attribute__ ((__section__(#S))) |
| 262 | #endif | 262 | #endif |
| 263 | 263 | ||
| 264 | /* Are two types/vars the same type (ignoring qualifiers)? */ | ||
| 265 | #ifndef __same_type | ||
| 266 | # define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) | ||
| 267 | #endif | ||
| 268 | |||
| 264 | /* | 269 | /* |
| 265 | * Prevent the compiler from merging or refetching accesses. The compiler | 270 | * Prevent the compiler from merging or refetching accesses. The compiler |
| 266 | * is also forbidden from reordering successive instances of ACCESS_ONCE(), | 271 | * is also forbidden from reordering successive instances of ACCESS_ONCE(), |
diff --git a/include/linux/cramfs_fs.h b/include/linux/cramfs_fs.h index 3be4e5a27d82..6fc2bed368b8 100644 --- a/include/linux/cramfs_fs.h +++ b/include/linux/cramfs_fs.h | |||
| @@ -2,9 +2,8 @@ | |||
| 2 | #define __CRAMFS_H | 2 | #define __CRAMFS_H |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <linux/magic.h> | ||
| 5 | 6 | ||
| 6 | #define CRAMFS_MAGIC 0x28cd3d45 /* some random number */ | ||
| 7 | #define CRAMFS_MAGIC_WEND 0x453dcd28 /* magic number with the wrong endianess */ | ||
| 8 | #define CRAMFS_SIGNATURE "Compressed ROMFS" | 7 | #define CRAMFS_SIGNATURE "Compressed ROMFS" |
| 9 | 8 | ||
| 10 | /* | 9 | /* |
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 97978004338d..30b93b2a01a4 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
| @@ -353,6 +353,11 @@ static inline int d_unhashed(struct dentry *dentry) | |||
| 353 | return (dentry->d_flags & DCACHE_UNHASHED); | 353 | return (dentry->d_flags & DCACHE_UNHASHED); |
| 354 | } | 354 | } |
| 355 | 355 | ||
| 356 | static inline int d_unlinked(struct dentry *dentry) | ||
| 357 | { | ||
| 358 | return d_unhashed(dentry) && !IS_ROOT(dentry); | ||
| 359 | } | ||
| 360 | |||
| 356 | static inline struct dentry *dget_parent(struct dentry *dentry) | 361 | static inline struct dentry *dget_parent(struct dentry *dentry) |
| 357 | { | 362 | { |
| 358 | struct dentry *ret; | 363 | struct dentry *ret; |
| @@ -370,7 +375,7 @@ static inline int d_mountpoint(struct dentry *dentry) | |||
| 370 | return dentry->d_mounted; | 375 | return dentry->d_mounted; |
| 371 | } | 376 | } |
| 372 | 377 | ||
| 373 | extern struct vfsmount *lookup_mnt(struct vfsmount *, struct dentry *); | 378 | extern struct vfsmount *lookup_mnt(struct path *); |
| 374 | extern struct dentry *lookup_create(struct nameidata *nd, int is_dir); | 379 | extern struct dentry *lookup_create(struct nameidata *nd, int is_dir); |
| 375 | 380 | ||
| 376 | extern int sysctl_vfs_cache_pressure; | 381 | extern int sysctl_vfs_cache_pressure; |
diff --git a/include/linux/device.h b/include/linux/device.h index 5d5c197bad45..a4a7b10aaa48 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -62,8 +62,6 @@ struct bus_type { | |||
| 62 | void (*shutdown)(struct device *dev); | 62 | void (*shutdown)(struct device *dev); |
| 63 | 63 | ||
| 64 | int (*suspend)(struct device *dev, pm_message_t state); | 64 | int (*suspend)(struct device *dev, pm_message_t state); |
| 65 | int (*suspend_late)(struct device *dev, pm_message_t state); | ||
| 66 | int (*resume_early)(struct device *dev); | ||
| 67 | int (*resume)(struct device *dev); | 65 | int (*resume)(struct device *dev); |
| 68 | 66 | ||
| 69 | struct dev_pm_ops *pm; | 67 | struct dev_pm_ops *pm; |
| @@ -291,9 +289,6 @@ struct device_type { | |||
| 291 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); | 289 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); |
| 292 | void (*release)(struct device *dev); | 290 | void (*release)(struct device *dev); |
| 293 | 291 | ||
| 294 | int (*suspend)(struct device *dev, pm_message_t state); | ||
| 295 | int (*resume)(struct device *dev); | ||
| 296 | |||
| 297 | struct dev_pm_ops *pm; | 292 | struct dev_pm_ops *pm; |
| 298 | }; | 293 | }; |
| 299 | 294 | ||
diff --git a/include/linux/dlm.h b/include/linux/dlm.h index b9cd38603fd8..0b3518c42356 100644 --- a/include/linux/dlm.h +++ b/include/linux/dlm.h | |||
| @@ -81,8 +81,8 @@ struct dlm_lksb { | |||
| 81 | * the cluster, the calling node joins it. | 81 | * the cluster, the calling node joins it. |
| 82 | */ | 82 | */ |
| 83 | 83 | ||
| 84 | int dlm_new_lockspace(char *name, int namelen, dlm_lockspace_t **lockspace, | 84 | int dlm_new_lockspace(const char *name, int namelen, |
| 85 | uint32_t flags, int lvblen); | 85 | dlm_lockspace_t **lockspace, uint32_t flags, int lvblen); |
| 86 | 86 | ||
| 87 | /* | 87 | /* |
| 88 | * dlm_release_lockspace | 88 | * dlm_release_lockspace |
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index a1f17abba7dc..3d7a6687d247 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h | |||
| @@ -182,6 +182,33 @@ static inline unsigned compare_ether_addr_64bits(const u8 addr1[6+2], | |||
| 182 | return compare_ether_addr(addr1, addr2); | 182 | return compare_ether_addr(addr1, addr2); |
| 183 | #endif | 183 | #endif |
| 184 | } | 184 | } |
| 185 | |||
| 186 | /** | ||
| 187 | * is_etherdev_addr - Tell if given Ethernet address belongs to the device. | ||
| 188 | * @dev: Pointer to a device structure | ||
| 189 | * @addr: Pointer to a six-byte array containing the Ethernet address | ||
| 190 | * | ||
| 191 | * Compare passed address with all addresses of the device. Return true if the | ||
| 192 | * address if one of the device addresses. | ||
| 193 | * | ||
| 194 | * Note that this function calls compare_ether_addr_64bits() so take care of | ||
| 195 | * the right padding. | ||
| 196 | */ | ||
| 197 | static inline bool is_etherdev_addr(const struct net_device *dev, | ||
| 198 | const u8 addr[6 + 2]) | ||
| 199 | { | ||
| 200 | struct netdev_hw_addr *ha; | ||
| 201 | int res = 1; | ||
| 202 | |||
| 203 | rcu_read_lock(); | ||
| 204 | for_each_dev_addr(dev, ha) { | ||
| 205 | res = compare_ether_addr_64bits(addr, ha->addr); | ||
| 206 | if (!res) | ||
| 207 | break; | ||
| 208 | } | ||
| 209 | rcu_read_unlock(); | ||
| 210 | return !res; | ||
| 211 | } | ||
| 185 | #endif /* __KERNEL__ */ | 212 | #endif /* __KERNEL__ */ |
| 186 | 213 | ||
| 187 | /** | 214 | /** |
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 131b127b70f8..9b660bd2e2b3 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h | |||
| @@ -26,11 +26,14 @@ struct ethtool_cmd { | |||
| 26 | __u8 phy_address; | 26 | __u8 phy_address; |
| 27 | __u8 transceiver; /* Which transceiver to use */ | 27 | __u8 transceiver; /* Which transceiver to use */ |
| 28 | __u8 autoneg; /* Enable or disable autonegotiation */ | 28 | __u8 autoneg; /* Enable or disable autonegotiation */ |
| 29 | __u8 mdio_support; | ||
| 29 | __u32 maxtxpkt; /* Tx pkts before generating tx int */ | 30 | __u32 maxtxpkt; /* Tx pkts before generating tx int */ |
| 30 | __u32 maxrxpkt; /* Rx pkts before generating rx int */ | 31 | __u32 maxrxpkt; /* Rx pkts before generating rx int */ |
| 31 | __u16 speed_hi; | 32 | __u16 speed_hi; |
| 32 | __u16 reserved2; | 33 | __u8 eth_tp_mdix; |
| 33 | __u32 reserved[3]; | 34 | __u8 reserved2; |
| 35 | __u32 lp_advertising; /* Features the link partner advertises */ | ||
| 36 | __u32 reserved[2]; | ||
| 34 | }; | 37 | }; |
| 35 | 38 | ||
| 36 | static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep, | 39 | static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep, |
| @@ -563,6 +566,11 @@ struct ethtool_ops { | |||
| 563 | #define SUPPORTED_Pause (1 << 13) | 566 | #define SUPPORTED_Pause (1 << 13) |
| 564 | #define SUPPORTED_Asym_Pause (1 << 14) | 567 | #define SUPPORTED_Asym_Pause (1 << 14) |
| 565 | #define SUPPORTED_2500baseX_Full (1 << 15) | 568 | #define SUPPORTED_2500baseX_Full (1 << 15) |
| 569 | #define SUPPORTED_Backplane (1 << 16) | ||
| 570 | #define SUPPORTED_1000baseKX_Full (1 << 17) | ||
| 571 | #define SUPPORTED_10000baseKX4_Full (1 << 18) | ||
| 572 | #define SUPPORTED_10000baseKR_Full (1 << 19) | ||
| 573 | #define SUPPORTED_10000baseR_FEC (1 << 20) | ||
| 566 | 574 | ||
| 567 | /* Indicates what features are advertised by the interface. */ | 575 | /* Indicates what features are advertised by the interface. */ |
| 568 | #define ADVERTISED_10baseT_Half (1 << 0) | 576 | #define ADVERTISED_10baseT_Half (1 << 0) |
| @@ -581,6 +589,11 @@ struct ethtool_ops { | |||
| 581 | #define ADVERTISED_Pause (1 << 13) | 589 | #define ADVERTISED_Pause (1 << 13) |
| 582 | #define ADVERTISED_Asym_Pause (1 << 14) | 590 | #define ADVERTISED_Asym_Pause (1 << 14) |
| 583 | #define ADVERTISED_2500baseX_Full (1 << 15) | 591 | #define ADVERTISED_2500baseX_Full (1 << 15) |
| 592 | #define ADVERTISED_Backplane (1 << 16) | ||
| 593 | #define ADVERTISED_1000baseKX_Full (1 << 17) | ||
| 594 | #define ADVERTISED_10000baseKX4_Full (1 << 18) | ||
| 595 | #define ADVERTISED_10000baseKR_Full (1 << 19) | ||
| 596 | #define ADVERTISED_10000baseR_FEC (1 << 20) | ||
| 584 | 597 | ||
| 585 | /* The following are all involved in forcing a particular link | 598 | /* The following are all involved in forcing a particular link |
| 586 | * mode for the device for setting things. When getting the | 599 | * mode for the device for setting things. When getting the |
| @@ -605,6 +618,7 @@ struct ethtool_ops { | |||
| 605 | #define PORT_MII 0x02 | 618 | #define PORT_MII 0x02 |
| 606 | #define PORT_FIBRE 0x03 | 619 | #define PORT_FIBRE 0x03 |
| 607 | #define PORT_BNC 0x04 | 620 | #define PORT_BNC 0x04 |
| 621 | #define PORT_OTHER 0xff | ||
| 608 | 622 | ||
| 609 | /* Which transceiver to use. */ | 623 | /* Which transceiver to use. */ |
| 610 | #define XCVR_INTERNAL 0x00 | 624 | #define XCVR_INTERNAL 0x00 |
| @@ -619,6 +633,11 @@ struct ethtool_ops { | |||
| 619 | #define AUTONEG_DISABLE 0x00 | 633 | #define AUTONEG_DISABLE 0x00 |
| 620 | #define AUTONEG_ENABLE 0x01 | 634 | #define AUTONEG_ENABLE 0x01 |
| 621 | 635 | ||
| 636 | /* Mode MDI or MDI-X */ | ||
| 637 | #define ETH_TP_MDI_INVALID 0x00 | ||
| 638 | #define ETH_TP_MDI 0x01 | ||
| 639 | #define ETH_TP_MDI_X 0x02 | ||
| 640 | |||
| 622 | /* Wake-On-Lan options. */ | 641 | /* Wake-On-Lan options. */ |
| 623 | #define WAKE_PHY (1 << 0) | 642 | #define WAKE_PHY (1 << 0) |
| 624 | #define WAKE_UCAST (1 << 1) | 643 | #define WAKE_UCAST (1 << 1) |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 323b5ce474c1..ede84fa7da5d 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -729,8 +729,8 @@ struct inode { | |||
| 729 | struct timespec i_atime; | 729 | struct timespec i_atime; |
| 730 | struct timespec i_mtime; | 730 | struct timespec i_mtime; |
| 731 | struct timespec i_ctime; | 731 | struct timespec i_ctime; |
| 732 | unsigned int i_blkbits; | ||
| 733 | blkcnt_t i_blocks; | 732 | blkcnt_t i_blocks; |
| 733 | unsigned int i_blkbits; | ||
| 734 | unsigned short i_bytes; | 734 | unsigned short i_bytes; |
| 735 | umode_t i_mode; | 735 | umode_t i_mode; |
| 736 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ | 736 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ |
| @@ -751,7 +751,6 @@ struct inode { | |||
| 751 | struct block_device *i_bdev; | 751 | struct block_device *i_bdev; |
| 752 | struct cdev *i_cdev; | 752 | struct cdev *i_cdev; |
| 753 | }; | 753 | }; |
| 754 | int i_cindex; | ||
| 755 | 754 | ||
| 756 | __u32 i_generation; | 755 | __u32 i_generation; |
| 757 | 756 | ||
| @@ -1321,7 +1320,7 @@ struct super_block { | |||
| 1321 | struct rw_semaphore s_umount; | 1320 | struct rw_semaphore s_umount; |
| 1322 | struct mutex s_lock; | 1321 | struct mutex s_lock; |
| 1323 | int s_count; | 1322 | int s_count; |
| 1324 | int s_need_sync_fs; | 1323 | int s_need_sync; |
| 1325 | atomic_t s_active; | 1324 | atomic_t s_active; |
| 1326 | #ifdef CONFIG_SECURITY | 1325 | #ifdef CONFIG_SECURITY |
| 1327 | void *s_security; | 1326 | void *s_security; |
| @@ -1372,11 +1371,6 @@ struct super_block { | |||
| 1372 | * generic_show_options() | 1371 | * generic_show_options() |
| 1373 | */ | 1372 | */ |
| 1374 | char *s_options; | 1373 | char *s_options; |
| 1375 | |||
| 1376 | /* | ||
| 1377 | * storage for asynchronous operations | ||
| 1378 | */ | ||
| 1379 | struct list_head s_async_list; | ||
| 1380 | }; | 1374 | }; |
| 1381 | 1375 | ||
| 1382 | extern struct timespec current_fs_time(struct super_block *sb); | 1376 | extern struct timespec current_fs_time(struct super_block *sb); |
| @@ -1800,7 +1794,7 @@ extern struct vfsmount *kern_mount_data(struct file_system_type *, void *data); | |||
| 1800 | extern int may_umount_tree(struct vfsmount *); | 1794 | extern int may_umount_tree(struct vfsmount *); |
| 1801 | extern int may_umount(struct vfsmount *); | 1795 | extern int may_umount(struct vfsmount *); |
| 1802 | extern long do_mount(char *, char *, char *, unsigned long, void *); | 1796 | extern long do_mount(char *, char *, char *, unsigned long, void *); |
| 1803 | extern struct vfsmount *collect_mounts(struct vfsmount *, struct dentry *); | 1797 | extern struct vfsmount *collect_mounts(struct path *); |
| 1804 | extern void drop_collected_mounts(struct vfsmount *); | 1798 | extern void drop_collected_mounts(struct vfsmount *); |
| 1805 | 1799 | ||
| 1806 | extern int vfs_statfs(struct dentry *, struct kstatfs *); | 1800 | extern int vfs_statfs(struct dentry *, struct kstatfs *); |
| @@ -1947,8 +1941,6 @@ extern struct super_block *freeze_bdev(struct block_device *); | |||
| 1947 | extern void emergency_thaw_all(void); | 1941 | extern void emergency_thaw_all(void); |
| 1948 | extern int thaw_bdev(struct block_device *bdev, struct super_block *sb); | 1942 | extern int thaw_bdev(struct block_device *bdev, struct super_block *sb); |
| 1949 | extern int fsync_bdev(struct block_device *); | 1943 | extern int fsync_bdev(struct block_device *); |
| 1950 | extern int fsync_super(struct super_block *); | ||
| 1951 | extern int fsync_no_super(struct block_device *); | ||
| 1952 | #else | 1944 | #else |
| 1953 | static inline void bd_forget(struct inode *inode) {} | 1945 | static inline void bd_forget(struct inode *inode) {} |
| 1954 | static inline int sync_blockdev(struct block_device *bdev) { return 0; } | 1946 | static inline int sync_blockdev(struct block_device *bdev) { return 0; } |
| @@ -1964,6 +1956,7 @@ static inline int thaw_bdev(struct block_device *bdev, struct super_block *sb) | |||
| 1964 | return 0; | 1956 | return 0; |
| 1965 | } | 1957 | } |
| 1966 | #endif | 1958 | #endif |
| 1959 | extern int sync_filesystem(struct super_block *); | ||
| 1967 | extern const struct file_operations def_blk_fops; | 1960 | extern const struct file_operations def_blk_fops; |
| 1968 | extern const struct file_operations def_chr_fops; | 1961 | extern const struct file_operations def_chr_fops; |
| 1969 | extern const struct file_operations bad_sock_fops; | 1962 | extern const struct file_operations bad_sock_fops; |
| @@ -2082,12 +2075,8 @@ extern int filemap_fdatawrite_range(struct address_space *mapping, | |||
| 2082 | 2075 | ||
| 2083 | extern int vfs_fsync(struct file *file, struct dentry *dentry, int datasync); | 2076 | extern int vfs_fsync(struct file *file, struct dentry *dentry, int datasync); |
| 2084 | extern void sync_supers(void); | 2077 | extern void sync_supers(void); |
| 2085 | extern void sync_filesystems(int wait); | ||
| 2086 | extern void __fsync_super(struct super_block *sb); | ||
| 2087 | extern void emergency_sync(void); | 2078 | extern void emergency_sync(void); |
| 2088 | extern void emergency_remount(void); | 2079 | extern void emergency_remount(void); |
| 2089 | extern int do_remount_sb(struct super_block *sb, int flags, | ||
| 2090 | void *data, int force); | ||
| 2091 | #ifdef CONFIG_BLOCK | 2080 | #ifdef CONFIG_BLOCK |
| 2092 | extern sector_t bmap(struct inode *, sector_t); | 2081 | extern sector_t bmap(struct inode *, sector_t); |
| 2093 | #endif | 2082 | #endif |
| @@ -2356,6 +2345,8 @@ extern void simple_release_fs(struct vfsmount **mount, int *count); | |||
| 2356 | extern ssize_t simple_read_from_buffer(void __user *to, size_t count, | 2345 | extern ssize_t simple_read_from_buffer(void __user *to, size_t count, |
| 2357 | loff_t *ppos, const void *from, size_t available); | 2346 | loff_t *ppos, const void *from, size_t available); |
| 2358 | 2347 | ||
| 2348 | extern int simple_fsync(struct file *, struct dentry *, int); | ||
| 2349 | |||
| 2359 | #ifdef CONFIG_MIGRATION | 2350 | #ifdef CONFIG_MIGRATION |
| 2360 | extern int buffer_migrate_page(struct address_space *, | 2351 | extern int buffer_migrate_page(struct address_space *, |
| 2361 | struct page *, struct page *); | 2352 | struct page *, struct page *); |
diff --git a/include/linux/fs_enet_pd.h b/include/linux/fs_enet_pd.h index 8300cab30f9a..51b793466ff3 100644 --- a/include/linux/fs_enet_pd.h +++ b/include/linux/fs_enet_pd.h | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #define FS_ENET_PD_H | 17 | #define FS_ENET_PD_H |
| 18 | 18 | ||
| 19 | #include <linux/string.h> | 19 | #include <linux/string.h> |
| 20 | #include <linux/of_mdio.h> | ||
| 20 | #include <asm/types.h> | 21 | #include <asm/types.h> |
| 21 | 22 | ||
| 22 | #define FS_ENET_NAME "fs_enet" | 23 | #define FS_ENET_NAME "fs_enet" |
| @@ -130,10 +131,7 @@ struct fs_platform_info { | |||
| 130 | 131 | ||
| 131 | u32 device_flags; | 132 | u32 device_flags; |
| 132 | 133 | ||
| 133 | int phy_addr; /* the phy address (-1 no phy) */ | 134 | struct device_node *phy_node; |
| 134 | char bus_id[16]; | ||
| 135 | int phy_irq; /* the phy irq (if it exists) */ | ||
| 136 | |||
| 137 | const struct fs_mii_bus_info *bus_info; | 135 | const struct fs_mii_bus_info *bus_info; |
| 138 | 136 | ||
| 139 | int rx_ring, tx_ring; /* number of buffers on rx */ | 137 | int rx_ring, tx_ring; /* number of buffers on rx */ |
diff --git a/include/linux/fuse.h b/include/linux/fuse.h index 162e5defe683..d41ed593f79f 100644 --- a/include/linux/fuse.h +++ b/include/linux/fuse.h | |||
| @@ -121,6 +121,13 @@ struct fuse_file_lock { | |||
| 121 | #define FUSE_BIG_WRITES (1 << 5) | 121 | #define FUSE_BIG_WRITES (1 << 5) |
| 122 | 122 | ||
| 123 | /** | 123 | /** |
| 124 | * CUSE INIT request/reply flags | ||
| 125 | * | ||
| 126 | * CUSE_UNRESTRICTED_IOCTL: use unrestricted ioctl | ||
| 127 | */ | ||
| 128 | #define CUSE_UNRESTRICTED_IOCTL (1 << 0) | ||
| 129 | |||
| 130 | /** | ||
| 124 | * Release flags | 131 | * Release flags |
| 125 | */ | 132 | */ |
| 126 | #define FUSE_RELEASE_FLUSH (1 << 0) | 133 | #define FUSE_RELEASE_FLUSH (1 << 0) |
| @@ -210,6 +217,9 @@ enum fuse_opcode { | |||
| 210 | FUSE_DESTROY = 38, | 217 | FUSE_DESTROY = 38, |
| 211 | FUSE_IOCTL = 39, | 218 | FUSE_IOCTL = 39, |
| 212 | FUSE_POLL = 40, | 219 | FUSE_POLL = 40, |
| 220 | |||
| 221 | /* CUSE specific operations */ | ||
| 222 | CUSE_INIT = 4096, | ||
| 213 | }; | 223 | }; |
| 214 | 224 | ||
| 215 | enum fuse_notify_code { | 225 | enum fuse_notify_code { |
| @@ -401,6 +411,27 @@ struct fuse_init_out { | |||
| 401 | __u32 max_write; | 411 | __u32 max_write; |
| 402 | }; | 412 | }; |
| 403 | 413 | ||
| 414 | #define CUSE_INIT_INFO_MAX 4096 | ||
| 415 | |||
| 416 | struct cuse_init_in { | ||
| 417 | __u32 major; | ||
| 418 | __u32 minor; | ||
| 419 | __u32 unused; | ||
| 420 | __u32 flags; | ||
| 421 | }; | ||
| 422 | |||
| 423 | struct cuse_init_out { | ||
| 424 | __u32 major; | ||
| 425 | __u32 minor; | ||
| 426 | __u32 unused; | ||
| 427 | __u32 flags; | ||
| 428 | __u32 max_read; | ||
| 429 | __u32 max_write; | ||
| 430 | __u32 dev_major; /* chardev major */ | ||
| 431 | __u32 dev_minor; /* chardev minor */ | ||
| 432 | __u32 spare[10]; | ||
| 433 | }; | ||
| 434 | |||
| 404 | struct fuse_interrupt_in { | 435 | struct fuse_interrupt_in { |
| 405 | __u64 unique; | 436 | __u64 unique; |
| 406 | }; | 437 | }; |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 149fda264c86..7cbd38d363a2 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
| @@ -114,6 +114,7 @@ struct hd_struct { | |||
| 114 | #define GENHD_FL_UP 16 | 114 | #define GENHD_FL_UP 16 |
| 115 | #define GENHD_FL_SUPPRESS_PARTITION_INFO 32 | 115 | #define GENHD_FL_SUPPRESS_PARTITION_INFO 32 |
| 116 | #define GENHD_FL_EXT_DEVT 64 /* allow extended devt */ | 116 | #define GENHD_FL_EXT_DEVT 64 /* allow extended devt */ |
| 117 | #define GENHD_FL_NATIVE_CAPACITY 128 | ||
| 117 | 118 | ||
| 118 | #define BLK_SCSI_MAX_CMDS (256) | 119 | #define BLK_SCSI_MAX_CMDS (256) |
| 119 | #define BLK_SCSI_CMD_PER_LONG (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8)) | 120 | #define BLK_SCSI_CMD_PER_LONG (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8)) |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 0bbc15f54536..3760e7c5de02 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
| @@ -85,6 +85,9 @@ struct vm_area_struct; | |||
| 85 | __GFP_NOWARN|__GFP_REPEAT|__GFP_NOFAIL|\ | 85 | __GFP_NOWARN|__GFP_REPEAT|__GFP_NOFAIL|\ |
| 86 | __GFP_NORETRY|__GFP_NOMEMALLOC) | 86 | __GFP_NORETRY|__GFP_NOMEMALLOC) |
| 87 | 87 | ||
| 88 | /* Control slab gfp mask during early boot */ | ||
| 89 | #define SLAB_GFP_BOOT_MASK __GFP_BITS_MASK & ~(__GFP_WAIT|__GFP_IO|__GFP_FS) | ||
| 90 | |||
| 88 | /* Control allocation constraints */ | 91 | /* Control allocation constraints */ |
| 89 | #define GFP_CONSTRAINT_MASK (__GFP_HARDWALL|__GFP_THISNODE) | 92 | #define GFP_CONSTRAINT_MASK (__GFP_HARDWALL|__GFP_THISNODE) |
| 90 | 93 | ||
diff --git a/include/linux/hid.h b/include/linux/hid.h index a72876e43589..53489fd4d700 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
| @@ -238,6 +238,42 @@ struct hid_item { | |||
| 238 | #define HID_GD_RIGHT 0x00010092 | 238 | #define HID_GD_RIGHT 0x00010092 |
| 239 | #define HID_GD_LEFT 0x00010093 | 239 | #define HID_GD_LEFT 0x00010093 |
| 240 | 240 | ||
| 241 | #define HID_DG_DIGITIZER 0x000d0001 | ||
| 242 | #define HID_DG_PEN 0x000d0002 | ||
| 243 | #define HID_DG_LIGHTPEN 0x000d0003 | ||
| 244 | #define HID_DG_TOUCHSCREEN 0x000d0004 | ||
| 245 | #define HID_DG_TOUCHPAD 0x000d0005 | ||
| 246 | #define HID_DG_STYLUS 0x000d0020 | ||
| 247 | #define HID_DG_PUCK 0x000d0021 | ||
| 248 | #define HID_DG_FINGER 0x000d0022 | ||
| 249 | #define HID_DG_TIPPRESSURE 0x000d0030 | ||
| 250 | #define HID_DG_BARRELPRESSURE 0x000d0031 | ||
| 251 | #define HID_DG_INRANGE 0x000d0032 | ||
| 252 | #define HID_DG_TOUCH 0x000d0033 | ||
| 253 | #define HID_DG_UNTOUCH 0x000d0034 | ||
| 254 | #define HID_DG_TAP 0x000d0035 | ||
| 255 | #define HID_DG_TABLETFUNCTIONKEY 0x000d0039 | ||
| 256 | #define HID_DG_PROGRAMCHANGEKEY 0x000d003a | ||
| 257 | #define HID_DG_INVERT 0x000d003c | ||
| 258 | #define HID_DG_TIPSWITCH 0x000d0042 | ||
| 259 | #define HID_DG_TIPSWITCH2 0x000d0043 | ||
| 260 | #define HID_DG_BARRELSWITCH 0x000d0044 | ||
| 261 | #define HID_DG_ERASER 0x000d0045 | ||
| 262 | #define HID_DG_TABLETPICK 0x000d0046 | ||
| 263 | /* | ||
| 264 | * as of May 20, 2009 the usages below are not yet in the official USB spec | ||
| 265 | * but are being pushed by Microsft as described in their paper "Digitizer | ||
| 266 | * Drivers for Windows Touch and Pen-Based Computers" | ||
| 267 | */ | ||
| 268 | #define HID_DG_CONFIDENCE 0x000d0047 | ||
| 269 | #define HID_DG_WIDTH 0x000d0048 | ||
| 270 | #define HID_DG_HEIGHT 0x000d0049 | ||
| 271 | #define HID_DG_CONTACTID 0x000d0051 | ||
| 272 | #define HID_DG_INPUTMODE 0x000d0052 | ||
| 273 | #define HID_DG_DEVICEINDEX 0x000d0053 | ||
| 274 | #define HID_DG_CONTACTCOUNT 0x000d0054 | ||
| 275 | #define HID_DG_CONTACTMAX 0x000d0055 | ||
| 276 | |||
| 241 | /* | 277 | /* |
| 242 | * HID report types --- Ouch! HID spec says 1 2 3! | 278 | * HID report types --- Ouch! HID spec says 1 2 3! |
| 243 | */ | 279 | */ |
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 0d2f7c8a33d6..7400900de94a 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
| @@ -30,8 +30,11 @@ struct hrtimer_cpu_base; | |||
| 30 | * Mode arguments of xxx_hrtimer functions: | 30 | * Mode arguments of xxx_hrtimer functions: |
| 31 | */ | 31 | */ |
| 32 | enum hrtimer_mode { | 32 | enum hrtimer_mode { |
| 33 | HRTIMER_MODE_ABS, /* Time value is absolute */ | 33 | HRTIMER_MODE_ABS = 0x0, /* Time value is absolute */ |
| 34 | HRTIMER_MODE_REL, /* Time value is relative to now */ | 34 | HRTIMER_MODE_REL = 0x1, /* Time value is relative to now */ |
| 35 | HRTIMER_MODE_PINNED = 0x02, /* Timer is bound to CPU */ | ||
| 36 | HRTIMER_MODE_ABS_PINNED = 0x02, | ||
| 37 | HRTIMER_MODE_REL_PINNED = 0x03, | ||
| 35 | }; | 38 | }; |
| 36 | 39 | ||
| 37 | /* | 40 | /* |
diff --git a/include/linux/i2c-ocores.h b/include/linux/i2c-ocores.h index 8ed591b0887e..4d5e57ff6614 100644 --- a/include/linux/i2c-ocores.h +++ b/include/linux/i2c-ocores.h | |||
| @@ -14,6 +14,8 @@ | |||
| 14 | struct ocores_i2c_platform_data { | 14 | struct ocores_i2c_platform_data { |
| 15 | u32 regstep; /* distance between registers */ | 15 | u32 regstep; /* distance between registers */ |
| 16 | u32 clock_khz; /* input clock in kHz */ | 16 | u32 clock_khz; /* input clock in kHz */ |
| 17 | u8 num_devices; /* number of devices in the devices list */ | ||
| 18 | struct i2c_board_info const *devices; /* devices connected to the bus */ | ||
| 17 | }; | 19 | }; |
| 18 | 20 | ||
| 19 | #endif /* _LINUX_I2C_OCORES_H */ | 21 | #endif /* _LINUX_I2C_OCORES_H */ |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 867cb68d8461..a6c6a2fad7c8 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -178,7 +178,7 @@ typedef u8 hwif_chipset_t; | |||
| 178 | /* | 178 | /* |
| 179 | * Structure to hold all information about the location of this port | 179 | * Structure to hold all information about the location of this port |
| 180 | */ | 180 | */ |
| 181 | typedef struct hw_regs_s { | 181 | struct ide_hw { |
| 182 | union { | 182 | union { |
| 183 | struct ide_io_ports io_ports; | 183 | struct ide_io_ports io_ports; |
| 184 | unsigned long io_ports_array[IDE_NR_PORTS]; | 184 | unsigned long io_ports_array[IDE_NR_PORTS]; |
| @@ -186,12 +186,11 @@ typedef struct hw_regs_s { | |||
| 186 | 186 | ||
| 187 | int irq; /* our irq number */ | 187 | int irq; /* our irq number */ |
| 188 | ide_ack_intr_t *ack_intr; /* acknowledge interrupt */ | 188 | ide_ack_intr_t *ack_intr; /* acknowledge interrupt */ |
| 189 | hwif_chipset_t chipset; | ||
| 190 | struct device *dev, *parent; | 189 | struct device *dev, *parent; |
| 191 | unsigned long config; | 190 | unsigned long config; |
| 192 | } hw_regs_t; | 191 | }; |
| 193 | 192 | ||
| 194 | static inline void ide_std_init_ports(hw_regs_t *hw, | 193 | static inline void ide_std_init_ports(struct ide_hw *hw, |
| 195 | unsigned long io_addr, | 194 | unsigned long io_addr, |
| 196 | unsigned long ctl_addr) | 195 | unsigned long ctl_addr) |
| 197 | { | 196 | { |
| @@ -218,21 +217,12 @@ static inline void ide_std_init_ports(hw_regs_t *hw, | |||
| 218 | 217 | ||
| 219 | /* | 218 | /* |
| 220 | * Special Driver Flags | 219 | * Special Driver Flags |
| 221 | * | ||
| 222 | * set_geometry : respecify drive geometry | ||
| 223 | * recalibrate : seek to cyl 0 | ||
| 224 | * set_multmode : set multmode count | ||
| 225 | * reserved : unused | ||
| 226 | */ | 220 | */ |
| 227 | typedef union { | 221 | enum { |
| 228 | unsigned all : 8; | 222 | IDE_SFLAG_SET_GEOMETRY = (1 << 0), |
| 229 | struct { | 223 | IDE_SFLAG_RECALIBRATE = (1 << 1), |
| 230 | unsigned set_geometry : 1; | 224 | IDE_SFLAG_SET_MULTMODE = (1 << 2), |
| 231 | unsigned recalibrate : 1; | 225 | }; |
| 232 | unsigned set_multmode : 1; | ||
| 233 | unsigned reserved : 5; | ||
| 234 | } b; | ||
| 235 | } special_t; | ||
| 236 | 226 | ||
| 237 | /* | 227 | /* |
| 238 | * Status returned from various ide_ functions | 228 | * Status returned from various ide_ functions |
| @@ -391,6 +381,7 @@ struct ide_drive_s; | |||
| 391 | struct ide_disk_ops { | 381 | struct ide_disk_ops { |
| 392 | int (*check)(struct ide_drive_s *, const char *); | 382 | int (*check)(struct ide_drive_s *, const char *); |
| 393 | int (*get_capacity)(struct ide_drive_s *); | 383 | int (*get_capacity)(struct ide_drive_s *); |
| 384 | u64 (*set_capacity)(struct ide_drive_s *, u64); | ||
| 394 | void (*setup)(struct ide_drive_s *); | 385 | void (*setup)(struct ide_drive_s *); |
| 395 | void (*flush)(struct ide_drive_s *); | 386 | void (*flush)(struct ide_drive_s *); |
| 396 | int (*init_media)(struct ide_drive_s *, struct gendisk *); | 387 | int (*init_media)(struct ide_drive_s *, struct gendisk *); |
| @@ -468,6 +459,8 @@ enum { | |||
| 468 | IDE_DFLAG_NICE1 = (1 << 5), | 459 | IDE_DFLAG_NICE1 = (1 << 5), |
| 469 | /* device is physically present */ | 460 | /* device is physically present */ |
| 470 | IDE_DFLAG_PRESENT = (1 << 6), | 461 | IDE_DFLAG_PRESENT = (1 << 6), |
| 462 | /* disable Host Protected Area */ | ||
| 463 | IDE_DFLAG_NOHPA = (1 << 7), | ||
| 471 | /* id read from device (synthetic if not set) */ | 464 | /* id read from device (synthetic if not set) */ |
| 472 | IDE_DFLAG_ID_READ = (1 << 8), | 465 | IDE_DFLAG_ID_READ = (1 << 8), |
| 473 | IDE_DFLAG_NOPROBE = (1 << 9), | 466 | IDE_DFLAG_NOPROBE = (1 << 9), |
| @@ -506,6 +499,7 @@ enum { | |||
| 506 | /* write protect */ | 499 | /* write protect */ |
| 507 | IDE_DFLAG_WP = (1 << 29), | 500 | IDE_DFLAG_WP = (1 << 29), |
| 508 | IDE_DFLAG_FORMAT_IN_PROGRESS = (1 << 30), | 501 | IDE_DFLAG_FORMAT_IN_PROGRESS = (1 << 30), |
| 502 | IDE_DFLAG_NIEN_QUIRK = (1 << 31), | ||
| 509 | }; | 503 | }; |
| 510 | 504 | ||
| 511 | struct ide_drive_s { | 505 | struct ide_drive_s { |
| @@ -530,14 +524,13 @@ struct ide_drive_s { | |||
| 530 | unsigned long sleep; /* sleep until this time */ | 524 | unsigned long sleep; /* sleep until this time */ |
| 531 | unsigned long timeout; /* max time to wait for irq */ | 525 | unsigned long timeout; /* max time to wait for irq */ |
| 532 | 526 | ||
| 533 | special_t special; /* special action flags */ | 527 | u8 special_flags; /* special action flags */ |
| 534 | 528 | ||
| 535 | u8 select; /* basic drive/head select reg value */ | 529 | u8 select; /* basic drive/head select reg value */ |
| 536 | u8 retry_pio; /* retrying dma capable host in pio */ | 530 | u8 retry_pio; /* retrying dma capable host in pio */ |
| 537 | u8 waiting_for_dma; /* dma currently in progress */ | 531 | u8 waiting_for_dma; /* dma currently in progress */ |
| 538 | u8 dma; /* atapi dma flag */ | 532 | u8 dma; /* atapi dma flag */ |
| 539 | 533 | ||
| 540 | u8 quirk_list; /* considered quirky, set for a specific host */ | ||
| 541 | u8 init_speed; /* transfer rate set at boot */ | 534 | u8 init_speed; /* transfer rate set at boot */ |
| 542 | u8 current_speed; /* current transfer rate set */ | 535 | u8 current_speed; /* current transfer rate set */ |
| 543 | u8 desired_speed; /* desired transfer rate set */ | 536 | u8 desired_speed; /* desired transfer rate set */ |
| @@ -562,8 +555,7 @@ struct ide_drive_s { | |||
| 562 | unsigned int drive_data; /* used by set_pio_mode/dev_select() */ | 555 | unsigned int drive_data; /* used by set_pio_mode/dev_select() */ |
| 563 | unsigned int failures; /* current failure count */ | 556 | unsigned int failures; /* current failure count */ |
| 564 | unsigned int max_failures; /* maximum allowed failure count */ | 557 | unsigned int max_failures; /* maximum allowed failure count */ |
| 565 | u64 probed_capacity;/* initial reported media capacity (ide-cd only currently) */ | 558 | u64 probed_capacity;/* initial/native media capacity */ |
| 566 | |||
| 567 | u64 capacity64; /* total number of sectors */ | 559 | u64 capacity64; /* total number of sectors */ |
| 568 | 560 | ||
| 569 | int lun; /* logical unit */ | 561 | int lun; /* logical unit */ |
| @@ -1222,7 +1214,7 @@ static inline int ide_pci_is_in_compatibility_mode(struct pci_dev *dev) | |||
| 1222 | } | 1214 | } |
| 1223 | 1215 | ||
| 1224 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, | 1216 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, |
| 1225 | hw_regs_t *, hw_regs_t **); | 1217 | struct ide_hw *, struct ide_hw **); |
| 1226 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); | 1218 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); |
| 1227 | 1219 | ||
| 1228 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI | 1220 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI |
| @@ -1461,16 +1453,18 @@ static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {} | |||
| 1461 | void ide_register_region(struct gendisk *); | 1453 | void ide_register_region(struct gendisk *); |
| 1462 | void ide_unregister_region(struct gendisk *); | 1454 | void ide_unregister_region(struct gendisk *); |
| 1463 | 1455 | ||
| 1456 | void ide_check_nien_quirk_list(ide_drive_t *); | ||
| 1464 | void ide_undecoded_slave(ide_drive_t *); | 1457 | void ide_undecoded_slave(ide_drive_t *); |
| 1465 | 1458 | ||
| 1466 | void ide_port_apply_params(ide_hwif_t *); | 1459 | void ide_port_apply_params(ide_hwif_t *); |
| 1467 | int ide_sysfs_register_port(ide_hwif_t *); | 1460 | int ide_sysfs_register_port(ide_hwif_t *); |
| 1468 | 1461 | ||
| 1469 | struct ide_host *ide_host_alloc(const struct ide_port_info *, hw_regs_t **); | 1462 | struct ide_host *ide_host_alloc(const struct ide_port_info *, struct ide_hw **, |
| 1463 | unsigned int); | ||
| 1470 | void ide_host_free(struct ide_host *); | 1464 | void ide_host_free(struct ide_host *); |
| 1471 | int ide_host_register(struct ide_host *, const struct ide_port_info *, | 1465 | int ide_host_register(struct ide_host *, const struct ide_port_info *, |
| 1472 | hw_regs_t **); | 1466 | struct ide_hw **); |
| 1473 | int ide_host_add(const struct ide_port_info *, hw_regs_t **, | 1467 | int ide_host_add(const struct ide_port_info *, struct ide_hw **, unsigned int, |
| 1474 | struct ide_host **); | 1468 | struct ide_host **); |
| 1475 | void ide_host_remove(struct ide_host *); | 1469 | void ide_host_remove(struct ide_host *); |
| 1476 | int ide_legacy_device_add(const struct ide_port_info *, unsigned long); | 1470 | int ide_legacy_device_add(const struct ide_port_info *, unsigned long); |
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index 4b501b48ce86..a9173d5434d1 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
| @@ -493,6 +493,7 @@ struct ieee80211s_hdr { | |||
| 493 | /* Mesh flags */ | 493 | /* Mesh flags */ |
| 494 | #define MESH_FLAGS_AE_A4 0x1 | 494 | #define MESH_FLAGS_AE_A4 0x1 |
| 495 | #define MESH_FLAGS_AE_A5_A6 0x2 | 495 | #define MESH_FLAGS_AE_A5_A6 0x2 |
| 496 | #define MESH_FLAGS_AE 0x3 | ||
| 496 | #define MESH_FLAGS_PS_DEEP 0x4 | 497 | #define MESH_FLAGS_PS_DEEP 0x4 |
| 497 | 498 | ||
| 498 | /** | 499 | /** |
| @@ -540,10 +541,10 @@ struct ieee80211_tim_ie { | |||
| 540 | u8 dtim_period; | 541 | u8 dtim_period; |
| 541 | u8 bitmap_ctrl; | 542 | u8 bitmap_ctrl; |
| 542 | /* variable size: 1 - 251 bytes */ | 543 | /* variable size: 1 - 251 bytes */ |
| 543 | u8 virtual_map[0]; | 544 | u8 virtual_map[1]; |
| 544 | } __attribute__ ((packed)); | 545 | } __attribute__ ((packed)); |
| 545 | 546 | ||
| 546 | #define WLAN_SA_QUERY_TR_ID_LEN 16 | 547 | #define WLAN_SA_QUERY_TR_ID_LEN 2 |
| 547 | 548 | ||
| 548 | struct ieee80211_mgmt { | 549 | struct ieee80211_mgmt { |
| 549 | __le16 frame_control; | 550 | __le16 frame_control; |
| @@ -1068,8 +1069,12 @@ enum ieee80211_category { | |||
| 1068 | WLAN_CATEGORY_DLS = 2, | 1069 | WLAN_CATEGORY_DLS = 2, |
| 1069 | WLAN_CATEGORY_BACK = 3, | 1070 | WLAN_CATEGORY_BACK = 3, |
| 1070 | WLAN_CATEGORY_PUBLIC = 4, | 1071 | WLAN_CATEGORY_PUBLIC = 4, |
| 1072 | WLAN_CATEGORY_HT = 7, | ||
| 1071 | WLAN_CATEGORY_SA_QUERY = 8, | 1073 | WLAN_CATEGORY_SA_QUERY = 8, |
| 1074 | WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9, | ||
| 1072 | WLAN_CATEGORY_WMM = 17, | 1075 | WLAN_CATEGORY_WMM = 17, |
| 1076 | WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126, | ||
| 1077 | WLAN_CATEGORY_VENDOR_SPECIFIC = 127, | ||
| 1073 | }; | 1078 | }; |
| 1074 | 1079 | ||
| 1075 | /* SPECTRUM_MGMT action code */ | 1080 | /* SPECTRUM_MGMT action code */ |
| @@ -1081,6 +1086,15 @@ enum ieee80211_spectrum_mgmt_actioncode { | |||
| 1081 | WLAN_ACTION_SPCT_CHL_SWITCH = 4, | 1086 | WLAN_ACTION_SPCT_CHL_SWITCH = 4, |
| 1082 | }; | 1087 | }; |
| 1083 | 1088 | ||
| 1089 | /* Security key length */ | ||
| 1090 | enum ieee80211_key_len { | ||
| 1091 | WLAN_KEY_LEN_WEP40 = 5, | ||
| 1092 | WLAN_KEY_LEN_WEP104 = 13, | ||
| 1093 | WLAN_KEY_LEN_CCMP = 16, | ||
| 1094 | WLAN_KEY_LEN_TKIP = 32, | ||
| 1095 | WLAN_KEY_LEN_AES_CMAC = 16, | ||
| 1096 | }; | ||
| 1097 | |||
| 1084 | /* | 1098 | /* |
| 1085 | * IEEE 802.11-2007 7.3.2.9 Country information element | 1099 | * IEEE 802.11-2007 7.3.2.9 Country information element |
| 1086 | * | 1100 | * |
| @@ -1261,7 +1275,9 @@ static inline bool ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr) | |||
| 1261 | if (ieee80211_has_protected(hdr->frame_control)) | 1275 | if (ieee80211_has_protected(hdr->frame_control)) |
| 1262 | return true; | 1276 | return true; |
| 1263 | category = ((u8 *) hdr) + 24; | 1277 | category = ((u8 *) hdr) + 24; |
| 1264 | return *category != WLAN_CATEGORY_PUBLIC; | 1278 | return *category != WLAN_CATEGORY_PUBLIC && |
| 1279 | *category != WLAN_CATEGORY_HT && | ||
| 1280 | *category != WLAN_CATEGORY_VENDOR_SPECIFIC; | ||
| 1265 | } | 1281 | } |
| 1266 | 1282 | ||
| 1267 | return false; | 1283 | return false; |
| @@ -1383,4 +1399,43 @@ static inline int ieee80211_freq_to_ofdm_chan(int s_freq, int freq) | |||
| 1383 | return -1; | 1399 | return -1; |
| 1384 | } | 1400 | } |
| 1385 | 1401 | ||
| 1402 | /** | ||
| 1403 | * ieee80211_tu_to_usec - convert time units (TU) to microseconds | ||
| 1404 | * @tu: the TUs | ||
| 1405 | */ | ||
| 1406 | static inline unsigned long ieee80211_tu_to_usec(unsigned long tu) | ||
| 1407 | { | ||
| 1408 | return 1024 * tu; | ||
| 1409 | } | ||
| 1410 | |||
| 1411 | /** | ||
| 1412 | * ieee80211_check_tim - check if AID bit is set in TIM | ||
| 1413 | * @tim: the TIM IE | ||
| 1414 | * @tim_len: length of the TIM IE | ||
| 1415 | * @aid: the AID to look for | ||
| 1416 | */ | ||
| 1417 | static inline bool ieee80211_check_tim(struct ieee80211_tim_ie *tim, | ||
| 1418 | u8 tim_len, u16 aid) | ||
| 1419 | { | ||
| 1420 | u8 mask; | ||
| 1421 | u8 index, indexn1, indexn2; | ||
| 1422 | |||
| 1423 | if (unlikely(!tim || tim_len < sizeof(*tim))) | ||
| 1424 | return false; | ||
| 1425 | |||
| 1426 | aid &= 0x3fff; | ||
| 1427 | index = aid / 8; | ||
| 1428 | mask = 1 << (aid & 7); | ||
| 1429 | |||
| 1430 | indexn1 = tim->bitmap_ctrl & 0xfe; | ||
| 1431 | indexn2 = tim_len + indexn1 - 4; | ||
| 1432 | |||
| 1433 | if (index < indexn1 || index > indexn2) | ||
| 1434 | return false; | ||
| 1435 | |||
| 1436 | index -= indexn1; | ||
| 1437 | |||
| 1438 | return !!(tim->virtual_map[index] & mask); | ||
| 1439 | } | ||
| 1440 | |||
| 1386 | #endif /* LINUX_IEEE80211_H */ | 1441 | #endif /* LINUX_IEEE80211_H */ |
diff --git a/include/linux/if.h b/include/linux/if.h index 1108f3e099e3..b9a6229f3be7 100644 --- a/include/linux/if.h +++ b/include/linux/if.h | |||
| @@ -67,6 +67,9 @@ | |||
| 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 | #define IFF_WAN_HDLC 0x200 /* WAN HDLC device */ |
| 70 | #define IFF_XMIT_DST_RELEASE 0x400 /* dev_hard_start_xmit() is allowed to | ||
| 71 | * release skb->dst | ||
| 72 | */ | ||
| 70 | 73 | ||
| 71 | #define IF_GET_IFACE 0x0001 /* for querying only */ | 74 | #define IF_GET_IFACE 0x0001 /* for querying only */ |
| 72 | #define IF_GET_PROTO 0x0002 | 75 | #define IF_GET_PROTO 0x0002 |
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h index 5ff89809a581..b554300ef8bf 100644 --- a/include/linux/if_arp.h +++ b/include/linux/if_arp.h | |||
| @@ -86,6 +86,8 @@ | |||
| 86 | #define ARPHRD_IEEE80211 801 /* IEEE 802.11 */ | 86 | #define ARPHRD_IEEE80211 801 /* IEEE 802.11 */ |
| 87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ | 87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ |
| 88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ | 88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ |
| 89 | #define ARPHRD_IEEE802154 804 | ||
| 90 | #define ARPHRD_IEEE802154_PHY 805 | ||
| 89 | 91 | ||
| 90 | #define ARPHRD_PHONET 820 /* PhoNet media type */ | 92 | #define ARPHRD_PHONET 820 /* PhoNet media type */ |
| 91 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ | 93 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ |
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h index cfe4fe1b7132..ae3a1871413d 100644 --- a/include/linux/if_ether.h +++ b/include/linux/if_ether.h | |||
| @@ -79,6 +79,7 @@ | |||
| 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_FCOE 0x8906 /* Fibre Channel over Ethernet */ |
| 82 | #define ETH_P_FIP 0x8914 /* FCoE Initialization Protocol */ | ||
| 82 | #define ETH_P_EDSA 0xDADA /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */ | 83 | #define ETH_P_EDSA 0xDADA /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 83 | 84 | ||
| 84 | /* | 85 | /* |
| @@ -106,6 +107,7 @@ | |||
| 106 | #define ETH_P_DSA 0x001B /* Distributed Switch Arch. */ | 107 | #define ETH_P_DSA 0x001B /* Distributed Switch Arch. */ |
| 107 | #define ETH_P_TRAILER 0x001C /* Trailer switch tagging */ | 108 | #define ETH_P_TRAILER 0x001C /* Trailer switch tagging */ |
| 108 | #define ETH_P_PHONET 0x00F5 /* Nokia Phonet frames */ | 109 | #define ETH_P_PHONET 0x00F5 /* Nokia Phonet frames */ |
| 110 | #define ETH_P_IEEE802154 0x00F6 /* IEEE802.15.4 frame */ | ||
| 109 | 111 | ||
| 110 | /* | 112 | /* |
| 111 | * This is an Ethernet frame header. | 113 | * This is an Ethernet frame header. |
diff --git a/include/linux/if_packet.h b/include/linux/if_packet.h index 18db0668065a..dea7d6b7cf98 100644 --- a/include/linux/if_packet.h +++ b/include/linux/if_packet.h | |||
| @@ -46,6 +46,8 @@ struct sockaddr_ll | |||
| 46 | #define PACKET_VERSION 10 | 46 | #define PACKET_VERSION 10 |
| 47 | #define PACKET_HDRLEN 11 | 47 | #define PACKET_HDRLEN 11 |
| 48 | #define PACKET_RESERVE 12 | 48 | #define PACKET_RESERVE 12 |
| 49 | #define PACKET_TX_RING 13 | ||
| 50 | #define PACKET_LOSS 14 | ||
| 49 | 51 | ||
| 50 | struct tpacket_stats | 52 | struct tpacket_stats |
| 51 | { | 53 | { |
| @@ -63,14 +65,22 @@ struct tpacket_auxdata | |||
| 63 | __u16 tp_vlan_tci; | 65 | __u16 tp_vlan_tci; |
| 64 | }; | 66 | }; |
| 65 | 67 | ||
| 68 | /* Rx ring - header status */ | ||
| 69 | #define TP_STATUS_KERNEL 0x0 | ||
| 70 | #define TP_STATUS_USER 0x1 | ||
| 71 | #define TP_STATUS_COPY 0x2 | ||
| 72 | #define TP_STATUS_LOSING 0x4 | ||
| 73 | #define TP_STATUS_CSUMNOTREADY 0x8 | ||
| 74 | |||
| 75 | /* Tx ring - header status */ | ||
| 76 | #define TP_STATUS_AVAILABLE 0x0 | ||
| 77 | #define TP_STATUS_SEND_REQUEST 0x1 | ||
| 78 | #define TP_STATUS_SENDING 0x2 | ||
| 79 | #define TP_STATUS_WRONG_FORMAT 0x4 | ||
| 80 | |||
| 66 | struct tpacket_hdr | 81 | struct tpacket_hdr |
| 67 | { | 82 | { |
| 68 | unsigned long tp_status; | 83 | unsigned long tp_status; |
| 69 | #define TP_STATUS_KERNEL 0 | ||
| 70 | #define TP_STATUS_USER 1 | ||
| 71 | #define TP_STATUS_COPY 2 | ||
| 72 | #define TP_STATUS_LOSING 4 | ||
| 73 | #define TP_STATUS_CSUMNOTREADY 8 | ||
| 74 | unsigned int tp_len; | 84 | unsigned int tp_len; |
| 75 | unsigned int tp_snaplen; | 85 | unsigned int tp_snaplen; |
| 76 | unsigned short tp_mac; | 86 | unsigned short tp_mac; |
| @@ -135,5 +145,6 @@ struct packet_mreq | |||
| 135 | #define PACKET_MR_MULTICAST 0 | 145 | #define PACKET_MR_MULTICAST 0 |
| 136 | #define PACKET_MR_PROMISC 1 | 146 | #define PACKET_MR_PROMISC 1 |
| 137 | #define PACKET_MR_ALLMULTI 2 | 147 | #define PACKET_MR_ALLMULTI 2 |
| 148 | #define PACKET_MR_UNICAST 3 | ||
| 138 | 149 | ||
| 139 | #endif | 150 | #endif |
diff --git a/include/linux/if_tun.h b/include/linux/if_tun.h index 049d6c9428db..915ba5789f0e 100644 --- a/include/linux/if_tun.h +++ b/include/linux/if_tun.h | |||
| @@ -55,6 +55,7 @@ | |||
| 55 | #define IFF_NO_PI 0x1000 | 55 | #define IFF_NO_PI 0x1000 |
| 56 | #define IFF_ONE_QUEUE 0x2000 | 56 | #define IFF_ONE_QUEUE 0x2000 |
| 57 | #define IFF_VNET_HDR 0x4000 | 57 | #define IFF_VNET_HDR 0x4000 |
| 58 | #define IFF_TUN_EXCL 0x8000 | ||
| 58 | 59 | ||
| 59 | /* Features for GSO (TUNSETOFFLOAD). */ | 60 | /* Features for GSO (TUNSETOFFLOAD). */ |
| 60 | #define TUN_F_CSUM 0x01 /* You can hand me unchecksummed packets. */ | 61 | #define TUN_F_CSUM 0x01 /* You can hand me unchecksummed packets. */ |
diff --git a/include/linux/if_tunnel.h b/include/linux/if_tunnel.h index 5a9aae4adb44..5eb9b0f857e0 100644 --- a/include/linux/if_tunnel.h +++ b/include/linux/if_tunnel.h | |||
| @@ -44,7 +44,7 @@ struct ip_tunnel_prl { | |||
| 44 | __u16 flags; | 44 | __u16 flags; |
| 45 | __u16 __reserved; | 45 | __u16 __reserved; |
| 46 | __u32 datalen; | 46 | __u32 datalen; |
| 47 | __u32 __reserved2; | 47 | __u32 rs_delay; |
| 48 | /* data follows */ | 48 | /* data follows */ |
| 49 | }; | 49 | }; |
| 50 | 50 | ||
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index e1ff5b14310e..7ff9af1d0f05 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h | |||
| @@ -118,8 +118,7 @@ extern int vlan_hwaccel_do_receive(struct sk_buff *skb); | |||
| 118 | extern int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, | 118 | extern int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, |
| 119 | unsigned int vlan_tci, struct sk_buff *skb); | 119 | unsigned int vlan_tci, struct sk_buff *skb); |
| 120 | extern int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, | 120 | extern int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, |
| 121 | unsigned int vlan_tci, | 121 | unsigned int vlan_tci); |
| 122 | struct napi_gro_fraginfo *info); | ||
| 123 | 122 | ||
| 124 | #else | 123 | #else |
| 125 | static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) | 124 | static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) |
| @@ -154,8 +153,7 @@ static inline int vlan_gro_receive(struct napi_struct *napi, | |||
| 154 | } | 153 | } |
| 155 | 154 | ||
| 156 | static inline int vlan_gro_frags(struct napi_struct *napi, | 155 | static inline int vlan_gro_frags(struct napi_struct *napi, |
| 157 | struct vlan_group *grp, unsigned int vlan_tci, | 156 | struct vlan_group *grp, unsigned int vlan_tci) |
| 158 | struct napi_gro_fraginfo *info) | ||
| 159 | { | 157 | { |
| 160 | return NET_RX_DROP; | 158 | return NET_RX_DROP; |
| 161 | } | 159 | } |
diff --git a/include/linux/in.h b/include/linux/in.h index d60122a3a088..cf196da04ec9 100644 --- a/include/linux/in.h +++ b/include/linux/in.h | |||
| @@ -107,6 +107,7 @@ struct in_addr { | |||
| 107 | #define MCAST_JOIN_SOURCE_GROUP 46 | 107 | #define MCAST_JOIN_SOURCE_GROUP 46 |
| 108 | #define MCAST_LEAVE_SOURCE_GROUP 47 | 108 | #define MCAST_LEAVE_SOURCE_GROUP 47 |
| 109 | #define MCAST_MSFILTER 48 | 109 | #define MCAST_MSFILTER 48 |
| 110 | #define IP_MULTICAST_ALL 49 | ||
| 110 | 111 | ||
| 111 | #define MCAST_EXCLUDE 0 | 112 | #define MCAST_EXCLUDE 0 |
| 112 | #define MCAST_INCLUDE 1 | 113 | #define MCAST_INCLUDE 1 |
diff --git a/include/linux/init.h b/include/linux/init.h index 0e06c176f185..b2189803f19a 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
| @@ -2,8 +2,6 @@ | |||
| 2 | #define _LINUX_INIT_H | 2 | #define _LINUX_INIT_H |
| 3 | 3 | ||
| 4 | #include <linux/compiler.h> | 4 | #include <linux/compiler.h> |
| 5 | #include <linux/section-names.h> | ||
| 6 | #include <linux/stringify.h> | ||
| 7 | 5 | ||
| 8 | /* These macros are used to mark some functions or | 6 | /* These macros are used to mark some functions or |
| 9 | * initialized data (doesn't apply to uninitialized data) | 7 | * initialized data (doesn't apply to uninitialized data) |
| @@ -101,7 +99,7 @@ | |||
| 101 | #define __memexitconst __section(.memexit.rodata) | 99 | #define __memexitconst __section(.memexit.rodata) |
| 102 | 100 | ||
| 103 | /* For assembly routines */ | 101 | /* For assembly routines */ |
| 104 | #define __HEAD .section __stringify(HEAD_TEXT_SECTION),"ax" | 102 | #define __HEAD .section ".head.text","ax" |
| 105 | #define __INIT .section ".init.text","ax" | 103 | #define __INIT .section ".init.text","ax" |
| 106 | #define __FINIT .previous | 104 | #define __FINIT .previous |
| 107 | 105 | ||
| @@ -225,7 +223,8 @@ struct obs_kernel_param { | |||
| 225 | * obs_kernel_param "array" too far apart in .init.setup. | 223 | * obs_kernel_param "array" too far apart in .init.setup. |
| 226 | */ | 224 | */ |
| 227 | #define __setup_param(str, unique_id, fn, early) \ | 225 | #define __setup_param(str, unique_id, fn, early) \ |
| 228 | static char __setup_str_##unique_id[] __initdata __aligned(1) = str; \ | 226 | static const char __setup_str_##unique_id[] __initconst \ |
| 227 | __aligned(1) = str; \ | ||
| 229 | static struct obs_kernel_param __setup_##unique_id \ | 228 | static struct obs_kernel_param __setup_##unique_id \ |
| 230 | __used __section(.init.setup) \ | 229 | __used __section(.init.setup) \ |
| 231 | __attribute__((aligned((sizeof(long))))) \ | 230 | __attribute__((aligned((sizeof(long))))) \ |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index ff374ceface0..c41e812e9d5e 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -183,6 +183,7 @@ extern void disable_irq(unsigned int irq); | |||
| 183 | extern void enable_irq(unsigned int irq); | 183 | extern void enable_irq(unsigned int irq); |
| 184 | 184 | ||
| 185 | /* The following three functions are for the core kernel use only. */ | 185 | /* The following three functions are for the core kernel use only. */ |
| 186 | #ifdef CONFIG_GENERIC_HARDIRQS | ||
| 186 | extern void suspend_device_irqs(void); | 187 | extern void suspend_device_irqs(void); |
| 187 | extern void resume_device_irqs(void); | 188 | extern void resume_device_irqs(void); |
| 188 | #ifdef CONFIG_PM_SLEEP | 189 | #ifdef CONFIG_PM_SLEEP |
| @@ -190,6 +191,11 @@ extern int check_wakeup_irqs(void); | |||
| 190 | #else | 191 | #else |
| 191 | static inline int check_wakeup_irqs(void) { return 0; } | 192 | static inline int check_wakeup_irqs(void) { return 0; } |
| 192 | #endif | 193 | #endif |
| 194 | #else | ||
| 195 | static inline void suspend_device_irqs(void) { }; | ||
| 196 | static inline void resume_device_irqs(void) { }; | ||
| 197 | static inline int check_wakeup_irqs(void) { return 0; } | ||
| 198 | #endif | ||
| 193 | 199 | ||
| 194 | #if defined(CONFIG_SMP) && defined(CONFIG_GENERIC_HARDIRQS) | 200 | #if defined(CONFIG_SMP) && defined(CONFIG_GENERIC_HARDIRQS) |
| 195 | 201 | ||
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index 476d9464ac82..c662efa68289 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
| @@ -169,6 +169,12 @@ struct ipv6_devconf { | |||
| 169 | __s32 accept_dad; | 169 | __s32 accept_dad; |
| 170 | void *sysctl; | 170 | void *sysctl; |
| 171 | }; | 171 | }; |
| 172 | |||
| 173 | struct ipv6_params { | ||
| 174 | __s32 disable_ipv6; | ||
| 175 | __s32 autoconf; | ||
| 176 | }; | ||
| 177 | extern struct ipv6_params ipv6_defaults; | ||
| 172 | #endif | 178 | #endif |
| 173 | 179 | ||
| 174 | /* index values for the variables in ipv6_devconf */ | 180 | /* index values for the variables in ipv6_devconf */ |
diff --git a/include/linux/isdn/capilli.h b/include/linux/isdn/capilli.h index 35e9b0fd014b..7acb87a44872 100644 --- a/include/linux/isdn/capilli.h +++ b/include/linux/isdn/capilli.h | |||
| @@ -79,7 +79,7 @@ int attach_capi_ctr(struct capi_ctr *); | |||
| 79 | int detach_capi_ctr(struct capi_ctr *); | 79 | int detach_capi_ctr(struct capi_ctr *); |
| 80 | 80 | ||
| 81 | void capi_ctr_ready(struct capi_ctr * card); | 81 | void capi_ctr_ready(struct capi_ctr * card); |
| 82 | void capi_ctr_reseted(struct capi_ctr * card); | 82 | void capi_ctr_down(struct capi_ctr * card); |
| 83 | void capi_ctr_suspend_output(struct capi_ctr * card); | 83 | void capi_ctr_suspend_output(struct capi_ctr * card); |
| 84 | void capi_ctr_resume_output(struct capi_ctr * card); | 84 | void capi_ctr_resume_output(struct capi_ctr * card); |
| 85 | void capi_ctr_handle_message(struct capi_ctr * card, u16 appl, struct sk_buff *skb); | 85 | void capi_ctr_handle_message(struct capi_ctr * card, u16 appl, struct sk_buff *skb); |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 883cd44ff765..1b2e1747df1a 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
| @@ -97,12 +97,14 @@ extern const char linux_proc_banner[]; | |||
| 97 | #define KERN_INFO "<6>" /* informational */ | 97 | #define KERN_INFO "<6>" /* informational */ |
| 98 | #define KERN_DEBUG "<7>" /* debug-level messages */ | 98 | #define KERN_DEBUG "<7>" /* debug-level messages */ |
| 99 | 99 | ||
| 100 | /* Use the default kernel loglevel */ | ||
| 101 | #define KERN_DEFAULT "<d>" | ||
| 100 | /* | 102 | /* |
| 101 | * Annotation for a "continued" line of log printout (only done after a | 103 | * Annotation for a "continued" line of log printout (only done after a |
| 102 | * line that had no enclosing \n). Only to be used by core/arch code | 104 | * line that had no enclosing \n). Only to be used by core/arch code |
| 103 | * during early bootup (a continued line is not SMP-safe otherwise). | 105 | * during early bootup (a continued line is not SMP-safe otherwise). |
| 104 | */ | 106 | */ |
| 105 | #define KERN_CONT "" | 107 | #define KERN_CONT "<c>" |
| 106 | 108 | ||
| 107 | extern int console_printk[]; | 109 | extern int console_printk[]; |
| 108 | 110 | ||
diff --git a/include/linux/keyboard.h b/include/linux/keyboard.h index a3c984d780f0..33a63f62d57f 100644 --- a/include/linux/keyboard.h +++ b/include/linux/keyboard.h | |||
| @@ -56,6 +56,7 @@ extern int unregister_keyboard_notifier(struct notifier_block *nb); | |||
| 56 | #define KT_ASCII 9 | 56 | #define KT_ASCII 9 |
| 57 | #define KT_LOCK 10 | 57 | #define KT_LOCK 10 |
| 58 | #define KT_SLOCK 12 | 58 | #define KT_SLOCK 12 |
| 59 | #define KT_DEAD2 13 | ||
| 59 | #define KT_BRL 14 | 60 | #define KT_BRL 14 |
| 60 | 61 | ||
| 61 | #define K(t,v) (((t)<<8)|(v)) | 62 | #define K(t,v) (((t)<<8)|(v)) |
diff --git a/include/linux/lguest.h b/include/linux/lguest.h index 175e63f4a8c0..7bc1440fc473 100644 --- a/include/linux/lguest.h +++ b/include/linux/lguest.h | |||
| @@ -30,6 +30,10 @@ struct lguest_data | |||
| 30 | /* Wallclock time set by the Host. */ | 30 | /* Wallclock time set by the Host. */ |
| 31 | struct timespec time; | 31 | struct timespec time; |
| 32 | 32 | ||
| 33 | /* Interrupt pending set by the Host. The Guest should do a hypercall | ||
| 34 | * if it re-enables interrupts and sees this set (to X86_EFLAGS_IF). */ | ||
| 35 | int irq_pending; | ||
| 36 | |||
| 33 | /* Async hypercall ring. Instead of directly making hypercalls, we can | 37 | /* Async hypercall ring. Instead of directly making hypercalls, we can |
| 34 | * place them in here for processing the next time the Host wants. | 38 | * place them in here for processing the next time the Host wants. |
| 35 | * This batching can be quite efficient. */ | 39 | * This batching can be quite efficient. */ |
diff --git a/include/linux/lguest_launcher.h b/include/linux/lguest_launcher.h index a53407a4165c..bfefbdf7498a 100644 --- a/include/linux/lguest_launcher.h +++ b/include/linux/lguest_launcher.h | |||
| @@ -57,7 +57,8 @@ enum lguest_req | |||
| 57 | LHREQ_INITIALIZE, /* + base, pfnlimit, start */ | 57 | LHREQ_INITIALIZE, /* + base, pfnlimit, start */ |
| 58 | LHREQ_GETDMA, /* No longer used */ | 58 | LHREQ_GETDMA, /* No longer used */ |
| 59 | LHREQ_IRQ, /* + irq */ | 59 | LHREQ_IRQ, /* + irq */ |
| 60 | LHREQ_BREAK, /* + on/off flag (on blocks until someone does off) */ | 60 | LHREQ_BREAK, /* No longer used */ |
| 61 | LHREQ_EVENTFD, /* + address, fd. */ | ||
| 61 | }; | 62 | }; |
| 62 | 63 | ||
| 63 | /* The alignment to use between consumer and producer parts of vring. | 64 | /* The alignment to use between consumer and producer parts of vring. |
diff --git a/include/linux/list_nulls.h b/include/linux/list_nulls.h index 93150ecf3ea4..5d10ae364b5e 100644 --- a/include/linux/list_nulls.h +++ b/include/linux/list_nulls.h | |||
| @@ -56,6 +56,18 @@ static inline int hlist_nulls_empty(const struct hlist_nulls_head *h) | |||
| 56 | return is_a_nulls(h->first); | 56 | return is_a_nulls(h->first); |
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | static inline void hlist_nulls_add_head(struct hlist_nulls_node *n, | ||
| 60 | struct hlist_nulls_head *h) | ||
| 61 | { | ||
| 62 | struct hlist_nulls_node *first = h->first; | ||
| 63 | |||
| 64 | n->next = first; | ||
| 65 | n->pprev = &h->first; | ||
| 66 | h->first = n; | ||
| 67 | if (!is_a_nulls(first)) | ||
| 68 | first->pprev = &n->next; | ||
| 69 | } | ||
| 70 | |||
| 59 | static inline void __hlist_nulls_del(struct hlist_nulls_node *n) | 71 | static inline void __hlist_nulls_del(struct hlist_nulls_node *n) |
| 60 | { | 72 | { |
| 61 | struct hlist_nulls_node *next = n->next; | 73 | struct hlist_nulls_node *next = n->next; |
| @@ -65,6 +77,12 @@ static inline void __hlist_nulls_del(struct hlist_nulls_node *n) | |||
| 65 | next->pprev = pprev; | 77 | next->pprev = pprev; |
| 66 | } | 78 | } |
| 67 | 79 | ||
| 80 | static inline void hlist_nulls_del(struct hlist_nulls_node *n) | ||
| 81 | { | ||
| 82 | __hlist_nulls_del(n); | ||
| 83 | n->pprev = LIST_POISON2; | ||
| 84 | } | ||
| 85 | |||
| 68 | /** | 86 | /** |
| 69 | * hlist_nulls_for_each_entry - iterate over list of given type | 87 | * hlist_nulls_for_each_entry - iterate over list of given type |
| 70 | * @tpos: the type * to use as a loop cursor. | 88 | * @tpos: the type * to use as a loop cursor. |
diff --git a/include/linux/mISDNdsp.h b/include/linux/mISDNdsp.h index 6b71d2dce508..41d1eeb9b3bd 100644 --- a/include/linux/mISDNdsp.h +++ b/include/linux/mISDNdsp.h | |||
| @@ -12,7 +12,8 @@ struct mISDN_dsp_element { | |||
| 12 | void *(*new)(const char *arg); | 12 | void *(*new)(const char *arg); |
| 13 | void (*free)(void *p); | 13 | void (*free)(void *p); |
| 14 | void (*process_tx)(void *p, unsigned char *data, int len); | 14 | void (*process_tx)(void *p, unsigned char *data, int len); |
| 15 | void (*process_rx)(void *p, unsigned char *data, int len); | 15 | void (*process_rx)(void *p, unsigned char *data, int len, |
| 16 | unsigned int txlen); | ||
| 16 | int num_args; | 17 | int num_args; |
| 17 | struct mISDN_dsp_element_arg | 18 | struct mISDN_dsp_element_arg |
| 18 | *args; | 19 | *args; |
| @@ -24,6 +25,7 @@ extern void mISDN_dsp_element_unregister(struct mISDN_dsp_element *elem); | |||
| 24 | struct dsp_features { | 25 | struct dsp_features { |
| 25 | int hfc_id; /* unique id to identify the chip (or -1) */ | 26 | int hfc_id; /* unique id to identify the chip (or -1) */ |
| 26 | int hfc_dtmf; /* set if HFCmulti card supports dtmf */ | 27 | int hfc_dtmf; /* set if HFCmulti card supports dtmf */ |
| 28 | int hfc_conf; /* set if HFCmulti card supports conferences */ | ||
| 27 | int hfc_loops; /* set if card supports tone loops */ | 29 | int hfc_loops; /* set if card supports tone loops */ |
| 28 | int hfc_echocanhw; /* set if card supports echocancelation*/ | 30 | int hfc_echocanhw; /* set if card supports echocancelation*/ |
| 29 | int pcm_id; /* unique id to identify the pcm bus (or -1) */ | 31 | int pcm_id; /* unique id to identify the pcm bus (or -1) */ |
diff --git a/include/linux/mISDNhw.h b/include/linux/mISDNhw.h index 97ffdc1d3442..7f9831da847f 100644 --- a/include/linux/mISDNhw.h +++ b/include/linux/mISDNhw.h | |||
| @@ -89,11 +89,6 @@ struct dchannel { | |||
| 89 | void (*phfunc) (struct dchannel *); | 89 | void (*phfunc) (struct dchannel *); |
| 90 | u_int state; | 90 | u_int state; |
| 91 | void *l1; | 91 | void *l1; |
| 92 | /* HW access */ | ||
| 93 | u_char (*read_reg) (void *, u_char); | ||
| 94 | void (*write_reg) (void *, u_char, u_char); | ||
| 95 | void (*read_fifo) (void *, u_char *, int); | ||
| 96 | void (*write_fifo) (void *, u_char *, int); | ||
| 97 | void *hw; | 92 | void *hw; |
| 98 | int slot; /* multiport card channel slot */ | 93 | int slot; /* multiport card channel slot */ |
| 99 | struct timer_list timer; | 94 | struct timer_list timer; |
| @@ -151,11 +146,6 @@ struct bchannel { | |||
| 151 | u_long Flags; | 146 | u_long Flags; |
| 152 | struct work_struct workq; | 147 | struct work_struct workq; |
| 153 | u_int state; | 148 | u_int state; |
| 154 | /* HW access */ | ||
| 155 | u_char (*read_reg) (void *, u_char); | ||
| 156 | void (*write_reg) (void *, u_char, u_char); | ||
| 157 | void (*read_fifo) (void *, u_char *, int); | ||
| 158 | void (*write_fifo) (void *, u_char *, int); | ||
| 159 | void *hw; | 149 | void *hw; |
| 160 | int slot; /* multiport card channel slot */ | 150 | int slot; /* multiport card channel slot */ |
| 161 | struct timer_list timer; | 151 | struct timer_list timer; |
| @@ -185,7 +175,7 @@ extern int dchannel_senddata(struct dchannel *, struct sk_buff *); | |||
| 185 | extern int bchannel_senddata(struct bchannel *, struct sk_buff *); | 175 | extern int bchannel_senddata(struct bchannel *, struct sk_buff *); |
| 186 | extern void recv_Dchannel(struct dchannel *); | 176 | extern void recv_Dchannel(struct dchannel *); |
| 187 | extern void recv_Echannel(struct dchannel *, struct dchannel *); | 177 | extern void recv_Echannel(struct dchannel *, struct dchannel *); |
| 188 | extern void recv_Bchannel(struct bchannel *); | 178 | extern void recv_Bchannel(struct bchannel *, unsigned int id); |
| 189 | extern void recv_Dchannel_skb(struct dchannel *, struct sk_buff *); | 179 | extern void recv_Dchannel_skb(struct dchannel *, struct sk_buff *); |
| 190 | extern void recv_Bchannel_skb(struct bchannel *, struct sk_buff *); | 180 | extern void recv_Bchannel_skb(struct bchannel *, struct sk_buff *); |
| 191 | extern void confirm_Bsend(struct bchannel *bch); | 181 | extern void confirm_Bsend(struct bchannel *bch); |
diff --git a/include/linux/mISDNif.h b/include/linux/mISDNif.h index 5da3d95b27f1..45100b39a7cf 100644 --- a/include/linux/mISDNif.h +++ b/include/linux/mISDNif.h | |||
| @@ -229,6 +229,7 @@ | |||
| 229 | #define OPTION_L2_PTP 2 | 229 | #define OPTION_L2_PTP 2 |
| 230 | #define OPTION_L2_FIXEDTEI 3 | 230 | #define OPTION_L2_FIXEDTEI 3 |
| 231 | #define OPTION_L2_CLEANUP 4 | 231 | #define OPTION_L2_CLEANUP 4 |
| 232 | #define OPTION_L1_HOLD 5 | ||
| 232 | 233 | ||
| 233 | /* should be in sync with linux/kobject.h:KOBJ_NAME_LEN */ | 234 | /* should be in sync with linux/kobject.h:KOBJ_NAME_LEN */ |
| 234 | #define MISDN_MAX_IDLEN 20 | 235 | #define MISDN_MAX_IDLEN 20 |
| @@ -291,19 +292,19 @@ struct mISDN_devrename { | |||
| 291 | 292 | ||
| 292 | /* MPH_INFORMATION_REQ payload */ | 293 | /* MPH_INFORMATION_REQ payload */ |
| 293 | struct ph_info_ch { | 294 | struct ph_info_ch { |
| 294 | __u32 protocol; | 295 | __u32 protocol; |
| 295 | __u64 Flags; | 296 | __u64 Flags; |
| 296 | }; | 297 | }; |
| 297 | 298 | ||
| 298 | struct ph_info_dch { | 299 | struct ph_info_dch { |
| 299 | struct ph_info_ch ch; | 300 | struct ph_info_ch ch; |
| 300 | __u16 state; | 301 | __u16 state; |
| 301 | __u16 num_bch; | 302 | __u16 num_bch; |
| 302 | }; | 303 | }; |
| 303 | 304 | ||
| 304 | struct ph_info { | 305 | struct ph_info { |
| 305 | struct ph_info_dch dch; | 306 | struct ph_info_dch dch; |
| 306 | struct ph_info_ch bch[]; | 307 | struct ph_info_ch bch[]; |
| 307 | }; | 308 | }; |
| 308 | 309 | ||
| 309 | /* timer device ioctl */ | 310 | /* timer device ioctl */ |
| @@ -317,6 +318,7 @@ struct ph_info { | |||
| 317 | #define IMCTRLREQ _IOR('I', 69, int) | 318 | #define IMCTRLREQ _IOR('I', 69, int) |
| 318 | #define IMCLEAR_L2 _IOR('I', 70, int) | 319 | #define IMCLEAR_L2 _IOR('I', 70, int) |
| 319 | #define IMSETDEVNAME _IOR('I', 71, struct mISDN_devrename) | 320 | #define IMSETDEVNAME _IOR('I', 71, struct mISDN_devrename) |
| 321 | #define IMHOLD_L1 _IOR('I', 72, int) | ||
| 320 | 322 | ||
| 321 | static inline int | 323 | static inline int |
| 322 | test_channelmap(u_int nr, u_char *map) | 324 | test_channelmap(u_int nr, u_char *map) |
| @@ -362,7 +364,8 @@ clear_channelmap(u_int nr, u_char *map) | |||
| 362 | #define MISDN_CTRL_HFC_RECEIVE_ON 0x4006 | 364 | #define MISDN_CTRL_HFC_RECEIVE_ON 0x4006 |
| 363 | #define MISDN_CTRL_HFC_ECHOCAN_ON 0x4007 | 365 | #define MISDN_CTRL_HFC_ECHOCAN_ON 0x4007 |
| 364 | #define MISDN_CTRL_HFC_ECHOCAN_OFF 0x4008 | 366 | #define MISDN_CTRL_HFC_ECHOCAN_OFF 0x4008 |
| 365 | 367 | #define MISDN_CTRL_HFC_WD_INIT 0x4009 | |
| 368 | #define MISDN_CTRL_HFC_WD_RESET 0x400A | ||
| 366 | 369 | ||
| 367 | /* socket options */ | 370 | /* socket options */ |
| 368 | #define MISDN_TIME_STAMP 0x0001 | 371 | #define MISDN_TIME_STAMP 0x0001 |
diff --git a/include/linux/magic.h b/include/linux/magic.h index 927138cf3050..1923327b9869 100644 --- a/include/linux/magic.h +++ b/include/linux/magic.h | |||
| @@ -6,6 +6,8 @@ | |||
| 6 | #define AFS_SUPER_MAGIC 0x5346414F | 6 | #define AFS_SUPER_MAGIC 0x5346414F |
| 7 | #define AUTOFS_SUPER_MAGIC 0x0187 | 7 | #define AUTOFS_SUPER_MAGIC 0x0187 |
| 8 | #define CODA_SUPER_MAGIC 0x73757245 | 8 | #define CODA_SUPER_MAGIC 0x73757245 |
| 9 | #define CRAMFS_MAGIC 0x28cd3d45 /* some random number */ | ||
| 10 | #define CRAMFS_MAGIC_WEND 0x453dcd28 /* magic number with the wrong endianess */ | ||
| 9 | #define DEBUGFS_MAGIC 0x64626720 | 11 | #define DEBUGFS_MAGIC 0x64626720 |
| 10 | #define SYSFS_MAGIC 0x62656572 | 12 | #define SYSFS_MAGIC 0x62656572 |
| 11 | #define SECURITYFS_MAGIC 0x73636673 | 13 | #define SECURITYFS_MAGIC 0x73636673 |
diff --git a/include/linux/mdio.h b/include/linux/mdio.h new file mode 100644 index 000000000000..cfdf1df2875e --- /dev/null +++ b/include/linux/mdio.h | |||
| @@ -0,0 +1,356 @@ | |||
| 1 | /* | ||
| 2 | * linux/mdio.h: definitions for MDIO (clause 45) transceivers | ||
| 3 | * Copyright 2006-2009 Solarflare Communications Inc. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License version 2 as published | ||
| 7 | * by the Free Software Foundation, incorporated herein by reference. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #ifndef __LINUX_MDIO_H__ | ||
| 11 | #define __LINUX_MDIO_H__ | ||
| 12 | |||
| 13 | #include <linux/mii.h> | ||
| 14 | |||
| 15 | /* MDIO Manageable Devices (MMDs). */ | ||
| 16 | #define MDIO_MMD_PMAPMD 1 /* Physical Medium Attachment/ | ||
| 17 | * Physical Medium Dependent */ | ||
| 18 | #define MDIO_MMD_WIS 2 /* WAN Interface Sublayer */ | ||
| 19 | #define MDIO_MMD_PCS 3 /* Physical Coding Sublayer */ | ||
| 20 | #define MDIO_MMD_PHYXS 4 /* PHY Extender Sublayer */ | ||
| 21 | #define MDIO_MMD_DTEXS 5 /* DTE Extender Sublayer */ | ||
| 22 | #define MDIO_MMD_TC 6 /* Transmission Convergence */ | ||
| 23 | #define MDIO_MMD_AN 7 /* Auto-Negotiation */ | ||
| 24 | #define MDIO_MMD_C22EXT 29 /* Clause 22 extension */ | ||
| 25 | #define MDIO_MMD_VEND1 30 /* Vendor specific 1 */ | ||
| 26 | #define MDIO_MMD_VEND2 31 /* Vendor specific 2 */ | ||
| 27 | |||
| 28 | /* Generic MDIO registers. */ | ||
| 29 | #define MDIO_CTRL1 MII_BMCR | ||
| 30 | #define MDIO_STAT1 MII_BMSR | ||
| 31 | #define MDIO_DEVID1 MII_PHYSID1 | ||
| 32 | #define MDIO_DEVID2 MII_PHYSID2 | ||
| 33 | #define MDIO_SPEED 4 /* Speed ability */ | ||
| 34 | #define MDIO_DEVS1 5 /* Devices in package */ | ||
| 35 | #define MDIO_DEVS2 6 | ||
| 36 | #define MDIO_CTRL2 7 /* 10G control 2 */ | ||
| 37 | #define MDIO_STAT2 8 /* 10G status 2 */ | ||
| 38 | #define MDIO_PMA_TXDIS 9 /* 10G PMA/PMD transmit disable */ | ||
| 39 | #define MDIO_PMA_RXDET 10 /* 10G PMA/PMD receive signal detect */ | ||
| 40 | #define MDIO_PMA_EXTABLE 11 /* 10G PMA/PMD extended ability */ | ||
| 41 | #define MDIO_PKGID1 14 /* Package identifier */ | ||
| 42 | #define MDIO_PKGID2 15 | ||
| 43 | #define MDIO_AN_ADVERTISE 16 /* AN advertising (base page) */ | ||
| 44 | #define MDIO_AN_LPA 19 /* AN LP abilities (base page) */ | ||
| 45 | #define MDIO_PHYXS_LNSTAT 24 /* PHY XGXS lane state */ | ||
| 46 | |||
| 47 | /* Media-dependent registers. */ | ||
| 48 | #define MDIO_PMA_10GBT_SWAPPOL 130 /* 10GBASE-T pair swap & polarity */ | ||
| 49 | #define MDIO_PMA_10GBT_TXPWR 131 /* 10GBASE-T TX power control */ | ||
| 50 | #define MDIO_PMA_10GBT_SNR 133 /* 10GBASE-T SNR margin, lane A. | ||
| 51 | * Lanes B-D are numbered 134-136. */ | ||
| 52 | #define MDIO_PMA_10GBR_FECABLE 170 /* 10GBASE-R FEC ability */ | ||
| 53 | #define MDIO_PCS_10GBX_STAT1 24 /* 10GBASE-X PCS status 1 */ | ||
| 54 | #define MDIO_PCS_10GBRT_STAT1 32 /* 10GBASE-R/-T PCS status 1 */ | ||
| 55 | #define MDIO_PCS_10GBRT_STAT2 33 /* 10GBASE-R/-T PCS status 2 */ | ||
| 56 | #define MDIO_AN_10GBT_CTRL 32 /* 10GBASE-T auto-negotiation control */ | ||
| 57 | #define MDIO_AN_10GBT_STAT 33 /* 10GBASE-T auto-negotiation status */ | ||
| 58 | |||
| 59 | /* LASI (Link Alarm Status Interrupt) registers, defined by XENPAK MSA. */ | ||
| 60 | #define MDIO_PMA_LASI_RXCTRL 0x9000 /* RX_ALARM control */ | ||
| 61 | #define MDIO_PMA_LASI_TXCTRL 0x9001 /* TX_ALARM control */ | ||
| 62 | #define MDIO_PMA_LASI_CTRL 0x9002 /* LASI control */ | ||
| 63 | #define MDIO_PMA_LASI_RXSTAT 0x9003 /* RX_ALARM status */ | ||
| 64 | #define MDIO_PMA_LASI_TXSTAT 0x9004 /* TX_ALARM status */ | ||
| 65 | #define MDIO_PMA_LASI_STAT 0x9005 /* LASI status */ | ||
| 66 | |||
| 67 | /* Control register 1. */ | ||
| 68 | /* Enable extended speed selection */ | ||
| 69 | #define MDIO_CTRL1_SPEEDSELEXT (BMCR_SPEED1000 | BMCR_SPEED100) | ||
| 70 | /* All speed selection bits */ | ||
| 71 | #define MDIO_CTRL1_SPEEDSEL (MDIO_CTRL1_SPEEDSELEXT | 0x003c) | ||
| 72 | #define MDIO_CTRL1_FULLDPLX BMCR_FULLDPLX | ||
| 73 | #define MDIO_CTRL1_LPOWER BMCR_PDOWN | ||
| 74 | #define MDIO_CTRL1_RESET BMCR_RESET | ||
| 75 | #define MDIO_PMA_CTRL1_LOOPBACK 0x0001 | ||
| 76 | #define MDIO_PMA_CTRL1_SPEED1000 BMCR_SPEED1000 | ||
| 77 | #define MDIO_PMA_CTRL1_SPEED100 BMCR_SPEED100 | ||
| 78 | #define MDIO_PCS_CTRL1_LOOPBACK BMCR_LOOPBACK | ||
| 79 | #define MDIO_PHYXS_CTRL1_LOOPBACK BMCR_LOOPBACK | ||
| 80 | #define MDIO_AN_CTRL1_RESTART BMCR_ANRESTART | ||
| 81 | #define MDIO_AN_CTRL1_ENABLE BMCR_ANENABLE | ||
| 82 | #define MDIO_AN_CTRL1_XNP 0x2000 /* Enable extended next page */ | ||
| 83 | |||
| 84 | /* 10 Gb/s */ | ||
| 85 | #define MDIO_CTRL1_SPEED10G (MDIO_CTRL1_SPEEDSELEXT | 0x00) | ||
| 86 | /* 10PASS-TS/2BASE-TL */ | ||
| 87 | #define MDIO_CTRL1_SPEED10P2B (MDIO_CTRL1_SPEEDSELEXT | 0x04) | ||
| 88 | |||
| 89 | /* Status register 1. */ | ||
| 90 | #define MDIO_STAT1_LPOWERABLE 0x0002 /* Low-power ability */ | ||
| 91 | #define MDIO_STAT1_LSTATUS BMSR_LSTATUS | ||
| 92 | #define MDIO_STAT1_FAULT 0x0080 /* Fault */ | ||
| 93 | #define MDIO_AN_STAT1_LPABLE 0x0001 /* Link partner AN ability */ | ||
| 94 | #define MDIO_AN_STAT1_ABLE BMSR_ANEGCAPABLE | ||
| 95 | #define MDIO_AN_STAT1_RFAULT BMSR_RFAULT | ||
| 96 | #define MDIO_AN_STAT1_COMPLETE BMSR_ANEGCOMPLETE | ||
| 97 | #define MDIO_AN_STAT1_PAGE 0x0040 /* Page received */ | ||
| 98 | #define MDIO_AN_STAT1_XNP 0x0080 /* Extended next page status */ | ||
| 99 | |||
| 100 | /* Speed register. */ | ||
| 101 | #define MDIO_SPEED_10G 0x0001 /* 10G capable */ | ||
| 102 | #define MDIO_PMA_SPEED_2B 0x0002 /* 2BASE-TL capable */ | ||
| 103 | #define MDIO_PMA_SPEED_10P 0x0004 /* 10PASS-TS capable */ | ||
| 104 | #define MDIO_PMA_SPEED_1000 0x0010 /* 1000M capable */ | ||
| 105 | #define MDIO_PMA_SPEED_100 0x0020 /* 100M capable */ | ||
| 106 | #define MDIO_PMA_SPEED_10 0x0040 /* 10M capable */ | ||
| 107 | #define MDIO_PCS_SPEED_10P2B 0x0002 /* 10PASS-TS/2BASE-TL capable */ | ||
| 108 | |||
| 109 | /* Device present registers. */ | ||
| 110 | #define MDIO_DEVS_PRESENT(devad) (1 << (devad)) | ||
| 111 | #define MDIO_DEVS_PMAPMD MDIO_DEVS_PRESENT(MDIO_MMD_PMAPMD) | ||
| 112 | #define MDIO_DEVS_WIS MDIO_DEVS_PRESENT(MDIO_MMD_WIS) | ||
| 113 | #define MDIO_DEVS_PCS MDIO_DEVS_PRESENT(MDIO_MMD_PCS) | ||
| 114 | #define MDIO_DEVS_PHYXS MDIO_DEVS_PRESENT(MDIO_MMD_PHYXS) | ||
| 115 | #define MDIO_DEVS_DTEXS MDIO_DEVS_PRESENT(MDIO_MMD_DTEXS) | ||
| 116 | #define MDIO_DEVS_TC MDIO_DEVS_PRESENT(MDIO_MMD_TC) | ||
| 117 | #define MDIO_DEVS_AN MDIO_DEVS_PRESENT(MDIO_MMD_AN) | ||
| 118 | #define MDIO_DEVS_C22EXT MDIO_DEVS_PRESENT(MDIO_MMD_C22EXT) | ||
| 119 | |||
| 120 | /* Control register 2. */ | ||
| 121 | #define MDIO_PMA_CTRL2_TYPE 0x000f /* PMA/PMD type selection */ | ||
| 122 | #define MDIO_PMA_CTRL2_10GBCX4 0x0000 /* 10GBASE-CX4 type */ | ||
| 123 | #define MDIO_PMA_CTRL2_10GBEW 0x0001 /* 10GBASE-EW type */ | ||
| 124 | #define MDIO_PMA_CTRL2_10GBLW 0x0002 /* 10GBASE-LW type */ | ||
| 125 | #define MDIO_PMA_CTRL2_10GBSW 0x0003 /* 10GBASE-SW type */ | ||
| 126 | #define MDIO_PMA_CTRL2_10GBLX4 0x0004 /* 10GBASE-LX4 type */ | ||
| 127 | #define MDIO_PMA_CTRL2_10GBER 0x0005 /* 10GBASE-ER type */ | ||
| 128 | #define MDIO_PMA_CTRL2_10GBLR 0x0006 /* 10GBASE-LR type */ | ||
| 129 | #define MDIO_PMA_CTRL2_10GBSR 0x0007 /* 10GBASE-SR type */ | ||
| 130 | #define MDIO_PMA_CTRL2_10GBLRM 0x0008 /* 10GBASE-LRM type */ | ||
| 131 | #define MDIO_PMA_CTRL2_10GBT 0x0009 /* 10GBASE-T type */ | ||
| 132 | #define MDIO_PMA_CTRL2_10GBKX4 0x000a /* 10GBASE-KX4 type */ | ||
| 133 | #define MDIO_PMA_CTRL2_10GBKR 0x000b /* 10GBASE-KR type */ | ||
| 134 | #define MDIO_PMA_CTRL2_1000BT 0x000c /* 1000BASE-T type */ | ||
| 135 | #define MDIO_PMA_CTRL2_1000BKX 0x000d /* 1000BASE-KX type */ | ||
| 136 | #define MDIO_PMA_CTRL2_100BTX 0x000e /* 100BASE-TX type */ | ||
| 137 | #define MDIO_PMA_CTRL2_10BT 0x000f /* 10BASE-T type */ | ||
| 138 | #define MDIO_PCS_CTRL2_TYPE 0x0003 /* PCS type selection */ | ||
| 139 | #define MDIO_PCS_CTRL2_10GBR 0x0000 /* 10GBASE-R type */ | ||
| 140 | #define MDIO_PCS_CTRL2_10GBX 0x0001 /* 10GBASE-X type */ | ||
| 141 | #define MDIO_PCS_CTRL2_10GBW 0x0002 /* 10GBASE-W type */ | ||
| 142 | #define MDIO_PCS_CTRL2_10GBT 0x0003 /* 10GBASE-T type */ | ||
| 143 | |||
| 144 | /* Status register 2. */ | ||
| 145 | #define MDIO_STAT2_RXFAULT 0x0400 /* Receive fault */ | ||
| 146 | #define MDIO_STAT2_TXFAULT 0x0800 /* Transmit fault */ | ||
| 147 | #define MDIO_STAT2_DEVPRST 0xc000 /* Device present */ | ||
| 148 | #define MDIO_STAT2_DEVPRST_VAL 0x8000 /* Device present value */ | ||
| 149 | #define MDIO_PMA_STAT2_LBABLE 0x0001 /* PMA loopback ability */ | ||
| 150 | #define MDIO_PMA_STAT2_10GBEW 0x0002 /* 10GBASE-EW ability */ | ||
| 151 | #define MDIO_PMA_STAT2_10GBLW 0x0004 /* 10GBASE-LW ability */ | ||
| 152 | #define MDIO_PMA_STAT2_10GBSW 0x0008 /* 10GBASE-SW ability */ | ||
| 153 | #define MDIO_PMA_STAT2_10GBLX4 0x0010 /* 10GBASE-LX4 ability */ | ||
| 154 | #define MDIO_PMA_STAT2_10GBER 0x0020 /* 10GBASE-ER ability */ | ||
| 155 | #define MDIO_PMA_STAT2_10GBLR 0x0040 /* 10GBASE-LR ability */ | ||
| 156 | #define MDIO_PMA_STAT2_10GBSR 0x0080 /* 10GBASE-SR ability */ | ||
| 157 | #define MDIO_PMD_STAT2_TXDISAB 0x0100 /* PMD TX disable ability */ | ||
| 158 | #define MDIO_PMA_STAT2_EXTABLE 0x0200 /* Extended abilities */ | ||
| 159 | #define MDIO_PMA_STAT2_RXFLTABLE 0x1000 /* Receive fault ability */ | ||
| 160 | #define MDIO_PMA_STAT2_TXFLTABLE 0x2000 /* Transmit fault ability */ | ||
| 161 | #define MDIO_PCS_STAT2_10GBR 0x0001 /* 10GBASE-R capable */ | ||
| 162 | #define MDIO_PCS_STAT2_10GBX 0x0002 /* 10GBASE-X capable */ | ||
| 163 | #define MDIO_PCS_STAT2_10GBW 0x0004 /* 10GBASE-W capable */ | ||
| 164 | #define MDIO_PCS_STAT2_RXFLTABLE 0x1000 /* Receive fault ability */ | ||
| 165 | #define MDIO_PCS_STAT2_TXFLTABLE 0x2000 /* Transmit fault ability */ | ||
| 166 | |||
| 167 | /* Transmit disable register. */ | ||
| 168 | #define MDIO_PMD_TXDIS_GLOBAL 0x0001 /* Global PMD TX disable */ | ||
| 169 | #define MDIO_PMD_TXDIS_0 0x0002 /* PMD TX disable 0 */ | ||
| 170 | #define MDIO_PMD_TXDIS_1 0x0004 /* PMD TX disable 1 */ | ||
| 171 | #define MDIO_PMD_TXDIS_2 0x0008 /* PMD TX disable 2 */ | ||
| 172 | #define MDIO_PMD_TXDIS_3 0x0010 /* PMD TX disable 3 */ | ||
| 173 | |||
| 174 | /* Receive signal detect register. */ | ||
| 175 | #define MDIO_PMD_RXDET_GLOBAL 0x0001 /* Global PMD RX signal detect */ | ||
| 176 | #define MDIO_PMD_RXDET_0 0x0002 /* PMD RX signal detect 0 */ | ||
| 177 | #define MDIO_PMD_RXDET_1 0x0004 /* PMD RX signal detect 1 */ | ||
| 178 | #define MDIO_PMD_RXDET_2 0x0008 /* PMD RX signal detect 2 */ | ||
| 179 | #define MDIO_PMD_RXDET_3 0x0010 /* PMD RX signal detect 3 */ | ||
| 180 | |||
| 181 | /* Extended abilities register. */ | ||
| 182 | #define MDIO_PMA_EXTABLE_10GCX4 0x0001 /* 10GBASE-CX4 ability */ | ||
| 183 | #define MDIO_PMA_EXTABLE_10GBLRM 0x0002 /* 10GBASE-LRM ability */ | ||
| 184 | #define MDIO_PMA_EXTABLE_10GBT 0x0004 /* 10GBASE-T ability */ | ||
| 185 | #define MDIO_PMA_EXTABLE_10GBKX4 0x0008 /* 10GBASE-KX4 ability */ | ||
| 186 | #define MDIO_PMA_EXTABLE_10GBKR 0x0010 /* 10GBASE-KR ability */ | ||
| 187 | #define MDIO_PMA_EXTABLE_1000BT 0x0020 /* 1000BASE-T ability */ | ||
| 188 | #define MDIO_PMA_EXTABLE_1000BKX 0x0040 /* 1000BASE-KX ability */ | ||
| 189 | #define MDIO_PMA_EXTABLE_100BTX 0x0080 /* 100BASE-TX ability */ | ||
| 190 | #define MDIO_PMA_EXTABLE_10BT 0x0100 /* 10BASE-T ability */ | ||
| 191 | |||
| 192 | /* PHY XGXS lane state register. */ | ||
| 193 | #define MDIO_PHYXS_LNSTAT_SYNC0 0x0001 | ||
| 194 | #define MDIO_PHYXS_LNSTAT_SYNC1 0x0002 | ||
| 195 | #define MDIO_PHYXS_LNSTAT_SYNC2 0x0004 | ||
| 196 | #define MDIO_PHYXS_LNSTAT_SYNC3 0x0008 | ||
| 197 | #define MDIO_PHYXS_LNSTAT_ALIGN 0x1000 | ||
| 198 | |||
| 199 | /* PMA 10GBASE-T pair swap & polarity */ | ||
| 200 | #define MDIO_PMA_10GBT_SWAPPOL_ABNX 0x0001 /* Pair A/B uncrossed */ | ||
| 201 | #define MDIO_PMA_10GBT_SWAPPOL_CDNX 0x0002 /* Pair C/D uncrossed */ | ||
| 202 | #define MDIO_PMA_10GBT_SWAPPOL_AREV 0x0100 /* Pair A polarity reversed */ | ||
| 203 | #define MDIO_PMA_10GBT_SWAPPOL_BREV 0x0200 /* Pair B polarity reversed */ | ||
| 204 | #define MDIO_PMA_10GBT_SWAPPOL_CREV 0x0400 /* Pair C polarity reversed */ | ||
| 205 | #define MDIO_PMA_10GBT_SWAPPOL_DREV 0x0800 /* Pair D polarity reversed */ | ||
| 206 | |||
| 207 | /* PMA 10GBASE-T TX power register. */ | ||
| 208 | #define MDIO_PMA_10GBT_TXPWR_SHORT 0x0001 /* Short-reach mode */ | ||
| 209 | |||
| 210 | /* PMA 10GBASE-T SNR registers. */ | ||
| 211 | /* Value is SNR margin in dB, clamped to range [-127, 127], plus 0x8000. */ | ||
| 212 | #define MDIO_PMA_10GBT_SNR_BIAS 0x8000 | ||
| 213 | #define MDIO_PMA_10GBT_SNR_MAX 127 | ||
| 214 | |||
| 215 | /* PMA 10GBASE-R FEC ability register. */ | ||
| 216 | #define MDIO_PMA_10GBR_FECABLE_ABLE 0x0001 /* FEC ability */ | ||
| 217 | #define MDIO_PMA_10GBR_FECABLE_ERRABLE 0x0002 /* FEC error indic. ability */ | ||
| 218 | |||
| 219 | /* PCS 10GBASE-R/-T status register 1. */ | ||
| 220 | #define MDIO_PCS_10GBRT_STAT1_BLKLK 0x0001 /* Block lock attained */ | ||
| 221 | |||
| 222 | /* PCS 10GBASE-R/-T status register 2. */ | ||
| 223 | #define MDIO_PCS_10GBRT_STAT2_ERR 0x00ff | ||
| 224 | #define MDIO_PCS_10GBRT_STAT2_BER 0x3f00 | ||
| 225 | |||
| 226 | /* AN 10GBASE-T control register. */ | ||
| 227 | #define MDIO_AN_10GBT_CTRL_ADV10G 0x1000 /* Advertise 10GBASE-T */ | ||
| 228 | |||
| 229 | /* AN 10GBASE-T status register. */ | ||
| 230 | #define MDIO_AN_10GBT_STAT_LPTRR 0x0200 /* LP training reset req. */ | ||
| 231 | #define MDIO_AN_10GBT_STAT_LPLTABLE 0x0400 /* LP loop timing ability */ | ||
| 232 | #define MDIO_AN_10GBT_STAT_LP10G 0x0800 /* LP is 10GBT capable */ | ||
| 233 | #define MDIO_AN_10GBT_STAT_REMOK 0x1000 /* Remote OK */ | ||
| 234 | #define MDIO_AN_10GBT_STAT_LOCOK 0x2000 /* Local OK */ | ||
| 235 | #define MDIO_AN_10GBT_STAT_MS 0x4000 /* Master/slave config */ | ||
| 236 | #define MDIO_AN_10GBT_STAT_MSFLT 0x8000 /* Master/slave config fault */ | ||
| 237 | |||
| 238 | /* LASI RX_ALARM control/status registers. */ | ||
| 239 | #define MDIO_PMA_LASI_RX_PHYXSLFLT 0x0001 /* PHY XS RX local fault */ | ||
| 240 | #define MDIO_PMA_LASI_RX_PCSLFLT 0x0008 /* PCS RX local fault */ | ||
| 241 | #define MDIO_PMA_LASI_RX_PMALFLT 0x0010 /* PMA/PMD RX local fault */ | ||
| 242 | #define MDIO_PMA_LASI_RX_OPTICPOWERFLT 0x0020 /* RX optical power fault */ | ||
| 243 | #define MDIO_PMA_LASI_RX_WISLFLT 0x0200 /* WIS local fault */ | ||
| 244 | |||
| 245 | /* LASI TX_ALARM control/status registers. */ | ||
| 246 | #define MDIO_PMA_LASI_TX_PHYXSLFLT 0x0001 /* PHY XS TX local fault */ | ||
| 247 | #define MDIO_PMA_LASI_TX_PCSLFLT 0x0008 /* PCS TX local fault */ | ||
| 248 | #define MDIO_PMA_LASI_TX_PMALFLT 0x0010 /* PMA/PMD TX local fault */ | ||
| 249 | #define MDIO_PMA_LASI_TX_LASERPOWERFLT 0x0080 /* Laser output power fault */ | ||
| 250 | #define MDIO_PMA_LASI_TX_LASERTEMPFLT 0x0100 /* Laser temperature fault */ | ||
| 251 | #define MDIO_PMA_LASI_TX_LASERBICURRFLT 0x0200 /* Laser bias current fault */ | ||
| 252 | |||
| 253 | /* LASI control/status registers. */ | ||
| 254 | #define MDIO_PMA_LASI_LSALARM 0x0001 /* LS_ALARM enable/status */ | ||
| 255 | #define MDIO_PMA_LASI_TXALARM 0x0002 /* TX_ALARM enable/status */ | ||
| 256 | #define MDIO_PMA_LASI_RXALARM 0x0004 /* RX_ALARM enable/status */ | ||
| 257 | |||
| 258 | /* Mapping between MDIO PRTAD/DEVAD and mii_ioctl_data::phy_id */ | ||
| 259 | |||
| 260 | #define MDIO_PHY_ID_C45 0x8000 | ||
| 261 | #define MDIO_PHY_ID_PRTAD 0x03e0 | ||
| 262 | #define MDIO_PHY_ID_DEVAD 0x001f | ||
| 263 | #define MDIO_PHY_ID_C45_MASK \ | ||
| 264 | (MDIO_PHY_ID_C45 | MDIO_PHY_ID_PRTAD | MDIO_PHY_ID_DEVAD) | ||
| 265 | |||
| 266 | static inline __u16 mdio_phy_id_c45(int prtad, int devad) | ||
| 267 | { | ||
| 268 | return MDIO_PHY_ID_C45 | (prtad << 5) | devad; | ||
| 269 | } | ||
| 270 | |||
| 271 | static inline bool mdio_phy_id_is_c45(int phy_id) | ||
| 272 | { | ||
| 273 | return (phy_id & MDIO_PHY_ID_C45) && !(phy_id & ~MDIO_PHY_ID_C45_MASK); | ||
| 274 | } | ||
| 275 | |||
| 276 | static inline __u16 mdio_phy_id_prtad(int phy_id) | ||
| 277 | { | ||
| 278 | return (phy_id & MDIO_PHY_ID_PRTAD) >> 5; | ||
| 279 | } | ||
| 280 | |||
| 281 | static inline __u16 mdio_phy_id_devad(int phy_id) | ||
| 282 | { | ||
| 283 | return phy_id & MDIO_PHY_ID_DEVAD; | ||
| 284 | } | ||
| 285 | |||
| 286 | #define MDIO_SUPPORTS_C22 1 | ||
| 287 | #define MDIO_SUPPORTS_C45 2 | ||
| 288 | |||
| 289 | #ifdef __KERNEL__ | ||
| 290 | |||
| 291 | /** | ||
| 292 | * struct mdio_if_info - Ethernet controller MDIO interface | ||
| 293 | * @prtad: PRTAD of the PHY (%MDIO_PRTAD_NONE if not present/unknown) | ||
| 294 | * @mmds: Mask of MMDs expected to be present in the PHY. This must be | ||
| 295 | * non-zero unless @prtad = %MDIO_PRTAD_NONE. | ||
| 296 | * @mode_support: MDIO modes supported. If %MDIO_SUPPORTS_C22 is set then | ||
| 297 | * MII register access will be passed through with @devad = | ||
| 298 | * %MDIO_DEVAD_NONE. If %MDIO_EMULATE_C22 is set then access to | ||
| 299 | * commonly used clause 22 registers will be translated into | ||
| 300 | * clause 45 registers. | ||
| 301 | * @dev: Net device structure | ||
| 302 | * @mdio_read: Register read function; returns value or negative error code | ||
| 303 | * @mdio_write: Register write function; returns 0 or negative error code | ||
| 304 | */ | ||
| 305 | struct mdio_if_info { | ||
| 306 | int prtad; | ||
| 307 | u32 __bitwise mmds; | ||
| 308 | unsigned mode_support; | ||
| 309 | |||
| 310 | struct net_device *dev; | ||
| 311 | int (*mdio_read)(struct net_device *dev, int prtad, int devad, | ||
| 312 | u16 addr); | ||
| 313 | int (*mdio_write)(struct net_device *dev, int prtad, int devad, | ||
| 314 | u16 addr, u16 val); | ||
| 315 | }; | ||
| 316 | |||
| 317 | #define MDIO_PRTAD_NONE (-1) | ||
| 318 | #define MDIO_DEVAD_NONE (-1) | ||
| 319 | #define MDIO_EMULATE_C22 4 | ||
| 320 | |||
| 321 | struct ethtool_cmd; | ||
| 322 | struct ethtool_pauseparam; | ||
| 323 | extern int mdio45_probe(struct mdio_if_info *mdio, int prtad); | ||
| 324 | extern int mdio_set_flag(const struct mdio_if_info *mdio, | ||
| 325 | int prtad, int devad, u16 addr, int mask, | ||
| 326 | bool sense); | ||
| 327 | extern int mdio45_links_ok(const struct mdio_if_info *mdio, u32 mmds); | ||
| 328 | extern int mdio45_nway_restart(const struct mdio_if_info *mdio); | ||
| 329 | extern void mdio45_ethtool_gset_npage(const struct mdio_if_info *mdio, | ||
| 330 | struct ethtool_cmd *ecmd, | ||
| 331 | u32 npage_adv, u32 npage_lpa); | ||
| 332 | extern void | ||
| 333 | mdio45_ethtool_spauseparam_an(const struct mdio_if_info *mdio, | ||
| 334 | const struct ethtool_pauseparam *ecmd); | ||
| 335 | |||
| 336 | /** | ||
| 337 | * mdio45_ethtool_gset - get settings for ETHTOOL_GSET | ||
| 338 | * @mdio: MDIO interface | ||
| 339 | * @ecmd: Ethtool request structure | ||
| 340 | * | ||
| 341 | * Since the CSRs for auto-negotiation using next pages are not fully | ||
| 342 | * standardised, this function does not attempt to decode them. Use | ||
| 343 | * mdio45_ethtool_gset_npage() to specify advertisement bits from next | ||
| 344 | * pages. | ||
| 345 | */ | ||
| 346 | static inline void mdio45_ethtool_gset(const struct mdio_if_info *mdio, | ||
| 347 | struct ethtool_cmd *ecmd) | ||
| 348 | { | ||
| 349 | mdio45_ethtool_gset_npage(mdio, ecmd, 0, 0); | ||
| 350 | } | ||
| 351 | |||
| 352 | extern int mdio_mii_ioctl(const struct mdio_if_info *mdio, | ||
| 353 | struct mii_ioctl_data *mii_data, int cmd); | ||
| 354 | |||
| 355 | #endif /* __KERNEL__ */ | ||
| 356 | #endif /* __LINUX_MDIO_H__ */ | ||
diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h index 516d955ab8a1..c377118884e6 100644 --- a/include/linux/mfd/tmio.h +++ b/include/linux/mfd/tmio.h | |||
| @@ -19,6 +19,13 @@ | |||
| 19 | } while (0) | 19 | } while (0) |
| 20 | 20 | ||
| 21 | /* | 21 | /* |
| 22 | * data for the MMC controller | ||
| 23 | */ | ||
| 24 | struct tmio_mmc_data { | ||
| 25 | unsigned int hclk; | ||
| 26 | }; | ||
| 27 | |||
| 28 | /* | ||
| 22 | * data for the NAND controller | 29 | * data for the NAND controller |
| 23 | */ | 30 | */ |
| 24 | struct tmio_nand_data { | 31 | struct tmio_nand_data { |
diff --git a/include/linux/mg_disk.h b/include/linux/mg_disk.h new file mode 100644 index 000000000000..e11f4d9f1c2e --- /dev/null +++ b/include/linux/mg_disk.h | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mg_disk.c | ||
| 3 | * | ||
| 4 | * Private data for mflash platform driver | ||
| 5 | * | ||
| 6 | * (c) 2008 mGine Co.,LTD | ||
| 7 | * (c) 2008 unsik Kim <donari75@gmail.com> | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License version 2 as | ||
| 11 | * published by the Free Software Foundation. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __MG_DISK_H__ | ||
| 15 | #define __MG_DISK_H__ | ||
| 16 | |||
| 17 | /* name for platform device */ | ||
| 18 | #define MG_DEV_NAME "mg_disk" | ||
| 19 | |||
| 20 | /* names of GPIO resource */ | ||
| 21 | #define MG_RST_PIN "mg_rst" | ||
| 22 | /* except MG_BOOT_DEV, reset-out pin should be assigned */ | ||
| 23 | #define MG_RSTOUT_PIN "mg_rstout" | ||
| 24 | |||
| 25 | /* device attribution */ | ||
| 26 | /* use mflash as boot device */ | ||
| 27 | #define MG_BOOT_DEV (1 << 0) | ||
| 28 | /* use mflash as storage device */ | ||
| 29 | #define MG_STORAGE_DEV (1 << 1) | ||
| 30 | /* same as MG_STORAGE_DEV, but bootloader already done reset sequence */ | ||
| 31 | #define MG_STORAGE_DEV_SKIP_RST (1 << 2) | ||
| 32 | |||
| 33 | /* private driver data */ | ||
| 34 | struct mg_drv_data { | ||
| 35 | /* disk resource */ | ||
| 36 | u32 use_polling; | ||
| 37 | |||
| 38 | /* device attribution */ | ||
| 39 | u32 dev_attr; | ||
| 40 | |||
| 41 | /* internally used */ | ||
| 42 | void *host; | ||
| 43 | }; | ||
| 44 | |||
| 45 | #endif | ||
diff --git a/include/linux/mii.h b/include/linux/mii.h index ad748588faf1..359fba880274 100644 --- a/include/linux/mii.h +++ b/include/linux/mii.h | |||
| @@ -240,6 +240,22 @@ static inline unsigned int mii_duplex (unsigned int duplex_lock, | |||
| 240 | } | 240 | } |
| 241 | 241 | ||
| 242 | /** | 242 | /** |
| 243 | * mii_advertise_flowctrl - get flow control advertisement flags | ||
| 244 | * @cap: Flow control capabilities (FLOW_CTRL_RX, FLOW_CTRL_TX or both) | ||
| 245 | */ | ||
| 246 | static inline u16 mii_advertise_flowctrl(int cap) | ||
| 247 | { | ||
| 248 | u16 adv = 0; | ||
| 249 | |||
| 250 | if (cap & FLOW_CTRL_RX) | ||
| 251 | adv = ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM; | ||
| 252 | if (cap & FLOW_CTRL_TX) | ||
| 253 | adv ^= ADVERTISE_PAUSE_ASYM; | ||
| 254 | |||
| 255 | return adv; | ||
| 256 | } | ||
| 257 | |||
| 258 | /** | ||
| 243 | * mii_resolve_flowctrl_fdx | 259 | * mii_resolve_flowctrl_fdx |
| 244 | * @lcladv: value of MII ADVERTISE register | 260 | * @lcladv: value of MII ADVERTISE register |
| 245 | * @rmtadv: value of MII LPA register | 261 | * @rmtadv: value of MII LPA register |
| @@ -250,18 +266,12 @@ static inline u8 mii_resolve_flowctrl_fdx(u16 lcladv, u16 rmtadv) | |||
| 250 | { | 266 | { |
| 251 | u8 cap = 0; | 267 | u8 cap = 0; |
| 252 | 268 | ||
| 253 | if (lcladv & ADVERTISE_PAUSE_CAP) { | 269 | if (lcladv & rmtadv & ADVERTISE_PAUSE_CAP) { |
| 254 | if (lcladv & ADVERTISE_PAUSE_ASYM) { | 270 | cap = FLOW_CTRL_TX | FLOW_CTRL_RX; |
| 255 | if (rmtadv & LPA_PAUSE_CAP) | 271 | } else if (lcladv & rmtadv & ADVERTISE_PAUSE_ASYM) { |
| 256 | cap = FLOW_CTRL_TX | FLOW_CTRL_RX; | 272 | if (lcladv & ADVERTISE_PAUSE_CAP) |
| 257 | else if (rmtadv & LPA_PAUSE_ASYM) | 273 | cap = FLOW_CTRL_RX; |
| 258 | cap = FLOW_CTRL_RX; | 274 | else if (rmtadv & ADVERTISE_PAUSE_CAP) |
| 259 | } else { | ||
| 260 | if (rmtadv & LPA_PAUSE_CAP) | ||
| 261 | cap = FLOW_CTRL_TX | FLOW_CTRL_RX; | ||
| 262 | } | ||
| 263 | } else if (lcladv & ADVERTISE_PAUSE_ASYM) { | ||
| 264 | if ((rmtadv & LPA_PAUSE_CAP) && (rmtadv & LPA_PAUSE_ASYM)) | ||
| 265 | cap = FLOW_CTRL_TX; | 275 | cap = FLOW_CTRL_TX; |
| 266 | } | 276 | } |
| 267 | 277 | ||
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index 3aff8a6a389e..ce7cc6c7bcbb 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
| @@ -210,6 +210,7 @@ struct mlx4_caps { | |||
| 210 | int num_comp_vectors; | 210 | int num_comp_vectors; |
| 211 | int num_mpts; | 211 | int num_mpts; |
| 212 | int num_mtt_segs; | 212 | int num_mtt_segs; |
| 213 | int mtts_per_seg; | ||
| 213 | int fmr_reserved_mtts; | 214 | int fmr_reserved_mtts; |
| 214 | int reserved_mtts; | 215 | int reserved_mtts; |
| 215 | int reserved_mrws; | 216 | int reserved_mrws; |
diff --git a/include/linux/mlx4/qp.h b/include/linux/mlx4/qp.h index bf8f11982dae..9f29d86e5dc9 100644 --- a/include/linux/mlx4/qp.h +++ b/include/linux/mlx4/qp.h | |||
| @@ -165,6 +165,7 @@ enum { | |||
| 165 | MLX4_WQE_CTRL_IP_CSUM = 1 << 4, | 165 | MLX4_WQE_CTRL_IP_CSUM = 1 << 4, |
| 166 | MLX4_WQE_CTRL_TCP_UDP_CSUM = 1 << 5, | 166 | MLX4_WQE_CTRL_TCP_UDP_CSUM = 1 << 5, |
| 167 | MLX4_WQE_CTRL_INS_VLAN = 1 << 6, | 167 | MLX4_WQE_CTRL_INS_VLAN = 1 << 6, |
| 168 | MLX4_WQE_CTRL_STRONG_ORDER = 1 << 7, | ||
| 168 | }; | 169 | }; |
| 169 | 170 | ||
| 170 | struct mlx4_wqe_ctrl_seg { | 171 | struct mlx4_wqe_ctrl_seg { |
diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h index ea1bf5ba092f..c7211ab6dd4b 100644 --- a/include/linux/mmc/sdio_ids.h +++ b/include/linux/mmc/sdio_ids.h | |||
| @@ -25,5 +25,7 @@ | |||
| 25 | 25 | ||
| 26 | #define SDIO_VENDOR_ID_MARVELL 0x02df | 26 | #define SDIO_VENDOR_ID_MARVELL 0x02df |
| 27 | #define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103 | 27 | #define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103 |
| 28 | #define SDIO_DEVICE_ID_MARVELL_8688WLAN 0x9104 | ||
| 29 | #define SDIO_DEVICE_ID_MARVELL_8688BT 0x9105 | ||
| 28 | 30 | ||
| 29 | #endif | 31 | #endif |
diff --git a/include/linux/module.h b/include/linux/module.h index a8f2c0aa4c32..a7bc6e7b43a7 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
| @@ -77,6 +77,7 @@ search_extable(const struct exception_table_entry *first, | |||
| 77 | void sort_extable(struct exception_table_entry *start, | 77 | void sort_extable(struct exception_table_entry *start, |
| 78 | struct exception_table_entry *finish); | 78 | struct exception_table_entry *finish); |
| 79 | void sort_main_extable(void); | 79 | void sort_main_extable(void); |
| 80 | void trim_init_extable(struct module *m); | ||
| 80 | 81 | ||
| 81 | #ifdef MODULE | 82 | #ifdef MODULE |
| 82 | #define MODULE_GENERIC_TABLE(gtype,name) \ | 83 | #define MODULE_GENERIC_TABLE(gtype,name) \ |
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h index a4f0b931846c..6547c3cdbc4c 100644 --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h | |||
| @@ -36,9 +36,14 @@ typedef int (*param_set_fn)(const char *val, struct kernel_param *kp); | |||
| 36 | /* Returns length written or -errno. Buffer is 4k (ie. be short!) */ | 36 | /* Returns length written or -errno. Buffer is 4k (ie. be short!) */ |
| 37 | typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp); | 37 | typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp); |
| 38 | 38 | ||
| 39 | /* Flag bits for kernel_param.flags */ | ||
| 40 | #define KPARAM_KMALLOCED 1 | ||
| 41 | #define KPARAM_ISBOOL 2 | ||
| 42 | |||
| 39 | struct kernel_param { | 43 | struct kernel_param { |
| 40 | const char *name; | 44 | const char *name; |
| 41 | unsigned int perm; | 45 | u16 perm; |
| 46 | u16 flags; | ||
| 42 | param_set_fn set; | 47 | param_set_fn set; |
| 43 | param_get_fn get; | 48 | param_get_fn get; |
| 44 | union { | 49 | union { |
| @@ -79,7 +84,7 @@ struct kparam_array | |||
| 79 | parameters. perm sets the visibility in sysfs: 000 means it's | 84 | parameters. perm sets the visibility in sysfs: 000 means it's |
| 80 | not there, read bits mean it's readable, write bits mean it's | 85 | not there, read bits mean it's readable, write bits mean it's |
| 81 | writable. */ | 86 | writable. */ |
| 82 | #define __module_param_call(prefix, name, set, get, arg, perm) \ | 87 | #define __module_param_call(prefix, name, set, get, arg, isbool, perm) \ |
| 83 | /* Default value instead of permissions? */ \ | 88 | /* Default value instead of permissions? */ \ |
| 84 | static int __param_perm_check_##name __attribute__((unused)) = \ | 89 | static int __param_perm_check_##name __attribute__((unused)) = \ |
| 85 | BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)) \ | 90 | BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)) \ |
| @@ -88,10 +93,13 @@ struct kparam_array | |||
| 88 | static struct kernel_param __moduleparam_const __param_##name \ | 93 | static struct kernel_param __moduleparam_const __param_##name \ |
| 89 | __used \ | 94 | __used \ |
| 90 | __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \ | 95 | __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \ |
| 91 | = { __param_str_##name, perm, set, get, { arg } } | 96 | = { __param_str_##name, perm, isbool ? KPARAM_ISBOOL : 0, \ |
| 97 | set, get, { arg } } | ||
| 92 | 98 | ||
| 93 | #define module_param_call(name, set, get, arg, perm) \ | 99 | #define module_param_call(name, set, get, arg, perm) \ |
| 94 | __module_param_call(MODULE_PARAM_PREFIX, name, set, get, arg, perm) | 100 | __module_param_call(MODULE_PARAM_PREFIX, \ |
| 101 | name, set, get, arg, \ | ||
| 102 | __same_type(*(arg), bool), perm) | ||
| 95 | 103 | ||
| 96 | /* Helper functions: type is byte, short, ushort, int, uint, long, | 104 | /* Helper functions: type is byte, short, ushort, int, uint, long, |
| 97 | ulong, charp, bool or invbool, or XXX if you define param_get_XXX, | 105 | ulong, charp, bool or invbool, or XXX if you define param_get_XXX, |
| @@ -120,15 +128,16 @@ struct kparam_array | |||
| 120 | #define core_param(name, var, type, perm) \ | 128 | #define core_param(name, var, type, perm) \ |
| 121 | param_check_##type(name, &(var)); \ | 129 | param_check_##type(name, &(var)); \ |
| 122 | __module_param_call("", name, param_set_##type, param_get_##type, \ | 130 | __module_param_call("", name, param_set_##type, param_get_##type, \ |
| 123 | &var, perm) | 131 | &var, __same_type(var, bool), perm) |
| 124 | #endif /* !MODULE */ | 132 | #endif /* !MODULE */ |
| 125 | 133 | ||
| 126 | /* Actually copy string: maxlen param is usually sizeof(string). */ | 134 | /* Actually copy string: maxlen param is usually sizeof(string). */ |
| 127 | #define module_param_string(name, string, len, perm) \ | 135 | #define module_param_string(name, string, len, perm) \ |
| 128 | static const struct kparam_string __param_string_##name \ | 136 | static const struct kparam_string __param_string_##name \ |
| 129 | = { len, string }; \ | 137 | = { len, string }; \ |
| 130 | module_param_call(name, param_set_copystring, param_get_string, \ | 138 | __module_param_call(MODULE_PARAM_PREFIX, name, \ |
| 131 | .str = &__param_string_##name, perm); \ | 139 | param_set_copystring, param_get_string, \ |
| 140 | .str = &__param_string_##name, 0, perm); \ | ||
| 132 | __MODULE_PARM_TYPE(name, "string") | 141 | __MODULE_PARM_TYPE(name, "string") |
| 133 | 142 | ||
| 134 | /* Called on module insert or kernel boot */ | 143 | /* Called on module insert or kernel boot */ |
| @@ -186,21 +195,30 @@ extern int param_set_charp(const char *val, struct kernel_param *kp); | |||
| 186 | extern int param_get_charp(char *buffer, struct kernel_param *kp); | 195 | extern int param_get_charp(char *buffer, struct kernel_param *kp); |
| 187 | #define param_check_charp(name, p) __param_check(name, p, char *) | 196 | #define param_check_charp(name, p) __param_check(name, p, char *) |
| 188 | 197 | ||
| 198 | /* For historical reasons "bool" parameters can be (unsigned) "int". */ | ||
| 189 | extern int param_set_bool(const char *val, struct kernel_param *kp); | 199 | extern int param_set_bool(const char *val, struct kernel_param *kp); |
| 190 | extern int param_get_bool(char *buffer, struct kernel_param *kp); | 200 | extern int param_get_bool(char *buffer, struct kernel_param *kp); |
| 191 | #define param_check_bool(name, p) __param_check(name, p, int) | 201 | #define param_check_bool(name, p) \ |
| 202 | static inline void __check_##name(void) \ | ||
| 203 | { \ | ||
| 204 | BUILD_BUG_ON(!__same_type(*(p), bool) && \ | ||
| 205 | !__same_type(*(p), unsigned int) && \ | ||
| 206 | !__same_type(*(p), int)); \ | ||
| 207 | } | ||
| 192 | 208 | ||
| 193 | extern int param_set_invbool(const char *val, struct kernel_param *kp); | 209 | extern int param_set_invbool(const char *val, struct kernel_param *kp); |
| 194 | extern int param_get_invbool(char *buffer, struct kernel_param *kp); | 210 | extern int param_get_invbool(char *buffer, struct kernel_param *kp); |
| 195 | #define param_check_invbool(name, p) __param_check(name, p, int) | 211 | #define param_check_invbool(name, p) __param_check(name, p, bool) |
| 196 | 212 | ||
| 197 | /* Comma-separated array: *nump is set to number they actually specified. */ | 213 | /* Comma-separated array: *nump is set to number they actually specified. */ |
| 198 | #define module_param_array_named(name, array, type, nump, perm) \ | 214 | #define module_param_array_named(name, array, type, nump, perm) \ |
| 199 | static const struct kparam_array __param_arr_##name \ | 215 | static const struct kparam_array __param_arr_##name \ |
| 200 | = { ARRAY_SIZE(array), nump, param_set_##type, param_get_##type,\ | 216 | = { ARRAY_SIZE(array), nump, param_set_##type, param_get_##type,\ |
| 201 | sizeof(array[0]), array }; \ | 217 | sizeof(array[0]), array }; \ |
| 202 | module_param_call(name, param_array_set, param_array_get, \ | 218 | __module_param_call(MODULE_PARAM_PREFIX, name, \ |
| 203 | .arr = &__param_arr_##name, perm); \ | 219 | param_array_set, param_array_get, \ |
| 220 | .arr = &__param_arr_##name, \ | ||
| 221 | __same_type(array[0], bool), perm); \ | ||
| 204 | __MODULE_PARM_TYPE(name, "array of " #type) | 222 | __MODULE_PARM_TYPE(name, "array of " #type) |
| 205 | 223 | ||
| 206 | #define module_param_array(name, type, nump, perm) \ | 224 | #define module_param_array(name, type, nump, perm) \ |
diff --git a/include/linux/mount.h b/include/linux/mount.h index 51f55f903aff..5d5275364867 100644 --- a/include/linux/mount.h +++ b/include/linux/mount.h | |||
| @@ -30,7 +30,7 @@ struct mnt_namespace; | |||
| 30 | #define MNT_STRICTATIME 0x80 | 30 | #define MNT_STRICTATIME 0x80 |
| 31 | 31 | ||
| 32 | #define MNT_SHRINKABLE 0x100 | 32 | #define MNT_SHRINKABLE 0x100 |
| 33 | #define MNT_IMBALANCED_WRITE_COUNT 0x200 /* just for debugging */ | 33 | #define MNT_WRITE_HOLD 0x200 |
| 34 | 34 | ||
| 35 | #define MNT_SHARED 0x1000 /* if the vfsmount is a shared mount */ | 35 | #define MNT_SHARED 0x1000 /* if the vfsmount is a shared mount */ |
| 36 | #define MNT_UNBINDABLE 0x2000 /* if the vfsmount is a unbindable mount */ | 36 | #define MNT_UNBINDABLE 0x2000 /* if the vfsmount is a unbindable mount */ |
| @@ -65,13 +65,22 @@ struct vfsmount { | |||
| 65 | int mnt_expiry_mark; /* true if marked for expiry */ | 65 | int mnt_expiry_mark; /* true if marked for expiry */ |
| 66 | int mnt_pinned; | 66 | int mnt_pinned; |
| 67 | int mnt_ghosts; | 67 | int mnt_ghosts; |
| 68 | /* | 68 | #ifdef CONFIG_SMP |
| 69 | * This value is not stable unless all of the mnt_writers[] spinlocks | 69 | int *mnt_writers; |
| 70 | * are held, and all mnt_writer[]s on this mount have 0 as their ->count | 70 | #else |
| 71 | */ | 71 | int mnt_writers; |
| 72 | atomic_t __mnt_writers; | 72 | #endif |
| 73 | }; | 73 | }; |
| 74 | 74 | ||
| 75 | static inline int *get_mnt_writers_ptr(struct vfsmount *mnt) | ||
| 76 | { | ||
| 77 | #ifdef CONFIG_SMP | ||
| 78 | return mnt->mnt_writers; | ||
| 79 | #else | ||
| 80 | return &mnt->mnt_writers; | ||
| 81 | #endif | ||
| 82 | } | ||
| 83 | |||
| 75 | static inline struct vfsmount *mntget(struct vfsmount *mnt) | 84 | static inline struct vfsmount *mntget(struct vfsmount *mnt) |
| 76 | { | 85 | { |
| 77 | if (mnt) | 86 | if (mnt) |
| @@ -79,7 +88,11 @@ static inline struct vfsmount *mntget(struct vfsmount *mnt) | |||
| 79 | return mnt; | 88 | return mnt; |
| 80 | } | 89 | } |
| 81 | 90 | ||
| 91 | struct file; /* forward dec */ | ||
| 92 | |||
| 82 | extern int mnt_want_write(struct vfsmount *mnt); | 93 | extern int mnt_want_write(struct vfsmount *mnt); |
| 94 | extern int mnt_want_write_file(struct file *file); | ||
| 95 | extern int mnt_clone_write(struct vfsmount *mnt); | ||
| 83 | extern void mnt_drop_write(struct vfsmount *mnt); | 96 | extern void mnt_drop_write(struct vfsmount *mnt); |
| 84 | extern void mntput_no_expire(struct vfsmount *mnt); | 97 | extern void mntput_no_expire(struct vfsmount *mnt); |
| 85 | extern void mnt_pin(struct vfsmount *mnt); | 98 | extern void mnt_pin(struct vfsmount *mnt); |
diff --git a/include/linux/namei.h b/include/linux/namei.h index 518098fe63af..d870ae2faedc 100644 --- a/include/linux/namei.h +++ b/include/linux/namei.h | |||
| @@ -18,6 +18,7 @@ enum { MAX_NESTED_LINKS = 8 }; | |||
| 18 | struct nameidata { | 18 | struct nameidata { |
| 19 | struct path path; | 19 | struct path path; |
| 20 | struct qstr last; | 20 | struct qstr last; |
| 21 | struct path root; | ||
| 21 | unsigned int flags; | 22 | unsigned int flags; |
| 22 | int last_type; | 23 | int last_type; |
| 23 | unsigned depth; | 24 | unsigned depth; |
| @@ -77,8 +78,8 @@ extern void release_open_intent(struct nameidata *); | |||
| 77 | extern struct dentry *lookup_one_len(const char *, struct dentry *, int); | 78 | extern struct dentry *lookup_one_len(const char *, struct dentry *, int); |
| 78 | extern struct dentry *lookup_one_noperm(const char *, struct dentry *); | 79 | extern struct dentry *lookup_one_noperm(const char *, struct dentry *); |
| 79 | 80 | ||
| 80 | extern int follow_down(struct vfsmount **, struct dentry **); | 81 | extern int follow_down(struct path *); |
| 81 | extern int follow_up(struct vfsmount **, struct dentry **); | 82 | extern int follow_up(struct path *); |
| 82 | 83 | ||
| 83 | extern struct dentry *lock_rename(struct dentry *, struct dentry *); | 84 | extern struct dentry *lock_rename(struct dentry *, struct dentry *); |
| 84 | extern void unlock_rename(struct dentry *, struct dentry *); | 85 | extern void unlock_rename(struct dentry *, struct dentry *); |
diff --git a/include/linux/net_dropmon.h b/include/linux/net_dropmon.h index 0e2e100c44a2..3ceb0cc1bc78 100644 --- a/include/linux/net_dropmon.h +++ b/include/linux/net_dropmon.h | |||
| @@ -3,12 +3,20 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <linux/netlink.h> | 5 | #include <linux/netlink.h> |
| 6 | #include <linux/types.h> | ||
| 6 | 7 | ||
| 7 | struct net_dm_drop_point { | 8 | struct net_dm_drop_point { |
| 8 | __u8 pc[8]; | 9 | __u8 pc[8]; |
| 9 | __u32 count; | 10 | __u32 count; |
| 10 | }; | 11 | }; |
| 11 | 12 | ||
| 13 | #define is_drop_point_hw(x) do {\ | ||
| 14 | int ____i, ____j;\ | ||
| 15 | for (____i = 0; ____i < 8; i ____i++)\ | ||
| 16 | ____j |= x[____i];\ | ||
| 17 | ____j;\ | ||
| 18 | } while (0) | ||
| 19 | |||
| 12 | #define NET_DM_CFG_VERSION 0 | 20 | #define NET_DM_CFG_VERSION 0 |
| 13 | #define NET_DM_CFG_ALERT_COUNT 1 | 21 | #define NET_DM_CFG_ALERT_COUNT 1 |
| 14 | #define NET_DM_CFG_ALERT_DELAY 2 | 22 | #define NET_DM_CFG_ALERT_DELAY 2 |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 5a96a1a406e9..9ea8d6dfe540 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -39,9 +39,11 @@ | |||
| 39 | 39 | ||
| 40 | #include <linux/device.h> | 40 | #include <linux/device.h> |
| 41 | #include <linux/percpu.h> | 41 | #include <linux/percpu.h> |
| 42 | #include <linux/rculist.h> | ||
| 42 | #include <linux/dmaengine.h> | 43 | #include <linux/dmaengine.h> |
| 43 | #include <linux/workqueue.h> | 44 | #include <linux/workqueue.h> |
| 44 | 45 | ||
| 46 | #include <linux/ethtool.h> | ||
| 45 | #include <net/net_namespace.h> | 47 | #include <net/net_namespace.h> |
| 46 | #include <net/dsa.h> | 48 | #include <net/dsa.h> |
| 47 | #ifdef CONFIG_DCB | 49 | #ifdef CONFIG_DCB |
| @@ -49,7 +51,6 @@ | |||
| 49 | #endif | 51 | #endif |
| 50 | 52 | ||
| 51 | struct vlan_group; | 53 | struct vlan_group; |
| 52 | struct ethtool_ops; | ||
| 53 | struct netpoll_info; | 54 | struct netpoll_info; |
| 54 | /* 802.11 specific */ | 55 | /* 802.11 specific */ |
| 55 | struct wireless_dev; | 56 | struct wireless_dev; |
| @@ -210,6 +211,19 @@ struct dev_addr_list | |||
| 210 | #define dmi_users da_users | 211 | #define dmi_users da_users |
| 211 | #define dmi_gusers da_gusers | 212 | #define dmi_gusers da_gusers |
| 212 | 213 | ||
| 214 | struct netdev_hw_addr { | ||
| 215 | struct list_head list; | ||
| 216 | unsigned char addr[MAX_ADDR_LEN]; | ||
| 217 | unsigned char type; | ||
| 218 | #define NETDEV_HW_ADDR_T_LAN 1 | ||
| 219 | #define NETDEV_HW_ADDR_T_SAN 2 | ||
| 220 | #define NETDEV_HW_ADDR_T_SLAVE 3 | ||
| 221 | #define NETDEV_HW_ADDR_T_UNICAST 4 | ||
| 222 | int refcount; | ||
| 223 | bool synced; | ||
| 224 | struct rcu_head rcu_head; | ||
| 225 | }; | ||
| 226 | |||
| 213 | struct hh_cache | 227 | struct hh_cache |
| 214 | { | 228 | { |
| 215 | struct hh_cache *hh_next; /* Next entry */ | 229 | struct hh_cache *hh_next; /* Next entry */ |
| @@ -447,12 +461,25 @@ enum netdev_queue_state_t | |||
| 447 | }; | 461 | }; |
| 448 | 462 | ||
| 449 | struct netdev_queue { | 463 | struct netdev_queue { |
| 464 | /* | ||
| 465 | * read mostly part | ||
| 466 | */ | ||
| 450 | struct net_device *dev; | 467 | struct net_device *dev; |
| 451 | struct Qdisc *qdisc; | 468 | struct Qdisc *qdisc; |
| 452 | unsigned long state; | 469 | unsigned long state; |
| 453 | spinlock_t _xmit_lock; | ||
| 454 | int xmit_lock_owner; | ||
| 455 | struct Qdisc *qdisc_sleeping; | 470 | struct Qdisc *qdisc_sleeping; |
| 471 | /* | ||
| 472 | * write mostly part | ||
| 473 | */ | ||
| 474 | spinlock_t _xmit_lock ____cacheline_aligned_in_smp; | ||
| 475 | int xmit_lock_owner; | ||
| 476 | /* | ||
| 477 | * please use this field instead of dev->trans_start | ||
| 478 | */ | ||
| 479 | unsigned long trans_start; | ||
| 480 | unsigned long tx_bytes; | ||
| 481 | unsigned long tx_packets; | ||
| 482 | unsigned long tx_dropped; | ||
| 456 | } ____cacheline_aligned_in_smp; | 483 | } ____cacheline_aligned_in_smp; |
| 457 | 484 | ||
| 458 | 485 | ||
| @@ -670,7 +697,9 @@ struct net_device | |||
| 670 | #define NETIF_F_GRO 16384 /* Generic receive offload */ | 697 | #define NETIF_F_GRO 16384 /* Generic receive offload */ |
| 671 | #define NETIF_F_LRO 32768 /* large receive offload */ | 698 | #define NETIF_F_LRO 32768 /* large receive offload */ |
| 672 | 699 | ||
| 700 | /* the GSO_MASK reserves bits 16 through 23 */ | ||
| 673 | #define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ | 701 | #define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ |
| 702 | #define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ | ||
| 674 | 703 | ||
| 675 | /* Segmentation offload features */ | 704 | /* Segmentation offload features */ |
| 676 | #define NETIF_F_GSO_SHIFT 16 | 705 | #define NETIF_F_GSO_SHIFT 16 |
| @@ -747,10 +776,11 @@ struct net_device | |||
| 747 | unsigned char addr_len; /* hardware address length */ | 776 | unsigned char addr_len; /* hardware address length */ |
| 748 | unsigned short dev_id; /* for shared network cards */ | 777 | unsigned short dev_id; /* for shared network cards */ |
| 749 | 778 | ||
| 750 | spinlock_t addr_list_lock; | 779 | struct list_head uc_list; /* Secondary unicast mac |
| 751 | struct dev_addr_list *uc_list; /* Secondary unicast mac addresses */ | 780 | addresses */ |
| 752 | int uc_count; /* Number of installed ucasts */ | 781 | int uc_count; /* Number of installed ucasts */ |
| 753 | int uc_promisc; | 782 | int uc_promisc; |
| 783 | spinlock_t addr_list_lock; | ||
| 754 | struct dev_addr_list *mc_list; /* Multicast mac addresses */ | 784 | struct dev_addr_list *mc_list; /* Multicast mac addresses */ |
| 755 | int mc_count; /* Number of installed mcasts */ | 785 | int mc_count; /* Number of installed mcasts */ |
| 756 | unsigned int promiscuity; | 786 | unsigned int promiscuity; |
| @@ -776,8 +806,11 @@ struct net_device | |||
| 776 | */ | 806 | */ |
| 777 | unsigned long last_rx; /* Time of last Rx */ | 807 | unsigned long last_rx; /* Time of last Rx */ |
| 778 | /* Interface address info used in eth_type_trans() */ | 808 | /* Interface address info used in eth_type_trans() */ |
| 779 | unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast | 809 | unsigned char *dev_addr; /* hw address, (before bcast |
| 780 | because most packets are unicast) */ | 810 | because most packets are |
| 811 | unicast) */ | ||
| 812 | |||
| 813 | struct list_head dev_addr_list; /* list of device hw addresses */ | ||
| 781 | 814 | ||
| 782 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ | 815 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ |
| 783 | 816 | ||
| @@ -797,6 +830,11 @@ struct net_device | |||
| 797 | * One part is mostly used on xmit path (device) | 830 | * One part is mostly used on xmit path (device) |
| 798 | */ | 831 | */ |
| 799 | /* These may be needed for future network-power-down code. */ | 832 | /* These may be needed for future network-power-down code. */ |
| 833 | |||
| 834 | /* | ||
| 835 | * trans_start here is expensive for high speed devices on SMP, | ||
| 836 | * please use netdev_queue->trans_start instead. | ||
| 837 | */ | ||
| 800 | unsigned long trans_start; /* Time (in jiffies) of last Tx */ | 838 | unsigned long trans_start; /* Time (in jiffies) of last Tx */ |
| 801 | 839 | ||
| 802 | int watchdog_timeo; /* used by dev_watchdog() */ | 840 | int watchdog_timeo; /* used by dev_watchdog() */ |
| @@ -867,49 +905,10 @@ struct net_device | |||
| 867 | /* max exchange id for FCoE LRO by ddp */ | 905 | /* max exchange id for FCoE LRO by ddp */ |
| 868 | unsigned int fcoe_ddp_xid; | 906 | unsigned int fcoe_ddp_xid; |
| 869 | #endif | 907 | #endif |
| 870 | |||
| 871 | #ifdef CONFIG_COMPAT_NET_DEV_OPS | ||
| 872 | struct { | ||
| 873 | int (*init)(struct net_device *dev); | ||
| 874 | void (*uninit)(struct net_device *dev); | ||
| 875 | int (*open)(struct net_device *dev); | ||
| 876 | int (*stop)(struct net_device *dev); | ||
| 877 | int (*hard_start_xmit) (struct sk_buff *skb, | ||
| 878 | struct net_device *dev); | ||
| 879 | u16 (*select_queue)(struct net_device *dev, | ||
| 880 | struct sk_buff *skb); | ||
| 881 | void (*change_rx_flags)(struct net_device *dev, | ||
| 882 | int flags); | ||
| 883 | void (*set_rx_mode)(struct net_device *dev); | ||
| 884 | void (*set_multicast_list)(struct net_device *dev); | ||
| 885 | int (*set_mac_address)(struct net_device *dev, | ||
| 886 | void *addr); | ||
| 887 | int (*validate_addr)(struct net_device *dev); | ||
| 888 | int (*do_ioctl)(struct net_device *dev, | ||
| 889 | struct ifreq *ifr, int cmd); | ||
| 890 | int (*set_config)(struct net_device *dev, | ||
| 891 | struct ifmap *map); | ||
| 892 | int (*change_mtu)(struct net_device *dev, int new_mtu); | ||
| 893 | int (*neigh_setup)(struct net_device *dev, | ||
| 894 | struct neigh_parms *); | ||
| 895 | void (*tx_timeout) (struct net_device *dev); | ||
| 896 | struct net_device_stats* (*get_stats)(struct net_device *dev); | ||
| 897 | void (*vlan_rx_register)(struct net_device *dev, | ||
| 898 | struct vlan_group *grp); | ||
| 899 | void (*vlan_rx_add_vid)(struct net_device *dev, | ||
| 900 | unsigned short vid); | ||
| 901 | void (*vlan_rx_kill_vid)(struct net_device *dev, | ||
| 902 | unsigned short vid); | ||
| 903 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 904 | void (*poll_controller)(struct net_device *dev); | ||
| 905 | #endif | ||
| 906 | }; | ||
| 907 | #endif | ||
| 908 | }; | 908 | }; |
| 909 | #define to_net_dev(d) container_of(d, struct net_device, dev) | 909 | #define to_net_dev(d) container_of(d, struct net_device, dev) |
| 910 | 910 | ||
| 911 | #define NETDEV_ALIGN 32 | 911 | #define NETDEV_ALIGN 32 |
| 912 | #define NETDEV_ALIGN_CONST (NETDEV_ALIGN - 1) | ||
| 913 | 912 | ||
| 914 | static inline | 913 | static inline |
| 915 | struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev, | 914 | struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev, |
| @@ -980,9 +979,7 @@ static inline bool netdev_uses_trailer_tags(struct net_device *dev) | |||
| 980 | */ | 979 | */ |
| 981 | static inline void *netdev_priv(const struct net_device *dev) | 980 | static inline void *netdev_priv(const struct net_device *dev) |
| 982 | { | 981 | { |
| 983 | return (char *)dev + ((sizeof(struct net_device) | 982 | return (char *)dev + ALIGN(sizeof(struct net_device), NETDEV_ALIGN); |
| 984 | + NETDEV_ALIGN_CONST) | ||
| 985 | & ~NETDEV_ALIGN_CONST); | ||
| 986 | } | 983 | } |
| 987 | 984 | ||
| 988 | /* Set the sysfs physical device reference for the network logical device | 985 | /* Set the sysfs physical device reference for the network logical device |
| @@ -1012,6 +1009,12 @@ void netif_napi_add(struct net_device *dev, struct napi_struct *napi, | |||
| 1012 | void netif_napi_del(struct napi_struct *napi); | 1009 | void netif_napi_del(struct napi_struct *napi); |
| 1013 | 1010 | ||
| 1014 | struct napi_gro_cb { | 1011 | struct napi_gro_cb { |
| 1012 | /* Virtual address of skb_shinfo(skb)->frags[0].page + offset. */ | ||
| 1013 | void *frag0; | ||
| 1014 | |||
| 1015 | /* Length of frag0. */ | ||
| 1016 | unsigned int frag0_len; | ||
| 1017 | |||
| 1015 | /* This indicates where we are processing relative to skb->data. */ | 1018 | /* This indicates where we are processing relative to skb->data. */ |
| 1016 | int data_offset; | 1019 | int data_offset; |
| 1017 | 1020 | ||
| @@ -1047,14 +1050,6 @@ struct packet_type { | |||
| 1047 | struct list_head list; | 1050 | struct list_head list; |
| 1048 | }; | 1051 | }; |
| 1049 | 1052 | ||
| 1050 | struct napi_gro_fraginfo { | ||
| 1051 | skb_frag_t frags[MAX_SKB_FRAGS]; | ||
| 1052 | unsigned int nr_frags; | ||
| 1053 | unsigned int ip_summed; | ||
| 1054 | unsigned int len; | ||
| 1055 | __wsum csum; | ||
| 1056 | }; | ||
| 1057 | |||
| 1058 | #include <linux/interrupt.h> | 1053 | #include <linux/interrupt.h> |
| 1059 | #include <linux/notifier.h> | 1054 | #include <linux/notifier.h> |
| 1060 | 1055 | ||
| @@ -1119,9 +1114,9 @@ extern int dev_restart(struct net_device *dev); | |||
| 1119 | #ifdef CONFIG_NETPOLL_TRAP | 1114 | #ifdef CONFIG_NETPOLL_TRAP |
| 1120 | extern int netpoll_trap(void); | 1115 | extern int netpoll_trap(void); |
| 1121 | #endif | 1116 | #endif |
| 1122 | extern void *skb_gro_header(struct sk_buff *skb, unsigned int hlen); | ||
| 1123 | extern int skb_gro_receive(struct sk_buff **head, | 1117 | extern int skb_gro_receive(struct sk_buff **head, |
| 1124 | struct sk_buff *skb); | 1118 | struct sk_buff *skb); |
| 1119 | extern void skb_gro_reset_offset(struct sk_buff *skb); | ||
| 1125 | 1120 | ||
| 1126 | static inline unsigned int skb_gro_offset(const struct sk_buff *skb) | 1121 | static inline unsigned int skb_gro_offset(const struct sk_buff *skb) |
| 1127 | { | 1122 | { |
| @@ -1138,16 +1133,34 @@ static inline void skb_gro_pull(struct sk_buff *skb, unsigned int len) | |||
| 1138 | NAPI_GRO_CB(skb)->data_offset += len; | 1133 | NAPI_GRO_CB(skb)->data_offset += len; |
| 1139 | } | 1134 | } |
| 1140 | 1135 | ||
| 1141 | static inline void skb_gro_reset_offset(struct sk_buff *skb) | 1136 | static inline void *skb_gro_header_fast(struct sk_buff *skb, |
| 1137 | unsigned int offset) | ||
| 1142 | { | 1138 | { |
| 1143 | NAPI_GRO_CB(skb)->data_offset = 0; | 1139 | return NAPI_GRO_CB(skb)->frag0 + offset; |
| 1140 | } | ||
| 1141 | |||
| 1142 | static inline int skb_gro_header_hard(struct sk_buff *skb, unsigned int hlen) | ||
| 1143 | { | ||
| 1144 | return NAPI_GRO_CB(skb)->frag0_len < hlen; | ||
| 1145 | } | ||
| 1146 | |||
| 1147 | static inline void *skb_gro_header_slow(struct sk_buff *skb, unsigned int hlen, | ||
| 1148 | unsigned int offset) | ||
| 1149 | { | ||
| 1150 | NAPI_GRO_CB(skb)->frag0 = NULL; | ||
| 1151 | NAPI_GRO_CB(skb)->frag0_len = 0; | ||
| 1152 | return pskb_may_pull(skb, hlen) ? skb->data + offset : NULL; | ||
| 1144 | } | 1153 | } |
| 1145 | 1154 | ||
| 1146 | static inline void *skb_gro_mac_header(struct sk_buff *skb) | 1155 | static inline void *skb_gro_mac_header(struct sk_buff *skb) |
| 1147 | { | 1156 | { |
| 1148 | return skb_mac_header(skb) < skb->data ? skb_mac_header(skb) : | 1157 | return NAPI_GRO_CB(skb)->frag0 ?: skb_mac_header(skb); |
| 1149 | page_address(skb_shinfo(skb)->frags[0].page) + | 1158 | } |
| 1150 | skb_shinfo(skb)->frags[0].page_offset; | 1159 | |
| 1160 | static inline void *skb_gro_network_header(struct sk_buff *skb) | ||
| 1161 | { | ||
| 1162 | return (NAPI_GRO_CB(skb)->frag0 ?: skb->data) + | ||
| 1163 | skb_network_offset(skb); | ||
| 1151 | } | 1164 | } |
| 1152 | 1165 | ||
| 1153 | static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, | 1166 | static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, |
| @@ -1442,12 +1455,18 @@ extern int napi_gro_receive(struct napi_struct *napi, | |||
| 1442 | struct sk_buff *skb); | 1455 | struct sk_buff *skb); |
| 1443 | extern void napi_reuse_skb(struct napi_struct *napi, | 1456 | extern void napi_reuse_skb(struct napi_struct *napi, |
| 1444 | struct sk_buff *skb); | 1457 | struct sk_buff *skb); |
| 1445 | extern struct sk_buff * napi_fraginfo_skb(struct napi_struct *napi, | 1458 | extern struct sk_buff * napi_get_frags(struct napi_struct *napi); |
| 1446 | struct napi_gro_fraginfo *info); | ||
| 1447 | extern int napi_frags_finish(struct napi_struct *napi, | 1459 | extern int napi_frags_finish(struct napi_struct *napi, |
| 1448 | struct sk_buff *skb, int ret); | 1460 | struct sk_buff *skb, int ret); |
| 1449 | extern int napi_gro_frags(struct napi_struct *napi, | 1461 | extern struct sk_buff * napi_frags_skb(struct napi_struct *napi); |
| 1450 | struct napi_gro_fraginfo *info); | 1462 | extern int napi_gro_frags(struct napi_struct *napi); |
| 1463 | |||
| 1464 | static inline void napi_free_frags(struct napi_struct *napi) | ||
| 1465 | { | ||
| 1466 | kfree_skb(napi->skb); | ||
| 1467 | napi->skb = NULL; | ||
| 1468 | } | ||
| 1469 | |||
| 1451 | extern void netif_nit_deliver(struct sk_buff *skb); | 1470 | extern void netif_nit_deliver(struct sk_buff *skb); |
| 1452 | extern int dev_valid_name(const char *name); | 1471 | extern int dev_valid_name(const char *name); |
| 1453 | extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *); | 1472 | extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *); |
| @@ -1514,6 +1533,8 @@ static inline int netif_carrier_ok(const struct net_device *dev) | |||
| 1514 | return !test_bit(__LINK_STATE_NOCARRIER, &dev->state); | 1533 | return !test_bit(__LINK_STATE_NOCARRIER, &dev->state); |
| 1515 | } | 1534 | } |
| 1516 | 1535 | ||
| 1536 | extern unsigned long dev_trans_start(struct net_device *dev); | ||
| 1537 | |||
| 1517 | extern void __netdev_watchdog_up(struct net_device *dev); | 1538 | extern void __netdev_watchdog_up(struct net_device *dev); |
| 1518 | 1539 | ||
| 1519 | extern void netif_carrier_on(struct net_device *dev); | 1540 | extern void netif_carrier_on(struct net_device *dev); |
| @@ -1671,6 +1692,12 @@ static inline void __netif_tx_unlock_bh(struct netdev_queue *txq) | |||
| 1671 | spin_unlock_bh(&txq->_xmit_lock); | 1692 | spin_unlock_bh(&txq->_xmit_lock); |
| 1672 | } | 1693 | } |
| 1673 | 1694 | ||
| 1695 | static inline void txq_trans_update(struct netdev_queue *txq) | ||
| 1696 | { | ||
| 1697 | if (txq->xmit_lock_owner != -1) | ||
| 1698 | txq->trans_start = jiffies; | ||
| 1699 | } | ||
| 1700 | |||
| 1674 | /** | 1701 | /** |
| 1675 | * netif_tx_lock - grab network device transmit lock | 1702 | * netif_tx_lock - grab network device transmit lock |
| 1676 | * @dev: network device | 1703 | * @dev: network device |
| @@ -1778,6 +1805,13 @@ static inline void netif_addr_unlock_bh(struct net_device *dev) | |||
| 1778 | spin_unlock_bh(&dev->addr_list_lock); | 1805 | spin_unlock_bh(&dev->addr_list_lock); |
| 1779 | } | 1806 | } |
| 1780 | 1807 | ||
| 1808 | /* | ||
| 1809 | * dev_addr_list walker. Should be used only for read access. Call with | ||
| 1810 | * rcu_read_lock held. | ||
| 1811 | */ | ||
| 1812 | #define for_each_dev_addr(dev, ha) \ | ||
| 1813 | list_for_each_entry_rcu(ha, &dev->dev_addr_list, list) | ||
| 1814 | |||
| 1781 | /* These functions live elsewhere (drivers/net/net_init.c, but related) */ | 1815 | /* These functions live elsewhere (drivers/net/net_init.c, but related) */ |
| 1782 | 1816 | ||
| 1783 | extern void ether_setup(struct net_device *dev); | 1817 | extern void ether_setup(struct net_device *dev); |
| @@ -1790,11 +1824,24 @@ extern struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name, | |||
| 1790 | alloc_netdev_mq(sizeof_priv, name, setup, 1) | 1824 | alloc_netdev_mq(sizeof_priv, name, setup, 1) |
| 1791 | extern int register_netdev(struct net_device *dev); | 1825 | extern int register_netdev(struct net_device *dev); |
| 1792 | extern void unregister_netdev(struct net_device *dev); | 1826 | extern void unregister_netdev(struct net_device *dev); |
| 1827 | |||
| 1828 | /* Functions used for device addresses handling */ | ||
| 1829 | extern int dev_addr_add(struct net_device *dev, unsigned char *addr, | ||
| 1830 | unsigned char addr_type); | ||
| 1831 | extern int dev_addr_del(struct net_device *dev, unsigned char *addr, | ||
| 1832 | unsigned char addr_type); | ||
| 1833 | extern int dev_addr_add_multiple(struct net_device *to_dev, | ||
| 1834 | struct net_device *from_dev, | ||
| 1835 | unsigned char addr_type); | ||
| 1836 | extern int dev_addr_del_multiple(struct net_device *to_dev, | ||
| 1837 | struct net_device *from_dev, | ||
| 1838 | unsigned char addr_type); | ||
| 1839 | |||
| 1793 | /* Functions used for secondary unicast and multicast support */ | 1840 | /* Functions used for secondary unicast and multicast support */ |
| 1794 | extern void dev_set_rx_mode(struct net_device *dev); | 1841 | extern void dev_set_rx_mode(struct net_device *dev); |
| 1795 | extern void __dev_set_rx_mode(struct net_device *dev); | 1842 | extern void __dev_set_rx_mode(struct net_device *dev); |
| 1796 | extern int dev_unicast_delete(struct net_device *dev, void *addr, int alen); | 1843 | extern int dev_unicast_delete(struct net_device *dev, void *addr); |
| 1797 | extern int dev_unicast_add(struct net_device *dev, void *addr, int alen); | 1844 | extern int dev_unicast_add(struct net_device *dev, void *addr); |
| 1798 | extern int dev_unicast_sync(struct net_device *to, struct net_device *from); | 1845 | extern int dev_unicast_sync(struct net_device *to, struct net_device *from); |
| 1799 | extern void dev_unicast_unsync(struct net_device *to, struct net_device *from); | 1846 | extern void dev_unicast_unsync(struct net_device *to, struct net_device *from); |
| 1800 | extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all); | 1847 | extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all); |
| @@ -1856,15 +1903,14 @@ static inline int net_gso_ok(int features, int gso_type) | |||
| 1856 | 1903 | ||
| 1857 | static inline int skb_gso_ok(struct sk_buff *skb, int features) | 1904 | static inline int skb_gso_ok(struct sk_buff *skb, int features) |
| 1858 | { | 1905 | { |
| 1859 | return net_gso_ok(features, skb_shinfo(skb)->gso_type); | 1906 | return net_gso_ok(features, skb_shinfo(skb)->gso_type) && |
| 1907 | (!skb_has_frags(skb) || (features & NETIF_F_FRAGLIST)); | ||
| 1860 | } | 1908 | } |
| 1861 | 1909 | ||
| 1862 | static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) | 1910 | static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) |
| 1863 | { | 1911 | { |
| 1864 | return skb_is_gso(skb) && | 1912 | return skb_is_gso(skb) && |
| 1865 | (!skb_gso_ok(skb, dev->features) || | 1913 | (!skb_gso_ok(skb, dev->features) || |
| 1866 | (skb_shinfo(skb)->frag_list && | ||
| 1867 | !(dev->features & NETIF_F_FRAGLIST)) || | ||
| 1868 | unlikely(skb->ip_summed != CHECKSUM_PARTIAL)); | 1914 | unlikely(skb->ip_summed != CHECKSUM_PARTIAL)); |
| 1869 | } | 1915 | } |
| 1870 | 1916 | ||
| @@ -1874,6 +1920,16 @@ static inline void netif_set_gso_max_size(struct net_device *dev, | |||
| 1874 | dev->gso_max_size = size; | 1920 | dev->gso_max_size = size; |
| 1875 | } | 1921 | } |
| 1876 | 1922 | ||
| 1923 | static inline void skb_bond_set_mac_by_master(struct sk_buff *skb, | ||
| 1924 | struct net_device *master) | ||
| 1925 | { | ||
| 1926 | if (skb->pkt_type == PACKET_HOST) { | ||
| 1927 | u16 *dest = (u16 *) eth_hdr(skb)->h_dest; | ||
| 1928 | |||
| 1929 | memcpy(dest, master->dev_addr, ETH_ALEN); | ||
| 1930 | } | ||
| 1931 | } | ||
| 1932 | |||
| 1877 | /* On bonding slaves other than the currently active slave, suppress | 1933 | /* On bonding slaves other than the currently active slave, suppress |
| 1878 | * duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and | 1934 | * duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and |
| 1879 | * ARP on active-backup slaves with arp_validate enabled. | 1935 | * ARP on active-backup slaves with arp_validate enabled. |
| @@ -1887,6 +1943,14 @@ static inline int skb_bond_should_drop(struct sk_buff *skb) | |||
| 1887 | if (master->priv_flags & IFF_MASTER_ARPMON) | 1943 | if (master->priv_flags & IFF_MASTER_ARPMON) |
| 1888 | dev->last_rx = jiffies; | 1944 | dev->last_rx = jiffies; |
| 1889 | 1945 | ||
| 1946 | if ((master->priv_flags & IFF_MASTER_ALB) && master->br_port) { | ||
| 1947 | /* Do address unmangle. The local destination address | ||
| 1948 | * will be always the one master has. Provides the right | ||
| 1949 | * functionality in a bridge. | ||
| 1950 | */ | ||
| 1951 | skb_bond_set_mac_by_master(skb, master); | ||
| 1952 | } | ||
| 1953 | |||
| 1890 | if (dev->priv_flags & IFF_SLAVE_INACTIVE) { | 1954 | if (dev->priv_flags & IFF_SLAVE_INACTIVE) { |
| 1891 | if ((dev->priv_flags & IFF_SLAVE_NEEDARP) && | 1955 | if ((dev->priv_flags & IFF_SLAVE_NEEDARP) && |
| 1892 | skb->protocol == __cpu_to_be16(ETH_P_ARP)) | 1956 | skb->protocol == __cpu_to_be16(ETH_P_ARP)) |
| @@ -1908,6 +1972,28 @@ static inline int skb_bond_should_drop(struct sk_buff *skb) | |||
| 1908 | } | 1972 | } |
| 1909 | 1973 | ||
| 1910 | extern struct pernet_operations __net_initdata loopback_net_ops; | 1974 | extern struct pernet_operations __net_initdata loopback_net_ops; |
| 1975 | |||
| 1976 | static inline int dev_ethtool_get_settings(struct net_device *dev, | ||
| 1977 | struct ethtool_cmd *cmd) | ||
| 1978 | { | ||
| 1979 | if (!dev->ethtool_ops || !dev->ethtool_ops->get_settings) | ||
| 1980 | return -EOPNOTSUPP; | ||
| 1981 | return dev->ethtool_ops->get_settings(dev, cmd); | ||
| 1982 | } | ||
| 1983 | |||
| 1984 | static inline u32 dev_ethtool_get_rx_csum(struct net_device *dev) | ||
| 1985 | { | ||
| 1986 | if (!dev->ethtool_ops || !dev->ethtool_ops->get_rx_csum) | ||
| 1987 | return 0; | ||
| 1988 | return dev->ethtool_ops->get_rx_csum(dev); | ||
| 1989 | } | ||
| 1990 | |||
| 1991 | static inline u32 dev_ethtool_get_flags(struct net_device *dev) | ||
| 1992 | { | ||
| 1993 | if (!dev->ethtool_ops || !dev->ethtool_ops->get_flags) | ||
| 1994 | return 0; | ||
| 1995 | return dev->ethtool_ops->get_flags(dev); | ||
| 1996 | } | ||
| 1911 | #endif /* __KERNEL__ */ | 1997 | #endif /* __KERNEL__ */ |
| 1912 | 1998 | ||
| 1913 | #endif /* _LINUX_DEV_H */ | 1999 | #endif /* _LINUX_NETDEVICE_H */ |
diff --git a/include/linux/netfilter/Kbuild b/include/linux/netfilter/Kbuild index af9d2fb97212..2aea50399c0b 100644 --- a/include/linux/netfilter/Kbuild +++ b/include/linux/netfilter/Kbuild | |||
| @@ -33,6 +33,7 @@ header-y += xt_limit.h | |||
| 33 | header-y += xt_mac.h | 33 | header-y += xt_mac.h |
| 34 | header-y += xt_mark.h | 34 | header-y += xt_mark.h |
| 35 | header-y += xt_multiport.h | 35 | header-y += xt_multiport.h |
| 36 | header-y += xt_osf.h | ||
| 36 | header-y += xt_owner.h | 37 | header-y += xt_owner.h |
| 37 | header-y += xt_pkttype.h | 38 | header-y += xt_pkttype.h |
| 38 | header-y += xt_quota.h | 39 | header-y += xt_quota.h |
diff --git a/include/linux/netfilter/nf_conntrack_common.h b/include/linux/netfilter/nf_conntrack_common.h index 885cbe282260..a8248ee422b7 100644 --- a/include/linux/netfilter/nf_conntrack_common.h +++ b/include/linux/netfilter/nf_conntrack_common.h | |||
| @@ -75,75 +75,6 @@ enum ip_conntrack_status { | |||
| 75 | IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT), | 75 | IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT), |
| 76 | }; | 76 | }; |
| 77 | 77 | ||
| 78 | /* Connection tracking event bits */ | ||
| 79 | enum ip_conntrack_events | ||
| 80 | { | ||
| 81 | /* New conntrack */ | ||
| 82 | IPCT_NEW_BIT = 0, | ||
| 83 | IPCT_NEW = (1 << IPCT_NEW_BIT), | ||
| 84 | |||
| 85 | /* Expected connection */ | ||
| 86 | IPCT_RELATED_BIT = 1, | ||
| 87 | IPCT_RELATED = (1 << IPCT_RELATED_BIT), | ||
| 88 | |||
| 89 | /* Destroyed conntrack */ | ||
| 90 | IPCT_DESTROY_BIT = 2, | ||
| 91 | IPCT_DESTROY = (1 << IPCT_DESTROY_BIT), | ||
| 92 | |||
| 93 | /* Timer has been refreshed */ | ||
| 94 | IPCT_REFRESH_BIT = 3, | ||
| 95 | IPCT_REFRESH = (1 << IPCT_REFRESH_BIT), | ||
| 96 | |||
| 97 | /* Status has changed */ | ||
| 98 | IPCT_STATUS_BIT = 4, | ||
| 99 | IPCT_STATUS = (1 << IPCT_STATUS_BIT), | ||
| 100 | |||
| 101 | /* Update of protocol info */ | ||
| 102 | IPCT_PROTOINFO_BIT = 5, | ||
| 103 | IPCT_PROTOINFO = (1 << IPCT_PROTOINFO_BIT), | ||
| 104 | |||
| 105 | /* Volatile protocol info */ | ||
| 106 | IPCT_PROTOINFO_VOLATILE_BIT = 6, | ||
| 107 | IPCT_PROTOINFO_VOLATILE = (1 << IPCT_PROTOINFO_VOLATILE_BIT), | ||
| 108 | |||
| 109 | /* New helper for conntrack */ | ||
| 110 | IPCT_HELPER_BIT = 7, | ||
| 111 | IPCT_HELPER = (1 << IPCT_HELPER_BIT), | ||
| 112 | |||
| 113 | /* Update of helper info */ | ||
| 114 | IPCT_HELPINFO_BIT = 8, | ||
| 115 | IPCT_HELPINFO = (1 << IPCT_HELPINFO_BIT), | ||
| 116 | |||
| 117 | /* Volatile helper info */ | ||
| 118 | IPCT_HELPINFO_VOLATILE_BIT = 9, | ||
| 119 | IPCT_HELPINFO_VOLATILE = (1 << IPCT_HELPINFO_VOLATILE_BIT), | ||
| 120 | |||
| 121 | /* NAT info */ | ||
| 122 | IPCT_NATINFO_BIT = 10, | ||
| 123 | IPCT_NATINFO = (1 << IPCT_NATINFO_BIT), | ||
| 124 | |||
| 125 | /* Counter highest bit has been set, unused */ | ||
| 126 | IPCT_COUNTER_FILLING_BIT = 11, | ||
| 127 | IPCT_COUNTER_FILLING = (1 << IPCT_COUNTER_FILLING_BIT), | ||
| 128 | |||
| 129 | /* Mark is set */ | ||
| 130 | IPCT_MARK_BIT = 12, | ||
| 131 | IPCT_MARK = (1 << IPCT_MARK_BIT), | ||
| 132 | |||
| 133 | /* NAT sequence adjustment */ | ||
| 134 | IPCT_NATSEQADJ_BIT = 13, | ||
| 135 | IPCT_NATSEQADJ = (1 << IPCT_NATSEQADJ_BIT), | ||
| 136 | |||
| 137 | /* Secmark is set */ | ||
| 138 | IPCT_SECMARK_BIT = 14, | ||
| 139 | IPCT_SECMARK = (1 << IPCT_SECMARK_BIT), | ||
| 140 | }; | ||
| 141 | |||
| 142 | enum ip_conntrack_expect_events { | ||
| 143 | IPEXP_NEW_BIT = 0, | ||
| 144 | IPEXP_NEW = (1 << IPEXP_NEW_BIT), | ||
| 145 | }; | ||
| 146 | |||
| 147 | #ifdef __KERNEL__ | 78 | #ifdef __KERNEL__ |
| 148 | struct ip_conntrack_stat | 79 | struct ip_conntrack_stat |
| 149 | { | 80 | { |
diff --git a/include/linux/netfilter/nf_conntrack_tcp.h b/include/linux/netfilter/nf_conntrack_tcp.h index b2f384d42611..4352feed2377 100644 --- a/include/linux/netfilter/nf_conntrack_tcp.h +++ b/include/linux/netfilter/nf_conntrack_tcp.h | |||
| @@ -15,7 +15,8 @@ enum tcp_conntrack { | |||
| 15 | TCP_CONNTRACK_LAST_ACK, | 15 | TCP_CONNTRACK_LAST_ACK, |
| 16 | TCP_CONNTRACK_TIME_WAIT, | 16 | TCP_CONNTRACK_TIME_WAIT, |
| 17 | TCP_CONNTRACK_CLOSE, | 17 | TCP_CONNTRACK_CLOSE, |
| 18 | TCP_CONNTRACK_LISTEN, | 18 | TCP_CONNTRACK_LISTEN, /* obsolete */ |
| 19 | #define TCP_CONNTRACK_SYN_SENT2 TCP_CONNTRACK_LISTEN | ||
| 19 | TCP_CONNTRACK_MAX, | 20 | TCP_CONNTRACK_MAX, |
| 20 | TCP_CONNTRACK_IGNORE | 21 | TCP_CONNTRACK_IGNORE |
| 21 | }; | 22 | }; |
diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h index c600083cbdf5..bff4d5741d98 100644 --- a/include/linux/netfilter/nfnetlink.h +++ b/include/linux/netfilter/nfnetlink.h | |||
| @@ -46,7 +46,8 @@ struct nfgenmsg { | |||
| 46 | #define NFNL_SUBSYS_CTNETLINK_EXP 2 | 46 | #define NFNL_SUBSYS_CTNETLINK_EXP 2 |
| 47 | #define NFNL_SUBSYS_QUEUE 3 | 47 | #define NFNL_SUBSYS_QUEUE 3 |
| 48 | #define NFNL_SUBSYS_ULOG 4 | 48 | #define NFNL_SUBSYS_ULOG 4 |
| 49 | #define NFNL_SUBSYS_COUNT 5 | 49 | #define NFNL_SUBSYS_OSF 5 |
| 50 | #define NFNL_SUBSYS_COUNT 6 | ||
| 50 | 51 | ||
| 51 | #ifdef __KERNEL__ | 52 | #ifdef __KERNEL__ |
| 52 | 53 | ||
| @@ -75,7 +76,7 @@ extern int nfnetlink_subsys_unregister(const struct nfnetlink_subsystem *n); | |||
| 75 | 76 | ||
| 76 | extern int nfnetlink_has_listeners(unsigned int group); | 77 | extern int nfnetlink_has_listeners(unsigned int group); |
| 77 | extern int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group, | 78 | extern int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group, |
| 78 | int echo); | 79 | int echo, gfp_t flags); |
| 79 | extern void nfnetlink_set_err(u32 pid, u32 group, int error); | 80 | extern void nfnetlink_set_err(u32 pid, u32 group, int error); |
| 80 | extern int nfnetlink_unicast(struct sk_buff *skb, u_int32_t pid, int flags); | 81 | extern int nfnetlink_unicast(struct sk_buff *skb, u_int32_t pid, int flags); |
| 81 | 82 | ||
diff --git a/include/linux/netfilter/nfnetlink_conntrack.h b/include/linux/netfilter/nfnetlink_conntrack.h index 1a865e48b8eb..ed4ef8d0b11b 100644 --- a/include/linux/netfilter/nfnetlink_conntrack.h +++ b/include/linux/netfilter/nfnetlink_conntrack.h | |||
| @@ -101,6 +101,7 @@ enum ctattr_protoinfo_dccp { | |||
| 101 | CTA_PROTOINFO_DCCP_UNSPEC, | 101 | CTA_PROTOINFO_DCCP_UNSPEC, |
| 102 | CTA_PROTOINFO_DCCP_STATE, | 102 | CTA_PROTOINFO_DCCP_STATE, |
| 103 | CTA_PROTOINFO_DCCP_ROLE, | 103 | CTA_PROTOINFO_DCCP_ROLE, |
| 104 | CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ, | ||
| 104 | __CTA_PROTOINFO_DCCP_MAX, | 105 | __CTA_PROTOINFO_DCCP_MAX, |
| 105 | }; | 106 | }; |
| 106 | #define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1) | 107 | #define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1) |
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index c9efe039dc57..1030b7593898 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h | |||
| @@ -184,9 +184,10 @@ struct xt_counters_info | |||
| 184 | * @matchinfo: per-match data | 184 | * @matchinfo: per-match data |
| 185 | * @fragoff: packet is a fragment, this is the data offset | 185 | * @fragoff: packet is a fragment, this is the data offset |
| 186 | * @thoff: position of transport header relative to skb->data | 186 | * @thoff: position of transport header relative to skb->data |
| 187 | * @hotdrop: drop packet if we had inspection problems | 187 | * @hook: hook number given packet came from |
| 188 | * @family: Actual NFPROTO_* through which the function is invoked | 188 | * @family: Actual NFPROTO_* through which the function is invoked |
| 189 | * (helpful when match->family == NFPROTO_UNSPEC) | 189 | * (helpful when match->family == NFPROTO_UNSPEC) |
| 190 | * @hotdrop: drop packet if we had inspection problems | ||
| 190 | */ | 191 | */ |
| 191 | struct xt_match_param { | 192 | struct xt_match_param { |
| 192 | const struct net_device *in, *out; | 193 | const struct net_device *in, *out; |
| @@ -194,8 +195,9 @@ struct xt_match_param { | |||
| 194 | const void *matchinfo; | 195 | const void *matchinfo; |
| 195 | int fragoff; | 196 | int fragoff; |
| 196 | unsigned int thoff; | 197 | unsigned int thoff; |
| 197 | bool *hotdrop; | 198 | unsigned int hooknum; |
| 198 | u_int8_t family; | 199 | u_int8_t family; |
| 200 | bool *hotdrop; | ||
| 199 | }; | 201 | }; |
| 200 | 202 | ||
| 201 | /** | 203 | /** |
diff --git a/include/linux/netfilter/xt_NFQUEUE.h b/include/linux/netfilter/xt_NFQUEUE.h index 982a89f78272..2584f4a777de 100644 --- a/include/linux/netfilter/xt_NFQUEUE.h +++ b/include/linux/netfilter/xt_NFQUEUE.h | |||
| @@ -15,4 +15,9 @@ struct xt_NFQ_info { | |||
| 15 | __u16 queuenum; | 15 | __u16 queuenum; |
| 16 | }; | 16 | }; |
| 17 | 17 | ||
| 18 | struct xt_NFQ_info_v1 { | ||
| 19 | __u16 queuenum; | ||
| 20 | __u16 queues_total; | ||
| 21 | }; | ||
| 22 | |||
| 18 | #endif /* _XT_NFQ_TARGET_H */ | 23 | #endif /* _XT_NFQ_TARGET_H */ |
diff --git a/include/linux/netfilter/xt_osf.h b/include/linux/netfilter/xt_osf.h new file mode 100644 index 000000000000..fd2272e0959a --- /dev/null +++ b/include/linux/netfilter/xt_osf.h | |||
| @@ -0,0 +1,133 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2003+ Evgeniy Polyakov <johnpol@2ka.mxt.ru> | ||
| 3 | * | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License as published by | ||
| 7 | * the Free Software Foundation; either version 2 of the License, or | ||
| 8 | * (at your option) any later version. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * 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 _XT_OSF_H | ||
| 21 | #define _XT_OSF_H | ||
| 22 | |||
| 23 | #define MAXGENRELEN 32 | ||
| 24 | |||
| 25 | #define XT_OSF_GENRE (1<<0) | ||
| 26 | #define XT_OSF_TTL (1<<1) | ||
| 27 | #define XT_OSF_LOG (1<<2) | ||
| 28 | #define XT_OSF_INVERT (1<<3) | ||
| 29 | |||
| 30 | #define XT_OSF_LOGLEVEL_ALL 0 /* log all matched fingerprints */ | ||
| 31 | #define XT_OSF_LOGLEVEL_FIRST 1 /* log only the first matced fingerprint */ | ||
| 32 | #define XT_OSF_LOGLEVEL_ALL_KNOWN 2 /* do not log unknown packets */ | ||
| 33 | |||
| 34 | #define XT_OSF_TTL_TRUE 0 /* True ip and fingerprint TTL comparison */ | ||
| 35 | #define XT_OSF_TTL_LESS 1 /* Check if ip TTL is less than fingerprint one */ | ||
| 36 | #define XT_OSF_TTL_NOCHECK 2 /* Do not compare ip and fingerprint TTL at all */ | ||
| 37 | |||
| 38 | struct xt_osf_info { | ||
| 39 | char genre[MAXGENRELEN]; | ||
| 40 | __u32 len; | ||
| 41 | __u32 flags; | ||
| 42 | __u32 loglevel; | ||
| 43 | __u32 ttl; | ||
| 44 | }; | ||
| 45 | |||
| 46 | /* | ||
| 47 | * Wildcard MSS (kind of). | ||
| 48 | * It is used to implement a state machine for the different wildcard values | ||
| 49 | * of the MSS and window sizes. | ||
| 50 | */ | ||
| 51 | struct xt_osf_wc { | ||
| 52 | __u32 wc; | ||
| 53 | __u32 val; | ||
| 54 | }; | ||
| 55 | |||
| 56 | /* | ||
| 57 | * This struct represents IANA options | ||
| 58 | * http://www.iana.org/assignments/tcp-parameters | ||
| 59 | */ | ||
| 60 | struct xt_osf_opt { | ||
| 61 | __u16 kind, length; | ||
| 62 | struct xt_osf_wc wc; | ||
| 63 | }; | ||
| 64 | |||
| 65 | struct xt_osf_user_finger { | ||
| 66 | struct xt_osf_wc wss; | ||
| 67 | |||
| 68 | __u8 ttl, df; | ||
| 69 | __u16 ss, mss; | ||
| 70 | __u16 opt_num; | ||
| 71 | |||
| 72 | char genre[MAXGENRELEN]; | ||
| 73 | char version[MAXGENRELEN]; | ||
| 74 | char subtype[MAXGENRELEN]; | ||
| 75 | |||
| 76 | /* MAX_IPOPTLEN is maximum if all options are NOPs or EOLs */ | ||
| 77 | struct xt_osf_opt opt[MAX_IPOPTLEN]; | ||
| 78 | }; | ||
| 79 | |||
| 80 | struct xt_osf_nlmsg { | ||
| 81 | struct xt_osf_user_finger f; | ||
| 82 | struct iphdr ip; | ||
| 83 | struct tcphdr tcp; | ||
| 84 | }; | ||
| 85 | |||
| 86 | /* Defines for IANA option kinds */ | ||
| 87 | |||
| 88 | enum iana_options { | ||
| 89 | OSFOPT_EOL = 0, /* End of options */ | ||
| 90 | OSFOPT_NOP, /* NOP */ | ||
| 91 | OSFOPT_MSS, /* Maximum segment size */ | ||
| 92 | OSFOPT_WSO, /* Window scale option */ | ||
| 93 | OSFOPT_SACKP, /* SACK permitted */ | ||
| 94 | OSFOPT_SACK, /* SACK */ | ||
| 95 | OSFOPT_ECHO, | ||
| 96 | OSFOPT_ECHOREPLY, | ||
| 97 | OSFOPT_TS, /* Timestamp option */ | ||
| 98 | OSFOPT_POCP, /* Partial Order Connection Permitted */ | ||
| 99 | OSFOPT_POSP, /* Partial Order Service Profile */ | ||
| 100 | |||
| 101 | /* Others are not used in the current OSF */ | ||
| 102 | OSFOPT_EMPTY = 255, | ||
| 103 | }; | ||
| 104 | |||
| 105 | /* | ||
| 106 | * Initial window size option state machine: multiple of mss, mtu or | ||
| 107 | * plain numeric value. Can also be made as plain numeric value which | ||
| 108 | * is not a multiple of specified value. | ||
| 109 | */ | ||
| 110 | enum xt_osf_window_size_options { | ||
| 111 | OSF_WSS_PLAIN = 0, | ||
| 112 | OSF_WSS_MSS, | ||
| 113 | OSF_WSS_MTU, | ||
| 114 | OSF_WSS_MODULO, | ||
| 115 | OSF_WSS_MAX, | ||
| 116 | }; | ||
| 117 | |||
| 118 | /* | ||
| 119 | * Add/remove fingerprint from the kernel. | ||
| 120 | */ | ||
| 121 | enum xt_osf_msg_types { | ||
| 122 | OSF_MSG_ADD, | ||
| 123 | OSF_MSG_REMOVE, | ||
| 124 | OSF_MSG_MAX, | ||
| 125 | }; | ||
| 126 | |||
| 127 | enum xt_osf_attr_type { | ||
| 128 | OSF_ATTR_UNSPEC, | ||
| 129 | OSF_ATTR_FINGER, | ||
| 130 | OSF_ATTR_MAX, | ||
| 131 | }; | ||
| 132 | |||
| 133 | #endif /* _XT_OSF_H */ | ||
diff --git a/include/linux/netfilter/xt_socket.h b/include/linux/netfilter/xt_socket.h new file mode 100644 index 000000000000..6f475b8ff34b --- /dev/null +++ b/include/linux/netfilter/xt_socket.h | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | #ifndef _XT_SOCKET_H | ||
| 2 | #define _XT_SOCKET_H | ||
| 3 | |||
| 4 | enum { | ||
| 5 | XT_SOCKET_TRANSPARENT = 1 << 0, | ||
| 6 | }; | ||
| 7 | |||
| 8 | struct xt_socket_mtinfo1 { | ||
| 9 | __u8 flags; | ||
| 10 | }; | ||
| 11 | |||
| 12 | #endif /* _XT_SOCKET_H */ | ||
diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h index bcd0201589f8..a6d9ef2bb34a 100644 --- a/include/linux/nfsd/export.h +++ b/include/linux/nfsd/export.h | |||
| @@ -125,11 +125,9 @@ void nfsd_export_flush(void); | |||
| 125 | void exp_readlock(void); | 125 | void exp_readlock(void); |
| 126 | void exp_readunlock(void); | 126 | void exp_readunlock(void); |
| 127 | struct svc_export * rqst_exp_get_by_name(struct svc_rqst *, | 127 | struct svc_export * rqst_exp_get_by_name(struct svc_rqst *, |
| 128 | struct vfsmount *, | 128 | struct path *); |
| 129 | struct dentry *); | ||
| 130 | struct svc_export * rqst_exp_parent(struct svc_rqst *, | 129 | struct svc_export * rqst_exp_parent(struct svc_rqst *, |
| 131 | struct vfsmount *mnt, | 130 | struct path *); |
| 132 | struct dentry *dentry); | ||
| 133 | int exp_rootfh(struct auth_domain *, | 131 | int exp_rootfh(struct auth_domain *, |
| 134 | char *path, struct knfsd_fh *, int maxsize); | 132 | char *path, struct knfsd_fh *, int maxsize); |
| 135 | __be32 exp_pseudoroot(struct svc_rqst *, struct svc_fh *); | 133 | __be32 exp_pseudoroot(struct svc_rqst *, struct svc_fh *); |
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index cbe8ce3bf486..dbea93b694e5 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * Copyright 2008 Michael Wu <flamingice@sourmilk.net> | 7 | * Copyright 2008 Michael Wu <flamingice@sourmilk.net> |
| 8 | * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com> | 8 | * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com> |
| 9 | * Copyright 2008 Michael Buesch <mb@bu3sch.de> | 9 | * Copyright 2008 Michael Buesch <mb@bu3sch.de> |
| 10 | * Copyright 2008 Luis R. Rodriguez <lrodriguez@atheros.com> | 10 | * Copyright 2008, 2009 Luis R. Rodriguez <lrodriguez@atheros.com> |
| 11 | * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com> | 11 | * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com> |
| 12 | * Copyright 2008 Colin McCabe <colin@cozybit.com> | 12 | * Copyright 2008 Colin McCabe <colin@cozybit.com> |
| 13 | * | 13 | * |
| @@ -25,6 +25,8 @@ | |||
| 25 | * | 25 | * |
| 26 | */ | 26 | */ |
| 27 | 27 | ||
| 28 | #include <linux/types.h> | ||
| 29 | |||
| 28 | /** | 30 | /** |
| 29 | * DOC: Station handling | 31 | * DOC: Station handling |
| 30 | * | 32 | * |
| @@ -46,8 +48,10 @@ | |||
| 46 | * to get a list of all present wiphys. | 48 | * to get a list of all present wiphys. |
| 47 | * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or | 49 | * @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, | 50 | * %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME, |
| 49 | * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ, and/or | 51 | * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ, |
| 50 | * %NL80211_ATTR_WIPHY_CHANNEL_TYPE. | 52 | * %NL80211_ATTR_WIPHY_CHANNEL_TYPE, %NL80211_ATTR_WIPHY_RETRY_SHORT, |
| 53 | * %NL80211_ATTR_WIPHY_RETRY_LONG, %NL80211_ATTR_WIPHY_FRAG_THRESHOLD, | ||
| 54 | * and/or %NL80211_ATTR_WIPHY_RTS_THRESHOLD. | ||
| 51 | * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request | 55 | * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request |
| 52 | * or rename notification. Has attributes %NL80211_ATTR_WIPHY and | 56 | * or rename notification. Has attributes %NL80211_ATTR_WIPHY and |
| 53 | * %NL80211_ATTR_WIPHY_NAME. | 57 | * %NL80211_ATTR_WIPHY_NAME. |
| @@ -75,8 +79,8 @@ | |||
| 75 | * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT, | 79 | * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT, |
| 76 | * %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD. | 80 | * %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD. |
| 77 | * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA, | 81 | * @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 | 82 | * %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC, %NL80211_ATTR_KEY_CIPHER, |
| 79 | * attributes. | 83 | * and %NL80211_ATTR_KEY_SEQ attributes. |
| 80 | * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX | 84 | * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX |
| 81 | * or %NL80211_ATTR_MAC. | 85 | * or %NL80211_ATTR_MAC. |
| 82 | * | 86 | * |
| @@ -166,6 +170,22 @@ | |||
| 166 | * set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is | 170 | * 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 | 171 | * %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on |
| 168 | * to (%NL80211_ATTR_REG_ALPHA2). | 172 | * to (%NL80211_ATTR_REG_ALPHA2). |
| 173 | * @NL80211_CMD_REG_BEACON_HINT: indicates to userspace that an AP beacon | ||
| 174 | * has been found while world roaming thus enabling active scan or | ||
| 175 | * any mode of operation that initiates TX (beacons) on a channel | ||
| 176 | * where we would not have been able to do either before. As an example | ||
| 177 | * if you are world roaming (regulatory domain set to world or if your | ||
| 178 | * driver is using a custom world roaming regulatory domain) and while | ||
| 179 | * doing a passive scan on the 5 GHz band you find an AP there (if not | ||
| 180 | * on a DFS channel) you will now be able to actively scan for that AP | ||
| 181 | * or use AP mode on your card on that same channel. Note that this will | ||
| 182 | * never be used for channels 1-11 on the 2 GHz band as they are always | ||
| 183 | * enabled world wide. This beacon hint is only sent if your device had | ||
| 184 | * either disabled active scanning or beaconing on a channel. We send to | ||
| 185 | * userspace the wiphy on which we removed a restriction from | ||
| 186 | * (%NL80211_ATTR_WIPHY) and the channel on which this occurred | ||
| 187 | * before (%NL80211_ATTR_FREQ_BEFORE) and after (%NL80211_ATTR_FREQ_AFTER) | ||
| 188 | * the beacon hint was processed. | ||
| 169 | * | 189 | * |
| 170 | * @NL80211_CMD_AUTHENTICATE: authentication request and notification. | 190 | * @NL80211_CMD_AUTHENTICATE: authentication request and notification. |
| 171 | * This command is used both as a command (request to authenticate) and | 191 | * This command is used both as a command (request to authenticate) and |
| @@ -185,8 +205,12 @@ | |||
| 185 | * frame, i.e., it was for the local STA and was received in correct | 205 | * 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 | 206 | * state. This is similar to MLME-AUTHENTICATE.confirm primitive in the |
| 187 | * MLME SAP interface (kernel providing MLME, userspace SME). The | 207 | * MLME SAP interface (kernel providing MLME, userspace SME). The |
| 188 | * included NL80211_ATTR_FRAME attribute contains the management frame | 208 | * included %NL80211_ATTR_FRAME attribute contains the management frame |
| 189 | * (including both the header and frame body, but not FCS). | 209 | * (including both the header and frame body, but not FCS). This event is |
| 210 | * also used to indicate if the authentication attempt timed out. In that | ||
| 211 | * case the %NL80211_ATTR_FRAME attribute is replaced with a | ||
| 212 | * %NL80211_ATTR_TIMED_OUT flag (and %NL80211_ATTR_MAC to indicate which | ||
| 213 | * pending authentication timed out). | ||
| 190 | * @NL80211_CMD_ASSOCIATE: association request and notification; like | 214 | * @NL80211_CMD_ASSOCIATE: association request and notification; like |
| 191 | * NL80211_CMD_AUTHENTICATE but for Association and Reassociation | 215 | * NL80211_CMD_AUTHENTICATE but for Association and Reassociation |
| 192 | * (similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request, | 216 | * (similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request, |
| @@ -199,6 +223,25 @@ | |||
| 199 | * NL80211_CMD_AUTHENTICATE but for Disassociation frames (similar to | 223 | * NL80211_CMD_AUTHENTICATE but for Disassociation frames (similar to |
| 200 | * MLME-DISASSOCIATE.request and MLME-DISASSOCIATE.indication primitives). | 224 | * MLME-DISASSOCIATE.request and MLME-DISASSOCIATE.indication primitives). |
| 201 | * | 225 | * |
| 226 | * @NL80211_CMD_MICHAEL_MIC_FAILURE: notification of a locally detected Michael | ||
| 227 | * MIC (part of TKIP) failure; sent on the "mlme" multicast group; the | ||
| 228 | * event includes %NL80211_ATTR_MAC to describe the source MAC address of | ||
| 229 | * the frame with invalid MIC, %NL80211_ATTR_KEY_TYPE to show the key | ||
| 230 | * type, %NL80211_ATTR_KEY_IDX to indicate the key identifier, and | ||
| 231 | * %NL80211_ATTR_KEY_SEQ to indicate the TSC value of the frame; this | ||
| 232 | * event matches with MLME-MICHAELMICFAILURE.indication() primitive | ||
| 233 | * | ||
| 234 | * @NL80211_CMD_JOIN_IBSS: Join a new IBSS -- given at least an SSID and a | ||
| 235 | * FREQ attribute (for the initial frequency if no peer can be found) | ||
| 236 | * and optionally a MAC (as BSSID) and FREQ_FIXED attribute if those | ||
| 237 | * should be fixed rather than automatically determined. Can only be | ||
| 238 | * executed on a network interface that is UP, and fixed BSSID/FREQ | ||
| 239 | * may be rejected. Another optional parameter is the beacon interval, | ||
| 240 | * given in the %NL80211_ATTR_BEACON_INTERVAL attribute, which if not | ||
| 241 | * given defaults to 100 TU (102.4ms). | ||
| 242 | * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is | ||
| 243 | * determined by the network interface. | ||
| 244 | * | ||
| 202 | * @NL80211_CMD_MAX: highest used command number | 245 | * @NL80211_CMD_MAX: highest used command number |
| 203 | * @__NL80211_CMD_AFTER_LAST: internal use | 246 | * @__NL80211_CMD_AFTER_LAST: internal use |
| 204 | */ | 247 | */ |
| @@ -260,6 +303,13 @@ enum nl80211_commands { | |||
| 260 | NL80211_CMD_DEAUTHENTICATE, | 303 | NL80211_CMD_DEAUTHENTICATE, |
| 261 | NL80211_CMD_DISASSOCIATE, | 304 | NL80211_CMD_DISASSOCIATE, |
| 262 | 305 | ||
| 306 | NL80211_CMD_MICHAEL_MIC_FAILURE, | ||
| 307 | |||
| 308 | NL80211_CMD_REG_BEACON_HINT, | ||
| 309 | |||
| 310 | NL80211_CMD_JOIN_IBSS, | ||
| 311 | NL80211_CMD_LEAVE_IBSS, | ||
| 312 | |||
| 263 | /* add new commands above here */ | 313 | /* add new commands above here */ |
| 264 | 314 | ||
| 265 | /* used to define NL80211_CMD_MAX below */ | 315 | /* used to define NL80211_CMD_MAX below */ |
| @@ -278,6 +328,7 @@ enum nl80211_commands { | |||
| 278 | #define NL80211_CMD_ASSOCIATE NL80211_CMD_ASSOCIATE | 328 | #define NL80211_CMD_ASSOCIATE NL80211_CMD_ASSOCIATE |
| 279 | #define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE | 329 | #define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE |
| 280 | #define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE | 330 | #define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE |
| 331 | #define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT | ||
| 281 | 332 | ||
| 282 | /** | 333 | /** |
| 283 | * enum nl80211_attrs - nl80211 netlink attributes | 334 | * enum nl80211_attrs - nl80211 netlink attributes |
| @@ -296,6 +347,18 @@ enum nl80211_commands { | |||
| 296 | * NL80211_CHAN_HT20 = HT20 only | 347 | * NL80211_CHAN_HT20 = HT20 only |
| 297 | * NL80211_CHAN_HT40MINUS = secondary channel is below the primary channel | 348 | * NL80211_CHAN_HT40MINUS = secondary channel is below the primary channel |
| 298 | * NL80211_CHAN_HT40PLUS = secondary channel is above the primary channel | 349 | * NL80211_CHAN_HT40PLUS = secondary channel is above the primary channel |
| 350 | * @NL80211_ATTR_WIPHY_RETRY_SHORT: TX retry limit for frames whose length is | ||
| 351 | * less than or equal to the RTS threshold; allowed range: 1..255; | ||
| 352 | * dot11ShortRetryLimit; u8 | ||
| 353 | * @NL80211_ATTR_WIPHY_RETRY_LONG: TX retry limit for frames whose length is | ||
| 354 | * greater than the RTS threshold; allowed range: 1..255; | ||
| 355 | * dot11ShortLongLimit; u8 | ||
| 356 | * @NL80211_ATTR_WIPHY_FRAG_THRESHOLD: fragmentation threshold, i.e., maximum | ||
| 357 | * length in octets for frames; allowed range: 256..8000, disable | ||
| 358 | * fragmentation with (u32)-1; dot11FragmentationThreshold; u32 | ||
| 359 | * @NL80211_ATTR_WIPHY_RTS_THRESHOLD: RTS threshold (TX frames with length | ||
| 360 | * larger than or equal to this use RTS/CTS handshake); allowed range: | ||
| 361 | * 0..65536, disable with (u32)-1; dot11RTSThreshold; u32 | ||
| 299 | * | 362 | * |
| 300 | * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on | 363 | * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on |
| 301 | * @NL80211_ATTR_IFNAME: network interface name | 364 | * @NL80211_ATTR_IFNAME: network interface name |
| @@ -319,7 +382,7 @@ enum nl80211_commands { | |||
| 319 | * | 382 | * |
| 320 | * @NL80211_ATTR_STA_AID: Association ID for the station (u16) | 383 | * @NL80211_ATTR_STA_AID: Association ID for the station (u16) |
| 321 | * @NL80211_ATTR_STA_FLAGS: flags, nested element with NLA_FLAG attributes of | 384 | * @NL80211_ATTR_STA_FLAGS: flags, nested element with NLA_FLAG attributes of |
| 322 | * &enum nl80211_sta_flags. | 385 | * &enum nl80211_sta_flags (deprecated, use %NL80211_ATTR_STA_FLAGS2) |
| 323 | * @NL80211_ATTR_STA_LISTEN_INTERVAL: listen interval as defined by | 386 | * @NL80211_ATTR_STA_LISTEN_INTERVAL: listen interval as defined by |
| 324 | * IEEE 802.11 7.3.1.6 (u16). | 387 | * IEEE 802.11 7.3.1.6 (u16). |
| 325 | * @NL80211_ATTR_STA_SUPPORTED_RATES: supported rates, array of supported | 388 | * @NL80211_ATTR_STA_SUPPORTED_RATES: supported rates, array of supported |
| @@ -380,6 +443,8 @@ enum nl80211_commands { | |||
| 380 | * | 443 | * |
| 381 | * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with | 444 | * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with |
| 382 | * a single scan request, a wiphy attribute. | 445 | * a single scan request, a wiphy attribute. |
| 446 | * @NL80211_ATTR_MAX_SCAN_IE_LEN: maximum length of information elements | ||
| 447 | * that can be added to a scan request | ||
| 383 | * | 448 | * |
| 384 | * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) | 449 | * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) |
| 385 | * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive | 450 | * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive |
| @@ -408,6 +473,44 @@ enum nl80211_commands { | |||
| 408 | * @NL80211_ATTR_REASON_CODE: ReasonCode for %NL80211_CMD_DEAUTHENTICATE and | 473 | * @NL80211_ATTR_REASON_CODE: ReasonCode for %NL80211_CMD_DEAUTHENTICATE and |
| 409 | * %NL80211_CMD_DISASSOCIATE, u16 | 474 | * %NL80211_CMD_DISASSOCIATE, u16 |
| 410 | * | 475 | * |
| 476 | * @NL80211_ATTR_KEY_TYPE: Key Type, see &enum nl80211_key_type, represented as | ||
| 477 | * a u32 | ||
| 478 | * | ||
| 479 | * @NL80211_ATTR_FREQ_BEFORE: A channel which has suffered a regulatory change | ||
| 480 | * due to considerations from a beacon hint. This attribute reflects | ||
| 481 | * the state of the channel _before_ the beacon hint processing. This | ||
| 482 | * attributes consists of a nested attribute containing | ||
| 483 | * NL80211_FREQUENCY_ATTR_* | ||
| 484 | * @NL80211_ATTR_FREQ_AFTER: A channel which has suffered a regulatory change | ||
| 485 | * due to considerations from a beacon hint. This attribute reflects | ||
| 486 | * the state of the channel _after_ the beacon hint processing. This | ||
| 487 | * attributes consists of a nested attribute containing | ||
| 488 | * NL80211_FREQUENCY_ATTR_* | ||
| 489 | * | ||
| 490 | * @NL80211_ATTR_CIPHER_SUITES: a set of u32 values indicating the supported | ||
| 491 | * cipher suites | ||
| 492 | * | ||
| 493 | * @NL80211_ATTR_FREQ_FIXED: a flag indicating the IBSS should not try to look | ||
| 494 | * for other networks on different channels | ||
| 495 | * | ||
| 496 | * @NL80211_ATTR_TIMED_OUT: a flag indicating than an operation timed out; this | ||
| 497 | * is used, e.g., with %NL80211_CMD_AUTHENTICATE event | ||
| 498 | * | ||
| 499 | * @NL80211_ATTR_USE_MFP: Whether management frame protection (IEEE 802.11w) is | ||
| 500 | * used for the association (&enum nl80211_mfp, represented as a u32); | ||
| 501 | * this attribute can be used | ||
| 502 | * with %NL80211_CMD_ASSOCIATE request | ||
| 503 | * | ||
| 504 | * @NL80211_ATTR_STA_FLAGS2: Attribute containing a | ||
| 505 | * &struct nl80211_sta_flag_update. | ||
| 506 | * | ||
| 507 | * @NL80211_ATTR_CONTROL_PORT: A flag indicating whether user space controls | ||
| 508 | * IEEE 802.1X port, i.e., sets/clears %NL80211_STA_FLAG_AUTHORIZED, in | ||
| 509 | * station mode. If the flag is included in %NL80211_CMD_ASSOCIATE | ||
| 510 | * request, the driver will assume that the port is unauthorized until | ||
| 511 | * authorized by user space. Otherwise, port is marked authorized by | ||
| 512 | * default in station mode. | ||
| 513 | * | ||
| 411 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 514 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
| 412 | * @__NL80211_ATTR_AFTER_LAST: internal use | 515 | * @__NL80211_ATTR_AFTER_LAST: internal use |
| 413 | */ | 516 | */ |
| @@ -492,6 +595,30 @@ enum nl80211_attrs { | |||
| 492 | NL80211_ATTR_AUTH_TYPE, | 595 | NL80211_ATTR_AUTH_TYPE, |
| 493 | NL80211_ATTR_REASON_CODE, | 596 | NL80211_ATTR_REASON_CODE, |
| 494 | 597 | ||
| 598 | NL80211_ATTR_KEY_TYPE, | ||
| 599 | |||
| 600 | NL80211_ATTR_MAX_SCAN_IE_LEN, | ||
| 601 | NL80211_ATTR_CIPHER_SUITES, | ||
| 602 | |||
| 603 | NL80211_ATTR_FREQ_BEFORE, | ||
| 604 | NL80211_ATTR_FREQ_AFTER, | ||
| 605 | |||
| 606 | NL80211_ATTR_FREQ_FIXED, | ||
| 607 | |||
| 608 | |||
| 609 | NL80211_ATTR_WIPHY_RETRY_SHORT, | ||
| 610 | NL80211_ATTR_WIPHY_RETRY_LONG, | ||
| 611 | NL80211_ATTR_WIPHY_FRAG_THRESHOLD, | ||
| 612 | NL80211_ATTR_WIPHY_RTS_THRESHOLD, | ||
| 613 | |||
| 614 | NL80211_ATTR_TIMED_OUT, | ||
| 615 | |||
| 616 | NL80211_ATTR_USE_MFP, | ||
| 617 | |||
| 618 | NL80211_ATTR_STA_FLAGS2, | ||
| 619 | |||
| 620 | NL80211_ATTR_CONTROL_PORT, | ||
| 621 | |||
| 495 | /* add attributes here, update the policy in nl80211.c */ | 622 | /* add attributes here, update the policy in nl80211.c */ |
| 496 | 623 | ||
| 497 | __NL80211_ATTR_AFTER_LAST, | 624 | __NL80211_ATTR_AFTER_LAST, |
| @@ -581,6 +708,18 @@ enum nl80211_sta_flags { | |||
| 581 | }; | 708 | }; |
| 582 | 709 | ||
| 583 | /** | 710 | /** |
| 711 | * struct nl80211_sta_flag_update - station flags mask/set | ||
| 712 | * @mask: mask of station flags to set | ||
| 713 | * @set: which values to set them to | ||
| 714 | * | ||
| 715 | * Both mask and set contain bits as per &enum nl80211_sta_flags. | ||
| 716 | */ | ||
| 717 | struct nl80211_sta_flag_update { | ||
| 718 | __u32 mask; | ||
| 719 | __u32 set; | ||
| 720 | } __attribute__((packed)); | ||
| 721 | |||
| 722 | /** | ||
| 584 | * enum nl80211_rate_info - bitrate information | 723 | * enum nl80211_rate_info - bitrate information |
| 585 | * | 724 | * |
| 586 | * These attribute types are used with %NL80211_STA_INFO_TXRATE | 725 | * These attribute types are used with %NL80211_STA_INFO_TXRATE |
| @@ -1062,4 +1201,27 @@ enum nl80211_auth_type { | |||
| 1062 | NL80211_AUTHTYPE_FT, | 1201 | NL80211_AUTHTYPE_FT, |
| 1063 | NL80211_AUTHTYPE_NETWORK_EAP, | 1202 | NL80211_AUTHTYPE_NETWORK_EAP, |
| 1064 | }; | 1203 | }; |
| 1204 | |||
| 1205 | /** | ||
| 1206 | * enum nl80211_key_type - Key Type | ||
| 1207 | * @NL80211_KEYTYPE_GROUP: Group (broadcast/multicast) key | ||
| 1208 | * @NL80211_KEYTYPE_PAIRWISE: Pairwise (unicast/individual) key | ||
| 1209 | * @NL80211_KEYTYPE_PEERKEY: PeerKey (DLS) | ||
| 1210 | */ | ||
| 1211 | enum nl80211_key_type { | ||
| 1212 | NL80211_KEYTYPE_GROUP, | ||
| 1213 | NL80211_KEYTYPE_PAIRWISE, | ||
| 1214 | NL80211_KEYTYPE_PEERKEY, | ||
| 1215 | }; | ||
| 1216 | |||
| 1217 | /** | ||
| 1218 | * enum nl80211_mfp - Management frame protection state | ||
| 1219 | * @NL80211_MFP_NO: Management frame protection not used | ||
| 1220 | * @NL80211_MFP_REQUIRED: Management frame protection required | ||
| 1221 | */ | ||
| 1222 | enum nl80211_mfp { | ||
| 1223 | NL80211_MFP_NO, | ||
| 1224 | NL80211_MFP_REQUIRED, | ||
| 1225 | }; | ||
| 1226 | |||
| 1065 | #endif /* __LINUX_NL80211_H */ | 1227 | #endif /* __LINUX_NL80211_H */ |
diff --git a/include/linux/nl802154.h b/include/linux/nl802154.h new file mode 100644 index 000000000000..2cda00ccfcca --- /dev/null +++ b/include/linux/nl802154.h | |||
| @@ -0,0 +1,119 @@ | |||
| 1 | /* | ||
| 2 | * nl802154.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2007, 2008, 2009 Siemens AG | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 | ||
| 8 | * as published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License along | ||
| 16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 18 | * | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef NL802154_H | ||
| 22 | #define NL802154_H | ||
| 23 | |||
| 24 | #define IEEE802154_NL_NAME "802.15.4 MAC" | ||
| 25 | #define IEEE802154_MCAST_COORD_NAME "coordinator" | ||
| 26 | #define IEEE802154_MCAST_BEACON_NAME "beacon" | ||
| 27 | |||
| 28 | enum { | ||
| 29 | __IEEE802154_ATTR_INVALID, | ||
| 30 | |||
| 31 | IEEE802154_ATTR_DEV_NAME, | ||
| 32 | IEEE802154_ATTR_DEV_INDEX, | ||
| 33 | |||
| 34 | IEEE802154_ATTR_STATUS, | ||
| 35 | |||
| 36 | IEEE802154_ATTR_SHORT_ADDR, | ||
| 37 | IEEE802154_ATTR_HW_ADDR, | ||
| 38 | IEEE802154_ATTR_PAN_ID, | ||
| 39 | |||
| 40 | IEEE802154_ATTR_CHANNEL, | ||
| 41 | |||
| 42 | IEEE802154_ATTR_COORD_SHORT_ADDR, | ||
| 43 | IEEE802154_ATTR_COORD_HW_ADDR, | ||
| 44 | IEEE802154_ATTR_COORD_PAN_ID, | ||
| 45 | |||
| 46 | IEEE802154_ATTR_SRC_SHORT_ADDR, | ||
| 47 | IEEE802154_ATTR_SRC_HW_ADDR, | ||
| 48 | IEEE802154_ATTR_SRC_PAN_ID, | ||
| 49 | |||
| 50 | IEEE802154_ATTR_DEST_SHORT_ADDR, | ||
| 51 | IEEE802154_ATTR_DEST_HW_ADDR, | ||
| 52 | IEEE802154_ATTR_DEST_PAN_ID, | ||
| 53 | |||
| 54 | IEEE802154_ATTR_CAPABILITY, | ||
| 55 | IEEE802154_ATTR_REASON, | ||
| 56 | IEEE802154_ATTR_SCAN_TYPE, | ||
| 57 | IEEE802154_ATTR_CHANNELS, | ||
| 58 | IEEE802154_ATTR_DURATION, | ||
| 59 | IEEE802154_ATTR_ED_LIST, | ||
| 60 | IEEE802154_ATTR_BCN_ORD, | ||
| 61 | IEEE802154_ATTR_SF_ORD, | ||
| 62 | IEEE802154_ATTR_PAN_COORD, | ||
| 63 | IEEE802154_ATTR_BAT_EXT, | ||
| 64 | IEEE802154_ATTR_COORD_REALIGN, | ||
| 65 | IEEE802154_ATTR_SEC, | ||
| 66 | |||
| 67 | __IEEE802154_ATTR_MAX, | ||
| 68 | }; | ||
| 69 | |||
| 70 | #define IEEE802154_ATTR_MAX (__IEEE802154_ATTR_MAX - 1) | ||
| 71 | |||
| 72 | extern struct nla_policy ieee802154_policy[]; | ||
| 73 | |||
| 74 | /* commands */ | ||
| 75 | /* REQ should be responded with CONF | ||
| 76 | * and INDIC with RESP | ||
| 77 | */ | ||
| 78 | enum { | ||
| 79 | __IEEE802154_COMMAND_INVALID, | ||
| 80 | |||
| 81 | IEEE802154_ASSOCIATE_REQ, | ||
| 82 | IEEE802154_ASSOCIATE_CONF, | ||
| 83 | IEEE802154_DISASSOCIATE_REQ, | ||
| 84 | IEEE802154_DISASSOCIATE_CONF, | ||
| 85 | IEEE802154_GET_REQ, | ||
| 86 | IEEE802154_GET_CONF, | ||
| 87 | IEEE802154_RESET_REQ, | ||
| 88 | IEEE802154_RESET_CONF, | ||
| 89 | IEEE802154_SCAN_REQ, | ||
| 90 | IEEE802154_SCAN_CONF, | ||
| 91 | IEEE802154_SET_REQ, | ||
| 92 | IEEE802154_SET_CONF, | ||
| 93 | IEEE802154_START_REQ, | ||
| 94 | IEEE802154_START_CONF, | ||
| 95 | IEEE802154_SYNC_REQ, | ||
| 96 | IEEE802154_POLL_REQ, | ||
| 97 | IEEE802154_POLL_CONF, | ||
| 98 | |||
| 99 | IEEE802154_ASSOCIATE_INDIC, | ||
| 100 | IEEE802154_ASSOCIATE_RESP, | ||
| 101 | IEEE802154_DISASSOCIATE_INDIC, | ||
| 102 | IEEE802154_BEACON_NOTIFY_INDIC, | ||
| 103 | IEEE802154_ORPHAN_INDIC, | ||
| 104 | IEEE802154_ORPHAN_RESP, | ||
| 105 | IEEE802154_COMM_STATUS_INDIC, | ||
| 106 | IEEE802154_SYNC_LOSS_INDIC, | ||
| 107 | |||
| 108 | IEEE802154_GTS_REQ, /* Not supported yet */ | ||
| 109 | IEEE802154_GTS_INDIC, /* Not supported yet */ | ||
| 110 | IEEE802154_GTS_CONF, /* Not supported yet */ | ||
| 111 | IEEE802154_RX_ENABLE_REQ, /* Not supported yet */ | ||
| 112 | IEEE802154_RX_ENABLE_CONF, /* Not supported yet */ | ||
| 113 | |||
| 114 | __IEEE802154_CMD_MAX, | ||
| 115 | }; | ||
| 116 | |||
| 117 | #define IEEE802154_CMD_MAX (__IEEE802154_CMD_MAX - 1) | ||
| 118 | |||
| 119 | #endif | ||
diff --git a/include/linux/notifier.h b/include/linux/notifier.h index b86fa2ffca0c..81bc252dc8ac 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h | |||
| @@ -198,6 +198,7 @@ static inline int notifier_to_errno(int ret) | |||
| 198 | #define NETDEV_CHANGENAME 0x000A | 198 | #define NETDEV_CHANGENAME 0x000A |
| 199 | #define NETDEV_FEAT_CHANGE 0x000B | 199 | #define NETDEV_FEAT_CHANGE 0x000B |
| 200 | #define NETDEV_BONDING_FAILOVER 0x000C | 200 | #define NETDEV_BONDING_FAILOVER 0x000C |
| 201 | #define NETDEV_PRE_UP 0x000D | ||
| 201 | 202 | ||
| 202 | #define SYS_DOWN 0x0001 /* Notify of system down */ | 203 | #define SYS_DOWN 0x0001 /* Notify of system down */ |
| 203 | #define SYS_RESTART SYS_DOWN | 204 | #define SYS_RESTART SYS_DOWN |
diff --git a/include/linux/of.h b/include/linux/of.h index 6a7efa242f5e..7be2d1043c16 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
| @@ -77,6 +77,9 @@ extern int of_n_size_cells(struct device_node *np); | |||
| 77 | extern const struct of_device_id *of_match_node( | 77 | extern const struct of_device_id *of_match_node( |
| 78 | const struct of_device_id *matches, const struct device_node *node); | 78 | const struct of_device_id *matches, const struct device_node *node); |
| 79 | extern int of_modalias_node(struct device_node *node, char *modalias, int len); | 79 | extern int of_modalias_node(struct device_node *node, char *modalias, int len); |
| 80 | extern struct device_node *of_parse_phandle(struct device_node *np, | ||
| 81 | const char *phandle_name, | ||
| 82 | int index); | ||
| 80 | extern int of_parse_phandles_with_args(struct device_node *np, | 83 | extern int of_parse_phandles_with_args(struct device_node *np, |
| 81 | const char *list_name, const char *cells_name, int index, | 84 | const char *list_name, const char *cells_name, int index, |
| 82 | struct device_node **out_node, const void **out_args); | 85 | struct device_node **out_node, const void **out_args); |
diff --git a/include/linux/of_mdio.h b/include/linux/of_mdio.h new file mode 100644 index 000000000000..c9663c690303 --- /dev/null +++ b/include/linux/of_mdio.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | /* | ||
| 2 | * OF helpers for the MDIO (Ethernet PHY) API | ||
| 3 | * | ||
| 4 | * Copyright (c) 2009 Secret Lab Technologies, Ltd. | ||
| 5 | * | ||
| 6 | * This file is released under the GPLv2 | ||
| 7 | */ | ||
| 8 | |||
| 9 | #ifndef __LINUX_OF_MDIO_H | ||
| 10 | #define __LINUX_OF_MDIO_H | ||
| 11 | |||
| 12 | #include <linux/phy.h> | ||
| 13 | #include <linux/of.h> | ||
| 14 | |||
| 15 | extern int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np); | ||
| 16 | extern struct phy_device *of_phy_find_device(struct device_node *phy_np); | ||
| 17 | extern struct phy_device *of_phy_connect(struct net_device *dev, | ||
| 18 | struct device_node *phy_np, | ||
| 19 | void (*hndlr)(struct net_device *), | ||
| 20 | u32 flags, phy_interface_t iface); | ||
| 21 | |||
| 22 | #endif /* __LINUX_OF_MDIO_H */ | ||
diff --git a/include/linux/page_cgroup.h b/include/linux/page_cgroup.h index 7339c7bf7331..13f126c89ae8 100644 --- a/include/linux/page_cgroup.h +++ b/include/linux/page_cgroup.h | |||
| @@ -18,7 +18,19 @@ struct page_cgroup { | |||
| 18 | }; | 18 | }; |
| 19 | 19 | ||
| 20 | void __meminit pgdat_page_cgroup_init(struct pglist_data *pgdat); | 20 | void __meminit pgdat_page_cgroup_init(struct pglist_data *pgdat); |
| 21 | void __init page_cgroup_init(void); | 21 | |
| 22 | #ifdef CONFIG_SPARSEMEM | ||
| 23 | static inline void __init page_cgroup_init_flatmem(void) | ||
| 24 | { | ||
| 25 | } | ||
| 26 | extern void __init page_cgroup_init(void); | ||
| 27 | #else | ||
| 28 | void __init page_cgroup_init_flatmem(void); | ||
| 29 | static inline void __init page_cgroup_init(void) | ||
| 30 | { | ||
| 31 | } | ||
| 32 | #endif | ||
| 33 | |||
| 22 | struct page_cgroup *lookup_page_cgroup(struct page *page); | 34 | struct page_cgroup *lookup_page_cgroup(struct page *page); |
| 23 | 35 | ||
| 24 | enum { | 36 | enum { |
| @@ -87,6 +99,10 @@ static inline void page_cgroup_init(void) | |||
| 87 | { | 99 | { |
| 88 | } | 100 | } |
| 89 | 101 | ||
| 102 | static inline void __init page_cgroup_init_flatmem(void) | ||
| 103 | { | ||
| 104 | } | ||
| 105 | |||
| 90 | #endif | 106 | #endif |
| 91 | 107 | ||
| 92 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP | 108 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index d7d1c41a0b17..aa01d38c9971 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -1005,6 +1005,7 @@ | |||
| 1005 | #define PCI_DEVICE_ID_PLX_PCI200SYN 0x3196 | 1005 | #define PCI_DEVICE_ID_PLX_PCI200SYN 0x3196 |
| 1006 | #define PCI_DEVICE_ID_PLX_9030 0x9030 | 1006 | #define PCI_DEVICE_ID_PLX_9030 0x9030 |
| 1007 | #define PCI_DEVICE_ID_PLX_9050 0x9050 | 1007 | #define PCI_DEVICE_ID_PLX_9050 0x9050 |
| 1008 | #define PCI_DEVICE_ID_PLX_9056 0x9056 | ||
| 1008 | #define PCI_DEVICE_ID_PLX_9080 0x9080 | 1009 | #define PCI_DEVICE_ID_PLX_9080 0x9080 |
| 1009 | #define PCI_DEVICE_ID_PLX_GTEK_SERIAL2 0xa001 | 1010 | #define PCI_DEVICE_ID_PLX_GTEK_SERIAL2 0xa001 |
| 1010 | 1011 | ||
| @@ -1066,8 +1067,6 @@ | |||
| 1066 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SMBUS 0x0034 | 1067 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SMBUS 0x0034 |
| 1067 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE 0x0035 | 1068 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE 0x0035 |
| 1068 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA 0x0036 | 1069 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA 0x0036 |
| 1069 | #define PCI_DEVICE_ID_NVIDIA_NVENET_10 0x0037 | ||
| 1070 | #define PCI_DEVICE_ID_NVIDIA_NVENET_11 0x0038 | ||
| 1071 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2 0x003e | 1070 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2 0x003e |
| 1072 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800_ULTRA 0x0040 | 1071 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800_ULTRA 0x0040 |
| 1073 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800 0x0041 | 1072 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800 0x0041 |
| @@ -1078,21 +1077,16 @@ | |||
| 1078 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE 0x0053 | 1077 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE 0x0053 |
| 1079 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA 0x0054 | 1078 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA 0x0054 |
| 1080 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2 0x0055 | 1079 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2 0x0055 |
| 1081 | #define PCI_DEVICE_ID_NVIDIA_NVENET_8 0x0056 | ||
| 1082 | #define PCI_DEVICE_ID_NVIDIA_NVENET_9 0x0057 | ||
| 1083 | #define PCI_DEVICE_ID_NVIDIA_CK804_AUDIO 0x0059 | 1080 | #define PCI_DEVICE_ID_NVIDIA_CK804_AUDIO 0x0059 |
| 1084 | #define PCI_DEVICE_ID_NVIDIA_CK804_PCIE 0x005d | 1081 | #define PCI_DEVICE_ID_NVIDIA_CK804_PCIE 0x005d |
| 1085 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_SMBUS 0x0064 | 1082 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_SMBUS 0x0064 |
| 1086 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE 0x0065 | 1083 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE 0x0065 |
| 1087 | #define PCI_DEVICE_ID_NVIDIA_NVENET_2 0x0066 | ||
| 1088 | #define PCI_DEVICE_ID_NVIDIA_MCP2_MODEM 0x0069 | 1084 | #define PCI_DEVICE_ID_NVIDIA_MCP2_MODEM 0x0069 |
| 1089 | #define PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO 0x006a | 1085 | #define PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO 0x006a |
| 1090 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SMBUS 0x0084 | 1086 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SMBUS 0x0084 |
| 1091 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE 0x0085 | 1087 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE 0x0085 |
| 1092 | #define PCI_DEVICE_ID_NVIDIA_NVENET_4 0x0086 | ||
| 1093 | #define PCI_DEVICE_ID_NVIDIA_MCP2S_MODEM 0x0089 | 1088 | #define PCI_DEVICE_ID_NVIDIA_MCP2S_MODEM 0x0089 |
| 1094 | #define PCI_DEVICE_ID_NVIDIA_CK8_AUDIO 0x008a | 1089 | #define PCI_DEVICE_ID_NVIDIA_CK8_AUDIO 0x008a |
| 1095 | #define PCI_DEVICE_ID_NVIDIA_NVENET_5 0x008c | ||
| 1096 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA 0x008e | 1090 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA 0x008e |
| 1097 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GT 0x0090 | 1091 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GT 0x0090 |
| 1098 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GTX 0x0091 | 1092 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GTX 0x0091 |
| @@ -1108,15 +1102,12 @@ | |||
| 1108 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3 0x00d1 | 1102 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3 0x00d1 |
| 1109 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3_SMBUS 0x00d4 | 1103 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3_SMBUS 0x00d4 |
| 1110 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE 0x00d5 | 1104 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE 0x00d5 |
| 1111 | #define PCI_DEVICE_ID_NVIDIA_NVENET_3 0x00d6 | ||
| 1112 | #define PCI_DEVICE_ID_NVIDIA_MCP3_MODEM 0x00d9 | 1105 | #define PCI_DEVICE_ID_NVIDIA_MCP3_MODEM 0x00d9 |
| 1113 | #define PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO 0x00da | 1106 | #define PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO 0x00da |
| 1114 | #define PCI_DEVICE_ID_NVIDIA_NVENET_7 0x00df | ||
| 1115 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S 0x00e1 | 1107 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S 0x00e1 |
| 1116 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA 0x00e3 | 1108 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA 0x00e3 |
| 1117 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SMBUS 0x00e4 | 1109 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SMBUS 0x00e4 |
| 1118 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE 0x00e5 | 1110 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE 0x00e5 |
| 1119 | #define PCI_DEVICE_ID_NVIDIA_NVENET_6 0x00e6 | ||
| 1120 | #define PCI_DEVICE_ID_NVIDIA_CK8S_AUDIO 0x00ea | 1111 | #define PCI_DEVICE_ID_NVIDIA_CK8S_AUDIO 0x00ea |
| 1121 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2 0x00ee | 1112 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2 0x00ee |
| 1122 | #define PCIE_DEVICE_ID_NVIDIA_GEFORCE_6800_ALT1 0x00f0 | 1113 | #define PCIE_DEVICE_ID_NVIDIA_GEFORCE_6800_ALT1 0x00f0 |
| @@ -1176,7 +1167,6 @@ | |||
| 1176 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_SMBUS 0x01b4 | 1167 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_SMBUS 0x01b4 |
| 1177 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_IDE 0x01bc | 1168 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_IDE 0x01bc |
| 1178 | #define PCI_DEVICE_ID_NVIDIA_MCP1_MODEM 0x01c1 | 1169 | #define PCI_DEVICE_ID_NVIDIA_MCP1_MODEM 0x01c1 |
| 1179 | #define PCI_DEVICE_ID_NVIDIA_NVENET_1 0x01c3 | ||
| 1180 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2 0x01e0 | 1170 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2 0x01e0 |
| 1181 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE3 0x0200 | 1171 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE3 0x0200 |
| 1182 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE3_1 0x0201 | 1172 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE3_1 0x0201 |
| @@ -1199,8 +1189,6 @@ | |||
| 1199 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE 0x036E | 1189 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE 0x036E |
| 1200 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA 0x037E | 1190 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA 0x037E |
| 1201 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2 0x037F | 1191 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2 0x037F |
| 1202 | #define PCI_DEVICE_ID_NVIDIA_NVENET_12 0x0268 | ||
| 1203 | #define PCI_DEVICE_ID_NVIDIA_NVENET_13 0x0269 | ||
| 1204 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800 0x0280 | 1192 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800 0x0280 |
| 1205 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800_8X 0x0281 | 1193 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800_8X 0x0281 |
| 1206 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800SE 0x0282 | 1194 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800SE 0x0282 |
| @@ -1247,46 +1235,21 @@ | |||
| 1247 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5700_2 0x0348 | 1235 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5700_2 0x0348 |
| 1248 | #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_GO1000 0x034C | 1236 | #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_GO1000 0x034C |
| 1249 | #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_1100 0x034E | 1237 | #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_1100 0x034E |
| 1250 | #define PCI_DEVICE_ID_NVIDIA_NVENET_14 0x0372 | ||
| 1251 | #define PCI_DEVICE_ID_NVIDIA_NVENET_15 0x0373 | 1238 | #define PCI_DEVICE_ID_NVIDIA_NVENET_15 0x0373 |
| 1252 | #define PCI_DEVICE_ID_NVIDIA_NVENET_16 0x03E5 | ||
| 1253 | #define PCI_DEVICE_ID_NVIDIA_NVENET_17 0x03E6 | ||
| 1254 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA 0x03E7 | 1239 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA 0x03E7 |
| 1255 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SMBUS 0x03EB | 1240 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SMBUS 0x03EB |
| 1256 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE 0x03EC | 1241 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE 0x03EC |
| 1257 | #define PCI_DEVICE_ID_NVIDIA_NVENET_18 0x03EE | ||
| 1258 | #define PCI_DEVICE_ID_NVIDIA_NVENET_19 0x03EF | ||
| 1259 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6 | 1242 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6 |
| 1260 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7 | 1243 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7 |
| 1261 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_SMBUS 0x0446 | 1244 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_SMBUS 0x0446 |
| 1262 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE 0x0448 | 1245 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE 0x0448 |
| 1263 | #define PCI_DEVICE_ID_NVIDIA_NVENET_20 0x0450 | ||
| 1264 | #define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451 | ||
| 1265 | #define PCI_DEVICE_ID_NVIDIA_NVENET_22 0x0452 | ||
| 1266 | #define PCI_DEVICE_ID_NVIDIA_NVENET_23 0x0453 | ||
| 1267 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_SMBUS 0x0542 | 1246 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_SMBUS 0x0542 |
| 1268 | #define PCI_DEVICE_ID_NVIDIA_NVENET_24 0x054C | ||
| 1269 | #define PCI_DEVICE_ID_NVIDIA_NVENET_25 0x054D | ||
| 1270 | #define PCI_DEVICE_ID_NVIDIA_NVENET_26 0x054E | ||
| 1271 | #define PCI_DEVICE_ID_NVIDIA_NVENET_27 0x054F | ||
| 1272 | #define PCI_DEVICE_ID_NVIDIA_NVENET_28 0x07DC | ||
| 1273 | #define PCI_DEVICE_ID_NVIDIA_NVENET_29 0x07DD | ||
| 1274 | #define PCI_DEVICE_ID_NVIDIA_NVENET_30 0x07DE | ||
| 1275 | #define PCI_DEVICE_ID_NVIDIA_NVENET_31 0x07DF | ||
| 1276 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE 0x0560 | 1247 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE 0x0560 |
| 1277 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE 0x056C | 1248 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE 0x056C |
| 1278 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP78S_SMBUS 0x0752 | 1249 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP78S_SMBUS 0x0752 |
| 1279 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE 0x0759 | 1250 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE 0x0759 |
| 1280 | #define PCI_DEVICE_ID_NVIDIA_NVENET_32 0x0760 | ||
| 1281 | #define PCI_DEVICE_ID_NVIDIA_NVENET_33 0x0761 | ||
| 1282 | #define PCI_DEVICE_ID_NVIDIA_NVENET_34 0x0762 | ||
| 1283 | #define PCI_DEVICE_ID_NVIDIA_NVENET_35 0x0763 | ||
| 1284 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS 0x07D8 | 1251 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS 0x07D8 |
| 1285 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS 0x0AA2 | 1252 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS 0x0AA2 |
| 1286 | #define PCI_DEVICE_ID_NVIDIA_NVENET_36 0x0AB0 | ||
| 1287 | #define PCI_DEVICE_ID_NVIDIA_NVENET_37 0x0AB1 | ||
| 1288 | #define PCI_DEVICE_ID_NVIDIA_NVENET_38 0x0AB2 | ||
| 1289 | #define PCI_DEVICE_ID_NVIDIA_NVENET_39 0x0AB3 | ||
| 1290 | 1253 | ||
| 1291 | #define PCI_VENDOR_ID_IMS 0x10e0 | 1254 | #define PCI_VENDOR_ID_IMS 0x10e0 |
| 1292 | #define PCI_DEVICE_ID_IMS_TT128 0x9128 | 1255 | #define PCI_DEVICE_ID_IMS_TT128 0x9128 |
| @@ -1314,6 +1277,13 @@ | |||
| 1314 | 1277 | ||
| 1315 | #define PCI_VENDOR_ID_CREATIVE 0x1102 /* duplicate: ECTIVA */ | 1278 | #define PCI_VENDOR_ID_CREATIVE 0x1102 /* duplicate: ECTIVA */ |
| 1316 | #define PCI_DEVICE_ID_CREATIVE_EMU10K1 0x0002 | 1279 | #define PCI_DEVICE_ID_CREATIVE_EMU10K1 0x0002 |
| 1280 | #define PCI_DEVICE_ID_CREATIVE_20K1 0x0005 | ||
| 1281 | #define PCI_DEVICE_ID_CREATIVE_20K2 0x000b | ||
| 1282 | #define PCI_SUBDEVICE_ID_CREATIVE_SB0760 0x0024 | ||
| 1283 | #define PCI_SUBDEVICE_ID_CREATIVE_SB08801 0x0041 | ||
| 1284 | #define PCI_SUBDEVICE_ID_CREATIVE_SB08802 0x0042 | ||
| 1285 | #define PCI_SUBDEVICE_ID_CREATIVE_SB08803 0x0043 | ||
| 1286 | #define PCI_SUBDEVICE_ID_CREATIVE_HENDRIX 0x6000 | ||
| 1317 | 1287 | ||
| 1318 | #define PCI_VENDOR_ID_ECTIVA 0x1102 /* duplicate: CREATIVE */ | 1288 | #define PCI_VENDOR_ID_ECTIVA 0x1102 /* duplicate: CREATIVE */ |
| 1319 | #define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938 | 1289 | #define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938 |
| @@ -1847,6 +1817,10 @@ | |||
| 1847 | #define PCI_SUBDEVICE_ID_HYPERCOPE_METRO 0x0107 | 1817 | #define PCI_SUBDEVICE_ID_HYPERCOPE_METRO 0x0107 |
| 1848 | #define PCI_SUBDEVICE_ID_HYPERCOPE_CHAMP2 0x0108 | 1818 | #define PCI_SUBDEVICE_ID_HYPERCOPE_CHAMP2 0x0108 |
| 1849 | 1819 | ||
| 1820 | #define PCI_VENDOR_ID_DIGIGRAM 0x1369 | ||
| 1821 | #define PCI_SUBDEVICE_ID_DIGIGRAM_LX6464ES_SERIAL_SUBSYSTEM 0xc001 | ||
| 1822 | #define PCI_SUBDEVICE_ID_DIGIGRAM_LX6464ES_CAE_SERIAL_SUBSYSTEM 0xc002 | ||
| 1823 | |||
| 1850 | #define PCI_VENDOR_ID_KAWASAKI 0x136b | 1824 | #define PCI_VENDOR_ID_KAWASAKI 0x136b |
| 1851 | #define PCI_DEVICE_ID_MCHIP_KL5A72002 0xff01 | 1825 | #define PCI_DEVICE_ID_MCHIP_KL5A72002 0xff01 |
| 1852 | 1826 | ||
| @@ -1914,6 +1888,8 @@ | |||
| 1914 | #define PCI_SUBDEVICE_ID_CCD_SWYX4S 0xB540 | 1888 | #define PCI_SUBDEVICE_ID_CCD_SWYX4S 0xB540 |
| 1915 | #define PCI_SUBDEVICE_ID_CCD_JH4S20 0xB550 | 1889 | #define PCI_SUBDEVICE_ID_CCD_JH4S20 0xB550 |
| 1916 | #define PCI_SUBDEVICE_ID_CCD_IOB8ST_1 0xB552 | 1890 | #define PCI_SUBDEVICE_ID_CCD_IOB8ST_1 0xB552 |
| 1891 | #define PCI_SUBDEVICE_ID_CCD_JHSE1 0xB553 | ||
| 1892 | #define PCI_SUBDEVICE_ID_CCD_JH8S 0xB55B | ||
| 1917 | #define PCI_SUBDEVICE_ID_CCD_BN4S 0xB560 | 1893 | #define PCI_SUBDEVICE_ID_CCD_BN4S 0xB560 |
| 1918 | #define PCI_SUBDEVICE_ID_CCD_BN8S 0xB562 | 1894 | #define PCI_SUBDEVICE_ID_CCD_BN8S 0xB562 |
| 1919 | #define PCI_SUBDEVICE_ID_CCD_BNE1 0xB563 | 1895 | #define PCI_SUBDEVICE_ID_CCD_BNE1 0xB563 |
| @@ -2115,6 +2091,7 @@ | |||
| 2115 | #define PCI_VENDOR_ID_MAINPINE 0x1522 | 2091 | #define PCI_VENDOR_ID_MAINPINE 0x1522 |
| 2116 | #define PCI_DEVICE_ID_MAINPINE_PBRIDGE 0x0100 | 2092 | #define PCI_DEVICE_ID_MAINPINE_PBRIDGE 0x0100 |
| 2117 | #define PCI_VENDOR_ID_ENE 0x1524 | 2093 | #define PCI_VENDOR_ID_ENE 0x1524 |
| 2094 | #define PCI_DEVICE_ID_ENE_CB710_FLASH 0x0510 | ||
| 2118 | #define PCI_DEVICE_ID_ENE_CB712_SD 0x0550 | 2095 | #define PCI_DEVICE_ID_ENE_CB712_SD 0x0550 |
| 2119 | #define PCI_DEVICE_ID_ENE_CB712_SD_2 0x0551 | 2096 | #define PCI_DEVICE_ID_ENE_CB712_SD_2 0x0551 |
| 2120 | #define PCI_DEVICE_ID_ENE_CB714_SD 0x0750 | 2097 | #define PCI_DEVICE_ID_ENE_CB714_SD 0x0750 |
| @@ -2276,6 +2253,8 @@ | |||
| 2276 | #define PCI_DEVICE_ID_MPC8547E 0x0018 | 2253 | #define PCI_DEVICE_ID_MPC8547E 0x0018 |
| 2277 | #define PCI_DEVICE_ID_MPC8545E 0x0019 | 2254 | #define PCI_DEVICE_ID_MPC8545E 0x0019 |
| 2278 | #define PCI_DEVICE_ID_MPC8545 0x001a | 2255 | #define PCI_DEVICE_ID_MPC8545 0x001a |
| 2256 | #define PCI_DEVICE_ID_MPC8569E 0x0061 | ||
| 2257 | #define PCI_DEVICE_ID_MPC8569 0x0060 | ||
| 2279 | #define PCI_DEVICE_ID_MPC8568E 0x0020 | 2258 | #define PCI_DEVICE_ID_MPC8568E 0x0020 |
| 2280 | #define PCI_DEVICE_ID_MPC8568 0x0021 | 2259 | #define PCI_DEVICE_ID_MPC8568 0x0021 |
| 2281 | #define PCI_DEVICE_ID_MPC8567E 0x0022 | 2260 | #define PCI_DEVICE_ID_MPC8567E 0x0022 |
| @@ -2288,6 +2267,8 @@ | |||
| 2288 | #define PCI_DEVICE_ID_MPC8572 0x0041 | 2267 | #define PCI_DEVICE_ID_MPC8572 0x0041 |
| 2289 | #define PCI_DEVICE_ID_MPC8536E 0x0050 | 2268 | #define PCI_DEVICE_ID_MPC8536E 0x0050 |
| 2290 | #define PCI_DEVICE_ID_MPC8536 0x0051 | 2269 | #define PCI_DEVICE_ID_MPC8536 0x0051 |
| 2270 | #define PCI_DEVICE_ID_P2020E 0x0070 | ||
| 2271 | #define PCI_DEVICE_ID_P2020 0x0071 | ||
| 2291 | #define PCI_DEVICE_ID_MPC8641 0x7010 | 2272 | #define PCI_DEVICE_ID_MPC8641 0x7010 |
| 2292 | #define PCI_DEVICE_ID_MPC8641D 0x7011 | 2273 | #define PCI_DEVICE_ID_MPC8641D 0x7011 |
| 2293 | #define PCI_DEVICE_ID_MPC8610 0x7018 | 2274 | #define PCI_DEVICE_ID_MPC8610 0x7018 |
| @@ -2315,6 +2296,8 @@ | |||
| 2315 | 2296 | ||
| 2316 | #define PCI_VENDOR_ID_QMI 0x1a32 | 2297 | #define PCI_VENDOR_ID_QMI 0x1a32 |
| 2317 | 2298 | ||
| 2299 | #define PCI_VENDOR_ID_AZWAVE 0x1a3b | ||
| 2300 | |||
| 2318 | #define PCI_VENDOR_ID_TEKRAM 0x1de1 | 2301 | #define PCI_VENDOR_ID_TEKRAM 0x1de1 |
| 2319 | #define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29 | 2302 | #define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29 |
| 2320 | 2303 | ||
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h index 6e133954e2e4..1b3118a1023a 100644 --- a/include/linux/perf_counter.h +++ b/include/linux/perf_counter.h | |||
| @@ -120,6 +120,8 @@ enum perf_counter_sample_format { | |||
| 120 | PERF_SAMPLE_ID = 1U << 6, | 120 | PERF_SAMPLE_ID = 1U << 6, |
| 121 | PERF_SAMPLE_CPU = 1U << 7, | 121 | PERF_SAMPLE_CPU = 1U << 7, |
| 122 | PERF_SAMPLE_PERIOD = 1U << 8, | 122 | PERF_SAMPLE_PERIOD = 1U << 8, |
| 123 | |||
| 124 | PERF_SAMPLE_MAX = 1U << 9, /* non-ABI */ | ||
| 123 | }; | 125 | }; |
| 124 | 126 | ||
| 125 | /* | 127 | /* |
| @@ -131,17 +133,26 @@ enum perf_counter_read_format { | |||
| 131 | PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0, | 133 | PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0, |
| 132 | PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1, | 134 | PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1, |
| 133 | PERF_FORMAT_ID = 1U << 2, | 135 | PERF_FORMAT_ID = 1U << 2, |
| 136 | |||
| 137 | PERF_FORMAT_MAX = 1U << 3, /* non-ABI */ | ||
| 134 | }; | 138 | }; |
| 135 | 139 | ||
| 140 | #define PERF_ATTR_SIZE_VER0 64 /* sizeof first published struct */ | ||
| 141 | |||
| 136 | /* | 142 | /* |
| 137 | * Hardware event to monitor via a performance monitoring counter: | 143 | * Hardware event to monitor via a performance monitoring counter: |
| 138 | */ | 144 | */ |
| 139 | struct perf_counter_attr { | 145 | struct perf_counter_attr { |
| 146 | |||
| 140 | /* | 147 | /* |
| 141 | * Major type: hardware/software/tracepoint/etc. | 148 | * Major type: hardware/software/tracepoint/etc. |
| 142 | */ | 149 | */ |
| 143 | __u32 type; | 150 | __u32 type; |
| 144 | __u32 __reserved_1; | 151 | |
| 152 | /* | ||
| 153 | * Size of the attr structure, for fwd/bwd compat. | ||
| 154 | */ | ||
| 155 | __u32 size; | ||
| 145 | 156 | ||
| 146 | /* | 157 | /* |
| 147 | * Type specific configuration information. | 158 | * Type specific configuration information. |
| @@ -168,12 +179,12 @@ struct perf_counter_attr { | |||
| 168 | comm : 1, /* include comm data */ | 179 | comm : 1, /* include comm data */ |
| 169 | freq : 1, /* use freq, not period */ | 180 | freq : 1, /* use freq, not period */ |
| 170 | 181 | ||
| 171 | __reserved_2 : 53; | 182 | __reserved_1 : 53; |
| 172 | 183 | ||
| 173 | __u32 wakeup_events; /* wakeup every n events */ | 184 | __u32 wakeup_events; /* wakeup every n events */ |
| 174 | __u32 __reserved_3; | 185 | __u32 __reserved_2; |
| 175 | 186 | ||
| 176 | __u64 __reserved_4; | 187 | __u64 __reserved_3; |
| 177 | }; | 188 | }; |
| 178 | 189 | ||
| 179 | /* | 190 | /* |
| @@ -621,7 +632,8 @@ extern int perf_counter_overflow(struct perf_counter *counter, int nmi, | |||
| 621 | static inline int is_software_counter(struct perf_counter *counter) | 632 | static inline int is_software_counter(struct perf_counter *counter) |
| 622 | { | 633 | { |
| 623 | return (counter->attr.type != PERF_TYPE_RAW) && | 634 | return (counter->attr.type != PERF_TYPE_RAW) && |
| 624 | (counter->attr.type != PERF_TYPE_HARDWARE); | 635 | (counter->attr.type != PERF_TYPE_HARDWARE) && |
| 636 | (counter->attr.type != PERF_TYPE_HW_CACHE); | ||
| 625 | } | 637 | } |
| 626 | 638 | ||
| 627 | extern void perf_swcounter_event(u32, u64, int, struct pt_regs *, u64); | 639 | extern void perf_swcounter_event(u32, u64, int, struct pt_regs *, u64); |
diff --git a/include/linux/phy.h b/include/linux/phy.h index 97e40cb6b588..b1368b8f6572 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h | |||
| @@ -79,7 +79,7 @@ typedef enum { | |||
| 79 | * Need to be a little smaller than phydev->dev.bus_id to leave room | 79 | * Need to be a little smaller than phydev->dev.bus_id to leave room |
| 80 | * for the ":%02x" | 80 | * for the ":%02x" |
| 81 | */ | 81 | */ |
| 82 | #define MII_BUS_ID_SIZE (BUS_ID_SIZE - 3) | 82 | #define MII_BUS_ID_SIZE (20 - 3) |
| 83 | 83 | ||
| 84 | /* | 84 | /* |
| 85 | * The Bus class for PHYs. Devices which provide access to | 85 | * The Bus class for PHYs. Devices which provide access to |
| @@ -407,7 +407,7 @@ struct phy_driver { | |||
| 407 | /* A Structure for boards to register fixups with the PHY Lib */ | 407 | /* A Structure for boards to register fixups with the PHY Lib */ |
| 408 | struct phy_fixup { | 408 | struct phy_fixup { |
| 409 | struct list_head list; | 409 | struct list_head list; |
| 410 | char bus_id[BUS_ID_SIZE]; | 410 | char bus_id[20]; |
| 411 | u32 phy_uid; | 411 | u32 phy_uid; |
| 412 | u32 phy_uid_mask; | 412 | u32 phy_uid_mask; |
| 413 | int (*run)(struct phy_device *phydev); | 413 | int (*run)(struct phy_device *phydev); |
| @@ -444,10 +444,16 @@ static inline int phy_write(struct phy_device *phydev, u16 regnum, u16 val) | |||
| 444 | 444 | ||
| 445 | int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id); | 445 | int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id); |
| 446 | struct phy_device* get_phy_device(struct mii_bus *bus, int addr); | 446 | struct phy_device* get_phy_device(struct mii_bus *bus, int addr); |
| 447 | int phy_device_register(struct phy_device *phy); | ||
| 447 | int phy_clear_interrupt(struct phy_device *phydev); | 448 | int phy_clear_interrupt(struct phy_device *phydev); |
| 448 | int phy_config_interrupt(struct phy_device *phydev, u32 interrupts); | 449 | int phy_config_interrupt(struct phy_device *phydev, u32 interrupts); |
| 450 | int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, | ||
| 451 | u32 flags, phy_interface_t interface); | ||
| 449 | struct phy_device * phy_attach(struct net_device *dev, | 452 | struct phy_device * phy_attach(struct net_device *dev, |
| 450 | const char *bus_id, u32 flags, phy_interface_t interface); | 453 | const char *bus_id, u32 flags, phy_interface_t interface); |
| 454 | int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, | ||
| 455 | void (*handler)(struct net_device *), u32 flags, | ||
| 456 | phy_interface_t interface); | ||
| 451 | struct phy_device * phy_connect(struct net_device *dev, const char *bus_id, | 457 | struct phy_device * phy_connect(struct net_device *dev, const char *bus_id, |
| 452 | void (*handler)(struct net_device *), u32 flags, | 458 | void (*handler)(struct net_device *), u32 flags, |
| 453 | phy_interface_t interface); | 459 | phy_interface_t interface); |
diff --git a/include/linux/pm.h b/include/linux/pm.h index 1d4e2d289821..b3f74764a586 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
| @@ -382,14 +382,13 @@ struct dev_pm_info { | |||
| 382 | #ifdef CONFIG_PM_SLEEP | 382 | #ifdef CONFIG_PM_SLEEP |
| 383 | extern void device_pm_lock(void); | 383 | extern void device_pm_lock(void); |
| 384 | extern int sysdev_resume(void); | 384 | extern int sysdev_resume(void); |
| 385 | extern void device_power_up(pm_message_t state); | 385 | extern void dpm_resume_noirq(pm_message_t state); |
| 386 | extern void device_resume(pm_message_t state); | 386 | extern void dpm_resume_end(pm_message_t state); |
| 387 | 387 | ||
| 388 | extern void device_pm_unlock(void); | 388 | extern void device_pm_unlock(void); |
| 389 | extern int sysdev_suspend(pm_message_t state); | 389 | extern int sysdev_suspend(pm_message_t state); |
| 390 | extern int device_power_down(pm_message_t state); | 390 | extern int dpm_suspend_noirq(pm_message_t state); |
| 391 | extern int device_suspend(pm_message_t state); | 391 | extern int dpm_suspend_start(pm_message_t state); |
| 392 | extern int device_prepare_suspend(pm_message_t state); | ||
| 393 | 392 | ||
| 394 | extern void __suspend_report_result(const char *function, void *fn, int ret); | 393 | extern void __suspend_report_result(const char *function, void *fn, int ret); |
| 395 | 394 | ||
| @@ -403,7 +402,7 @@ extern void __suspend_report_result(const char *function, void *fn, int ret); | |||
| 403 | #define device_pm_lock() do {} while (0) | 402 | #define device_pm_lock() do {} while (0) |
| 404 | #define device_pm_unlock() do {} while (0) | 403 | #define device_pm_unlock() do {} while (0) |
| 405 | 404 | ||
| 406 | static inline int device_suspend(pm_message_t state) | 405 | static inline int dpm_suspend_start(pm_message_t state) |
| 407 | { | 406 | { |
| 408 | return 0; | 407 | return 0; |
| 409 | } | 408 | } |
diff --git a/include/linux/pnp.h b/include/linux/pnp.h index ca3c88773028..b063c7328ba5 100644 --- a/include/linux/pnp.h +++ b/include/linux/pnp.h | |||
| @@ -446,6 +446,7 @@ int pnp_start_dev(struct pnp_dev *dev); | |||
| 446 | int pnp_stop_dev(struct pnp_dev *dev); | 446 | int pnp_stop_dev(struct pnp_dev *dev); |
| 447 | int pnp_activate_dev(struct pnp_dev *dev); | 447 | int pnp_activate_dev(struct pnp_dev *dev); |
| 448 | int pnp_disable_dev(struct pnp_dev *dev); | 448 | int pnp_disable_dev(struct pnp_dev *dev); |
| 449 | int pnp_range_reserved(resource_size_t start, resource_size_t end); | ||
| 449 | 450 | ||
| 450 | /* protocol helpers */ | 451 | /* protocol helpers */ |
| 451 | int pnp_is_active(struct pnp_dev *dev); | 452 | int pnp_is_active(struct pnp_dev *dev); |
| @@ -476,6 +477,7 @@ static inline int pnp_start_dev(struct pnp_dev *dev) { return -ENODEV; } | |||
| 476 | static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; } | 477 | static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; } |
| 477 | static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; } | 478 | static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; } |
| 478 | static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; } | 479 | static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; } |
| 480 | static inline int pnp_range_reserved(resource_size_t start, resource_size_t end) { return 0;} | ||
| 479 | 481 | ||
| 480 | /* protocol helpers */ | 482 | /* protocol helpers */ |
| 481 | static inline int pnp_is_active(struct pnp_dev *dev) { return 0; } | 483 | static inline int pnp_is_active(struct pnp_dev *dev) { return 0; } |
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h index fbfa3d44d33d..e6e77d31c418 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h | |||
| @@ -93,20 +93,9 @@ struct vmcore { | |||
| 93 | 93 | ||
| 94 | #ifdef CONFIG_PROC_FS | 94 | #ifdef CONFIG_PROC_FS |
| 95 | 95 | ||
| 96 | extern spinlock_t proc_subdir_lock; | ||
| 97 | |||
| 98 | extern void proc_root_init(void); | 96 | extern void proc_root_init(void); |
| 99 | 97 | ||
| 100 | void proc_flush_task(struct task_struct *task); | 98 | void proc_flush_task(struct task_struct *task); |
| 101 | struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, struct nameidata *); | ||
| 102 | int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir); | ||
| 103 | unsigned long task_vsize(struct mm_struct *); | ||
| 104 | int task_statm(struct mm_struct *, int *, int *, int *, int *); | ||
| 105 | void task_mem(struct seq_file *, struct mm_struct *); | ||
| 106 | void clear_refs_smap(struct mm_struct *mm); | ||
| 107 | |||
| 108 | struct proc_dir_entry *de_get(struct proc_dir_entry *de); | ||
| 109 | void de_put(struct proc_dir_entry *de); | ||
| 110 | 99 | ||
| 111 | extern struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, | 100 | extern struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, |
| 112 | struct proc_dir_entry *parent); | 101 | struct proc_dir_entry *parent); |
| @@ -116,20 +105,7 @@ struct proc_dir_entry *proc_create_data(const char *name, mode_t mode, | |||
| 116 | void *data); | 105 | void *data); |
| 117 | extern void remove_proc_entry(const char *name, struct proc_dir_entry *parent); | 106 | extern void remove_proc_entry(const char *name, struct proc_dir_entry *parent); |
| 118 | 107 | ||
| 119 | extern struct vfsmount *proc_mnt; | ||
| 120 | struct pid_namespace; | 108 | struct pid_namespace; |
| 121 | extern int proc_fill_super(struct super_block *); | ||
| 122 | extern struct inode *proc_get_inode(struct super_block *, unsigned int, struct proc_dir_entry *); | ||
| 123 | |||
| 124 | /* | ||
| 125 | * These are generic /proc routines that use the internal | ||
| 126 | * "struct proc_dir_entry" tree to traverse the filesystem. | ||
| 127 | * | ||
| 128 | * The /proc root directory has extended versions to take care | ||
| 129 | * of the /proc/<pid> subdirectories. | ||
| 130 | */ | ||
| 131 | extern int proc_readdir(struct file *, void *, filldir_t); | ||
| 132 | extern struct dentry *proc_lookup(struct inode *, struct dentry *, struct nameidata *); | ||
| 133 | 109 | ||
| 134 | extern int pid_ns_prepare_proc(struct pid_namespace *ns); | 110 | extern int pid_ns_prepare_proc(struct pid_namespace *ns); |
| 135 | extern void pid_ns_release_proc(struct pid_namespace *ns); | 111 | extern void pid_ns_release_proc(struct pid_namespace *ns); |
diff --git a/include/linux/qnx4_fs.h b/include/linux/qnx4_fs.h index 787d19ea9f46..8b9aee1a9ce3 100644 --- a/include/linux/qnx4_fs.h +++ b/include/linux/qnx4_fs.h | |||
| @@ -85,65 +85,4 @@ struct qnx4_super_block { | |||
| 85 | struct qnx4_inode_entry AltBoot; | 85 | struct qnx4_inode_entry AltBoot; |
| 86 | }; | 86 | }; |
| 87 | 87 | ||
| 88 | #ifdef __KERNEL__ | ||
| 89 | |||
| 90 | #define QNX4_DEBUG 0 | ||
| 91 | |||
| 92 | #if QNX4_DEBUG | ||
| 93 | #define QNX4DEBUG(X) printk X | ||
| 94 | #else | ||
| 95 | #define QNX4DEBUG(X) (void) 0 | ||
| 96 | #endif | ||
| 97 | |||
| 98 | struct qnx4_sb_info { | ||
| 99 | struct buffer_head *sb_buf; /* superblock buffer */ | ||
| 100 | struct qnx4_super_block *sb; /* our superblock */ | ||
| 101 | unsigned int Version; /* may be useful */ | ||
| 102 | struct qnx4_inode_entry *BitMap; /* useful */ | ||
| 103 | }; | ||
| 104 | |||
| 105 | struct qnx4_inode_info { | ||
| 106 | struct qnx4_inode_entry raw; | ||
| 107 | loff_t mmu_private; | ||
| 108 | struct inode vfs_inode; | ||
| 109 | }; | ||
| 110 | |||
| 111 | extern struct inode *qnx4_iget(struct super_block *, unsigned long); | ||
| 112 | extern struct dentry *qnx4_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd); | ||
| 113 | extern unsigned long qnx4_count_free_blocks(struct super_block *sb); | ||
| 114 | extern unsigned long qnx4_block_map(struct inode *inode, long iblock); | ||
| 115 | |||
| 116 | extern struct buffer_head *qnx4_bread(struct inode *, int, int); | ||
| 117 | |||
| 118 | extern const struct inode_operations qnx4_file_inode_operations; | ||
| 119 | extern const struct inode_operations qnx4_dir_inode_operations; | ||
| 120 | extern const struct file_operations qnx4_file_operations; | ||
| 121 | extern const struct file_operations qnx4_dir_operations; | ||
| 122 | extern int qnx4_is_free(struct super_block *sb, long block); | ||
| 123 | extern int qnx4_set_bitmap(struct super_block *sb, long block, int busy); | ||
| 124 | extern int qnx4_create(struct inode *inode, struct dentry *dentry, int mode, struct nameidata *nd); | ||
| 125 | extern void qnx4_truncate(struct inode *inode); | ||
| 126 | extern void qnx4_free_inode(struct inode *inode); | ||
| 127 | extern int qnx4_unlink(struct inode *dir, struct dentry *dentry); | ||
| 128 | extern int qnx4_rmdir(struct inode *dir, struct dentry *dentry); | ||
| 129 | extern int qnx4_sync_file(struct file *file, struct dentry *dentry, int); | ||
| 130 | extern int qnx4_sync_inode(struct inode *inode); | ||
| 131 | |||
| 132 | static inline struct qnx4_sb_info *qnx4_sb(struct super_block *sb) | ||
| 133 | { | ||
| 134 | return sb->s_fs_info; | ||
| 135 | } | ||
| 136 | |||
| 137 | static inline struct qnx4_inode_info *qnx4_i(struct inode *inode) | ||
| 138 | { | ||
| 139 | return container_of(inode, struct qnx4_inode_info, vfs_inode); | ||
| 140 | } | ||
| 141 | |||
| 142 | static inline struct qnx4_inode_entry *qnx4_raw_inode(struct inode *inode) | ||
| 143 | { | ||
| 144 | return &qnx4_i(inode)->raw; | ||
| 145 | } | ||
| 146 | |||
| 147 | #endif /* __KERNEL__ */ | ||
| 148 | |||
| 149 | #endif | 88 | #endif |
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index 36353d95c8db..7bc457593684 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h | |||
| @@ -20,7 +20,12 @@ static inline struct quota_info *sb_dqopt(struct super_block *sb) | |||
| 20 | /* | 20 | /* |
| 21 | * declaration of quota_function calls in kernel. | 21 | * declaration of quota_function calls in kernel. |
| 22 | */ | 22 | */ |
| 23 | void sync_dquots(struct super_block *sb, int type); | 23 | void sync_quota_sb(struct super_block *sb, int type); |
| 24 | static inline void writeout_quota_sb(struct super_block *sb, int type) | ||
| 25 | { | ||
| 26 | if (sb->s_qcop->quota_sync) | ||
| 27 | sb->s_qcop->quota_sync(sb, type); | ||
| 28 | } | ||
| 24 | 29 | ||
| 25 | int dquot_initialize(struct inode *inode, int type); | 30 | int dquot_initialize(struct inode *inode, int type); |
| 26 | int dquot_drop(struct inode *inode); | 31 | int dquot_drop(struct inode *inode); |
| @@ -253,12 +258,7 @@ static inline void vfs_dq_free_inode(struct inode *inode) | |||
| 253 | inode->i_sb->dq_op->free_inode(inode, 1); | 258 | inode->i_sb->dq_op->free_inode(inode, 1); |
| 254 | } | 259 | } |
| 255 | 260 | ||
| 256 | /* The following two functions cannot be called inside a transaction */ | 261 | /* Cannot be called inside a transaction */ |
| 257 | static inline void vfs_dq_sync(struct super_block *sb) | ||
| 258 | { | ||
| 259 | sync_dquots(sb, -1); | ||
| 260 | } | ||
| 261 | |||
| 262 | static inline int vfs_dq_off(struct super_block *sb, int remount) | 262 | static inline int vfs_dq_off(struct super_block *sb, int remount) |
| 263 | { | 263 | { |
| 264 | int ret = -ENOSYS; | 264 | int ret = -ENOSYS; |
| @@ -334,7 +334,11 @@ static inline void vfs_dq_free_inode(struct inode *inode) | |||
| 334 | { | 334 | { |
| 335 | } | 335 | } |
| 336 | 336 | ||
| 337 | static inline void vfs_dq_sync(struct super_block *sb) | 337 | static inline void sync_quota_sb(struct super_block *sb, int type) |
| 338 | { | ||
| 339 | } | ||
| 340 | |||
| 341 | static inline void writeout_quota_sb(struct super_block *sb, int type) | ||
| 338 | { | 342 | { |
| 339 | } | 343 | } |
| 340 | 344 | ||
diff --git a/include/linux/regulator/lp3971.h b/include/linux/regulator/lp3971.h new file mode 100644 index 000000000000..61401649fe7d --- /dev/null +++ b/include/linux/regulator/lp3971.h | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | /* | ||
| 2 | * National Semiconductors LP3971 PMIC chip client interface | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 Samsung Electronics | ||
| 5 | * Author: Marek Szyprowski <m.szyprowski@samsung.com> | ||
| 6 | * | ||
| 7 | * Based on wm8400.h | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License as published by | ||
| 11 | * the Free Software Foundation; either version 2 of the License, or | ||
| 12 | * (at your option) any later version. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | * GNU General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 22 | */ | ||
| 23 | |||
| 24 | #ifndef __LINUX_REGULATOR_LP3971_H | ||
| 25 | #define __LINUX_REGULATOR_LP3971_H | ||
| 26 | |||
| 27 | #include <linux/regulator/machine.h> | ||
| 28 | |||
| 29 | #define LP3971_LDO1 0 | ||
| 30 | #define LP3971_LDO2 1 | ||
| 31 | #define LP3971_LDO3 2 | ||
| 32 | #define LP3971_LDO4 3 | ||
| 33 | #define LP3971_LDO5 4 | ||
| 34 | |||
| 35 | #define LP3971_DCDC1 5 | ||
| 36 | #define LP3971_DCDC2 6 | ||
| 37 | #define LP3971_DCDC3 7 | ||
| 38 | |||
| 39 | #define LP3971_NUM_REGULATORS 8 | ||
| 40 | |||
| 41 | struct lp3971_regulator_subdev { | ||
| 42 | int id; | ||
| 43 | struct regulator_init_data *initdata; | ||
| 44 | }; | ||
| 45 | |||
| 46 | struct lp3971_platform_data { | ||
| 47 | int num_regulators; | ||
| 48 | struct lp3971_regulator_subdev *regulators; | ||
| 49 | }; | ||
| 50 | |||
| 51 | #endif | ||
diff --git a/include/linux/regulator/max1586.h b/include/linux/regulator/max1586.h new file mode 100644 index 000000000000..44563192bf16 --- /dev/null +++ b/include/linux/regulator/max1586.h | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | /* | ||
| 2 | * max1586.h -- Voltage regulation for the Maxim 1586 | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008 Robert Jarzmik | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef REGULATOR_MAX1586 | ||
| 22 | #define REGULATOR_MAX1586 | ||
| 23 | |||
| 24 | #include <linux/regulator/machine.h> | ||
| 25 | |||
| 26 | #define MAX1586_V3 0 | ||
| 27 | #define MAX1586_V6 1 | ||
| 28 | |||
| 29 | /* precalculated values for v3_gain */ | ||
| 30 | #define MAX1586_GAIN_NO_R24 1000000 /* 700000 .. 1475000 mV */ | ||
| 31 | #define MAX1586_GAIN_R24_3k32 1051098 /* 735768 .. 1550369 mV */ | ||
| 32 | #define MAX1586_GAIN_R24_5k11 1078648 /* 755053 .. 1591005 mV */ | ||
| 33 | #define MAX1586_GAIN_R24_7k5 1115432 /* 780802 .. 1645262 mV */ | ||
| 34 | |||
| 35 | /** | ||
| 36 | * max1586_subdev_data - regulator data | ||
| 37 | * @id: regulator Id (either MAX1586_V3 or MAX1586_V6) | ||
| 38 | * @name: regulator cute name (example for V3: "vcc_core") | ||
| 39 | * @platform_data: regulator init data (contraints, supplies, ...) | ||
| 40 | */ | ||
| 41 | struct max1586_subdev_data { | ||
| 42 | int id; | ||
| 43 | char *name; | ||
| 44 | struct regulator_init_data *platform_data; | ||
| 45 | }; | ||
| 46 | |||
| 47 | /** | ||
| 48 | * max1586_platform_data - platform data for max1586 | ||
| 49 | * @num_subdevs: number of regultors used (may be 1 or 2) | ||
| 50 | * @subdevs: regulator used | ||
| 51 | * At most, there will be a regulator for V3 and one for V6 voltages. | ||
| 52 | * @v3_gain: gain on the V3 voltage output multiplied by 1e6. | ||
| 53 | * This can be calculated as ((1 + R24/R25 + R24/185.5kOhm) * 1e6) | ||
| 54 | * for an external resistor configuration as described in the | ||
| 55 | * data sheet (R25=100kOhm). | ||
| 56 | */ | ||
| 57 | struct max1586_platform_data { | ||
| 58 | int num_subdevs; | ||
| 59 | struct max1586_subdev_data *subdevs; | ||
| 60 | int v3_gain; | ||
| 61 | }; | ||
| 62 | |||
| 63 | #endif | ||
diff --git a/include/linux/regulator/userspace-consumer.h b/include/linux/regulator/userspace-consumer.h new file mode 100644 index 000000000000..b4554ce9d4bb --- /dev/null +++ b/include/linux/regulator/userspace-consumer.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | #ifndef __REGULATOR_PLATFORM_CONSUMER_H_ | ||
| 2 | #define __REGULATOR_PLATFORM_CONSUMER_H_ | ||
| 3 | |||
| 4 | struct regulator_consumer_supply; | ||
| 5 | |||
| 6 | /** | ||
| 7 | * struct regulator_userspace_consumer_data - line consumer | ||
| 8 | * initialisation data. | ||
| 9 | * | ||
| 10 | * @name: Name for the consumer line | ||
| 11 | * @num_supplies: Number of supplies feeding the line | ||
| 12 | * @supplies: Supplies configuration. | ||
| 13 | * @init_on: Set if the regulators supplying the line should be | ||
| 14 | * enabled during initialisation | ||
| 15 | */ | ||
| 16 | struct regulator_userspace_consumer_data { | ||
| 17 | const char *name; | ||
| 18 | |||
| 19 | int num_supplies; | ||
| 20 | struct regulator_bulk_data *supplies; | ||
| 21 | |||
| 22 | bool init_on; | ||
| 23 | }; | ||
| 24 | |||
| 25 | #endif /* __REGULATOR_PLATFORM_CONSUMER_H_ */ | ||
diff --git a/include/linux/reiserfs_fs_sb.h b/include/linux/reiserfs_fs_sb.h index 6473650c28f1..dab68bbed675 100644 --- a/include/linux/reiserfs_fs_sb.h +++ b/include/linux/reiserfs_fs_sb.h | |||
| @@ -453,6 +453,7 @@ enum reiserfs_mount_options { | |||
| 453 | REISERFS_ATTRS, | 453 | REISERFS_ATTRS, |
| 454 | REISERFS_XATTRS_USER, | 454 | REISERFS_XATTRS_USER, |
| 455 | REISERFS_POSIXACL, | 455 | REISERFS_POSIXACL, |
| 456 | REISERFS_EXPOSE_PRIVROOT, | ||
| 456 | REISERFS_BARRIER_NONE, | 457 | REISERFS_BARRIER_NONE, |
| 457 | REISERFS_BARRIER_FLUSH, | 458 | REISERFS_BARRIER_FLUSH, |
| 458 | 459 | ||
| @@ -490,6 +491,7 @@ enum reiserfs_mount_options { | |||
| 490 | #define reiserfs_data_writeback(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_WRITEBACK)) | 491 | #define reiserfs_data_writeback(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_WRITEBACK)) |
| 491 | #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)) |
| 492 | #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)) |
| 494 | #define reiserfs_expose_privroot(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_EXPOSE_PRIVROOT)) | ||
| 493 | #define reiserfs_xattrs_optional(s) (reiserfs_xattrs_user(s) || reiserfs_posixacl(s)) | 495 | #define reiserfs_xattrs_optional(s) (reiserfs_xattrs_user(s) || reiserfs_posixacl(s)) |
| 494 | #define reiserfs_barrier_none(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_NONE)) | 496 | #define reiserfs_barrier_none(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_NONE)) |
| 495 | #define reiserfs_barrier_flush(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_FLUSH)) | 497 | #define reiserfs_barrier_flush(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_FLUSH)) |
diff --git a/include/linux/rfkill.h b/include/linux/rfkill.h index 164332cbb77c..16e39c7a67fc 100644 --- a/include/linux/rfkill.h +++ b/include/linux/rfkill.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | /* | 4 | /* |
| 5 | * Copyright (C) 2006 - 2007 Ivo van Doorn | 5 | * Copyright (C) 2006 - 2007 Ivo van Doorn |
| 6 | * Copyright (C) 2007 Dmitry Torokhov | 6 | * Copyright (C) 2007 Dmitry Torokhov |
| 7 | * Copyright 2009 Johannes Berg <johannes@sipsolutions.net> | ||
| 7 | * | 8 | * |
| 8 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
| 9 | * it under the terms of the GNU General Public License as published by | 10 | * it under the terms of the GNU General Public License as published by |
| @@ -22,131 +23,331 @@ | |||
| 22 | */ | 23 | */ |
| 23 | 24 | ||
| 24 | #include <linux/types.h> | 25 | #include <linux/types.h> |
| 25 | #include <linux/kernel.h> | 26 | |
| 26 | #include <linux/list.h> | 27 | /* define userspace visible states */ |
| 27 | #include <linux/mutex.h> | 28 | #define RFKILL_STATE_SOFT_BLOCKED 0 |
| 28 | #include <linux/device.h> | 29 | #define RFKILL_STATE_UNBLOCKED 1 |
| 29 | #include <linux/leds.h> | 30 | #define RFKILL_STATE_HARD_BLOCKED 2 |
| 30 | 31 | ||
| 31 | /** | 32 | /** |
| 32 | * enum rfkill_type - type of rfkill switch. | 33 | * enum rfkill_type - type of rfkill switch. |
| 33 | * RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device. | 34 | * |
| 34 | * RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. | 35 | * @RFKILL_TYPE_ALL: toggles all switches (userspace only) |
| 35 | * RFKILL_TYPE_UWB: switch is on a ultra wideband device. | 36 | * @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device. |
| 36 | * RFKILL_TYPE_WIMAX: switch is on a WiMAX device. | 37 | * @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. |
| 37 | * RFKILL_TYPE_WWAN: switch is on a wireless WAN device. | 38 | * @RFKILL_TYPE_UWB: switch is on a ultra wideband device. |
| 39 | * @RFKILL_TYPE_WIMAX: switch is on a WiMAX device. | ||
| 40 | * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device. | ||
| 41 | * @NUM_RFKILL_TYPES: number of defined rfkill types | ||
| 38 | */ | 42 | */ |
| 39 | enum rfkill_type { | 43 | enum rfkill_type { |
| 40 | RFKILL_TYPE_WLAN , | 44 | RFKILL_TYPE_ALL = 0, |
| 45 | RFKILL_TYPE_WLAN, | ||
| 41 | RFKILL_TYPE_BLUETOOTH, | 46 | RFKILL_TYPE_BLUETOOTH, |
| 42 | RFKILL_TYPE_UWB, | 47 | RFKILL_TYPE_UWB, |
| 43 | RFKILL_TYPE_WIMAX, | 48 | RFKILL_TYPE_WIMAX, |
| 44 | RFKILL_TYPE_WWAN, | 49 | RFKILL_TYPE_WWAN, |
| 45 | RFKILL_TYPE_MAX, | 50 | NUM_RFKILL_TYPES, |
| 46 | }; | 51 | }; |
| 47 | 52 | ||
| 48 | enum rfkill_state { | 53 | /** |
| 49 | RFKILL_STATE_SOFT_BLOCKED = 0, /* Radio output blocked */ | 54 | * enum rfkill_operation - operation types |
| 50 | RFKILL_STATE_UNBLOCKED = 1, /* Radio output allowed */ | 55 | * @RFKILL_OP_ADD: a device was added |
| 51 | RFKILL_STATE_HARD_BLOCKED = 2, /* Output blocked, non-overrideable */ | 56 | * @RFKILL_OP_DEL: a device was removed |
| 52 | RFKILL_STATE_MAX, /* marker for last valid state */ | 57 | * @RFKILL_OP_CHANGE: a device's state changed -- userspace changes one device |
| 58 | * @RFKILL_OP_CHANGE_ALL: userspace changes all devices (of a type, or all) | ||
| 59 | */ | ||
| 60 | enum rfkill_operation { | ||
| 61 | RFKILL_OP_ADD = 0, | ||
| 62 | RFKILL_OP_DEL, | ||
| 63 | RFKILL_OP_CHANGE, | ||
| 64 | RFKILL_OP_CHANGE_ALL, | ||
| 53 | }; | 65 | }; |
| 54 | 66 | ||
| 55 | /* | 67 | /** |
| 56 | * These are DEPRECATED, drivers using them should be verified to | 68 | * struct rfkill_event - events for userspace on /dev/rfkill |
| 57 | * comply with the rfkill usage guidelines in Documentation/rfkill.txt | 69 | * @idx: index of dev rfkill |
| 58 | * and then converted to use the new names for rfkill_state | 70 | * @type: type of the rfkill struct |
| 59 | */ | 71 | * @op: operation code |
| 60 | #define RFKILL_STATE_OFF RFKILL_STATE_SOFT_BLOCKED | 72 | * @hard: hard state (0/1) |
| 61 | #define RFKILL_STATE_ON RFKILL_STATE_UNBLOCKED | 73 | * @soft: soft state (0/1) |
| 62 | 74 | * | |
| 63 | /** | 75 | * Structure used for userspace communication on /dev/rfkill, |
| 64 | * struct rfkill - rfkill control structure. | 76 | * used for events from the kernel and control to the kernel. |
| 65 | * @name: Name of the switch. | 77 | */ |
| 66 | * @type: Radio type which the button controls, the value stored | 78 | struct rfkill_event { |
| 67 | * here should be a value from enum rfkill_type. | 79 | __u32 idx; |
| 68 | * @state: State of the switch, "UNBLOCKED" means radio can operate. | 80 | __u8 type; |
| 69 | * @user_claim_unsupported: Whether the hardware supports exclusive | 81 | __u8 op; |
| 70 | * RF-kill control by userspace. Set this before registering. | 82 | __u8 soft, hard; |
| 71 | * @user_claim: Set when the switch is controlled exlusively by userspace. | 83 | } __packed; |
| 72 | * @mutex: Guards switch state transitions. It serializes callbacks | ||
| 73 | * and also protects the state. | ||
| 74 | * @data: Pointer to the RF button drivers private data which will be | ||
| 75 | * passed along when toggling radio state. | ||
| 76 | * @toggle_radio(): Mandatory handler to control state of the radio. | ||
| 77 | * only RFKILL_STATE_SOFT_BLOCKED and RFKILL_STATE_UNBLOCKED are | ||
| 78 | * valid parameters. | ||
| 79 | * @get_state(): handler to read current radio state from hardware, | ||
| 80 | * may be called from atomic context, should return 0 on success. | ||
| 81 | * Either this handler OR judicious use of rfkill_force_state() is | ||
| 82 | * MANDATORY for any driver capable of RFKILL_STATE_HARD_BLOCKED. | ||
| 83 | * @led_trigger: A LED trigger for this button's LED. | ||
| 84 | * @dev: Device structure integrating the switch into device tree. | ||
| 85 | * @node: Used to place switch into list of all switches known to the | ||
| 86 | * the system. | ||
| 87 | * | ||
| 88 | * This structure represents a RF switch located on a network device. | ||
| 89 | */ | ||
| 90 | struct rfkill { | ||
| 91 | const char *name; | ||
| 92 | enum rfkill_type type; | ||
| 93 | |||
| 94 | bool user_claim_unsupported; | ||
| 95 | bool user_claim; | ||
| 96 | |||
| 97 | /* the mutex serializes callbacks and also protects | ||
| 98 | * the state */ | ||
| 99 | struct mutex mutex; | ||
| 100 | enum rfkill_state state; | ||
| 101 | void *data; | ||
| 102 | int (*toggle_radio)(void *data, enum rfkill_state state); | ||
| 103 | int (*get_state)(void *data, enum rfkill_state *state); | ||
| 104 | 84 | ||
| 105 | #ifdef CONFIG_RFKILL_LEDS | 85 | /* ioctl for turning off rfkill-input (if present) */ |
| 106 | struct led_trigger led_trigger; | 86 | #define RFKILL_IOC_MAGIC 'R' |
| 107 | #endif | 87 | #define RFKILL_IOC_NOINPUT 1 |
| 88 | #define RFKILL_IOCTL_NOINPUT _IO(RFKILL_IOC_MAGIC, RFKILL_IOC_NOINPUT) | ||
| 89 | |||
| 90 | /* and that's all userspace gets */ | ||
| 91 | #ifdef __KERNEL__ | ||
| 92 | /* don't allow anyone to use these in the kernel */ | ||
| 93 | enum rfkill_user_states { | ||
| 94 | RFKILL_USER_STATE_SOFT_BLOCKED = RFKILL_STATE_SOFT_BLOCKED, | ||
| 95 | RFKILL_USER_STATE_UNBLOCKED = RFKILL_STATE_UNBLOCKED, | ||
| 96 | RFKILL_USER_STATE_HARD_BLOCKED = RFKILL_STATE_HARD_BLOCKED, | ||
| 97 | }; | ||
| 98 | #undef RFKILL_STATE_SOFT_BLOCKED | ||
| 99 | #undef RFKILL_STATE_UNBLOCKED | ||
| 100 | #undef RFKILL_STATE_HARD_BLOCKED | ||
| 101 | |||
| 102 | #include <linux/types.h> | ||
| 103 | #include <linux/kernel.h> | ||
| 104 | #include <linux/list.h> | ||
| 105 | #include <linux/mutex.h> | ||
| 106 | #include <linux/device.h> | ||
| 107 | #include <linux/leds.h> | ||
| 108 | #include <linux/err.h> | ||
| 109 | |||
| 110 | /* this is opaque */ | ||
| 111 | struct rfkill; | ||
| 108 | 112 | ||
| 109 | struct device dev; | 113 | /** |
| 110 | struct list_head node; | 114 | * struct rfkill_ops - rfkill driver methods |
| 111 | enum rfkill_state state_for_resume; | 115 | * |
| 116 | * @poll: poll the rfkill block state(s) -- only assign this method | ||
| 117 | * when you need polling. When called, simply call one of the | ||
| 118 | * rfkill_set{,_hw,_sw}_state family of functions. If the hw | ||
| 119 | * is getting unblocked you need to take into account the return | ||
| 120 | * value of those functions to make sure the software block is | ||
| 121 | * properly used. | ||
| 122 | * @query: query the rfkill block state(s) and call exactly one of the | ||
| 123 | * rfkill_set{,_hw,_sw}_state family of functions. Assign this | ||
| 124 | * method if input events can cause hardware state changes to make | ||
| 125 | * the rfkill core query your driver before setting a requested | ||
| 126 | * block. | ||
| 127 | * @set_block: turn the transmitter on (blocked == false) or off | ||
| 128 | * (blocked == true) -- ignore and return 0 when hard blocked. | ||
| 129 | * This callback must be assigned. | ||
| 130 | */ | ||
| 131 | struct rfkill_ops { | ||
| 132 | void (*poll)(struct rfkill *rfkill, void *data); | ||
| 133 | void (*query)(struct rfkill *rfkill, void *data); | ||
| 134 | int (*set_block)(void *data, bool blocked); | ||
| 112 | }; | 135 | }; |
| 113 | #define to_rfkill(d) container_of(d, struct rfkill, dev) | ||
| 114 | 136 | ||
| 115 | struct rfkill * __must_check rfkill_allocate(struct device *parent, | 137 | #if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE) |
| 116 | enum rfkill_type type); | 138 | /** |
| 117 | void rfkill_free(struct rfkill *rfkill); | 139 | * rfkill_alloc - allocate rfkill structure |
| 140 | * @name: name of the struct -- the string is not copied internally | ||
| 141 | * @parent: device that has rf switch on it | ||
| 142 | * @type: type of the switch (RFKILL_TYPE_*) | ||
| 143 | * @ops: rfkill methods | ||
| 144 | * @ops_data: data passed to each method | ||
| 145 | * | ||
| 146 | * This function should be called by the transmitter driver to allocate an | ||
| 147 | * rfkill structure. Returns %NULL on failure. | ||
| 148 | */ | ||
| 149 | struct rfkill * __must_check rfkill_alloc(const char *name, | ||
| 150 | struct device *parent, | ||
| 151 | const enum rfkill_type type, | ||
| 152 | const struct rfkill_ops *ops, | ||
| 153 | void *ops_data); | ||
| 154 | |||
| 155 | /** | ||
| 156 | * rfkill_register - Register a rfkill structure. | ||
| 157 | * @rfkill: rfkill structure to be registered | ||
| 158 | * | ||
| 159 | * This function should be called by the transmitter driver to register | ||
| 160 | * the rfkill structure. Before calling this function the driver needs | ||
| 161 | * to be ready to service method calls from rfkill. | ||
| 162 | * | ||
| 163 | * If the software blocked state is not set before registration, | ||
| 164 | * set_block will be called to initialize it to a default value. | ||
| 165 | * | ||
| 166 | * If the hardware blocked state is not set before registration, | ||
| 167 | * it is assumed to be unblocked. | ||
| 168 | */ | ||
| 118 | int __must_check rfkill_register(struct rfkill *rfkill); | 169 | int __must_check rfkill_register(struct rfkill *rfkill); |
| 170 | |||
| 171 | /** | ||
| 172 | * rfkill_pause_polling(struct rfkill *rfkill) | ||
| 173 | * | ||
| 174 | * Pause polling -- say transmitter is off for other reasons. | ||
| 175 | * NOTE: not necessary for suspend/resume -- in that case the | ||
| 176 | * core stops polling anyway | ||
| 177 | */ | ||
| 178 | void rfkill_pause_polling(struct rfkill *rfkill); | ||
| 179 | |||
| 180 | /** | ||
| 181 | * rfkill_resume_polling(struct rfkill *rfkill) | ||
| 182 | * | ||
| 183 | * Pause polling -- say transmitter is off for other reasons. | ||
| 184 | * NOTE: not necessary for suspend/resume -- in that case the | ||
| 185 | * core stops polling anyway | ||
| 186 | */ | ||
| 187 | void rfkill_resume_polling(struct rfkill *rfkill); | ||
| 188 | |||
| 189 | |||
| 190 | /** | ||
| 191 | * rfkill_unregister - Unregister a rfkill structure. | ||
| 192 | * @rfkill: rfkill structure to be unregistered | ||
| 193 | * | ||
| 194 | * This function should be called by the network driver during device | ||
| 195 | * teardown to destroy rfkill structure. Until it returns, the driver | ||
| 196 | * needs to be able to service method calls. | ||
| 197 | */ | ||
| 119 | void rfkill_unregister(struct rfkill *rfkill); | 198 | void rfkill_unregister(struct rfkill *rfkill); |
| 120 | 199 | ||
| 121 | int rfkill_force_state(struct rfkill *rfkill, enum rfkill_state state); | 200 | /** |
| 122 | int rfkill_set_default(enum rfkill_type type, enum rfkill_state state); | 201 | * rfkill_destroy - free rfkill structure |
| 202 | * @rfkill: rfkill structure to be destroyed | ||
| 203 | * | ||
| 204 | * Destroys the rfkill structure. | ||
| 205 | */ | ||
| 206 | void rfkill_destroy(struct rfkill *rfkill); | ||
| 207 | |||
| 208 | /** | ||
| 209 | * rfkill_set_hw_state - Set the internal rfkill hardware block state | ||
| 210 | * @rfkill: pointer to the rfkill class to modify. | ||
| 211 | * @state: the current hardware block state to set | ||
| 212 | * | ||
| 213 | * rfkill drivers that get events when the hard-blocked state changes | ||
| 214 | * use this function to notify the rfkill core (and through that also | ||
| 215 | * userspace) of the current state. They should also use this after | ||
| 216 | * resume if the state could have changed. | ||
| 217 | * | ||
| 218 | * You need not (but may) call this function if poll_state is assigned. | ||
| 219 | * | ||
| 220 | * This function can be called in any context, even from within rfkill | ||
| 221 | * callbacks. | ||
| 222 | * | ||
| 223 | * The function returns the combined block state (true if transmitter | ||
| 224 | * should be blocked) so that drivers need not keep track of the soft | ||
| 225 | * block state -- which they might not be able to. | ||
| 226 | */ | ||
| 227 | bool __must_check rfkill_set_hw_state(struct rfkill *rfkill, bool blocked); | ||
| 228 | |||
| 229 | /** | ||
| 230 | * rfkill_set_sw_state - Set the internal rfkill software block state | ||
| 231 | * @rfkill: pointer to the rfkill class to modify. | ||
| 232 | * @state: the current software block state to set | ||
| 233 | * | ||
| 234 | * rfkill drivers that get events when the soft-blocked state changes | ||
| 235 | * (yes, some platforms directly act on input but allow changing again) | ||
| 236 | * use this function to notify the rfkill core (and through that also | ||
| 237 | * userspace) of the current state. It is not necessary to notify on | ||
| 238 | * resume; since hibernation can always change the soft-blocked state, | ||
| 239 | * the rfkill core will unconditionally restore the previous state. | ||
| 240 | * | ||
| 241 | * This function can be called in any context, even from within rfkill | ||
| 242 | * callbacks. | ||
| 243 | * | ||
| 244 | * The function returns the combined block state (true if transmitter | ||
| 245 | * should be blocked). | ||
| 246 | */ | ||
| 247 | bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked); | ||
| 248 | |||
| 249 | /** | ||
| 250 | * rfkill_set_states - Set the internal rfkill block states | ||
| 251 | * @rfkill: pointer to the rfkill class to modify. | ||
| 252 | * @sw: the current software block state to set | ||
| 253 | * @hw: the current hardware block state to set | ||
| 254 | * | ||
| 255 | * This function can be called in any context, even from within rfkill | ||
| 256 | * callbacks. | ||
| 257 | */ | ||
| 258 | void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw); | ||
| 123 | 259 | ||
| 124 | /** | 260 | /** |
| 125 | * rfkill_state_complement - return complementar state | 261 | * rfkill_blocked - query rfkill block |
| 126 | * @state: state to return the complement of | ||
| 127 | * | 262 | * |
| 128 | * Returns RFKILL_STATE_SOFT_BLOCKED if @state is RFKILL_STATE_UNBLOCKED, | 263 | * @rfkill: rfkill struct to query |
| 129 | * returns RFKILL_STATE_UNBLOCKED otherwise. | ||
| 130 | */ | 264 | */ |
| 131 | static inline enum rfkill_state rfkill_state_complement(enum rfkill_state state) | 265 | bool rfkill_blocked(struct rfkill *rfkill); |
| 266 | #else /* !RFKILL */ | ||
| 267 | static inline struct rfkill * __must_check | ||
| 268 | rfkill_alloc(const char *name, | ||
| 269 | struct device *parent, | ||
| 270 | const enum rfkill_type type, | ||
| 271 | const struct rfkill_ops *ops, | ||
| 272 | void *ops_data) | ||
| 273 | { | ||
| 274 | return ERR_PTR(-ENODEV); | ||
| 275 | } | ||
| 276 | |||
| 277 | static inline int __must_check rfkill_register(struct rfkill *rfkill) | ||
| 278 | { | ||
| 279 | if (rfkill == ERR_PTR(-ENODEV)) | ||
| 280 | return 0; | ||
| 281 | return -EINVAL; | ||
| 282 | } | ||
| 283 | |||
| 284 | static inline void rfkill_pause_polling(struct rfkill *rfkill) | ||
| 285 | { | ||
| 286 | } | ||
| 287 | |||
| 288 | static inline void rfkill_resume_polling(struct rfkill *rfkill) | ||
| 289 | { | ||
| 290 | } | ||
| 291 | |||
| 292 | static inline void rfkill_unregister(struct rfkill *rfkill) | ||
| 293 | { | ||
| 294 | } | ||
| 295 | |||
| 296 | static inline void rfkill_destroy(struct rfkill *rfkill) | ||
| 297 | { | ||
| 298 | } | ||
| 299 | |||
| 300 | static inline bool rfkill_set_hw_state(struct rfkill *rfkill, bool blocked) | ||
| 301 | { | ||
| 302 | return blocked; | ||
| 303 | } | ||
| 304 | |||
| 305 | static inline bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked) | ||
| 132 | { | 306 | { |
| 133 | return (state == RFKILL_STATE_UNBLOCKED) ? | 307 | return blocked; |
| 134 | RFKILL_STATE_SOFT_BLOCKED : RFKILL_STATE_UNBLOCKED; | ||
| 135 | } | 308 | } |
| 136 | 309 | ||
| 310 | static inline void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw) | ||
| 311 | { | ||
| 312 | } | ||
| 313 | |||
| 314 | static inline bool rfkill_blocked(struct rfkill *rfkill) | ||
| 315 | { | ||
| 316 | return false; | ||
| 317 | } | ||
| 318 | #endif /* RFKILL || RFKILL_MODULE */ | ||
| 319 | |||
| 320 | |||
| 321 | #ifdef CONFIG_RFKILL_LEDS | ||
| 137 | /** | 322 | /** |
| 138 | * rfkill_get_led_name - Get the LED trigger name for the button's LED. | 323 | * rfkill_get_led_trigger_name - Get the LED trigger name for the button's LED. |
| 139 | * This function might return a NULL pointer if registering of the | 324 | * This function might return a NULL pointer if registering of the |
| 140 | * LED trigger failed. | 325 | * LED trigger failed. Use this as "default_trigger" for the LED. |
| 141 | * Use this as "default_trigger" for the LED. | ||
| 142 | */ | 326 | */ |
| 143 | static inline char *rfkill_get_led_name(struct rfkill *rfkill) | 327 | const char *rfkill_get_led_trigger_name(struct rfkill *rfkill); |
| 144 | { | 328 | |
| 145 | #ifdef CONFIG_RFKILL_LEDS | 329 | /** |
| 146 | return (char *)(rfkill->led_trigger.name); | 330 | * rfkill_set_led_trigger_name -- set the LED trigger name |
| 331 | * @rfkill: rfkill struct | ||
| 332 | * @name: LED trigger name | ||
| 333 | * | ||
| 334 | * This function sets the LED trigger name of the radio LED | ||
| 335 | * trigger that rfkill creates. It is optional, but if called | ||
| 336 | * must be called before rfkill_register() to be effective. | ||
| 337 | */ | ||
| 338 | void rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name); | ||
| 147 | #else | 339 | #else |
| 340 | static inline const char *rfkill_get_led_trigger_name(struct rfkill *rfkill) | ||
| 341 | { | ||
| 148 | return NULL; | 342 | return NULL; |
| 149 | #endif | ||
| 150 | } | 343 | } |
| 151 | 344 | ||
| 345 | static inline void | ||
| 346 | rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name) | ||
| 347 | { | ||
| 348 | } | ||
| 349 | #endif | ||
| 350 | |||
| 351 | #endif /* __KERNEL__ */ | ||
| 352 | |||
| 152 | #endif /* RFKILL_H */ | 353 | #endif /* RFKILL_H */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 4896fdfec913..c900aa530070 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -261,6 +261,7 @@ extern void task_rq_unlock_wait(struct task_struct *p); | |||
| 261 | extern cpumask_var_t nohz_cpu_mask; | 261 | extern cpumask_var_t nohz_cpu_mask; |
| 262 | #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ) | 262 | #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ) |
| 263 | extern int select_nohz_load_balancer(int cpu); | 263 | extern int select_nohz_load_balancer(int cpu); |
| 264 | extern int get_nohz_load_balancer(void); | ||
| 264 | #else | 265 | #else |
| 265 | static inline int select_nohz_load_balancer(int cpu) | 266 | static inline int select_nohz_load_balancer(int cpu) |
| 266 | { | 267 | { |
| @@ -1796,11 +1797,23 @@ extern unsigned int sysctl_sched_child_runs_first; | |||
| 1796 | extern unsigned int sysctl_sched_features; | 1797 | extern unsigned int sysctl_sched_features; |
| 1797 | extern unsigned int sysctl_sched_migration_cost; | 1798 | extern unsigned int sysctl_sched_migration_cost; |
| 1798 | extern unsigned int sysctl_sched_nr_migrate; | 1799 | extern unsigned int sysctl_sched_nr_migrate; |
| 1800 | extern unsigned int sysctl_timer_migration; | ||
| 1799 | 1801 | ||
| 1800 | int sched_nr_latency_handler(struct ctl_table *table, int write, | 1802 | int sched_nr_latency_handler(struct ctl_table *table, int write, |
| 1801 | struct file *file, void __user *buffer, size_t *length, | 1803 | struct file *file, void __user *buffer, size_t *length, |
| 1802 | loff_t *ppos); | 1804 | loff_t *ppos); |
| 1803 | #endif | 1805 | #endif |
| 1806 | #ifdef CONFIG_SCHED_DEBUG | ||
| 1807 | static inline unsigned int get_sysctl_timer_migration(void) | ||
| 1808 | { | ||
| 1809 | return sysctl_timer_migration; | ||
| 1810 | } | ||
| 1811 | #else | ||
| 1812 | static inline unsigned int get_sysctl_timer_migration(void) | ||
| 1813 | { | ||
| 1814 | return 1; | ||
| 1815 | } | ||
| 1816 | #endif | ||
| 1804 | extern unsigned int sysctl_sched_rt_period; | 1817 | extern unsigned int sysctl_sched_rt_period; |
| 1805 | extern int sysctl_sched_rt_runtime; | 1818 | extern int sysctl_sched_rt_runtime; |
| 1806 | 1819 | ||
| @@ -2212,6 +2225,12 @@ static inline int test_tsk_need_resched(struct task_struct *tsk) | |||
| 2212 | return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); | 2225 | return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); |
| 2213 | } | 2226 | } |
| 2214 | 2227 | ||
| 2228 | static inline int restart_syscall(void) | ||
| 2229 | { | ||
| 2230 | set_tsk_thread_flag(current, TIF_SIGPENDING); | ||
| 2231 | return -ERESTARTNOINTR; | ||
| 2232 | } | ||
| 2233 | |||
| 2215 | static inline int signal_pending(struct task_struct *p) | 2234 | static inline int signal_pending(struct task_struct *p) |
| 2216 | { | 2235 | { |
| 2217 | return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING)); | 2236 | return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING)); |
diff --git a/include/linux/sctp.h b/include/linux/sctp.h index c2731bfe04d8..b464b9d3d242 100644 --- a/include/linux/sctp.h +++ b/include/linux/sctp.h | |||
| @@ -487,17 +487,17 @@ typedef enum { | |||
| 487 | * | 487 | * |
| 488 | * Value Cause Code | 488 | * Value Cause Code |
| 489 | * --------- ---------------- | 489 | * --------- ---------------- |
| 490 | * 0x0100 Request to Delete Last Remaining IP Address. | 490 | * 0x00A0 Request to Delete Last Remaining IP Address. |
| 491 | * 0x0101 Operation Refused Due to Resource Shortage. | 491 | * 0x00A1 Operation Refused Due to Resource Shortage. |
| 492 | * 0x0102 Request to Delete Source IP Address. | 492 | * 0x00A2 Request to Delete Source IP Address. |
| 493 | * 0x0103 Association Aborted due to illegal ASCONF-ACK | 493 | * 0x00A3 Association Aborted due to illegal ASCONF-ACK |
| 494 | * 0x0104 Request refused - no authorization. | 494 | * 0x00A4 Request refused - no authorization. |
| 495 | */ | 495 | */ |
| 496 | SCTP_ERROR_DEL_LAST_IP = cpu_to_be16(0x0100), | 496 | SCTP_ERROR_DEL_LAST_IP = cpu_to_be16(0x00A0), |
| 497 | SCTP_ERROR_RSRC_LOW = cpu_to_be16(0x0101), | 497 | SCTP_ERROR_RSRC_LOW = cpu_to_be16(0x00A1), |
| 498 | SCTP_ERROR_DEL_SRC_IP = cpu_to_be16(0x0102), | 498 | SCTP_ERROR_DEL_SRC_IP = cpu_to_be16(0x00A2), |
| 499 | SCTP_ERROR_ASCONF_ACK = cpu_to_be16(0x0103), | 499 | SCTP_ERROR_ASCONF_ACK = cpu_to_be16(0x00A3), |
| 500 | SCTP_ERROR_REQ_REFUSED = cpu_to_be16(0x0104), | 500 | SCTP_ERROR_REQ_REFUSED = cpu_to_be16(0x00A4), |
| 501 | 501 | ||
| 502 | /* AUTH Section 4. New Error Cause | 502 | /* AUTH Section 4. New Error Cause |
| 503 | * | 503 | * |
diff --git a/include/linux/section-names.h b/include/linux/section-names.h deleted file mode 100644 index c956f4eb2adf..000000000000 --- a/include/linux/section-names.h +++ /dev/null | |||
| @@ -1,6 +0,0 @@ | |||
| 1 | #ifndef __LINUX_SECTION_NAMES_H | ||
| 2 | #define __LINUX_SECTION_NAMES_H | ||
| 3 | |||
| 4 | #define HEAD_TEXT_SECTION .head.text | ||
| 5 | |||
| 6 | #endif /* !__LINUX_SECTION_NAMES_H */ | ||
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 5fd389162f01..fa51293f2708 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -189,20 +189,23 @@ struct skb_shared_info { | |||
| 189 | atomic_t dataref; | 189 | atomic_t dataref; |
| 190 | unsigned short nr_frags; | 190 | unsigned short nr_frags; |
| 191 | unsigned short gso_size; | 191 | unsigned short gso_size; |
| 192 | #ifdef CONFIG_HAS_DMA | ||
| 193 | dma_addr_t dma_head; | ||
| 194 | #endif | ||
| 192 | /* Warning: this field is not always filled in (UFO)! */ | 195 | /* Warning: this field is not always filled in (UFO)! */ |
| 193 | unsigned short gso_segs; | 196 | unsigned short gso_segs; |
| 194 | unsigned short gso_type; | 197 | unsigned short gso_type; |
| 195 | __be32 ip6_frag_id; | 198 | __be32 ip6_frag_id; |
| 196 | union skb_shared_tx tx_flags; | 199 | union skb_shared_tx tx_flags; |
| 197 | #ifdef CONFIG_HAS_DMA | ||
| 198 | unsigned int num_dma_maps; | ||
| 199 | #endif | ||
| 200 | struct sk_buff *frag_list; | 200 | struct sk_buff *frag_list; |
| 201 | struct skb_shared_hwtstamps hwtstamps; | 201 | struct skb_shared_hwtstamps hwtstamps; |
| 202 | skb_frag_t frags[MAX_SKB_FRAGS]; | 202 | skb_frag_t frags[MAX_SKB_FRAGS]; |
| 203 | #ifdef CONFIG_HAS_DMA | 203 | #ifdef CONFIG_HAS_DMA |
| 204 | dma_addr_t dma_maps[MAX_SKB_FRAGS + 1]; | 204 | dma_addr_t dma_maps[MAX_SKB_FRAGS]; |
| 205 | #endif | 205 | #endif |
| 206 | /* Intermediate layers must ensure that destructor_arg | ||
| 207 | * remains valid until skb destructor */ | ||
| 208 | void * destructor_arg; | ||
| 206 | }; | 209 | }; |
| 207 | 210 | ||
| 208 | /* We divide dataref into two halves. The higher 16 bits hold references | 211 | /* We divide dataref into two halves. The higher 16 bits hold references |
| @@ -301,9 +304,6 @@ typedef unsigned char *sk_buff_data_t; | |||
| 301 | * @tc_verd: traffic control verdict | 304 | * @tc_verd: traffic control verdict |
| 302 | * @ndisc_nodetype: router type (from link layer) | 305 | * @ndisc_nodetype: router type (from link layer) |
| 303 | * @do_not_encrypt: set to prevent encryption of this frame | 306 | * @do_not_encrypt: set to prevent encryption of this frame |
| 304 | * @requeue: set to indicate that the wireless core should attempt | ||
| 305 | * a software retry on this frame if we failed to | ||
| 306 | * receive an ACK for it | ||
| 307 | * @dma_cookie: a cookie to one of several possible DMA operations | 307 | * @dma_cookie: a cookie to one of several possible DMA operations |
| 308 | * done by skb DMA functions | 308 | * done by skb DMA functions |
| 309 | * @secmark: security marking | 309 | * @secmark: security marking |
| @@ -319,10 +319,7 @@ struct sk_buff { | |||
| 319 | ktime_t tstamp; | 319 | ktime_t tstamp; |
| 320 | struct net_device *dev; | 320 | struct net_device *dev; |
| 321 | 321 | ||
| 322 | union { | 322 | unsigned long _skb_dst; |
| 323 | struct dst_entry *dst; | ||
| 324 | struct rtable *rtable; | ||
| 325 | }; | ||
| 326 | #ifdef CONFIG_XFRM | 323 | #ifdef CONFIG_XFRM |
| 327 | struct sec_path *sp; | 324 | struct sec_path *sp; |
| 328 | #endif | 325 | #endif |
| @@ -380,7 +377,6 @@ struct sk_buff { | |||
| 380 | #endif | 377 | #endif |
| 381 | #if defined(CONFIG_MAC80211) || defined(CONFIG_MAC80211_MODULE) | 378 | #if defined(CONFIG_MAC80211) || defined(CONFIG_MAC80211_MODULE) |
| 382 | __u8 do_not_encrypt:1; | 379 | __u8 do_not_encrypt:1; |
| 383 | __u8 requeue:1; | ||
| 384 | #endif | 380 | #endif |
| 385 | /* 0/13/14 bit hole */ | 381 | /* 0/13/14 bit hole */ |
| 386 | 382 | ||
| @@ -423,6 +419,21 @@ extern void skb_dma_unmap(struct device *dev, struct sk_buff *skb, | |||
| 423 | enum dma_data_direction dir); | 419 | enum dma_data_direction dir); |
| 424 | #endif | 420 | #endif |
| 425 | 421 | ||
| 422 | static inline struct dst_entry *skb_dst(const struct sk_buff *skb) | ||
| 423 | { | ||
| 424 | return (struct dst_entry *)skb->_skb_dst; | ||
| 425 | } | ||
| 426 | |||
| 427 | static inline void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst) | ||
| 428 | { | ||
| 429 | skb->_skb_dst = (unsigned long)dst; | ||
| 430 | } | ||
| 431 | |||
| 432 | static inline struct rtable *skb_rtable(const struct sk_buff *skb) | ||
| 433 | { | ||
| 434 | return (struct rtable *)skb_dst(skb); | ||
| 435 | } | ||
| 436 | |||
| 426 | extern void kfree_skb(struct sk_buff *skb); | 437 | extern void kfree_skb(struct sk_buff *skb); |
| 427 | extern void consume_skb(struct sk_buff *skb); | 438 | extern void consume_skb(struct sk_buff *skb); |
| 428 | extern void __kfree_skb(struct sk_buff *skb); | 439 | extern void __kfree_skb(struct sk_buff *skb); |
| @@ -1062,7 +1073,7 @@ extern void skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page, | |||
| 1062 | int off, int size); | 1073 | int off, int size); |
| 1063 | 1074 | ||
| 1064 | #define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags) | 1075 | #define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags) |
| 1065 | #define SKB_FRAG_ASSERT(skb) BUG_ON(skb_shinfo(skb)->frag_list) | 1076 | #define SKB_FRAG_ASSERT(skb) BUG_ON(skb_has_frags(skb)) |
| 1066 | #define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb)) | 1077 | #define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb)) |
| 1067 | 1078 | ||
| 1068 | #ifdef NET_SKBUFF_DATA_USES_OFFSET | 1079 | #ifdef NET_SKBUFF_DATA_USES_OFFSET |
| @@ -1701,6 +1712,25 @@ static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len) | |||
| 1701 | skb = skb->prev) | 1712 | skb = skb->prev) |
| 1702 | 1713 | ||
| 1703 | 1714 | ||
| 1715 | static inline bool skb_has_frags(const struct sk_buff *skb) | ||
| 1716 | { | ||
| 1717 | return skb_shinfo(skb)->frag_list != NULL; | ||
| 1718 | } | ||
| 1719 | |||
| 1720 | static inline void skb_frag_list_init(struct sk_buff *skb) | ||
| 1721 | { | ||
| 1722 | skb_shinfo(skb)->frag_list = NULL; | ||
| 1723 | } | ||
| 1724 | |||
| 1725 | static inline void skb_frag_add_head(struct sk_buff *skb, struct sk_buff *frag) | ||
| 1726 | { | ||
| 1727 | frag->next = skb_shinfo(skb)->frag_list; | ||
| 1728 | skb_shinfo(skb)->frag_list = frag; | ||
| 1729 | } | ||
| 1730 | |||
| 1731 | #define skb_walk_frags(skb, iter) \ | ||
| 1732 | for (iter = skb_shinfo(skb)->frag_list; iter; iter = iter->next) | ||
| 1733 | |||
| 1704 | extern struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags, | 1734 | extern struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags, |
| 1705 | int *peeked, int *err); | 1735 | int *peeked, int *err); |
| 1706 | extern struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, | 1736 | extern struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, |
| @@ -1715,8 +1745,14 @@ extern int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb, | |||
| 1715 | struct iovec *iov); | 1745 | struct iovec *iov); |
| 1716 | extern int skb_copy_datagram_from_iovec(struct sk_buff *skb, | 1746 | extern int skb_copy_datagram_from_iovec(struct sk_buff *skb, |
| 1717 | int offset, | 1747 | int offset, |
| 1718 | struct iovec *from, | 1748 | const struct iovec *from, |
| 1749 | int from_offset, | ||
| 1719 | int len); | 1750 | int len); |
| 1751 | extern int skb_copy_datagram_const_iovec(const struct sk_buff *from, | ||
| 1752 | int offset, | ||
| 1753 | const struct iovec *to, | ||
| 1754 | int to_offset, | ||
| 1755 | int size); | ||
| 1720 | extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); | 1756 | extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); |
| 1721 | extern int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, | 1757 | extern int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, |
| 1722 | unsigned int flags); | 1758 | unsigned int flags); |
diff --git a/include/linux/slab.h b/include/linux/slab.h index 48803064cedf..219b8fb4651d 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
| @@ -319,4 +319,6 @@ static inline void *kzalloc_node(size_t size, gfp_t flags, int node) | |||
| 319 | return kmalloc_node(size, flags | __GFP_ZERO, node); | 319 | return kmalloc_node(size, flags | __GFP_ZERO, node); |
| 320 | } | 320 | } |
| 321 | 321 | ||
| 322 | void __init kmem_cache_init_late(void); | ||
| 323 | |||
| 322 | #endif /* _LINUX_SLAB_H */ | 324 | #endif /* _LINUX_SLAB_H */ |
diff --git a/include/linux/slob_def.h b/include/linux/slob_def.h index 0ec00b39d006..bb5368df4be8 100644 --- a/include/linux/slob_def.h +++ b/include/linux/slob_def.h | |||
| @@ -34,4 +34,9 @@ static __always_inline void *__kmalloc(size_t size, gfp_t flags) | |||
| 34 | return kmalloc(size, flags); | 34 | return kmalloc(size, flags); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | static inline void kmem_cache_init_late(void) | ||
| 38 | { | ||
| 39 | /* Nothing to do */ | ||
| 40 | } | ||
| 41 | |||
| 37 | #endif /* __LINUX_SLOB_DEF_H */ | 42 | #endif /* __LINUX_SLOB_DEF_H */ |
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index be5d40c43bd2..4dcbc2c71491 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h | |||
| @@ -302,4 +302,6 @@ static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node) | |||
| 302 | } | 302 | } |
| 303 | #endif | 303 | #endif |
| 304 | 304 | ||
| 305 | void __init kmem_cache_init_late(void); | ||
| 306 | |||
| 305 | #endif /* _LINUX_SLUB_DEF_H */ | 307 | #endif /* _LINUX_SLUB_DEF_H */ |
diff --git a/include/linux/smsc911x.h b/include/linux/smsc911x.h index b32725075d71..5241e4fb4eca 100644 --- a/include/linux/smsc911x.h +++ b/include/linux/smsc911x.h | |||
| @@ -47,4 +47,14 @@ struct smsc911x_platform_config { | |||
| 47 | #define SMSC911X_FORCE_EXTERNAL_PHY (BIT(3)) | 47 | #define SMSC911X_FORCE_EXTERNAL_PHY (BIT(3)) |
| 48 | #define SMSC911X_SAVE_MAC_ADDRESS (BIT(4)) | 48 | #define SMSC911X_SAVE_MAC_ADDRESS (BIT(4)) |
| 49 | 49 | ||
| 50 | /* | ||
| 51 | * SMSC911X_SWAP_FIFO: | ||
| 52 | * Enables software byte swap for fifo data. Should only be used as a | ||
| 53 | * "last resort" in the case of big endian mode on boards with incorrectly | ||
| 54 | * routed data bus to older devices such as LAN9118. Newer devices such as | ||
| 55 | * LAN9221 can handle this in hardware, there are registers to control | ||
| 56 | * this swapping but the driver doesn't currently use them. | ||
| 57 | */ | ||
| 58 | #define SMSC911X_SWAP_FIFO (BIT(5)) | ||
| 59 | |||
| 50 | #endif /* __LINUX_SMSC911X_H__ */ | 60 | #endif /* __LINUX_SMSC911X_H__ */ |
diff --git a/include/linux/snmp.h b/include/linux/snmp.h index aee3f1e1d1ce..0f953fe40413 100644 --- a/include/linux/snmp.h +++ b/include/linux/snmp.h | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | enum | 18 | enum |
| 19 | { | 19 | { |
| 20 | IPSTATS_MIB_NUM = 0, | 20 | IPSTATS_MIB_NUM = 0, |
| 21 | IPSTATS_MIB_INRECEIVES, /* InReceives */ | 21 | IPSTATS_MIB_INPKTS, /* InReceives */ |
| 22 | IPSTATS_MIB_INHDRERRORS, /* InHdrErrors */ | 22 | IPSTATS_MIB_INHDRERRORS, /* InHdrErrors */ |
| 23 | IPSTATS_MIB_INTOOBIGERRORS, /* InTooBigErrors */ | 23 | IPSTATS_MIB_INTOOBIGERRORS, /* InTooBigErrors */ |
| 24 | IPSTATS_MIB_INNOROUTES, /* InNoRoutes */ | 24 | IPSTATS_MIB_INNOROUTES, /* InNoRoutes */ |
| @@ -28,7 +28,7 @@ enum | |||
| 28 | IPSTATS_MIB_INDISCARDS, /* InDiscards */ | 28 | IPSTATS_MIB_INDISCARDS, /* InDiscards */ |
| 29 | IPSTATS_MIB_INDELIVERS, /* InDelivers */ | 29 | IPSTATS_MIB_INDELIVERS, /* InDelivers */ |
| 30 | IPSTATS_MIB_OUTFORWDATAGRAMS, /* OutForwDatagrams */ | 30 | IPSTATS_MIB_OUTFORWDATAGRAMS, /* OutForwDatagrams */ |
| 31 | IPSTATS_MIB_OUTREQUESTS, /* OutRequests */ | 31 | IPSTATS_MIB_OUTPKTS, /* OutRequests */ |
| 32 | IPSTATS_MIB_OUTDISCARDS, /* OutDiscards */ | 32 | IPSTATS_MIB_OUTDISCARDS, /* OutDiscards */ |
| 33 | IPSTATS_MIB_OUTNOROUTES, /* OutNoRoutes */ | 33 | IPSTATS_MIB_OUTNOROUTES, /* OutNoRoutes */ |
| 34 | IPSTATS_MIB_REASMTIMEOUT, /* ReasmTimeout */ | 34 | IPSTATS_MIB_REASMTIMEOUT, /* ReasmTimeout */ |
| @@ -42,6 +42,12 @@ enum | |||
| 42 | IPSTATS_MIB_OUTMCASTPKTS, /* OutMcastPkts */ | 42 | IPSTATS_MIB_OUTMCASTPKTS, /* OutMcastPkts */ |
| 43 | IPSTATS_MIB_INBCASTPKTS, /* InBcastPkts */ | 43 | IPSTATS_MIB_INBCASTPKTS, /* InBcastPkts */ |
| 44 | IPSTATS_MIB_OUTBCASTPKTS, /* OutBcastPkts */ | 44 | IPSTATS_MIB_OUTBCASTPKTS, /* OutBcastPkts */ |
| 45 | IPSTATS_MIB_INOCTETS, /* InOctets */ | ||
| 46 | IPSTATS_MIB_OUTOCTETS, /* OutOctets */ | ||
| 47 | IPSTATS_MIB_INMCASTOCTETS, /* InMcastOctets */ | ||
| 48 | IPSTATS_MIB_OUTMCASTOCTETS, /* OutMcastOctets */ | ||
| 49 | IPSTATS_MIB_INBCASTOCTETS, /* InBcastOctets */ | ||
| 50 | IPSTATS_MIB_OUTBCASTOCTETS, /* OutBcastOctets */ | ||
| 45 | __IPSTATS_MIB_MAX | 51 | __IPSTATS_MIB_MAX |
| 46 | }; | 52 | }; |
| 47 | 53 | ||
diff --git a/include/linux/socket.h b/include/linux/socket.h index 421afb4d29b0..3b461dffe244 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h | |||
| @@ -194,7 +194,8 @@ struct ucred { | |||
| 194 | #define AF_RXRPC 33 /* RxRPC sockets */ | 194 | #define AF_RXRPC 33 /* RxRPC sockets */ |
| 195 | #define AF_ISDN 34 /* mISDN sockets */ | 195 | #define AF_ISDN 34 /* mISDN sockets */ |
| 196 | #define AF_PHONET 35 /* Phonet sockets */ | 196 | #define AF_PHONET 35 /* Phonet sockets */ |
| 197 | #define AF_MAX 36 /* For now.. */ | 197 | #define AF_IEEE802154 36 /* IEEE802154 sockets */ |
| 198 | #define AF_MAX 37 /* For now.. */ | ||
| 198 | 199 | ||
| 199 | /* Protocol families, same as address families. */ | 200 | /* Protocol families, same as address families. */ |
| 200 | #define PF_UNSPEC AF_UNSPEC | 201 | #define PF_UNSPEC AF_UNSPEC |
| @@ -233,6 +234,7 @@ struct ucred { | |||
| 233 | #define PF_RXRPC AF_RXRPC | 234 | #define PF_RXRPC AF_RXRPC |
| 234 | #define PF_ISDN AF_ISDN | 235 | #define PF_ISDN AF_ISDN |
| 235 | #define PF_PHONET AF_PHONET | 236 | #define PF_PHONET AF_PHONET |
| 237 | #define PF_IEEE802154 AF_IEEE802154 | ||
| 236 | #define PF_MAX AF_MAX | 238 | #define PF_MAX AF_MAX |
| 237 | 239 | ||
| 238 | /* Maximum queue length specifiable by listen. */ | 240 | /* Maximum queue length specifiable by listen. */ |
| @@ -303,14 +305,15 @@ struct ucred { | |||
| 303 | #define SOL_BLUETOOTH 274 | 305 | #define SOL_BLUETOOTH 274 |
| 304 | #define SOL_PNPIPE 275 | 306 | #define SOL_PNPIPE 275 |
| 305 | #define SOL_RDS 276 | 307 | #define SOL_RDS 276 |
| 308 | #define SOL_IUCV 277 | ||
| 306 | 309 | ||
| 307 | /* IPX options */ | 310 | /* IPX options */ |
| 308 | #define IPX_TYPE 1 | 311 | #define IPX_TYPE 1 |
| 309 | 312 | ||
| 310 | #ifdef __KERNEL__ | 313 | #ifdef __KERNEL__ |
| 311 | extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len); | 314 | extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len); |
| 312 | extern int memcpy_fromiovecend(unsigned char *kdata, struct iovec *iov, | 315 | extern int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov, |
| 313 | int offset, int len); | 316 | int offset, int len); |
| 314 | extern int csum_partial_copy_fromiovecend(unsigned char *kdata, | 317 | extern int csum_partial_copy_fromiovecend(unsigned char *kdata, |
| 315 | struct iovec *iov, | 318 | struct iovec *iov, |
| 316 | int offset, | 319 | int offset, |
| @@ -318,6 +321,8 @@ extern int csum_partial_copy_fromiovecend(unsigned char *kdata, | |||
| 318 | 321 | ||
| 319 | extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr *address, int mode); | 322 | extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr *address, int mode); |
| 320 | extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len); | 323 | extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len); |
| 324 | extern int memcpy_toiovecend(const struct iovec *v, unsigned char *kdata, | ||
| 325 | int offset, int len); | ||
| 321 | extern int move_addr_to_user(struct sockaddr *kaddr, int klen, void __user *uaddr, int __user *ulen); | 326 | extern int move_addr_to_user(struct sockaddr *kaddr, int klen, void __user *uaddr, int __user *ulen); |
| 322 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr); | 327 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr); |
| 323 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); | 328 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); |
diff --git a/include/linux/spi/libertas_spi.h b/include/linux/spi/libertas_spi.h index 79506f5f9e67..1b5d5384fcd3 100644 --- a/include/linux/spi/libertas_spi.h +++ b/include/linux/spi/libertas_spi.h | |||
| @@ -22,9 +22,6 @@ struct libertas_spi_platform_data { | |||
| 22 | * speed, you may want to use 0 here. */ | 22 | * speed, you may want to use 0 here. */ |
| 23 | u16 use_dummy_writes; | 23 | u16 use_dummy_writes; |
| 24 | 24 | ||
| 25 | /* GPIO number to use as chip select */ | ||
| 26 | u16 gpio_cs; | ||
| 27 | |||
| 28 | /* Board specific setup/teardown */ | 25 | /* Board specific setup/teardown */ |
| 29 | int (*setup)(struct spi_device *spi); | 26 | int (*setup)(struct spi_device *spi); |
| 30 | int (*teardown)(struct spi_device *spi); | 27 | int (*teardown)(struct spi_device *spi); |
diff --git a/include/linux/spi/wl12xx.h b/include/linux/spi/wl12xx.h new file mode 100644 index 000000000000..11430cab2aad --- /dev/null +++ b/include/linux/spi/wl12xx.h | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | /* | ||
| 2 | * This file is part of wl12xx | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 Nokia Corporation | ||
| 5 | * | ||
| 6 | * Contact: Kalle Valo <kalle.valo@nokia.com> | ||
| 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 | * version 2 as published by the Free Software Foundation. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, but | ||
| 13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 15 | * General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | ||
| 20 | * 02110-1301 USA | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | |||
| 24 | #ifndef _LINUX_SPI_WL12XX_H | ||
| 25 | #define _LINUX_SPI_WL12XX_H | ||
| 26 | |||
| 27 | struct wl12xx_platform_data { | ||
| 28 | void (*set_power)(bool enable); | ||
| 29 | }; | ||
| 30 | |||
| 31 | #endif | ||
diff --git a/include/linux/suspend.h b/include/linux/suspend.h index 795032edfc46..cd15df6c63cd 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h | |||
| @@ -245,11 +245,6 @@ extern unsigned long get_safe_page(gfp_t gfp_mask); | |||
| 245 | 245 | ||
| 246 | extern void hibernation_set_ops(struct platform_hibernation_ops *ops); | 246 | extern void hibernation_set_ops(struct platform_hibernation_ops *ops); |
| 247 | extern int hibernate(void); | 247 | extern int hibernate(void); |
| 248 | extern int hibernate_nvs_register(unsigned long start, unsigned long size); | ||
| 249 | extern int hibernate_nvs_alloc(void); | ||
| 250 | extern void hibernate_nvs_free(void); | ||
| 251 | extern void hibernate_nvs_save(void); | ||
| 252 | extern void hibernate_nvs_restore(void); | ||
| 253 | extern bool system_entering_hibernation(void); | 248 | extern bool system_entering_hibernation(void); |
| 254 | #else /* CONFIG_HIBERNATION */ | 249 | #else /* CONFIG_HIBERNATION */ |
| 255 | static inline int swsusp_page_is_forbidden(struct page *p) { return 0; } | 250 | static inline int swsusp_page_is_forbidden(struct page *p) { return 0; } |
| @@ -258,6 +253,16 @@ static inline void swsusp_unset_page_free(struct page *p) {} | |||
| 258 | 253 | ||
| 259 | static inline void hibernation_set_ops(struct platform_hibernation_ops *ops) {} | 254 | static inline void hibernation_set_ops(struct platform_hibernation_ops *ops) {} |
| 260 | static inline int hibernate(void) { return -ENOSYS; } | 255 | static inline int hibernate(void) { return -ENOSYS; } |
| 256 | static inline bool system_entering_hibernation(void) { return false; } | ||
| 257 | #endif /* CONFIG_HIBERNATION */ | ||
| 258 | |||
| 259 | #ifdef CONFIG_HIBERNATION_NVS | ||
| 260 | extern int hibernate_nvs_register(unsigned long start, unsigned long size); | ||
| 261 | extern int hibernate_nvs_alloc(void); | ||
| 262 | extern void hibernate_nvs_free(void); | ||
| 263 | extern void hibernate_nvs_save(void); | ||
| 264 | extern void hibernate_nvs_restore(void); | ||
| 265 | #else /* CONFIG_HIBERNATION_NVS */ | ||
| 261 | static inline int hibernate_nvs_register(unsigned long a, unsigned long b) | 266 | static inline int hibernate_nvs_register(unsigned long a, unsigned long b) |
| 262 | { | 267 | { |
| 263 | return 0; | 268 | return 0; |
| @@ -266,8 +271,7 @@ static inline int hibernate_nvs_alloc(void) { return 0; } | |||
| 266 | static inline void hibernate_nvs_free(void) {} | 271 | static inline void hibernate_nvs_free(void) {} |
| 267 | static inline void hibernate_nvs_save(void) {} | 272 | static inline void hibernate_nvs_save(void) {} |
| 268 | static inline void hibernate_nvs_restore(void) {} | 273 | static inline void hibernate_nvs_restore(void) {} |
| 269 | static inline bool system_entering_hibernation(void) { return false; } | 274 | #endif /* CONFIG_HIBERNATION_NVS */ |
| 270 | #endif /* CONFIG_HIBERNATION */ | ||
| 271 | 275 | ||
| 272 | #ifdef CONFIG_PM_SLEEP | 276 | #ifdef CONFIG_PM_SLEEP |
| 273 | void save_processor_state(void); | 277 | void save_processor_state(void); |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index c6c84ad8bd71..418d90f5effe 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -758,6 +758,6 @@ int kernel_execve(const char *filename, char *const argv[], char *const envp[]); | |||
| 758 | 758 | ||
| 759 | 759 | ||
| 760 | asmlinkage long sys_perf_counter_open( | 760 | asmlinkage long sys_perf_counter_open( |
| 761 | const struct perf_counter_attr __user *attr_uptr, | 761 | struct perf_counter_attr __user *attr_uptr, |
| 762 | pid_t pid, int cpu, int group_fd, unsigned long flags); | 762 | pid_t pid, int cpu, int group_fd, unsigned long flags); |
| 763 | #endif | 763 | #endif |
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 9d5078bd23a3..8afac76cd748 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
| @@ -377,7 +377,7 @@ struct tcp_sock { | |||
| 377 | unsigned int keepalive_time; /* time before keep alive takes place */ | 377 | unsigned int keepalive_time; /* time before keep alive takes place */ |
| 378 | unsigned int keepalive_intvl; /* time interval between keep alive probes */ | 378 | unsigned int keepalive_intvl; /* time interval between keep alive probes */ |
| 379 | 379 | ||
| 380 | unsigned long last_synq_overflow; | 380 | int linger2; |
| 381 | 381 | ||
| 382 | /* Receiver side RTT estimation */ | 382 | /* Receiver side RTT estimation */ |
| 383 | struct { | 383 | struct { |
| @@ -406,8 +406,6 @@ struct tcp_sock { | |||
| 406 | /* TCP MD5 Signagure Option information */ | 406 | /* TCP MD5 Signagure Option information */ |
| 407 | struct tcp_md5sig_info *md5sig_info; | 407 | struct tcp_md5sig_info *md5sig_info; |
| 408 | #endif | 408 | #endif |
| 409 | |||
| 410 | int linger2; | ||
| 411 | }; | 409 | }; |
| 412 | 410 | ||
| 413 | static inline struct tcp_sock *tcp_sk(const struct sock *sk) | 411 | static inline struct tcp_sock *tcp_sk(const struct sock *sk) |
diff --git a/include/linux/tick.h b/include/linux/tick.h index 469b82d88b3b..0482229c07db 100644 --- a/include/linux/tick.h +++ b/include/linux/tick.h | |||
| @@ -97,10 +97,12 @@ extern void tick_clock_notify(void); | |||
| 97 | extern int tick_check_oneshot_change(int allow_nohz); | 97 | extern int tick_check_oneshot_change(int allow_nohz); |
| 98 | extern struct tick_sched *tick_get_tick_sched(int cpu); | 98 | extern struct tick_sched *tick_get_tick_sched(int cpu); |
| 99 | extern void tick_check_idle(int cpu); | 99 | extern void tick_check_idle(int cpu); |
| 100 | extern int tick_oneshot_mode_active(void); | ||
| 100 | # else | 101 | # else |
| 101 | static inline void tick_clock_notify(void) { } | 102 | static inline void tick_clock_notify(void) { } |
| 102 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } | 103 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } |
| 103 | static inline void tick_check_idle(int cpu) { } | 104 | static inline void tick_check_idle(int cpu) { } |
| 105 | static inline int tick_oneshot_mode_active(void) { return 0; } | ||
| 104 | # endif | 106 | # endif |
| 105 | 107 | ||
| 106 | #else /* CONFIG_GENERIC_CLOCKEVENTS */ | 108 | #else /* CONFIG_GENERIC_CLOCKEVENTS */ |
| @@ -109,6 +111,7 @@ static inline void tick_cancel_sched_timer(int cpu) { } | |||
| 109 | static inline void tick_clock_notify(void) { } | 111 | static inline void tick_clock_notify(void) { } |
| 110 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } | 112 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } |
| 111 | static inline void tick_check_idle(int cpu) { } | 113 | static inline void tick_check_idle(int cpu) { } |
| 114 | static inline int tick_oneshot_mode_active(void) { return 0; } | ||
| 112 | #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ | 115 | #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ |
| 113 | 116 | ||
| 114 | # ifdef CONFIG_NO_HZ | 117 | # ifdef CONFIG_NO_HZ |
diff --git a/include/linux/timer.h b/include/linux/timer.h index 6cdb6f3331f1..ccf882eed8f8 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h | |||
| @@ -163,7 +163,10 @@ extern void add_timer_on(struct timer_list *timer, int cpu); | |||
| 163 | extern int del_timer(struct timer_list * timer); | 163 | extern int del_timer(struct timer_list * timer); |
| 164 | extern int mod_timer(struct timer_list *timer, unsigned long expires); | 164 | extern int mod_timer(struct timer_list *timer, unsigned long expires); |
| 165 | extern int mod_timer_pending(struct timer_list *timer, unsigned long expires); | 165 | extern int mod_timer_pending(struct timer_list *timer, unsigned long expires); |
| 166 | extern int mod_timer_pinned(struct timer_list *timer, unsigned long expires); | ||
| 166 | 167 | ||
| 168 | #define TIMER_NOT_PINNED 0 | ||
| 169 | #define TIMER_PINNED 1 | ||
| 167 | /* | 170 | /* |
| 168 | * The jiffies value which is added to now, when there is no timer | 171 | * The jiffies value which is added to now, when there is no timer |
| 169 | * in the timer wheel: | 172 | * in the timer wheel: |
diff --git a/include/linux/timex.h b/include/linux/timex.h index aa3475fcff64..9910e3bd5b31 100644 --- a/include/linux/timex.h +++ b/include/linux/timex.h | |||
| @@ -170,17 +170,37 @@ struct timex { | |||
| 170 | #include <asm/timex.h> | 170 | #include <asm/timex.h> |
| 171 | 171 | ||
| 172 | /* | 172 | /* |
| 173 | * SHIFT_KG and SHIFT_KF establish the damping of the PLL and are chosen | 173 | * SHIFT_PLL is used as a dampening factor to define how much we |
| 174 | * for a slightly underdamped convergence characteristic. SHIFT_KH | 174 | * adjust the frequency correction for a given offset in PLL mode. |
| 175 | * establishes the damping of the FLL and is chosen by wisdom and black | 175 | * It also used in dampening the offset correction, to define how |
| 176 | * art. | 176 | * much of the current value in time_offset we correct for each |
| 177 | * second. Changing this value changes the stiffness of the ntp | ||
| 178 | * adjustment code. A lower value makes it more flexible, reducing | ||
| 179 | * NTP convergence time. A higher value makes it stiffer, increasing | ||
| 180 | * convergence time, but making the clock more stable. | ||
| 177 | * | 181 | * |
| 178 | * MAXTC establishes the maximum time constant of the PLL. With the | 182 | * In David Mills' nanokernel reference implementation SHIFT_PLL is 4. |
| 179 | * SHIFT_KG and SHIFT_KF values given and a time constant range from | 183 | * However this seems to increase convergence time much too long. |
| 180 | * zero to MAXTC, the PLL will converge in 15 minutes to 16 hours, | 184 | * |
| 181 | * respectively. | 185 | * https://lists.ntp.org/pipermail/hackers/2008-January/003487.html |
| 186 | * | ||
| 187 | * In the above mailing list discussion, it seems the value of 4 | ||
| 188 | * was appropriate for other Unix systems with HZ=100, and that | ||
| 189 | * SHIFT_PLL should be decreased as HZ increases. However, Linux's | ||
| 190 | * clock steering implementation is HZ independent. | ||
| 191 | * | ||
| 192 | * Through experimentation, a SHIFT_PLL value of 2 was found to allow | ||
| 193 | * for fast convergence (very similar to the NTPv3 code used prior to | ||
| 194 | * v2.6.19), with good clock stability. | ||
| 195 | * | ||
| 196 | * | ||
| 197 | * SHIFT_FLL is used as a dampening factor to define how much we | ||
| 198 | * adjust the frequency correction for a given offset in FLL mode. | ||
| 199 | * In David Mills' nanokernel reference implementation SHIFT_FLL is 2. | ||
| 200 | * | ||
| 201 | * MAXTC establishes the maximum time constant of the PLL. | ||
| 182 | */ | 202 | */ |
| 183 | #define SHIFT_PLL 4 /* PLL frequency factor (shift) */ | 203 | #define SHIFT_PLL 2 /* PLL frequency factor (shift) */ |
| 184 | #define SHIFT_FLL 2 /* FLL frequency factor (shift) */ | 204 | #define SHIFT_FLL 2 /* FLL frequency factor (shift) */ |
| 185 | #define MAXTC 10 /* maximum time constant (shift) */ | 205 | #define MAXTC 10 /* maximum time constant (shift) */ |
| 186 | 206 | ||
| @@ -192,10 +212,10 @@ struct timex { | |||
| 192 | #define SHIFT_USEC 16 /* frequency offset scale (shift) */ | 212 | #define SHIFT_USEC 16 /* frequency offset scale (shift) */ |
| 193 | #define PPM_SCALE ((s64)NSEC_PER_USEC << (NTP_SCALE_SHIFT - SHIFT_USEC)) | 213 | #define PPM_SCALE ((s64)NSEC_PER_USEC << (NTP_SCALE_SHIFT - SHIFT_USEC)) |
| 194 | #define PPM_SCALE_INV_SHIFT 19 | 214 | #define PPM_SCALE_INV_SHIFT 19 |
| 195 | #define PPM_SCALE_INV ((1ll << (PPM_SCALE_INV_SHIFT + NTP_SCALE_SHIFT)) / \ | 215 | #define PPM_SCALE_INV ((1LL << (PPM_SCALE_INV_SHIFT + NTP_SCALE_SHIFT)) / \ |
| 196 | PPM_SCALE + 1) | 216 | PPM_SCALE + 1) |
| 197 | 217 | ||
| 198 | #define MAXPHASE 500000000l /* max phase error (ns) */ | 218 | #define MAXPHASE 500000000L /* max phase error (ns) */ |
| 199 | #define MAXFREQ 500000 /* max frequency error (ns/s) */ | 219 | #define MAXFREQ 500000 /* max frequency error (ns/s) */ |
| 200 | #define MAXFREQ_SCALED ((s64)MAXFREQ << NTP_SCALE_SHIFT) | 220 | #define MAXFREQ_SCALED ((s64)MAXFREQ << NTP_SCALE_SHIFT) |
| 201 | #define MINSEC 256 /* min interval between updates (s) */ | 221 | #define MINSEC 256 /* min interval between updates (s) */ |
diff --git a/include/linux/ultrasound.h b/include/linux/ultrasound.h index 6b7703e75cec..71339dc531c5 100644 --- a/include/linux/ultrasound.h +++ b/include/linux/ultrasound.h | |||
| @@ -34,7 +34,7 @@ | |||
| 34 | * _GUS_VOICEOFF - Stops voice (no parameters) | 34 | * _GUS_VOICEOFF - Stops voice (no parameters) |
| 35 | * _GUS_VOICEFADE - Stops the voice smoothly. | 35 | * _GUS_VOICEFADE - Stops the voice smoothly. |
| 36 | * _GUS_VOICEMODE - Alters the voice mode, don't start or stop voice (P1=voice mode) | 36 | * _GUS_VOICEMODE - Alters the voice mode, don't start or stop voice (P1=voice mode) |
| 37 | * _GUS_VOICEBALA - Sets voice balence (P1, 0=left, 7=middle and 15=right, default 7) | 37 | * _GUS_VOICEBALA - Sets voice balance (P1, 0=left, 7=middle and 15=right, default 7) |
| 38 | * _GUS_VOICEFREQ - Sets voice (sample) playback frequency (P1=Hz) | 38 | * _GUS_VOICEFREQ - Sets voice (sample) playback frequency (P1=Hz) |
| 39 | * _GUS_VOICEVOL - Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off) | 39 | * _GUS_VOICEVOL - Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off) |
| 40 | * _GUS_VOICEVOL2 - Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off) | 40 | * _GUS_VOICEVOL2 - Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off) |
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index 36fabb95c7d3..5d44059f6d63 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h | |||
| @@ -183,6 +183,7 @@ extern void usbnet_tx_timeout (struct net_device *net); | |||
| 183 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); | 183 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); |
| 184 | 184 | ||
| 185 | extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); | 185 | extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); |
| 186 | extern int usbnet_get_ethernet_addr(struct usbnet *, int); | ||
| 186 | extern void usbnet_defer_kevent (struct usbnet *, int); | 187 | extern void usbnet_defer_kevent (struct usbnet *, int); |
| 187 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); | 188 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); |
| 188 | extern void usbnet_unlink_rx_urbs(struct usbnet *); | 189 | extern void usbnet_unlink_rx_urbs(struct usbnet *); |
diff --git a/include/linux/virtio.h b/include/linux/virtio.h index 06005fa9e982..4fca4f5440ba 100644 --- a/include/linux/virtio.h +++ b/include/linux/virtio.h | |||
| @@ -10,14 +10,17 @@ | |||
| 10 | 10 | ||
| 11 | /** | 11 | /** |
| 12 | * virtqueue - a queue to register buffers for sending or receiving. | 12 | * virtqueue - a queue to register buffers for sending or receiving. |
| 13 | * @list: the chain of virtqueues for this device | ||
| 13 | * @callback: the function to call when buffers are consumed (can be NULL). | 14 | * @callback: the function to call when buffers are consumed (can be NULL). |
| 15 | * @name: the name of this virtqueue (mainly for debugging) | ||
| 14 | * @vdev: the virtio device this queue was created for. | 16 | * @vdev: the virtio device this queue was created for. |
| 15 | * @vq_ops: the operations for this virtqueue (see below). | 17 | * @vq_ops: the operations for this virtqueue (see below). |
| 16 | * @priv: a pointer for the virtqueue implementation to use. | 18 | * @priv: a pointer for the virtqueue implementation to use. |
| 17 | */ | 19 | */ |
| 18 | struct virtqueue | 20 | struct virtqueue { |
| 19 | { | 21 | struct list_head list; |
| 20 | void (*callback)(struct virtqueue *vq); | 22 | void (*callback)(struct virtqueue *vq); |
| 23 | const char *name; | ||
| 21 | struct virtio_device *vdev; | 24 | struct virtio_device *vdev; |
| 22 | struct virtqueue_ops *vq_ops; | 25 | struct virtqueue_ops *vq_ops; |
| 23 | void *priv; | 26 | void *priv; |
| @@ -76,15 +79,16 @@ struct virtqueue_ops { | |||
| 76 | * @dev: underlying device. | 79 | * @dev: underlying device. |
| 77 | * @id: the device type identification (used to match it with a driver). | 80 | * @id: the device type identification (used to match it with a driver). |
| 78 | * @config: the configuration ops for this device. | 81 | * @config: the configuration ops for this device. |
| 82 | * @vqs: the list of virtqueues for this device. | ||
| 79 | * @features: the features supported by both driver and device. | 83 | * @features: the features supported by both driver and device. |
| 80 | * @priv: private pointer for the driver's use. | 84 | * @priv: private pointer for the driver's use. |
| 81 | */ | 85 | */ |
| 82 | struct virtio_device | 86 | struct virtio_device { |
| 83 | { | ||
| 84 | int index; | 87 | int index; |
| 85 | struct device dev; | 88 | struct device dev; |
| 86 | struct virtio_device_id id; | 89 | struct virtio_device_id id; |
| 87 | struct virtio_config_ops *config; | 90 | struct virtio_config_ops *config; |
| 91 | struct list_head vqs; | ||
| 88 | /* Note that this is a Linux set_bit-style bitmap. */ | 92 | /* Note that this is a Linux set_bit-style bitmap. */ |
| 89 | unsigned long features[1]; | 93 | unsigned long features[1]; |
| 90 | void *priv; | 94 | void *priv; |
| @@ -99,8 +103,7 @@ void unregister_virtio_device(struct virtio_device *dev); | |||
| 99 | * @id_table: the ids serviced by this driver. | 103 | * @id_table: the ids serviced by this driver. |
| 100 | * @feature_table: an array of feature numbers supported by this device. | 104 | * @feature_table: an array of feature numbers supported by this device. |
| 101 | * @feature_table_size: number of entries in the feature table array. | 105 | * @feature_table_size: number of entries in the feature table array. |
| 102 | * @probe: the function to call when a device is found. Returns a token for | 106 | * @probe: the function to call when a device is found. Returns 0 or -errno. |
| 103 | * remove, or PTR_ERR(). | ||
| 104 | * @remove: the function when a device is removed. | 107 | * @remove: the function when a device is removed. |
| 105 | * @config_changed: optional function to call when the device configuration | 108 | * @config_changed: optional function to call when the device configuration |
| 106 | * changes; may be called in interrupt context. | 109 | * changes; may be called in interrupt context. |
diff --git a/include/linux/virtio_config.h b/include/linux/virtio_config.h index bf8ec283b232..99f514575f6a 100644 --- a/include/linux/virtio_config.h +++ b/include/linux/virtio_config.h | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #define VIRTIO_F_NOTIFY_ON_EMPTY 24 | 29 | #define VIRTIO_F_NOTIFY_ON_EMPTY 24 |
| 30 | 30 | ||
| 31 | #ifdef __KERNEL__ | 31 | #ifdef __KERNEL__ |
| 32 | #include <linux/err.h> | ||
| 32 | #include <linux/virtio.h> | 33 | #include <linux/virtio.h> |
| 33 | 34 | ||
| 34 | /** | 35 | /** |
| @@ -49,15 +50,26 @@ | |||
| 49 | * @set_status: write the status byte | 50 | * @set_status: write the status byte |
| 50 | * vdev: the virtio_device | 51 | * vdev: the virtio_device |
| 51 | * status: the new status byte | 52 | * status: the new status byte |
| 53 | * @request_vqs: request the specified number of virtqueues | ||
| 54 | * vdev: the virtio_device | ||
| 55 | * max_vqs: the max number of virtqueues we want | ||
| 56 | * If supplied, must call before any virtqueues are instantiated. | ||
| 57 | * To modify the max number of virtqueues after request_vqs has been | ||
| 58 | * called, call free_vqs and then request_vqs with a new value. | ||
| 59 | * @free_vqs: cleanup resources allocated by request_vqs | ||
| 60 | * vdev: the virtio_device | ||
| 61 | * If supplied, must call after all virtqueues have been deleted. | ||
| 52 | * @reset: reset the device | 62 | * @reset: reset the device |
| 53 | * vdev: the virtio device | 63 | * vdev: the virtio device |
| 54 | * After this, status and feature negotiation must be done again | 64 | * After this, status and feature negotiation must be done again |
| 55 | * @find_vq: find a virtqueue and instantiate it. | 65 | * @find_vqs: find virtqueues and instantiate them. |
| 56 | * vdev: the virtio_device | 66 | * vdev: the virtio_device |
| 57 | * index: the 0-based virtqueue number in case there's more than one. | 67 | * nvqs: the number of virtqueues to find |
| 58 | * callback: the virqtueue callback | 68 | * vqs: on success, includes new virtqueues |
| 59 | * Returns the new virtqueue or ERR_PTR() (eg. -ENOENT). | 69 | * callbacks: array of callbacks, for each virtqueue |
| 60 | * @del_vq: free a virtqueue found by find_vq(). | 70 | * names: array of virtqueue names (mainly for debugging) |
| 71 | * Returns 0 on success or error status | ||
| 72 | * @del_vqs: free virtqueues found by find_vqs(). | ||
| 61 | * @get_features: get the array of feature bits for this device. | 73 | * @get_features: get the array of feature bits for this device. |
| 62 | * vdev: the virtio_device | 74 | * vdev: the virtio_device |
| 63 | * Returns the first 32 feature bits (all we currently need). | 75 | * Returns the first 32 feature bits (all we currently need). |
| @@ -66,6 +78,7 @@ | |||
| 66 | * This gives the final feature bits for the device: it can change | 78 | * This gives the final feature bits for the device: it can change |
| 67 | * the dev->feature bits if it wants. | 79 | * the dev->feature bits if it wants. |
| 68 | */ | 80 | */ |
| 81 | typedef void vq_callback_t(struct virtqueue *); | ||
| 69 | struct virtio_config_ops | 82 | struct virtio_config_ops |
| 70 | { | 83 | { |
| 71 | void (*get)(struct virtio_device *vdev, unsigned offset, | 84 | void (*get)(struct virtio_device *vdev, unsigned offset, |
| @@ -75,10 +88,11 @@ struct virtio_config_ops | |||
| 75 | u8 (*get_status)(struct virtio_device *vdev); | 88 | u8 (*get_status)(struct virtio_device *vdev); |
| 76 | void (*set_status)(struct virtio_device *vdev, u8 status); | 89 | void (*set_status)(struct virtio_device *vdev, u8 status); |
| 77 | void (*reset)(struct virtio_device *vdev); | 90 | void (*reset)(struct virtio_device *vdev); |
| 78 | struct virtqueue *(*find_vq)(struct virtio_device *vdev, | 91 | int (*find_vqs)(struct virtio_device *, unsigned nvqs, |
| 79 | unsigned index, | 92 | struct virtqueue *vqs[], |
| 80 | void (*callback)(struct virtqueue *)); | 93 | vq_callback_t *callbacks[], |
| 81 | void (*del_vq)(struct virtqueue *vq); | 94 | const char *names[]); |
| 95 | void (*del_vqs)(struct virtio_device *); | ||
| 82 | u32 (*get_features)(struct virtio_device *vdev); | 96 | u32 (*get_features)(struct virtio_device *vdev); |
| 83 | void (*finalize_features)(struct virtio_device *vdev); | 97 | void (*finalize_features)(struct virtio_device *vdev); |
| 84 | }; | 98 | }; |
| @@ -99,7 +113,9 @@ static inline bool virtio_has_feature(const struct virtio_device *vdev, | |||
| 99 | if (__builtin_constant_p(fbit)) | 113 | if (__builtin_constant_p(fbit)) |
| 100 | BUILD_BUG_ON(fbit >= 32); | 114 | BUILD_BUG_ON(fbit >= 32); |
| 101 | 115 | ||
| 102 | virtio_check_driver_offered_feature(vdev, fbit); | 116 | if (fbit < VIRTIO_TRANSPORT_F_START) |
| 117 | virtio_check_driver_offered_feature(vdev, fbit); | ||
| 118 | |||
| 103 | return test_bit(fbit, vdev->features); | 119 | return test_bit(fbit, vdev->features); |
| 104 | } | 120 | } |
| 105 | 121 | ||
| @@ -126,5 +142,18 @@ static inline int virtio_config_buf(struct virtio_device *vdev, | |||
| 126 | vdev->config->get(vdev, offset, buf, len); | 142 | vdev->config->get(vdev, offset, buf, len); |
| 127 | return 0; | 143 | return 0; |
| 128 | } | 144 | } |
| 145 | |||
| 146 | static inline | ||
| 147 | struct virtqueue *virtio_find_single_vq(struct virtio_device *vdev, | ||
| 148 | vq_callback_t *c, const char *n) | ||
| 149 | { | ||
| 150 | vq_callback_t *callbacks[] = { c }; | ||
| 151 | const char *names[] = { n }; | ||
| 152 | struct virtqueue *vq; | ||
| 153 | int err = vdev->config->find_vqs(vdev, 1, &vq, callbacks, names); | ||
| 154 | if (err < 0) | ||
| 155 | return ERR_PTR(err); | ||
| 156 | return vq; | ||
| 157 | } | ||
| 129 | #endif /* __KERNEL__ */ | 158 | #endif /* __KERNEL__ */ |
| 130 | #endif /* _LINUX_VIRTIO_CONFIG_H */ | 159 | #endif /* _LINUX_VIRTIO_CONFIG_H */ |
diff --git a/include/linux/virtio_pci.h b/include/linux/virtio_pci.h index cd0fd5d181a6..9a3d7c48c622 100644 --- a/include/linux/virtio_pci.h +++ b/include/linux/virtio_pci.h | |||
| @@ -47,9 +47,17 @@ | |||
| 47 | /* The bit of the ISR which indicates a device configuration change. */ | 47 | /* The bit of the ISR which indicates a device configuration change. */ |
| 48 | #define VIRTIO_PCI_ISR_CONFIG 0x2 | 48 | #define VIRTIO_PCI_ISR_CONFIG 0x2 |
| 49 | 49 | ||
| 50 | /* MSI-X registers: only enabled if MSI-X is enabled. */ | ||
| 51 | /* A 16-bit vector for configuration changes. */ | ||
| 52 | #define VIRTIO_MSI_CONFIG_VECTOR 20 | ||
| 53 | /* A 16-bit vector for selected queue notifications. */ | ||
| 54 | #define VIRTIO_MSI_QUEUE_VECTOR 22 | ||
| 55 | /* Vector value used to disable MSI for queue */ | ||
| 56 | #define VIRTIO_MSI_NO_VECTOR 0xffff | ||
| 57 | |||
| 50 | /* The remaining space is defined by each driver as the per-driver | 58 | /* The remaining space is defined by each driver as the per-driver |
| 51 | * configuration space */ | 59 | * configuration space */ |
| 52 | #define VIRTIO_PCI_CONFIG 20 | 60 | #define VIRTIO_PCI_CONFIG(dev) ((dev)->msix_enabled ? 24 : 20) |
| 53 | 61 | ||
| 54 | /* Virtio ABI version, this must match exactly */ | 62 | /* Virtio ABI version, this must match exactly */ |
| 55 | #define VIRTIO_PCI_ABI_VERSION 0 | 63 | #define VIRTIO_PCI_ABI_VERSION 0 |
diff --git a/include/linux/virtio_ring.h b/include/linux/virtio_ring.h index 71e03722fb59..693e0ec5afa6 100644 --- a/include/linux/virtio_ring.h +++ b/include/linux/virtio_ring.h | |||
| @@ -14,6 +14,8 @@ | |||
| 14 | #define VRING_DESC_F_NEXT 1 | 14 | #define VRING_DESC_F_NEXT 1 |
| 15 | /* This marks a buffer as write-only (otherwise read-only). */ | 15 | /* This marks a buffer as write-only (otherwise read-only). */ |
| 16 | #define VRING_DESC_F_WRITE 2 | 16 | #define VRING_DESC_F_WRITE 2 |
| 17 | /* This means the buffer contains a list of buffer descriptors. */ | ||
| 18 | #define VRING_DESC_F_INDIRECT 4 | ||
| 17 | 19 | ||
| 18 | /* The Host uses this in used->flags to advise the Guest: don't kick me when | 20 | /* The Host uses this in used->flags to advise the Guest: don't kick me when |
| 19 | * you add a buffer. It's unreliable, so it's simply an optimization. Guest | 21 | * you add a buffer. It's unreliable, so it's simply an optimization. Guest |
| @@ -24,6 +26,9 @@ | |||
| 24 | * optimization. */ | 26 | * optimization. */ |
| 25 | #define VRING_AVAIL_F_NO_INTERRUPT 1 | 27 | #define VRING_AVAIL_F_NO_INTERRUPT 1 |
| 26 | 28 | ||
| 29 | /* We support indirect buffer descriptors */ | ||
| 30 | #define VIRTIO_RING_F_INDIRECT_DESC 28 | ||
| 31 | |||
| 27 | /* Virtio ring descriptors: 16 bytes. These can chain together via "next". */ | 32 | /* Virtio ring descriptors: 16 bytes. These can chain together via "next". */ |
| 28 | struct vring_desc | 33 | struct vring_desc |
| 29 | { | 34 | { |
| @@ -119,7 +124,8 @@ struct virtqueue *vring_new_virtqueue(unsigned int num, | |||
| 119 | struct virtio_device *vdev, | 124 | struct virtio_device *vdev, |
| 120 | void *pages, | 125 | void *pages, |
| 121 | void (*notify)(struct virtqueue *vq), | 126 | void (*notify)(struct virtqueue *vq), |
| 122 | void (*callback)(struct virtqueue *vq)); | 127 | void (*callback)(struct virtqueue *vq), |
| 128 | const char *name); | ||
| 123 | void vring_del_virtqueue(struct virtqueue *vq); | 129 | void vring_del_virtqueue(struct virtqueue *vq); |
| 124 | /* Filter out transport-specific feature bits. */ | 130 | /* Filter out transport-specific feature bits. */ |
| 125 | void vring_transport_features(struct virtio_device *vdev); | 131 | void vring_transport_features(struct virtio_device *vdev); |
diff --git a/include/linux/wimax.h b/include/linux/wimax.h index c89de7f4e5b9..4fdcc5635518 100644 --- a/include/linux/wimax.h +++ b/include/linux/wimax.h | |||
| @@ -59,7 +59,7 @@ enum { | |||
| 59 | * M - Major: change if removing or modifying an existing call. | 59 | * M - Major: change if removing or modifying an existing call. |
| 60 | * m - minor: change when adding a new call | 60 | * m - minor: change when adding a new call |
| 61 | */ | 61 | */ |
| 62 | WIMAX_GNL_VERSION = 00, | 62 | WIMAX_GNL_VERSION = 01, |
| 63 | /* Generic NetLink attributes */ | 63 | /* Generic NetLink attributes */ |
| 64 | WIMAX_GNL_ATTR_INVALID = 0x00, | 64 | WIMAX_GNL_ATTR_INVALID = 0x00, |
| 65 | WIMAX_GNL_ATTR_MAX = 10, | 65 | WIMAX_GNL_ATTR_MAX = 10, |
| @@ -78,6 +78,7 @@ enum { | |||
| 78 | WIMAX_GNL_OP_RFKILL, /* Run wimax_rfkill() */ | 78 | WIMAX_GNL_OP_RFKILL, /* Run wimax_rfkill() */ |
| 79 | WIMAX_GNL_OP_RESET, /* Run wimax_rfkill() */ | 79 | WIMAX_GNL_OP_RESET, /* Run wimax_rfkill() */ |
| 80 | WIMAX_GNL_RE_STATE_CHANGE, /* Report: status change */ | 80 | WIMAX_GNL_RE_STATE_CHANGE, /* Report: status change */ |
| 81 | WIMAX_GNL_OP_STATE_GET, /* Request for current state */ | ||
| 81 | }; | 82 | }; |
| 82 | 83 | ||
| 83 | 84 | ||
| @@ -113,6 +114,10 @@ enum { | |||
| 113 | WIMAX_GNL_RESET_IFIDX = 1, | 114 | WIMAX_GNL_RESET_IFIDX = 1, |
| 114 | }; | 115 | }; |
| 115 | 116 | ||
| 117 | /* Atributes for wimax_state_get() */ | ||
| 118 | enum { | ||
| 119 | WIMAX_GNL_STGET_IFIDX = 1, | ||
| 120 | }; | ||
| 116 | 121 | ||
| 117 | /* | 122 | /* |
| 118 | * Attributes for the Report State Change | 123 | * Attributes for the Report State Change |
diff --git a/include/linux/wimax/i2400m.h b/include/linux/wimax/i2400m.h index d5148a7889a6..433693ef2bb0 100644 --- a/include/linux/wimax/i2400m.h +++ b/include/linux/wimax/i2400m.h | |||
| @@ -266,7 +266,7 @@ enum i2400m_ro_type { | |||
| 266 | 266 | ||
| 267 | /* Misc constants */ | 267 | /* Misc constants */ |
| 268 | enum { | 268 | enum { |
| 269 | I2400M_PL_PAD = 16, /* Payload data size alignment */ | 269 | I2400M_PL_ALIGN = 16, /* Payload data size alignment */ |
| 270 | I2400M_PL_SIZE_MAX = 0x3EFF, | 270 | I2400M_PL_SIZE_MAX = 0x3EFF, |
| 271 | I2400M_MAX_PLS_IN_MSG = 60, | 271 | I2400M_MAX_PLS_IN_MSG = 60, |
| 272 | /* protocol barkers: sync sequences; for notifications they | 272 | /* protocol barkers: sync sequences; for notifications they |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 93445477f86a..3224820c8514 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
| @@ -79,7 +79,6 @@ struct writeback_control { | |||
| 79 | void writeback_inodes(struct writeback_control *wbc); | 79 | void writeback_inodes(struct writeback_control *wbc); |
| 80 | int inode_wait(void *); | 80 | int inode_wait(void *); |
| 81 | void sync_inodes_sb(struct super_block *, int wait); | 81 | void sync_inodes_sb(struct super_block *, int wait); |
| 82 | void sync_inodes(int wait); | ||
| 83 | 82 | ||
| 84 | /* writeback.h requires fs.h; it, too, is not included from here. */ | 83 | /* writeback.h requires fs.h; it, too, is not included from here. */ |
| 85 | static inline void wait_on_inode(struct inode *inode) | 84 | static inline void wait_on_inode(struct inode *inode) |
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h index 3ad5390a4dd5..968166a45f86 100644 --- a/include/net/bluetooth/bluetooth.h +++ b/include/net/bluetooth/bluetooth.h | |||
| @@ -81,12 +81,6 @@ enum { | |||
| 81 | BT_CLOSED | 81 | BT_CLOSED |
| 82 | }; | 82 | }; |
| 83 | 83 | ||
| 84 | /* Endianness conversions */ | ||
| 85 | #define htobs(a) __cpu_to_le16(a) | ||
| 86 | #define htobl(a) __cpu_to_le32(a) | ||
| 87 | #define btohs(a) __le16_to_cpu(a) | ||
| 88 | #define btohl(a) __le32_to_cpu(a) | ||
| 89 | |||
| 90 | /* BD Address */ | 84 | /* BD Address */ |
| 91 | typedef struct { | 85 | typedef struct { |
| 92 | __u8 b[6]; | 86 | __u8 b[6]; |
| @@ -171,15 +165,6 @@ static inline struct sk_buff *bt_skb_send_alloc(struct sock *sk, unsigned long l | |||
| 171 | return skb; | 165 | return skb; |
| 172 | } | 166 | } |
| 173 | 167 | ||
| 174 | static inline int skb_frags_no(struct sk_buff *skb) | ||
| 175 | { | ||
| 176 | register struct sk_buff *frag = skb_shinfo(skb)->frag_list; | ||
| 177 | register int n = 1; | ||
| 178 | |||
| 179 | for (; frag; frag=frag->next, n++); | ||
| 180 | return n; | ||
| 181 | } | ||
| 182 | |||
| 183 | int bt_err(__u16 code); | 168 | int bt_err(__u16 code); |
| 184 | 169 | ||
| 185 | extern int hci_sock_init(void); | 170 | extern int hci_sock_init(void); |
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 73aead222b32..c4ca4228b083 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
| @@ -137,6 +137,8 @@ struct hci_dev { | |||
| 137 | struct device *parent; | 137 | struct device *parent; |
| 138 | struct device dev; | 138 | struct device dev; |
| 139 | 139 | ||
| 140 | struct rfkill *rfkill; | ||
| 141 | |||
| 140 | struct module *owner; | 142 | struct module *owner; |
| 141 | 143 | ||
| 142 | int (*open)(struct hci_dev *hdev); | 144 | int (*open)(struct hci_dev *hdev); |
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h index f566aa1f0a4c..e919fca1072a 100644 --- a/include/net/bluetooth/l2cap.h +++ b/include/net/bluetooth/l2cap.h | |||
| @@ -26,8 +26,13 @@ | |||
| 26 | #define __L2CAP_H | 26 | #define __L2CAP_H |
| 27 | 27 | ||
| 28 | /* L2CAP defaults */ | 28 | /* L2CAP defaults */ |
| 29 | #define L2CAP_DEFAULT_MTU 672 | 29 | #define L2CAP_DEFAULT_MTU 672 |
| 30 | #define L2CAP_DEFAULT_FLUSH_TO 0xFFFF | 30 | #define L2CAP_DEFAULT_FLUSH_TO 0xffff |
| 31 | #define L2CAP_DEFAULT_RX_WINDOW 1 | ||
| 32 | #define L2CAP_DEFAULT_MAX_RECEIVE 1 | ||
| 33 | #define L2CAP_DEFAULT_RETRANS_TO 300 /* 300 milliseconds */ | ||
| 34 | #define L2CAP_DEFAULT_MONITOR_TO 1000 /* 1 second */ | ||
| 35 | #define L2CAP_DEFAULT_MAX_RX_APDU 0xfff7 | ||
| 31 | 36 | ||
| 32 | #define L2CAP_CONN_TIMEOUT (40000) /* 40 seconds */ | 37 | #define L2CAP_CONN_TIMEOUT (40000) /* 40 seconds */ |
| 33 | #define L2CAP_INFO_TIMEOUT (4000) /* 4 seconds */ | 38 | #define L2CAP_INFO_TIMEOUT (4000) /* 4 seconds */ |
| @@ -64,17 +69,29 @@ struct l2cap_conninfo { | |||
| 64 | #define L2CAP_LM_SECURE 0x0020 | 69 | #define L2CAP_LM_SECURE 0x0020 |
| 65 | 70 | ||
| 66 | /* L2CAP command codes */ | 71 | /* L2CAP command codes */ |
| 67 | #define L2CAP_COMMAND_REJ 0x01 | 72 | #define L2CAP_COMMAND_REJ 0x01 |
| 68 | #define L2CAP_CONN_REQ 0x02 | 73 | #define L2CAP_CONN_REQ 0x02 |
| 69 | #define L2CAP_CONN_RSP 0x03 | 74 | #define L2CAP_CONN_RSP 0x03 |
| 70 | #define L2CAP_CONF_REQ 0x04 | 75 | #define L2CAP_CONF_REQ 0x04 |
| 71 | #define L2CAP_CONF_RSP 0x05 | 76 | #define L2CAP_CONF_RSP 0x05 |
| 72 | #define L2CAP_DISCONN_REQ 0x06 | 77 | #define L2CAP_DISCONN_REQ 0x06 |
| 73 | #define L2CAP_DISCONN_RSP 0x07 | 78 | #define L2CAP_DISCONN_RSP 0x07 |
| 74 | #define L2CAP_ECHO_REQ 0x08 | 79 | #define L2CAP_ECHO_REQ 0x08 |
| 75 | #define L2CAP_ECHO_RSP 0x09 | 80 | #define L2CAP_ECHO_RSP 0x09 |
| 76 | #define L2CAP_INFO_REQ 0x0a | 81 | #define L2CAP_INFO_REQ 0x0a |
| 77 | #define L2CAP_INFO_RSP 0x0b | 82 | #define L2CAP_INFO_RSP 0x0b |
| 83 | |||
| 84 | /* L2CAP feature mask */ | ||
| 85 | #define L2CAP_FEAT_FLOWCTL 0x00000001 | ||
| 86 | #define L2CAP_FEAT_RETRANS 0x00000002 | ||
| 87 | #define L2CAP_FEAT_ERTM 0x00000008 | ||
| 88 | #define L2CAP_FEAT_STREAMING 0x00000010 | ||
| 89 | #define L2CAP_FEAT_FCS 0x00000020 | ||
| 90 | #define L2CAP_FEAT_FIXED_CHAN 0x00000080 | ||
| 91 | |||
| 92 | /* L2CAP checksum option */ | ||
| 93 | #define L2CAP_FCS_NONE 0x00 | ||
| 94 | #define L2CAP_FCS_CRC16 0x01 | ||
| 78 | 95 | ||
| 79 | /* L2CAP structures */ | 96 | /* L2CAP structures */ |
| 80 | struct l2cap_hdr { | 97 | struct l2cap_hdr { |
| @@ -106,17 +123,23 @@ struct l2cap_conn_rsp { | |||
| 106 | __le16 status; | 123 | __le16 status; |
| 107 | } __attribute__ ((packed)); | 124 | } __attribute__ ((packed)); |
| 108 | 125 | ||
| 126 | /* channel indentifier */ | ||
| 127 | #define L2CAP_CID_SIGNALING 0x0001 | ||
| 128 | #define L2CAP_CID_CONN_LESS 0x0002 | ||
| 129 | #define L2CAP_CID_DYN_START 0x0040 | ||
| 130 | #define L2CAP_CID_DYN_END 0xffff | ||
| 131 | |||
| 109 | /* connect result */ | 132 | /* connect result */ |
| 110 | #define L2CAP_CR_SUCCESS 0x0000 | 133 | #define L2CAP_CR_SUCCESS 0x0000 |
| 111 | #define L2CAP_CR_PEND 0x0001 | 134 | #define L2CAP_CR_PEND 0x0001 |
| 112 | #define L2CAP_CR_BAD_PSM 0x0002 | 135 | #define L2CAP_CR_BAD_PSM 0x0002 |
| 113 | #define L2CAP_CR_SEC_BLOCK 0x0003 | 136 | #define L2CAP_CR_SEC_BLOCK 0x0003 |
| 114 | #define L2CAP_CR_NO_MEM 0x0004 | 137 | #define L2CAP_CR_NO_MEM 0x0004 |
| 115 | 138 | ||
| 116 | /* connect status */ | 139 | /* connect status */ |
| 117 | #define L2CAP_CS_NO_INFO 0x0000 | 140 | #define L2CAP_CS_NO_INFO 0x0000 |
| 118 | #define L2CAP_CS_AUTHEN_PEND 0x0001 | 141 | #define L2CAP_CS_AUTHEN_PEND 0x0001 |
| 119 | #define L2CAP_CS_AUTHOR_PEND 0x0002 | 142 | #define L2CAP_CS_AUTHOR_PEND 0x0002 |
| 120 | 143 | ||
| 121 | struct l2cap_conf_req { | 144 | struct l2cap_conf_req { |
| 122 | __le16 dcid; | 145 | __le16 dcid; |
| @@ -143,10 +166,14 @@ struct l2cap_conf_opt { | |||
| 143 | } __attribute__ ((packed)); | 166 | } __attribute__ ((packed)); |
| 144 | #define L2CAP_CONF_OPT_SIZE 2 | 167 | #define L2CAP_CONF_OPT_SIZE 2 |
| 145 | 168 | ||
| 169 | #define L2CAP_CONF_HINT 0x80 | ||
| 170 | #define L2CAP_CONF_MASK 0x7f | ||
| 171 | |||
| 146 | #define L2CAP_CONF_MTU 0x01 | 172 | #define L2CAP_CONF_MTU 0x01 |
| 147 | #define L2CAP_CONF_FLUSH_TO 0x02 | 173 | #define L2CAP_CONF_FLUSH_TO 0x02 |
| 148 | #define L2CAP_CONF_QOS 0x03 | 174 | #define L2CAP_CONF_QOS 0x03 |
| 149 | #define L2CAP_CONF_RFC 0x04 | 175 | #define L2CAP_CONF_RFC 0x04 |
| 176 | #define L2CAP_CONF_FCS 0x05 | ||
| 150 | 177 | ||
| 151 | #define L2CAP_CONF_MAX_SIZE 22 | 178 | #define L2CAP_CONF_MAX_SIZE 22 |
| 152 | 179 | ||
| @@ -162,6 +189,8 @@ struct l2cap_conf_rfc { | |||
| 162 | #define L2CAP_MODE_BASIC 0x00 | 189 | #define L2CAP_MODE_BASIC 0x00 |
| 163 | #define L2CAP_MODE_RETRANS 0x01 | 190 | #define L2CAP_MODE_RETRANS 0x01 |
| 164 | #define L2CAP_MODE_FLOWCTL 0x02 | 191 | #define L2CAP_MODE_FLOWCTL 0x02 |
| 192 | #define L2CAP_MODE_ERTM 0x03 | ||
| 193 | #define L2CAP_MODE_STREAM 0x04 | ||
| 165 | 194 | ||
| 166 | struct l2cap_disconn_req { | 195 | struct l2cap_disconn_req { |
| 167 | __le16 dcid; | 196 | __le16 dcid; |
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 5389afdc1297..1a21895b732b 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
| @@ -1,71 +1,220 @@ | |||
| 1 | #ifndef __NET_CFG80211_H | 1 | #ifndef __NET_CFG80211_H |
| 2 | #define __NET_CFG80211_H | 2 | #define __NET_CFG80211_H |
| 3 | /* | ||
| 4 | * 802.11 device and configuration interface | ||
| 5 | * | ||
| 6 | * Copyright 2006-2009 Johannes Berg <johannes@sipsolutions.net> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | */ | ||
| 3 | 12 | ||
| 13 | #include <linux/netdevice.h> | ||
| 14 | #include <linux/debugfs.h> | ||
| 15 | #include <linux/list.h> | ||
| 4 | #include <linux/netlink.h> | 16 | #include <linux/netlink.h> |
| 5 | #include <linux/skbuff.h> | 17 | #include <linux/skbuff.h> |
| 6 | #include <linux/nl80211.h> | 18 | #include <linux/nl80211.h> |
| 7 | #include <linux/if_ether.h> | 19 | #include <linux/if_ether.h> |
| 8 | #include <linux/ieee80211.h> | 20 | #include <linux/ieee80211.h> |
| 9 | #include <linux/wireless.h> | 21 | #include <net/regulatory.h> |
| 10 | #include <net/iw_handler.h> | 22 | |
| 11 | #include <net/genetlink.h> | ||
| 12 | /* remove once we remove the wext stuff */ | 23 | /* remove once we remove the wext stuff */ |
| 13 | #include <net/iw_handler.h> | 24 | #include <net/iw_handler.h> |
| 25 | #include <linux/wireless.h> | ||
| 26 | |||
| 14 | 27 | ||
| 15 | /* | 28 | /* |
| 16 | * 802.11 configuration in-kernel interface | 29 | * wireless hardware capability structures |
| 30 | */ | ||
| 31 | |||
| 32 | /** | ||
| 33 | * enum ieee80211_band - supported frequency bands | ||
| 34 | * | ||
| 35 | * The bands are assigned this way because the supported | ||
| 36 | * bitrates differ in these bands. | ||
| 17 | * | 37 | * |
| 18 | * Copyright 2006, 2007 Johannes Berg <johannes@sipsolutions.net> | 38 | * @IEEE80211_BAND_2GHZ: 2.4GHz ISM band |
| 39 | * @IEEE80211_BAND_5GHZ: around 5GHz band (4.9-5.7) | ||
| 19 | */ | 40 | */ |
| 41 | enum ieee80211_band { | ||
| 42 | IEEE80211_BAND_2GHZ, | ||
| 43 | IEEE80211_BAND_5GHZ, | ||
| 44 | |||
| 45 | /* keep last */ | ||
| 46 | IEEE80211_NUM_BANDS | ||
| 47 | }; | ||
| 20 | 48 | ||
| 21 | /** | 49 | /** |
| 22 | * struct vif_params - describes virtual interface parameters | 50 | * enum ieee80211_channel_flags - channel flags |
| 23 | * @mesh_id: mesh ID to use | 51 | * |
| 24 | * @mesh_id_len: length of the mesh ID | 52 | * Channel flags set by the regulatory control code. |
| 53 | * | ||
| 54 | * @IEEE80211_CHAN_DISABLED: This channel is disabled. | ||
| 55 | * @IEEE80211_CHAN_PASSIVE_SCAN: Only passive scanning is permitted | ||
| 56 | * on this channel. | ||
| 57 | * @IEEE80211_CHAN_NO_IBSS: IBSS is not allowed on this channel. | ||
| 58 | * @IEEE80211_CHAN_RADAR: Radar detection is required on this channel. | ||
| 59 | * @IEEE80211_CHAN_NO_HT40PLUS: extension channel above this channel | ||
| 60 | * is not permitted. | ||
| 61 | * @IEEE80211_CHAN_NO_HT40MINUS: extension channel below this channel | ||
| 62 | * is not permitted. | ||
| 25 | */ | 63 | */ |
| 26 | struct vif_params { | 64 | enum ieee80211_channel_flags { |
| 27 | u8 *mesh_id; | 65 | IEEE80211_CHAN_DISABLED = 1<<0, |
| 28 | int mesh_id_len; | 66 | IEEE80211_CHAN_PASSIVE_SCAN = 1<<1, |
| 67 | IEEE80211_CHAN_NO_IBSS = 1<<2, | ||
| 68 | IEEE80211_CHAN_RADAR = 1<<3, | ||
| 69 | IEEE80211_CHAN_NO_HT40PLUS = 1<<4, | ||
| 70 | IEEE80211_CHAN_NO_HT40MINUS = 1<<5, | ||
| 29 | }; | 71 | }; |
| 30 | 72 | ||
| 31 | /* Radiotap header iteration | 73 | #define IEEE80211_CHAN_NO_HT40 \ |
| 32 | * implemented in net/wireless/radiotap.c | 74 | (IEEE80211_CHAN_NO_HT40PLUS | IEEE80211_CHAN_NO_HT40MINUS) |
| 33 | * docs in Documentation/networking/radiotap-headers.txt | 75 | |
| 76 | /** | ||
| 77 | * struct ieee80211_channel - channel definition | ||
| 78 | * | ||
| 79 | * This structure describes a single channel for use | ||
| 80 | * with cfg80211. | ||
| 81 | * | ||
| 82 | * @center_freq: center frequency in MHz | ||
| 83 | * @max_bandwidth: maximum allowed bandwidth for this channel, in MHz | ||
| 84 | * @hw_value: hardware-specific value for the channel | ||
| 85 | * @flags: channel flags from &enum ieee80211_channel_flags. | ||
| 86 | * @orig_flags: channel flags at registration time, used by regulatory | ||
| 87 | * code to support devices with additional restrictions | ||
| 88 | * @band: band this channel belongs to. | ||
| 89 | * @max_antenna_gain: maximum antenna gain in dBi | ||
| 90 | * @max_power: maximum transmission power (in dBm) | ||
| 91 | * @beacon_found: helper to regulatory code to indicate when a beacon | ||
| 92 | * has been found on this channel. Use regulatory_hint_found_beacon() | ||
| 93 | * to enable this, this is is useful only on 5 GHz band. | ||
| 94 | * @orig_mag: internal use | ||
| 95 | * @orig_mpwr: internal use | ||
| 34 | */ | 96 | */ |
| 97 | struct ieee80211_channel { | ||
| 98 | enum ieee80211_band band; | ||
| 99 | u16 center_freq; | ||
| 100 | u8 max_bandwidth; | ||
| 101 | u16 hw_value; | ||
| 102 | u32 flags; | ||
| 103 | int max_antenna_gain; | ||
| 104 | int max_power; | ||
| 105 | bool beacon_found; | ||
| 106 | u32 orig_flags; | ||
| 107 | int orig_mag, orig_mpwr; | ||
| 108 | }; | ||
| 109 | |||
| 35 | /** | 110 | /** |
| 36 | * struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args | 111 | * enum ieee80211_rate_flags - rate flags |
| 37 | * @rtheader: pointer to the radiotap header we are walking through | 112 | * |
| 38 | * @max_length: length of radiotap header in cpu byte ordering | 113 | * Hardware/specification flags for rates. These are structured |
| 39 | * @this_arg_index: IEEE80211_RADIOTAP_... index of current arg | 114 | * in a way that allows using the same bitrate structure for |
| 40 | * @this_arg: pointer to current radiotap arg | 115 | * different bands/PHY modes. |
| 41 | * @arg_index: internal next argument index | 116 | * |
| 42 | * @arg: internal next argument pointer | 117 | * @IEEE80211_RATE_SHORT_PREAMBLE: Hardware can send with short |
| 43 | * @next_bitmap: internal pointer to next present u32 | 118 | * preamble on this bitrate; only relevant in 2.4GHz band and |
| 44 | * @bitmap_shifter: internal shifter for curr u32 bitmap, b0 set == arg present | 119 | * with CCK rates. |
| 120 | * @IEEE80211_RATE_MANDATORY_A: This bitrate is a mandatory rate | ||
| 121 | * when used with 802.11a (on the 5 GHz band); filled by the | ||
| 122 | * core code when registering the wiphy. | ||
| 123 | * @IEEE80211_RATE_MANDATORY_B: This bitrate is a mandatory rate | ||
| 124 | * when used with 802.11b (on the 2.4 GHz band); filled by the | ||
| 125 | * core code when registering the wiphy. | ||
| 126 | * @IEEE80211_RATE_MANDATORY_G: This bitrate is a mandatory rate | ||
| 127 | * when used with 802.11g (on the 2.4 GHz band); filled by the | ||
| 128 | * core code when registering the wiphy. | ||
| 129 | * @IEEE80211_RATE_ERP_G: This is an ERP rate in 802.11g mode. | ||
| 45 | */ | 130 | */ |
| 131 | enum ieee80211_rate_flags { | ||
| 132 | IEEE80211_RATE_SHORT_PREAMBLE = 1<<0, | ||
| 133 | IEEE80211_RATE_MANDATORY_A = 1<<1, | ||
| 134 | IEEE80211_RATE_MANDATORY_B = 1<<2, | ||
| 135 | IEEE80211_RATE_MANDATORY_G = 1<<3, | ||
| 136 | IEEE80211_RATE_ERP_G = 1<<4, | ||
| 137 | }; | ||
| 46 | 138 | ||
| 47 | struct ieee80211_radiotap_iterator { | 139 | /** |
| 48 | struct ieee80211_radiotap_header *rtheader; | 140 | * struct ieee80211_rate - bitrate definition |
| 49 | int max_length; | 141 | * |
| 50 | int this_arg_index; | 142 | * This structure describes a bitrate that an 802.11 PHY can |
| 51 | u8 *this_arg; | 143 | * operate with. The two values @hw_value and @hw_value_short |
| 144 | * are only for driver use when pointers to this structure are | ||
| 145 | * passed around. | ||
| 146 | * | ||
| 147 | * @flags: rate-specific flags | ||
| 148 | * @bitrate: bitrate in units of 100 Kbps | ||
| 149 | * @hw_value: driver/hardware value for this rate | ||
| 150 | * @hw_value_short: driver/hardware value for this rate when | ||
| 151 | * short preamble is used | ||
| 152 | */ | ||
| 153 | struct ieee80211_rate { | ||
| 154 | u32 flags; | ||
| 155 | u16 bitrate; | ||
| 156 | u16 hw_value, hw_value_short; | ||
| 157 | }; | ||
| 52 | 158 | ||
| 53 | int arg_index; | 159 | /** |
| 54 | u8 *arg; | 160 | * struct ieee80211_sta_ht_cap - STA's HT capabilities |
| 55 | __le32 *next_bitmap; | 161 | * |
| 56 | u32 bitmap_shifter; | 162 | * This structure describes most essential parameters needed |
| 163 | * to describe 802.11n HT capabilities for an STA. | ||
| 164 | * | ||
| 165 | * @ht_supported: is HT supported by the STA | ||
| 166 | * @cap: HT capabilities map as described in 802.11n spec | ||
| 167 | * @ampdu_factor: Maximum A-MPDU length factor | ||
| 168 | * @ampdu_density: Minimum A-MPDU spacing | ||
| 169 | * @mcs: Supported MCS rates | ||
| 170 | */ | ||
| 171 | struct ieee80211_sta_ht_cap { | ||
| 172 | u16 cap; /* use IEEE80211_HT_CAP_ */ | ||
| 173 | bool ht_supported; | ||
| 174 | u8 ampdu_factor; | ||
| 175 | u8 ampdu_density; | ||
| 176 | struct ieee80211_mcs_info mcs; | ||
| 57 | }; | 177 | }; |
| 58 | 178 | ||
| 59 | extern int ieee80211_radiotap_iterator_init( | 179 | /** |
| 60 | struct ieee80211_radiotap_iterator *iterator, | 180 | * struct ieee80211_supported_band - frequency band definition |
| 61 | struct ieee80211_radiotap_header *radiotap_header, | 181 | * |
| 62 | int max_length); | 182 | * This structure describes a frequency band a wiphy |
| 183 | * is able to operate in. | ||
| 184 | * | ||
| 185 | * @channels: Array of channels the hardware can operate in | ||
| 186 | * in this band. | ||
| 187 | * @band: the band this structure represents | ||
| 188 | * @n_channels: Number of channels in @channels | ||
| 189 | * @bitrates: Array of bitrates the hardware can operate with | ||
| 190 | * in this band. Must be sorted to give a valid "supported | ||
| 191 | * rates" IE, i.e. CCK rates first, then OFDM. | ||
| 192 | * @n_bitrates: Number of bitrates in @bitrates | ||
| 193 | */ | ||
| 194 | struct ieee80211_supported_band { | ||
| 195 | struct ieee80211_channel *channels; | ||
| 196 | struct ieee80211_rate *bitrates; | ||
| 197 | enum ieee80211_band band; | ||
| 198 | int n_channels; | ||
| 199 | int n_bitrates; | ||
| 200 | struct ieee80211_sta_ht_cap ht_cap; | ||
| 201 | }; | ||
| 63 | 202 | ||
| 64 | extern int ieee80211_radiotap_iterator_next( | 203 | /* |
| 65 | struct ieee80211_radiotap_iterator *iterator); | 204 | * Wireless hardware/device configuration structures and methods |
| 205 | */ | ||
| 66 | 206 | ||
| 207 | /** | ||
| 208 | * struct vif_params - describes virtual interface parameters | ||
| 209 | * @mesh_id: mesh ID to use | ||
| 210 | * @mesh_id_len: length of the mesh ID | ||
| 211 | */ | ||
| 212 | struct vif_params { | ||
| 213 | u8 *mesh_id; | ||
| 214 | int mesh_id_len; | ||
| 215 | }; | ||
| 67 | 216 | ||
| 68 | /** | 217 | /** |
| 69 | * struct key_params - key information | 218 | * struct key_params - key information |
| 70 | * | 219 | * |
| 71 | * Information about a key | 220 | * Information about a key |
| @@ -106,27 +255,6 @@ struct beacon_parameters { | |||
| 106 | }; | 255 | }; |
| 107 | 256 | ||
| 108 | /** | 257 | /** |
| 109 | * enum station_flags - station flags | ||
| 110 | * | ||
| 111 | * Station capability flags. Note that these must be the bits | ||
| 112 | * according to the nl80211 flags. | ||
| 113 | * | ||
| 114 | * @STATION_FLAG_CHANGED: station flags were changed | ||
| 115 | * @STATION_FLAG_AUTHORIZED: station is authorized to send frames (802.1X) | ||
| 116 | * @STATION_FLAG_SHORT_PREAMBLE: station is capable of receiving frames | ||
| 117 | * with short preambles | ||
| 118 | * @STATION_FLAG_WME: station is WME/QoS capable | ||
| 119 | * @STATION_FLAG_MFP: station uses management frame protection | ||
| 120 | */ | ||
| 121 | enum station_flags { | ||
| 122 | STATION_FLAG_CHANGED = 1<<0, | ||
| 123 | STATION_FLAG_AUTHORIZED = 1<<NL80211_STA_FLAG_AUTHORIZED, | ||
| 124 | STATION_FLAG_SHORT_PREAMBLE = 1<<NL80211_STA_FLAG_SHORT_PREAMBLE, | ||
| 125 | STATION_FLAG_WME = 1<<NL80211_STA_FLAG_WME, | ||
| 126 | STATION_FLAG_MFP = 1<<NL80211_STA_FLAG_MFP, | ||
| 127 | }; | ||
| 128 | |||
| 129 | /** | ||
| 130 | * enum plink_action - actions to perform in mesh peers | 258 | * enum plink_action - actions to perform in mesh peers |
| 131 | * | 259 | * |
| 132 | * @PLINK_ACTION_INVALID: action 0 is reserved | 260 | * @PLINK_ACTION_INVALID: action 0 is reserved |
| @@ -148,14 +276,17 @@ enum plink_actions { | |||
| 148 | * @supported_rates: supported rates in IEEE 802.11 format | 276 | * @supported_rates: supported rates in IEEE 802.11 format |
| 149 | * (or NULL for no change) | 277 | * (or NULL for no change) |
| 150 | * @supported_rates_len: number of supported rates | 278 | * @supported_rates_len: number of supported rates |
| 151 | * @station_flags: station flags (see &enum station_flags) | 279 | * @sta_flags_mask: station flags that changed |
| 280 | * (bitmask of BIT(NL80211_STA_FLAG_...)) | ||
| 281 | * @sta_flags_set: station flags values | ||
| 282 | * (bitmask of BIT(NL80211_STA_FLAG_...)) | ||
| 152 | * @listen_interval: listen interval or -1 for no change | 283 | * @listen_interval: listen interval or -1 for no change |
| 153 | * @aid: AID or zero for no change | 284 | * @aid: AID or zero for no change |
| 154 | */ | 285 | */ |
| 155 | struct station_parameters { | 286 | struct station_parameters { |
| 156 | u8 *supported_rates; | 287 | u8 *supported_rates; |
| 157 | struct net_device *vlan; | 288 | struct net_device *vlan; |
| 158 | u32 station_flags; | 289 | u32 sta_flags_mask, sta_flags_set; |
| 159 | int listen_interval; | 290 | int listen_interval; |
| 160 | u16 aid; | 291 | u16 aid; |
| 161 | u8 supported_rates_len; | 292 | u8 supported_rates_len; |
| @@ -348,92 +479,6 @@ struct bss_parameters { | |||
| 348 | u8 basic_rates_len; | 479 | u8 basic_rates_len; |
| 349 | }; | 480 | }; |
| 350 | 481 | ||
| 351 | /** | ||
| 352 | * enum environment_cap - Environment parsed from country IE | ||
| 353 | * @ENVIRON_ANY: indicates country IE applies to both indoor and | ||
| 354 | * outdoor operation. | ||
| 355 | * @ENVIRON_INDOOR: indicates country IE applies only to indoor operation | ||
| 356 | * @ENVIRON_OUTDOOR: indicates country IE applies only to outdoor operation | ||
| 357 | */ | ||
| 358 | enum environment_cap { | ||
| 359 | ENVIRON_ANY, | ||
| 360 | ENVIRON_INDOOR, | ||
| 361 | ENVIRON_OUTDOOR, | ||
| 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 | ||
| 387 | */ | ||
| 388 | struct regulatory_request { | ||
| 389 | int wiphy_idx; | ||
| 390 | enum nl80211_reg_initiator initiator; | ||
| 391 | char alpha2[2]; | ||
| 392 | bool intersect; | ||
| 393 | u32 country_ie_checksum; | ||
| 394 | enum environment_cap country_ie_env; | ||
| 395 | struct list_head list; | ||
| 396 | }; | ||
| 397 | |||
| 398 | struct ieee80211_freq_range { | ||
| 399 | u32 start_freq_khz; | ||
| 400 | u32 end_freq_khz; | ||
| 401 | u32 max_bandwidth_khz; | ||
| 402 | }; | ||
| 403 | |||
| 404 | struct ieee80211_power_rule { | ||
| 405 | u32 max_antenna_gain; | ||
| 406 | u32 max_eirp; | ||
| 407 | }; | ||
| 408 | |||
| 409 | struct ieee80211_reg_rule { | ||
| 410 | struct ieee80211_freq_range freq_range; | ||
| 411 | struct ieee80211_power_rule power_rule; | ||
| 412 | u32 flags; | ||
| 413 | }; | ||
| 414 | |||
| 415 | struct ieee80211_regdomain { | ||
| 416 | u32 n_reg_rules; | ||
| 417 | char alpha2[2]; | ||
| 418 | struct ieee80211_reg_rule reg_rules[]; | ||
| 419 | }; | ||
| 420 | |||
| 421 | #define MHZ_TO_KHZ(freq) ((freq) * 1000) | ||
| 422 | #define KHZ_TO_MHZ(freq) ((freq) / 1000) | ||
| 423 | #define DBI_TO_MBI(gain) ((gain) * 100) | ||
| 424 | #define MBI_TO_DBI(gain) ((gain) / 100) | ||
| 425 | #define DBM_TO_MBM(gain) ((gain) * 100) | ||
| 426 | #define MBM_TO_DBM(gain) ((gain) / 100) | ||
| 427 | |||
| 428 | #define REG_RULE(start, end, bw, gain, eirp, reg_flags) { \ | ||
| 429 | .freq_range.start_freq_khz = MHZ_TO_KHZ(start), \ | ||
| 430 | .freq_range.end_freq_khz = MHZ_TO_KHZ(end), \ | ||
| 431 | .freq_range.max_bandwidth_khz = MHZ_TO_KHZ(bw), \ | ||
| 432 | .power_rule.max_antenna_gain = DBI_TO_MBI(gain), \ | ||
| 433 | .power_rule.max_eirp = DBM_TO_MBM(eirp), \ | ||
| 434 | .flags = reg_flags, \ | ||
| 435 | } | ||
| 436 | |||
| 437 | struct mesh_config { | 482 | struct mesh_config { |
| 438 | /* Timeouts in ms */ | 483 | /* Timeouts in ms */ |
| 439 | /* Mesh plink management parameters */ | 484 | /* Mesh plink management parameters */ |
| @@ -504,7 +549,7 @@ struct cfg80211_scan_request { | |||
| 504 | int n_ssids; | 549 | int n_ssids; |
| 505 | struct ieee80211_channel **channels; | 550 | struct ieee80211_channel **channels; |
| 506 | u32 n_channels; | 551 | u32 n_channels; |
| 507 | u8 *ie; | 552 | const u8 *ie; |
| 508 | size_t ie_len; | 553 | size_t ie_len; |
| 509 | 554 | ||
| 510 | /* internal */ | 555 | /* internal */ |
| @@ -612,6 +657,11 @@ struct cfg80211_auth_request { | |||
| 612 | * @ssid_len: Length of ssid in octets | 657 | * @ssid_len: Length of ssid in octets |
| 613 | * @ie: Extra IEs to add to (Re)Association Request frame or %NULL | 658 | * @ie: Extra IEs to add to (Re)Association Request frame or %NULL |
| 614 | * @ie_len: Length of ie buffer in octets | 659 | * @ie_len: Length of ie buffer in octets |
| 660 | * @use_mfp: Use management frame protection (IEEE 802.11w) in this association | ||
| 661 | * @control_port: Whether user space controls IEEE 802.1X port, i.e., | ||
| 662 | * sets/clears %NL80211_STA_FLAG_AUTHORIZED. If true, the driver is | ||
| 663 | * required to assume that the port is unauthorized until authorized by | ||
| 664 | * user space. Otherwise, port is marked authorized by default. | ||
| 615 | */ | 665 | */ |
| 616 | struct cfg80211_assoc_request { | 666 | struct cfg80211_assoc_request { |
| 617 | struct ieee80211_channel *chan; | 667 | struct ieee80211_channel *chan; |
| @@ -620,6 +670,8 @@ struct cfg80211_assoc_request { | |||
| 620 | size_t ssid_len; | 670 | size_t ssid_len; |
| 621 | const u8 *ie; | 671 | const u8 *ie; |
| 622 | size_t ie_len; | 672 | size_t ie_len; |
| 673 | bool use_mfp; | ||
| 674 | bool control_port; | ||
| 623 | }; | 675 | }; |
| 624 | 676 | ||
| 625 | /** | 677 | /** |
| @@ -659,6 +711,60 @@ struct cfg80211_disassoc_request { | |||
| 659 | }; | 711 | }; |
| 660 | 712 | ||
| 661 | /** | 713 | /** |
| 714 | * struct cfg80211_ibss_params - IBSS parameters | ||
| 715 | * | ||
| 716 | * This structure defines the IBSS parameters for the join_ibss() | ||
| 717 | * method. | ||
| 718 | * | ||
| 719 | * @ssid: The SSID, will always be non-null. | ||
| 720 | * @ssid_len: The length of the SSID, will always be non-zero. | ||
| 721 | * @bssid: Fixed BSSID requested, maybe be %NULL, if set do not | ||
| 722 | * search for IBSSs with a different BSSID. | ||
| 723 | * @channel: The channel to use if no IBSS can be found to join. | ||
| 724 | * @channel_fixed: The channel should be fixed -- do not search for | ||
| 725 | * IBSSs to join on other channels. | ||
| 726 | * @ie: information element(s) to include in the beacon | ||
| 727 | * @ie_len: length of that | ||
| 728 | * @beacon_interval: beacon interval to use | ||
| 729 | */ | ||
| 730 | struct cfg80211_ibss_params { | ||
| 731 | u8 *ssid; | ||
| 732 | u8 *bssid; | ||
| 733 | struct ieee80211_channel *channel; | ||
| 734 | u8 *ie; | ||
| 735 | u8 ssid_len, ie_len; | ||
| 736 | u16 beacon_interval; | ||
| 737 | bool channel_fixed; | ||
| 738 | }; | ||
| 739 | |||
| 740 | /** | ||
| 741 | * enum wiphy_params_flags - set_wiphy_params bitfield values | ||
| 742 | * WIPHY_PARAM_RETRY_SHORT: wiphy->retry_short has changed | ||
| 743 | * WIPHY_PARAM_RETRY_LONG: wiphy->retry_long has changed | ||
| 744 | * WIPHY_PARAM_FRAG_THRESHOLD: wiphy->frag_threshold has changed | ||
| 745 | * WIPHY_PARAM_RTS_THRESHOLD: wiphy->rts_threshold has changed | ||
| 746 | */ | ||
| 747 | enum wiphy_params_flags { | ||
| 748 | WIPHY_PARAM_RETRY_SHORT = 1 << 0, | ||
| 749 | WIPHY_PARAM_RETRY_LONG = 1 << 1, | ||
| 750 | WIPHY_PARAM_FRAG_THRESHOLD = 1 << 2, | ||
| 751 | WIPHY_PARAM_RTS_THRESHOLD = 1 << 3, | ||
| 752 | }; | ||
| 753 | |||
| 754 | /** | ||
| 755 | * enum tx_power_setting - TX power adjustment | ||
| 756 | * | ||
| 757 | * @TX_POWER_AUTOMATIC: the dbm parameter is ignored | ||
| 758 | * @TX_POWER_LIMITED: limit TX power by the dbm parameter | ||
| 759 | * @TX_POWER_FIXED: fix TX power to the dbm parameter | ||
| 760 | */ | ||
| 761 | enum tx_power_setting { | ||
| 762 | TX_POWER_AUTOMATIC, | ||
| 763 | TX_POWER_LIMITED, | ||
| 764 | TX_POWER_FIXED, | ||
| 765 | }; | ||
| 766 | |||
| 767 | /** | ||
| 662 | * struct cfg80211_ops - backend description for wireless configuration | 768 | * struct cfg80211_ops - backend description for wireless configuration |
| 663 | * | 769 | * |
| 664 | * This struct is registered by fullmac card drivers and/or wireless stacks | 770 | * This struct is registered by fullmac card drivers and/or wireless stacks |
| @@ -688,10 +794,11 @@ struct cfg80211_disassoc_request { | |||
| 688 | * @get_key: get information about the key with the given parameters. | 794 | * @get_key: get information about the key with the given parameters. |
| 689 | * @mac_addr will be %NULL when requesting information for a group | 795 | * @mac_addr will be %NULL when requesting information for a group |
| 690 | * key. All pointers given to the @callback function need not be valid | 796 | * key. All pointers given to the @callback function need not be valid |
| 691 | * after it returns. | 797 | * after it returns. This function should return an error if it is |
| 798 | * not possible to retrieve the key, -ENOENT if it doesn't exist. | ||
| 692 | * | 799 | * |
| 693 | * @del_key: remove a key given the @mac_addr (%NULL for a group key) | 800 | * @del_key: remove a key given the @mac_addr (%NULL for a group key) |
| 694 | * and @key_index | 801 | * and @key_index, return -ENOENT if the key doesn't exist. |
| 695 | * | 802 | * |
| 696 | * @set_default_key: set the default key on an interface | 803 | * @set_default_key: set the default key on an interface |
| 697 | * | 804 | * |
| @@ -733,6 +840,23 @@ struct cfg80211_disassoc_request { | |||
| 733 | * @assoc: Request to (re)associate with the specified peer | 840 | * @assoc: Request to (re)associate with the specified peer |
| 734 | * @deauth: Request to deauthenticate from the specified peer | 841 | * @deauth: Request to deauthenticate from the specified peer |
| 735 | * @disassoc: Request to disassociate from the specified peer | 842 | * @disassoc: Request to disassociate from the specified peer |
| 843 | * | ||
| 844 | * @join_ibss: Join the specified IBSS (or create if necessary). Once done, call | ||
| 845 | * cfg80211_ibss_joined(), also call that function when changing BSSID due | ||
| 846 | * to a merge. | ||
| 847 | * @leave_ibss: Leave the IBSS. | ||
| 848 | * | ||
| 849 | * @set_wiphy_params: Notify that wiphy parameters have changed; | ||
| 850 | * @changed bitfield (see &enum wiphy_params_flags) describes which values | ||
| 851 | * have changed. The actual parameter values are available in | ||
| 852 | * struct wiphy. If returning an error, no value should be changed. | ||
| 853 | * | ||
| 854 | * @set_tx_power: set the transmit power according to the parameters | ||
| 855 | * @get_tx_power: store the current TX power into the dbm variable; | ||
| 856 | * return 0 if successful | ||
| 857 | * | ||
| 858 | * @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting | ||
| 859 | * functions to adjust rfkill hw state | ||
| 736 | */ | 860 | */ |
| 737 | struct cfg80211_ops { | 861 | struct cfg80211_ops { |
| 738 | int (*suspend)(struct wiphy *wiphy); | 862 | int (*suspend)(struct wiphy *wiphy); |
| @@ -747,13 +871,13 @@ struct cfg80211_ops { | |||
| 747 | struct vif_params *params); | 871 | struct vif_params *params); |
| 748 | 872 | ||
| 749 | int (*add_key)(struct wiphy *wiphy, struct net_device *netdev, | 873 | int (*add_key)(struct wiphy *wiphy, struct net_device *netdev, |
| 750 | u8 key_index, u8 *mac_addr, | 874 | u8 key_index, const u8 *mac_addr, |
| 751 | struct key_params *params); | 875 | struct key_params *params); |
| 752 | int (*get_key)(struct wiphy *wiphy, struct net_device *netdev, | 876 | int (*get_key)(struct wiphy *wiphy, struct net_device *netdev, |
| 753 | u8 key_index, u8 *mac_addr, void *cookie, | 877 | u8 key_index, const u8 *mac_addr, void *cookie, |
| 754 | void (*callback)(void *cookie, struct key_params*)); | 878 | void (*callback)(void *cookie, struct key_params*)); |
| 755 | int (*del_key)(struct wiphy *wiphy, struct net_device *netdev, | 879 | int (*del_key)(struct wiphy *wiphy, struct net_device *netdev, |
| 756 | u8 key_index, u8 *mac_addr); | 880 | u8 key_index, const u8 *mac_addr); |
| 757 | int (*set_default_key)(struct wiphy *wiphy, | 881 | int (*set_default_key)(struct wiphy *wiphy, |
| 758 | struct net_device *netdev, | 882 | struct net_device *netdev, |
| 759 | u8 key_index); | 883 | u8 key_index); |
| @@ -818,9 +942,473 @@ struct cfg80211_ops { | |||
| 818 | struct cfg80211_deauth_request *req); | 942 | struct cfg80211_deauth_request *req); |
| 819 | int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, | 943 | int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, |
| 820 | struct cfg80211_disassoc_request *req); | 944 | struct cfg80211_disassoc_request *req); |
| 945 | |||
| 946 | int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev, | ||
| 947 | struct cfg80211_ibss_params *params); | ||
| 948 | int (*leave_ibss)(struct wiphy *wiphy, struct net_device *dev); | ||
| 949 | |||
| 950 | int (*set_wiphy_params)(struct wiphy *wiphy, u32 changed); | ||
| 951 | |||
| 952 | int (*set_tx_power)(struct wiphy *wiphy, | ||
| 953 | enum tx_power_setting type, int dbm); | ||
| 954 | int (*get_tx_power)(struct wiphy *wiphy, int *dbm); | ||
| 955 | |||
| 956 | void (*rfkill_poll)(struct wiphy *wiphy); | ||
| 821 | }; | 957 | }; |
| 822 | 958 | ||
| 823 | /* temporary wext handlers */ | 959 | /* |
| 960 | * wireless hardware and networking interfaces structures | ||
| 961 | * and registration/helper functions | ||
| 962 | */ | ||
| 963 | |||
| 964 | /** | ||
| 965 | * struct wiphy - wireless hardware description | ||
| 966 | * @idx: the wiphy index assigned to this item | ||
| 967 | * @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name> | ||
| 968 | * @custom_regulatory: tells us the driver for this device | ||
| 969 | * has its own custom regulatory domain and cannot identify the | ||
| 970 | * ISO / IEC 3166 alpha2 it belongs to. When this is enabled | ||
| 971 | * we will disregard the first regulatory hint (when the | ||
| 972 | * initiator is %REGDOM_SET_BY_CORE). | ||
| 973 | * @strict_regulatory: tells us the driver for this device will ignore | ||
| 974 | * regulatory domain settings until it gets its own regulatory domain | ||
| 975 | * via its regulatory_hint(). After its gets its own regulatory domain | ||
| 976 | * it will only allow further regulatory domain settings to further | ||
| 977 | * enhance compliance. For example if channel 13 and 14 are disabled | ||
| 978 | * by this regulatory domain no user regulatory domain can enable these | ||
| 979 | * channels at a later time. This can be used for devices which do not | ||
| 980 | * have calibration information gauranteed for frequencies or settings | ||
| 981 | * outside of its regulatory domain. | ||
| 982 | * @reg_notifier: the driver's regulatory notification callback | ||
| 983 | * @regd: the driver's regulatory domain, if one was requested via | ||
| 984 | * the regulatory_hint() API. This can be used by the driver | ||
| 985 | * on the reg_notifier() if it chooses to ignore future | ||
| 986 | * regulatory domain changes caused by other drivers. | ||
| 987 | * @signal_type: signal type reported in &struct cfg80211_bss. | ||
| 988 | * @cipher_suites: supported cipher suites | ||
| 989 | * @n_cipher_suites: number of supported cipher suites | ||
| 990 | * @retry_short: Retry limit for short frames (dot11ShortRetryLimit) | ||
| 991 | * @retry_long: Retry limit for long frames (dot11LongRetryLimit) | ||
| 992 | * @frag_threshold: Fragmentation threshold (dot11FragmentationThreshold); | ||
| 993 | * -1 = fragmentation disabled, only odd values >= 256 used | ||
| 994 | * @rts_threshold: RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled | ||
| 995 | */ | ||
| 996 | struct wiphy { | ||
| 997 | /* assign these fields before you register the wiphy */ | ||
| 998 | |||
| 999 | /* permanent MAC address */ | ||
| 1000 | u8 perm_addr[ETH_ALEN]; | ||
| 1001 | |||
| 1002 | /* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */ | ||
| 1003 | u16 interface_modes; | ||
| 1004 | |||
| 1005 | bool custom_regulatory; | ||
| 1006 | bool strict_regulatory; | ||
| 1007 | |||
| 1008 | enum cfg80211_signal_type signal_type; | ||
| 1009 | |||
| 1010 | int bss_priv_size; | ||
| 1011 | u8 max_scan_ssids; | ||
| 1012 | u16 max_scan_ie_len; | ||
| 1013 | |||
| 1014 | int n_cipher_suites; | ||
| 1015 | const u32 *cipher_suites; | ||
| 1016 | |||
| 1017 | u8 retry_short; | ||
| 1018 | u8 retry_long; | ||
| 1019 | u32 frag_threshold; | ||
| 1020 | u32 rts_threshold; | ||
| 1021 | |||
| 1022 | /* If multiple wiphys are registered and you're handed e.g. | ||
| 1023 | * a regular netdev with assigned ieee80211_ptr, you won't | ||
| 1024 | * know whether it points to a wiphy your driver has registered | ||
| 1025 | * or not. Assign this to something global to your driver to | ||
| 1026 | * help determine whether you own this wiphy or not. */ | ||
| 1027 | const void *privid; | ||
| 1028 | |||
| 1029 | struct ieee80211_supported_band *bands[IEEE80211_NUM_BANDS]; | ||
| 1030 | |||
| 1031 | /* Lets us get back the wiphy on the callback */ | ||
| 1032 | int (*reg_notifier)(struct wiphy *wiphy, | ||
| 1033 | struct regulatory_request *request); | ||
| 1034 | |||
| 1035 | /* fields below are read-only, assigned by cfg80211 */ | ||
| 1036 | |||
| 1037 | const struct ieee80211_regdomain *regd; | ||
| 1038 | |||
| 1039 | /* the item in /sys/class/ieee80211/ points to this, | ||
| 1040 | * you need use set_wiphy_dev() (see below) */ | ||
| 1041 | struct device dev; | ||
| 1042 | |||
| 1043 | /* dir in debugfs: ieee80211/<wiphyname> */ | ||
| 1044 | struct dentry *debugfsdir; | ||
| 1045 | |||
| 1046 | char priv[0] __attribute__((__aligned__(NETDEV_ALIGN))); | ||
| 1047 | }; | ||
| 1048 | |||
| 1049 | /** | ||
| 1050 | * wiphy_priv - return priv from wiphy | ||
| 1051 | * | ||
| 1052 | * @wiphy: the wiphy whose priv pointer to return | ||
| 1053 | */ | ||
| 1054 | static inline void *wiphy_priv(struct wiphy *wiphy) | ||
| 1055 | { | ||
| 1056 | BUG_ON(!wiphy); | ||
| 1057 | return &wiphy->priv; | ||
| 1058 | } | ||
| 1059 | |||
| 1060 | /** | ||
| 1061 | * set_wiphy_dev - set device pointer for wiphy | ||
| 1062 | * | ||
| 1063 | * @wiphy: The wiphy whose device to bind | ||
| 1064 | * @dev: The device to parent it to | ||
| 1065 | */ | ||
| 1066 | static inline void set_wiphy_dev(struct wiphy *wiphy, struct device *dev) | ||
| 1067 | { | ||
| 1068 | wiphy->dev.parent = dev; | ||
| 1069 | } | ||
| 1070 | |||
| 1071 | /** | ||
| 1072 | * wiphy_dev - get wiphy dev pointer | ||
| 1073 | * | ||
| 1074 | * @wiphy: The wiphy whose device struct to look up | ||
| 1075 | */ | ||
| 1076 | static inline struct device *wiphy_dev(struct wiphy *wiphy) | ||
| 1077 | { | ||
| 1078 | return wiphy->dev.parent; | ||
| 1079 | } | ||
| 1080 | |||
| 1081 | /** | ||
| 1082 | * wiphy_name - get wiphy name | ||
| 1083 | * | ||
| 1084 | * @wiphy: The wiphy whose name to return | ||
| 1085 | */ | ||
| 1086 | static inline const char *wiphy_name(struct wiphy *wiphy) | ||
| 1087 | { | ||
| 1088 | return dev_name(&wiphy->dev); | ||
| 1089 | } | ||
| 1090 | |||
| 1091 | /** | ||
| 1092 | * wiphy_new - create a new wiphy for use with cfg80211 | ||
| 1093 | * | ||
| 1094 | * @ops: The configuration operations for this device | ||
| 1095 | * @sizeof_priv: The size of the private area to allocate | ||
| 1096 | * | ||
| 1097 | * Create a new wiphy and associate the given operations with it. | ||
| 1098 | * @sizeof_priv bytes are allocated for private use. | ||
| 1099 | * | ||
| 1100 | * The returned pointer must be assigned to each netdev's | ||
| 1101 | * ieee80211_ptr for proper operation. | ||
| 1102 | */ | ||
| 1103 | struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv); | ||
| 1104 | |||
| 1105 | /** | ||
| 1106 | * wiphy_register - register a wiphy with cfg80211 | ||
| 1107 | * | ||
| 1108 | * @wiphy: The wiphy to register. | ||
| 1109 | * | ||
| 1110 | * Returns a non-negative wiphy index or a negative error code. | ||
| 1111 | */ | ||
| 1112 | extern int wiphy_register(struct wiphy *wiphy); | ||
| 1113 | |||
| 1114 | /** | ||
| 1115 | * wiphy_unregister - deregister a wiphy from cfg80211 | ||
| 1116 | * | ||
| 1117 | * @wiphy: The wiphy to unregister. | ||
| 1118 | * | ||
| 1119 | * After this call, no more requests can be made with this priv | ||
| 1120 | * pointer, but the call may sleep to wait for an outstanding | ||
| 1121 | * request that is being handled. | ||
| 1122 | */ | ||
| 1123 | extern void wiphy_unregister(struct wiphy *wiphy); | ||
| 1124 | |||
| 1125 | /** | ||
| 1126 | * wiphy_free - free wiphy | ||
| 1127 | * | ||
| 1128 | * @wiphy: The wiphy to free | ||
| 1129 | */ | ||
| 1130 | extern void wiphy_free(struct wiphy *wiphy); | ||
| 1131 | |||
| 1132 | /** | ||
| 1133 | * struct wireless_dev - wireless per-netdev state | ||
| 1134 | * | ||
| 1135 | * This structure must be allocated by the driver/stack | ||
| 1136 | * that uses the ieee80211_ptr field in struct net_device | ||
| 1137 | * (this is intentional so it can be allocated along with | ||
| 1138 | * the netdev.) | ||
| 1139 | * | ||
| 1140 | * @wiphy: pointer to hardware description | ||
| 1141 | * @iftype: interface type | ||
| 1142 | * @list: (private) Used to collect the interfaces | ||
| 1143 | * @netdev: (private) Used to reference back to the netdev | ||
| 1144 | * @current_bss: (private) Used by the internal configuration code | ||
| 1145 | * @bssid: (private) Used by the internal configuration code | ||
| 1146 | * @ssid: (private) Used by the internal configuration code | ||
| 1147 | * @ssid_len: (private) Used by the internal configuration code | ||
| 1148 | * @wext: (private) Used by the internal wireless extensions compat code | ||
| 1149 | * @wext_bssid: (private) Used by the internal wireless extensions compat code | ||
| 1150 | */ | ||
| 1151 | struct wireless_dev { | ||
| 1152 | struct wiphy *wiphy; | ||
| 1153 | enum nl80211_iftype iftype; | ||
| 1154 | |||
| 1155 | /* private to the generic wireless code */ | ||
| 1156 | struct list_head list; | ||
| 1157 | struct net_device *netdev; | ||
| 1158 | |||
| 1159 | /* currently used for IBSS - might be rearranged in the future */ | ||
| 1160 | struct cfg80211_bss *current_bss; | ||
| 1161 | u8 bssid[ETH_ALEN]; | ||
| 1162 | u8 ssid[IEEE80211_MAX_SSID_LEN]; | ||
| 1163 | u8 ssid_len; | ||
| 1164 | |||
| 1165 | #ifdef CONFIG_WIRELESS_EXT | ||
| 1166 | /* wext data */ | ||
| 1167 | struct { | ||
| 1168 | struct cfg80211_ibss_params ibss; | ||
| 1169 | u8 bssid[ETH_ALEN]; | ||
| 1170 | s8 default_key, default_mgmt_key; | ||
| 1171 | } wext; | ||
| 1172 | #endif | ||
| 1173 | }; | ||
| 1174 | |||
| 1175 | /** | ||
| 1176 | * wdev_priv - return wiphy priv from wireless_dev | ||
| 1177 | * | ||
| 1178 | * @wdev: The wireless device whose wiphy's priv pointer to return | ||
| 1179 | */ | ||
| 1180 | static inline void *wdev_priv(struct wireless_dev *wdev) | ||
| 1181 | { | ||
| 1182 | BUG_ON(!wdev); | ||
| 1183 | return wiphy_priv(wdev->wiphy); | ||
| 1184 | } | ||
| 1185 | |||
| 1186 | /* | ||
| 1187 | * Utility functions | ||
| 1188 | */ | ||
| 1189 | |||
| 1190 | /** | ||
| 1191 | * ieee80211_channel_to_frequency - convert channel number to frequency | ||
| 1192 | */ | ||
| 1193 | extern int ieee80211_channel_to_frequency(int chan); | ||
| 1194 | |||
| 1195 | /** | ||
| 1196 | * ieee80211_frequency_to_channel - convert frequency to channel number | ||
| 1197 | */ | ||
| 1198 | extern int ieee80211_frequency_to_channel(int freq); | ||
| 1199 | |||
| 1200 | /* | ||
| 1201 | * Name indirection necessary because the ieee80211 code also has | ||
| 1202 | * a function named "ieee80211_get_channel", so if you include | ||
| 1203 | * cfg80211's header file you get cfg80211's version, if you try | ||
| 1204 | * to include both header files you'll (rightfully!) get a symbol | ||
| 1205 | * clash. | ||
| 1206 | */ | ||
| 1207 | extern struct ieee80211_channel *__ieee80211_get_channel(struct wiphy *wiphy, | ||
| 1208 | int freq); | ||
| 1209 | /** | ||
| 1210 | * ieee80211_get_channel - get channel struct from wiphy for specified frequency | ||
| 1211 | */ | ||
| 1212 | static inline struct ieee80211_channel * | ||
| 1213 | ieee80211_get_channel(struct wiphy *wiphy, int freq) | ||
| 1214 | { | ||
| 1215 | return __ieee80211_get_channel(wiphy, freq); | ||
| 1216 | } | ||
| 1217 | |||
| 1218 | /** | ||
| 1219 | * ieee80211_get_response_rate - get basic rate for a given rate | ||
| 1220 | * | ||
| 1221 | * @sband: the band to look for rates in | ||
| 1222 | * @basic_rates: bitmap of basic rates | ||
| 1223 | * @bitrate: the bitrate for which to find the basic rate | ||
| 1224 | * | ||
| 1225 | * This function returns the basic rate corresponding to a given | ||
| 1226 | * bitrate, that is the next lower bitrate contained in the basic | ||
| 1227 | * rate map, which is, for this function, given as a bitmap of | ||
| 1228 | * indices of rates in the band's bitrate table. | ||
| 1229 | */ | ||
| 1230 | struct ieee80211_rate * | ||
| 1231 | ieee80211_get_response_rate(struct ieee80211_supported_band *sband, | ||
| 1232 | u32 basic_rates, int bitrate); | ||
| 1233 | |||
| 1234 | /* | ||
| 1235 | * Radiotap parsing functions -- for controlled injection support | ||
| 1236 | * | ||
| 1237 | * Implemented in net/wireless/radiotap.c | ||
| 1238 | * Documentation in Documentation/networking/radiotap-headers.txt | ||
| 1239 | */ | ||
| 1240 | |||
| 1241 | /** | ||
| 1242 | * struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args | ||
| 1243 | * @rtheader: pointer to the radiotap header we are walking through | ||
| 1244 | * @max_length: length of radiotap header in cpu byte ordering | ||
| 1245 | * @this_arg_index: IEEE80211_RADIOTAP_... index of current arg | ||
| 1246 | * @this_arg: pointer to current radiotap arg | ||
| 1247 | * @arg_index: internal next argument index | ||
| 1248 | * @arg: internal next argument pointer | ||
| 1249 | * @next_bitmap: internal pointer to next present u32 | ||
| 1250 | * @bitmap_shifter: internal shifter for curr u32 bitmap, b0 set == arg present | ||
| 1251 | */ | ||
| 1252 | |||
| 1253 | struct ieee80211_radiotap_iterator { | ||
| 1254 | struct ieee80211_radiotap_header *rtheader; | ||
| 1255 | int max_length; | ||
| 1256 | int this_arg_index; | ||
| 1257 | u8 *this_arg; | ||
| 1258 | |||
| 1259 | int arg_index; | ||
| 1260 | u8 *arg; | ||
| 1261 | __le32 *next_bitmap; | ||
| 1262 | u32 bitmap_shifter; | ||
| 1263 | }; | ||
| 1264 | |||
| 1265 | extern int ieee80211_radiotap_iterator_init( | ||
| 1266 | struct ieee80211_radiotap_iterator *iterator, | ||
| 1267 | struct ieee80211_radiotap_header *radiotap_header, | ||
| 1268 | int max_length); | ||
| 1269 | |||
| 1270 | extern int ieee80211_radiotap_iterator_next( | ||
| 1271 | struct ieee80211_radiotap_iterator *iterator); | ||
| 1272 | |||
| 1273 | extern const unsigned char rfc1042_header[6]; | ||
| 1274 | extern const unsigned char bridge_tunnel_header[6]; | ||
| 1275 | |||
| 1276 | /** | ||
| 1277 | * ieee80211_get_hdrlen_from_skb - get header length from data | ||
| 1278 | * | ||
| 1279 | * Given an skb with a raw 802.11 header at the data pointer this function | ||
| 1280 | * returns the 802.11 header length in bytes (not including encryption | ||
| 1281 | * headers). If the data in the sk_buff is too short to contain a valid 802.11 | ||
| 1282 | * header the function returns 0. | ||
| 1283 | * | ||
| 1284 | * @skb: the frame | ||
| 1285 | */ | ||
| 1286 | unsigned int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb); | ||
| 1287 | |||
| 1288 | /** | ||
| 1289 | * ieee80211_hdrlen - get header length in bytes from frame control | ||
| 1290 | * @fc: frame control field in little-endian format | ||
| 1291 | */ | ||
| 1292 | unsigned int ieee80211_hdrlen(__le16 fc); | ||
| 1293 | |||
| 1294 | /** | ||
| 1295 | * ieee80211_data_to_8023 - convert an 802.11 data frame to 802.3 | ||
| 1296 | * @skb: the 802.11 data frame | ||
| 1297 | * @addr: the device MAC address | ||
| 1298 | * @iftype: the virtual interface type | ||
| 1299 | */ | ||
| 1300 | int ieee80211_data_to_8023(struct sk_buff *skb, u8 *addr, | ||
| 1301 | enum nl80211_iftype iftype); | ||
| 1302 | |||
| 1303 | /** | ||
| 1304 | * ieee80211_data_from_8023 - convert an 802.3 frame to 802.11 | ||
| 1305 | * @skb: the 802.3 frame | ||
| 1306 | * @addr: the device MAC address | ||
| 1307 | * @iftype: the virtual interface type | ||
| 1308 | * @bssid: the network bssid (used only for iftype STATION and ADHOC) | ||
| 1309 | * @qos: build 802.11 QoS data frame | ||
| 1310 | */ | ||
| 1311 | int ieee80211_data_from_8023(struct sk_buff *skb, u8 *addr, | ||
| 1312 | enum nl80211_iftype iftype, u8 *bssid, bool qos); | ||
| 1313 | |||
| 1314 | /** | ||
| 1315 | * cfg80211_classify8021d - determine the 802.1p/1d tag for a data frame | ||
| 1316 | * @skb: the data frame | ||
| 1317 | */ | ||
| 1318 | unsigned int cfg80211_classify8021d(struct sk_buff *skb); | ||
| 1319 | |||
| 1320 | /* | ||
| 1321 | * Regulatory helper functions for wiphys | ||
| 1322 | */ | ||
| 1323 | |||
| 1324 | /** | ||
| 1325 | * regulatory_hint - driver hint to the wireless core a regulatory domain | ||
| 1326 | * @wiphy: the wireless device giving the hint (used only for reporting | ||
| 1327 | * conflicts) | ||
| 1328 | * @alpha2: the ISO/IEC 3166 alpha2 the driver claims its regulatory domain | ||
| 1329 | * should be in. If @rd is set this should be NULL. Note that if you | ||
| 1330 | * set this to NULL you should still set rd->alpha2 to some accepted | ||
| 1331 | * alpha2. | ||
| 1332 | * | ||
| 1333 | * Wireless drivers can use this function to hint to the wireless core | ||
| 1334 | * what it believes should be the current regulatory domain by | ||
| 1335 | * giving it an ISO/IEC 3166 alpha2 country code it knows its regulatory | ||
| 1336 | * domain should be in or by providing a completely build regulatory domain. | ||
| 1337 | * If the driver provides an ISO/IEC 3166 alpha2 userspace will be queried | ||
| 1338 | * for a regulatory domain structure for the respective country. | ||
| 1339 | * | ||
| 1340 | * The wiphy must have been registered to cfg80211 prior to this call. | ||
| 1341 | * For cfg80211 drivers this means you must first use wiphy_register(), | ||
| 1342 | * for mac80211 drivers you must first use ieee80211_register_hw(). | ||
| 1343 | * | ||
| 1344 | * Drivers should check the return value, its possible you can get | ||
| 1345 | * an -ENOMEM. | ||
| 1346 | */ | ||
| 1347 | extern int regulatory_hint(struct wiphy *wiphy, const char *alpha2); | ||
| 1348 | |||
| 1349 | /** | ||
| 1350 | * regulatory_hint_11d - hints a country IE as a regulatory domain | ||
| 1351 | * @wiphy: the wireless device giving the hint (used only for reporting | ||
| 1352 | * conflicts) | ||
| 1353 | * @country_ie: pointer to the country IE | ||
| 1354 | * @country_ie_len: length of the country IE | ||
| 1355 | * | ||
| 1356 | * We will intersect the rd with the what CRDA tells us should apply | ||
| 1357 | * for the alpha2 this country IE belongs to, this prevents APs from | ||
| 1358 | * sending us incorrect or outdated information against a country. | ||
| 1359 | */ | ||
| 1360 | extern void regulatory_hint_11d(struct wiphy *wiphy, | ||
| 1361 | u8 *country_ie, | ||
| 1362 | u8 country_ie_len); | ||
| 1363 | /** | ||
| 1364 | * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain | ||
| 1365 | * @wiphy: the wireless device we want to process the regulatory domain on | ||
| 1366 | * @regd: the custom regulatory domain to use for this wiphy | ||
| 1367 | * | ||
| 1368 | * Drivers can sometimes have custom regulatory domains which do not apply | ||
| 1369 | * to a specific country. Drivers can use this to apply such custom regulatory | ||
| 1370 | * domains. This routine must be called prior to wiphy registration. The | ||
| 1371 | * custom regulatory domain will be trusted completely and as such previous | ||
| 1372 | * default channel settings will be disregarded. If no rule is found for a | ||
| 1373 | * channel on the regulatory domain the channel will be disabled. | ||
| 1374 | */ | ||
| 1375 | extern void wiphy_apply_custom_regulatory( | ||
| 1376 | struct wiphy *wiphy, | ||
| 1377 | const struct ieee80211_regdomain *regd); | ||
| 1378 | |||
| 1379 | /** | ||
| 1380 | * freq_reg_info - get regulatory information for the given frequency | ||
| 1381 | * @wiphy: the wiphy for which we want to process this rule for | ||
| 1382 | * @center_freq: Frequency in KHz for which we want regulatory information for | ||
| 1383 | * @desired_bw_khz: the desired max bandwidth you want to use per | ||
| 1384 | * channel. Note that this is still 20 MHz if you want to use HT40 | ||
| 1385 | * as HT40 makes use of two channels for its 40 MHz width bandwidth. | ||
| 1386 | * If set to 0 we'll assume you want the standard 20 MHz. | ||
| 1387 | * @reg_rule: the regulatory rule which we have for this frequency | ||
| 1388 | * | ||
| 1389 | * Use this function to get the regulatory rule for a specific frequency on | ||
| 1390 | * a given wireless device. If the device has a specific regulatory domain | ||
| 1391 | * it wants to follow we respect that unless a country IE has been received | ||
| 1392 | * and processed already. | ||
| 1393 | * | ||
| 1394 | * Returns 0 if it was able to find a valid regulatory rule which does | ||
| 1395 | * apply to the given center_freq otherwise it returns non-zero. It will | ||
| 1396 | * also return -ERANGE if we determine the given center_freq does not even have | ||
| 1397 | * a regulatory rule for a frequency range in the center_freq's band. See | ||
| 1398 | * freq_in_rule_band() for our current definition of a band -- this is purely | ||
| 1399 | * subjective and right now its 802.11 specific. | ||
| 1400 | */ | ||
| 1401 | extern int freq_reg_info(struct wiphy *wiphy, | ||
| 1402 | u32 center_freq, | ||
| 1403 | u32 desired_bw_khz, | ||
| 1404 | const struct ieee80211_reg_rule **reg_rule); | ||
| 1405 | |||
| 1406 | /* | ||
| 1407 | * Temporary wext handlers & helper functions | ||
| 1408 | * | ||
| 1409 | * In the future cfg80211 will simply assign the entire wext handler | ||
| 1410 | * structure to netdevs it manages, but we're not there yet. | ||
| 1411 | */ | ||
| 824 | int cfg80211_wext_giwname(struct net_device *dev, | 1412 | int cfg80211_wext_giwname(struct net_device *dev, |
| 825 | struct iw_request_info *info, | 1413 | struct iw_request_info *info, |
| 826 | char *name, char *extra); | 1414 | char *name, char *extra); |
| @@ -834,9 +1422,72 @@ int cfg80211_wext_siwscan(struct net_device *dev, | |||
| 834 | int cfg80211_wext_giwscan(struct net_device *dev, | 1422 | int cfg80211_wext_giwscan(struct net_device *dev, |
| 835 | struct iw_request_info *info, | 1423 | struct iw_request_info *info, |
| 836 | struct iw_point *data, char *extra); | 1424 | struct iw_point *data, char *extra); |
| 1425 | int cfg80211_wext_siwmlme(struct net_device *dev, | ||
| 1426 | struct iw_request_info *info, | ||
| 1427 | struct iw_point *data, char *extra); | ||
| 837 | int cfg80211_wext_giwrange(struct net_device *dev, | 1428 | int cfg80211_wext_giwrange(struct net_device *dev, |
| 838 | struct iw_request_info *info, | 1429 | struct iw_request_info *info, |
| 839 | struct iw_point *data, char *extra); | 1430 | struct iw_point *data, char *extra); |
| 1431 | int cfg80211_ibss_wext_siwfreq(struct net_device *dev, | ||
| 1432 | struct iw_request_info *info, | ||
| 1433 | struct iw_freq *freq, char *extra); | ||
| 1434 | int cfg80211_ibss_wext_giwfreq(struct net_device *dev, | ||
| 1435 | struct iw_request_info *info, | ||
| 1436 | struct iw_freq *freq, char *extra); | ||
| 1437 | int cfg80211_ibss_wext_siwessid(struct net_device *dev, | ||
| 1438 | struct iw_request_info *info, | ||
| 1439 | struct iw_point *data, char *ssid); | ||
| 1440 | int cfg80211_ibss_wext_giwessid(struct net_device *dev, | ||
| 1441 | struct iw_request_info *info, | ||
| 1442 | struct iw_point *data, char *ssid); | ||
| 1443 | int cfg80211_ibss_wext_siwap(struct net_device *dev, | ||
| 1444 | struct iw_request_info *info, | ||
| 1445 | struct sockaddr *ap_addr, char *extra); | ||
| 1446 | int cfg80211_ibss_wext_giwap(struct net_device *dev, | ||
| 1447 | struct iw_request_info *info, | ||
| 1448 | struct sockaddr *ap_addr, char *extra); | ||
| 1449 | |||
| 1450 | struct ieee80211_channel *cfg80211_wext_freq(struct wiphy *wiphy, | ||
| 1451 | struct iw_freq *freq); | ||
| 1452 | |||
| 1453 | int cfg80211_wext_siwrts(struct net_device *dev, | ||
| 1454 | struct iw_request_info *info, | ||
| 1455 | struct iw_param *rts, char *extra); | ||
| 1456 | int cfg80211_wext_giwrts(struct net_device *dev, | ||
| 1457 | struct iw_request_info *info, | ||
| 1458 | struct iw_param *rts, char *extra); | ||
| 1459 | int cfg80211_wext_siwfrag(struct net_device *dev, | ||
| 1460 | struct iw_request_info *info, | ||
| 1461 | struct iw_param *frag, char *extra); | ||
| 1462 | int cfg80211_wext_giwfrag(struct net_device *dev, | ||
| 1463 | struct iw_request_info *info, | ||
| 1464 | struct iw_param *frag, char *extra); | ||
| 1465 | int cfg80211_wext_siwretry(struct net_device *dev, | ||
| 1466 | struct iw_request_info *info, | ||
| 1467 | struct iw_param *retry, char *extra); | ||
| 1468 | int cfg80211_wext_giwretry(struct net_device *dev, | ||
| 1469 | struct iw_request_info *info, | ||
| 1470 | struct iw_param *retry, char *extra); | ||
| 1471 | int cfg80211_wext_siwencodeext(struct net_device *dev, | ||
| 1472 | struct iw_request_info *info, | ||
| 1473 | struct iw_point *erq, char *extra); | ||
| 1474 | int cfg80211_wext_siwencode(struct net_device *dev, | ||
| 1475 | struct iw_request_info *info, | ||
| 1476 | struct iw_point *erq, char *keybuf); | ||
| 1477 | int cfg80211_wext_giwencode(struct net_device *dev, | ||
| 1478 | struct iw_request_info *info, | ||
| 1479 | struct iw_point *erq, char *keybuf); | ||
| 1480 | int cfg80211_wext_siwtxpower(struct net_device *dev, | ||
| 1481 | struct iw_request_info *info, | ||
| 1482 | union iwreq_data *data, char *keybuf); | ||
| 1483 | int cfg80211_wext_giwtxpower(struct net_device *dev, | ||
| 1484 | struct iw_request_info *info, | ||
| 1485 | union iwreq_data *data, char *keybuf); | ||
| 1486 | |||
| 1487 | /* | ||
| 1488 | * callbacks for asynchronous cfg80211 methods, notification | ||
| 1489 | * functions and BSS handling helpers | ||
| 1490 | */ | ||
| 840 | 1491 | ||
| 841 | /** | 1492 | /** |
| 842 | * cfg80211_scan_done - notify that scan finished | 1493 | * cfg80211_scan_done - notify that scan finished |
| @@ -864,6 +1515,14 @@ cfg80211_inform_bss_frame(struct wiphy *wiphy, | |||
| 864 | struct ieee80211_mgmt *mgmt, size_t len, | 1515 | struct ieee80211_mgmt *mgmt, size_t len, |
| 865 | s32 signal, gfp_t gfp); | 1516 | s32 signal, gfp_t gfp); |
| 866 | 1517 | ||
| 1518 | struct cfg80211_bss* | ||
| 1519 | cfg80211_inform_bss(struct wiphy *wiphy, | ||
| 1520 | struct ieee80211_channel *channel, | ||
| 1521 | const u8 *bssid, | ||
| 1522 | u64 timestamp, u16 capability, u16 beacon_interval, | ||
| 1523 | const u8 *ie, size_t ielen, | ||
| 1524 | s32 signal, gfp_t gfp); | ||
| 1525 | |||
| 867 | struct cfg80211_bss *cfg80211_get_bss(struct wiphy *wiphy, | 1526 | struct cfg80211_bss *cfg80211_get_bss(struct wiphy *wiphy, |
| 868 | struct ieee80211_channel *channel, | 1527 | struct ieee80211_channel *channel, |
| 869 | const u8 *bssid, | 1528 | const u8 *bssid, |
| @@ -883,6 +1542,7 @@ struct cfg80211_bss *cfg80211_get_mesh(struct wiphy *wiphy, | |||
| 883 | const u8 *meshid, size_t meshidlen, | 1542 | const u8 *meshid, size_t meshidlen, |
| 884 | const u8 *meshcfg); | 1543 | const u8 *meshcfg); |
| 885 | void cfg80211_put_bss(struct cfg80211_bss *bss); | 1544 | void cfg80211_put_bss(struct cfg80211_bss *bss); |
| 1545 | |||
| 886 | /** | 1546 | /** |
| 887 | * cfg80211_unlink_bss - unlink BSS from internal data structures | 1547 | * cfg80211_unlink_bss - unlink BSS from internal data structures |
| 888 | * @wiphy: the wiphy | 1548 | * @wiphy: the wiphy |
| @@ -902,44 +1562,62 @@ void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss); | |||
| 902 | * @len: length of the frame data | 1562 | * @len: length of the frame data |
| 903 | * | 1563 | * |
| 904 | * This function is called whenever an authentication has been processed in | 1564 | * This function is called whenever an authentication has been processed in |
| 905 | * station mode. | 1565 | * station mode. The driver is required to call either this function or |
| 1566 | * cfg80211_send_auth_timeout() to indicate the result of cfg80211_ops::auth() | ||
| 1567 | * call. | ||
| 906 | */ | 1568 | */ |
| 907 | void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len); | 1569 | void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len); |
| 908 | 1570 | ||
| 909 | /** | 1571 | /** |
| 1572 | * cfg80211_send_auth_timeout - notification of timed out authentication | ||
| 1573 | * @dev: network device | ||
| 1574 | * @addr: The MAC address of the device with which the authentication timed out | ||
| 1575 | */ | ||
| 1576 | void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr); | ||
| 1577 | |||
| 1578 | /** | ||
| 910 | * cfg80211_send_rx_assoc - notification of processed association | 1579 | * cfg80211_send_rx_assoc - notification of processed association |
| 911 | * @dev: network device | 1580 | * @dev: network device |
| 912 | * @buf: (re)association response frame (header + body) | 1581 | * @buf: (re)association response frame (header + body) |
| 913 | * @len: length of the frame data | 1582 | * @len: length of the frame data |
| 914 | * | 1583 | * |
| 915 | * This function is called whenever a (re)association response has been | 1584 | * This function is called whenever a (re)association response has been |
| 916 | * processed in station mode. | 1585 | * processed in station mode. The driver is required to call either this |
| 1586 | * function or cfg80211_send_assoc_timeout() to indicate the result of | ||
| 1587 | * cfg80211_ops::assoc() call. | ||
| 917 | */ | 1588 | */ |
| 918 | void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len); | 1589 | void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len); |
| 919 | 1590 | ||
| 920 | /** | 1591 | /** |
| 921 | * cfg80211_send_rx_deauth - notification of processed deauthentication | 1592 | * cfg80211_send_assoc_timeout - notification of timed out association |
| 1593 | * @dev: network device | ||
| 1594 | * @addr: The MAC address of the device with which the association timed out | ||
| 1595 | */ | ||
| 1596 | void cfg80211_send_assoc_timeout(struct net_device *dev, const u8 *addr); | ||
| 1597 | |||
| 1598 | /** | ||
| 1599 | * cfg80211_send_deauth - notification of processed deauthentication | ||
| 922 | * @dev: network device | 1600 | * @dev: network device |
| 923 | * @buf: deauthentication frame (header + body) | 1601 | * @buf: deauthentication frame (header + body) |
| 924 | * @len: length of the frame data | 1602 | * @len: length of the frame data |
| 925 | * | 1603 | * |
| 926 | * This function is called whenever deauthentication has been processed in | 1604 | * This function is called whenever deauthentication has been processed in |
| 927 | * station mode. | 1605 | * station mode. This includes both received deauthentication frames and |
| 1606 | * locally generated ones. | ||
| 928 | */ | 1607 | */ |
| 929 | void cfg80211_send_rx_deauth(struct net_device *dev, const u8 *buf, | 1608 | void cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len); |
| 930 | size_t len); | ||
| 931 | 1609 | ||
| 932 | /** | 1610 | /** |
| 933 | * cfg80211_send_rx_disassoc - notification of processed disassociation | 1611 | * cfg80211_send_disassoc - notification of processed disassociation |
| 934 | * @dev: network device | 1612 | * @dev: network device |
| 935 | * @buf: disassociation response frame (header + body) | 1613 | * @buf: disassociation response frame (header + body) |
| 936 | * @len: length of the frame data | 1614 | * @len: length of the frame data |
| 937 | * | 1615 | * |
| 938 | * This function is called whenever disassociation has been processed in | 1616 | * This function is called whenever disassociation has been processed in |
| 939 | * station mode. | 1617 | * station mode. This includes both received disassociation frames and locally |
| 1618 | * generated ones. | ||
| 940 | */ | 1619 | */ |
| 941 | void cfg80211_send_rx_disassoc(struct net_device *dev, const u8 *buf, | 1620 | void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len); |
| 942 | size_t len); | ||
| 943 | 1621 | ||
| 944 | /** | 1622 | /** |
| 945 | * cfg80211_hold_bss - exclude bss from expiration | 1623 | * cfg80211_hold_bss - exclude bss from expiration |
| @@ -958,4 +1636,55 @@ void cfg80211_hold_bss(struct cfg80211_bss *bss); | |||
| 958 | */ | 1636 | */ |
| 959 | void cfg80211_unhold_bss(struct cfg80211_bss *bss); | 1637 | void cfg80211_unhold_bss(struct cfg80211_bss *bss); |
| 960 | 1638 | ||
| 1639 | /** | ||
| 1640 | * cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP) | ||
| 1641 | * @dev: network device | ||
| 1642 | * @addr: The source MAC address of the frame | ||
| 1643 | * @key_type: The key type that the received frame used | ||
| 1644 | * @key_id: Key identifier (0..3) | ||
| 1645 | * @tsc: The TSC value of the frame that generated the MIC failure (6 octets) | ||
| 1646 | * | ||
| 1647 | * This function is called whenever the local MAC detects a MIC failure in a | ||
| 1648 | * received frame. This matches with MLME-MICHAELMICFAILURE.indication() | ||
| 1649 | * primitive. | ||
| 1650 | */ | ||
| 1651 | void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, | ||
| 1652 | enum nl80211_key_type key_type, int key_id, | ||
| 1653 | const u8 *tsc); | ||
| 1654 | |||
| 1655 | /** | ||
| 1656 | * cfg80211_ibss_joined - notify cfg80211 that device joined an IBSS | ||
| 1657 | * | ||
| 1658 | * @dev: network device | ||
| 1659 | * @bssid: the BSSID of the IBSS joined | ||
| 1660 | * @gfp: allocation flags | ||
| 1661 | * | ||
| 1662 | * This function notifies cfg80211 that the device joined an IBSS or | ||
| 1663 | * switched to a different BSSID. Before this function can be called, | ||
| 1664 | * either a beacon has to have been received from the IBSS, or one of | ||
| 1665 | * the cfg80211_inform_bss{,_frame} functions must have been called | ||
| 1666 | * with the locally generated beacon -- this guarantees that there is | ||
| 1667 | * always a scan result for this IBSS. cfg80211 will handle the rest. | ||
| 1668 | */ | ||
| 1669 | void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp); | ||
| 1670 | |||
| 1671 | /** | ||
| 1672 | * wiphy_rfkill_set_hw_state - notify cfg80211 about hw block state | ||
| 1673 | * @wiphy: the wiphy | ||
| 1674 | * @blocked: block status | ||
| 1675 | */ | ||
| 1676 | void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked); | ||
| 1677 | |||
| 1678 | /** | ||
| 1679 | * wiphy_rfkill_start_polling - start polling rfkill | ||
| 1680 | * @wiphy: the wiphy | ||
| 1681 | */ | ||
| 1682 | void wiphy_rfkill_start_polling(struct wiphy *wiphy); | ||
| 1683 | |||
| 1684 | /** | ||
| 1685 | * wiphy_rfkill_stop_polling - stop polling rfkill | ||
| 1686 | * @wiphy: the wiphy | ||
| 1687 | */ | ||
| 1688 | void wiphy_rfkill_stop_polling(struct wiphy *wiphy); | ||
| 1689 | |||
| 961 | #endif /* __NET_CFG80211_H */ | 1690 | #endif /* __NET_CFG80211_H */ |
diff --git a/include/net/dst.h b/include/net/dst.h index 6be3b082a070..7fc409c19b37 100644 --- a/include/net/dst.h +++ b/include/net/dst.h | |||
| @@ -195,6 +195,12 @@ struct dst_entry * dst_clone(struct dst_entry * dst) | |||
| 195 | } | 195 | } |
| 196 | 196 | ||
| 197 | extern void dst_release(struct dst_entry *dst); | 197 | extern void dst_release(struct dst_entry *dst); |
| 198 | static inline void skb_dst_drop(struct sk_buff *skb) | ||
| 199 | { | ||
| 200 | if (skb->_skb_dst) | ||
| 201 | dst_release(skb_dst(skb)); | ||
| 202 | skb->_skb_dst = 0UL; | ||
| 203 | } | ||
| 198 | 204 | ||
| 199 | /* Children define the path of the packet through the | 205 | /* Children define the path of the packet through the |
| 200 | * Linux networking. Thus, destinations are stackable. | 206 | * Linux networking. Thus, destinations are stackable. |
| @@ -246,7 +252,7 @@ static inline void dst_negative_advice(struct dst_entry **dst_p) | |||
| 246 | 252 | ||
| 247 | static inline void dst_link_failure(struct sk_buff *skb) | 253 | static inline void dst_link_failure(struct sk_buff *skb) |
| 248 | { | 254 | { |
| 249 | struct dst_entry * dst = skb->dst; | 255 | struct dst_entry *dst = skb_dst(skb); |
| 250 | if (dst && dst->ops && dst->ops->link_failure) | 256 | if (dst && dst->ops && dst->ops->link_failure) |
| 251 | dst->ops->link_failure(skb); | 257 | dst->ops->link_failure(skb); |
| 252 | } | 258 | } |
| @@ -265,13 +271,13 @@ static inline void dst_set_expires(struct dst_entry *dst, int timeout) | |||
| 265 | /* Output packet to network from transport. */ | 271 | /* Output packet to network from transport. */ |
| 266 | static inline int dst_output(struct sk_buff *skb) | 272 | static inline int dst_output(struct sk_buff *skb) |
| 267 | { | 273 | { |
| 268 | return skb->dst->output(skb); | 274 | return skb_dst(skb)->output(skb); |
| 269 | } | 275 | } |
| 270 | 276 | ||
| 271 | /* Input packet from network to transport. */ | 277 | /* Input packet from network to transport. */ |
| 272 | static inline int dst_input(struct sk_buff *skb) | 278 | static inline int dst_input(struct sk_buff *skb) |
| 273 | { | 279 | { |
| 274 | return skb->dst->input(skb); | 280 | return skb_dst(skb)->input(skb); |
| 275 | } | 281 | } |
| 276 | 282 | ||
| 277 | static inline struct dst_entry *dst_check(struct dst_entry *dst, u32 cookie) | 283 | static inline struct dst_entry *dst_check(struct dst_entry *dst, u32 cookie) |
diff --git a/include/net/fib_rules.h b/include/net/fib_rules.h index c2bb5cae6515..ca4b2e840078 100644 --- a/include/net/fib_rules.h +++ b/include/net/fib_rules.h | |||
| @@ -48,14 +48,12 @@ struct fib_rules_ops | |||
| 48 | struct flowi *, int); | 48 | struct flowi *, int); |
| 49 | int (*configure)(struct fib_rule *, | 49 | int (*configure)(struct fib_rule *, |
| 50 | struct sk_buff *, | 50 | struct sk_buff *, |
| 51 | struct nlmsghdr *, | ||
| 52 | struct fib_rule_hdr *, | 51 | struct fib_rule_hdr *, |
| 53 | struct nlattr **); | 52 | struct nlattr **); |
| 54 | int (*compare)(struct fib_rule *, | 53 | int (*compare)(struct fib_rule *, |
| 55 | struct fib_rule_hdr *, | 54 | struct fib_rule_hdr *, |
| 56 | struct nlattr **); | 55 | struct nlattr **); |
| 57 | int (*fill)(struct fib_rule *, struct sk_buff *, | 56 | int (*fill)(struct fib_rule *, struct sk_buff *, |
| 58 | struct nlmsghdr *, | ||
| 59 | struct fib_rule_hdr *); | 57 | struct fib_rule_hdr *); |
| 60 | u32 (*default_pref)(struct fib_rules_ops *ops); | 58 | u32 (*default_pref)(struct fib_rules_ops *ops); |
| 61 | size_t (*nlmsg_payload)(struct fib_rule *); | 59 | size_t (*nlmsg_payload)(struct fib_rule *); |
diff --git a/include/net/genetlink.h b/include/net/genetlink.h index 747c255d1df0..1b0e3ee4ddd8 100644 --- a/include/net/genetlink.h +++ b/include/net/genetlink.h | |||
| @@ -88,6 +88,8 @@ struct genl_ops | |||
| 88 | }; | 88 | }; |
| 89 | 89 | ||
| 90 | extern int genl_register_family(struct genl_family *family); | 90 | extern int genl_register_family(struct genl_family *family); |
| 91 | extern int genl_register_family_with_ops(struct genl_family *family, | ||
| 92 | struct genl_ops *ops, size_t n_ops); | ||
| 91 | extern int genl_unregister_family(struct genl_family *family); | 93 | extern int genl_unregister_family(struct genl_family *family); |
| 92 | extern int genl_register_ops(struct genl_family *, struct genl_ops *ops); | 94 | extern int genl_register_ops(struct genl_family *, struct genl_ops *ops); |
| 93 | extern int genl_unregister_ops(struct genl_family *, struct genl_ops *ops); | 95 | extern int genl_unregister_ops(struct genl_family *, struct genl_ops *ops); |
diff --git a/include/net/ieee802154/af_ieee802154.h b/include/net/ieee802154/af_ieee802154.h new file mode 100644 index 000000000000..0d78605fb1a6 --- /dev/null +++ b/include/net/ieee802154/af_ieee802154.h | |||
| @@ -0,0 +1,60 @@ | |||
| 1 | /* | ||
| 2 | * IEEE 802.15.4 inteface for userspace | ||
| 3 | * | ||
| 4 | * Copyright 2007, 2008 Siemens AG | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 | ||
| 8 | * as published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License along | ||
| 16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 18 | * | ||
| 19 | * Written by: | ||
| 20 | * Sergey Lapin <slapin@ossfans.org> | ||
| 21 | * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | ||
| 22 | */ | ||
| 23 | |||
| 24 | #ifndef _AF_IEEE802154_H | ||
| 25 | #define _AF_IEEE802154_H | ||
| 26 | |||
| 27 | #include <linux/socket.h> /* for sa_family_t */ | ||
| 28 | |||
| 29 | enum { | ||
| 30 | IEEE802154_ADDR_NONE = 0x0, | ||
| 31 | /* RESERVED = 0x01, */ | ||
| 32 | IEEE802154_ADDR_SHORT = 0x2, /* 16-bit address + PANid */ | ||
| 33 | IEEE802154_ADDR_LONG = 0x3, /* 64-bit address + PANid */ | ||
| 34 | }; | ||
| 35 | |||
| 36 | /* address length, octets */ | ||
| 37 | #define IEEE802154_ADDR_LEN 8 | ||
| 38 | |||
| 39 | struct ieee802154_addr { | ||
| 40 | int addr_type; | ||
| 41 | u16 pan_id; | ||
| 42 | union { | ||
| 43 | u8 hwaddr[IEEE802154_ADDR_LEN]; | ||
| 44 | u16 short_addr; | ||
| 45 | }; | ||
| 46 | }; | ||
| 47 | |||
| 48 | #define IEEE802154_PANID_BROADCAST 0xffff | ||
| 49 | #define IEEE802154_ADDR_BROADCAST 0xffff | ||
| 50 | #define IEEE802154_ADDR_UNDEF 0xfffe | ||
| 51 | |||
| 52 | struct sockaddr_ieee802154 { | ||
| 53 | sa_family_t family; /* AF_IEEE802154 */ | ||
| 54 | struct ieee802154_addr addr; | ||
| 55 | }; | ||
| 56 | |||
| 57 | /* master device */ | ||
| 58 | #define IEEE802154_SIOC_ADD_SLAVE (SIOCDEVPRIVATE + 0) | ||
| 59 | |||
| 60 | #endif | ||
diff --git a/include/net/ieee802154/mac_def.h b/include/net/ieee802154/mac_def.h new file mode 100644 index 000000000000..8cb684635650 --- /dev/null +++ b/include/net/ieee802154/mac_def.h | |||
| @@ -0,0 +1,160 @@ | |||
| 1 | /* | ||
| 2 | * IEEE802.15.4-2003 specification | ||
| 3 | * | ||
| 4 | * Copyright (C) 2007, 2008 Siemens AG | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 | ||
| 8 | * as published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License along | ||
| 16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 18 | * | ||
| 19 | * Written by: | ||
| 20 | * Pavel Smolenskiy <pavel.smolenskiy@gmail.com> | ||
| 21 | * Maxim Gorbachyov <maxim.gorbachev@siemens.com> | ||
| 22 | * Maxim Osipov <maxim.osipov@siemens.com> | ||
| 23 | * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | ||
| 24 | */ | ||
| 25 | |||
| 26 | #ifndef IEEE802154_MAC_DEF_H | ||
| 27 | #define IEEE802154_MAC_DEF_H | ||
| 28 | |||
| 29 | #define IEEE802154_FC_TYPE_BEACON 0x0 /* Frame is beacon */ | ||
| 30 | #define IEEE802154_FC_TYPE_DATA 0x1 /* Frame is data */ | ||
| 31 | #define IEEE802154_FC_TYPE_ACK 0x2 /* Frame is acknowledgment */ | ||
| 32 | #define IEEE802154_FC_TYPE_MAC_CMD 0x3 /* Frame is MAC command */ | ||
| 33 | |||
| 34 | #define IEEE802154_FC_TYPE_SHIFT 0 | ||
| 35 | #define IEEE802154_FC_TYPE_MASK ((1 << 3) - 1) | ||
| 36 | #define IEEE802154_FC_TYPE(x) ((x & IEEE802154_FC_TYPE_MASK) >> IEEE802154_FC_TYPE_SHIFT) | ||
| 37 | #define IEEE802154_FC_SET_TYPE(v, x) do { \ | ||
| 38 | v = (((v) & ~IEEE802154_FC_TYPE_MASK) | \ | ||
| 39 | (((x) << IEEE802154_FC_TYPE_SHIFT) & IEEE802154_FC_TYPE_MASK)); \ | ||
| 40 | } while (0) | ||
| 41 | |||
| 42 | #define IEEE802154_FC_SECEN (1 << 3) | ||
| 43 | #define IEEE802154_FC_FRPEND (1 << 4) | ||
| 44 | #define IEEE802154_FC_ACK_REQ (1 << 5) | ||
| 45 | #define IEEE802154_FC_INTRA_PAN (1 << 6) | ||
| 46 | |||
| 47 | #define IEEE802154_FC_SAMODE_SHIFT 14 | ||
| 48 | #define IEEE802154_FC_SAMODE_MASK (3 << IEEE802154_FC_SAMODE_SHIFT) | ||
| 49 | #define IEEE802154_FC_DAMODE_SHIFT 10 | ||
| 50 | #define IEEE802154_FC_DAMODE_MASK (3 << IEEE802154_FC_DAMODE_SHIFT) | ||
| 51 | |||
| 52 | #define IEEE802154_FC_SAMODE(x) \ | ||
| 53 | (((x) & IEEE802154_FC_SAMODE_MASK) >> IEEE802154_FC_SAMODE_SHIFT) | ||
| 54 | |||
| 55 | #define IEEE802154_FC_DAMODE(x) \ | ||
| 56 | (((x) & IEEE802154_FC_DAMODE_MASK) >> IEEE802154_FC_DAMODE_SHIFT) | ||
| 57 | |||
| 58 | |||
| 59 | /* MAC's Command Frames Identifiers */ | ||
| 60 | #define IEEE802154_CMD_ASSOCIATION_REQ 0x01 | ||
| 61 | #define IEEE802154_CMD_ASSOCIATION_RESP 0x02 | ||
| 62 | #define IEEE802154_CMD_DISASSOCIATION_NOTIFY 0x03 | ||
| 63 | #define IEEE802154_CMD_DATA_REQ 0x04 | ||
| 64 | #define IEEE802154_CMD_PANID_CONFLICT_NOTIFY 0x05 | ||
| 65 | #define IEEE802154_CMD_ORPHAN_NOTIFY 0x06 | ||
| 66 | #define IEEE802154_CMD_BEACON_REQ 0x07 | ||
| 67 | #define IEEE802154_CMD_COORD_REALIGN_NOTIFY 0x08 | ||
| 68 | #define IEEE802154_CMD_GTS_REQ 0x09 | ||
| 69 | |||
| 70 | /* | ||
| 71 | * The return values of MAC operations | ||
| 72 | */ | ||
| 73 | enum { | ||
| 74 | /* | ||
| 75 | * The requested operation was completed successfully. | ||
| 76 | * For a transmission request, this value indicates | ||
| 77 | * a successful transmission. | ||
| 78 | */ | ||
| 79 | IEEE802154_SUCCESS = 0x0, | ||
| 80 | |||
| 81 | /* The beacon was lost following a synchronization request. */ | ||
| 82 | IEEE802154_BEACON_LOSS = 0xe0, | ||
| 83 | /* | ||
| 84 | * A transmission could not take place due to activity on the | ||
| 85 | * channel, i.e., the CSMA-CA mechanism has failed. | ||
| 86 | */ | ||
| 87 | IEEE802154_CHNL_ACCESS_FAIL = 0xe1, | ||
| 88 | /* The GTS request has been denied by the PAN coordinator. */ | ||
| 89 | IEEE802154_DENINED = 0xe2, | ||
| 90 | /* The attempt to disable the transceiver has failed. */ | ||
| 91 | IEEE802154_DISABLE_TRX_FAIL = 0xe3, | ||
| 92 | /* | ||
| 93 | * The received frame induces a failed security check according to | ||
| 94 | * the security suite. | ||
| 95 | */ | ||
| 96 | IEEE802154_FAILED_SECURITY_CHECK = 0xe4, | ||
| 97 | /* | ||
| 98 | * The frame resulting from secure processing has a length that is | ||
| 99 | * greater than aMACMaxFrameSize. | ||
| 100 | */ | ||
| 101 | IEEE802154_FRAME_TOO_LONG = 0xe5, | ||
| 102 | /* | ||
| 103 | * The requested GTS transmission failed because the specified GTS | ||
| 104 | * either did not have a transmit GTS direction or was not defined. | ||
| 105 | */ | ||
| 106 | IEEE802154_INVALID_GTS = 0xe6, | ||
| 107 | /* | ||
| 108 | * A request to purge an MSDU from the transaction queue was made using | ||
| 109 | * an MSDU handle that was not found in the transaction table. | ||
| 110 | */ | ||
| 111 | IEEE802154_INVALID_HANDLE = 0xe7, | ||
| 112 | /* A parameter in the primitive is out of the valid range.*/ | ||
| 113 | IEEE802154_INVALID_PARAMETER = 0xe8, | ||
| 114 | /* No acknowledgment was received after aMaxFrameRetries. */ | ||
| 115 | IEEE802154_NO_ACK = 0xe9, | ||
| 116 | /* A scan operation failed to find any network beacons.*/ | ||
| 117 | IEEE802154_NO_BEACON = 0xea, | ||
| 118 | /* No response data were available following a request. */ | ||
| 119 | IEEE802154_NO_DATA = 0xeb, | ||
| 120 | /* The operation failed because a short address was not allocated. */ | ||
| 121 | IEEE802154_NO_SHORT_ADDRESS = 0xec, | ||
| 122 | /* | ||
| 123 | * A receiver enable request was unsuccessful because it could not be | ||
| 124 | * completed within the CAP. | ||
| 125 | */ | ||
| 126 | IEEE802154_OUT_OF_CAP = 0xed, | ||
| 127 | /* | ||
| 128 | * A PAN identifier conflict has been detected and communicated to the | ||
| 129 | * PAN coordinator. | ||
| 130 | */ | ||
| 131 | IEEE802154_PANID_CONFLICT = 0xee, | ||
| 132 | /* A coordinator realignment command has been received. */ | ||
| 133 | IEEE802154_REALIGMENT = 0xef, | ||
| 134 | /* The transaction has expired and its information discarded. */ | ||
| 135 | IEEE802154_TRANSACTION_EXPIRED = 0xf0, | ||
| 136 | /* There is no capacity to store the transaction. */ | ||
| 137 | IEEE802154_TRANSACTION_OVERFLOW = 0xf1, | ||
| 138 | /* | ||
| 139 | * The transceiver was in the transmitter enabled state when the | ||
| 140 | * receiver was requested to be enabled. | ||
| 141 | */ | ||
| 142 | IEEE802154_TX_ACTIVE = 0xf2, | ||
| 143 | /* The appropriate key is not available in the ACL. */ | ||
| 144 | IEEE802154_UNAVAILABLE_KEY = 0xf3, | ||
| 145 | /* | ||
| 146 | * A SET/GET request was issued with the identifier of a PIB attribute | ||
| 147 | * that is not supported. | ||
| 148 | */ | ||
| 149 | IEEE802154_UNSUPPORTED_ATTR = 0xf4, | ||
| 150 | /* | ||
| 151 | * A request to perform a scan operation failed because the MLME was | ||
| 152 | * in the process of performing a previously initiated scan operation. | ||
| 153 | */ | ||
| 154 | IEEE802154_SCAN_IN_PROGRESS = 0xfc, | ||
| 155 | }; | ||
| 156 | |||
| 157 | |||
| 158 | #endif | ||
| 159 | |||
| 160 | |||
diff --git a/include/net/ieee802154/netdevice.h b/include/net/ieee802154/netdevice.h new file mode 100644 index 000000000000..e2506af3e7c8 --- /dev/null +++ b/include/net/ieee802154/netdevice.h | |||
| @@ -0,0 +1,115 @@ | |||
| 1 | /* | ||
| 2 | * An interface between IEEE802.15.4 device and rest of the kernel. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2007, 2008, 2009 Siemens AG | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 | ||
| 8 | * as published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License along | ||
| 16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 18 | * | ||
| 19 | * Written by: | ||
| 20 | * Pavel Smolenskiy <pavel.smolenskiy@gmail.com> | ||
| 21 | * Maxim Gorbachyov <maxim.gorbachev@siemens.com> | ||
| 22 | * Maxim Osipov <maxim.osipov@siemens.com> | ||
| 23 | * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | ||
| 24 | */ | ||
| 25 | |||
| 26 | #ifndef IEEE802154_NETDEVICE_H | ||
| 27 | #define IEEE802154_NETDEVICE_H | ||
| 28 | |||
| 29 | /* | ||
| 30 | * A control block of skb passed between the ARPHRD_IEEE802154 device | ||
| 31 | * and other stack parts. | ||
| 32 | */ | ||
| 33 | struct ieee802154_mac_cb { | ||
| 34 | u8 lqi; | ||
| 35 | struct ieee802154_addr sa; | ||
| 36 | struct ieee802154_addr da; | ||
| 37 | u8 flags; | ||
| 38 | u8 seq; | ||
| 39 | }; | ||
| 40 | |||
| 41 | static inline struct ieee802154_mac_cb *mac_cb(struct sk_buff *skb) | ||
| 42 | { | ||
| 43 | return (struct ieee802154_mac_cb *)skb->cb; | ||
| 44 | } | ||
| 45 | |||
| 46 | #define MAC_CB_FLAG_TYPEMASK ((1 << 3) - 1) | ||
| 47 | |||
| 48 | #define MAC_CB_FLAG_ACKREQ (1 << 3) | ||
| 49 | #define MAC_CB_FLAG_SECEN (1 << 4) | ||
| 50 | #define MAC_CB_FLAG_INTRAPAN (1 << 5) | ||
| 51 | |||
| 52 | static inline int mac_cb_is_ackreq(struct sk_buff *skb) | ||
| 53 | { | ||
| 54 | return mac_cb(skb)->flags & MAC_CB_FLAG_ACKREQ; | ||
| 55 | } | ||
| 56 | |||
| 57 | static inline int mac_cb_is_secen(struct sk_buff *skb) | ||
| 58 | { | ||
| 59 | return mac_cb(skb)->flags & MAC_CB_FLAG_SECEN; | ||
| 60 | } | ||
| 61 | |||
| 62 | static inline int mac_cb_is_intrapan(struct sk_buff *skb) | ||
| 63 | { | ||
| 64 | return mac_cb(skb)->flags & MAC_CB_FLAG_INTRAPAN; | ||
| 65 | } | ||
| 66 | |||
| 67 | static inline int mac_cb_type(struct sk_buff *skb) | ||
| 68 | { | ||
| 69 | return mac_cb(skb)->flags & MAC_CB_FLAG_TYPEMASK; | ||
| 70 | } | ||
| 71 | |||
| 72 | #define IEEE802154_MAC_SCAN_ED 0 | ||
| 73 | #define IEEE802154_MAC_SCAN_ACTIVE 1 | ||
| 74 | #define IEEE802154_MAC_SCAN_PASSIVE 2 | ||
| 75 | #define IEEE802154_MAC_SCAN_ORPHAN 3 | ||
| 76 | |||
| 77 | /* | ||
| 78 | * This should be located at net_device->ml_priv | ||
| 79 | */ | ||
| 80 | struct ieee802154_mlme_ops { | ||
| 81 | int (*assoc_req)(struct net_device *dev, | ||
| 82 | struct ieee802154_addr *addr, | ||
| 83 | u8 channel, u8 cap); | ||
| 84 | int (*assoc_resp)(struct net_device *dev, | ||
| 85 | struct ieee802154_addr *addr, | ||
| 86 | u16 short_addr, u8 status); | ||
| 87 | int (*disassoc_req)(struct net_device *dev, | ||
| 88 | struct ieee802154_addr *addr, | ||
| 89 | u8 reason); | ||
| 90 | int (*start_req)(struct net_device *dev, | ||
| 91 | struct ieee802154_addr *addr, | ||
| 92 | u8 channel, u8 bcn_ord, u8 sf_ord, | ||
| 93 | u8 pan_coord, u8 blx, u8 coord_realign); | ||
| 94 | int (*scan_req)(struct net_device *dev, | ||
| 95 | u8 type, u32 channels, u8 duration); | ||
| 96 | |||
| 97 | /* | ||
| 98 | * FIXME: these should become the part of PIB/MIB interface. | ||
| 99 | * However we still don't have IB interface of any kind | ||
| 100 | */ | ||
| 101 | u16 (*get_pan_id)(struct net_device *dev); | ||
| 102 | u16 (*get_short_addr)(struct net_device *dev); | ||
| 103 | u8 (*get_dsn)(struct net_device *dev); | ||
| 104 | u8 (*get_bsn)(struct net_device *dev); | ||
| 105 | }; | ||
| 106 | |||
| 107 | static inline struct ieee802154_mlme_ops *ieee802154_mlme_ops( | ||
| 108 | struct net_device *dev) | ||
| 109 | { | ||
| 110 | return dev->ml_priv; | ||
| 111 | } | ||
| 112 | |||
| 113 | #endif | ||
| 114 | |||
| 115 | |||
diff --git a/include/net/ieee802154/nl802154.h b/include/net/ieee802154/nl802154.h new file mode 100644 index 000000000000..78efcdf52b59 --- /dev/null +++ b/include/net/ieee802154/nl802154.h | |||
| @@ -0,0 +1,41 @@ | |||
| 1 | /* | ||
| 2 | * nl802154.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2007, 2008, 2009 Siemens AG | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 | ||
| 8 | * as published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License along | ||
| 16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 18 | * | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef IEEE802154_NL_H | ||
| 22 | #define IEEE802154_NL_H | ||
| 23 | |||
| 24 | struct net_device; | ||
| 25 | struct ieee802154_addr; | ||
| 26 | |||
| 27 | int ieee802154_nl_assoc_indic(struct net_device *dev, | ||
| 28 | struct ieee802154_addr *addr, u8 cap); | ||
| 29 | int ieee802154_nl_assoc_confirm(struct net_device *dev, | ||
| 30 | u16 short_addr, u8 status); | ||
| 31 | int ieee802154_nl_disassoc_indic(struct net_device *dev, | ||
| 32 | struct ieee802154_addr *addr, u8 reason); | ||
| 33 | int ieee802154_nl_disassoc_confirm(struct net_device *dev, | ||
| 34 | u8 status); | ||
| 35 | int ieee802154_nl_scan_confirm(struct net_device *dev, | ||
| 36 | u8 status, u8 scan_type, u32 unscanned, | ||
| 37 | u8 *edl/*, struct list_head *pan_desc_list */); | ||
| 38 | int ieee802154_nl_beacon_indic(struct net_device *dev, u16 panid, | ||
| 39 | u16 coord_addr); | ||
| 40 | |||
| 41 | #endif | ||
diff --git a/include/net/inet6_hashtables.h b/include/net/inet6_hashtables.h index f74665d7bea8..22c73a77cd99 100644 --- a/include/net/inet6_hashtables.h +++ b/include/net/inet6_hashtables.h | |||
| @@ -100,7 +100,7 @@ static inline struct sock *__inet6_lookup_skb(struct inet_hashinfo *hashinfo, | |||
| 100 | 100 | ||
| 101 | if (unlikely(sk = skb_steal_sock(skb))) | 101 | if (unlikely(sk = skb_steal_sock(skb))) |
| 102 | return sk; | 102 | return sk; |
| 103 | else return __inet6_lookup(dev_net(skb->dst->dev), hashinfo, | 103 | else return __inet6_lookup(dev_net(skb_dst(skb)->dev), hashinfo, |
| 104 | &ipv6_hdr(skb)->saddr, sport, | 104 | &ipv6_hdr(skb)->saddr, sport, |
| 105 | &ipv6_hdr(skb)->daddr, ntohs(dport), | 105 | &ipv6_hdr(skb)->daddr, ntohs(dport), |
| 106 | inet6_iif(skb)); | 106 | inet6_iif(skb)); |
diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h index a44e2248b2ef..d522dcf3031a 100644 --- a/include/net/inet_hashtables.h +++ b/include/net/inet_hashtables.h | |||
| @@ -385,7 +385,7 @@ static inline struct sock *__inet_lookup_skb(struct inet_hashinfo *hashinfo, | |||
| 385 | if (unlikely(sk = skb_steal_sock(skb))) | 385 | if (unlikely(sk = skb_steal_sock(skb))) |
| 386 | return sk; | 386 | return sk; |
| 387 | else | 387 | else |
| 388 | return __inet_lookup(dev_net(skb->dst->dev), hashinfo, | 388 | return __inet_lookup(dev_net(skb_dst(skb)->dev), hashinfo, |
| 389 | iph->saddr, sport, | 389 | iph->saddr, sport, |
| 390 | iph->daddr, dport, inet_iif(skb)); | 390 | iph->daddr, dport, inet_iif(skb)); |
| 391 | } | 391 | } |
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h index de0ecc71cf03..20a6957af870 100644 --- a/include/net/inet_sock.h +++ b/include/net/inet_sock.h | |||
| @@ -130,7 +130,8 @@ struct inet_sock { | |||
| 130 | freebind:1, | 130 | freebind:1, |
| 131 | hdrincl:1, | 131 | hdrincl:1, |
| 132 | mc_loop:1, | 132 | mc_loop:1, |
| 133 | transparent:1; | 133 | transparent:1, |
| 134 | mc_all:1; | ||
| 134 | int mc_index; | 135 | int mc_index; |
| 135 | __be32 mc_addr; | 136 | __be32 mc_addr; |
| 136 | struct ip_mc_socklist *mc_list; | 137 | struct ip_mc_socklist *mc_list; |
diff --git a/include/net/ip.h b/include/net/ip.h index 4ac7577f98d0..72c36926c26d 100644 --- a/include/net/ip.h +++ b/include/net/ip.h | |||
| @@ -168,7 +168,10 @@ struct ipv4_config | |||
| 168 | extern struct ipv4_config ipv4_config; | 168 | extern struct ipv4_config ipv4_config; |
| 169 | #define IP_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.ip_statistics, field) | 169 | #define IP_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.ip_statistics, field) |
| 170 | #define IP_INC_STATS_BH(net, field) SNMP_INC_STATS_BH((net)->mib.ip_statistics, field) | 170 | #define IP_INC_STATS_BH(net, field) SNMP_INC_STATS_BH((net)->mib.ip_statistics, field) |
| 171 | #define IP_ADD_STATS(net, field, val) SNMP_ADD_STATS((net)->mib.ip_statistics, field, val) | ||
| 171 | #define IP_ADD_STATS_BH(net, field, val) SNMP_ADD_STATS_BH((net)->mib.ip_statistics, field, val) | 172 | #define IP_ADD_STATS_BH(net, field, val) SNMP_ADD_STATS_BH((net)->mib.ip_statistics, field, val) |
| 173 | #define IP_UPD_PO_STATS(net, field, val) SNMP_UPD_PO_STATS((net)->mib.ip_statistics, field, val) | ||
| 174 | #define IP_UPD_PO_STATS_BH(net, field, val) SNMP_UPD_PO_STATS_BH((net)->mib.ip_statistics, field, val) | ||
| 172 | #define NET_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.net_statistics, field) | 175 | #define NET_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.net_statistics, field) |
| 173 | #define NET_INC_STATS_BH(net, field) SNMP_INC_STATS_BH((net)->mib.net_statistics, field) | 176 | #define NET_INC_STATS_BH(net, field) SNMP_INC_STATS_BH((net)->mib.net_statistics, field) |
| 174 | #define NET_INC_STATS_USER(net, field) SNMP_INC_STATS_USER((net)->mib.net_statistics, field) | 177 | #define NET_INC_STATS_USER(net, field) SNMP_INC_STATS_USER((net)->mib.net_statistics, field) |
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h index 5f53db7e4e57..0e1b8aebaff8 100644 --- a/include/net/ip6_route.h +++ b/include/net/ip6_route.h | |||
| @@ -142,7 +142,7 @@ static inline void ip6_dst_store(struct sock *sk, struct dst_entry *dst, | |||
| 142 | 142 | ||
| 143 | static inline int ipv6_unicast_destination(struct sk_buff *skb) | 143 | static inline int ipv6_unicast_destination(struct sk_buff *skb) |
| 144 | { | 144 | { |
| 145 | struct rt6_info *rt = (struct rt6_info *) skb->dst; | 145 | struct rt6_info *rt = (struct rt6_info *) skb_dst(skb); |
| 146 | 146 | ||
| 147 | return rt->rt6i_flags & RTF_LOCAL; | 147 | return rt->rt6i_flags & RTF_LOCAL; |
| 148 | } | 148 | } |
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h index 8b12667f7a2b..ef91fe924ba4 100644 --- a/include/net/ip_fib.h +++ b/include/net/ip_fib.h | |||
| @@ -124,14 +124,12 @@ struct fib_result_nl { | |||
| 124 | #ifdef CONFIG_IP_ROUTE_MULTIPATH | 124 | #ifdef CONFIG_IP_ROUTE_MULTIPATH |
| 125 | 125 | ||
| 126 | #define FIB_RES_NH(res) ((res).fi->fib_nh[(res).nh_sel]) | 126 | #define FIB_RES_NH(res) ((res).fi->fib_nh[(res).nh_sel]) |
| 127 | #define FIB_RES_RESET(res) ((res).nh_sel = 0) | ||
| 128 | 127 | ||
| 129 | #define FIB_TABLE_HASHSZ 2 | 128 | #define FIB_TABLE_HASHSZ 2 |
| 130 | 129 | ||
| 131 | #else /* CONFIG_IP_ROUTE_MULTIPATH */ | 130 | #else /* CONFIG_IP_ROUTE_MULTIPATH */ |
| 132 | 131 | ||
| 133 | #define FIB_RES_NH(res) ((res).fi->fib_nh[0]) | 132 | #define FIB_RES_NH(res) ((res).fi->fib_nh[0]) |
| 134 | #define FIB_RES_RESET(res) | ||
| 135 | 133 | ||
| 136 | #define FIB_TABLE_HASHSZ 256 | 134 | #define FIB_TABLE_HASHSZ 256 |
| 137 | 135 | ||
| @@ -145,7 +143,6 @@ struct fib_result_nl { | |||
| 145 | struct fib_table { | 143 | struct fib_table { |
| 146 | struct hlist_node tb_hlist; | 144 | struct hlist_node tb_hlist; |
| 147 | u32 tb_id; | 145 | u32 tb_id; |
| 148 | unsigned tb_stamp; | ||
| 149 | int tb_default; | 146 | int tb_default; |
| 150 | int (*tb_lookup)(struct fib_table *tb, const struct flowi *flp, struct fib_result *res); | 147 | int (*tb_lookup)(struct fib_table *tb, const struct flowi *flp, struct fib_result *res); |
| 151 | int (*tb_insert)(struct fib_table *, struct fib_config *); | 148 | int (*tb_insert)(struct fib_table *, struct fib_config *); |
diff --git a/include/net/ipip.h b/include/net/ipip.h index fdf9bd743705..5d3036fa1511 100644 --- a/include/net/ipip.h +++ b/include/net/ipip.h | |||
| @@ -28,11 +28,18 @@ struct ip_tunnel | |||
| 28 | unsigned int prl_count; /* # of entries in PRL */ | 28 | unsigned int prl_count; /* # of entries in PRL */ |
| 29 | }; | 29 | }; |
| 30 | 30 | ||
| 31 | /* ISATAP: default interval between RS in secondy */ | ||
| 32 | #define IPTUNNEL_RS_DEFAULT_DELAY (900) | ||
| 33 | |||
| 31 | struct ip_tunnel_prl_entry | 34 | struct ip_tunnel_prl_entry |
| 32 | { | 35 | { |
| 33 | struct ip_tunnel_prl_entry *next; | 36 | struct ip_tunnel_prl_entry *next; |
| 34 | __be32 addr; | 37 | __be32 addr; |
| 35 | u16 flags; | 38 | u16 flags; |
| 39 | unsigned long rs_delay; | ||
| 40 | struct timer_list rs_timer; | ||
| 41 | struct ip_tunnel *tunnel; | ||
| 42 | spinlock_t lock; | ||
| 36 | }; | 43 | }; |
| 37 | 44 | ||
| 38 | #define IPTUNNEL_XMIT() do { \ | 45 | #define IPTUNNEL_XMIT() do { \ |
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index c1f16fc49ade..f27fd83d67d8 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
| @@ -126,15 +126,28 @@ extern struct ctl_path net_ipv6_ctl_path[]; | |||
| 126 | SNMP_ADD_STATS##modifier((net)->mib.statname##_statistics, (field), (val));\ | 126 | SNMP_ADD_STATS##modifier((net)->mib.statname##_statistics, (field), (val));\ |
| 127 | }) | 127 | }) |
| 128 | 128 | ||
| 129 | #define _DEVUPD(net, statname, modifier, idev, field, val) \ | ||
| 130 | ({ \ | ||
| 131 | struct inet6_dev *_idev = (idev); \ | ||
| 132 | if (likely(_idev != NULL)) \ | ||
| 133 | SNMP_UPD_PO_STATS##modifier((_idev)->stats.statname, field, (val)); \ | ||
| 134 | SNMP_UPD_PO_STATS##modifier((net)->mib.statname##_statistics, field, (val));\ | ||
| 135 | }) | ||
| 136 | |||
| 129 | /* MIBs */ | 137 | /* MIBs */ |
| 130 | 138 | ||
| 131 | #define IP6_INC_STATS(net, idev,field) \ | 139 | #define IP6_INC_STATS(net, idev,field) \ |
| 132 | _DEVINC(net, ipv6, , idev, field) | 140 | _DEVINC(net, ipv6, , idev, field) |
| 133 | #define IP6_INC_STATS_BH(net, idev,field) \ | 141 | #define IP6_INC_STATS_BH(net, idev,field) \ |
| 134 | _DEVINC(net, ipv6, _BH, idev, field) | 142 | _DEVINC(net, ipv6, _BH, idev, field) |
| 143 | #define IP6_ADD_STATS(net, idev,field,val) \ | ||
| 144 | _DEVADD(net, ipv6, , idev, field, val) | ||
| 135 | #define IP6_ADD_STATS_BH(net, idev,field,val) \ | 145 | #define IP6_ADD_STATS_BH(net, idev,field,val) \ |
| 136 | _DEVADD(net, ipv6, _BH, idev, field, val) | 146 | _DEVADD(net, ipv6, _BH, idev, field, val) |
| 137 | 147 | #define IP6_UPD_PO_STATS(net, idev,field,val) \ | |
| 148 | _DEVUPD(net, ipv6, , idev, field, val) | ||
| 149 | #define IP6_UPD_PO_STATS_BH(net, idev,field,val) \ | ||
| 150 | _DEVUPD(net, ipv6, _BH, idev, field, val) | ||
| 138 | #define ICMP6_INC_STATS(net, idev, field) \ | 151 | #define ICMP6_INC_STATS(net, idev, field) \ |
| 139 | _DEVINC(net, icmpv6, , idev, field) | 152 | _DEVINC(net, icmpv6, , idev, field) |
| 140 | #define ICMP6_INC_STATS_BH(net, idev, field) \ | 153 | #define ICMP6_INC_STATS_BH(net, idev, field) \ |
diff --git a/include/net/iucv/af_iucv.h b/include/net/iucv/af_iucv.h index 85f80eadfa35..21ee49ffcbaf 100644 --- a/include/net/iucv/af_iucv.h +++ b/include/net/iucv/af_iucv.h | |||
| @@ -73,8 +73,17 @@ struct iucv_sock { | |||
| 73 | struct sk_buff_head backlog_skb_q; | 73 | struct sk_buff_head backlog_skb_q; |
| 74 | struct sock_msg_q message_q; | 74 | struct sock_msg_q message_q; |
| 75 | unsigned int send_tag; | 75 | unsigned int send_tag; |
| 76 | u8 flags; | ||
| 77 | u16 msglimit; | ||
| 76 | }; | 78 | }; |
| 77 | 79 | ||
| 80 | /* iucv socket options (SOL_IUCV) */ | ||
| 81 | #define SO_IPRMDATA_MSG 0x0080 /* send/recv IPRM_DATA msgs */ | ||
| 82 | #define SO_MSGLIMIT 0x1000 /* get/set IUCV MSGLIMIT */ | ||
| 83 | |||
| 84 | /* iucv related control messages (scm) */ | ||
| 85 | #define SCM_IUCV_TRGCLS 0x0001 /* target class control message */ | ||
| 86 | |||
| 78 | struct iucv_sock_list { | 87 | struct iucv_sock_list { |
| 79 | struct hlist_head head; | 88 | struct hlist_head head; |
| 80 | rwlock_t lock; | 89 | rwlock_t lock; |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 3b83a80e3fe0..c06104476973 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
| @@ -19,7 +19,6 @@ | |||
| 19 | #include <linux/wireless.h> | 19 | #include <linux/wireless.h> |
| 20 | #include <linux/device.h> | 20 | #include <linux/device.h> |
| 21 | #include <linux/ieee80211.h> | 21 | #include <linux/ieee80211.h> |
| 22 | #include <net/wireless.h> | ||
| 23 | #include <net/cfg80211.h> | 22 | #include <net/cfg80211.h> |
| 24 | 23 | ||
| 25 | /** | 24 | /** |
| @@ -74,22 +73,6 @@ | |||
| 74 | */ | 73 | */ |
| 75 | 74 | ||
| 76 | /** | 75 | /** |
| 77 | * struct ieee80211_ht_bss_info - describing BSS's HT characteristics | ||
| 78 | * | ||
| 79 | * This structure describes most essential parameters needed | ||
| 80 | * to describe 802.11n HT characteristics in a BSS. | ||
| 81 | * | ||
| 82 | * @primary_channel: channel number of primery channel | ||
| 83 | * @bss_cap: 802.11n's general BSS capabilities (e.g. channel width) | ||
| 84 | * @bss_op_mode: 802.11n's BSS operation modes (e.g. HT protection) | ||
| 85 | */ | ||
| 86 | struct ieee80211_ht_bss_info { | ||
| 87 | u8 primary_channel; | ||
| 88 | u8 bss_cap; /* use IEEE80211_HT_IE_CHA_ */ | ||
| 89 | u8 bss_op_mode; /* use IEEE80211_HT_IE_ */ | ||
| 90 | }; | ||
| 91 | |||
| 92 | /** | ||
| 93 | * enum ieee80211_max_queues - maximum number of queues | 76 | * enum ieee80211_max_queues - maximum number of queues |
| 94 | * | 77 | * |
| 95 | * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues. | 78 | * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues. |
| @@ -150,6 +133,13 @@ struct ieee80211_low_level_stats { | |||
| 150 | * @BSS_CHANGED_ERP_SLOT: slot timing changed | 133 | * @BSS_CHANGED_ERP_SLOT: slot timing changed |
| 151 | * @BSS_CHANGED_HT: 802.11n parameters changed | 134 | * @BSS_CHANGED_HT: 802.11n parameters changed |
| 152 | * @BSS_CHANGED_BASIC_RATES: Basic rateset changed | 135 | * @BSS_CHANGED_BASIC_RATES: Basic rateset changed |
| 136 | * @BSS_CHANGED_BEACON_INT: Beacon interval changed | ||
| 137 | * @BSS_CHANGED_BSSID: BSSID changed, for whatever | ||
| 138 | * reason (IBSS and managed mode) | ||
| 139 | * @BSS_CHANGED_BEACON: Beacon data changed, retrieve | ||
| 140 | * new beacon (beaconing modes) | ||
| 141 | * @BSS_CHANGED_BEACON_ENABLED: Beaconing should be | ||
| 142 | * enabled/disabled (beaconing modes) | ||
| 153 | */ | 143 | */ |
| 154 | enum ieee80211_bss_change { | 144 | enum ieee80211_bss_change { |
| 155 | BSS_CHANGED_ASSOC = 1<<0, | 145 | BSS_CHANGED_ASSOC = 1<<0, |
| @@ -158,14 +148,10 @@ enum ieee80211_bss_change { | |||
| 158 | BSS_CHANGED_ERP_SLOT = 1<<3, | 148 | BSS_CHANGED_ERP_SLOT = 1<<3, |
| 159 | BSS_CHANGED_HT = 1<<4, | 149 | BSS_CHANGED_HT = 1<<4, |
| 160 | BSS_CHANGED_BASIC_RATES = 1<<5, | 150 | BSS_CHANGED_BASIC_RATES = 1<<5, |
| 161 | }; | 151 | BSS_CHANGED_BEACON_INT = 1<<6, |
| 162 | 152 | BSS_CHANGED_BSSID = 1<<7, | |
| 163 | /** | 153 | BSS_CHANGED_BEACON = 1<<8, |
| 164 | * struct ieee80211_bss_ht_conf - BSS's changing HT configuration | 154 | BSS_CHANGED_BEACON_ENABLED = 1<<9, |
| 165 | * @operation_mode: HT operation mode (like in &struct ieee80211_ht_info) | ||
| 166 | */ | ||
| 167 | struct ieee80211_bss_ht_conf { | ||
| 168 | u16 operation_mode; | ||
| 169 | }; | 155 | }; |
| 170 | 156 | ||
| 171 | /** | 157 | /** |
| @@ -187,12 +173,16 @@ struct ieee80211_bss_ht_conf { | |||
| 187 | * @timestamp: beacon timestamp | 173 | * @timestamp: beacon timestamp |
| 188 | * @beacon_int: beacon interval | 174 | * @beacon_int: beacon interval |
| 189 | * @assoc_capability: capabilities taken from assoc resp | 175 | * @assoc_capability: capabilities taken from assoc resp |
| 190 | * @ht: BSS's HT configuration | ||
| 191 | * @basic_rates: bitmap of basic rates, each bit stands for an | 176 | * @basic_rates: bitmap of basic rates, each bit stands for an |
| 192 | * index into the rate table configured by the driver in | 177 | * index into the rate table configured by the driver in |
| 193 | * the current band. | 178 | * the current band. |
| 179 | * @bssid: The BSSID for this BSS | ||
| 180 | * @enable_beacon: whether beaconing should be enabled or not | ||
| 181 | * @ht_operation_mode: HT operation mode (like in &struct ieee80211_ht_info). | ||
| 182 | * This field is only valid when the channel type is one of the HT types. | ||
| 194 | */ | 183 | */ |
| 195 | struct ieee80211_bss_conf { | 184 | struct ieee80211_bss_conf { |
| 185 | const u8 *bssid; | ||
| 196 | /* association related data */ | 186 | /* association related data */ |
| 197 | bool assoc; | 187 | bool assoc; |
| 198 | u16 aid; | 188 | u16 aid; |
| @@ -200,12 +190,13 @@ struct ieee80211_bss_conf { | |||
| 200 | bool use_cts_prot; | 190 | bool use_cts_prot; |
| 201 | bool use_short_preamble; | 191 | bool use_short_preamble; |
| 202 | bool use_short_slot; | 192 | bool use_short_slot; |
| 193 | bool enable_beacon; | ||
| 203 | u8 dtim_period; | 194 | u8 dtim_period; |
| 204 | u16 beacon_int; | 195 | u16 beacon_int; |
| 205 | u16 assoc_capability; | 196 | u16 assoc_capability; |
| 206 | u64 timestamp; | 197 | u64 timestamp; |
| 207 | u32 basic_rates; | 198 | u32 basic_rates; |
| 208 | struct ieee80211_bss_ht_conf ht; | 199 | u16 ht_operation_mode; |
| 209 | }; | 200 | }; |
| 210 | 201 | ||
| 211 | /** | 202 | /** |
| @@ -248,6 +239,8 @@ struct ieee80211_bss_conf { | |||
| 248 | * @IEEE80211_TX_INTFL_NEED_TXPROCESSING: completely internal to mac80211, | 239 | * @IEEE80211_TX_INTFL_NEED_TXPROCESSING: completely internal to mac80211, |
| 249 | * used to indicate that a pending frame requires TX processing before | 240 | * used to indicate that a pending frame requires TX processing before |
| 250 | * it can be sent out. | 241 | * it can be sent out. |
| 242 | * @IEEE80211_TX_INTFL_RETRIED: completely internal to mac80211, | ||
| 243 | * used to indicate that a frame was already retried due to PS | ||
| 251 | */ | 244 | */ |
| 252 | enum mac80211_tx_control_flags { | 245 | enum mac80211_tx_control_flags { |
| 253 | IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), | 246 | IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), |
| @@ -265,6 +258,7 @@ enum mac80211_tx_control_flags { | |||
| 265 | IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12), | 258 | IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12), |
| 266 | IEEE80211_TX_INTFL_RCALGO = BIT(13), | 259 | IEEE80211_TX_INTFL_RCALGO = BIT(13), |
| 267 | IEEE80211_TX_INTFL_NEED_TXPROCESSING = BIT(14), | 260 | IEEE80211_TX_INTFL_NEED_TXPROCESSING = BIT(14), |
| 261 | IEEE80211_TX_INTFL_RETRIED = BIT(15), | ||
| 268 | }; | 262 | }; |
| 269 | 263 | ||
| 270 | /** | 264 | /** |
| @@ -518,52 +512,76 @@ struct ieee80211_rx_status { | |||
| 518 | * Flags to define PHY configuration options | 512 | * Flags to define PHY configuration options |
| 519 | * | 513 | * |
| 520 | * @IEEE80211_CONF_RADIOTAP: add radiotap header at receive time (if supported) | 514 | * @IEEE80211_CONF_RADIOTAP: add radiotap header at receive time (if supported) |
| 521 | * @IEEE80211_CONF_PS: Enable 802.11 power save mode | 515 | * @IEEE80211_CONF_PS: Enable 802.11 power save mode (managed mode only) |
| 516 | * @IEEE80211_CONF_IDLE: The device is running, but idle; if the flag is set | ||
| 517 | * the driver should be prepared to handle configuration requests but | ||
| 518 | * may turn the device off as much as possible. Typically, this flag will | ||
| 519 | * be set when an interface is set UP but not associated or scanning, but | ||
| 520 | * it can also be unset in that case when monitor interfaces are active. | ||
| 522 | */ | 521 | */ |
| 523 | enum ieee80211_conf_flags { | 522 | enum ieee80211_conf_flags { |
| 524 | IEEE80211_CONF_RADIOTAP = (1<<0), | 523 | IEEE80211_CONF_RADIOTAP = (1<<0), |
| 525 | IEEE80211_CONF_PS = (1<<1), | 524 | IEEE80211_CONF_PS = (1<<1), |
| 525 | IEEE80211_CONF_IDLE = (1<<2), | ||
| 526 | }; | 526 | }; |
| 527 | 527 | ||
| 528 | 528 | ||
| 529 | /** | 529 | /** |
| 530 | * enum ieee80211_conf_changed - denotes which configuration changed | 530 | * enum ieee80211_conf_changed - denotes which configuration changed |
| 531 | * | 531 | * |
| 532 | * @IEEE80211_CONF_CHANGE_RADIO_ENABLED: the value of radio_enabled changed | 532 | * @_IEEE80211_CONF_CHANGE_RADIO_ENABLED: DEPRECATED |
| 533 | * @IEEE80211_CONF_CHANGE_BEACON_INTERVAL: the beacon interval changed | ||
| 534 | * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed | 533 | * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed |
| 535 | * @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed | 534 | * @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed |
| 536 | * @IEEE80211_CONF_CHANGE_PS: the PS flag changed | 535 | * @IEEE80211_CONF_CHANGE_PS: the PS flag or dynamic PS timeout changed |
| 537 | * @IEEE80211_CONF_CHANGE_DYNPS_TIMEOUT: the dynamic PS timeout changed | ||
| 538 | * @IEEE80211_CONF_CHANGE_POWER: the TX power changed | 536 | * @IEEE80211_CONF_CHANGE_POWER: the TX power changed |
| 539 | * @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed | 537 | * @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed |
| 540 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed | 538 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed |
| 539 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed | ||
| 541 | */ | 540 | */ |
| 542 | enum ieee80211_conf_changed { | 541 | enum ieee80211_conf_changed { |
| 543 | IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0), | 542 | _IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0), |
| 544 | IEEE80211_CONF_CHANGE_BEACON_INTERVAL = BIT(1), | ||
| 545 | IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2), | 543 | IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2), |
| 546 | IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3), | 544 | IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3), |
| 547 | IEEE80211_CONF_CHANGE_PS = BIT(4), | 545 | IEEE80211_CONF_CHANGE_PS = BIT(4), |
| 548 | IEEE80211_CONF_CHANGE_DYNPS_TIMEOUT = BIT(5), | 546 | IEEE80211_CONF_CHANGE_POWER = BIT(5), |
| 549 | IEEE80211_CONF_CHANGE_POWER = BIT(6), | 547 | IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), |
| 550 | IEEE80211_CONF_CHANGE_CHANNEL = BIT(7), | 548 | IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), |
| 551 | IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(8), | 549 | IEEE80211_CONF_CHANGE_IDLE = BIT(8), |
| 552 | }; | 550 | }; |
| 553 | 551 | ||
| 552 | static inline __deprecated enum ieee80211_conf_changed | ||
| 553 | __IEEE80211_CONF_CHANGE_RADIO_ENABLED(void) | ||
| 554 | { | ||
| 555 | return _IEEE80211_CONF_CHANGE_RADIO_ENABLED; | ||
| 556 | } | ||
| 557 | #define IEEE80211_CONF_CHANGE_RADIO_ENABLED \ | ||
| 558 | __IEEE80211_CONF_CHANGE_RADIO_ENABLED() | ||
| 559 | |||
| 554 | /** | 560 | /** |
| 555 | * struct ieee80211_conf - configuration of the device | 561 | * struct ieee80211_conf - configuration of the device |
| 556 | * | 562 | * |
| 557 | * This struct indicates how the driver shall configure the hardware. | 563 | * This struct indicates how the driver shall configure the hardware. |
| 558 | * | 564 | * |
| 565 | * @flags: configuration flags defined above | ||
| 566 | * | ||
| 559 | * @radio_enabled: when zero, driver is required to switch off the radio. | 567 | * @radio_enabled: when zero, driver is required to switch off the radio. |
| 560 | * @beacon_int: beacon interval (TODO make interface config) | 568 | * @beacon_int: DEPRECATED, DO NOT USE |
| 569 | * | ||
| 561 | * @listen_interval: listen interval in units of beacon interval | 570 | * @listen_interval: listen interval in units of beacon interval |
| 562 | * @flags: configuration flags defined above | 571 | * @max_sleep_period: the maximum number of beacon intervals to sleep for |
| 572 | * before checking the beacon for a TIM bit (managed mode only); this | ||
| 573 | * value will be only achievable between DTIM frames, the hardware | ||
| 574 | * needs to check for the multicast traffic bit in DTIM beacons. | ||
| 575 | * This variable is valid only when the CONF_PS flag is set. | ||
| 576 | * @dynamic_ps_timeout: The dynamic powersave timeout (in ms), see the | ||
| 577 | * powersave documentation below. This variable is valid only when | ||
| 578 | * the CONF_PS flag is set. | ||
| 579 | * | ||
| 563 | * @power_level: requested transmit power (in dBm) | 580 | * @power_level: requested transmit power (in dBm) |
| 564 | * @dynamic_ps_timeout: dynamic powersave timeout (in ms) | 581 | * |
| 565 | * @channel: the channel to tune to | 582 | * @channel: the channel to tune to |
| 566 | * @channel_type: the channel (HT) type | 583 | * @channel_type: the channel (HT) type |
| 584 | * | ||
| 567 | * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame | 585 | * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame |
| 568 | * (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11, | 586 | * (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11, |
| 569 | * but actually means the number of transmissions not the number of retries | 587 | * but actually means the number of transmissions not the number of retries |
| @@ -572,12 +590,13 @@ enum ieee80211_conf_changed { | |||
| 572 | * number of transmissions not the number of retries | 590 | * number of transmissions not the number of retries |
| 573 | */ | 591 | */ |
| 574 | struct ieee80211_conf { | 592 | struct ieee80211_conf { |
| 575 | int beacon_int; | 593 | int __deprecated beacon_int; |
| 576 | u32 flags; | 594 | u32 flags; |
| 577 | int power_level, dynamic_ps_timeout; | 595 | int power_level, dynamic_ps_timeout; |
| 596 | int max_sleep_period; | ||
| 578 | 597 | ||
| 579 | u16 listen_interval; | 598 | u16 listen_interval; |
| 580 | bool radio_enabled; | 599 | bool __deprecated radio_enabled; |
| 581 | 600 | ||
| 582 | u8 long_frame_max_tx_count, short_frame_max_tx_count; | 601 | u8 long_frame_max_tx_count, short_frame_max_tx_count; |
| 583 | 602 | ||
| @@ -640,37 +659,6 @@ struct ieee80211_if_init_conf { | |||
| 640 | }; | 659 | }; |
| 641 | 660 | ||
| 642 | /** | 661 | /** |
| 643 | * enum ieee80211_if_conf_change - interface config change flags | ||
| 644 | * | ||
| 645 | * @IEEE80211_IFCC_BSSID: The BSSID changed. | ||
| 646 | * @IEEE80211_IFCC_BEACON: The beacon for this interface changed | ||
| 647 | * (currently AP and MESH only), use ieee80211_beacon_get(). | ||
| 648 | * @IEEE80211_IFCC_BEACON_ENABLED: The enable_beacon value changed. | ||
| 649 | */ | ||
| 650 | enum ieee80211_if_conf_change { | ||
| 651 | IEEE80211_IFCC_BSSID = BIT(0), | ||
| 652 | IEEE80211_IFCC_BEACON = BIT(1), | ||
| 653 | IEEE80211_IFCC_BEACON_ENABLED = BIT(2), | ||
| 654 | }; | ||
| 655 | |||
| 656 | /** | ||
| 657 | * struct ieee80211_if_conf - configuration of an interface | ||
| 658 | * | ||
| 659 | * @changed: parameters that have changed, see &enum ieee80211_if_conf_change. | ||
| 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. | ||
| 663 | * | ||
| 664 | * This structure is passed to the config_interface() callback of | ||
| 665 | * &struct ieee80211_hw. | ||
| 666 | */ | ||
| 667 | struct ieee80211_if_conf { | ||
| 668 | u32 changed; | ||
| 669 | const u8 *bssid; | ||
| 670 | bool enable_beacon; | ||
| 671 | }; | ||
| 672 | |||
| 673 | /** | ||
| 674 | * enum ieee80211_key_alg - key algorithm | 662 | * enum ieee80211_key_alg - key algorithm |
| 675 | * @ALG_WEP: WEP40 or WEP104 | 663 | * @ALG_WEP: WEP40 or WEP104 |
| 676 | * @ALG_TKIP: TKIP | 664 | * @ALG_TKIP: TKIP |
| @@ -685,16 +673,6 @@ enum ieee80211_key_alg { | |||
| 685 | }; | 673 | }; |
| 686 | 674 | ||
| 687 | /** | 675 | /** |
| 688 | * enum ieee80211_key_len - key length | ||
| 689 | * @LEN_WEP40: WEP 5-byte long key | ||
| 690 | * @LEN_WEP104: WEP 13-byte long key | ||
| 691 | */ | ||
| 692 | enum ieee80211_key_len { | ||
| 693 | LEN_WEP40 = 5, | ||
| 694 | LEN_WEP104 = 13, | ||
| 695 | }; | ||
| 696 | |||
| 697 | /** | ||
| 698 | * enum ieee80211_key_flags - key flags | 676 | * enum ieee80211_key_flags - key flags |
| 699 | * | 677 | * |
| 700 | * These flags are used for communication about keys between the driver | 678 | * These flags are used for communication about keys between the driver |
| @@ -1109,11 +1087,9 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw, | |||
| 1109 | * need software support for parsing the TIM bitmap. This is also supported | 1087 | * need software support for parsing the TIM bitmap. This is also supported |
| 1110 | * by mac80211 by combining the %IEEE80211_HW_SUPPORTS_PS and | 1088 | * by mac80211 by combining the %IEEE80211_HW_SUPPORTS_PS and |
| 1111 | * %IEEE80211_HW_PS_NULLFUNC_STACK flags. The hardware is of course still | 1089 | * %IEEE80211_HW_PS_NULLFUNC_STACK flags. The hardware is of course still |
| 1112 | * required to pass up beacons. Additionally, in this case, mac80211 will | 1090 | * required to pass up beacons. The hardware is still required to handle |
| 1113 | * wake up the hardware when multicast traffic is announced in the beacon. | 1091 | * waking up for multicast traffic; if it cannot the driver must handle that |
| 1114 | * | 1092 | * as best as it can, mac80211 is too slow. |
| 1115 | * FIXME: I don't think we can be fast enough in software when we want to | ||
| 1116 | * receive multicast traffic? | ||
| 1117 | * | 1093 | * |
| 1118 | * Dynamic powersave mode is an extension to normal powersave mode in which | 1094 | * 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 | 1095 | * the hardware stays awake for a user-specified period of time after sending |
| @@ -1134,11 +1110,53 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw, | |||
| 1134 | * way the host will only receive beacons where some relevant information | 1110 | * way the host will only receive beacons where some relevant information |
| 1135 | * (for example ERP protection or WMM settings) have changed. | 1111 | * (for example ERP protection or WMM settings) have changed. |
| 1136 | * | 1112 | * |
| 1137 | * Beacon filter support is informed with %IEEE80211_HW_BEACON_FILTER flag. | 1113 | * Beacon filter support is advertised with the %IEEE80211_HW_BEACON_FILTER |
| 1138 | * The driver needs to enable beacon filter support whenever power save is | 1114 | * hardware capability. The driver needs to enable beacon filter support |
| 1139 | * enabled, that is %IEEE80211_CONF_PS is set. When power save is enabled, | 1115 | * whenever power save is enabled, that is %IEEE80211_CONF_PS is set. When |
| 1140 | * the stack will not check for beacon miss at all and the driver needs to | 1116 | * power save is enabled, the stack will not check for beacon loss and the |
| 1141 | * notify about complete loss of beacons with ieee80211_beacon_loss(). | 1117 | * driver needs to notify about loss of beacons with ieee80211_beacon_loss(). |
| 1118 | * | ||
| 1119 | * The time (or number of beacons missed) until the firmware notifies the | ||
| 1120 | * driver of a beacon loss event (which in turn causes the driver to call | ||
| 1121 | * ieee80211_beacon_loss()) should be configurable and will be controlled | ||
| 1122 | * by mac80211 and the roaming algorithm in the future. | ||
| 1123 | * | ||
| 1124 | * Since there may be constantly changing information elements that nothing | ||
| 1125 | * in the software stack cares about, we will, in the future, have mac80211 | ||
| 1126 | * tell the driver which information elements are interesting in the sense | ||
| 1127 | * that we want to see changes in them. This will include | ||
| 1128 | * - a list of information element IDs | ||
| 1129 | * - a list of OUIs for the vendor information element | ||
| 1130 | * | ||
| 1131 | * Ideally, the hardware would filter out any beacons without changes in the | ||
| 1132 | * requested elements, but if it cannot support that it may, at the expense | ||
| 1133 | * of some efficiency, filter out only a subset. For example, if the device | ||
| 1134 | * doesn't support checking for OUIs it should pass up all changes in all | ||
| 1135 | * vendor information elements. | ||
| 1136 | * | ||
| 1137 | * Note that change, for the sake of simplification, also includes information | ||
| 1138 | * elements appearing or disappearing from the beacon. | ||
| 1139 | * | ||
| 1140 | * Some hardware supports an "ignore list" instead, just make sure nothing | ||
| 1141 | * that was requested is on the ignore list, and include commonly changing | ||
| 1142 | * information element IDs in the ignore list, for example 11 (BSS load) and | ||
| 1143 | * the various vendor-assigned IEs with unknown contents (128, 129, 133-136, | ||
| 1144 | * 149, 150, 155, 156, 173, 176, 178, 179, 219); for forward compatibility | ||
| 1145 | * it could also include some currently unused IDs. | ||
| 1146 | * | ||
| 1147 | * | ||
| 1148 | * In addition to these capabilities, hardware should support notifying the | ||
| 1149 | * host of changes in the beacon RSSI. This is relevant to implement roaming | ||
| 1150 | * when no traffic is flowing (when traffic is flowing we see the RSSI of | ||
| 1151 | * the received data packets). This can consist in notifying the host when | ||
| 1152 | * the RSSI changes significantly or when it drops below or rises above | ||
| 1153 | * configurable thresholds. In the future these thresholds will also be | ||
| 1154 | * configured by mac80211 (which gets them from userspace) to implement | ||
| 1155 | * them as the roaming algorithm requires. | ||
| 1156 | * | ||
| 1157 | * If the hardware cannot implement this, the driver should ask it to | ||
| 1158 | * periodically pass beacon frames to the host so that software can do the | ||
| 1159 | * signal strength threshold checking. | ||
| 1142 | */ | 1160 | */ |
| 1143 | 1161 | ||
| 1144 | /** | 1162 | /** |
| @@ -1298,10 +1316,6 @@ enum ieee80211_ampdu_mlme_action { | |||
| 1298 | * This function should never fail but returns a negative error code | 1316 | * This function should never fail but returns a negative error code |
| 1299 | * if it does. | 1317 | * if it does. |
| 1300 | * | 1318 | * |
| 1301 | * @config_interface: Handler for configuration requests related to interfaces | ||
| 1302 | * (e.g. BSSID changes.) | ||
| 1303 | * Returns a negative error code which will be seen in userspace. | ||
| 1304 | * | ||
| 1305 | * @bss_info_changed: Handler for configuration requests related to BSS | 1319 | * @bss_info_changed: Handler for configuration requests related to BSS |
| 1306 | * parameters that may vary during BSS's lifespan, and may affect low | 1320 | * parameters that may vary during BSS's lifespan, and may affect low |
| 1307 | * level driver (e.g. assoc/disassoc status, erp parameters). | 1321 | * level driver (e.g. assoc/disassoc status, erp parameters). |
| @@ -1330,11 +1344,14 @@ enum ieee80211_ampdu_mlme_action { | |||
| 1330 | * the scan state machine in stack. The scan must honour the channel | 1344 | * the scan state machine in stack. The scan must honour the channel |
| 1331 | * configuration done by the regulatory agent in the wiphy's | 1345 | * configuration done by the regulatory agent in the wiphy's |
| 1332 | * registered bands. The hardware (or the driver) needs to make sure | 1346 | * registered bands. The hardware (or the driver) needs to make sure |
| 1333 | * that power save is disabled. When the scan finishes, | 1347 | * that power save is disabled. |
| 1334 | * ieee80211_scan_completed() must be called; note that it also must | 1348 | * The @req ie/ie_len members are rewritten by mac80211 to contain the |
| 1335 | * be called when the scan cannot finish because the hardware is | 1349 | * entire IEs after the SSID, so that drivers need not look at these |
| 1336 | * turned off! Anything else is a bug! Returns a negative error code | 1350 | * at all but just send them after the SSID -- mac80211 includes the |
| 1337 | * which will be seen in userspace. | 1351 | * (extended) supported rates and HT information (where applicable). |
| 1352 | * When the scan finishes, ieee80211_scan_completed() must be called; | ||
| 1353 | * note that it also must be called when the scan cannot finish due to | ||
| 1354 | * any error unless this callback returned a negative error code. | ||
| 1338 | * | 1355 | * |
| 1339 | * @sw_scan_start: Notifier function that is called just before a software scan | 1356 | * @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. | 1357 | * is started. Can be NULL, if the driver doesn't need this notification. |
| @@ -1390,6 +1407,10 @@ enum ieee80211_ampdu_mlme_action { | |||
| 1390 | * is the first frame we expect to perform the action on. Notice | 1407 | * is the first frame we expect to perform the action on. Notice |
| 1391 | * that TX/RX_STOP can pass NULL for this parameter. | 1408 | * that TX/RX_STOP can pass NULL for this parameter. |
| 1392 | * Returns a negative error code on failure. | 1409 | * Returns a negative error code on failure. |
| 1410 | * | ||
| 1411 | * @rfkill_poll: Poll rfkill hardware state. If you need this, you also | ||
| 1412 | * need to set wiphy->rfkill_poll to %true before registration, | ||
| 1413 | * and need to call wiphy_rfkill_set_hw_state() in the callback. | ||
| 1393 | */ | 1414 | */ |
| 1394 | struct ieee80211_ops { | 1415 | struct ieee80211_ops { |
| 1395 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); | 1416 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); |
| @@ -1400,9 +1421,6 @@ struct ieee80211_ops { | |||
| 1400 | void (*remove_interface)(struct ieee80211_hw *hw, | 1421 | void (*remove_interface)(struct ieee80211_hw *hw, |
| 1401 | struct ieee80211_if_init_conf *conf); | 1422 | struct ieee80211_if_init_conf *conf); |
| 1402 | int (*config)(struct ieee80211_hw *hw, u32 changed); | 1423 | int (*config)(struct ieee80211_hw *hw, u32 changed); |
| 1403 | int (*config_interface)(struct ieee80211_hw *hw, | ||
| 1404 | struct ieee80211_vif *vif, | ||
| 1405 | struct ieee80211_if_conf *conf); | ||
| 1406 | void (*bss_info_changed)(struct ieee80211_hw *hw, | 1424 | void (*bss_info_changed)(struct ieee80211_hw *hw, |
| 1407 | struct ieee80211_vif *vif, | 1425 | struct ieee80211_vif *vif, |
| 1408 | struct ieee80211_bss_conf *info, | 1426 | struct ieee80211_bss_conf *info, |
| @@ -1441,6 +1459,8 @@ struct ieee80211_ops { | |||
| 1441 | int (*ampdu_action)(struct ieee80211_hw *hw, | 1459 | int (*ampdu_action)(struct ieee80211_hw *hw, |
| 1442 | enum ieee80211_ampdu_mlme_action action, | 1460 | enum ieee80211_ampdu_mlme_action action, |
| 1443 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); | 1461 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); |
| 1462 | |||
| 1463 | void (*rfkill_poll)(struct ieee80211_hw *hw); | ||
| 1444 | }; | 1464 | }; |
| 1445 | 1465 | ||
| 1446 | /** | 1466 | /** |
| @@ -1572,6 +1592,20 @@ void ieee80211_unregister_hw(struct ieee80211_hw *hw); | |||
| 1572 | */ | 1592 | */ |
| 1573 | void ieee80211_free_hw(struct ieee80211_hw *hw); | 1593 | void ieee80211_free_hw(struct ieee80211_hw *hw); |
| 1574 | 1594 | ||
| 1595 | /** | ||
| 1596 | * ieee80211_restart_hw - restart hardware completely | ||
| 1597 | * | ||
| 1598 | * Call this function when the hardware was restarted for some reason | ||
| 1599 | * (hardware error, ...) and the driver is unable to restore its state | ||
| 1600 | * by itself. mac80211 assumes that at this point the driver/hardware | ||
| 1601 | * is completely uninitialised and stopped, it starts the process by | ||
| 1602 | * calling the ->start() operation. The driver will need to reset all | ||
| 1603 | * internal state that it has prior to calling this function. | ||
| 1604 | * | ||
| 1605 | * @hw: the hardware to restart | ||
| 1606 | */ | ||
| 1607 | void ieee80211_restart_hw(struct ieee80211_hw *hw); | ||
| 1608 | |||
| 1575 | /* trick to avoid symbol clashes with the ieee80211 subsystem */ | 1609 | /* trick to avoid symbol clashes with the ieee80211 subsystem */ |
| 1576 | void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, | 1610 | void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, |
| 1577 | struct ieee80211_rx_status *status); | 1611 | struct ieee80211_rx_status *status); |
| @@ -1775,24 +1809,6 @@ struct sk_buff * | |||
| 1775 | ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif); | 1809 | ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif); |
| 1776 | 1810 | ||
| 1777 | /** | 1811 | /** |
| 1778 | * ieee80211_get_hdrlen_from_skb - get header length from data | ||
| 1779 | * | ||
| 1780 | * Given an skb with a raw 802.11 header at the data pointer this function | ||
| 1781 | * returns the 802.11 header length in bytes (not including encryption | ||
| 1782 | * headers). If the data in the sk_buff is too short to contain a valid 802.11 | ||
| 1783 | * header the function returns 0. | ||
| 1784 | * | ||
| 1785 | * @skb: the frame | ||
| 1786 | */ | ||
| 1787 | unsigned int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb); | ||
| 1788 | |||
| 1789 | /** | ||
| 1790 | * ieee80211_hdrlen - get header length in bytes from frame control | ||
| 1791 | * @fc: frame control field in little-endian format | ||
| 1792 | */ | ||
| 1793 | unsigned int ieee80211_hdrlen(__le16 fc); | ||
| 1794 | |||
| 1795 | /** | ||
| 1796 | * ieee80211_get_tkip_key - get a TKIP rc4 for skb | 1812 | * ieee80211_get_tkip_key - get a TKIP rc4 for skb |
| 1797 | * | 1813 | * |
| 1798 | * This function computes a TKIP rc4 key for an skb. It computes | 1814 | * This function computes a TKIP rc4 key for an skb. It computes |
diff --git a/include/net/netfilter/ipv4/nf_conntrack_icmp.h b/include/net/netfilter/ipv4/nf_conntrack_icmp.h deleted file mode 100644 index 3dd22cff23ec..000000000000 --- a/include/net/netfilter/ipv4/nf_conntrack_icmp.h +++ /dev/null | |||
| @@ -1,11 +0,0 @@ | |||
| 1 | #ifndef _NF_CONNTRACK_ICMP_H | ||
| 2 | #define _NF_CONNTRACK_ICMP_H | ||
| 3 | /* ICMP tracking. */ | ||
| 4 | #include <asm/atomic.h> | ||
| 5 | |||
| 6 | struct ip_ct_icmp | ||
| 7 | { | ||
| 8 | /* Optimization: when number in == number out, forget immediately. */ | ||
| 9 | atomic_t count; | ||
| 10 | }; | ||
| 11 | #endif /* _NF_CONNTRACK_ICMP_H */ | ||
diff --git a/include/net/netfilter/ipv6/nf_conntrack_icmpv6.h b/include/net/netfilter/ipv6/nf_conntrack_icmpv6.h index 86591afda29c..67edd50a398a 100644 --- a/include/net/netfilter/ipv6/nf_conntrack_icmpv6.h +++ b/include/net/netfilter/ipv6/nf_conntrack_icmpv6.h | |||
| @@ -9,7 +9,6 @@ | |||
| 9 | 9 | ||
| 10 | #ifndef _NF_CONNTRACK_ICMPV6_H | 10 | #ifndef _NF_CONNTRACK_ICMPV6_H |
| 11 | #define _NF_CONNTRACK_ICMPV6_H | 11 | #define _NF_CONNTRACK_ICMPV6_H |
| 12 | #include <asm/atomic.h> | ||
| 13 | 12 | ||
| 14 | #ifndef ICMPV6_NI_QUERY | 13 | #ifndef ICMPV6_NI_QUERY |
| 15 | #define ICMPV6_NI_QUERY 139 | 14 | #define ICMPV6_NI_QUERY 139 |
| @@ -18,10 +17,4 @@ | |||
| 18 | #define ICMPV6_NI_REPLY 140 | 17 | #define ICMPV6_NI_REPLY 140 |
| 19 | #endif | 18 | #endif |
| 20 | 19 | ||
| 21 | struct nf_ct_icmpv6 | ||
| 22 | { | ||
| 23 | /* Optimization: when number in == number out, forget immediately. */ | ||
| 24 | atomic_t count; | ||
| 25 | }; | ||
| 26 | |||
| 27 | #endif /* _NF_CONNTRACK_ICMPV6_H */ | 20 | #endif /* _NF_CONNTRACK_ICMPV6_H */ |
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h index 6c3f964de9e1..a632689b61b4 100644 --- a/include/net/netfilter/nf_conntrack.h +++ b/include/net/netfilter/nf_conntrack.h | |||
| @@ -23,7 +23,6 @@ | |||
| 23 | #include <linux/netfilter/nf_conntrack_dccp.h> | 23 | #include <linux/netfilter/nf_conntrack_dccp.h> |
| 24 | #include <linux/netfilter/nf_conntrack_sctp.h> | 24 | #include <linux/netfilter/nf_conntrack_sctp.h> |
| 25 | #include <linux/netfilter/nf_conntrack_proto_gre.h> | 25 | #include <linux/netfilter/nf_conntrack_proto_gre.h> |
| 26 | #include <net/netfilter/ipv4/nf_conntrack_icmp.h> | ||
| 27 | #include <net/netfilter/ipv6/nf_conntrack_icmpv6.h> | 26 | #include <net/netfilter/ipv6/nf_conntrack_icmpv6.h> |
| 28 | 27 | ||
| 29 | #include <net/netfilter/nf_conntrack_tuple.h> | 28 | #include <net/netfilter/nf_conntrack_tuple.h> |
| @@ -34,8 +33,6 @@ union nf_conntrack_proto { | |||
| 34 | struct nf_ct_dccp dccp; | 33 | struct nf_ct_dccp dccp; |
| 35 | struct ip_ct_sctp sctp; | 34 | struct ip_ct_sctp sctp; |
| 36 | struct ip_ct_tcp tcp; | 35 | struct ip_ct_tcp tcp; |
| 37 | struct ip_ct_icmp icmp; | ||
| 38 | struct nf_ct_icmpv6 icmpv6; | ||
| 39 | struct nf_ct_gre gre; | 36 | struct nf_ct_gre gre; |
| 40 | }; | 37 | }; |
| 41 | 38 | ||
| @@ -96,6 +93,8 @@ struct nf_conn { | |||
| 96 | plus 1 for any connection(s) we are `master' for */ | 93 | plus 1 for any connection(s) we are `master' for */ |
| 97 | struct nf_conntrack ct_general; | 94 | struct nf_conntrack ct_general; |
| 98 | 95 | ||
| 96 | spinlock_t lock; | ||
| 97 | |||
| 99 | /* XXX should I move this to the tail ? - Y.K */ | 98 | /* XXX should I move this to the tail ? - Y.K */ |
| 100 | /* These are my tuples; original and reply */ | 99 | /* These are my tuples; original and reply */ |
| 101 | struct nf_conntrack_tuple_hash tuplehash[IP_CT_DIR_MAX]; | 100 | struct nf_conntrack_tuple_hash tuplehash[IP_CT_DIR_MAX]; |
| @@ -144,6 +143,8 @@ static inline u_int8_t nf_ct_protonum(const struct nf_conn *ct) | |||
| 144 | return ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum; | 143 | return ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum; |
| 145 | } | 144 | } |
| 146 | 145 | ||
| 146 | #define nf_ct_tuple(ct, dir) (&(ct)->tuplehash[dir].tuple) | ||
| 147 | |||
| 147 | /* get master conntrack via master expectation */ | 148 | /* get master conntrack via master expectation */ |
| 148 | #define master_ct(conntr) (conntr->master) | 149 | #define master_ct(conntr) (conntr->master) |
| 149 | 150 | ||
| @@ -200,8 +201,10 @@ extern struct nf_conntrack_tuple_hash * | |||
| 200 | __nf_conntrack_find(struct net *net, const struct nf_conntrack_tuple *tuple); | 201 | __nf_conntrack_find(struct net *net, const struct nf_conntrack_tuple *tuple); |
| 201 | 202 | ||
| 202 | extern void nf_conntrack_hash_insert(struct nf_conn *ct); | 203 | extern void nf_conntrack_hash_insert(struct nf_conn *ct); |
| 204 | extern void nf_ct_delete_from_lists(struct nf_conn *ct); | ||
| 205 | extern void nf_ct_insert_dying_list(struct nf_conn *ct); | ||
| 203 | 206 | ||
| 204 | extern void nf_conntrack_flush(struct net *net, u32 pid, int report); | 207 | extern void nf_conntrack_flush_report(struct net *net, u32 pid, int report); |
| 205 | 208 | ||
| 206 | extern bool nf_ct_get_tuplepr(const struct sk_buff *skb, | 209 | extern bool nf_ct_get_tuplepr(const struct sk_buff *skb, |
| 207 | unsigned int nhoff, u_int16_t l3num, | 210 | unsigned int nhoff, u_int16_t l3num, |
diff --git a/include/net/netfilter/nf_conntrack_ecache.h b/include/net/netfilter/nf_conntrack_ecache.h index 0ff0dc69ca4a..4f20d58e2ab7 100644 --- a/include/net/netfilter/nf_conntrack_ecache.h +++ b/include/net/netfilter/nf_conntrack_ecache.h | |||
| @@ -6,17 +6,54 @@ | |||
| 6 | #define _NF_CONNTRACK_ECACHE_H | 6 | #define _NF_CONNTRACK_ECACHE_H |
| 7 | #include <net/netfilter/nf_conntrack.h> | 7 | #include <net/netfilter/nf_conntrack.h> |
| 8 | 8 | ||
| 9 | #include <linux/notifier.h> | ||
| 10 | #include <linux/interrupt.h> | ||
| 11 | #include <net/net_namespace.h> | 9 | #include <net/net_namespace.h> |
| 12 | #include <net/netfilter/nf_conntrack_expect.h> | 10 | #include <net/netfilter/nf_conntrack_expect.h> |
| 11 | #include <linux/netfilter/nf_conntrack_common.h> | ||
| 12 | #include <linux/netfilter/nf_conntrack_tuple_common.h> | ||
| 13 | #include <net/netfilter/nf_conntrack_extend.h> | ||
| 14 | |||
| 15 | /* Connection tracking event types */ | ||
| 16 | enum ip_conntrack_events | ||
| 17 | { | ||
| 18 | IPCT_NEW = 0, /* new conntrack */ | ||
| 19 | IPCT_RELATED = 1, /* related conntrack */ | ||
| 20 | IPCT_DESTROY = 2, /* destroyed conntrack */ | ||
| 21 | IPCT_STATUS = 3, /* status has changed */ | ||
| 22 | IPCT_PROTOINFO = 4, /* protocol information has changed */ | ||
| 23 | IPCT_HELPER = 5, /* new helper has been set */ | ||
| 24 | IPCT_MARK = 6, /* new mark has been set */ | ||
| 25 | IPCT_NATSEQADJ = 7, /* NAT is doing sequence adjustment */ | ||
| 26 | IPCT_SECMARK = 8, /* new security mark has been set */ | ||
| 27 | }; | ||
| 28 | |||
| 29 | enum ip_conntrack_expect_events { | ||
| 30 | IPEXP_NEW = 0, /* new expectation */ | ||
| 31 | }; | ||
| 13 | 32 | ||
| 14 | #ifdef CONFIG_NF_CONNTRACK_EVENTS | ||
| 15 | struct nf_conntrack_ecache { | 33 | struct nf_conntrack_ecache { |
| 16 | struct nf_conn *ct; | 34 | unsigned long cache; /* bitops want long */ |
| 17 | unsigned int events; | 35 | unsigned long missed; /* missed events */ |
| 36 | u32 pid; /* netlink pid of destroyer */ | ||
| 37 | }; | ||
| 38 | |||
| 39 | static inline struct nf_conntrack_ecache * | ||
| 40 | nf_ct_ecache_find(const struct nf_conn *ct) | ||
| 41 | { | ||
| 42 | return nf_ct_ext_find(ct, NF_CT_EXT_ECACHE); | ||
| 43 | } | ||
| 44 | |||
| 45 | static inline struct nf_conntrack_ecache * | ||
| 46 | nf_ct_ecache_ext_add(struct nf_conn *ct, gfp_t gfp) | ||
| 47 | { | ||
| 48 | struct net *net = nf_ct_net(ct); | ||
| 49 | |||
| 50 | if (!net->ct.sysctl_events) | ||
| 51 | return NULL; | ||
| 52 | |||
| 53 | return nf_ct_ext_add(ct, NF_CT_EXT_ECACHE, gfp); | ||
| 18 | }; | 54 | }; |
| 19 | 55 | ||
| 56 | #ifdef CONFIG_NF_CONNTRACK_EVENTS | ||
| 20 | /* This structure is passed to event handler */ | 57 | /* This structure is passed to event handler */ |
| 21 | struct nf_ct_event { | 58 | struct nf_ct_event { |
| 22 | struct nf_conn *ct; | 59 | struct nf_conn *ct; |
| @@ -24,47 +61,96 @@ struct nf_ct_event { | |||
| 24 | int report; | 61 | int report; |
| 25 | }; | 62 | }; |
| 26 | 63 | ||
| 27 | extern struct atomic_notifier_head nf_conntrack_chain; | 64 | struct nf_ct_event_notifier { |
| 28 | extern int nf_conntrack_register_notifier(struct notifier_block *nb); | 65 | int (*fcn)(unsigned int events, struct nf_ct_event *item); |
| 29 | extern int nf_conntrack_unregister_notifier(struct notifier_block *nb); | 66 | }; |
| 67 | |||
| 68 | extern struct nf_ct_event_notifier *nf_conntrack_event_cb; | ||
| 69 | extern int nf_conntrack_register_notifier(struct nf_ct_event_notifier *nb); | ||
| 70 | extern void nf_conntrack_unregister_notifier(struct nf_ct_event_notifier *nb); | ||
| 30 | 71 | ||
| 31 | extern void nf_ct_deliver_cached_events(const struct nf_conn *ct); | 72 | extern void nf_ct_deliver_cached_events(struct nf_conn *ct); |
| 32 | extern void __nf_ct_event_cache_init(struct nf_conn *ct); | ||
| 33 | extern void nf_ct_event_cache_flush(struct net *net); | ||
| 34 | 73 | ||
| 35 | static inline void | 74 | static inline void |
| 36 | nf_conntrack_event_cache(enum ip_conntrack_events event, struct nf_conn *ct) | 75 | nf_conntrack_event_cache(enum ip_conntrack_events event, struct nf_conn *ct) |
| 37 | { | 76 | { |
| 77 | struct nf_conntrack_ecache *e; | ||
| 78 | |||
| 79 | if (nf_conntrack_event_cb == NULL) | ||
| 80 | return; | ||
| 81 | |||
| 82 | e = nf_ct_ecache_find(ct); | ||
| 83 | if (e == NULL) | ||
| 84 | return; | ||
| 85 | |||
| 86 | set_bit(event, &e->cache); | ||
| 87 | } | ||
| 88 | |||
| 89 | static inline int | ||
| 90 | nf_conntrack_eventmask_report(unsigned int eventmask, | ||
| 91 | struct nf_conn *ct, | ||
| 92 | u32 pid, | ||
| 93 | int report) | ||
| 94 | { | ||
| 95 | int ret = 0; | ||
| 38 | struct net *net = nf_ct_net(ct); | 96 | struct net *net = nf_ct_net(ct); |
| 39 | struct nf_conntrack_ecache *ecache; | 97 | struct nf_ct_event_notifier *notify; |
| 40 | 98 | struct nf_conntrack_ecache *e; | |
| 41 | local_bh_disable(); | 99 | |
| 42 | ecache = per_cpu_ptr(net->ct.ecache, raw_smp_processor_id()); | 100 | rcu_read_lock(); |
| 43 | if (ct != ecache->ct) | 101 | notify = rcu_dereference(nf_conntrack_event_cb); |
| 44 | __nf_ct_event_cache_init(ct); | 102 | if (notify == NULL) |
| 45 | ecache->events |= event; | 103 | goto out_unlock; |
| 46 | local_bh_enable(); | 104 | |
| 105 | if (!net->ct.sysctl_events) | ||
| 106 | goto out_unlock; | ||
| 107 | |||
| 108 | e = nf_ct_ecache_find(ct); | ||
| 109 | if (e == NULL) | ||
| 110 | goto out_unlock; | ||
| 111 | |||
| 112 | if (nf_ct_is_confirmed(ct) && !nf_ct_is_dying(ct)) { | ||
| 113 | struct nf_ct_event item = { | ||
| 114 | .ct = ct, | ||
| 115 | .pid = e->pid ? e->pid : pid, | ||
| 116 | .report = report | ||
| 117 | }; | ||
| 118 | /* This is a resent of a destroy event? If so, skip missed */ | ||
| 119 | unsigned long missed = e->pid ? 0 : e->missed; | ||
| 120 | |||
| 121 | ret = notify->fcn(eventmask | missed, &item); | ||
| 122 | if (unlikely(ret < 0 || missed)) { | ||
| 123 | spin_lock_bh(&ct->lock); | ||
| 124 | if (ret < 0) { | ||
| 125 | /* This is a destroy event that has been | ||
| 126 | * triggered by a process, we store the PID | ||
| 127 | * to include it in the retransmission. */ | ||
| 128 | if (eventmask & (1 << IPCT_DESTROY) && | ||
| 129 | e->pid == 0 && pid != 0) | ||
| 130 | e->pid = pid; | ||
| 131 | else | ||
| 132 | e->missed |= eventmask; | ||
| 133 | } else | ||
| 134 | e->missed &= ~missed; | ||
| 135 | spin_unlock_bh(&ct->lock); | ||
| 136 | } | ||
| 137 | } | ||
| 138 | out_unlock: | ||
| 139 | rcu_read_unlock(); | ||
| 140 | return ret; | ||
| 47 | } | 141 | } |
| 48 | 142 | ||
| 49 | static inline void | 143 | static inline int |
| 50 | nf_conntrack_event_report(enum ip_conntrack_events event, | 144 | nf_conntrack_event_report(enum ip_conntrack_events event, struct nf_conn *ct, |
| 51 | struct nf_conn *ct, | 145 | u32 pid, int report) |
| 52 | u32 pid, | ||
| 53 | int report) | ||
| 54 | { | 146 | { |
| 55 | struct nf_ct_event item = { | 147 | return nf_conntrack_eventmask_report(1 << event, ct, pid, report); |
| 56 | .ct = ct, | ||
| 57 | .pid = pid, | ||
| 58 | .report = report | ||
| 59 | }; | ||
| 60 | if (nf_ct_is_confirmed(ct) && !nf_ct_is_dying(ct)) | ||
| 61 | atomic_notifier_call_chain(&nf_conntrack_chain, event, &item); | ||
| 62 | } | 148 | } |
| 63 | 149 | ||
| 64 | static inline void | 150 | static inline int |
| 65 | nf_conntrack_event(enum ip_conntrack_events event, struct nf_conn *ct) | 151 | nf_conntrack_event(enum ip_conntrack_events event, struct nf_conn *ct) |
| 66 | { | 152 | { |
| 67 | nf_conntrack_event_report(event, ct, 0, 0); | 153 | return nf_conntrack_eventmask_report(1 << event, ct, 0, 0); |
| 68 | } | 154 | } |
| 69 | 155 | ||
| 70 | struct nf_exp_event { | 156 | struct nf_exp_event { |
| @@ -73,9 +159,13 @@ struct nf_exp_event { | |||
| 73 | int report; | 159 | int report; |
| 74 | }; | 160 | }; |
| 75 | 161 | ||
| 76 | extern struct atomic_notifier_head nf_ct_expect_chain; | 162 | struct nf_exp_event_notifier { |
| 77 | extern int nf_ct_expect_register_notifier(struct notifier_block *nb); | 163 | int (*fcn)(unsigned int events, struct nf_exp_event *item); |
| 78 | extern int nf_ct_expect_unregister_notifier(struct notifier_block *nb); | 164 | }; |
| 165 | |||
| 166 | extern struct nf_exp_event_notifier *nf_expect_event_cb; | ||
| 167 | extern int nf_ct_expect_register_notifier(struct nf_exp_event_notifier *nb); | ||
| 168 | extern void nf_ct_expect_unregister_notifier(struct nf_exp_event_notifier *nb); | ||
| 79 | 169 | ||
| 80 | static inline void | 170 | static inline void |
| 81 | nf_ct_expect_event_report(enum ip_conntrack_expect_events event, | 171 | nf_ct_expect_event_report(enum ip_conntrack_expect_events event, |
| @@ -83,12 +173,27 @@ nf_ct_expect_event_report(enum ip_conntrack_expect_events event, | |||
| 83 | u32 pid, | 173 | u32 pid, |
| 84 | int report) | 174 | int report) |
| 85 | { | 175 | { |
| 86 | struct nf_exp_event item = { | 176 | struct net *net = nf_ct_exp_net(exp); |
| 87 | .exp = exp, | 177 | struct nf_exp_event_notifier *notify; |
| 88 | .pid = pid, | 178 | |
| 89 | .report = report | 179 | rcu_read_lock(); |
| 90 | }; | 180 | notify = rcu_dereference(nf_expect_event_cb); |
| 91 | atomic_notifier_call_chain(&nf_ct_expect_chain, event, &item); | 181 | if (notify == NULL) |
| 182 | goto out_unlock; | ||
| 183 | |||
| 184 | if (!net->ct.sysctl_events) | ||
| 185 | goto out_unlock; | ||
| 186 | |||
| 187 | { | ||
| 188 | struct nf_exp_event item = { | ||
| 189 | .exp = exp, | ||
| 190 | .pid = pid, | ||
| 191 | .report = report | ||
| 192 | }; | ||
| 193 | notify->fcn(1 << event, &item); | ||
| 194 | } | ||
| 195 | out_unlock: | ||
| 196 | rcu_read_unlock(); | ||
| 92 | } | 197 | } |
| 93 | 198 | ||
| 94 | static inline void | 199 | static inline void |
| @@ -105,12 +210,16 @@ extern void nf_conntrack_ecache_fini(struct net *net); | |||
| 105 | 210 | ||
| 106 | static inline void nf_conntrack_event_cache(enum ip_conntrack_events event, | 211 | static inline void nf_conntrack_event_cache(enum ip_conntrack_events event, |
| 107 | struct nf_conn *ct) {} | 212 | struct nf_conn *ct) {} |
| 108 | static inline void nf_conntrack_event(enum ip_conntrack_events event, | 213 | static inline int nf_conntrack_eventmask_report(unsigned int eventmask, |
| 109 | struct nf_conn *ct) {} | 214 | struct nf_conn *ct, |
| 110 | static inline void nf_conntrack_event_report(enum ip_conntrack_events event, | 215 | u32 pid, |
| 111 | struct nf_conn *ct, | 216 | int report) { return 0; } |
| 112 | u32 pid, | 217 | static inline int nf_conntrack_event(enum ip_conntrack_events event, |
| 113 | int report) {} | 218 | struct nf_conn *ct) { return 0; } |
| 219 | static inline int nf_conntrack_event_report(enum ip_conntrack_events event, | ||
| 220 | struct nf_conn *ct, | ||
| 221 | u32 pid, | ||
| 222 | int report) { return 0; } | ||
| 114 | static inline void nf_ct_deliver_cached_events(const struct nf_conn *ct) {} | 223 | static inline void nf_ct_deliver_cached_events(const struct nf_conn *ct) {} |
| 115 | static inline void nf_ct_expect_event(enum ip_conntrack_expect_events event, | 224 | static inline void nf_ct_expect_event(enum ip_conntrack_expect_events event, |
| 116 | struct nf_conntrack_expect *exp) {} | 225 | struct nf_conntrack_expect *exp) {} |
| @@ -118,7 +227,6 @@ static inline void nf_ct_expect_event_report(enum ip_conntrack_expect_events e, | |||
| 118 | struct nf_conntrack_expect *exp, | 227 | struct nf_conntrack_expect *exp, |
| 119 | u32 pid, | 228 | u32 pid, |
| 120 | int report) {} | 229 | int report) {} |
| 121 | static inline void nf_ct_event_cache_flush(struct net *net) {} | ||
| 122 | 230 | ||
| 123 | static inline int nf_conntrack_ecache_init(struct net *net) | 231 | static inline int nf_conntrack_ecache_init(struct net *net) |
| 124 | { | 232 | { |
diff --git a/include/net/netfilter/nf_conntrack_extend.h b/include/net/netfilter/nf_conntrack_extend.h index da8ee52613a5..7f8fc5d123c5 100644 --- a/include/net/netfilter/nf_conntrack_extend.h +++ b/include/net/netfilter/nf_conntrack_extend.h | |||
| @@ -8,12 +8,14 @@ enum nf_ct_ext_id | |||
| 8 | NF_CT_EXT_HELPER, | 8 | NF_CT_EXT_HELPER, |
| 9 | NF_CT_EXT_NAT, | 9 | NF_CT_EXT_NAT, |
| 10 | NF_CT_EXT_ACCT, | 10 | NF_CT_EXT_ACCT, |
| 11 | NF_CT_EXT_ECACHE, | ||
| 11 | NF_CT_EXT_NUM, | 12 | NF_CT_EXT_NUM, |
| 12 | }; | 13 | }; |
| 13 | 14 | ||
| 14 | #define NF_CT_EXT_HELPER_TYPE struct nf_conn_help | 15 | #define NF_CT_EXT_HELPER_TYPE struct nf_conn_help |
| 15 | #define NF_CT_EXT_NAT_TYPE struct nf_conn_nat | 16 | #define NF_CT_EXT_NAT_TYPE struct nf_conn_nat |
| 16 | #define NF_CT_EXT_ACCT_TYPE struct nf_conn_counter | 17 | #define NF_CT_EXT_ACCT_TYPE struct nf_conn_counter |
| 18 | #define NF_CT_EXT_ECACHE_TYPE struct nf_conntrack_ecache | ||
| 17 | 19 | ||
| 18 | /* Extensions: optional stuff which isn't permanently in struct. */ | 20 | /* Extensions: optional stuff which isn't permanently in struct. */ |
| 19 | struct nf_ct_ext { | 21 | struct nf_ct_ext { |
diff --git a/include/net/netfilter/nf_conntrack_helper.h b/include/net/netfilter/nf_conntrack_helper.h index ee2a4b369a04..1b7068000927 100644 --- a/include/net/netfilter/nf_conntrack_helper.h +++ b/include/net/netfilter/nf_conntrack_helper.h | |||
| @@ -50,6 +50,8 @@ extern struct nf_conn_help *nf_ct_helper_ext_add(struct nf_conn *ct, gfp_t gfp); | |||
| 50 | 50 | ||
| 51 | extern int __nf_ct_try_assign_helper(struct nf_conn *ct, gfp_t flags); | 51 | extern int __nf_ct_try_assign_helper(struct nf_conn *ct, gfp_t flags); |
| 52 | 52 | ||
| 53 | extern void nf_ct_helper_destroy(struct nf_conn *ct); | ||
| 54 | |||
| 53 | static inline struct nf_conn_help *nfct_help(const struct nf_conn *ct) | 55 | static inline struct nf_conn_help *nfct_help(const struct nf_conn *ct) |
| 54 | { | 56 | { |
| 55 | return nf_ct_ext_find(ct, NF_CT_EXT_HELPER); | 57 | return nf_ct_ext_find(ct, NF_CT_EXT_HELPER); |
diff --git a/include/net/netfilter/nf_conntrack_l4proto.h b/include/net/netfilter/nf_conntrack_l4proto.h index ba32ed7bdabe..3767fb41e541 100644 --- a/include/net/netfilter/nf_conntrack_l4proto.h +++ b/include/net/netfilter/nf_conntrack_l4proto.h | |||
| @@ -59,11 +59,11 @@ struct nf_conntrack_l4proto | |||
| 59 | const struct nf_conntrack_tuple *); | 59 | const struct nf_conntrack_tuple *); |
| 60 | 60 | ||
| 61 | /* Print out the private part of the conntrack. */ | 61 | /* Print out the private part of the conntrack. */ |
| 62 | int (*print_conntrack)(struct seq_file *s, const struct nf_conn *); | 62 | int (*print_conntrack)(struct seq_file *s, struct nf_conn *); |
| 63 | 63 | ||
| 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 | struct nf_conn *ct); |
| 67 | /* Calculate protoinfo nlattr size */ | 67 | /* Calculate protoinfo nlattr size */ |
| 68 | int (*nlattr_size)(void); | 68 | int (*nlattr_size)(void); |
| 69 | 69 | ||
diff --git a/include/net/netlink.h b/include/net/netlink.h index eddb50289d6d..007bdb07dabb 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h | |||
| @@ -940,6 +940,15 @@ static inline u64 nla_get_u64(const struct nlattr *nla) | |||
| 940 | } | 940 | } |
| 941 | 941 | ||
| 942 | /** | 942 | /** |
| 943 | * nla_get_be64 - return payload of __be64 attribute | ||
| 944 | * @nla: __be64 netlink attribute | ||
| 945 | */ | ||
| 946 | static inline __be64 nla_get_be64(const struct nlattr *nla) | ||
| 947 | { | ||
| 948 | return *(__be64 *) nla_data(nla); | ||
| 949 | } | ||
| 950 | |||
| 951 | /** | ||
| 943 | * nla_get_flag - return payload of flag attribute | 952 | * nla_get_flag - return payload of flag attribute |
| 944 | * @nla: flag netlink attribute | 953 | * @nla: flag netlink attribute |
| 945 | */ | 954 | */ |
diff --git a/include/net/netns/conntrack.h b/include/net/netns/conntrack.h index 9dc58402bc09..ba1ba0c5efd1 100644 --- a/include/net/netns/conntrack.h +++ b/include/net/netns/conntrack.h | |||
| @@ -14,16 +14,17 @@ struct netns_ct { | |||
| 14 | struct hlist_nulls_head *hash; | 14 | struct hlist_nulls_head *hash; |
| 15 | struct hlist_head *expect_hash; | 15 | struct hlist_head *expect_hash; |
| 16 | struct hlist_nulls_head unconfirmed; | 16 | struct hlist_nulls_head unconfirmed; |
| 17 | struct hlist_nulls_head dying; | ||
| 17 | struct ip_conntrack_stat *stat; | 18 | struct ip_conntrack_stat *stat; |
| 18 | #ifdef CONFIG_NF_CONNTRACK_EVENTS | 19 | int sysctl_events; |
| 19 | struct nf_conntrack_ecache *ecache; | 20 | unsigned int sysctl_events_retry_timeout; |
| 20 | #endif | ||
| 21 | int sysctl_acct; | 21 | int sysctl_acct; |
| 22 | int sysctl_checksum; | 22 | int sysctl_checksum; |
| 23 | unsigned int sysctl_log_invalid; /* Log invalid packets */ | 23 | unsigned int sysctl_log_invalid; /* Log invalid packets */ |
| 24 | #ifdef CONFIG_SYSCTL | 24 | #ifdef CONFIG_SYSCTL |
| 25 | struct ctl_table_header *sysctl_header; | 25 | struct ctl_table_header *sysctl_header; |
| 26 | struct ctl_table_header *acct_sysctl_header; | 26 | struct ctl_table_header *acct_sysctl_header; |
| 27 | struct ctl_table_header *event_sysctl_header; | ||
| 27 | #endif | 28 | #endif |
| 28 | int hash_vmalloc; | 29 | int hash_vmalloc; |
| 29 | int expect_vmalloc; | 30 | int expect_vmalloc; |
diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h index e37fe3129c17..82a3191375f5 100644 --- a/include/net/pkt_sched.h +++ b/include/net/pkt_sched.h | |||
| @@ -41,16 +41,17 @@ static inline void *qdisc_priv(struct Qdisc *q) | |||
| 41 | typedef u64 psched_time_t; | 41 | typedef u64 psched_time_t; |
| 42 | typedef long psched_tdiff_t; | 42 | typedef long psched_tdiff_t; |
| 43 | 43 | ||
| 44 | /* Avoid doing 64 bit divide by 1000 */ | 44 | /* Avoid doing 64 bit divide */ |
| 45 | #define PSCHED_US2NS(x) ((s64)(x) << 10) | 45 | #define PSCHED_SHIFT 6 |
| 46 | #define PSCHED_NS2US(x) ((x) >> 10) | 46 | #define PSCHED_TICKS2NS(x) ((s64)(x) << PSCHED_SHIFT) |
| 47 | #define PSCHED_NS2TICKS(x) ((x) >> PSCHED_SHIFT) | ||
| 47 | 48 | ||
| 48 | #define PSCHED_TICKS_PER_SEC PSCHED_NS2US(NSEC_PER_SEC) | 49 | #define PSCHED_TICKS_PER_SEC PSCHED_NS2TICKS(NSEC_PER_SEC) |
| 49 | #define PSCHED_PASTPERFECT 0 | 50 | #define PSCHED_PASTPERFECT 0 |
| 50 | 51 | ||
| 51 | static inline psched_time_t psched_get_time(void) | 52 | static inline psched_time_t psched_get_time(void) |
| 52 | { | 53 | { |
| 53 | return PSCHED_NS2US(ktime_to_ns(ktime_get())); | 54 | return PSCHED_NS2TICKS(ktime_to_ns(ktime_get())); |
| 54 | } | 55 | } |
| 55 | 56 | ||
| 56 | static inline psched_tdiff_t | 57 | static inline psched_tdiff_t |
diff --git a/include/net/regulatory.h b/include/net/regulatory.h new file mode 100644 index 000000000000..47995b81c5d7 --- /dev/null +++ b/include/net/regulatory.h | |||
| @@ -0,0 +1,101 @@ | |||
| 1 | #ifndef __NET_REGULATORY_H | ||
| 2 | #define __NET_REGULATORY_H | ||
| 3 | /* | ||
| 4 | * regulatory support structures | ||
| 5 | * | ||
| 6 | * Copyright 2008-2009 Luis R. Rodriguez <lrodriguez@atheros.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | */ | ||
| 12 | |||
| 13 | |||
| 14 | /** | ||
| 15 | * enum environment_cap - Environment parsed from country IE | ||
| 16 | * @ENVIRON_ANY: indicates country IE applies to both indoor and | ||
| 17 | * outdoor operation. | ||
| 18 | * @ENVIRON_INDOOR: indicates country IE applies only to indoor operation | ||
| 19 | * @ENVIRON_OUTDOOR: indicates country IE applies only to outdoor operation | ||
| 20 | */ | ||
| 21 | enum environment_cap { | ||
| 22 | ENVIRON_ANY, | ||
| 23 | ENVIRON_INDOOR, | ||
| 24 | ENVIRON_OUTDOOR, | ||
| 25 | }; | ||
| 26 | |||
| 27 | /** | ||
| 28 | * struct regulatory_request - used to keep track of regulatory requests | ||
| 29 | * | ||
| 30 | * @wiphy_idx: this is set if this request's initiator is | ||
| 31 | * %REGDOM_SET_BY_COUNTRY_IE or %REGDOM_SET_BY_DRIVER. This | ||
| 32 | * can be used by the wireless core to deal with conflicts | ||
| 33 | * and potentially inform users of which devices specifically | ||
| 34 | * cased the conflicts. | ||
| 35 | * @initiator: indicates who sent this request, could be any of | ||
| 36 | * of those set in nl80211_reg_initiator (%NL80211_REGDOM_SET_BY_*) | ||
| 37 | * @alpha2: the ISO / IEC 3166 alpha2 country code of the requested | ||
| 38 | * regulatory domain. We have a few special codes: | ||
| 39 | * 00 - World regulatory domain | ||
| 40 | * 99 - built by driver but a specific alpha2 cannot be determined | ||
| 41 | * 98 - result of an intersection between two regulatory domains | ||
| 42 | * @intersect: indicates whether the wireless core should intersect | ||
| 43 | * the requested regulatory domain with the presently set regulatory | ||
| 44 | * domain. | ||
| 45 | * @country_ie_checksum: checksum of the last processed and accepted | ||
| 46 | * country IE | ||
| 47 | * @country_ie_env: lets us know if the AP is telling us we are outdoor, | ||
| 48 | * indoor, or if it doesn't matter | ||
| 49 | * @list: used to insert into the reg_requests_list linked list | ||
| 50 | */ | ||
| 51 | struct regulatory_request { | ||
| 52 | int wiphy_idx; | ||
| 53 | enum nl80211_reg_initiator initiator; | ||
| 54 | char alpha2[2]; | ||
| 55 | bool intersect; | ||
| 56 | u32 country_ie_checksum; | ||
| 57 | enum environment_cap country_ie_env; | ||
| 58 | struct list_head list; | ||
| 59 | }; | ||
| 60 | |||
| 61 | struct ieee80211_freq_range { | ||
| 62 | u32 start_freq_khz; | ||
| 63 | u32 end_freq_khz; | ||
| 64 | u32 max_bandwidth_khz; | ||
| 65 | }; | ||
| 66 | |||
| 67 | struct ieee80211_power_rule { | ||
| 68 | u32 max_antenna_gain; | ||
| 69 | u32 max_eirp; | ||
| 70 | }; | ||
| 71 | |||
| 72 | struct ieee80211_reg_rule { | ||
| 73 | struct ieee80211_freq_range freq_range; | ||
| 74 | struct ieee80211_power_rule power_rule; | ||
| 75 | u32 flags; | ||
| 76 | }; | ||
| 77 | |||
| 78 | struct ieee80211_regdomain { | ||
| 79 | u32 n_reg_rules; | ||
| 80 | char alpha2[2]; | ||
| 81 | struct ieee80211_reg_rule reg_rules[]; | ||
| 82 | }; | ||
| 83 | |||
| 84 | #define MHZ_TO_KHZ(freq) ((freq) * 1000) | ||
| 85 | #define KHZ_TO_MHZ(freq) ((freq) / 1000) | ||
| 86 | #define DBI_TO_MBI(gain) ((gain) * 100) | ||
| 87 | #define MBI_TO_DBI(gain) ((gain) / 100) | ||
| 88 | #define DBM_TO_MBM(gain) ((gain) * 100) | ||
| 89 | #define MBM_TO_DBM(gain) ((gain) / 100) | ||
| 90 | |||
| 91 | #define REG_RULE(start, end, bw, gain, eirp, reg_flags) \ | ||
| 92 | { \ | ||
| 93 | .freq_range.start_freq_khz = MHZ_TO_KHZ(start), \ | ||
| 94 | .freq_range.end_freq_khz = MHZ_TO_KHZ(end), \ | ||
| 95 | .freq_range.max_bandwidth_khz = MHZ_TO_KHZ(bw), \ | ||
| 96 | .power_rule.max_antenna_gain = DBI_TO_MBI(gain),\ | ||
| 97 | .power_rule.max_eirp = DBM_TO_MBM(eirp), \ | ||
| 98 | .flags = reg_flags, \ | ||
| 99 | } | ||
| 100 | |||
| 101 | #endif | ||
diff --git a/include/net/route.h b/include/net/route.h index 4e8cae0e5841..40f6346ef496 100644 --- a/include/net/route.h +++ b/include/net/route.h | |||
| @@ -210,7 +210,7 @@ static inline struct inet_peer *rt_get_peer(struct rtable *rt) | |||
| 210 | 210 | ||
| 211 | static inline int inet_iif(const struct sk_buff *skb) | 211 | static inline int inet_iif(const struct sk_buff *skb) |
| 212 | { | 212 | { |
| 213 | return skb->rtable->rt_iif; | 213 | return skb_rtable(skb)->rt_iif; |
| 214 | } | 214 | } |
| 215 | 215 | ||
| 216 | #endif /* _ROUTE_H */ | 216 | #endif /* _ROUTE_H */ |
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index 23f08fe1d50a..edfcacf3250e 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h | |||
| @@ -1939,10 +1939,8 @@ void sctp_association_free(struct sctp_association *); | |||
| 1939 | void sctp_association_put(struct sctp_association *); | 1939 | void sctp_association_put(struct sctp_association *); |
| 1940 | void sctp_association_hold(struct sctp_association *); | 1940 | void sctp_association_hold(struct sctp_association *); |
| 1941 | 1941 | ||
| 1942 | struct sctp_transport *sctp_assoc_choose_init_transport( | 1942 | struct sctp_transport *sctp_assoc_choose_alter_transport( |
| 1943 | struct sctp_association *); | 1943 | struct sctp_association *, struct sctp_transport *); |
| 1944 | struct sctp_transport *sctp_assoc_choose_shutdown_transport( | ||
| 1945 | struct sctp_association *); | ||
| 1946 | void sctp_assoc_update_retran_path(struct sctp_association *); | 1944 | void sctp_assoc_update_retran_path(struct sctp_association *); |
| 1947 | struct sctp_transport *sctp_assoc_lookup_paddr(const struct sctp_association *, | 1945 | struct sctp_transport *sctp_assoc_lookup_paddr(const struct sctp_association *, |
| 1948 | const union sctp_addr *); | 1946 | const union sctp_addr *); |
diff --git a/include/net/sctp/user.h b/include/net/sctp/user.h index b259fc5798fb..1580c04f68bc 100644 --- a/include/net/sctp/user.h +++ b/include/net/sctp/user.h | |||
| @@ -147,6 +147,8 @@ enum sctp_optname { | |||
| 147 | #define SCTP_GET_LOCAL_ADDRS SCTP_GET_LOCAL_ADDRS | 147 | #define SCTP_GET_LOCAL_ADDRS SCTP_GET_LOCAL_ADDRS |
| 148 | SCTP_SOCKOPT_CONNECTX, /* CONNECTX requests. */ | 148 | SCTP_SOCKOPT_CONNECTX, /* CONNECTX requests. */ |
| 149 | #define SCTP_SOCKOPT_CONNECTX SCTP_SOCKOPT_CONNECTX | 149 | #define SCTP_SOCKOPT_CONNECTX SCTP_SOCKOPT_CONNECTX |
| 150 | SCTP_SOCKOPT_CONNECTX3, /* CONNECTX requests. (new implementation) */ | ||
| 151 | #define SCTP_SOCKOPT_CONNECTX3 SCTP_SOCKOPT_CONNECTX3 | ||
| 150 | }; | 152 | }; |
| 151 | 153 | ||
| 152 | /* | 154 | /* |
diff --git a/include/net/snmp.h b/include/net/snmp.h index 57c93628695f..8c842e06bec8 100644 --- a/include/net/snmp.h +++ b/include/net/snmp.h | |||
| @@ -153,6 +153,11 @@ struct linux_xfrm_mib { | |||
| 153 | per_cpu_ptr(mib[!in_softirq()], get_cpu())->mibs[field]--; \ | 153 | per_cpu_ptr(mib[!in_softirq()], get_cpu())->mibs[field]--; \ |
| 154 | put_cpu(); \ | 154 | put_cpu(); \ |
| 155 | } while (0) | 155 | } while (0) |
| 156 | #define SNMP_ADD_STATS(mib, field, addend) \ | ||
| 157 | do { \ | ||
| 158 | per_cpu_ptr(mib[!in_softirq()], get_cpu())->mibs[field] += addend; \ | ||
| 159 | put_cpu(); \ | ||
| 160 | } while (0) | ||
| 156 | #define SNMP_ADD_STATS_BH(mib, field, addend) \ | 161 | #define SNMP_ADD_STATS_BH(mib, field, addend) \ |
| 157 | (per_cpu_ptr(mib[0], raw_smp_processor_id())->mibs[field] += addend) | 162 | (per_cpu_ptr(mib[0], raw_smp_processor_id())->mibs[field] += addend) |
| 158 | #define SNMP_ADD_STATS_USER(mib, field, addend) \ | 163 | #define SNMP_ADD_STATS_USER(mib, field, addend) \ |
| @@ -160,5 +165,17 @@ struct linux_xfrm_mib { | |||
| 160 | per_cpu_ptr(mib[1], get_cpu())->mibs[field] += addend; \ | 165 | per_cpu_ptr(mib[1], get_cpu())->mibs[field] += addend; \ |
| 161 | put_cpu(); \ | 166 | put_cpu(); \ |
| 162 | } while (0) | 167 | } while (0) |
| 163 | 168 | #define SNMP_UPD_PO_STATS(mib, basefield, addend) \ | |
| 169 | do { \ | ||
| 170 | __typeof__(mib[0]) ptr = per_cpu_ptr(mib[!in_softirq()], get_cpu());\ | ||
| 171 | ptr->mibs[basefield##PKTS]++; \ | ||
| 172 | ptr->mibs[basefield##OCTETS] += addend;\ | ||
| 173 | put_cpu(); \ | ||
| 174 | } while (0) | ||
| 175 | #define SNMP_UPD_PO_STATS_BH(mib, basefield, addend) \ | ||
| 176 | do { \ | ||
| 177 | __typeof__(mib[0]) ptr = per_cpu_ptr(mib[!in_softirq()], raw_smp_processor_id());\ | ||
| 178 | ptr->mibs[basefield##PKTS]++; \ | ||
| 179 | ptr->mibs[basefield##OCTETS] += addend;\ | ||
| 180 | } while (0) | ||
| 164 | #endif | 181 | #endif |
diff --git a/include/net/sock.h b/include/net/sock.h index 4bb1ff9fd15b..010e14a93c92 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
| @@ -1217,9 +1217,13 @@ static inline int skb_copy_to_page(struct sock *sk, char __user *from, | |||
| 1217 | 1217 | ||
| 1218 | static inline void skb_set_owner_w(struct sk_buff *skb, struct sock *sk) | 1218 | static inline void skb_set_owner_w(struct sk_buff *skb, struct sock *sk) |
| 1219 | { | 1219 | { |
| 1220 | sock_hold(sk); | ||
| 1221 | skb->sk = sk; | 1220 | skb->sk = sk; |
| 1222 | skb->destructor = sock_wfree; | 1221 | skb->destructor = sock_wfree; |
| 1222 | /* | ||
| 1223 | * We used to take a refcount on sk, but following operation | ||
| 1224 | * is enough to guarantee sk_free() wont free this sock until | ||
| 1225 | * all in-flight packets are completed | ||
| 1226 | */ | ||
| 1223 | atomic_add(skb->truesize, &sk->sk_wmem_alloc); | 1227 | atomic_add(skb->truesize, &sk->sk_wmem_alloc); |
| 1224 | } | 1228 | } |
| 1225 | 1229 | ||
diff --git a/include/net/tcp.h b/include/net/tcp.h index 646dbe3962ea..19f4150f4d4d 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
| @@ -266,6 +266,19 @@ static inline int tcp_too_many_orphans(struct sock *sk, int num) | |||
| 266 | atomic_read(&tcp_memory_allocated) > sysctl_tcp_mem[2]); | 266 | atomic_read(&tcp_memory_allocated) > sysctl_tcp_mem[2]); |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | /* syncookies: remember time of last synqueue overflow */ | ||
| 270 | static inline void tcp_synq_overflow(struct sock *sk) | ||
| 271 | { | ||
| 272 | tcp_sk(sk)->rx_opt.ts_recent_stamp = jiffies; | ||
| 273 | } | ||
| 274 | |||
| 275 | /* syncookies: no recent synqueue overflow on this listening socket? */ | ||
| 276 | static inline int tcp_synq_no_recent_overflow(const struct sock *sk) | ||
| 277 | { | ||
| 278 | unsigned long last_overflow = tcp_sk(sk)->rx_opt.ts_recent_stamp; | ||
| 279 | return time_after(jiffies, last_overflow + TCP_TIMEOUT_INIT); | ||
| 280 | } | ||
| 281 | |||
| 269 | extern struct proto tcp_prot; | 282 | extern struct proto tcp_prot; |
| 270 | 283 | ||
| 271 | #define TCP_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.tcp_statistics, field) | 284 | #define TCP_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.tcp_statistics, field) |
| @@ -889,30 +902,32 @@ static inline int tcp_prequeue(struct sock *sk, struct sk_buff *skb) | |||
| 889 | { | 902 | { |
| 890 | struct tcp_sock *tp = tcp_sk(sk); | 903 | struct tcp_sock *tp = tcp_sk(sk); |
| 891 | 904 | ||
| 892 | if (!sysctl_tcp_low_latency && tp->ucopy.task) { | 905 | if (sysctl_tcp_low_latency || !tp->ucopy.task) |
| 893 | __skb_queue_tail(&tp->ucopy.prequeue, skb); | 906 | return 0; |
| 894 | tp->ucopy.memory += skb->truesize; | 907 | |
| 895 | if (tp->ucopy.memory > sk->sk_rcvbuf) { | 908 | __skb_queue_tail(&tp->ucopy.prequeue, skb); |
| 896 | struct sk_buff *skb1; | 909 | tp->ucopy.memory += skb->truesize; |
| 897 | 910 | if (tp->ucopy.memory > sk->sk_rcvbuf) { | |
| 898 | BUG_ON(sock_owned_by_user(sk)); | 911 | struct sk_buff *skb1; |
| 899 | 912 | ||
| 900 | while ((skb1 = __skb_dequeue(&tp->ucopy.prequeue)) != NULL) { | 913 | BUG_ON(sock_owned_by_user(sk)); |
| 901 | sk_backlog_rcv(sk, skb1); | 914 | |
| 902 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPPREQUEUEDROPPED); | 915 | while ((skb1 = __skb_dequeue(&tp->ucopy.prequeue)) != NULL) { |
| 903 | } | 916 | sk_backlog_rcv(sk, skb1); |
| 904 | 917 | NET_INC_STATS_BH(sock_net(sk), | |
| 905 | tp->ucopy.memory = 0; | 918 | LINUX_MIB_TCPPREQUEUEDROPPED); |
| 906 | } else if (skb_queue_len(&tp->ucopy.prequeue) == 1) { | ||
| 907 | wake_up_interruptible(sk->sk_sleep); | ||
| 908 | if (!inet_csk_ack_scheduled(sk)) | ||
| 909 | inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK, | ||
| 910 | (3 * tcp_rto_min(sk)) / 4, | ||
| 911 | TCP_RTO_MAX); | ||
| 912 | } | 919 | } |
| 913 | return 1; | 920 | |
| 921 | tp->ucopy.memory = 0; | ||
| 922 | } else if (skb_queue_len(&tp->ucopy.prequeue) == 1) { | ||
| 923 | wake_up_interruptible_poll(sk->sk_sleep, | ||
| 924 | POLLIN | POLLRDNORM | POLLRDBAND); | ||
| 925 | if (!inet_csk_ack_scheduled(sk)) | ||
| 926 | inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK, | ||
| 927 | (3 * tcp_rto_min(sk)) / 4, | ||
| 928 | TCP_RTO_MAX); | ||
| 914 | } | 929 | } |
| 915 | return 0; | 930 | return 1; |
| 916 | } | 931 | } |
| 917 | 932 | ||
| 918 | 933 | ||
diff --git a/include/net/wimax.h b/include/net/wimax.h index 6b3824edb39e..2af7bf839f23 100644 --- a/include/net/wimax.h +++ b/include/net/wimax.h | |||
| @@ -253,7 +253,6 @@ | |||
| 253 | struct net_device; | 253 | struct net_device; |
| 254 | struct genl_info; | 254 | struct genl_info; |
| 255 | struct wimax_dev; | 255 | struct wimax_dev; |
| 256 | struct input_dev; | ||
| 257 | 256 | ||
| 258 | /** | 257 | /** |
| 259 | * struct wimax_dev - Generic WiMAX device | 258 | * struct wimax_dev - Generic WiMAX device |
| @@ -293,8 +292,8 @@ struct input_dev; | |||
| 293 | * See wimax_reset()'s documentation. | 292 | * See wimax_reset()'s documentation. |
| 294 | * | 293 | * |
| 295 | * @name: [fill] A way to identify this device. We need to register a | 294 | * @name: [fill] A way to identify this device. We need to register a |
| 296 | * name with many subsystems (input for RFKILL, workqueue | 295 | * name with many subsystems (rfkill, workqueue creation, etc). |
| 297 | * creation, etc). We can't use the network device name as that | 296 | * We can't use the network device name as that |
| 298 | * might change and in some instances we don't know it yet (until | 297 | * might change and in some instances we don't know it yet (until |
| 299 | * we don't call register_netdev()). So we generate an unique one | 298 | * we don't call register_netdev()). So we generate an unique one |
| 300 | * using the driver name and device bus id, place it here and use | 299 | * using the driver name and device bus id, place it here and use |
| @@ -316,9 +315,6 @@ struct input_dev; | |||
| 316 | * | 315 | * |
| 317 | * @rfkill: [private] integration into the RF-Kill infrastructure. | 316 | * @rfkill: [private] integration into the RF-Kill infrastructure. |
| 318 | * | 317 | * |
| 319 | * @rfkill_input: [private] virtual input device to process the | ||
| 320 | * hardware RF Kill switches. | ||
| 321 | * | ||
| 322 | * @rf_sw: [private] State of the software radio switch (OFF/ON) | 318 | * @rf_sw: [private] State of the software radio switch (OFF/ON) |
| 323 | * | 319 | * |
| 324 | * @rf_hw: [private] State of the hardware radio switch (OFF/ON) | 320 | * @rf_hw: [private] State of the hardware radio switch (OFF/ON) |
diff --git a/include/net/wireless.h b/include/net/wireless.h deleted file mode 100644 index 64a76208580c..000000000000 --- a/include/net/wireless.h +++ /dev/null | |||
| @@ -1,472 +0,0 @@ | |||
| 1 | #ifndef __NET_WIRELESS_H | ||
| 2 | #define __NET_WIRELESS_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * 802.11 device management | ||
| 6 | * | ||
| 7 | * Copyright 2007 Johannes Berg <johannes@sipsolutions.net> | ||
| 8 | */ | ||
| 9 | |||
| 10 | #include <linux/netdevice.h> | ||
| 11 | #include <linux/debugfs.h> | ||
| 12 | #include <linux/list.h> | ||
| 13 | #include <linux/ieee80211.h> | ||
| 14 | #include <net/cfg80211.h> | ||
| 15 | |||
| 16 | /** | ||
| 17 | * enum ieee80211_band - supported frequency bands | ||
| 18 | * | ||
| 19 | * The bands are assigned this way because the supported | ||
| 20 | * bitrates differ in these bands. | ||
| 21 | * | ||
| 22 | * @IEEE80211_BAND_2GHZ: 2.4GHz ISM band | ||
| 23 | * @IEEE80211_BAND_5GHZ: around 5GHz band (4.9-5.7) | ||
| 24 | */ | ||
| 25 | enum ieee80211_band { | ||
| 26 | IEEE80211_BAND_2GHZ, | ||
| 27 | IEEE80211_BAND_5GHZ, | ||
| 28 | |||
| 29 | /* keep last */ | ||
| 30 | IEEE80211_NUM_BANDS | ||
| 31 | }; | ||
| 32 | |||
| 33 | /** | ||
| 34 | * enum ieee80211_channel_flags - channel flags | ||
| 35 | * | ||
| 36 | * Channel flags set by the regulatory control code. | ||
| 37 | * | ||
| 38 | * @IEEE80211_CHAN_DISABLED: This channel is disabled. | ||
| 39 | * @IEEE80211_CHAN_PASSIVE_SCAN: Only passive scanning is permitted | ||
| 40 | * on this channel. | ||
| 41 | * @IEEE80211_CHAN_NO_IBSS: IBSS is not allowed on this channel. | ||
| 42 | * @IEEE80211_CHAN_RADAR: Radar detection is required on this channel. | ||
| 43 | * @IEEE80211_CHAN_NO_FAT_ABOVE: extension channel above this channel | ||
| 44 | * is not permitted. | ||
| 45 | * @IEEE80211_CHAN_NO_FAT_BELOW: extension channel below this channel | ||
| 46 | * is not permitted. | ||
| 47 | */ | ||
| 48 | enum ieee80211_channel_flags { | ||
| 49 | IEEE80211_CHAN_DISABLED = 1<<0, | ||
| 50 | IEEE80211_CHAN_PASSIVE_SCAN = 1<<1, | ||
| 51 | IEEE80211_CHAN_NO_IBSS = 1<<2, | ||
| 52 | IEEE80211_CHAN_RADAR = 1<<3, | ||
| 53 | IEEE80211_CHAN_NO_FAT_ABOVE = 1<<4, | ||
| 54 | IEEE80211_CHAN_NO_FAT_BELOW = 1<<5, | ||
| 55 | }; | ||
| 56 | |||
| 57 | /** | ||
| 58 | * struct ieee80211_channel - channel definition | ||
| 59 | * | ||
| 60 | * This structure describes a single channel for use | ||
| 61 | * with cfg80211. | ||
| 62 | * | ||
| 63 | * @center_freq: center frequency in MHz | ||
| 64 | * @max_bandwidth: maximum allowed bandwidth for this channel, in MHz | ||
| 65 | * @hw_value: hardware-specific value for the channel | ||
| 66 | * @flags: channel flags from &enum ieee80211_channel_flags. | ||
| 67 | * @orig_flags: channel flags at registration time, used by regulatory | ||
| 68 | * code to support devices with additional restrictions | ||
| 69 | * @band: band this channel belongs to. | ||
| 70 | * @max_antenna_gain: maximum antenna gain in dBi | ||
| 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. | ||
| 75 | * @orig_mag: internal use | ||
| 76 | * @orig_mpwr: internal use | ||
| 77 | */ | ||
| 78 | struct ieee80211_channel { | ||
| 79 | enum ieee80211_band band; | ||
| 80 | u16 center_freq; | ||
| 81 | u8 max_bandwidth; | ||
| 82 | u16 hw_value; | ||
| 83 | u32 flags; | ||
| 84 | int max_antenna_gain; | ||
| 85 | int max_power; | ||
| 86 | bool beacon_found; | ||
| 87 | u32 orig_flags; | ||
| 88 | int orig_mag, orig_mpwr; | ||
| 89 | }; | ||
| 90 | |||
| 91 | /** | ||
| 92 | * enum ieee80211_rate_flags - rate flags | ||
| 93 | * | ||
| 94 | * Hardware/specification flags for rates. These are structured | ||
| 95 | * in a way that allows using the same bitrate structure for | ||
| 96 | * different bands/PHY modes. | ||
| 97 | * | ||
| 98 | * @IEEE80211_RATE_SHORT_PREAMBLE: Hardware can send with short | ||
| 99 | * preamble on this bitrate; only relevant in 2.4GHz band and | ||
| 100 | * with CCK rates. | ||
| 101 | * @IEEE80211_RATE_MANDATORY_A: This bitrate is a mandatory rate | ||
| 102 | * when used with 802.11a (on the 5 GHz band); filled by the | ||
| 103 | * core code when registering the wiphy. | ||
| 104 | * @IEEE80211_RATE_MANDATORY_B: This bitrate is a mandatory rate | ||
| 105 | * when used with 802.11b (on the 2.4 GHz band); filled by the | ||
| 106 | * core code when registering the wiphy. | ||
| 107 | * @IEEE80211_RATE_MANDATORY_G: This bitrate is a mandatory rate | ||
| 108 | * when used with 802.11g (on the 2.4 GHz band); filled by the | ||
| 109 | * core code when registering the wiphy. | ||
| 110 | * @IEEE80211_RATE_ERP_G: This is an ERP rate in 802.11g mode. | ||
| 111 | */ | ||
| 112 | enum ieee80211_rate_flags { | ||
| 113 | IEEE80211_RATE_SHORT_PREAMBLE = 1<<0, | ||
| 114 | IEEE80211_RATE_MANDATORY_A = 1<<1, | ||
| 115 | IEEE80211_RATE_MANDATORY_B = 1<<2, | ||
| 116 | IEEE80211_RATE_MANDATORY_G = 1<<3, | ||
| 117 | IEEE80211_RATE_ERP_G = 1<<4, | ||
| 118 | }; | ||
| 119 | |||
| 120 | /** | ||
| 121 | * struct ieee80211_rate - bitrate definition | ||
| 122 | * | ||
| 123 | * This structure describes a bitrate that an 802.11 PHY can | ||
| 124 | * operate with. The two values @hw_value and @hw_value_short | ||
| 125 | * are only for driver use when pointers to this structure are | ||
| 126 | * passed around. | ||
| 127 | * | ||
| 128 | * @flags: rate-specific flags | ||
| 129 | * @bitrate: bitrate in units of 100 Kbps | ||
| 130 | * @hw_value: driver/hardware value for this rate | ||
| 131 | * @hw_value_short: driver/hardware value for this rate when | ||
| 132 | * short preamble is used | ||
| 133 | */ | ||
| 134 | struct ieee80211_rate { | ||
| 135 | u32 flags; | ||
| 136 | u16 bitrate; | ||
| 137 | u16 hw_value, hw_value_short; | ||
| 138 | }; | ||
| 139 | |||
| 140 | /** | ||
| 141 | * struct ieee80211_sta_ht_cap - STA's HT capabilities | ||
| 142 | * | ||
| 143 | * This structure describes most essential parameters needed | ||
| 144 | * to describe 802.11n HT capabilities for an STA. | ||
| 145 | * | ||
| 146 | * @ht_supported: is HT supported by the STA | ||
| 147 | * @cap: HT capabilities map as described in 802.11n spec | ||
| 148 | * @ampdu_factor: Maximum A-MPDU length factor | ||
| 149 | * @ampdu_density: Minimum A-MPDU spacing | ||
| 150 | * @mcs: Supported MCS rates | ||
| 151 | */ | ||
| 152 | struct ieee80211_sta_ht_cap { | ||
| 153 | u16 cap; /* use IEEE80211_HT_CAP_ */ | ||
| 154 | bool ht_supported; | ||
| 155 | u8 ampdu_factor; | ||
| 156 | u8 ampdu_density; | ||
| 157 | struct ieee80211_mcs_info mcs; | ||
| 158 | }; | ||
| 159 | |||
| 160 | /** | ||
| 161 | * struct ieee80211_supported_band - frequency band definition | ||
| 162 | * | ||
| 163 | * This structure describes a frequency band a wiphy | ||
| 164 | * is able to operate in. | ||
| 165 | * | ||
| 166 | * @channels: Array of channels the hardware can operate in | ||
| 167 | * in this band. | ||
| 168 | * @band: the band this structure represents | ||
| 169 | * @n_channels: Number of channels in @channels | ||
| 170 | * @bitrates: Array of bitrates the hardware can operate with | ||
| 171 | * in this band. Must be sorted to give a valid "supported | ||
| 172 | * rates" IE, i.e. CCK rates first, then OFDM. | ||
| 173 | * @n_bitrates: Number of bitrates in @bitrates | ||
| 174 | */ | ||
| 175 | struct ieee80211_supported_band { | ||
| 176 | struct ieee80211_channel *channels; | ||
| 177 | struct ieee80211_rate *bitrates; | ||
| 178 | enum ieee80211_band band; | ||
| 179 | int n_channels; | ||
| 180 | int n_bitrates; | ||
| 181 | struct ieee80211_sta_ht_cap ht_cap; | ||
| 182 | }; | ||
| 183 | |||
| 184 | /** | ||
| 185 | * struct wiphy - wireless hardware description | ||
| 186 | * @idx: the wiphy index assigned to this item | ||
| 187 | * @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name> | ||
| 188 | * @custom_regulatory: tells us the driver for this device | ||
| 189 | * has its own custom regulatory domain and cannot identify the | ||
| 190 | * ISO / IEC 3166 alpha2 it belongs to. When this is enabled | ||
| 191 | * we will disregard the first regulatory hint (when the | ||
| 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. | ||
| 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. | ||
| 208 | */ | ||
| 209 | struct wiphy { | ||
| 210 | /* assign these fields before you register the wiphy */ | ||
| 211 | |||
| 212 | /* permanent MAC address */ | ||
| 213 | u8 perm_addr[ETH_ALEN]; | ||
| 214 | |||
| 215 | /* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */ | ||
| 216 | u16 interface_modes; | ||
| 217 | |||
| 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; | ||
| 225 | |||
| 226 | /* If multiple wiphys are registered and you're handed e.g. | ||
| 227 | * a regular netdev with assigned ieee80211_ptr, you won't | ||
| 228 | * know whether it points to a wiphy your driver has registered | ||
| 229 | * or not. Assign this to something global to your driver to | ||
| 230 | * help determine whether you own this wiphy or not. */ | ||
| 231 | void *privid; | ||
| 232 | |||
| 233 | struct ieee80211_supported_band *bands[IEEE80211_NUM_BANDS]; | ||
| 234 | |||
| 235 | /* Lets us get back the wiphy on the callback */ | ||
| 236 | int (*reg_notifier)(struct wiphy *wiphy, | ||
| 237 | struct regulatory_request *request); | ||
| 238 | |||
| 239 | /* fields below are read-only, assigned by cfg80211 */ | ||
| 240 | |||
| 241 | const struct ieee80211_regdomain *regd; | ||
| 242 | |||
| 243 | /* the item in /sys/class/ieee80211/ points to this, | ||
| 244 | * you need use set_wiphy_dev() (see below) */ | ||
| 245 | struct device dev; | ||
| 246 | |||
| 247 | /* dir in debugfs: ieee80211/<wiphyname> */ | ||
| 248 | struct dentry *debugfsdir; | ||
| 249 | |||
| 250 | char priv[0] __attribute__((__aligned__(NETDEV_ALIGN))); | ||
| 251 | }; | ||
| 252 | |||
| 253 | /** struct wireless_dev - wireless per-netdev state | ||
| 254 | * | ||
| 255 | * This structure must be allocated by the driver/stack | ||
| 256 | * that uses the ieee80211_ptr field in struct net_device | ||
| 257 | * (this is intentional so it can be allocated along with | ||
| 258 | * the netdev.) | ||
| 259 | * | ||
| 260 | * @wiphy: pointer to hardware description | ||
| 261 | * @iftype: interface type | ||
| 262 | */ | ||
| 263 | struct wireless_dev { | ||
| 264 | struct wiphy *wiphy; | ||
| 265 | enum nl80211_iftype iftype; | ||
| 266 | |||
| 267 | /* private to the generic wireless code */ | ||
| 268 | struct list_head list; | ||
| 269 | struct net_device *netdev; | ||
| 270 | }; | ||
| 271 | |||
| 272 | /** | ||
| 273 | * wiphy_priv - return priv from wiphy | ||
| 274 | */ | ||
| 275 | static inline void *wiphy_priv(struct wiphy *wiphy) | ||
| 276 | { | ||
| 277 | BUG_ON(!wiphy); | ||
| 278 | return &wiphy->priv; | ||
| 279 | } | ||
| 280 | |||
| 281 | /** | ||
| 282 | * set_wiphy_dev - set device pointer for wiphy | ||
| 283 | */ | ||
| 284 | static inline void set_wiphy_dev(struct wiphy *wiphy, struct device *dev) | ||
| 285 | { | ||
| 286 | wiphy->dev.parent = dev; | ||
| 287 | } | ||
| 288 | |||
| 289 | /** | ||
| 290 | * wiphy_dev - get wiphy dev pointer | ||
| 291 | */ | ||
| 292 | static inline struct device *wiphy_dev(struct wiphy *wiphy) | ||
| 293 | { | ||
| 294 | return wiphy->dev.parent; | ||
| 295 | } | ||
| 296 | |||
| 297 | /** | ||
| 298 | * wiphy_name - get wiphy name | ||
| 299 | */ | ||
| 300 | static inline const char *wiphy_name(struct wiphy *wiphy) | ||
| 301 | { | ||
| 302 | return dev_name(&wiphy->dev); | ||
| 303 | } | ||
| 304 | |||
| 305 | /** | ||
| 306 | * wdev_priv - return wiphy priv from wireless_dev | ||
| 307 | */ | ||
| 308 | static inline void *wdev_priv(struct wireless_dev *wdev) | ||
| 309 | { | ||
| 310 | BUG_ON(!wdev); | ||
| 311 | return wiphy_priv(wdev->wiphy); | ||
| 312 | } | ||
| 313 | |||
| 314 | /** | ||
| 315 | * wiphy_new - create a new wiphy for use with cfg80211 | ||
| 316 | * | ||
| 317 | * create a new wiphy and associate the given operations with it. | ||
| 318 | * @sizeof_priv bytes are allocated for private use. | ||
| 319 | * | ||
| 320 | * the returned pointer must be assigned to each netdev's | ||
| 321 | * ieee80211_ptr for proper operation. | ||
| 322 | */ | ||
| 323 | struct wiphy *wiphy_new(struct cfg80211_ops *ops, int sizeof_priv); | ||
| 324 | |||
| 325 | /** | ||
| 326 | * wiphy_register - register a wiphy with cfg80211 | ||
| 327 | * | ||
| 328 | * register the given wiphy | ||
| 329 | * | ||
| 330 | * Returns a non-negative wiphy index or a negative error code. | ||
| 331 | */ | ||
| 332 | extern int wiphy_register(struct wiphy *wiphy); | ||
| 333 | |||
| 334 | /** | ||
| 335 | * wiphy_unregister - deregister a wiphy from cfg80211 | ||
| 336 | * | ||
| 337 | * unregister a device with the given priv pointer. | ||
| 338 | * After this call, no more requests can be made with this priv | ||
| 339 | * pointer, but the call may sleep to wait for an outstanding | ||
| 340 | * request that is being handled. | ||
| 341 | */ | ||
| 342 | extern void wiphy_unregister(struct wiphy *wiphy); | ||
| 343 | |||
| 344 | /** | ||
| 345 | * wiphy_free - free wiphy | ||
| 346 | */ | ||
| 347 | extern void wiphy_free(struct wiphy *wiphy); | ||
| 348 | |||
| 349 | /** | ||
| 350 | * ieee80211_channel_to_frequency - convert channel number to frequency | ||
| 351 | */ | ||
| 352 | extern int ieee80211_channel_to_frequency(int chan); | ||
| 353 | |||
| 354 | /** | ||
| 355 | * ieee80211_frequency_to_channel - convert frequency to channel number | ||
| 356 | */ | ||
| 357 | extern int ieee80211_frequency_to_channel(int freq); | ||
| 358 | |||
| 359 | /* | ||
| 360 | * Name indirection necessary because the ieee80211 code also has | ||
| 361 | * a function named "ieee80211_get_channel", so if you include | ||
| 362 | * cfg80211's header file you get cfg80211's version, if you try | ||
| 363 | * to include both header files you'll (rightfully!) get a symbol | ||
| 364 | * clash. | ||
| 365 | */ | ||
| 366 | extern struct ieee80211_channel *__ieee80211_get_channel(struct wiphy *wiphy, | ||
| 367 | int freq); | ||
| 368 | /** | ||
| 369 | * ieee80211_get_channel - get channel struct from wiphy for specified frequency | ||
| 370 | */ | ||
| 371 | static inline struct ieee80211_channel * | ||
| 372 | ieee80211_get_channel(struct wiphy *wiphy, int freq) | ||
| 373 | { | ||
| 374 | return __ieee80211_get_channel(wiphy, freq); | ||
| 375 | } | ||
| 376 | |||
| 377 | /** | ||
| 378 | * ieee80211_get_response_rate - get basic rate for a given rate | ||
| 379 | * | ||
| 380 | * @sband: the band to look for rates in | ||
| 381 | * @basic_rates: bitmap of basic rates | ||
| 382 | * @bitrate: the bitrate for which to find the basic rate | ||
| 383 | * | ||
| 384 | * This function returns the basic rate corresponding to a given | ||
| 385 | * bitrate, that is the next lower bitrate contained in the basic | ||
| 386 | * rate map, which is, for this function, given as a bitmap of | ||
| 387 | * indices of rates in the band's bitrate table. | ||
| 388 | */ | ||
| 389 | struct ieee80211_rate * | ||
| 390 | ieee80211_get_response_rate(struct ieee80211_supported_band *sband, | ||
| 391 | u32 basic_rates, int bitrate); | ||
| 392 | |||
| 393 | /** | ||
| 394 | * regulatory_hint - driver hint to the wireless core a regulatory domain | ||
| 395 | * @wiphy: the wireless device giving the hint (used only for reporting | ||
| 396 | * conflicts) | ||
| 397 | * @alpha2: the ISO/IEC 3166 alpha2 the driver claims its regulatory domain | ||
| 398 | * should be in. If @rd is set this should be NULL. Note that if you | ||
| 399 | * set this to NULL you should still set rd->alpha2 to some accepted | ||
| 400 | * alpha2. | ||
| 401 | * | ||
| 402 | * Wireless drivers can use this function to hint to the wireless core | ||
| 403 | * what it believes should be the current regulatory domain by | ||
| 404 | * giving it an ISO/IEC 3166 alpha2 country code it knows its regulatory | ||
| 405 | * domain should be in or by providing a completely build regulatory domain. | ||
| 406 | * If the driver provides an ISO/IEC 3166 alpha2 userspace will be queried | ||
| 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. | ||
| 415 | */ | ||
| 416 | extern int regulatory_hint(struct wiphy *wiphy, const char *alpha2); | ||
| 417 | |||
| 418 | /** | ||
| 419 | * regulatory_hint_11d - hints a country IE as a regulatory domain | ||
| 420 | * @wiphy: the wireless device giving the hint (used only for reporting | ||
| 421 | * conflicts) | ||
| 422 | * @country_ie: pointer to the country IE | ||
| 423 | * @country_ie_len: length of the country IE | ||
| 424 | * | ||
| 425 | * We will intersect the rd with the what CRDA tells us should apply | ||
| 426 | * for the alpha2 this country IE belongs to, this prevents APs from | ||
| 427 | * sending us incorrect or outdated information against a country. | ||
| 428 | */ | ||
| 429 | extern void regulatory_hint_11d(struct wiphy *wiphy, | ||
| 430 | u8 *country_ie, | ||
| 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 | |||
| 472 | #endif /* __NET_WIRELESS_H */ | ||
diff --git a/include/net/xfrm.h b/include/net/xfrm.h index 2e9f5c0018ae..736bca450886 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h | |||
| @@ -994,7 +994,7 @@ static inline int __xfrm_policy_check2(struct sock *sk, int dir, | |||
| 994 | return __xfrm_policy_check(sk, ndir, skb, family); | 994 | return __xfrm_policy_check(sk, ndir, skb, family); |
| 995 | 995 | ||
| 996 | return (!net->xfrm.policy_count[dir] && !skb->sp) || | 996 | return (!net->xfrm.policy_count[dir] && !skb->sp) || |
| 997 | (skb->dst->flags & DST_NOPOLICY) || | 997 | (skb_dst(skb)->flags & DST_NOPOLICY) || |
| 998 | __xfrm_policy_check(sk, ndir, skb, family); | 998 | __xfrm_policy_check(sk, ndir, skb, family); |
| 999 | } | 999 | } |
| 1000 | 1000 | ||
| @@ -1048,7 +1048,7 @@ static inline int xfrm_route_forward(struct sk_buff *skb, unsigned short family) | |||
| 1048 | struct net *net = dev_net(skb->dev); | 1048 | struct net *net = dev_net(skb->dev); |
| 1049 | 1049 | ||
| 1050 | return !net->xfrm.policy_count[XFRM_POLICY_OUT] || | 1050 | return !net->xfrm.policy_count[XFRM_POLICY_OUT] || |
| 1051 | (skb->dst->flags & DST_NOXFRM) || | 1051 | (skb_dst(skb)->flags & DST_NOXFRM) || |
| 1052 | __xfrm_route_forward(skb, family); | 1052 | __xfrm_route_forward(skb, family); |
| 1053 | } | 1053 | } |
| 1054 | 1054 | ||
diff --git a/include/scsi/fc/fc_fip.h b/include/scsi/fc/fc_fip.h index 0627a9ae6347..3d138c1fcf8a 100644 --- a/include/scsi/fc/fc_fip.h +++ b/include/scsi/fc/fc_fip.h | |||
| @@ -22,13 +22,6 @@ | |||
| 22 | * http://www.t11.org/ftp/t11/pub/fc/bb-5/08-543v1.pdf | 22 | * http://www.t11.org/ftp/t11/pub/fc/bb-5/08-543v1.pdf |
| 23 | */ | 23 | */ |
| 24 | 24 | ||
| 25 | /* | ||
| 26 | * The FIP ethertype eventually goes in net/if_ether.h. | ||
| 27 | */ | ||
| 28 | #ifndef ETH_P_FIP | ||
| 29 | #define ETH_P_FIP 0x8914 /* FIP Ethertype */ | ||
| 30 | #endif | ||
| 31 | |||
| 32 | #define FIP_DEF_PRI 128 /* default selection priority */ | 25 | #define FIP_DEF_PRI 128 /* default selection priority */ |
| 33 | #define FIP_DEF_FC_MAP 0x0efc00 /* default FCoE MAP (MAC OUI) value */ | 26 | #define FIP_DEF_FC_MAP 0x0efc00 /* default FCoE MAP (MAC OUI) value */ |
| 34 | #define FIP_DEF_FKA 8000 /* default FCF keep-alive/advert period (mS) */ | 27 | #define FIP_DEF_FKA 8000 /* default FCF keep-alive/advert period (mS) */ |
diff --git a/include/scsi/iscsi_if.h b/include/scsi/iscsi_if.h index d0ed5226f8c4..4426f00da5ff 100644 --- a/include/scsi/iscsi_if.h +++ b/include/scsi/iscsi_if.h | |||
| @@ -22,6 +22,11 @@ | |||
| 22 | #define ISCSI_IF_H | 22 | #define ISCSI_IF_H |
| 23 | 23 | ||
| 24 | #include <scsi/iscsi_proto.h> | 24 | #include <scsi/iscsi_proto.h> |
| 25 | #include <linux/in.h> | ||
| 26 | #include <linux/in6.h> | ||
| 27 | |||
| 28 | #define ISCSI_NL_GRP_ISCSID 1 | ||
| 29 | #define ISCSI_NL_GRP_UIP 2 | ||
| 25 | 30 | ||
| 26 | #define UEVENT_BASE 10 | 31 | #define UEVENT_BASE 10 |
| 27 | #define KEVENT_BASE 100 | 32 | #define KEVENT_BASE 100 |
| @@ -50,7 +55,10 @@ enum iscsi_uevent_e { | |||
| 50 | ISCSI_UEVENT_TGT_DSCVR = UEVENT_BASE + 15, | 55 | ISCSI_UEVENT_TGT_DSCVR = UEVENT_BASE + 15, |
| 51 | ISCSI_UEVENT_SET_HOST_PARAM = UEVENT_BASE + 16, | 56 | ISCSI_UEVENT_SET_HOST_PARAM = UEVENT_BASE + 16, |
| 52 | ISCSI_UEVENT_UNBIND_SESSION = UEVENT_BASE + 17, | 57 | ISCSI_UEVENT_UNBIND_SESSION = UEVENT_BASE + 17, |
| 53 | ISCSI_UEVENT_CREATE_BOUND_SESSION = UEVENT_BASE + 18, | 58 | ISCSI_UEVENT_CREATE_BOUND_SESSION = UEVENT_BASE + 18, |
| 59 | ISCSI_UEVENT_TRANSPORT_EP_CONNECT_THROUGH_HOST = UEVENT_BASE + 19, | ||
| 60 | |||
| 61 | ISCSI_UEVENT_PATH_UPDATE = UEVENT_BASE + 20, | ||
| 54 | 62 | ||
| 55 | /* up events */ | 63 | /* up events */ |
| 56 | ISCSI_KEVENT_RECV_PDU = KEVENT_BASE + 1, | 64 | ISCSI_KEVENT_RECV_PDU = KEVENT_BASE + 1, |
| @@ -59,6 +67,9 @@ enum iscsi_uevent_e { | |||
| 59 | ISCSI_KEVENT_DESTROY_SESSION = KEVENT_BASE + 4, | 67 | ISCSI_KEVENT_DESTROY_SESSION = KEVENT_BASE + 4, |
| 60 | ISCSI_KEVENT_UNBIND_SESSION = KEVENT_BASE + 5, | 68 | ISCSI_KEVENT_UNBIND_SESSION = KEVENT_BASE + 5, |
| 61 | ISCSI_KEVENT_CREATE_SESSION = KEVENT_BASE + 6, | 69 | ISCSI_KEVENT_CREATE_SESSION = KEVENT_BASE + 6, |
| 70 | |||
| 71 | ISCSI_KEVENT_PATH_REQ = KEVENT_BASE + 7, | ||
| 72 | ISCSI_KEVENT_IF_DOWN = KEVENT_BASE + 8, | ||
| 62 | }; | 73 | }; |
| 63 | 74 | ||
| 64 | enum iscsi_tgt_dscvr { | 75 | enum iscsi_tgt_dscvr { |
| @@ -131,6 +142,10 @@ struct iscsi_uevent { | |||
| 131 | struct msg_transport_connect { | 142 | struct msg_transport_connect { |
| 132 | uint32_t non_blocking; | 143 | uint32_t non_blocking; |
| 133 | } ep_connect; | 144 | } ep_connect; |
| 145 | struct msg_transport_connect_through_host { | ||
| 146 | uint32_t host_no; | ||
| 147 | uint32_t non_blocking; | ||
| 148 | } ep_connect_through_host; | ||
| 134 | struct msg_transport_poll { | 149 | struct msg_transport_poll { |
| 135 | uint64_t ep_handle; | 150 | uint64_t ep_handle; |
| 136 | uint32_t timeout_ms; | 151 | uint32_t timeout_ms; |
| @@ -154,6 +169,9 @@ struct iscsi_uevent { | |||
| 154 | uint32_t param; /* enum iscsi_host_param */ | 169 | uint32_t param; /* enum iscsi_host_param */ |
| 155 | uint32_t len; | 170 | uint32_t len; |
| 156 | } set_host_param; | 171 | } set_host_param; |
| 172 | struct msg_set_path { | ||
| 173 | uint32_t host_no; | ||
| 174 | } set_path; | ||
| 157 | } u; | 175 | } u; |
| 158 | union { | 176 | union { |
| 159 | /* messages k -> u */ | 177 | /* messages k -> u */ |
| @@ -187,10 +205,39 @@ struct iscsi_uevent { | |||
| 187 | struct msg_transport_connect_ret { | 205 | struct msg_transport_connect_ret { |
| 188 | uint64_t handle; | 206 | uint64_t handle; |
| 189 | } ep_connect_ret; | 207 | } ep_connect_ret; |
| 208 | struct msg_req_path { | ||
| 209 | uint32_t host_no; | ||
| 210 | } req_path; | ||
| 211 | struct msg_notify_if_down { | ||
| 212 | uint32_t host_no; | ||
| 213 | } notify_if_down; | ||
| 190 | } r; | 214 | } r; |
| 191 | } __attribute__ ((aligned (sizeof(uint64_t)))); | 215 | } __attribute__ ((aligned (sizeof(uint64_t)))); |
| 192 | 216 | ||
| 193 | /* | 217 | /* |
| 218 | * To keep the struct iscsi_uevent size the same for userspace code | ||
| 219 | * compatibility, the main structure for ISCSI_UEVENT_PATH_UPDATE and | ||
| 220 | * ISCSI_KEVENT_PATH_REQ is defined separately and comes after the | ||
| 221 | * struct iscsi_uevent in the NETLINK_ISCSI message. | ||
| 222 | */ | ||
| 223 | struct iscsi_path { | ||
| 224 | uint64_t handle; | ||
| 225 | uint8_t mac_addr[6]; | ||
| 226 | uint8_t mac_addr_old[6]; | ||
| 227 | uint32_t ip_addr_len; /* 4 or 16 */ | ||
| 228 | union { | ||
| 229 | struct in_addr v4_addr; | ||
| 230 | struct in6_addr v6_addr; | ||
| 231 | } src; | ||
| 232 | union { | ||
| 233 | struct in_addr v4_addr; | ||
| 234 | struct in6_addr v6_addr; | ||
| 235 | } dst; | ||
| 236 | uint16_t vlan_id; | ||
| 237 | uint16_t pmtu; | ||
| 238 | } __attribute__ ((aligned (sizeof(uint64_t)))); | ||
| 239 | |||
| 240 | /* | ||
| 194 | * Common error codes | 241 | * Common error codes |
| 195 | */ | 242 | */ |
| 196 | enum iscsi_err { | 243 | enum iscsi_err { |
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h index 45f9cc642c46..ebdd9f4cf070 100644 --- a/include/scsi/libfc.h +++ b/include/scsi/libfc.h | |||
| @@ -679,6 +679,7 @@ struct fc_lport { | |||
| 679 | unsigned int e_d_tov; | 679 | unsigned int e_d_tov; |
| 680 | unsigned int r_a_tov; | 680 | unsigned int r_a_tov; |
| 681 | u8 max_retry_count; | 681 | u8 max_retry_count; |
| 682 | u8 max_rport_retry_count; | ||
| 682 | u16 link_speed; | 683 | u16 link_speed; |
| 683 | u16 link_supported_speeds; | 684 | u16 link_supported_speeds; |
| 684 | u16 lro_xid; /* max xid for fcoe lro */ | 685 | u16 lro_xid; /* max xid for fcoe lro */ |
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h index 666cc131732e..b2410605b740 100644 --- a/include/scsi/libfcoe.h +++ b/include/scsi/libfcoe.h | |||
| @@ -73,6 +73,7 @@ enum fip_state { | |||
| 73 | * @link: current link status for libfc. | 73 | * @link: current link status for libfc. |
| 74 | * @last_link: last link state reported to libfc. | 74 | * @last_link: last link state reported to libfc. |
| 75 | * @map_dest: use the FC_MAP mode for destination MAC addresses. | 75 | * @map_dest: use the FC_MAP mode for destination MAC addresses. |
| 76 | * @spma: supports SPMA server-provided MACs mode | ||
| 76 | * @dest_addr: MAC address of the selected FC forwarder. | 77 | * @dest_addr: MAC address of the selected FC forwarder. |
| 77 | * @ctl_src_addr: the native MAC address of our local port. | 78 | * @ctl_src_addr: the native MAC address of our local port. |
| 78 | * @data_src_addr: the assigned MAC address for the local port after FLOGI. | 79 | * @data_src_addr: the assigned MAC address for the local port after FLOGI. |
| @@ -104,6 +105,7 @@ struct fcoe_ctlr { | |||
| 104 | u8 link; | 105 | u8 link; |
| 105 | u8 last_link; | 106 | u8 last_link; |
| 106 | u8 map_dest; | 107 | u8 map_dest; |
| 108 | u8 spma; | ||
| 107 | u8 dest_addr[ETH_ALEN]; | 109 | u8 dest_addr[ETH_ALEN]; |
| 108 | u8 ctl_src_addr[ETH_ALEN]; | 110 | u8 ctl_src_addr[ETH_ALEN]; |
| 109 | u8 data_src_addr[ETH_ALEN]; | 111 | u8 data_src_addr[ETH_ALEN]; |
diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h index 0289f5745fb9..196525cd402f 100644 --- a/include/scsi/libiscsi.h +++ b/include/scsi/libiscsi.h | |||
| @@ -82,9 +82,12 @@ enum { | |||
| 82 | 82 | ||
| 83 | 83 | ||
| 84 | enum { | 84 | enum { |
| 85 | ISCSI_TASK_FREE, | ||
| 85 | ISCSI_TASK_COMPLETED, | 86 | ISCSI_TASK_COMPLETED, |
| 86 | ISCSI_TASK_PENDING, | 87 | ISCSI_TASK_PENDING, |
| 87 | ISCSI_TASK_RUNNING, | 88 | ISCSI_TASK_RUNNING, |
| 89 | ISCSI_TASK_ABRT_TMF, /* aborted due to TMF */ | ||
| 90 | ISCSI_TASK_ABRT_SESS_RECOV, /* aborted due to session recovery */ | ||
| 88 | }; | 91 | }; |
| 89 | 92 | ||
| 90 | struct iscsi_r2t_info { | 93 | struct iscsi_r2t_info { |
| @@ -181,9 +184,7 @@ struct iscsi_conn { | |||
| 181 | 184 | ||
| 182 | /* xmit */ | 185 | /* xmit */ |
| 183 | struct list_head mgmtqueue; /* mgmt (control) xmit queue */ | 186 | struct list_head mgmtqueue; /* mgmt (control) xmit queue */ |
| 184 | struct list_head mgmt_run_list; /* list of control tasks */ | 187 | struct list_head cmdqueue; /* data-path cmd queue */ |
| 185 | struct list_head xmitqueue; /* data-path cmd queue */ | ||
| 186 | struct list_head run_list; /* list of cmds in progress */ | ||
| 187 | struct list_head requeue; /* tasks needing another run */ | 188 | struct list_head requeue; /* tasks needing another run */ |
| 188 | struct work_struct xmitwork; /* per-conn. xmit workqueue */ | 189 | struct work_struct xmitwork; /* per-conn. xmit workqueue */ |
| 189 | unsigned long suspend_tx; /* suspend Tx */ | 190 | unsigned long suspend_tx; /* suspend Tx */ |
| @@ -406,6 +407,7 @@ extern int __iscsi_complete_pdu(struct iscsi_conn *, struct iscsi_hdr *, | |||
| 406 | char *, int); | 407 | char *, int); |
| 407 | extern int iscsi_verify_itt(struct iscsi_conn *, itt_t); | 408 | extern int iscsi_verify_itt(struct iscsi_conn *, itt_t); |
| 408 | extern struct iscsi_task *iscsi_itt_to_ctask(struct iscsi_conn *, itt_t); | 409 | extern struct iscsi_task *iscsi_itt_to_ctask(struct iscsi_conn *, itt_t); |
| 410 | extern struct iscsi_task *iscsi_itt_to_task(struct iscsi_conn *, itt_t); | ||
| 409 | extern void iscsi_requeue_task(struct iscsi_task *task); | 411 | extern void iscsi_requeue_task(struct iscsi_task *task); |
| 410 | extern void iscsi_put_task(struct iscsi_task *task); | 412 | extern void iscsi_put_task(struct iscsi_task *task); |
| 411 | extern void __iscsi_get_task(struct iscsi_task *task); | 413 | extern void __iscsi_get_task(struct iscsi_task *task); |
diff --git a/include/scsi/osd_attributes.h b/include/scsi/osd_attributes.h index f888a6fda073..56e920ade326 100644 --- a/include/scsi/osd_attributes.h +++ b/include/scsi/osd_attributes.h | |||
| @@ -29,6 +29,7 @@ enum { | |||
| 29 | OSD_APAGE_PARTITION_INFORMATION = OSD_APAGE_PARTITION_FIRST + 1, | 29 | OSD_APAGE_PARTITION_INFORMATION = OSD_APAGE_PARTITION_FIRST + 1, |
| 30 | OSD_APAGE_PARTITION_QUOTAS = OSD_APAGE_PARTITION_FIRST + 2, | 30 | OSD_APAGE_PARTITION_QUOTAS = OSD_APAGE_PARTITION_FIRST + 2, |
| 31 | OSD_APAGE_PARTITION_TIMESTAMP = OSD_APAGE_PARTITION_FIRST + 3, | 31 | OSD_APAGE_PARTITION_TIMESTAMP = OSD_APAGE_PARTITION_FIRST + 3, |
| 32 | OSD_APAGE_PARTITION_ATTR_ACCESS = OSD_APAGE_PARTITION_FIRST + 4, | ||
| 32 | OSD_APAGE_PARTITION_SECURITY = OSD_APAGE_PARTITION_FIRST + 5, | 33 | OSD_APAGE_PARTITION_SECURITY = OSD_APAGE_PARTITION_FIRST + 5, |
| 33 | OSD_APAGE_PARTITION_LAST = 0x5FFFFFFF, | 34 | OSD_APAGE_PARTITION_LAST = 0x5FFFFFFF, |
| 34 | 35 | ||
| @@ -51,7 +52,9 @@ enum { | |||
| 51 | OSD_APAGE_RESERVED_TYPE_LAST = 0xEFFFFFFF, | 52 | OSD_APAGE_RESERVED_TYPE_LAST = 0xEFFFFFFF, |
| 52 | 53 | ||
| 53 | OSD_APAGE_COMMON_FIRST = 0xF0000000, | 54 | OSD_APAGE_COMMON_FIRST = 0xF0000000, |
| 54 | OSD_APAGE_COMMON_LAST = 0xFFFFFFFE, | 55 | OSD_APAGE_COMMON_LAST = 0xFFFFFFFD, |
| 56 | |||
| 57 | OSD_APAGE_CURRENT_COMMAND = 0xFFFFFFFE, | ||
| 55 | 58 | ||
| 56 | OSD_APAGE_REQUEST_ALL = 0xFFFFFFFF, | 59 | OSD_APAGE_REQUEST_ALL = 0xFFFFFFFF, |
| 57 | }; | 60 | }; |
| @@ -106,10 +109,30 @@ enum { | |||
| 106 | OSD_ATTR_RI_PRODUCT_REVISION_LEVEL = 0x7, /* 4 */ | 109 | OSD_ATTR_RI_PRODUCT_REVISION_LEVEL = 0x7, /* 4 */ |
| 107 | OSD_ATTR_RI_PRODUCT_SERIAL_NUMBER = 0x8, /* variable */ | 110 | OSD_ATTR_RI_PRODUCT_SERIAL_NUMBER = 0x8, /* variable */ |
| 108 | OSD_ATTR_RI_OSD_NAME = 0x9, /* variable */ | 111 | OSD_ATTR_RI_OSD_NAME = 0x9, /* variable */ |
| 112 | OSD_ATTR_RI_MAX_CDB_CONTINUATION_LEN = 0xA, /* 4 */ | ||
| 109 | OSD_ATTR_RI_TOTAL_CAPACITY = 0x80, /* 8 */ | 113 | OSD_ATTR_RI_TOTAL_CAPACITY = 0x80, /* 8 */ |
| 110 | OSD_ATTR_RI_USED_CAPACITY = 0x81, /* 8 */ | 114 | OSD_ATTR_RI_USED_CAPACITY = 0x81, /* 8 */ |
| 111 | OSD_ATTR_RI_NUMBER_OF_PARTITIONS = 0xC0, /* 8 */ | 115 | OSD_ATTR_RI_NUMBER_OF_PARTITIONS = 0xC0, /* 8 */ |
| 112 | OSD_ATTR_RI_CLOCK = 0x100, /* 6 */ | 116 | OSD_ATTR_RI_CLOCK = 0x100, /* 6 */ |
| 117 | OARI_DEFAULT_ISOLATION_METHOD = 0X110, /* 1 */ | ||
| 118 | OARI_SUPPORTED_ISOLATION_METHODS = 0X111, /* 32 */ | ||
| 119 | |||
| 120 | OARI_DATA_ATOMICITY_GUARANTEE = 0X120, /* 8 */ | ||
| 121 | OARI_DATA_ATOMICITY_ALIGNMENT = 0X121, /* 8 */ | ||
| 122 | OARI_ATTRIBUTES_ATOMICITY_GUARANTEE = 0X122, /* 8 */ | ||
| 123 | OARI_DATA_ATTRIBUTES_ATOMICITY_MULTIPLIER = 0X123, /* 1 */ | ||
| 124 | |||
| 125 | OARI_MAXIMUM_SNAPSHOTS_COUNT = 0X1C1, /* 0 or 4 */ | ||
| 126 | OARI_MAXIMUM_CLONES_COUNT = 0X1C2, /* 0 or 4 */ | ||
| 127 | OARI_MAXIMUM_BRANCH_DEPTH = 0X1CC, /* 0 or 4 */ | ||
| 128 | OARI_SUPPORTED_OBJECT_DUPLICATION_METHOD_FIRST = 0X200, /* 0 or 4 */ | ||
| 129 | OARI_SUPPORTED_OBJECT_DUPLICATION_METHOD_LAST = 0X2ff, /* 0 or 4 */ | ||
| 130 | OARI_SUPPORTED_TIME_OF_DUPLICATION_METHOD_FIRST = 0X300, /* 0 or 4 */ | ||
| 131 | OARI_SUPPORTED_TIME_OF_DUPLICATION_METHOD_LAST = 0X30F, /* 0 or 4 */ | ||
| 132 | OARI_SUPPORT_FOR_DUPLICATED_OBJECT_FREEZING = 0X310, /* 0 or 4 */ | ||
| 133 | OARI_SUPPORT_FOR_SNAPSHOT_REFRESHING = 0X311, /* 0 or 1 */ | ||
| 134 | OARI_SUPPORTED_CDB_CONTINUATION_DESC_TYPE_FIRST = 0X7000001,/* 0 or 4 */ | ||
| 135 | OARI_SUPPORTED_CDB_CONTINUATION_DESC_TYPE_LAST = 0X700FFFF,/* 0 or 4 */ | ||
| 113 | }; | 136 | }; |
| 114 | /* Root_Information_attributes_page does not have a get_page structure */ | 137 | /* Root_Information_attributes_page does not have a get_page structure */ |
| 115 | 138 | ||
| @@ -120,7 +143,15 @@ enum { | |||
| 120 | OSD_ATTR_PI_PARTITION_ID = 0x1, /* 8 */ | 143 | OSD_ATTR_PI_PARTITION_ID = 0x1, /* 8 */ |
| 121 | OSD_ATTR_PI_USERNAME = 0x9, /* variable */ | 144 | OSD_ATTR_PI_USERNAME = 0x9, /* variable */ |
| 122 | OSD_ATTR_PI_USED_CAPACITY = 0x81, /* 8 */ | 145 | OSD_ATTR_PI_USED_CAPACITY = 0x81, /* 8 */ |
| 146 | OSD_ATTR_PI_USED_CAPACITY_INCREMENT = 0x84, /* 0 or 8 */ | ||
| 123 | OSD_ATTR_PI_NUMBER_OF_OBJECTS = 0xC1, /* 8 */ | 147 | OSD_ATTR_PI_NUMBER_OF_OBJECTS = 0xC1, /* 8 */ |
| 148 | |||
| 149 | OSD_ATTR_PI_ACTUAL_DATA_SPACE = 0xD1, /* 0 or 8 */ | ||
| 150 | OSD_ATTR_PI_RESERVED_DATA_SPACE = 0xD2, /* 0 or 8 */ | ||
| 151 | OSD_ATTR_PI_DEFAULT_SNAPSHOT_DUPLICATION_METHOD = 0x200,/* 0 or 4 */ | ||
| 152 | OSD_ATTR_PI_DEFAULT_CLONE_DUPLICATION_METHOD = 0x201,/* 0 or 4 */ | ||
| 153 | OSD_ATTR_PI_DEFAULT_SP_TIME_OF_DUPLICATION = 0x300,/* 0 or 4 */ | ||
| 154 | OSD_ATTR_PI_DEFAULT_CLONE_TIME_OF_DUPLICATION = 0x301,/* 0 or 4 */ | ||
| 124 | }; | 155 | }; |
| 125 | /* Partition Information attributes page does not have a get_page structure */ | 156 | /* Partition Information attributes page does not have a get_page structure */ |
| 126 | 157 | ||
| @@ -131,6 +162,7 @@ enum { | |||
| 131 | OSD_ATTR_CI_PARTITION_ID = 0x1, /* 8 */ | 162 | OSD_ATTR_CI_PARTITION_ID = 0x1, /* 8 */ |
| 132 | OSD_ATTR_CI_COLLECTION_OBJECT_ID = 0x2, /* 8 */ | 163 | OSD_ATTR_CI_COLLECTION_OBJECT_ID = 0x2, /* 8 */ |
| 133 | OSD_ATTR_CI_USERNAME = 0x9, /* variable */ | 164 | OSD_ATTR_CI_USERNAME = 0x9, /* variable */ |
| 165 | OSD_ATTR_CI_COLLECTION_TYPE = 0xA, /* 1 */ | ||
| 134 | OSD_ATTR_CI_USED_CAPACITY = 0x81, /* 8 */ | 166 | OSD_ATTR_CI_USED_CAPACITY = 0x81, /* 8 */ |
| 135 | }; | 167 | }; |
| 136 | /* Collection Information attributes page does not have a get_page structure */ | 168 | /* Collection Information attributes page does not have a get_page structure */ |
| @@ -144,6 +176,8 @@ enum { | |||
| 144 | OSD_ATTR_OI_USERNAME = 0x9, /* variable */ | 176 | OSD_ATTR_OI_USERNAME = 0x9, /* variable */ |
| 145 | OSD_ATTR_OI_USED_CAPACITY = 0x81, /* 8 */ | 177 | OSD_ATTR_OI_USED_CAPACITY = 0x81, /* 8 */ |
| 146 | OSD_ATTR_OI_LOGICAL_LENGTH = 0x82, /* 8 */ | 178 | OSD_ATTR_OI_LOGICAL_LENGTH = 0x82, /* 8 */ |
| 179 | SD_ATTR_OI_ACTUAL_DATA_SPACE = 0XD1, /* 0 OR 8 */ | ||
| 180 | SD_ATTR_OI_RESERVED_DATA_SPACE = 0XD2, /* 0 OR 8 */ | ||
| 147 | }; | 181 | }; |
| 148 | /* Object Information attributes page does not have a get_page structure */ | 182 | /* Object Information attributes page does not have a get_page structure */ |
| 149 | 183 | ||
| @@ -248,7 +282,18 @@ struct object_timestamps_attributes_page { | |||
| 248 | struct osd_timestamp data_modified_time; | 282 | struct osd_timestamp data_modified_time; |
| 249 | } __packed; | 283 | } __packed; |
| 250 | 284 | ||
| 251 | /* 7.1.2.19 Collections attributes page */ | 285 | /* OSD2r05: 7.1.3.19 Attributes Access attributes page |
| 286 | * (OSD_APAGE_PARTITION_ATTR_ACCESS) | ||
| 287 | * | ||
| 288 | * each attribute is of the form below. Total array length is deduced | ||
| 289 | * from the attribute's length | ||
| 290 | * (See allowed_attributes_access of the struct osd_cap_object_descriptor) | ||
| 291 | */ | ||
| 292 | struct attributes_access_attr { | ||
| 293 | struct osd_attributes_list_attrid attr_list[0]; | ||
| 294 | } __packed; | ||
| 295 | |||
| 296 | /* OSD2r05: 7.1.2.21 Collections attributes page */ | ||
| 252 | /* TBD */ | 297 | /* TBD */ |
| 253 | 298 | ||
| 254 | /* 7.1.2.20 Root Policy/Security attributes page (OSD_APAGE_ROOT_SECURITY) */ | 299 | /* 7.1.2.20 Root Policy/Security attributes page (OSD_APAGE_ROOT_SECURITY) */ |
| @@ -324,4 +369,29 @@ struct object_security_attributes_page { | |||
| 324 | __be32 policy_access_tag; | 369 | __be32 policy_access_tag; |
| 325 | } __packed; | 370 | } __packed; |
| 326 | 371 | ||
| 372 | /* OSD2r05: 7.1.3.31 Current Command attributes page | ||
| 373 | * (OSD_APAGE_CURRENT_COMMAND) | ||
| 374 | */ | ||
| 375 | enum { | ||
| 376 | OSD_ATTR_CC_RESPONSE_INTEGRITY_CHECK_VALUE = 0x1, /* 32 */ | ||
| 377 | OSD_ATTR_CC_OBJECT_TYPE = 0x2, /* 1 */ | ||
| 378 | OSD_ATTR_CC_PARTITION_ID = 0x3, /* 8 */ | ||
| 379 | OSD_ATTR_CC_OBJECT_ID = 0x4, /* 8 */ | ||
| 380 | OSD_ATTR_CC_STARTING_BYTE_ADDRESS_OF_APPEND = 0x5, /* 8 */ | ||
| 381 | OSD_ATTR_CC_CHANGE_IN_USED_CAPACITY = 0x6, /* 8 */ | ||
| 382 | }; | ||
| 383 | |||
| 384 | /*TBD: osdv1_current_command_attributes_page */ | ||
| 385 | |||
| 386 | struct osdv2_current_command_attributes_page { | ||
| 387 | struct osd_attr_page_header hdr; /* id=0xFFFFFFFE, size=0x44 */ | ||
| 388 | u8 response_integrity_check_value[OSD_CRYPTO_KEYID_SIZE]; | ||
| 389 | u8 object_type; | ||
| 390 | u8 reserved[3]; | ||
| 391 | __be64 partition_id; | ||
| 392 | __be64 object_id; | ||
| 393 | __be64 starting_byte_address_of_append; | ||
| 394 | __be64 change_in_used_capacity; | ||
| 395 | }; | ||
| 396 | |||
| 327 | #endif /*ndef __OSD_ATTRIBUTES_H__*/ | 397 | #endif /*ndef __OSD_ATTRIBUTES_H__*/ |
diff --git a/include/scsi/osd_initiator.h b/include/scsi/osd_initiator.h index b24d9616eb46..02bd9f716357 100644 --- a/include/scsi/osd_initiator.h +++ b/include/scsi/osd_initiator.h | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include "osd_types.h" | 18 | #include "osd_types.h" |
| 19 | 19 | ||
| 20 | #include <linux/blkdev.h> | 20 | #include <linux/blkdev.h> |
| 21 | #include <scsi/scsi_device.h> | ||
| 21 | 22 | ||
| 22 | /* Note: "NI" in comments below means "Not Implemented yet" */ | 23 | /* Note: "NI" in comments below means "Not Implemented yet" */ |
| 23 | 24 | ||
| @@ -47,6 +48,7 @@ enum osd_std_version { | |||
| 47 | */ | 48 | */ |
| 48 | struct osd_dev { | 49 | struct osd_dev { |
| 49 | struct scsi_device *scsi_device; | 50 | struct scsi_device *scsi_device; |
| 51 | struct file *file; | ||
| 50 | unsigned def_timeout; | 52 | unsigned def_timeout; |
| 51 | 53 | ||
| 52 | #ifdef OSD_VER1_SUPPORT | 54 | #ifdef OSD_VER1_SUPPORT |
| @@ -69,6 +71,10 @@ void osd_dev_fini(struct osd_dev *od); | |||
| 69 | 71 | ||
| 70 | /* some hi level device operations */ | 72 | /* some hi level device operations */ |
| 71 | int osd_auto_detect_ver(struct osd_dev *od, void *caps); /* GFP_KERNEL */ | 73 | int osd_auto_detect_ver(struct osd_dev *od, void *caps); /* GFP_KERNEL */ |
| 74 | static inline struct request_queue *osd_request_queue(struct osd_dev *od) | ||
| 75 | { | ||
| 76 | return od->scsi_device->request_queue; | ||
| 77 | } | ||
| 72 | 78 | ||
| 73 | /* we might want to use function vector in the future */ | 79 | /* 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) | 80 | static inline void osd_dev_set_ver(struct osd_dev *od, enum osd_std_version v) |
| @@ -363,7 +369,9 @@ 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 *); | 369 | void osd_req_remove_object(struct osd_request *or, struct osd_obj_id *); |
| 364 | 370 | ||
| 365 | void osd_req_write(struct osd_request *or, | 371 | void osd_req_write(struct osd_request *or, |
| 366 | const struct osd_obj_id *, struct bio *data_out, u64 offset); | 372 | const struct osd_obj_id *obj, u64 offset, struct bio *bio, u64 len); |
| 373 | int osd_req_write_kern(struct osd_request *or, | ||
| 374 | const struct osd_obj_id *obj, u64 offset, void *buff, u64 len); | ||
| 367 | void osd_req_append(struct osd_request *or, | 375 | void osd_req_append(struct osd_request *or, |
| 368 | const struct osd_obj_id *, struct bio *data_out);/* NI */ | 376 | const struct osd_obj_id *, struct bio *data_out);/* NI */ |
| 369 | void osd_req_create_write(struct osd_request *or, | 377 | void osd_req_create_write(struct osd_request *or, |
| @@ -378,7 +386,9 @@ void osd_req_flush_object(struct osd_request *or, | |||
| 378 | /*V2*/ u64 offset, /*V2*/ u64 len); | 386 | /*V2*/ u64 offset, /*V2*/ u64 len); |
| 379 | 387 | ||
| 380 | void osd_req_read(struct osd_request *or, | 388 | void osd_req_read(struct osd_request *or, |
| 381 | const struct osd_obj_id *, struct bio *data_in, u64 offset); | 389 | const struct osd_obj_id *obj, u64 offset, struct bio *bio, u64 len); |
| 390 | int osd_req_read_kern(struct osd_request *or, | ||
| 391 | const struct osd_obj_id *obj, u64 offset, void *buff, u64 len); | ||
| 382 | 392 | ||
| 383 | /* | 393 | /* |
| 384 | * Root/Partition/Collection/Object Attributes commands | 394 | * Root/Partition/Collection/Object Attributes commands |
diff --git a/include/scsi/osd_protocol.h b/include/scsi/osd_protocol.h index 62b2ab8c69d4..2cc8e8b1cc19 100644 --- a/include/scsi/osd_protocol.h +++ b/include/scsi/osd_protocol.h | |||
| @@ -303,7 +303,15 @@ enum osd_service_actions { | |||
| 303 | OSD_ACT_V2(REMOVE_MEMBER_OBJECTS, 0x21) | 303 | OSD_ACT_V2(REMOVE_MEMBER_OBJECTS, 0x21) |
| 304 | OSD_ACT_V2(GET_MEMBER_ATTRIBUTES, 0x22) | 304 | OSD_ACT_V2(GET_MEMBER_ATTRIBUTES, 0x22) |
| 305 | OSD_ACT_V2(SET_MEMBER_ATTRIBUTES, 0x23) | 305 | OSD_ACT_V2(SET_MEMBER_ATTRIBUTES, 0x23) |
| 306 | |||
| 307 | OSD_ACT_V2(CREATE_CLONE, 0x28) | ||
| 308 | OSD_ACT_V2(CREATE_SNAPSHOT, 0x29) | ||
| 309 | OSD_ACT_V2(DETACH_CLONE, 0x2A) | ||
| 310 | OSD_ACT_V2(REFRESH_SNAPSHOT_CLONE, 0x2B) | ||
| 311 | OSD_ACT_V2(RESTORE_PARTITION_FROM_SNAPSHOT, 0x2C) | ||
| 312 | |||
| 306 | OSD_ACT_V2(READ_MAP, 0x31) | 313 | OSD_ACT_V2(READ_MAP, 0x31) |
| 314 | OSD_ACT_V2(READ_MAPS_COMPARE, 0x32) | ||
| 307 | 315 | ||
| 308 | OSD_ACT_V1_V2(PERFORM_SCSI_COMMAND, 0x8F7E, 0x8F7C) | 316 | OSD_ACT_V1_V2(PERFORM_SCSI_COMMAND, 0x8F7E, 0x8F7C) |
| 309 | OSD_ACT_V1_V2(SCSI_TASK_MANAGEMENT, 0x8F7F, 0x8F7D) | 317 | OSD_ACT_V1_V2(SCSI_TASK_MANAGEMENT, 0x8F7F, 0x8F7D) |
diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h index 457588e1119b..349c7f30720d 100644 --- a/include/scsi/scsi_transport_iscsi.h +++ b/include/scsi/scsi_transport_iscsi.h | |||
| @@ -126,12 +126,14 @@ struct iscsi_transport { | |||
| 126 | int *index, int *age); | 126 | int *index, int *age); |
| 127 | 127 | ||
| 128 | void (*session_recovery_timedout) (struct iscsi_cls_session *session); | 128 | void (*session_recovery_timedout) (struct iscsi_cls_session *session); |
| 129 | struct iscsi_endpoint *(*ep_connect) (struct sockaddr *dst_addr, | 129 | struct iscsi_endpoint *(*ep_connect) (struct Scsi_Host *shost, |
| 130 | struct sockaddr *dst_addr, | ||
| 130 | int non_blocking); | 131 | int non_blocking); |
| 131 | int (*ep_poll) (struct iscsi_endpoint *ep, int timeout_ms); | 132 | int (*ep_poll) (struct iscsi_endpoint *ep, int timeout_ms); |
| 132 | void (*ep_disconnect) (struct iscsi_endpoint *ep); | 133 | void (*ep_disconnect) (struct iscsi_endpoint *ep); |
| 133 | int (*tgt_dscvr) (struct Scsi_Host *shost, enum iscsi_tgt_dscvr type, | 134 | int (*tgt_dscvr) (struct Scsi_Host *shost, enum iscsi_tgt_dscvr type, |
| 134 | uint32_t enable, struct sockaddr *dst_addr); | 135 | uint32_t enable, struct sockaddr *dst_addr); |
| 136 | int (*set_path) (struct Scsi_Host *shost, struct iscsi_path *params); | ||
| 135 | }; | 137 | }; |
| 136 | 138 | ||
| 137 | /* | 139 | /* |
| @@ -148,6 +150,10 @@ extern void iscsi_conn_error_event(struct iscsi_cls_conn *conn, | |||
| 148 | extern int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr, | 150 | extern int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr, |
| 149 | char *data, uint32_t data_size); | 151 | char *data, uint32_t data_size); |
| 150 | 152 | ||
| 153 | extern int iscsi_offload_mesg(struct Scsi_Host *shost, | ||
| 154 | struct iscsi_transport *transport, uint32_t type, | ||
| 155 | char *data, uint16_t data_size); | ||
| 156 | |||
| 151 | struct iscsi_cls_conn { | 157 | struct iscsi_cls_conn { |
| 152 | struct list_head conn_list; /* item in connlist */ | 158 | struct list_head conn_list; /* item in connlist */ |
| 153 | void *dd_data; /* LLD private data */ | 159 | void *dd_data; /* LLD private data */ |
diff --git a/include/sound/asound.h b/include/sound/asound.h index 6add80fc2512..82aed3f47534 100644 --- a/include/sound/asound.h +++ b/include/sound/asound.h | |||
| @@ -255,6 +255,7 @@ typedef int __bitwise snd_pcm_subformat_t; | |||
| 255 | #define SNDRV_PCM_INFO_HALF_DUPLEX 0x00100000 /* only half duplex */ | 255 | #define SNDRV_PCM_INFO_HALF_DUPLEX 0x00100000 /* only half duplex */ |
| 256 | #define SNDRV_PCM_INFO_JOINT_DUPLEX 0x00200000 /* playback and capture stream are somewhat correlated */ | 256 | #define SNDRV_PCM_INFO_JOINT_DUPLEX 0x00200000 /* playback and capture stream are somewhat correlated */ |
| 257 | #define SNDRV_PCM_INFO_SYNC_START 0x00400000 /* pcm support some kind of sync go */ | 257 | #define SNDRV_PCM_INFO_SYNC_START 0x00400000 /* pcm support some kind of sync go */ |
| 258 | #define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000 /* internal kernel flag - FIFO size is in frames */ | ||
| 258 | 259 | ||
| 259 | typedef int __bitwise snd_pcm_state_t; | 260 | typedef int __bitwise snd_pcm_state_t; |
| 260 | #define SNDRV_PCM_STATE_OPEN ((__force snd_pcm_state_t) 0) /* stream is open */ | 261 | #define SNDRV_PCM_STATE_OPEN ((__force snd_pcm_state_t) 0) /* stream is open */ |
diff --git a/include/sound/core.h b/include/sound/core.h index 3dea79829acc..309cb9659a05 100644 --- a/include/sound/core.h +++ b/include/sound/core.h | |||
| @@ -300,19 +300,10 @@ int snd_card_create(int idx, const char *id, | |||
| 300 | struct module *module, int extra_size, | 300 | struct module *module, int extra_size, |
| 301 | struct snd_card **card_ret); | 301 | struct snd_card **card_ret); |
| 302 | 302 | ||
| 303 | static inline __deprecated | ||
| 304 | struct snd_card *snd_card_new(int idx, const char *id, | ||
| 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 | |||
| 313 | int snd_card_disconnect(struct snd_card *card); | 303 | int snd_card_disconnect(struct snd_card *card); |
| 314 | int snd_card_free(struct snd_card *card); | 304 | int snd_card_free(struct snd_card *card); |
| 315 | int snd_card_free_when_closed(struct snd_card *card); | 305 | int snd_card_free_when_closed(struct snd_card *card); |
| 306 | void snd_card_set_id(struct snd_card *card, const char *id); | ||
| 316 | int snd_card_register(struct snd_card *card); | 307 | int snd_card_register(struct snd_card *card); |
| 317 | int snd_card_info_init(void); | 308 | int snd_card_info_init(void); |
| 318 | int snd_card_info_done(void); | 309 | int snd_card_info_done(void); |
diff --git a/include/sound/driver.h b/include/sound/driver.h deleted file mode 100644 index f0359437d01a..000000000000 --- a/include/sound/driver.h +++ /dev/null | |||
| @@ -1 +0,0 @@ | |||
| 1 | #warning "This file is deprecated" | ||
diff --git a/include/sound/pcm.h b/include/sound/pcm.h index c17296891617..23893523dc8c 100644 --- a/include/sound/pcm.h +++ b/include/sound/pcm.h | |||
| @@ -98,6 +98,7 @@ struct snd_pcm_ops { | |||
| 98 | #define SNDRV_PCM_IOCTL1_INFO 1 | 98 | #define SNDRV_PCM_IOCTL1_INFO 1 |
| 99 | #define SNDRV_PCM_IOCTL1_CHANNEL_INFO 2 | 99 | #define SNDRV_PCM_IOCTL1_CHANNEL_INFO 2 |
| 100 | #define SNDRV_PCM_IOCTL1_GSTATE 3 | 100 | #define SNDRV_PCM_IOCTL1_GSTATE 3 |
| 101 | #define SNDRV_PCM_IOCTL1_FIFO_SIZE 4 | ||
| 101 | 102 | ||
| 102 | #define SNDRV_PCM_TRIGGER_STOP 0 | 103 | #define SNDRV_PCM_TRIGGER_STOP 0 |
| 103 | #define SNDRV_PCM_TRIGGER_START 1 | 104 | #define SNDRV_PCM_TRIGGER_START 1 |
| @@ -270,6 +271,7 @@ struct snd_pcm_runtime { | |||
| 270 | snd_pcm_uframes_t hw_ptr_base; /* Position at buffer restart */ | 271 | snd_pcm_uframes_t hw_ptr_base; /* Position at buffer restart */ |
| 271 | snd_pcm_uframes_t hw_ptr_interrupt; /* Position at interrupt time */ | 272 | snd_pcm_uframes_t hw_ptr_interrupt; /* Position at interrupt time */ |
| 272 | unsigned long hw_ptr_jiffies; /* Time when hw_ptr is updated */ | 273 | unsigned long hw_ptr_jiffies; /* Time when hw_ptr is updated */ |
| 274 | snd_pcm_sframes_t delay; /* extra delay; typically FIFO size */ | ||
| 273 | 275 | ||
| 274 | /* -- HW params -- */ | 276 | /* -- HW params -- */ |
| 275 | snd_pcm_access_t access; /* access mode */ | 277 | snd_pcm_access_t access; /* access mode */ |
| @@ -486,80 +488,6 @@ void snd_pcm_detach_substream(struct snd_pcm_substream *substream); | |||
| 486 | void snd_pcm_vma_notify_data(void *client, void *data); | 488 | void snd_pcm_vma_notify_data(void *client, void *data); |
| 487 | int snd_pcm_mmap_data(struct snd_pcm_substream *substream, struct file *file, struct vm_area_struct *area); | 489 | int snd_pcm_mmap_data(struct snd_pcm_substream *substream, struct file *file, struct vm_area_struct *area); |
| 488 | 490 | ||
| 489 | #if BITS_PER_LONG >= 64 | ||
| 490 | |||
| 491 | static inline void div64_32(u_int64_t *n, u_int32_t div, u_int32_t *rem) | ||
| 492 | { | ||
| 493 | *rem = *n % div; | ||
| 494 | *n /= div; | ||
| 495 | } | ||
| 496 | |||
| 497 | #elif defined(i386) | ||
| 498 | |||
| 499 | static inline void div64_32(u_int64_t *n, u_int32_t div, u_int32_t *rem) | ||
| 500 | { | ||
| 501 | u_int32_t low, high; | ||
| 502 | low = *n & 0xffffffff; | ||
| 503 | high = *n >> 32; | ||
| 504 | if (high) { | ||
| 505 | u_int32_t high1 = high % div; | ||
| 506 | high /= div; | ||
| 507 | asm("divl %2":"=a" (low), "=d" (*rem):"rm" (div), "a" (low), "d" (high1)); | ||
| 508 | *n = (u_int64_t)high << 32 | low; | ||
| 509 | } else { | ||
| 510 | *n = low / div; | ||
| 511 | *rem = low % div; | ||
| 512 | } | ||
| 513 | } | ||
| 514 | #else | ||
| 515 | |||
| 516 | static inline void divl(u_int32_t high, u_int32_t low, | ||
| 517 | u_int32_t div, | ||
| 518 | u_int32_t *q, u_int32_t *r) | ||
| 519 | { | ||
| 520 | u_int64_t n = (u_int64_t)high << 32 | low; | ||
| 521 | u_int64_t d = (u_int64_t)div << 31; | ||
| 522 | u_int32_t q1 = 0; | ||
| 523 | int c = 32; | ||
| 524 | while (n > 0xffffffffU) { | ||
| 525 | q1 <<= 1; | ||
| 526 | if (n >= d) { | ||
| 527 | n -= d; | ||
| 528 | q1 |= 1; | ||
| 529 | } | ||
| 530 | d >>= 1; | ||
| 531 | c--; | ||
| 532 | } | ||
| 533 | q1 <<= c; | ||
| 534 | if (n) { | ||
| 535 | low = n; | ||
| 536 | *q = q1 | (low / div); | ||
| 537 | *r = low % div; | ||
| 538 | } else { | ||
| 539 | *r = 0; | ||
| 540 | *q = q1; | ||
| 541 | } | ||
| 542 | return; | ||
| 543 | } | ||
| 544 | |||
| 545 | static inline void div64_32(u_int64_t *n, u_int32_t div, u_int32_t *rem) | ||
| 546 | { | ||
| 547 | u_int32_t low, high; | ||
| 548 | low = *n & 0xffffffff; | ||
| 549 | high = *n >> 32; | ||
| 550 | if (high) { | ||
| 551 | u_int32_t high1 = high % div; | ||
| 552 | u_int32_t low1 = low; | ||
| 553 | high /= div; | ||
| 554 | divl(high1, low1, div, &low, rem); | ||
| 555 | *n = (u_int64_t)high << 32 | low; | ||
| 556 | } else { | ||
| 557 | *n = low / div; | ||
| 558 | *rem = low % div; | ||
| 559 | } | ||
| 560 | } | ||
| 561 | #endif | ||
| 562 | |||
| 563 | /* | 491 | /* |
| 564 | * PCM library | 492 | * PCM library |
| 565 | */ | 493 | */ |
diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h index 13676472ddfc..352d7eee9b6d 100644 --- a/include/sound/soc-dai.h +++ b/include/sound/soc-dai.h | |||
| @@ -45,24 +45,6 @@ struct snd_pcm_substream; | |||
| 45 | #define SND_SOC_DAIFMT_GATED (1 << 4) /* clock is gated */ | 45 | #define SND_SOC_DAIFMT_GATED (1 << 4) /* clock is gated */ |
| 46 | 46 | ||
| 47 | /* | 47 | /* |
| 48 | * DAI Left/Right Clocks. | ||
| 49 | * | ||
| 50 | * Specifies whether the DAI can support different samples for similtanious | ||
| 51 | * playback and capture. This usually requires a seperate physical frame | ||
| 52 | * clock for playback and capture. | ||
| 53 | */ | ||
| 54 | #define SND_SOC_DAIFMT_SYNC (0 << 5) /* Tx FRM = Rx FRM */ | ||
| 55 | #define SND_SOC_DAIFMT_ASYNC (1 << 5) /* Tx FRM ~ Rx FRM */ | ||
| 56 | |||
| 57 | /* | ||
| 58 | * TDM | ||
| 59 | * | ||
| 60 | * Time Division Multiplexing. Allows PCM data to be multplexed with other | ||
| 61 | * data on the DAI. | ||
| 62 | */ | ||
| 63 | #define SND_SOC_DAIFMT_TDM (1 << 6) | ||
| 64 | |||
| 65 | /* | ||
| 66 | * DAI hardware signal inversions. | 48 | * DAI hardware signal inversions. |
| 67 | * | 49 | * |
| 68 | * Specifies whether the DAI can also support inverted clocks for the specified | 50 | * Specifies whether the DAI can also support inverted clocks for the specified |
| @@ -96,6 +78,10 @@ struct snd_pcm_substream; | |||
| 96 | #define SND_SOC_CLOCK_IN 0 | 78 | #define SND_SOC_CLOCK_IN 0 |
| 97 | #define SND_SOC_CLOCK_OUT 1 | 79 | #define SND_SOC_CLOCK_OUT 1 |
| 98 | 80 | ||
| 81 | #define SND_SOC_STD_AC97_FMTS (SNDRV_PCM_FMTBIT_S16_LE |\ | ||
| 82 | SNDRV_PCM_FMTBIT_S32_LE |\ | ||
| 83 | SNDRV_PCM_FMTBIT_S32_BE) | ||
| 84 | |||
| 99 | struct snd_soc_dai_ops; | 85 | struct snd_soc_dai_ops; |
| 100 | struct snd_soc_dai; | 86 | struct snd_soc_dai; |
| 101 | struct snd_ac97_bus_ops; | 87 | struct snd_ac97_bus_ops; |
| @@ -208,6 +194,7 @@ struct snd_soc_dai { | |||
| 208 | /* DAI capabilities */ | 194 | /* DAI capabilities */ |
| 209 | struct snd_soc_pcm_stream capture; | 195 | struct snd_soc_pcm_stream capture; |
| 210 | struct snd_soc_pcm_stream playback; | 196 | struct snd_soc_pcm_stream playback; |
| 197 | unsigned int symmetric_rates:1; | ||
| 211 | 198 | ||
| 212 | /* DAI runtime info */ | 199 | /* DAI runtime info */ |
| 213 | struct snd_pcm_runtime *runtime; | 200 | struct snd_pcm_runtime *runtime; |
| @@ -219,11 +206,8 @@ struct snd_soc_dai { | |||
| 219 | /* DAI private data */ | 206 | /* DAI private data */ |
| 220 | void *private_data; | 207 | void *private_data; |
| 221 | 208 | ||
| 222 | /* parent codec/platform */ | 209 | /* parent platform */ |
| 223 | union { | 210 | struct snd_soc_platform *platform; |
| 224 | struct snd_soc_codec *codec; | ||
| 225 | struct snd_soc_platform *platform; | ||
| 226 | }; | ||
| 227 | 211 | ||
| 228 | struct list_head list; | 212 | struct list_head list; |
| 229 | }; | 213 | }; |
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h index a7def6a9a030..ec8a45f9a069 100644 --- a/include/sound/soc-dapm.h +++ b/include/sound/soc-dapm.h | |||
| @@ -140,16 +140,30 @@ | |||
| 140 | #define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \ | 140 | #define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \ |
| 141 | { .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \ | 141 | { .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \ |
| 142 | .shift = wshift, .invert = winvert} | 142 | .shift = wshift, .invert = winvert} |
| 143 | #define SND_SOC_DAPM_DAC_E(wname, stname, wreg, wshift, winvert, \ | ||
| 144 | wevent, wflags) \ | ||
| 145 | { .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \ | ||
| 146 | .shift = wshift, .invert = winvert, \ | ||
| 147 | .event = wevent, .event_flags = wflags} | ||
| 143 | #define SND_SOC_DAPM_ADC(wname, stname, wreg, wshift, winvert) \ | 148 | #define SND_SOC_DAPM_ADC(wname, stname, wreg, wshift, winvert) \ |
| 144 | { .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \ | 149 | { .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \ |
| 145 | .shift = wshift, .invert = winvert} | 150 | .shift = wshift, .invert = winvert} |
| 151 | #define SND_SOC_DAPM_ADC_E(wname, stname, wreg, wshift, winvert, \ | ||
| 152 | wevent, wflags) \ | ||
| 153 | { .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \ | ||
| 154 | .shift = wshift, .invert = winvert, \ | ||
| 155 | .event = wevent, .event_flags = wflags} | ||
| 146 | 156 | ||
| 147 | /* generic register modifier widget */ | 157 | /* generic widgets */ |
| 148 | #define SND_SOC_DAPM_REG(wid, wname, wreg, wshift, wmask, won_val, woff_val) \ | 158 | #define SND_SOC_DAPM_REG(wid, wname, wreg, wshift, wmask, won_val, woff_val) \ |
| 149 | { .id = wid, .name = wname, .kcontrols = NULL, .num_kcontrols = 0, \ | 159 | { .id = wid, .name = wname, .kcontrols = NULL, .num_kcontrols = 0, \ |
| 150 | .reg = -((wreg) + 1), .shift = wshift, .mask = wmask, \ | 160 | .reg = -((wreg) + 1), .shift = wshift, .mask = wmask, \ |
| 151 | .on_val = won_val, .off_val = woff_val, .event = dapm_reg_event, \ | 161 | .on_val = won_val, .off_val = woff_val, .event = dapm_reg_event, \ |
| 152 | .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD} | 162 | .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD} |
| 163 | #define SND_SOC_DAPM_SUPPLY(wname, wreg, wshift, winvert, wevent, wflags) \ | ||
| 164 | { .id = snd_soc_dapm_supply, .name = wname, .reg = wreg, \ | ||
| 165 | .shift = wshift, .invert = winvert, .event = wevent, \ | ||
| 166 | .event_flags = wflags} | ||
| 153 | 167 | ||
| 154 | /* dapm kcontrol types */ | 168 | /* dapm kcontrol types */ |
| 155 | #define SOC_DAPM_SINGLE(xname, reg, shift, max, invert) \ | 169 | #define SOC_DAPM_SINGLE(xname, reg, shift, max, invert) \ |
| @@ -265,8 +279,6 @@ int snd_soc_dapm_add_routes(struct snd_soc_codec *codec, | |||
| 265 | /* dapm events */ | 279 | /* dapm events */ |
| 266 | int snd_soc_dapm_stream_event(struct snd_soc_codec *codec, char *stream, | 280 | int snd_soc_dapm_stream_event(struct snd_soc_codec *codec, char *stream, |
| 267 | int event); | 281 | int event); |
| 268 | int snd_soc_dapm_set_bias_level(struct snd_soc_device *socdev, | ||
| 269 | enum snd_soc_bias_level level); | ||
| 270 | 282 | ||
| 271 | /* dapm sys fs - used by the core */ | 283 | /* dapm sys fs - used by the core */ |
| 272 | int snd_soc_dapm_sys_add(struct device *dev); | 284 | int snd_soc_dapm_sys_add(struct device *dev); |
| @@ -298,6 +310,7 @@ enum snd_soc_dapm_type { | |||
| 298 | snd_soc_dapm_vmid, /* codec bias/vmid - to minimise pops */ | 310 | snd_soc_dapm_vmid, /* codec bias/vmid - to minimise pops */ |
| 299 | snd_soc_dapm_pre, /* machine specific pre widget - exec first */ | 311 | snd_soc_dapm_pre, /* machine specific pre widget - exec first */ |
| 300 | snd_soc_dapm_post, /* machine specific post widget - exec last */ | 312 | snd_soc_dapm_post, /* machine specific post widget - exec last */ |
| 313 | snd_soc_dapm_supply, /* power/clock supply */ | ||
| 301 | }; | 314 | }; |
| 302 | 315 | ||
| 303 | /* | 316 | /* |
| @@ -357,6 +370,8 @@ struct snd_soc_dapm_widget { | |||
| 357 | unsigned char suspend:1; /* was active before suspend */ | 370 | unsigned char suspend:1; /* was active before suspend */ |
| 358 | unsigned char pmdown:1; /* waiting for timeout */ | 371 | unsigned char pmdown:1; /* waiting for timeout */ |
| 359 | 372 | ||
| 373 | int (*power_check)(struct snd_soc_dapm_widget *w); | ||
| 374 | |||
| 360 | /* external events */ | 375 | /* external events */ |
| 361 | unsigned short event_flags; /* flags to specify event types */ | 376 | unsigned short event_flags; /* flags to specify event types */ |
| 362 | int (*event)(struct snd_soc_dapm_widget*, struct snd_kcontrol *, int); | 377 | int (*event)(struct snd_soc_dapm_widget*, struct snd_kcontrol *, int); |
| @@ -368,6 +383,9 @@ struct snd_soc_dapm_widget { | |||
| 368 | /* widget input and outputs */ | 383 | /* widget input and outputs */ |
| 369 | struct list_head sources; | 384 | struct list_head sources; |
| 370 | struct list_head sinks; | 385 | struct list_head sinks; |
| 386 | |||
| 387 | /* used during DAPM updates */ | ||
| 388 | struct list_head power_list; | ||
| 371 | }; | 389 | }; |
| 372 | 390 | ||
| 373 | #endif | 391 | #endif |
diff --git a/include/sound/soc.h b/include/sound/soc.h index a40bc6f316fc..cf6111d72b17 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h | |||
| @@ -118,6 +118,14 @@ | |||
| 118 | .info = snd_soc_info_volsw, \ | 118 | .info = snd_soc_info_volsw, \ |
| 119 | .get = xhandler_get, .put = xhandler_put, \ | 119 | .get = xhandler_get, .put = xhandler_put, \ |
| 120 | .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) } | 120 | .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) } |
| 121 | #define SOC_DOUBLE_EXT(xname, xreg, shift_left, shift_right, xmax, xinvert,\ | ||
| 122 | xhandler_get, xhandler_put) \ | ||
| 123 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ | ||
| 124 | .info = snd_soc_info_volsw, \ | ||
| 125 | .get = xhandler_get, .put = xhandler_put, \ | ||
| 126 | .private_value = (unsigned long)&(struct soc_mixer_control) \ | ||
| 127 | {.reg = xreg, .shift = shift_left, .rshift = shift_right, \ | ||
| 128 | .max = xmax, .invert = xinvert} } | ||
| 121 | #define SOC_SINGLE_EXT_TLV(xname, xreg, xshift, xmax, xinvert,\ | 129 | #define SOC_SINGLE_EXT_TLV(xname, xreg, xshift, xmax, xinvert,\ |
| 122 | xhandler_get, xhandler_put, tlv_array) \ | 130 | xhandler_get, xhandler_put, tlv_array) \ |
| 123 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ | 131 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ |
| @@ -206,10 +214,6 @@ void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count, | |||
| 206 | struct snd_soc_jack_gpio *gpios); | 214 | struct snd_soc_jack_gpio *gpios); |
| 207 | #endif | 215 | #endif |
| 208 | 216 | ||
| 209 | /* codec IO */ | ||
| 210 | #define snd_soc_read(codec, reg) codec->read(codec, reg) | ||
| 211 | #define snd_soc_write(codec, reg, value) codec->write(codec, reg, value) | ||
| 212 | |||
| 213 | /* codec register bit access */ | 217 | /* codec register bit access */ |
| 214 | int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg, | 218 | int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg, |
| 215 | unsigned short mask, unsigned short value); | 219 | unsigned short mask, unsigned short value); |
| @@ -331,6 +335,7 @@ struct snd_soc_codec { | |||
| 331 | struct module *owner; | 335 | struct module *owner; |
| 332 | struct mutex mutex; | 336 | struct mutex mutex; |
| 333 | struct device *dev; | 337 | struct device *dev; |
| 338 | struct snd_soc_device *socdev; | ||
| 334 | 339 | ||
| 335 | struct list_head list; | 340 | struct list_head list; |
| 336 | 341 | ||
| @@ -364,6 +369,8 @@ struct snd_soc_codec { | |||
| 364 | enum snd_soc_bias_level bias_level; | 369 | enum snd_soc_bias_level bias_level; |
| 365 | enum snd_soc_bias_level suspend_bias_level; | 370 | enum snd_soc_bias_level suspend_bias_level; |
| 366 | struct delayed_work delayed_work; | 371 | struct delayed_work delayed_work; |
| 372 | struct list_head up_list; | ||
| 373 | struct list_head down_list; | ||
| 367 | 374 | ||
| 368 | /* codec DAI's */ | 375 | /* codec DAI's */ |
| 369 | struct snd_soc_dai *dai; | 376 | struct snd_soc_dai *dai; |
| @@ -417,6 +424,12 @@ struct snd_soc_dai_link { | |||
| 417 | /* codec/machine specific init - e.g. add machine controls */ | 424 | /* codec/machine specific init - e.g. add machine controls */ |
| 418 | int (*init)(struct snd_soc_codec *codec); | 425 | int (*init)(struct snd_soc_codec *codec); |
| 419 | 426 | ||
| 427 | /* Symmetry requirements */ | ||
| 428 | unsigned int symmetric_rates:1; | ||
| 429 | |||
| 430 | /* Symmetry data - only valid if symmetry is being enforced */ | ||
| 431 | unsigned int rate; | ||
| 432 | |||
| 420 | /* DAI pcm */ | 433 | /* DAI pcm */ |
| 421 | struct snd_pcm *pcm; | 434 | struct snd_pcm *pcm; |
| 422 | }; | 435 | }; |
| @@ -490,6 +503,19 @@ struct soc_enum { | |||
| 490 | void *dapm; | 503 | void *dapm; |
| 491 | }; | 504 | }; |
| 492 | 505 | ||
| 506 | /* codec IO */ | ||
| 507 | static inline unsigned int snd_soc_read(struct snd_soc_codec *codec, | ||
| 508 | unsigned int reg) | ||
| 509 | { | ||
| 510 | return codec->read(codec, reg); | ||
| 511 | } | ||
| 512 | |||
| 513 | static inline unsigned int snd_soc_write(struct snd_soc_codec *codec, | ||
| 514 | unsigned int reg, unsigned int val) | ||
| 515 | { | ||
| 516 | return codec->write(codec, reg, val); | ||
| 517 | } | ||
| 518 | |||
| 493 | #include <sound/soc-dai.h> | 519 | #include <sound/soc-dai.h> |
| 494 | 520 | ||
| 495 | #endif | 521 | #endif |
diff --git a/include/sound/wm9081.h b/include/sound/wm9081.h new file mode 100644 index 000000000000..e173ddbf6bd4 --- /dev/null +++ b/include/sound/wm9081.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | /* | ||
| 2 | * linux/sound/wm9081.h -- Platform data for WM9081 | ||
| 3 | * | ||
| 4 | * Copyright 2009 Wolfson Microelectronics. PLC. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #ifndef __LINUX_SND_WM_9081_H | ||
| 12 | #define __LINUX_SND_WM_9081_H | ||
| 13 | |||
| 14 | struct wm9081_retune_mobile_setting { | ||
| 15 | const char *name; | ||
| 16 | unsigned int rate; | ||
| 17 | u16 config[20]; | ||
| 18 | }; | ||
| 19 | |||
| 20 | struct wm9081_retune_mobile_config { | ||
| 21 | struct wm9081_retune_mobile_setting *configs; | ||
| 22 | int num_configs; | ||
| 23 | }; | ||
| 24 | |||
| 25 | #endif | ||
diff --git a/include/trace/events/napi.h b/include/trace/events/napi.h new file mode 100644 index 000000000000..a8989c4547e7 --- /dev/null +++ b/include/trace/events/napi.h | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | #ifndef _TRACE_NAPI_H_ | ||
| 2 | #define _TRACE_NAPI_H_ | ||
| 3 | |||
| 4 | #include <linux/netdevice.h> | ||
| 5 | #include <linux/tracepoint.h> | ||
| 6 | |||
| 7 | DECLARE_TRACE(napi_poll, | ||
| 8 | TP_PROTO(struct napi_struct *napi), | ||
| 9 | TP_ARGS(napi)); | ||
| 10 | |||
| 11 | #endif | ||
diff --git a/include/video/pxa168fb.h b/include/video/pxa168fb.h new file mode 100644 index 000000000000..b5cc72fe0461 --- /dev/null +++ b/include/video/pxa168fb.h | |||
| @@ -0,0 +1,127 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/mach-mmp/include/mach/pxa168fb.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 Marvell International Ltd. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #ifndef __ASM_MACH_PXA168FB_H | ||
| 12 | #define __ASM_MACH_PXA168FB_H | ||
| 13 | |||
| 14 | #include <linux/fb.h> | ||
| 15 | #include <linux/interrupt.h> | ||
| 16 | |||
| 17 | /* Dumb interface */ | ||
| 18 | #define PIN_MODE_DUMB_24 0 | ||
| 19 | #define PIN_MODE_DUMB_18_SPI 1 | ||
| 20 | #define PIN_MODE_DUMB_18_GPIO 2 | ||
| 21 | #define PIN_MODE_DUMB_16_SPI 3 | ||
| 22 | #define PIN_MODE_DUMB_16_GPIO 4 | ||
| 23 | #define PIN_MODE_DUMB_12_SPI_GPIO 5 | ||
| 24 | #define PIN_MODE_SMART_18_SPI 6 | ||
| 25 | #define PIN_MODE_SMART_16_SPI 7 | ||
| 26 | #define PIN_MODE_SMART_8_SPI_GPIO 8 | ||
| 27 | |||
| 28 | /* Dumb interface pin allocation */ | ||
| 29 | #define DUMB_MODE_RGB565 0 | ||
| 30 | #define DUMB_MODE_RGB565_UPPER 1 | ||
| 31 | #define DUMB_MODE_RGB666 2 | ||
| 32 | #define DUMB_MODE_RGB666_UPPER 3 | ||
| 33 | #define DUMB_MODE_RGB444 4 | ||
| 34 | #define DUMB_MODE_RGB444_UPPER 5 | ||
| 35 | #define DUMB_MODE_RGB888 6 | ||
| 36 | |||
| 37 | /* default fb buffer size WVGA-32bits */ | ||
| 38 | #define DEFAULT_FB_SIZE (800 * 480 * 4) | ||
| 39 | |||
| 40 | /* | ||
| 41 | * Buffer pixel format | ||
| 42 | * bit0 is for rb swap. | ||
| 43 | * bit12 is for Y UorV swap | ||
| 44 | */ | ||
| 45 | #define PIX_FMT_RGB565 0 | ||
| 46 | #define PIX_FMT_BGR565 1 | ||
| 47 | #define PIX_FMT_RGB1555 2 | ||
| 48 | #define PIX_FMT_BGR1555 3 | ||
| 49 | #define PIX_FMT_RGB888PACK 4 | ||
| 50 | #define PIX_FMT_BGR888PACK 5 | ||
| 51 | #define PIX_FMT_RGB888UNPACK 6 | ||
| 52 | #define PIX_FMT_BGR888UNPACK 7 | ||
| 53 | #define PIX_FMT_RGBA888 8 | ||
| 54 | #define PIX_FMT_BGRA888 9 | ||
| 55 | #define PIX_FMT_YUV422PACK 10 | ||
| 56 | #define PIX_FMT_YVU422PACK 11 | ||
| 57 | #define PIX_FMT_YUV422PLANAR 12 | ||
| 58 | #define PIX_FMT_YVU422PLANAR 13 | ||
| 59 | #define PIX_FMT_YUV420PLANAR 14 | ||
| 60 | #define PIX_FMT_YVU420PLANAR 15 | ||
| 61 | #define PIX_FMT_PSEUDOCOLOR 20 | ||
| 62 | #define PIX_FMT_UYVY422PACK (0x1000|PIX_FMT_YUV422PACK) | ||
| 63 | |||
| 64 | /* | ||
| 65 | * PXA LCD controller private state. | ||
| 66 | */ | ||
| 67 | struct pxa168fb_info { | ||
| 68 | struct device *dev; | ||
| 69 | struct clk *clk; | ||
| 70 | struct fb_info *info; | ||
| 71 | |||
| 72 | void __iomem *reg_base; | ||
| 73 | dma_addr_t fb_start_dma; | ||
| 74 | u32 pseudo_palette[16]; | ||
| 75 | |||
| 76 | int pix_fmt; | ||
| 77 | unsigned is_blanked:1; | ||
| 78 | unsigned panel_rbswap:1; | ||
| 79 | unsigned active:1; | ||
| 80 | }; | ||
| 81 | |||
| 82 | /* | ||
| 83 | * PXA fb machine information | ||
| 84 | */ | ||
| 85 | struct pxa168fb_mach_info { | ||
| 86 | char id[16]; | ||
| 87 | |||
| 88 | int num_modes; | ||
| 89 | struct fb_videomode *modes; | ||
| 90 | |||
| 91 | /* | ||
| 92 | * Pix_fmt | ||
| 93 | */ | ||
| 94 | unsigned pix_fmt; | ||
| 95 | |||
| 96 | /* | ||
| 97 | * I/O pin allocation. | ||
| 98 | */ | ||
| 99 | unsigned io_pin_allocation_mode:4; | ||
| 100 | |||
| 101 | /* | ||
| 102 | * Dumb panel -- assignment of R/G/B component info to the 24 | ||
| 103 | * available external data lanes. | ||
| 104 | */ | ||
| 105 | unsigned dumb_mode:4; | ||
| 106 | unsigned panel_rgb_reverse_lanes:1; | ||
| 107 | |||
| 108 | /* | ||
| 109 | * Dumb panel -- GPIO output data. | ||
| 110 | */ | ||
| 111 | unsigned gpio_output_mask:8; | ||
| 112 | unsigned gpio_output_data:8; | ||
| 113 | |||
| 114 | /* | ||
| 115 | * Dumb panel -- configurable output signal polarity. | ||
| 116 | */ | ||
| 117 | unsigned invert_composite_blank:1; | ||
| 118 | unsigned invert_pix_val_ena:1; | ||
| 119 | unsigned invert_pixclock:1; | ||
| 120 | unsigned invert_vsync:1; | ||
| 121 | unsigned invert_hsync:1; | ||
| 122 | unsigned panel_rbswap:1; | ||
| 123 | unsigned active:1; | ||
| 124 | unsigned enable_lcd:1; | ||
| 125 | }; | ||
| 126 | |||
| 127 | #endif /* __ASM_MACH_PXA168FB_H */ | ||
