diff options
| author | Pekka Enberg <penberg@kernel.org> | 2011-09-19 10:46:07 -0400 |
|---|---|---|
| committer | Pekka Enberg <penberg@kernel.org> | 2011-09-19 10:46:07 -0400 |
| commit | d20bbfab01802e195a50435940f7e4aa747c217c (patch) | |
| tree | 82b0007e33c083050a4e60a49dbb2f5477b4c99d /include/linux | |
| parent | a37933c37c14b64e81c7c9cc44a5d3f5e0c91412 (diff) | |
| parent | 136333d104bd3a62d783b0ac3d0f32ac0108c5d0 (diff) | |
Merge branch 'slab/urgent' into slab/next
Diffstat (limited to 'include/linux')
53 files changed, 1308 insertions, 221 deletions
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 1deb2a73c2da..6001b4da39dd 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
| @@ -238,7 +238,6 @@ extern int acpi_paddr_to_node(u64 start_addr, u64 size); | |||
| 238 | extern int pnpacpi_disabled; | 238 | extern int pnpacpi_disabled; |
| 239 | 239 | ||
| 240 | #define PXM_INVAL (-1) | 240 | #define PXM_INVAL (-1) |
| 241 | #define NID_INVAL (-1) | ||
| 242 | 241 | ||
| 243 | int acpi_check_resource_conflict(const struct resource *res); | 242 | int acpi_check_resource_conflict(const struct resource *res); |
| 244 | 243 | ||
| @@ -280,6 +279,8 @@ acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context); | |||
| 280 | #define OSC_SB_CPUHP_OST_SUPPORT 8 | 279 | #define OSC_SB_CPUHP_OST_SUPPORT 8 |
| 281 | #define OSC_SB_APEI_SUPPORT 16 | 280 | #define OSC_SB_APEI_SUPPORT 16 |
| 282 | 281 | ||
| 282 | extern bool osc_sb_apei_support_acked; | ||
| 283 | |||
| 283 | /* PCI defined _OSC bits */ | 284 | /* PCI defined _OSC bits */ |
| 284 | /* _OSC DW1 Definition (OS Support Fields) */ | 285 | /* _OSC DW1 Definition (OS Support Fields) */ |
| 285 | #define OSC_EXT_PCI_CONFIG_SUPPORT 1 | 286 | #define OSC_EXT_PCI_CONFIG_SUPPORT 1 |
diff --git a/include/linux/amba/pl08x.h b/include/linux/amba/pl08x.h index 3111385b8ca7..e6e28f37d8ec 100644 --- a/include/linux/amba/pl08x.h +++ b/include/linux/amba/pl08x.h | |||
| @@ -172,8 +172,11 @@ struct pl08x_dma_chan { | |||
| 172 | int phychan_hold; | 172 | int phychan_hold; |
| 173 | struct tasklet_struct tasklet; | 173 | struct tasklet_struct tasklet; |
| 174 | char *name; | 174 | char *name; |
| 175 | struct pl08x_channel_data *cd; | 175 | const struct pl08x_channel_data *cd; |
| 176 | dma_addr_t runtime_addr; | 176 | dma_addr_t src_addr; |
| 177 | dma_addr_t dst_addr; | ||
| 178 | u32 src_cctl; | ||
| 179 | u32 dst_cctl; | ||
| 177 | enum dma_data_direction runtime_direction; | 180 | enum dma_data_direction runtime_direction; |
| 178 | dma_cookie_t lc; | 181 | dma_cookie_t lc; |
| 179 | struct list_head pend_list; | 182 | struct list_head pend_list; |
| @@ -202,7 +205,7 @@ struct pl08x_dma_chan { | |||
| 202 | * @mem_buses: buses which memory can be accessed from: PL08X_AHB1 | PL08X_AHB2 | 205 | * @mem_buses: buses which memory can be accessed from: PL08X_AHB1 | PL08X_AHB2 |
| 203 | */ | 206 | */ |
| 204 | struct pl08x_platform_data { | 207 | struct pl08x_platform_data { |
| 205 | struct pl08x_channel_data *slave_channels; | 208 | const struct pl08x_channel_data *slave_channels; |
| 206 | unsigned int num_slave_channels; | 209 | unsigned int num_slave_channels; |
| 207 | struct pl08x_channel_data memcpy_channel; | 210 | struct pl08x_channel_data memcpy_channel; |
| 208 | int (*get_signal)(struct pl08x_dma_chan *); | 211 | int (*get_signal)(struct pl08x_dma_chan *); |
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index 3bac44cce142..7ad634501e48 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h | |||
| @@ -146,6 +146,7 @@ extern int bitmap_allocate_region(unsigned long *bitmap, int pos, int order); | |||
| 146 | extern void bitmap_copy_le(void *dst, const unsigned long *src, int nbits); | 146 | extern void bitmap_copy_le(void *dst, const unsigned long *src, int nbits); |
| 147 | extern int bitmap_ord_to_pos(const unsigned long *bitmap, int n, int bits); | 147 | extern int bitmap_ord_to_pos(const unsigned long *bitmap, int n, int bits); |
| 148 | 148 | ||
| 149 | #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) % BITS_PER_LONG)) | ||
| 149 | #define BITMAP_LAST_WORD_MASK(nbits) \ | 150 | #define BITMAP_LAST_WORD_MASK(nbits) \ |
| 150 | ( \ | 151 | ( \ |
| 151 | ((nbits) % BITS_PER_LONG) ? \ | 152 | ((nbits) % BITS_PER_LONG) ? \ |
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index 36719ead50e8..b51629e15cfc 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h | |||
| @@ -122,6 +122,8 @@ struct cpuidle_driver { | |||
| 122 | }; | 122 | }; |
| 123 | 123 | ||
| 124 | #ifdef CONFIG_CPU_IDLE | 124 | #ifdef CONFIG_CPU_IDLE |
| 125 | extern void disable_cpuidle(void); | ||
| 126 | extern int cpuidle_idle_call(void); | ||
| 125 | 127 | ||
| 126 | extern int cpuidle_register_driver(struct cpuidle_driver *drv); | 128 | extern int cpuidle_register_driver(struct cpuidle_driver *drv); |
| 127 | struct cpuidle_driver *cpuidle_get_driver(void); | 129 | struct cpuidle_driver *cpuidle_get_driver(void); |
| @@ -135,6 +137,8 @@ extern int cpuidle_enable_device(struct cpuidle_device *dev); | |||
| 135 | extern void cpuidle_disable_device(struct cpuidle_device *dev); | 137 | extern void cpuidle_disable_device(struct cpuidle_device *dev); |
| 136 | 138 | ||
| 137 | #else | 139 | #else |
| 140 | static inline void disable_cpuidle(void) { } | ||
| 141 | static inline int cpuidle_idle_call(void) { return -ENODEV; } | ||
| 138 | 142 | ||
| 139 | static inline int cpuidle_register_driver(struct cpuidle_driver *drv) | 143 | static inline int cpuidle_register_driver(struct cpuidle_driver *drv) |
| 140 | {return -ENODEV; } | 144 | {return -ENODEV; } |
diff --git a/include/linux/cred.h b/include/linux/cred.h index 48e82af1159b..98f46efbe2d2 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h | |||
| @@ -265,10 +265,11 @@ static inline void put_cred(const struct cred *_cred) | |||
| 265 | /** | 265 | /** |
| 266 | * current_cred - Access the current task's subjective credentials | 266 | * current_cred - Access the current task's subjective credentials |
| 267 | * | 267 | * |
| 268 | * Access the subjective credentials of the current task. | 268 | * Access the subjective credentials of the current task. RCU-safe, |
| 269 | * since nobody else can modify it. | ||
| 269 | */ | 270 | */ |
| 270 | #define current_cred() \ | 271 | #define current_cred() \ |
| 271 | (current->cred) | 272 | (*(__force struct cred **)¤t->cred) |
| 272 | 273 | ||
| 273 | /** | 274 | /** |
| 274 | * __task_cred - Access a task's objective credentials | 275 | * __task_cred - Access a task's objective credentials |
| @@ -307,7 +308,7 @@ static inline void put_cred(const struct cred *_cred) | |||
| 307 | ({ \ | 308 | ({ \ |
| 308 | struct user_struct *__u; \ | 309 | struct user_struct *__u; \ |
| 309 | struct cred *__cred; \ | 310 | struct cred *__cred; \ |
| 310 | __cred = (struct cred *) current_cred(); \ | 311 | __cred = current_cred(); \ |
| 311 | __u = get_uid(__cred->user); \ | 312 | __u = get_uid(__cred->user); \ |
| 312 | __u; \ | 313 | __u; \ |
| 313 | }) | 314 | }) |
| @@ -322,7 +323,7 @@ static inline void put_cred(const struct cred *_cred) | |||
| 322 | ({ \ | 323 | ({ \ |
| 323 | struct group_info *__groups; \ | 324 | struct group_info *__groups; \ |
| 324 | struct cred *__cred; \ | 325 | struct cred *__cred; \ |
| 325 | __cred = (struct cred *) current_cred(); \ | 326 | __cred = current_cred(); \ |
| 326 | __groups = get_group_info(__cred->group_info); \ | 327 | __groups = get_group_info(__cred->group_info); \ |
| 327 | __groups; \ | 328 | __groups; \ |
| 328 | }) | 329 | }) |
| @@ -341,7 +342,7 @@ static inline void put_cred(const struct cred *_cred) | |||
| 341 | 342 | ||
| 342 | #define current_cred_xxx(xxx) \ | 343 | #define current_cred_xxx(xxx) \ |
| 343 | ({ \ | 344 | ({ \ |
| 344 | current->cred->xxx; \ | 345 | current_cred()->xxx; \ |
| 345 | }) | 346 | }) |
| 346 | 347 | ||
| 347 | #define current_uid() (current_cred_xxx(uid)) | 348 | #define current_uid() (current_cred_xxx(uid)) |
diff --git a/include/linux/cryptohash.h b/include/linux/cryptohash.h index ec78a4bbe1d5..2cd9f1cf9fa3 100644 --- a/include/linux/cryptohash.h +++ b/include/linux/cryptohash.h | |||
| @@ -3,11 +3,16 @@ | |||
| 3 | 3 | ||
| 4 | #define SHA_DIGEST_WORDS 5 | 4 | #define SHA_DIGEST_WORDS 5 |
| 5 | #define SHA_MESSAGE_BYTES (512 /*bits*/ / 8) | 5 | #define SHA_MESSAGE_BYTES (512 /*bits*/ / 8) |
| 6 | #define SHA_WORKSPACE_WORDS 80 | 6 | #define SHA_WORKSPACE_WORDS 16 |
| 7 | 7 | ||
| 8 | void sha_init(__u32 *buf); | 8 | void sha_init(__u32 *buf); |
| 9 | void sha_transform(__u32 *digest, const char *data, __u32 *W); | 9 | void sha_transform(__u32 *digest, const char *data, __u32 *W); |
| 10 | 10 | ||
| 11 | #define MD5_DIGEST_WORDS 4 | ||
| 12 | #define MD5_MESSAGE_BYTES 64 | ||
| 13 | |||
| 14 | void md5_transform(__u32 *hash, __u32 const *in); | ||
| 15 | |||
| 11 | __u32 half_md4_transform(__u32 buf[4], __u32 const in[8]); | 16 | __u32 half_md4_transform(__u32 buf[4], __u32 const in[8]); |
| 12 | 17 | ||
| 13 | #endif | 18 | #endif |
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index d37d2a793099..62157c03caf7 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
| @@ -180,12 +180,12 @@ struct dentry_operations { | |||
| 180 | */ | 180 | */ |
| 181 | 181 | ||
| 182 | /* d_flags entries */ | 182 | /* d_flags entries */ |
| 183 | #define DCACHE_AUTOFS_PENDING 0x0001 /* autofs: "under construction" */ | 183 | #define DCACHE_OP_HASH 0x0001 |
| 184 | #define DCACHE_NFSFS_RENAMED 0x0002 | 184 | #define DCACHE_OP_COMPARE 0x0002 |
| 185 | /* this dentry has been "silly renamed" and has to be deleted on the last | 185 | #define DCACHE_OP_REVALIDATE 0x0004 |
| 186 | * dput() */ | 186 | #define DCACHE_OP_DELETE 0x0008 |
| 187 | 187 | ||
| 188 | #define DCACHE_DISCONNECTED 0x0004 | 188 | #define DCACHE_DISCONNECTED 0x0010 |
| 189 | /* This dentry is possibly not currently connected to the dcache tree, in | 189 | /* This dentry is possibly not currently connected to the dcache tree, in |
| 190 | * which case its parent will either be itself, or will have this flag as | 190 | * which case its parent will either be itself, or will have this flag as |
| 191 | * well. nfsd will not use a dentry with this bit set, but will first | 191 | * well. nfsd will not use a dentry with this bit set, but will first |
| @@ -196,22 +196,18 @@ struct dentry_operations { | |||
| 196 | * dentry into place and return that dentry rather than the passed one, | 196 | * dentry into place and return that dentry rather than the passed one, |
| 197 | * typically using d_splice_alias. */ | 197 | * typically using d_splice_alias. */ |
| 198 | 198 | ||
| 199 | #define DCACHE_REFERENCED 0x0008 /* Recently used, don't discard. */ | 199 | #define DCACHE_REFERENCED 0x0020 /* Recently used, don't discard. */ |
| 200 | #define DCACHE_RCUACCESS 0x0010 /* Entry has ever been RCU-visible */ | 200 | #define DCACHE_RCUACCESS 0x0040 /* Entry has ever been RCU-visible */ |
| 201 | #define DCACHE_INOTIFY_PARENT_WATCHED 0x0020 | ||
| 202 | /* Parent inode is watched by inotify */ | ||
| 203 | |||
| 204 | #define DCACHE_COOKIE 0x0040 /* For use by dcookie subsystem */ | ||
| 205 | #define DCACHE_FSNOTIFY_PARENT_WATCHED 0x0080 | ||
| 206 | /* Parent inode is watched by some fsnotify listener */ | ||
| 207 | 201 | ||
| 208 | #define DCACHE_CANT_MOUNT 0x0100 | 202 | #define DCACHE_CANT_MOUNT 0x0100 |
| 209 | #define DCACHE_GENOCIDE 0x0200 | 203 | #define DCACHE_GENOCIDE 0x0200 |
| 210 | 204 | ||
| 211 | #define DCACHE_OP_HASH 0x1000 | 205 | #define DCACHE_NFSFS_RENAMED 0x1000 |
| 212 | #define DCACHE_OP_COMPARE 0x2000 | 206 | /* this dentry has been "silly renamed" and has to be deleted on the last |
| 213 | #define DCACHE_OP_REVALIDATE 0x4000 | 207 | * dput() */ |
| 214 | #define DCACHE_OP_DELETE 0x8000 | 208 | #define DCACHE_COOKIE 0x2000 /* For use by dcookie subsystem */ |
| 209 | #define DCACHE_FSNOTIFY_PARENT_WATCHED 0x4000 | ||
| 210 | /* Parent inode is watched by some fsnotify listener */ | ||
| 215 | 211 | ||
| 216 | #define DCACHE_MOUNTED 0x10000 /* is a mountpoint */ | 212 | #define DCACHE_MOUNTED 0x10000 /* is a mountpoint */ |
| 217 | #define DCACHE_NEED_AUTOMOUNT 0x20000 /* handle automount on this dir */ | 213 | #define DCACHE_NEED_AUTOMOUNT 0x20000 /* handle automount on this dir */ |
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index 4427e0454051..3fa1f3d90ce0 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h | |||
| @@ -208,6 +208,49 @@ struct dm_target_callbacks { | |||
| 208 | int dm_register_target(struct target_type *t); | 208 | int dm_register_target(struct target_type *t); |
| 209 | void dm_unregister_target(struct target_type *t); | 209 | void dm_unregister_target(struct target_type *t); |
| 210 | 210 | ||
| 211 | /* | ||
| 212 | * Target argument parsing. | ||
| 213 | */ | ||
| 214 | struct dm_arg_set { | ||
| 215 | unsigned argc; | ||
| 216 | char **argv; | ||
| 217 | }; | ||
| 218 | |||
| 219 | /* | ||
| 220 | * The minimum and maximum value of a numeric argument, together with | ||
| 221 | * the error message to use if the number is found to be outside that range. | ||
| 222 | */ | ||
| 223 | struct dm_arg { | ||
| 224 | unsigned min; | ||
| 225 | unsigned max; | ||
| 226 | char *error; | ||
| 227 | }; | ||
| 228 | |||
| 229 | /* | ||
| 230 | * Validate the next argument, either returning it as *value or, if invalid, | ||
| 231 | * returning -EINVAL and setting *error. | ||
| 232 | */ | ||
| 233 | int dm_read_arg(struct dm_arg *arg, struct dm_arg_set *arg_set, | ||
| 234 | unsigned *value, char **error); | ||
| 235 | |||
| 236 | /* | ||
| 237 | * Process the next argument as the start of a group containing between | ||
| 238 | * arg->min and arg->max further arguments. Either return the size as | ||
| 239 | * *num_args or, if invalid, return -EINVAL and set *error. | ||
| 240 | */ | ||
| 241 | int dm_read_arg_group(struct dm_arg *arg, struct dm_arg_set *arg_set, | ||
| 242 | unsigned *num_args, char **error); | ||
| 243 | |||
| 244 | /* | ||
| 245 | * Return the current argument and shift to the next. | ||
| 246 | */ | ||
| 247 | const char *dm_shift_arg(struct dm_arg_set *as); | ||
| 248 | |||
| 249 | /* | ||
| 250 | * Move through num_args arguments. | ||
| 251 | */ | ||
| 252 | void dm_consume_args(struct dm_arg_set *as, unsigned num_args); | ||
| 253 | |||
| 211 | /*----------------------------------------------------------------- | 254 | /*----------------------------------------------------------------- |
| 212 | * Functions for creating and manipulating mapped devices. | 255 | * Functions for creating and manipulating mapped devices. |
| 213 | * Drop the reference with dm_put when you finish with the object. | 256 | * Drop the reference with dm_put when you finish with the object. |
diff --git a/include/linux/dm-ioctl.h b/include/linux/dm-ioctl.h index 3708455ee6c3..0cb8eff76bd6 100644 --- a/include/linux/dm-ioctl.h +++ b/include/linux/dm-ioctl.h | |||
| @@ -267,9 +267,9 @@ enum { | |||
| 267 | #define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl) | 267 | #define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl) |
| 268 | 268 | ||
| 269 | #define DM_VERSION_MAJOR 4 | 269 | #define DM_VERSION_MAJOR 4 |
| 270 | #define DM_VERSION_MINOR 20 | 270 | #define DM_VERSION_MINOR 21 |
| 271 | #define DM_VERSION_PATCHLEVEL 0 | 271 | #define DM_VERSION_PATCHLEVEL 0 |
| 272 | #define DM_VERSION_EXTRA "-ioctl (2011-02-02)" | 272 | #define DM_VERSION_EXTRA "-ioctl (2011-07-06)" |
| 273 | 273 | ||
| 274 | /* Status bits */ | 274 | /* Status bits */ |
| 275 | #define DM_READONLY_FLAG (1 << 0) /* In/Out */ | 275 | #define DM_READONLY_FLAG (1 << 0) /* In/Out */ |
diff --git a/include/linux/dm-kcopyd.h b/include/linux/dm-kcopyd.h index 298d587e349b..5e54458e920f 100644 --- a/include/linux/dm-kcopyd.h +++ b/include/linux/dm-kcopyd.h | |||
| @@ -42,5 +42,20 @@ int dm_kcopyd_copy(struct dm_kcopyd_client *kc, struct dm_io_region *from, | |||
| 42 | unsigned num_dests, struct dm_io_region *dests, | 42 | unsigned num_dests, struct dm_io_region *dests, |
| 43 | unsigned flags, dm_kcopyd_notify_fn fn, void *context); | 43 | unsigned flags, dm_kcopyd_notify_fn fn, void *context); |
| 44 | 44 | ||
| 45 | /* | ||
| 46 | * Prepare a callback and submit it via the kcopyd thread. | ||
| 47 | * | ||
| 48 | * dm_kcopyd_prepare_callback allocates a callback structure and returns it. | ||
| 49 | * It must not be called from interrupt context. | ||
| 50 | * The returned value should be passed into dm_kcopyd_do_callback. | ||
| 51 | * | ||
| 52 | * dm_kcopyd_do_callback submits the callback. | ||
| 53 | * It may be called from interrupt context. | ||
| 54 | * The callback is issued from the kcopyd thread. | ||
| 55 | */ | ||
| 56 | void *dm_kcopyd_prepare_callback(struct dm_kcopyd_client *kc, | ||
| 57 | dm_kcopyd_notify_fn fn, void *context); | ||
| 58 | void dm_kcopyd_do_callback(void *job, int read_err, unsigned long write_err); | ||
| 59 | |||
| 45 | #endif /* __KERNEL__ */ | 60 | #endif /* __KERNEL__ */ |
| 46 | #endif /* _LINUX_DM_KCOPYD_H */ | 61 | #endif /* _LINUX_DM_KCOPYD_H */ |
diff --git a/include/linux/efi.h b/include/linux/efi.h index ec2572693925..2362a0bc7f0d 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/rtc.h> | 19 | #include <linux/rtc.h> |
| 20 | #include <linux/ioport.h> | 20 | #include <linux/ioport.h> |
| 21 | #include <linux/pfn.h> | 21 | #include <linux/pfn.h> |
| 22 | #include <linux/pstore.h> | ||
| 22 | 23 | ||
| 23 | #include <asm/page.h> | 24 | #include <asm/page.h> |
| 24 | #include <asm/system.h> | 25 | #include <asm/system.h> |
| @@ -232,6 +233,9 @@ typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **capsules, | |||
| 232 | #define UV_SYSTEM_TABLE_GUID \ | 233 | #define UV_SYSTEM_TABLE_GUID \ |
| 233 | EFI_GUID( 0x3b13a7d4, 0x633e, 0x11dd, 0x93, 0xec, 0xda, 0x25, 0x56, 0xd8, 0x95, 0x93 ) | 234 | EFI_GUID( 0x3b13a7d4, 0x633e, 0x11dd, 0x93, 0xec, 0xda, 0x25, 0x56, 0xd8, 0x95, 0x93 ) |
| 234 | 235 | ||
| 236 | #define LINUX_EFI_CRASH_GUID \ | ||
| 237 | EFI_GUID( 0xcfc8fc79, 0xbe2e, 0x4ddc, 0x97, 0xf0, 0x9f, 0x98, 0xbf, 0xe2, 0x98, 0xa0 ) | ||
| 238 | |||
| 235 | typedef struct { | 239 | typedef struct { |
| 236 | efi_guid_t guid; | 240 | efi_guid_t guid; |
| 237 | unsigned long table; | 241 | unsigned long table; |
| @@ -458,6 +462,8 @@ struct efivars { | |||
| 458 | struct kset *kset; | 462 | struct kset *kset; |
| 459 | struct bin_attribute *new_var, *del_var; | 463 | struct bin_attribute *new_var, *del_var; |
| 460 | const struct efivar_operations *ops; | 464 | const struct efivar_operations *ops; |
| 465 | struct efivar_entry *walk_entry; | ||
| 466 | struct pstore_info efi_pstore_info; | ||
| 461 | }; | 467 | }; |
| 462 | 468 | ||
| 463 | int register_efivars(struct efivars *efivars, | 469 | int register_efivars(struct efivars *efivars, |
diff --git a/include/linux/fault-inject.h b/include/linux/fault-inject.h index 3ff060ac7810..c6f996f2abb6 100644 --- a/include/linux/fault-inject.h +++ b/include/linux/fault-inject.h | |||
| @@ -25,10 +25,6 @@ struct fault_attr { | |||
| 25 | unsigned long reject_end; | 25 | unsigned long reject_end; |
| 26 | 26 | ||
| 27 | unsigned long count; | 27 | unsigned long count; |
| 28 | |||
| 29 | #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS | ||
| 30 | struct dentry *dir; | ||
| 31 | #endif | ||
| 32 | }; | 28 | }; |
| 33 | 29 | ||
| 34 | #define FAULT_ATTR_INITIALIZER { \ | 30 | #define FAULT_ATTR_INITIALIZER { \ |
| @@ -45,19 +41,15 @@ bool should_fail(struct fault_attr *attr, ssize_t size); | |||
| 45 | 41 | ||
| 46 | #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS | 42 | #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS |
| 47 | 43 | ||
| 48 | int init_fault_attr_dentries(struct fault_attr *attr, const char *name); | 44 | struct dentry *fault_create_debugfs_attr(const char *name, |
| 49 | void cleanup_fault_attr_dentries(struct fault_attr *attr); | 45 | struct dentry *parent, struct fault_attr *attr); |
| 50 | 46 | ||
| 51 | #else /* CONFIG_FAULT_INJECTION_DEBUG_FS */ | 47 | #else /* CONFIG_FAULT_INJECTION_DEBUG_FS */ |
| 52 | 48 | ||
| 53 | static inline int init_fault_attr_dentries(struct fault_attr *attr, | 49 | static inline struct dentry *fault_create_debugfs_attr(const char *name, |
| 54 | const char *name) | 50 | struct dentry *parent, struct fault_attr *attr) |
| 55 | { | ||
| 56 | return -ENODEV; | ||
| 57 | } | ||
| 58 | |||
| 59 | static inline void cleanup_fault_attr_dentries(struct fault_attr *attr) | ||
| 60 | { | 51 | { |
| 52 | return ERR_PTR(-ENODEV); | ||
| 61 | } | 53 | } |
| 62 | 54 | ||
| 63 | #endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */ | 55 | #endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */ |
diff --git a/include/linux/fs.h b/include/linux/fs.h index f23bcb77260c..178cdb4f1d4a 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -738,22 +738,54 @@ static inline int mapping_writably_mapped(struct address_space *mapping) | |||
| 738 | struct posix_acl; | 738 | struct posix_acl; |
| 739 | #define ACL_NOT_CACHED ((void *)(-1)) | 739 | #define ACL_NOT_CACHED ((void *)(-1)) |
| 740 | 740 | ||
| 741 | #define IOP_FASTPERM 0x0001 | ||
| 742 | #define IOP_LOOKUP 0x0002 | ||
| 743 | #define IOP_NOFOLLOW 0x0004 | ||
| 744 | |||
| 745 | /* | ||
| 746 | * Keep mostly read-only and often accessed (especially for | ||
| 747 | * the RCU path lookup and 'stat' data) fields at the beginning | ||
| 748 | * of the 'struct inode' | ||
| 749 | */ | ||
| 741 | struct inode { | 750 | struct inode { |
| 742 | /* RCU path lookup touches following: */ | ||
| 743 | umode_t i_mode; | 751 | umode_t i_mode; |
| 752 | unsigned short i_opflags; | ||
| 744 | uid_t i_uid; | 753 | uid_t i_uid; |
| 745 | gid_t i_gid; | 754 | gid_t i_gid; |
| 755 | unsigned int i_flags; | ||
| 756 | |||
| 757 | #ifdef CONFIG_FS_POSIX_ACL | ||
| 758 | struct posix_acl *i_acl; | ||
| 759 | struct posix_acl *i_default_acl; | ||
| 760 | #endif | ||
| 761 | |||
| 746 | const struct inode_operations *i_op; | 762 | const struct inode_operations *i_op; |
| 747 | struct super_block *i_sb; | 763 | struct super_block *i_sb; |
| 764 | struct address_space *i_mapping; | ||
| 748 | 765 | ||
| 749 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ | ||
| 750 | unsigned int i_flags; | ||
| 751 | unsigned long i_state; | ||
| 752 | #ifdef CONFIG_SECURITY | 766 | #ifdef CONFIG_SECURITY |
| 753 | void *i_security; | 767 | void *i_security; |
| 754 | #endif | 768 | #endif |
| 755 | struct mutex i_mutex; | ||
| 756 | 769 | ||
| 770 | /* Stat data, not accessed from path walking */ | ||
| 771 | unsigned long i_ino; | ||
| 772 | unsigned int i_nlink; | ||
| 773 | dev_t i_rdev; | ||
| 774 | loff_t i_size; | ||
| 775 | struct timespec i_atime; | ||
| 776 | struct timespec i_mtime; | ||
| 777 | struct timespec i_ctime; | ||
| 778 | unsigned int i_blkbits; | ||
| 779 | blkcnt_t i_blocks; | ||
| 780 | |||
| 781 | #ifdef __NEED_I_SIZE_ORDERED | ||
| 782 | seqcount_t i_size_seqcount; | ||
| 783 | #endif | ||
| 784 | |||
| 785 | /* Misc */ | ||
| 786 | unsigned long i_state; | ||
| 787 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ | ||
| 788 | struct mutex i_mutex; | ||
| 757 | 789 | ||
| 758 | unsigned long dirtied_when; /* jiffies of first dirtying */ | 790 | unsigned long dirtied_when; /* jiffies of first dirtying */ |
| 759 | 791 | ||
| @@ -765,25 +797,12 @@ struct inode { | |||
| 765 | struct list_head i_dentry; | 797 | struct list_head i_dentry; |
| 766 | struct rcu_head i_rcu; | 798 | struct rcu_head i_rcu; |
| 767 | }; | 799 | }; |
| 768 | unsigned long i_ino; | ||
| 769 | atomic_t i_count; | 800 | atomic_t i_count; |
| 770 | unsigned int i_nlink; | ||
| 771 | dev_t i_rdev; | ||
| 772 | unsigned int i_blkbits; | ||
| 773 | u64 i_version; | 801 | u64 i_version; |
| 774 | loff_t i_size; | ||
| 775 | #ifdef __NEED_I_SIZE_ORDERED | ||
| 776 | seqcount_t i_size_seqcount; | ||
| 777 | #endif | ||
| 778 | struct timespec i_atime; | ||
| 779 | struct timespec i_mtime; | ||
| 780 | struct timespec i_ctime; | ||
| 781 | blkcnt_t i_blocks; | ||
| 782 | unsigned short i_bytes; | 802 | unsigned short i_bytes; |
| 783 | atomic_t i_dio_count; | 803 | atomic_t i_dio_count; |
| 784 | const struct file_operations *i_fop; /* former ->i_op->default_file_ops */ | 804 | const struct file_operations *i_fop; /* former ->i_op->default_file_ops */ |
| 785 | struct file_lock *i_flock; | 805 | struct file_lock *i_flock; |
| 786 | struct address_space *i_mapping; | ||
| 787 | struct address_space i_data; | 806 | struct address_space i_data; |
| 788 | #ifdef CONFIG_QUOTA | 807 | #ifdef CONFIG_QUOTA |
| 789 | struct dquot *i_dquot[MAXQUOTAS]; | 808 | struct dquot *i_dquot[MAXQUOTAS]; |
| @@ -806,10 +825,6 @@ struct inode { | |||
| 806 | atomic_t i_readcount; /* struct files open RO */ | 825 | atomic_t i_readcount; /* struct files open RO */ |
| 807 | #endif | 826 | #endif |
| 808 | atomic_t i_writecount; | 827 | atomic_t i_writecount; |
| 809 | #ifdef CONFIG_FS_POSIX_ACL | ||
| 810 | struct posix_acl *i_acl; | ||
| 811 | struct posix_acl *i_default_acl; | ||
| 812 | #endif | ||
| 813 | void *i_private; /* fs or device private pointer */ | 828 | void *i_private; /* fs or device private pointer */ |
| 814 | }; | 829 | }; |
| 815 | 830 | ||
| @@ -2317,11 +2332,18 @@ extern int should_remove_suid(struct dentry *); | |||
| 2317 | extern int file_remove_suid(struct file *); | 2332 | extern int file_remove_suid(struct file *); |
| 2318 | 2333 | ||
| 2319 | extern void __insert_inode_hash(struct inode *, unsigned long hashval); | 2334 | extern void __insert_inode_hash(struct inode *, unsigned long hashval); |
| 2320 | extern void remove_inode_hash(struct inode *); | ||
| 2321 | static inline void insert_inode_hash(struct inode *inode) | 2335 | static inline void insert_inode_hash(struct inode *inode) |
| 2322 | { | 2336 | { |
| 2323 | __insert_inode_hash(inode, inode->i_ino); | 2337 | __insert_inode_hash(inode, inode->i_ino); |
| 2324 | } | 2338 | } |
| 2339 | |||
| 2340 | extern void __remove_inode_hash(struct inode *); | ||
| 2341 | static inline void remove_inode_hash(struct inode *inode) | ||
| 2342 | { | ||
| 2343 | if (!inode_unhashed(inode)) | ||
| 2344 | __remove_inode_hash(inode); | ||
| 2345 | } | ||
| 2346 | |||
| 2325 | extern void inode_sb_list_add(struct inode *inode); | 2347 | extern void inode_sb_list_add(struct inode *inode); |
| 2326 | 2348 | ||
| 2327 | #ifdef CONFIG_BLOCK | 2349 | #ifdef CONFIG_BLOCK |
diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h index 5bbebda78b02..5e98eeb2af3b 100644 --- a/include/linux/genalloc.h +++ b/include/linux/genalloc.h | |||
| @@ -1,8 +1,26 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Basic general purpose allocator for managing special purpose memory | 2 | * Basic general purpose allocator for managing special purpose |
| 3 | * not managed by the regular kmalloc/kfree interface. | 3 | * memory, for example, memory that is not managed by the regular |
| 4 | * Uses for this includes on-device special memory, uncached memory | 4 | * kmalloc/kfree interface. Uses for this includes on-device special |
| 5 | * etc. | 5 | * memory, uncached memory etc. |
| 6 | * | ||
| 7 | * It is safe to use the allocator in NMI handlers and other special | ||
| 8 | * unblockable contexts that could otherwise deadlock on locks. This | ||
| 9 | * is implemented by using atomic operations and retries on any | ||
| 10 | * conflicts. The disadvantage is that there may be livelocks in | ||
| 11 | * extreme cases. For better scalability, one allocator can be used | ||
| 12 | * for each CPU. | ||
| 13 | * | ||
| 14 | * The lockless operation only works if there is enough memory | ||
| 15 | * available. If new memory is added to the pool a lock has to be | ||
| 16 | * still taken. So any user relying on locklessness has to ensure | ||
| 17 | * that sufficient memory is preallocated. | ||
| 18 | * | ||
| 19 | * The basic atomic operation of this allocator is cmpxchg on long. | ||
| 20 | * On architectures that don't have NMI-safe cmpxchg implementation, | ||
| 21 | * the allocator can NOT be used in NMI handler. So code uses the | ||
| 22 | * allocator in NMI handler should depend on | ||
| 23 | * CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG. | ||
| 6 | * | 24 | * |
| 7 | * This source code is licensed under the GNU General Public License, | 25 | * This source code is licensed under the GNU General Public License, |
| 8 | * Version 2. See the file COPYING for more details. | 26 | * Version 2. See the file COPYING for more details. |
| @@ -15,7 +33,7 @@ | |||
| 15 | * General purpose special memory pool descriptor. | 33 | * General purpose special memory pool descriptor. |
| 16 | */ | 34 | */ |
| 17 | struct gen_pool { | 35 | struct gen_pool { |
| 18 | rwlock_t lock; | 36 | spinlock_t lock; |
| 19 | struct list_head chunks; /* list of chunks in this pool */ | 37 | struct list_head chunks; /* list of chunks in this pool */ |
| 20 | int min_alloc_order; /* minimum allocation order */ | 38 | int min_alloc_order; /* minimum allocation order */ |
| 21 | }; | 39 | }; |
| @@ -24,8 +42,8 @@ struct gen_pool { | |||
| 24 | * General purpose special memory pool chunk descriptor. | 42 | * General purpose special memory pool chunk descriptor. |
| 25 | */ | 43 | */ |
| 26 | struct gen_pool_chunk { | 44 | struct gen_pool_chunk { |
| 27 | spinlock_t lock; | ||
| 28 | struct list_head next_chunk; /* next chunk in pool */ | 45 | struct list_head next_chunk; /* next chunk in pool */ |
| 46 | atomic_t avail; | ||
| 29 | phys_addr_t phys_addr; /* physical starting address of memory chunk */ | 47 | phys_addr_t phys_addr; /* physical starting address of memory chunk */ |
| 30 | unsigned long start_addr; /* starting address of memory chunk */ | 48 | unsigned long start_addr; /* starting address of memory chunk */ |
| 31 | unsigned long end_addr; /* ending address of memory chunk */ | 49 | unsigned long end_addr; /* ending address of memory chunk */ |
| @@ -56,4 +74,8 @@ static inline int gen_pool_add(struct gen_pool *pool, unsigned long addr, | |||
| 56 | extern void gen_pool_destroy(struct gen_pool *); | 74 | extern void gen_pool_destroy(struct gen_pool *); |
| 57 | extern unsigned long gen_pool_alloc(struct gen_pool *, size_t); | 75 | extern unsigned long gen_pool_alloc(struct gen_pool *, size_t); |
| 58 | extern void gen_pool_free(struct gen_pool *, unsigned long, size_t); | 76 | extern void gen_pool_free(struct gen_pool *, unsigned long, size_t); |
| 77 | extern void gen_pool_for_each_chunk(struct gen_pool *, | ||
| 78 | void (*)(struct gen_pool *, struct gen_pool_chunk *, void *), void *); | ||
| 79 | extern size_t gen_pool_avail(struct gen_pool *); | ||
| 80 | extern size_t gen_pool_size(struct gen_pool *); | ||
| 59 | #endif /* __GENALLOC_H__ */ | 81 | #endif /* __GENALLOC_H__ */ |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index cb4089254f01..3a76faf6a3ee 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
| @@ -92,7 +92,7 @@ struct vm_area_struct; | |||
| 92 | */ | 92 | */ |
| 93 | #define __GFP_NOTRACK_FALSE_POSITIVE (__GFP_NOTRACK) | 93 | #define __GFP_NOTRACK_FALSE_POSITIVE (__GFP_NOTRACK) |
| 94 | 94 | ||
| 95 | #define __GFP_BITS_SHIFT 23 /* Room for 23 __GFP_FOO bits */ | 95 | #define __GFP_BITS_SHIFT 24 /* Room for N __GFP_FOO bits */ |
| 96 | #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) | 96 | #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) |
| 97 | 97 | ||
| 98 | /* This equals 0, but use constants in case they ever change */ | 98 | /* This equals 0, but use constants in case they ever change */ |
diff --git a/include/linux/idr.h b/include/linux/idr.h index 13a801f3d028..255491cf522e 100644 --- a/include/linux/idr.h +++ b/include/linux/idr.h | |||
| @@ -146,6 +146,10 @@ void ida_remove(struct ida *ida, int id); | |||
| 146 | void ida_destroy(struct ida *ida); | 146 | void ida_destroy(struct ida *ida); |
| 147 | void ida_init(struct ida *ida); | 147 | void ida_init(struct ida *ida); |
| 148 | 148 | ||
| 149 | int ida_simple_get(struct ida *ida, unsigned int start, unsigned int end, | ||
| 150 | gfp_t gfp_mask); | ||
| 151 | void ida_simple_remove(struct ida *ida, unsigned int id); | ||
| 152 | |||
| 149 | void __init idr_init_cache(void); | 153 | void __init idr_init_cache(void); |
| 150 | 154 | ||
| 151 | #endif /* __IDR_H__ */ | 155 | #endif /* __IDR_H__ */ |
diff --git a/include/linux/input.h b/include/linux/input.h index 068784e17972..a637e7814334 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
| @@ -438,6 +438,8 @@ struct input_keymap_entry { | |||
| 438 | #define KEY_WIMAX 246 | 438 | #define KEY_WIMAX 246 |
| 439 | #define KEY_RFKILL 247 /* Key that controls all radios */ | 439 | #define KEY_RFKILL 247 /* Key that controls all radios */ |
| 440 | 440 | ||
| 441 | #define KEY_MICMUTE 248 /* Mute / unmute the microphone */ | ||
| 442 | |||
| 441 | /* Code 255 is reserved for special needs of AT keyboard driver */ | 443 | /* Code 255 is reserved for special needs of AT keyboard driver */ |
| 442 | 444 | ||
| 443 | #define BTN_MISC 0x100 | 445 | #define BTN_MISC 0x100 |
diff --git a/include/linux/ioport.h b/include/linux/ioport.h index c2ebfe66177c..9d57a71775b5 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h | |||
| @@ -162,6 +162,7 @@ extern int allocate_resource(struct resource *root, struct resource *new, | |||
| 162 | resource_size_t, | 162 | resource_size_t, |
| 163 | resource_size_t), | 163 | resource_size_t), |
| 164 | void *alignf_data); | 164 | void *alignf_data); |
| 165 | struct resource *lookup_resource(struct resource *root, resource_size_t start); | ||
| 165 | int adjust_resource(struct resource *res, resource_size_t start, | 166 | int adjust_resource(struct resource *res, resource_size_t start, |
| 166 | resource_size_t size); | 167 | resource_size_t size); |
| 167 | resource_size_t resource_alignment(struct resource *res); | 168 | resource_size_t resource_alignment(struct resource *res); |
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index d087c2e7b2aa..38f307b8c334 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h | |||
| @@ -1329,12 +1329,6 @@ extern int jbd_blocks_per_page(struct inode *inode); | |||
| 1329 | #define BUFFER_TRACE2(bh, bh2, info) do {} while (0) | 1329 | #define BUFFER_TRACE2(bh, bh2, info) do {} while (0) |
| 1330 | #define JBUFFER_TRACE(jh, info) do {} while (0) | 1330 | #define JBUFFER_TRACE(jh, info) do {} while (0) |
| 1331 | 1331 | ||
| 1332 | /* | ||
| 1333 | * jbd2_dev_to_name is a utility function used by the jbd2 and ext4 | ||
| 1334 | * tracing infrastructure to map a dev_t to a device name. | ||
| 1335 | */ | ||
| 1336 | extern const char *jbd2_dev_to_name(dev_t device); | ||
| 1337 | |||
| 1338 | #endif /* __KERNEL__ */ | 1332 | #endif /* __KERNEL__ */ |
| 1339 | 1333 | ||
| 1340 | #endif /* _LINUX_JBD2_H */ | 1334 | #endif /* _LINUX_JBD2_H */ |
diff --git a/include/linux/llist.h b/include/linux/llist.h new file mode 100644 index 000000000000..aa0c8b5b3cd0 --- /dev/null +++ b/include/linux/llist.h | |||
| @@ -0,0 +1,126 @@ | |||
| 1 | #ifndef LLIST_H | ||
| 2 | #define LLIST_H | ||
| 3 | /* | ||
| 4 | * Lock-less NULL terminated single linked list | ||
| 5 | * | ||
| 6 | * If there are multiple producers and multiple consumers, llist_add | ||
| 7 | * can be used in producers and llist_del_all can be used in | ||
| 8 | * consumers. They can work simultaneously without lock. But | ||
| 9 | * llist_del_first can not be used here. Because llist_del_first | ||
| 10 | * depends on list->first->next does not changed if list->first is not | ||
| 11 | * changed during its operation, but llist_del_first, llist_add, | ||
| 12 | * llist_add (or llist_del_all, llist_add, llist_add) sequence in | ||
| 13 | * another consumer may violate that. | ||
| 14 | * | ||
| 15 | * If there are multiple producers and one consumer, llist_add can be | ||
| 16 | * used in producers and llist_del_all or llist_del_first can be used | ||
| 17 | * in the consumer. | ||
| 18 | * | ||
| 19 | * This can be summarized as follow: | ||
| 20 | * | ||
| 21 | * | add | del_first | del_all | ||
| 22 | * add | - | - | - | ||
| 23 | * del_first | | L | L | ||
| 24 | * del_all | | | - | ||
| 25 | * | ||
| 26 | * Where "-" stands for no lock is needed, while "L" stands for lock | ||
| 27 | * is needed. | ||
| 28 | * | ||
| 29 | * The list entries deleted via llist_del_all can be traversed with | ||
| 30 | * traversing function such as llist_for_each etc. But the list | ||
| 31 | * entries can not be traversed safely before deleted from the list. | ||
| 32 | * The order of deleted entries is from the newest to the oldest added | ||
| 33 | * one. If you want to traverse from the oldest to the newest, you | ||
| 34 | * must reverse the order by yourself before traversing. | ||
| 35 | * | ||
| 36 | * The basic atomic operation of this list is cmpxchg on long. On | ||
| 37 | * architectures that don't have NMI-safe cmpxchg implementation, the | ||
| 38 | * list can NOT be used in NMI handler. So code uses the list in NMI | ||
| 39 | * handler should depend on CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG. | ||
| 40 | */ | ||
| 41 | |||
| 42 | struct llist_head { | ||
| 43 | struct llist_node *first; | ||
| 44 | }; | ||
| 45 | |||
| 46 | struct llist_node { | ||
| 47 | struct llist_node *next; | ||
| 48 | }; | ||
| 49 | |||
| 50 | #define LLIST_HEAD_INIT(name) { NULL } | ||
| 51 | #define LLIST_HEAD(name) struct llist_head name = LLIST_HEAD_INIT(name) | ||
| 52 | |||
| 53 | /** | ||
| 54 | * init_llist_head - initialize lock-less list head | ||
| 55 | * @head: the head for your lock-less list | ||
| 56 | */ | ||
| 57 | static inline void init_llist_head(struct llist_head *list) | ||
| 58 | { | ||
| 59 | list->first = NULL; | ||
| 60 | } | ||
| 61 | |||
| 62 | /** | ||
| 63 | * llist_entry - get the struct of this entry | ||
| 64 | * @ptr: the &struct llist_node pointer. | ||
| 65 | * @type: the type of the struct this is embedded in. | ||
| 66 | * @member: the name of the llist_node within the struct. | ||
| 67 | */ | ||
| 68 | #define llist_entry(ptr, type, member) \ | ||
| 69 | container_of(ptr, type, member) | ||
| 70 | |||
| 71 | /** | ||
| 72 | * llist_for_each - iterate over some deleted entries of a lock-less list | ||
| 73 | * @pos: the &struct llist_node to use as a loop cursor | ||
| 74 | * @node: the first entry of deleted list entries | ||
| 75 | * | ||
| 76 | * In general, some entries of the lock-less list can be traversed | ||
| 77 | * safely only after being deleted from list, so start with an entry | ||
| 78 | * instead of list head. | ||
| 79 | * | ||
| 80 | * If being used on entries deleted from lock-less list directly, the | ||
| 81 | * traverse order is from the newest to the oldest added entry. If | ||
| 82 | * you want to traverse from the oldest to the newest, you must | ||
| 83 | * reverse the order by yourself before traversing. | ||
| 84 | */ | ||
| 85 | #define llist_for_each(pos, node) \ | ||
| 86 | for ((pos) = (node); pos; (pos) = (pos)->next) | ||
| 87 | |||
| 88 | /** | ||
| 89 | * llist_for_each_entry - iterate over some deleted entries of lock-less list of given type | ||
| 90 | * @pos: the type * to use as a loop cursor. | ||
| 91 | * @node: the fist entry of deleted list entries. | ||
| 92 | * @member: the name of the llist_node with the struct. | ||
| 93 | * | ||
| 94 | * In general, some entries of the lock-less list can be traversed | ||
| 95 | * safely only after being removed from list, so start with an entry | ||
| 96 | * instead of list head. | ||
| 97 | * | ||
| 98 | * If being used on entries deleted from lock-less list directly, the | ||
| 99 | * traverse order is from the newest to the oldest added entry. If | ||
| 100 | * you want to traverse from the oldest to the newest, you must | ||
| 101 | * reverse the order by yourself before traversing. | ||
| 102 | */ | ||
| 103 | #define llist_for_each_entry(pos, node, member) \ | ||
| 104 | for ((pos) = llist_entry((node), typeof(*(pos)), member); \ | ||
| 105 | &(pos)->member != NULL; \ | ||
| 106 | (pos) = llist_entry((pos)->member.next, typeof(*(pos)), member)) | ||
| 107 | |||
| 108 | /** | ||
| 109 | * llist_empty - tests whether a lock-less list is empty | ||
| 110 | * @head: the list to test | ||
| 111 | * | ||
| 112 | * Not guaranteed to be accurate or up to date. Just a quick way to | ||
| 113 | * test whether the list is empty without deleting something from the | ||
| 114 | * list. | ||
| 115 | */ | ||
| 116 | static inline int llist_empty(const struct llist_head *head) | ||
| 117 | { | ||
| 118 | return ACCESS_ONCE(head->first) == NULL; | ||
| 119 | } | ||
| 120 | |||
| 121 | void llist_add(struct llist_node *new, struct llist_head *head); | ||
| 122 | void llist_add_batch(struct llist_node *new_first, struct llist_node *new_last, | ||
| 123 | struct llist_head *head); | ||
| 124 | struct llist_node *llist_del_first(struct llist_head *head); | ||
| 125 | struct llist_node *llist_del_all(struct llist_head *head); | ||
| 126 | #endif /* LLIST_H */ | ||
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index b96600786913..3b535db00a94 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
| @@ -86,8 +86,6 @@ extern void mem_cgroup_uncharge_end(void); | |||
| 86 | 86 | ||
| 87 | extern void mem_cgroup_uncharge_page(struct page *page); | 87 | extern void mem_cgroup_uncharge_page(struct page *page); |
| 88 | extern void mem_cgroup_uncharge_cache_page(struct page *page); | 88 | extern void mem_cgroup_uncharge_cache_page(struct page *page); |
| 89 | extern int mem_cgroup_shmem_charge_fallback(struct page *page, | ||
| 90 | struct mm_struct *mm, gfp_t gfp_mask); | ||
| 91 | 89 | ||
| 92 | extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask); | 90 | extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask); |
| 93 | int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem); | 91 | int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem); |
| @@ -225,12 +223,6 @@ static inline void mem_cgroup_uncharge_cache_page(struct page *page) | |||
| 225 | { | 223 | { |
| 226 | } | 224 | } |
| 227 | 225 | ||
| 228 | static inline int mem_cgroup_shmem_charge_fallback(struct page *page, | ||
| 229 | struct mm_struct *mm, gfp_t gfp_mask) | ||
| 230 | { | ||
| 231 | return 0; | ||
| 232 | } | ||
| 233 | |||
| 234 | static inline void mem_cgroup_add_lru_list(struct page *page, int lru) | 226 | static inline void mem_cgroup_add_lru_list(struct page *page, int lru) |
| 235 | { | 227 | { |
| 236 | } | 228 | } |
diff --git a/include/linux/mfd/aat2870.h b/include/linux/mfd/aat2870.h new file mode 100644 index 000000000000..f7316c29bdec --- /dev/null +++ b/include/linux/mfd/aat2870.h | |||
| @@ -0,0 +1,181 @@ | |||
| 1 | /* | ||
| 2 | * linux/include/linux/mfd/aat2870.h | ||
| 3 | * | ||
| 4 | * Copyright (c) 2011, NVIDIA Corporation. | ||
| 5 | * Author: Jin Park <jinyoungp@nvidia.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 | * version 2 as published by the Free Software Foundation. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, but | ||
| 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 14 | * 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., 51 Franklin St, Fifth Floor, Boston, MA | ||
| 19 | * 02110-1301 USA | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef __LINUX_MFD_AAT2870_H | ||
| 23 | #define __LINUX_MFD_AAT2870_H | ||
| 24 | |||
| 25 | #include <linux/debugfs.h> | ||
| 26 | #include <linux/i2c.h> | ||
| 27 | |||
| 28 | /* Register offsets */ | ||
| 29 | #define AAT2870_BL_CH_EN 0x00 | ||
| 30 | #define AAT2870_BLM 0x01 | ||
| 31 | #define AAT2870_BLS 0x02 | ||
| 32 | #define AAT2870_BL1 0x03 | ||
| 33 | #define AAT2870_BL2 0x04 | ||
| 34 | #define AAT2870_BL3 0x05 | ||
| 35 | #define AAT2870_BL4 0x06 | ||
| 36 | #define AAT2870_BL5 0x07 | ||
| 37 | #define AAT2870_BL6 0x08 | ||
| 38 | #define AAT2870_BL7 0x09 | ||
| 39 | #define AAT2870_BL8 0x0A | ||
| 40 | #define AAT2870_FLR 0x0B | ||
| 41 | #define AAT2870_FM 0x0C | ||
| 42 | #define AAT2870_FS 0x0D | ||
| 43 | #define AAT2870_ALS_CFG0 0x0E | ||
| 44 | #define AAT2870_ALS_CFG1 0x0F | ||
| 45 | #define AAT2870_ALS_CFG2 0x10 | ||
| 46 | #define AAT2870_AMB 0x11 | ||
| 47 | #define AAT2870_ALS0 0x12 | ||
| 48 | #define AAT2870_ALS1 0x13 | ||
| 49 | #define AAT2870_ALS2 0x14 | ||
| 50 | #define AAT2870_ALS3 0x15 | ||
| 51 | #define AAT2870_ALS4 0x16 | ||
| 52 | #define AAT2870_ALS5 0x17 | ||
| 53 | #define AAT2870_ALS6 0x18 | ||
| 54 | #define AAT2870_ALS7 0x19 | ||
| 55 | #define AAT2870_ALS8 0x1A | ||
| 56 | #define AAT2870_ALS9 0x1B | ||
| 57 | #define AAT2870_ALSA 0x1C | ||
| 58 | #define AAT2870_ALSB 0x1D | ||
| 59 | #define AAT2870_ALSC 0x1E | ||
| 60 | #define AAT2870_ALSD 0x1F | ||
| 61 | #define AAT2870_ALSE 0x20 | ||
| 62 | #define AAT2870_ALSF 0x21 | ||
| 63 | #define AAT2870_SUB_SET 0x22 | ||
| 64 | #define AAT2870_SUB_CTRL 0x23 | ||
| 65 | #define AAT2870_LDO_AB 0x24 | ||
| 66 | #define AAT2870_LDO_CD 0x25 | ||
| 67 | #define AAT2870_LDO_EN 0x26 | ||
| 68 | #define AAT2870_REG_NUM 0x27 | ||
| 69 | |||
| 70 | /* Device IDs */ | ||
| 71 | enum aat2870_id { | ||
| 72 | AAT2870_ID_BL, | ||
| 73 | AAT2870_ID_LDOA, | ||
| 74 | AAT2870_ID_LDOB, | ||
| 75 | AAT2870_ID_LDOC, | ||
| 76 | AAT2870_ID_LDOD | ||
| 77 | }; | ||
| 78 | |||
| 79 | /* Backlight channels */ | ||
| 80 | #define AAT2870_BL_CH1 0x01 | ||
| 81 | #define AAT2870_BL_CH2 0x02 | ||
| 82 | #define AAT2870_BL_CH3 0x04 | ||
| 83 | #define AAT2870_BL_CH4 0x08 | ||
| 84 | #define AAT2870_BL_CH5 0x10 | ||
| 85 | #define AAT2870_BL_CH6 0x20 | ||
| 86 | #define AAT2870_BL_CH7 0x40 | ||
| 87 | #define AAT2870_BL_CH8 0x80 | ||
| 88 | #define AAT2870_BL_CH_ALL 0xFF | ||
| 89 | |||
| 90 | /* Backlight current magnitude (mA) */ | ||
| 91 | enum aat2870_current { | ||
| 92 | AAT2870_CURRENT_0_45 = 1, | ||
| 93 | AAT2870_CURRENT_0_90, | ||
| 94 | AAT2870_CURRENT_1_80, | ||
| 95 | AAT2870_CURRENT_2_70, | ||
| 96 | AAT2870_CURRENT_3_60, | ||
| 97 | AAT2870_CURRENT_4_50, | ||
| 98 | AAT2870_CURRENT_5_40, | ||
| 99 | AAT2870_CURRENT_6_30, | ||
| 100 | AAT2870_CURRENT_7_20, | ||
| 101 | AAT2870_CURRENT_8_10, | ||
| 102 | AAT2870_CURRENT_9_00, | ||
| 103 | AAT2870_CURRENT_9_90, | ||
| 104 | AAT2870_CURRENT_10_8, | ||
| 105 | AAT2870_CURRENT_11_7, | ||
| 106 | AAT2870_CURRENT_12_6, | ||
| 107 | AAT2870_CURRENT_13_5, | ||
| 108 | AAT2870_CURRENT_14_4, | ||
| 109 | AAT2870_CURRENT_15_3, | ||
| 110 | AAT2870_CURRENT_16_2, | ||
| 111 | AAT2870_CURRENT_17_1, | ||
| 112 | AAT2870_CURRENT_18_0, | ||
| 113 | AAT2870_CURRENT_18_9, | ||
| 114 | AAT2870_CURRENT_19_8, | ||
| 115 | AAT2870_CURRENT_20_7, | ||
| 116 | AAT2870_CURRENT_21_6, | ||
| 117 | AAT2870_CURRENT_22_5, | ||
| 118 | AAT2870_CURRENT_23_4, | ||
| 119 | AAT2870_CURRENT_24_3, | ||
| 120 | AAT2870_CURRENT_25_2, | ||
| 121 | AAT2870_CURRENT_26_1, | ||
| 122 | AAT2870_CURRENT_27_0, | ||
| 123 | AAT2870_CURRENT_27_9 | ||
| 124 | }; | ||
| 125 | |||
| 126 | struct aat2870_register { | ||
| 127 | bool readable; | ||
| 128 | bool writeable; | ||
| 129 | u8 value; | ||
| 130 | }; | ||
| 131 | |||
| 132 | struct aat2870_data { | ||
| 133 | struct device *dev; | ||
| 134 | struct i2c_client *client; | ||
| 135 | |||
| 136 | struct mutex io_lock; | ||
| 137 | struct aat2870_register *reg_cache; /* register cache */ | ||
| 138 | int en_pin; /* enable GPIO pin (if < 0, ignore this value) */ | ||
| 139 | bool is_enable; | ||
| 140 | |||
| 141 | /* init and uninit for platform specified */ | ||
| 142 | int (*init)(struct aat2870_data *aat2870); | ||
| 143 | void (*uninit)(struct aat2870_data *aat2870); | ||
| 144 | |||
| 145 | /* i2c io funcntions */ | ||
| 146 | int (*read)(struct aat2870_data *aat2870, u8 addr, u8 *val); | ||
| 147 | int (*write)(struct aat2870_data *aat2870, u8 addr, u8 val); | ||
| 148 | int (*update)(struct aat2870_data *aat2870, u8 addr, u8 mask, u8 val); | ||
| 149 | |||
| 150 | /* for debugfs */ | ||
| 151 | struct dentry *dentry_root; | ||
| 152 | struct dentry *dentry_reg; | ||
| 153 | }; | ||
| 154 | |||
| 155 | struct aat2870_subdev_info { | ||
| 156 | int id; | ||
| 157 | const char *name; | ||
| 158 | void *platform_data; | ||
| 159 | }; | ||
| 160 | |||
| 161 | struct aat2870_platform_data { | ||
| 162 | int en_pin; /* enable GPIO pin (if < 0, ignore this value) */ | ||
| 163 | |||
| 164 | struct aat2870_subdev_info *subdevs; | ||
| 165 | int num_subdevs; | ||
| 166 | |||
| 167 | /* init and uninit for platform specified */ | ||
| 168 | int (*init)(struct aat2870_data *aat2870); | ||
| 169 | void (*uninit)(struct aat2870_data *aat2870); | ||
| 170 | }; | ||
| 171 | |||
| 172 | struct aat2870_bl_platform_data { | ||
| 173 | /* backlight channels, default is AAT2870_BL_CH_ALL */ | ||
| 174 | int channels; | ||
| 175 | /* backlight current magnitude, default is AAT2870_CURRENT_27_9 */ | ||
| 176 | int max_current; | ||
| 177 | /* maximum brightness, default is 255 */ | ||
| 178 | int max_brightness; | ||
| 179 | }; | ||
| 180 | |||
| 181 | #endif /* __LINUX_MFD_AAT2870_H */ | ||
diff --git a/include/linux/mfd/ab8500.h b/include/linux/mfd/ab8500.h index b31843075198..838c6b487cc5 100644 --- a/include/linux/mfd/ab8500.h +++ b/include/linux/mfd/ab8500.h | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #define AB8500_INTERRUPT 0xE | 28 | #define AB8500_INTERRUPT 0xE |
| 29 | #define AB8500_RTC 0xF | 29 | #define AB8500_RTC 0xF |
| 30 | #define AB8500_MISC 0x10 | 30 | #define AB8500_MISC 0x10 |
| 31 | #define AB8500_DEVELOPMENT 0x11 | ||
| 31 | #define AB8500_DEBUG 0x12 | 32 | #define AB8500_DEBUG 0x12 |
| 32 | #define AB8500_PROD_TEST 0x13 | 33 | #define AB8500_PROD_TEST 0x13 |
| 33 | #define AB8500_OTP_EMUL 0x15 | 34 | #define AB8500_OTP_EMUL 0x15 |
| @@ -74,13 +75,6 @@ | |||
| 74 | #define AB8500_INT_ACC_DETECT_21DB_F 37 | 75 | #define AB8500_INT_ACC_DETECT_21DB_F 37 |
| 75 | #define AB8500_INT_ACC_DETECT_21DB_R 38 | 76 | #define AB8500_INT_ACC_DETECT_21DB_R 38 |
| 76 | #define AB8500_INT_GP_SW_ADC_CONV_END 39 | 77 | #define AB8500_INT_GP_SW_ADC_CONV_END 39 |
| 77 | #define AB8500_INT_ACC_DETECT_1DB_F 33 | ||
| 78 | #define AB8500_INT_ACC_DETECT_1DB_R 34 | ||
| 79 | #define AB8500_INT_ACC_DETECT_22DB_F 35 | ||
| 80 | #define AB8500_INT_ACC_DETECT_22DB_R 36 | ||
| 81 | #define AB8500_INT_ACC_DETECT_21DB_F 37 | ||
| 82 | #define AB8500_INT_ACC_DETECT_21DB_R 38 | ||
| 83 | #define AB8500_INT_GP_SW_ADC_CONV_END 39 | ||
| 84 | #define AB8500_INT_GPIO6R 40 | 78 | #define AB8500_INT_GPIO6R 40 |
| 85 | #define AB8500_INT_GPIO7R 41 | 79 | #define AB8500_INT_GPIO7R 41 |
| 86 | #define AB8500_INT_GPIO8R 42 | 80 | #define AB8500_INT_GPIO8R 42 |
diff --git a/include/linux/mfd/max8997.h b/include/linux/mfd/max8997.h index 60931d089422..0bbd13dbe336 100644 --- a/include/linux/mfd/max8997.h +++ b/include/linux/mfd/max8997.h | |||
| @@ -107,11 +107,16 @@ struct max8997_platform_data { | |||
| 107 | unsigned int buck5_voltage[8]; | 107 | unsigned int buck5_voltage[8]; |
| 108 | bool buck5_gpiodvs; | 108 | bool buck5_gpiodvs; |
| 109 | 109 | ||
| 110 | /* ---- Charger control ---- */ | ||
| 111 | /* eoc stands for 'end of charge' */ | ||
| 112 | int eoc_mA; /* 50 ~ 200mA by 10mA step */ | ||
| 113 | /* charge Full Timeout */ | ||
| 114 | int timeout; /* 0 (no timeout), 5, 6, 7 hours */ | ||
| 115 | |||
| 110 | /* MUIC: Not implemented */ | 116 | /* MUIC: Not implemented */ |
| 111 | /* HAPTIC: Not implemented */ | 117 | /* HAPTIC: Not implemented */ |
| 112 | /* RTC: Not implemented */ | 118 | /* RTC: Not implemented */ |
| 113 | /* Flash: Not implemented */ | 119 | /* Flash: Not implemented */ |
| 114 | /* Charger control: Not implemented */ | ||
| 115 | }; | 120 | }; |
| 116 | 121 | ||
| 117 | #endif /* __LINUX_MFD_MAX8998_H */ | 122 | #endif /* __LINUX_MFD_MAX8998_H */ |
diff --git a/include/linux/mfd/max8998.h b/include/linux/mfd/max8998.h index 61daa167b576..f4f0dfa4698a 100644 --- a/include/linux/mfd/max8998.h +++ b/include/linux/mfd/max8998.h | |||
| @@ -87,6 +87,15 @@ struct max8998_regulator_data { | |||
| 87 | * @wakeup: Allow to wake up from suspend | 87 | * @wakeup: Allow to wake up from suspend |
| 88 | * @rtc_delay: LP3974 RTC chip bug that requires delay after a register | 88 | * @rtc_delay: LP3974 RTC chip bug that requires delay after a register |
| 89 | * write before reading it. | 89 | * write before reading it. |
| 90 | * @eoc: End of Charge Level in percent: 10% ~ 45% by 5% step | ||
| 91 | * If it equals 0, leave it unchanged. | ||
| 92 | * Otherwise, it is a invalid value. | ||
| 93 | * @restart: Restart Level in mV: 100, 150, 200, and -1 for disable. | ||
| 94 | * If it equals 0, leave it unchanged. | ||
| 95 | * Otherwise, it is a invalid value. | ||
| 96 | * @timeout: Full Timeout in hours: 5, 6, 7, and -1 for disable. | ||
| 97 | * If it equals 0, leave it unchanged. | ||
| 98 | * Otherwise, leave it unchanged. | ||
| 90 | */ | 99 | */ |
| 91 | struct max8998_platform_data { | 100 | struct max8998_platform_data { |
| 92 | struct max8998_regulator_data *regulators; | 101 | struct max8998_regulator_data *regulators; |
| @@ -107,6 +116,9 @@ struct max8998_platform_data { | |||
| 107 | int buck2_default_idx; | 116 | int buck2_default_idx; |
| 108 | bool wakeup; | 117 | bool wakeup; |
| 109 | bool rtc_delay; | 118 | bool rtc_delay; |
| 119 | int eoc; | ||
| 120 | int restart; | ||
| 121 | int timeout; | ||
| 110 | }; | 122 | }; |
| 111 | 123 | ||
| 112 | #endif /* __LINUX_MFD_MAX8998_H */ | 124 | #endif /* __LINUX_MFD_MAX8998_H */ |
diff --git a/include/linux/mfd/stmpe.h b/include/linux/mfd/stmpe.h index e762c270d8d4..be1af7c42e57 100644 --- a/include/linux/mfd/stmpe.h +++ b/include/linux/mfd/stmpe.h | |||
| @@ -57,6 +57,7 @@ struct stmpe_variant_info; | |||
| 57 | * @irq_lock: IRQ bus lock | 57 | * @irq_lock: IRQ bus lock |
| 58 | * @dev: device, mostly for dev_dbg() | 58 | * @dev: device, mostly for dev_dbg() |
| 59 | * @i2c: i2c client | 59 | * @i2c: i2c client |
| 60 | * @partnum: part number | ||
| 60 | * @variant: the detected STMPE model number | 61 | * @variant: the detected STMPE model number |
| 61 | * @regs: list of addresses of registers which are at different addresses on | 62 | * @regs: list of addresses of registers which are at different addresses on |
| 62 | * different variants. Indexed by one of STMPE_IDX_*. | 63 | * different variants. Indexed by one of STMPE_IDX_*. |
| @@ -121,6 +122,8 @@ struct stmpe_keypad_platform_data { | |||
| 121 | * @norequest_mask: bitmask specifying which GPIOs should _not_ be | 122 | * @norequest_mask: bitmask specifying which GPIOs should _not_ be |
| 122 | * requestable due to different usage (e.g. touch, keypad) | 123 | * requestable due to different usage (e.g. touch, keypad) |
| 123 | * STMPE_GPIO_NOREQ_* macros can be used here. | 124 | * STMPE_GPIO_NOREQ_* macros can be used here. |
| 125 | * @setup: board specific setup callback. | ||
| 126 | * @remove: board specific remove callback | ||
| 124 | */ | 127 | */ |
| 125 | struct stmpe_gpio_platform_data { | 128 | struct stmpe_gpio_platform_data { |
| 126 | int gpio_base; | 129 | int gpio_base; |
diff --git a/include/linux/mfd/tps65910.h b/include/linux/mfd/tps65910.h index 73572c65d04f..82b4c8801a4f 100644 --- a/include/linux/mfd/tps65910.h +++ b/include/linux/mfd/tps65910.h | |||
| @@ -791,6 +791,7 @@ int tps65910_clear_bits(struct tps65910 *tps65910, u8 reg, u8 mask); | |||
| 791 | void tps65910_gpio_init(struct tps65910 *tps65910, int gpio_base); | 791 | void tps65910_gpio_init(struct tps65910 *tps65910, int gpio_base); |
| 792 | int tps65910_irq_init(struct tps65910 *tps65910, int irq, | 792 | int tps65910_irq_init(struct tps65910 *tps65910, int irq, |
| 793 | struct tps65910_platform_data *pdata); | 793 | struct tps65910_platform_data *pdata); |
| 794 | int tps65910_irq_exit(struct tps65910 *tps65910); | ||
| 794 | 795 | ||
| 795 | static inline int tps65910_chip_id(struct tps65910 *tps65910) | 796 | static inline int tps65910_chip_id(struct tps65910 *tps65910) |
| 796 | { | 797 | { |
diff --git a/include/linux/mfd/tps65912.h b/include/linux/mfd/tps65912.h new file mode 100644 index 000000000000..aaceab402ec5 --- /dev/null +++ b/include/linux/mfd/tps65912.h | |||
| @@ -0,0 +1,327 @@ | |||
| 1 | /* | ||
| 2 | * tps65912.h -- TI TPS6591x | ||
| 3 | * | ||
| 4 | * Copyright 2011 Texas Instruments Inc. | ||
| 5 | * | ||
| 6 | * Author: Margarita Olaya <magi@slimlogic.co.uk> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __LINUX_MFD_TPS65912_H | ||
| 16 | #define __LINUX_MFD_TPS65912_H | ||
| 17 | |||
| 18 | /* TPS regulator type list */ | ||
| 19 | #define REGULATOR_LDO 0 | ||
| 20 | #define REGULATOR_DCDC 1 | ||
| 21 | |||
| 22 | /* | ||
| 23 | * List of registers for TPS65912 | ||
| 24 | */ | ||
| 25 | |||
| 26 | #define TPS65912_DCDC1_CTRL 0x00 | ||
| 27 | #define TPS65912_DCDC2_CTRL 0x01 | ||
| 28 | #define TPS65912_DCDC3_CTRL 0x02 | ||
| 29 | #define TPS65912_DCDC4_CTRL 0x03 | ||
| 30 | #define TPS65912_DCDC1_OP 0x04 | ||
| 31 | #define TPS65912_DCDC1_AVS 0x05 | ||
| 32 | #define TPS65912_DCDC1_LIMIT 0x06 | ||
| 33 | #define TPS65912_DCDC2_OP 0x07 | ||
| 34 | #define TPS65912_DCDC2_AVS 0x08 | ||
| 35 | #define TPS65912_DCDC2_LIMIT 0x09 | ||
| 36 | #define TPS65912_DCDC3_OP 0x0A | ||
| 37 | #define TPS65912_DCDC3_AVS 0x0B | ||
| 38 | #define TPS65912_DCDC3_LIMIT 0x0C | ||
| 39 | #define TPS65912_DCDC4_OP 0x0D | ||
| 40 | #define TPS65912_DCDC4_AVS 0x0E | ||
| 41 | #define TPS65912_DCDC4_LIMIT 0x0F | ||
| 42 | #define TPS65912_LDO1_OP 0x10 | ||
| 43 | #define TPS65912_LDO1_AVS 0x11 | ||
| 44 | #define TPS65912_LDO1_LIMIT 0x12 | ||
| 45 | #define TPS65912_LDO2_OP 0x13 | ||
| 46 | #define TPS65912_LDO2_AVS 0x14 | ||
| 47 | #define TPS65912_LDO2_LIMIT 0x15 | ||
| 48 | #define TPS65912_LDO3_OP 0x16 | ||
| 49 | #define TPS65912_LDO3_AVS 0x17 | ||
| 50 | #define TPS65912_LDO3_LIMIT 0x18 | ||
| 51 | #define TPS65912_LDO4_OP 0x19 | ||
| 52 | #define TPS65912_LDO4_AVS 0x1A | ||
| 53 | #define TPS65912_LDO4_LIMIT 0x1B | ||
| 54 | #define TPS65912_LDO5 0x1C | ||
| 55 | #define TPS65912_LDO6 0x1D | ||
| 56 | #define TPS65912_LDO7 0x1E | ||
| 57 | #define TPS65912_LDO8 0x1F | ||
| 58 | #define TPS65912_LDO9 0x20 | ||
| 59 | #define TPS65912_LDO10 0x21 | ||
| 60 | #define TPS65912_THRM 0x22 | ||
| 61 | #define TPS65912_CLK32OUT 0x23 | ||
| 62 | #define TPS65912_DEVCTRL 0x24 | ||
| 63 | #define TPS65912_DEVCTRL2 0x25 | ||
| 64 | #define TPS65912_I2C_SPI_CFG 0x26 | ||
| 65 | #define TPS65912_KEEP_ON 0x27 | ||
| 66 | #define TPS65912_KEEP_ON2 0x28 | ||
| 67 | #define TPS65912_SET_OFF1 0x29 | ||
| 68 | #define TPS65912_SET_OFF2 0x2A | ||
| 69 | #define TPS65912_DEF_VOLT 0x2B | ||
| 70 | #define TPS65912_DEF_VOLT_MAPPING 0x2C | ||
| 71 | #define TPS65912_DISCHARGE 0x2D | ||
| 72 | #define TPS65912_DISCHARGE2 0x2E | ||
| 73 | #define TPS65912_EN1_SET1 0x2F | ||
| 74 | #define TPS65912_EN1_SET2 0x30 | ||
| 75 | #define TPS65912_EN2_SET1 0x31 | ||
| 76 | #define TPS65912_EN2_SET2 0x32 | ||
| 77 | #define TPS65912_EN3_SET1 0x33 | ||
| 78 | #define TPS65912_EN3_SET2 0x34 | ||
| 79 | #define TPS65912_EN4_SET1 0x35 | ||
| 80 | #define TPS65912_EN4_SET2 0x36 | ||
| 81 | #define TPS65912_PGOOD 0x37 | ||
| 82 | #define TPS65912_PGOOD2 0x38 | ||
| 83 | #define TPS65912_INT_STS 0x39 | ||
| 84 | #define TPS65912_INT_MSK 0x3A | ||
| 85 | #define TPS65912_INT_STS2 0x3B | ||
| 86 | #define TPS65912_INT_MSK2 0x3C | ||
| 87 | #define TPS65912_INT_STS3 0x3D | ||
| 88 | #define TPS65912_INT_MSK3 0x3E | ||
| 89 | #define TPS65912_INT_STS4 0x3F | ||
| 90 | #define TPS65912_INT_MSK4 0x40 | ||
| 91 | #define TPS65912_GPIO1 0x41 | ||
| 92 | #define TPS65912_GPIO2 0x42 | ||
| 93 | #define TPS65912_GPIO3 0x43 | ||
| 94 | #define TPS65912_GPIO4 0x44 | ||
| 95 | #define TPS65912_GPIO5 0x45 | ||
| 96 | #define TPS65912_VMON 0x46 | ||
| 97 | #define TPS65912_LEDA_CTRL1 0x47 | ||
| 98 | #define TPS65912_LEDA_CTRL2 0x48 | ||
| 99 | #define TPS65912_LEDA_CTRL3 0x49 | ||
| 100 | #define TPS65912_LEDA_CTRL4 0x4A | ||
| 101 | #define TPS65912_LEDA_CTRL5 0x4B | ||
| 102 | #define TPS65912_LEDA_CTRL6 0x4C | ||
| 103 | #define TPS65912_LEDA_CTRL7 0x4D | ||
| 104 | #define TPS65912_LEDA_CTRL8 0x4E | ||
| 105 | #define TPS65912_LEDB_CTRL1 0x4F | ||
| 106 | #define TPS65912_LEDB_CTRL2 0x50 | ||
| 107 | #define TPS65912_LEDB_CTRL3 0x51 | ||
| 108 | #define TPS65912_LEDB_CTRL4 0x52 | ||
| 109 | #define TPS65912_LEDB_CTRL5 0x53 | ||
| 110 | #define TPS65912_LEDB_CTRL6 0x54 | ||
| 111 | #define TPS65912_LEDB_CTRL7 0x55 | ||
| 112 | #define TPS65912_LEDB_CTRL8 0x56 | ||
| 113 | #define TPS65912_LEDC_CTRL1 0x57 | ||
| 114 | #define TPS65912_LEDC_CTRL2 0x58 | ||
| 115 | #define TPS65912_LEDC_CTRL3 0x59 | ||
| 116 | #define TPS65912_LEDC_CTRL4 0x5A | ||
| 117 | #define TPS65912_LEDC_CTRL5 0x5B | ||
| 118 | #define TPS65912_LEDC_CTRL6 0x5C | ||
| 119 | #define TPS65912_LEDC_CTRL7 0x5D | ||
| 120 | #define TPS65912_LEDC_CTRL8 0x5E | ||
| 121 | #define TPS65912_LED_RAMP_UP_TIME 0x5F | ||
| 122 | #define TPS65912_LED_RAMP_DOWN_TIME 0x60 | ||
| 123 | #define TPS65912_LED_SEQ_EN 0x61 | ||
| 124 | #define TPS65912_LOADSWITCH 0x62 | ||
| 125 | #define TPS65912_SPARE 0x63 | ||
| 126 | #define TPS65912_VERNUM 0x64 | ||
| 127 | #define TPS6591X_MAX_REGISTER 0x64 | ||
| 128 | |||
| 129 | /* IRQ Definitions */ | ||
| 130 | #define TPS65912_IRQ_PWRHOLD_F 0 | ||
| 131 | #define TPS65912_IRQ_VMON 1 | ||
| 132 | #define TPS65912_IRQ_PWRON 2 | ||
| 133 | #define TPS65912_IRQ_PWRON_LP 3 | ||
| 134 | #define TPS65912_IRQ_PWRHOLD_R 4 | ||
| 135 | #define TPS65912_IRQ_HOTDIE 5 | ||
| 136 | #define TPS65912_IRQ_GPIO1_R 6 | ||
| 137 | #define TPS65912_IRQ_GPIO1_F 7 | ||
| 138 | #define TPS65912_IRQ_GPIO2_R 8 | ||
| 139 | #define TPS65912_IRQ_GPIO2_F 9 | ||
| 140 | #define TPS65912_IRQ_GPIO3_R 10 | ||
| 141 | #define TPS65912_IRQ_GPIO3_F 11 | ||
| 142 | #define TPS65912_IRQ_GPIO4_R 12 | ||
| 143 | #define TPS65912_IRQ_GPIO4_F 13 | ||
| 144 | #define TPS65912_IRQ_GPIO5_R 14 | ||
| 145 | #define TPS65912_IRQ_GPIO5_F 15 | ||
| 146 | #define TPS65912_IRQ_PGOOD_DCDC1 16 | ||
| 147 | #define TPS65912_IRQ_PGOOD_DCDC2 17 | ||
| 148 | #define TPS65912_IRQ_PGOOD_DCDC3 18 | ||
| 149 | #define TPS65912_IRQ_PGOOD_DCDC4 19 | ||
| 150 | #define TPS65912_IRQ_PGOOD_LDO1 20 | ||
| 151 | #define TPS65912_IRQ_PGOOD_LDO2 21 | ||
| 152 | #define TPS65912_IRQ_PGOOD_LDO3 22 | ||
| 153 | #define TPS65912_IRQ_PGOOD_LDO4 23 | ||
| 154 | #define TPS65912_IRQ_PGOOD_LDO5 24 | ||
| 155 | #define TPS65912_IRQ_PGOOD_LDO6 25 | ||
| 156 | #define TPS65912_IRQ_PGOOD_LDO7 26 | ||
| 157 | #define TPS65912_IRQ_PGOOD_LD08 27 | ||
| 158 | #define TPS65912_IRQ_PGOOD_LDO9 28 | ||
| 159 | #define TPS65912_IRQ_PGOOD_LDO10 29 | ||
| 160 | |||
| 161 | #define TPS65912_NUM_IRQ 30 | ||
| 162 | |||
| 163 | /* GPIO 1 and 2 Register Definitions */ | ||
| 164 | #define GPIO_SLEEP_MASK 0x80 | ||
| 165 | #define GPIO_SLEEP_SHIFT 7 | ||
| 166 | #define GPIO_DEB_MASK 0x10 | ||
| 167 | #define GPIO_DEB_SHIFT 4 | ||
| 168 | #define GPIO_CFG_MASK 0x04 | ||
| 169 | #define GPIO_CFG_SHIFT 2 | ||
| 170 | #define GPIO_STS_MASK 0x02 | ||
| 171 | #define GPIO_STS_SHIFT 1 | ||
| 172 | #define GPIO_SET_MASK 0x01 | ||
| 173 | #define GPIO_SET_SHIFT 0 | ||
| 174 | |||
| 175 | /* GPIO 3 Register Definitions */ | ||
| 176 | #define GPIO3_SLEEP_MASK 0x80 | ||
| 177 | #define GPIO3_SLEEP_SHIFT 7 | ||
| 178 | #define GPIO3_SEL_MASK 0x40 | ||
| 179 | #define GPIO3_SEL_SHIFT 6 | ||
| 180 | #define GPIO3_ODEN_MASK 0x20 | ||
| 181 | #define GPIO3_ODEN_SHIFT 5 | ||
| 182 | #define GPIO3_DEB_MASK 0x10 | ||
| 183 | #define GPIO3_DEB_SHIFT 4 | ||
| 184 | #define GPIO3_PDEN_MASK 0x08 | ||
| 185 | #define GPIO3_PDEN_SHIFT 3 | ||
| 186 | #define GPIO3_CFG_MASK 0x04 | ||
| 187 | #define GPIO3_CFG_SHIFT 2 | ||
| 188 | #define GPIO3_STS_MASK 0x02 | ||
| 189 | #define GPIO3_STS_SHIFT 1 | ||
| 190 | #define GPIO3_SET_MASK 0x01 | ||
| 191 | #define GPIO3_SET_SHIFT 0 | ||
| 192 | |||
| 193 | /* GPIO 4 Register Definitions */ | ||
| 194 | #define GPIO4_SLEEP_MASK 0x80 | ||
| 195 | #define GPIO4_SLEEP_SHIFT 7 | ||
| 196 | #define GPIO4_SEL_MASK 0x40 | ||
| 197 | #define GPIO4_SEL_SHIFT 6 | ||
| 198 | #define GPIO4_ODEN_MASK 0x20 | ||
| 199 | #define GPIO4_ODEN_SHIFT 5 | ||
| 200 | #define GPIO4_DEB_MASK 0x10 | ||
| 201 | #define GPIO4_DEB_SHIFT 4 | ||
| 202 | #define GPIO4_PDEN_MASK 0x08 | ||
| 203 | #define GPIO4_PDEN_SHIFT 3 | ||
| 204 | #define GPIO4_CFG_MASK 0x04 | ||
| 205 | #define GPIO4_CFG_SHIFT 2 | ||
| 206 | #define GPIO4_STS_MASK 0x02 | ||
| 207 | #define GPIO4_STS_SHIFT 1 | ||
| 208 | #define GPIO4_SET_MASK 0x01 | ||
| 209 | #define GPIO4_SET_SHIFT 0 | ||
| 210 | |||
| 211 | /* Register THERM (0x80) register.RegisterDescription */ | ||
| 212 | #define THERM_THERM_HD_MASK 0x20 | ||
| 213 | #define THERM_THERM_HD_SHIFT 5 | ||
| 214 | #define THERM_THERM_TS_MASK 0x10 | ||
| 215 | #define THERM_THERM_TS_SHIFT 4 | ||
| 216 | #define THERM_THERM_HDSEL_MASK 0x0C | ||
| 217 | #define THERM_THERM_HDSEL_SHIFT 2 | ||
| 218 | #define THERM_RSVD1_MASK 0x02 | ||
| 219 | #define THERM_RSVD1_SHIFT 1 | ||
| 220 | #define THERM_THERM_STATE_MASK 0x01 | ||
| 221 | #define THERM_THERM_STATE_SHIFT 0 | ||
| 222 | |||
| 223 | /* Register DCDCCTRL1 register.RegisterDescription */ | ||
| 224 | #define DCDCCTRL_VCON_ENABLE_MASK 0x80 | ||
| 225 | #define DCDCCTRL_VCON_ENABLE_SHIFT 7 | ||
| 226 | #define DCDCCTRL_VCON_RANGE1_MASK 0x40 | ||
| 227 | #define DCDCCTRL_VCON_RANGE1_SHIFT 6 | ||
| 228 | #define DCDCCTRL_VCON_RANGE0_MASK 0x20 | ||
| 229 | #define DCDCCTRL_VCON_RANGE0_SHIFT 5 | ||
| 230 | #define DCDCCTRL_TSTEP2_MASK 0x10 | ||
| 231 | #define DCDCCTRL_TSTEP2_SHIFT 4 | ||
| 232 | #define DCDCCTRL_TSTEP1_MASK 0x08 | ||
| 233 | #define DCDCCTRL_TSTEP1_SHIFT 3 | ||
| 234 | #define DCDCCTRL_TSTEP0_MASK 0x04 | ||
| 235 | #define DCDCCTRL_TSTEP0_SHIFT 2 | ||
| 236 | #define DCDCCTRL_DCDC1_MODE_MASK 0x02 | ||
| 237 | #define DCDCCTRL_DCDC1_MODE_SHIFT 1 | ||
| 238 | |||
| 239 | /* Register DCDCCTRL2 and DCDCCTRL3 register.RegisterDescription */ | ||
| 240 | #define DCDCCTRL_TSTEP2_MASK 0x10 | ||
| 241 | #define DCDCCTRL_TSTEP2_SHIFT 4 | ||
| 242 | #define DCDCCTRL_TSTEP1_MASK 0x08 | ||
| 243 | #define DCDCCTRL_TSTEP1_SHIFT 3 | ||
| 244 | #define DCDCCTRL_TSTEP0_MASK 0x04 | ||
| 245 | #define DCDCCTRL_TSTEP0_SHIFT 2 | ||
| 246 | #define DCDCCTRL_DCDC_MODE_MASK 0x02 | ||
| 247 | #define DCDCCTRL_DCDC_MODE_SHIFT 1 | ||
| 248 | #define DCDCCTRL_RSVD0_MASK 0x01 | ||
| 249 | #define DCDCCTRL_RSVD0_SHIFT 0 | ||
| 250 | |||
| 251 | /* Register DCDCCTRL4 register.RegisterDescription */ | ||
| 252 | #define DCDCCTRL_RAMP_TIME_MASK 0x01 | ||
| 253 | #define DCDCCTRL_RAMP_TIME_SHIFT 0 | ||
| 254 | |||
| 255 | /* Register DCDCx_AVS */ | ||
| 256 | #define DCDC_AVS_ENABLE_MASK 0x80 | ||
| 257 | #define DCDC_AVS_ENABLE_SHIFT 7 | ||
| 258 | #define DCDC_AVS_ECO_MASK 0x40 | ||
| 259 | #define DCDC_AVS_ECO_SHIFT 6 | ||
| 260 | |||
| 261 | /* Register DCDCx_LIMIT */ | ||
| 262 | #define DCDC_LIMIT_RANGE_MASK 0xC0 | ||
| 263 | #define DCDC_LIMIT_RANGE_SHIFT 6 | ||
| 264 | #define DCDC_LIMIT_MAX_SEL_MASK 0x3F | ||
| 265 | #define DCDC_LIMIT_MAX_SEL_SHIFT 0 | ||
| 266 | |||
| 267 | /** | ||
| 268 | * struct tps65912_board | ||
| 269 | * Board platform dat may be used to initialize regulators. | ||
| 270 | */ | ||
| 271 | struct tps65912_board { | ||
| 272 | int is_dcdc1_avs; | ||
| 273 | int is_dcdc2_avs; | ||
| 274 | int is_dcdc3_avs; | ||
| 275 | int is_dcdc4_avs; | ||
| 276 | int irq; | ||
| 277 | int irq_base; | ||
| 278 | int gpio_base; | ||
| 279 | struct regulator_init_data *tps65912_pmic_init_data; | ||
| 280 | }; | ||
| 281 | |||
| 282 | /** | ||
| 283 | * struct tps65912 - tps65912 sub-driver chip access routines | ||
| 284 | */ | ||
| 285 | |||
| 286 | struct tps65912 { | ||
| 287 | struct device *dev; | ||
| 288 | /* for read/write acces */ | ||
| 289 | struct mutex io_mutex; | ||
| 290 | |||
| 291 | /* For device IO interfaces: I2C or SPI */ | ||
| 292 | void *control_data; | ||
| 293 | |||
| 294 | int (*read)(struct tps65912 *tps65912, u8 reg, int size, void *dest); | ||
| 295 | int (*write)(struct tps65912 *tps65912, u8 reg, int size, void *src); | ||
| 296 | |||
| 297 | /* Client devices */ | ||
| 298 | struct tps65912_pmic *pmic; | ||
| 299 | |||
| 300 | /* GPIO Handling */ | ||
| 301 | struct gpio_chip gpio; | ||
| 302 | |||
| 303 | /* IRQ Handling */ | ||
| 304 | struct mutex irq_lock; | ||
| 305 | int chip_irq; | ||
| 306 | int irq_base; | ||
| 307 | int irq_num; | ||
| 308 | u32 irq_mask; | ||
| 309 | }; | ||
| 310 | |||
| 311 | struct tps65912_platform_data { | ||
| 312 | int irq; | ||
| 313 | int irq_base; | ||
| 314 | }; | ||
| 315 | |||
| 316 | unsigned int tps_chip(void); | ||
| 317 | |||
| 318 | int tps65912_set_bits(struct tps65912 *tps65912, u8 reg, u8 mask); | ||
| 319 | int tps65912_clear_bits(struct tps65912 *tps65912, u8 reg, u8 mask); | ||
| 320 | int tps65912_reg_read(struct tps65912 *tps65912, u8 reg); | ||
| 321 | int tps65912_reg_write(struct tps65912 *tps65912, u8 reg, u8 val); | ||
| 322 | int tps65912_device_init(struct tps65912 *tps65912); | ||
| 323 | void tps65912_device_exit(struct tps65912 *tps65912); | ||
| 324 | int tps65912_irq_init(struct tps65912 *tps65912, int irq, | ||
| 325 | struct tps65912_platform_data *pdata); | ||
| 326 | |||
| 327 | #endif /* __LINUX_MFD_TPS65912_H */ | ||
diff --git a/include/linux/mfd/wm831x/core.h b/include/linux/mfd/wm831x/core.h index 0d515ee1c247..8dda8ded5cda 100644 --- a/include/linux/mfd/wm831x/core.h +++ b/include/linux/mfd/wm831x/core.h | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | 17 | ||
| 18 | #include <linux/completion.h> | 18 | #include <linux/completion.h> |
| 19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
| 20 | #include <linux/list.h> | ||
| 20 | 21 | ||
| 21 | /* | 22 | /* |
| 22 | * Register values. | 23 | * Register values. |
| @@ -234,9 +235,111 @@ | |||
| 234 | #define WM831X_ON_PIN_TO_SHIFT 0 /* ON_PIN_TO - [1:0] */ | 235 | #define WM831X_ON_PIN_TO_SHIFT 0 /* ON_PIN_TO - [1:0] */ |
| 235 | #define WM831X_ON_PIN_TO_WIDTH 2 /* ON_PIN_TO - [1:0] */ | 236 | #define WM831X_ON_PIN_TO_WIDTH 2 /* ON_PIN_TO - [1:0] */ |
| 236 | 237 | ||
| 238 | /* | ||
| 239 | * R16528 (0x4090) - Clock Control 1 | ||
| 240 | */ | ||
| 241 | #define WM831X_CLKOUT_ENA 0x8000 /* CLKOUT_ENA */ | ||
| 242 | #define WM831X_CLKOUT_ENA_MASK 0x8000 /* CLKOUT_ENA */ | ||
| 243 | #define WM831X_CLKOUT_ENA_SHIFT 15 /* CLKOUT_ENA */ | ||
| 244 | #define WM831X_CLKOUT_ENA_WIDTH 1 /* CLKOUT_ENA */ | ||
| 245 | #define WM831X_CLKOUT_OD 0x2000 /* CLKOUT_OD */ | ||
| 246 | #define WM831X_CLKOUT_OD_MASK 0x2000 /* CLKOUT_OD */ | ||
| 247 | #define WM831X_CLKOUT_OD_SHIFT 13 /* CLKOUT_OD */ | ||
| 248 | #define WM831X_CLKOUT_OD_WIDTH 1 /* CLKOUT_OD */ | ||
| 249 | #define WM831X_CLKOUT_SLOT_MASK 0x0700 /* CLKOUT_SLOT - [10:8] */ | ||
| 250 | #define WM831X_CLKOUT_SLOT_SHIFT 8 /* CLKOUT_SLOT - [10:8] */ | ||
| 251 | #define WM831X_CLKOUT_SLOT_WIDTH 3 /* CLKOUT_SLOT - [10:8] */ | ||
| 252 | #define WM831X_CLKOUT_SLPSLOT_MASK 0x0070 /* CLKOUT_SLPSLOT - [6:4] */ | ||
| 253 | #define WM831X_CLKOUT_SLPSLOT_SHIFT 4 /* CLKOUT_SLPSLOT - [6:4] */ | ||
| 254 | #define WM831X_CLKOUT_SLPSLOT_WIDTH 3 /* CLKOUT_SLPSLOT - [6:4] */ | ||
| 255 | #define WM831X_CLKOUT_SRC 0x0001 /* CLKOUT_SRC */ | ||
| 256 | #define WM831X_CLKOUT_SRC_MASK 0x0001 /* CLKOUT_SRC */ | ||
| 257 | #define WM831X_CLKOUT_SRC_SHIFT 0 /* CLKOUT_SRC */ | ||
| 258 | #define WM831X_CLKOUT_SRC_WIDTH 1 /* CLKOUT_SRC */ | ||
| 259 | |||
| 260 | /* | ||
| 261 | * R16529 (0x4091) - Clock Control 2 | ||
| 262 | */ | ||
| 263 | #define WM831X_XTAL_INH 0x8000 /* XTAL_INH */ | ||
| 264 | #define WM831X_XTAL_INH_MASK 0x8000 /* XTAL_INH */ | ||
| 265 | #define WM831X_XTAL_INH_SHIFT 15 /* XTAL_INH */ | ||
| 266 | #define WM831X_XTAL_INH_WIDTH 1 /* XTAL_INH */ | ||
| 267 | #define WM831X_XTAL_ENA 0x2000 /* XTAL_ENA */ | ||
| 268 | #define WM831X_XTAL_ENA_MASK 0x2000 /* XTAL_ENA */ | ||
| 269 | #define WM831X_XTAL_ENA_SHIFT 13 /* XTAL_ENA */ | ||
| 270 | #define WM831X_XTAL_ENA_WIDTH 1 /* XTAL_ENA */ | ||
| 271 | #define WM831X_XTAL_BKUPENA 0x1000 /* XTAL_BKUPENA */ | ||
| 272 | #define WM831X_XTAL_BKUPENA_MASK 0x1000 /* XTAL_BKUPENA */ | ||
| 273 | #define WM831X_XTAL_BKUPENA_SHIFT 12 /* XTAL_BKUPENA */ | ||
| 274 | #define WM831X_XTAL_BKUPENA_WIDTH 1 /* XTAL_BKUPENA */ | ||
| 275 | #define WM831X_FLL_AUTO 0x0080 /* FLL_AUTO */ | ||
| 276 | #define WM831X_FLL_AUTO_MASK 0x0080 /* FLL_AUTO */ | ||
| 277 | #define WM831X_FLL_AUTO_SHIFT 7 /* FLL_AUTO */ | ||
| 278 | #define WM831X_FLL_AUTO_WIDTH 1 /* FLL_AUTO */ | ||
| 279 | #define WM831X_FLL_AUTO_FREQ_MASK 0x0007 /* FLL_AUTO_FREQ - [2:0] */ | ||
| 280 | #define WM831X_FLL_AUTO_FREQ_SHIFT 0 /* FLL_AUTO_FREQ - [2:0] */ | ||
| 281 | #define WM831X_FLL_AUTO_FREQ_WIDTH 3 /* FLL_AUTO_FREQ - [2:0] */ | ||
| 282 | |||
| 283 | /* | ||
| 284 | * R16530 (0x4092) - FLL Control 1 | ||
| 285 | */ | ||
| 286 | #define WM831X_FLL_FRAC 0x0004 /* FLL_FRAC */ | ||
| 287 | #define WM831X_FLL_FRAC_MASK 0x0004 /* FLL_FRAC */ | ||
| 288 | #define WM831X_FLL_FRAC_SHIFT 2 /* FLL_FRAC */ | ||
| 289 | #define WM831X_FLL_FRAC_WIDTH 1 /* FLL_FRAC */ | ||
| 290 | #define WM831X_FLL_OSC_ENA 0x0002 /* FLL_OSC_ENA */ | ||
| 291 | #define WM831X_FLL_OSC_ENA_MASK 0x0002 /* FLL_OSC_ENA */ | ||
| 292 | #define WM831X_FLL_OSC_ENA_SHIFT 1 /* FLL_OSC_ENA */ | ||
| 293 | #define WM831X_FLL_OSC_ENA_WIDTH 1 /* FLL_OSC_ENA */ | ||
| 294 | #define WM831X_FLL_ENA 0x0001 /* FLL_ENA */ | ||
| 295 | #define WM831X_FLL_ENA_MASK 0x0001 /* FLL_ENA */ | ||
| 296 | #define WM831X_FLL_ENA_SHIFT 0 /* FLL_ENA */ | ||
| 297 | #define WM831X_FLL_ENA_WIDTH 1 /* FLL_ENA */ | ||
| 298 | |||
| 299 | /* | ||
| 300 | * R16531 (0x4093) - FLL Control 2 | ||
| 301 | */ | ||
| 302 | #define WM831X_FLL_OUTDIV_MASK 0x3F00 /* FLL_OUTDIV - [13:8] */ | ||
| 303 | #define WM831X_FLL_OUTDIV_SHIFT 8 /* FLL_OUTDIV - [13:8] */ | ||
| 304 | #define WM831X_FLL_OUTDIV_WIDTH 6 /* FLL_OUTDIV - [13:8] */ | ||
| 305 | #define WM831X_FLL_CTRL_RATE_MASK 0x0070 /* FLL_CTRL_RATE - [6:4] */ | ||
| 306 | #define WM831X_FLL_CTRL_RATE_SHIFT 4 /* FLL_CTRL_RATE - [6:4] */ | ||
| 307 | #define WM831X_FLL_CTRL_RATE_WIDTH 3 /* FLL_CTRL_RATE - [6:4] */ | ||
| 308 | #define WM831X_FLL_FRATIO_MASK 0x0007 /* FLL_FRATIO - [2:0] */ | ||
| 309 | #define WM831X_FLL_FRATIO_SHIFT 0 /* FLL_FRATIO - [2:0] */ | ||
| 310 | #define WM831X_FLL_FRATIO_WIDTH 3 /* FLL_FRATIO - [2:0] */ | ||
| 311 | |||
| 312 | /* | ||
| 313 | * R16532 (0x4094) - FLL Control 3 | ||
| 314 | */ | ||
| 315 | #define WM831X_FLL_K_MASK 0xFFFF /* FLL_K - [15:0] */ | ||
| 316 | #define WM831X_FLL_K_SHIFT 0 /* FLL_K - [15:0] */ | ||
| 317 | #define WM831X_FLL_K_WIDTH 16 /* FLL_K - [15:0] */ | ||
| 318 | |||
| 319 | /* | ||
| 320 | * R16533 (0x4095) - FLL Control 4 | ||
| 321 | */ | ||
| 322 | #define WM831X_FLL_N_MASK 0x7FE0 /* FLL_N - [14:5] */ | ||
| 323 | #define WM831X_FLL_N_SHIFT 5 /* FLL_N - [14:5] */ | ||
| 324 | #define WM831X_FLL_N_WIDTH 10 /* FLL_N - [14:5] */ | ||
| 325 | #define WM831X_FLL_GAIN_MASK 0x000F /* FLL_GAIN - [3:0] */ | ||
| 326 | #define WM831X_FLL_GAIN_SHIFT 0 /* FLL_GAIN - [3:0] */ | ||
| 327 | #define WM831X_FLL_GAIN_WIDTH 4 /* FLL_GAIN - [3:0] */ | ||
| 328 | |||
| 329 | /* | ||
| 330 | * R16534 (0x4096) - FLL Control 5 | ||
| 331 | */ | ||
| 332 | #define WM831X_FLL_CLK_REF_DIV_MASK 0x0018 /* FLL_CLK_REF_DIV - [4:3] */ | ||
| 333 | #define WM831X_FLL_CLK_REF_DIV_SHIFT 3 /* FLL_CLK_REF_DIV - [4:3] */ | ||
| 334 | #define WM831X_FLL_CLK_REF_DIV_WIDTH 2 /* FLL_CLK_REF_DIV - [4:3] */ | ||
| 335 | #define WM831X_FLL_CLK_SRC_MASK 0x0003 /* FLL_CLK_SRC - [1:0] */ | ||
| 336 | #define WM831X_FLL_CLK_SRC_SHIFT 0 /* FLL_CLK_SRC - [1:0] */ | ||
| 337 | #define WM831X_FLL_CLK_SRC_WIDTH 2 /* FLL_CLK_SRC - [1:0] */ | ||
| 338 | |||
| 237 | struct regulator_dev; | 339 | struct regulator_dev; |
| 238 | 340 | ||
| 239 | #define WM831X_NUM_IRQ_REGS 5 | 341 | #define WM831X_NUM_IRQ_REGS 5 |
| 342 | #define WM831X_NUM_GPIO_REGS 16 | ||
| 240 | 343 | ||
| 241 | enum wm831x_parent { | 344 | enum wm831x_parent { |
| 242 | WM8310 = 0x8310, | 345 | WM8310 = 0x8310, |
| @@ -248,6 +351,12 @@ enum wm831x_parent { | |||
| 248 | WM8326 = 0x8326, | 351 | WM8326 = 0x8326, |
| 249 | }; | 352 | }; |
| 250 | 353 | ||
| 354 | struct wm831x; | ||
| 355 | enum wm831x_auxadc; | ||
| 356 | |||
| 357 | typedef int (*wm831x_auxadc_read_fn)(struct wm831x *wm831x, | ||
| 358 | enum wm831x_auxadc input); | ||
| 359 | |||
| 251 | struct wm831x { | 360 | struct wm831x { |
| 252 | struct mutex io_lock; | 361 | struct mutex io_lock; |
| 253 | 362 | ||
| @@ -261,7 +370,7 @@ struct wm831x { | |||
| 261 | 370 | ||
| 262 | int irq; /* Our chip IRQ */ | 371 | int irq; /* Our chip IRQ */ |
| 263 | struct mutex irq_lock; | 372 | struct mutex irq_lock; |
| 264 | unsigned int irq_base; | 373 | int irq_base; |
| 265 | int irq_masks_cur[WM831X_NUM_IRQ_REGS]; /* Currently active value */ | 374 | int irq_masks_cur[WM831X_NUM_IRQ_REGS]; /* Currently active value */ |
| 266 | int irq_masks_cache[WM831X_NUM_IRQ_REGS]; /* Cached hardware value */ | 375 | int irq_masks_cache[WM831X_NUM_IRQ_REGS]; /* Cached hardware value */ |
| 267 | 376 | ||
| @@ -272,8 +381,13 @@ struct wm831x { | |||
| 272 | 381 | ||
| 273 | int num_gpio; | 382 | int num_gpio; |
| 274 | 383 | ||
| 384 | /* Used by the interrupt controller code to post writes */ | ||
| 385 | int gpio_update[WM831X_NUM_GPIO_REGS]; | ||
| 386 | |||
| 275 | struct mutex auxadc_lock; | 387 | struct mutex auxadc_lock; |
| 276 | struct completion auxadc_done; | 388 | struct list_head auxadc_pending; |
| 389 | u16 auxadc_active; | ||
| 390 | wm831x_auxadc_read_fn auxadc_read; | ||
| 277 | 391 | ||
| 278 | /* The WM831x has a security key blocking access to certain | 392 | /* The WM831x has a security key blocking access to certain |
| 279 | * registers. The mutex is taken by the accessors for locking | 393 | * registers. The mutex is taken by the accessors for locking |
| @@ -300,5 +414,6 @@ void wm831x_device_exit(struct wm831x *wm831x); | |||
| 300 | int wm831x_device_suspend(struct wm831x *wm831x); | 414 | int wm831x_device_suspend(struct wm831x *wm831x); |
| 301 | int wm831x_irq_init(struct wm831x *wm831x, int irq); | 415 | int wm831x_irq_init(struct wm831x *wm831x, int irq); |
| 302 | void wm831x_irq_exit(struct wm831x *wm831x); | 416 | void wm831x_irq_exit(struct wm831x *wm831x); |
| 417 | void wm831x_auxadc_init(struct wm831x *wm831x); | ||
| 303 | 418 | ||
| 304 | #endif | 419 | #endif |
diff --git a/include/linux/mfd/wm831x/pdata.h b/include/linux/mfd/wm831x/pdata.h index ff42d700293f..0ba24599fe51 100644 --- a/include/linux/mfd/wm831x/pdata.h +++ b/include/linux/mfd/wm831x/pdata.h | |||
| @@ -120,6 +120,9 @@ struct wm831x_pdata { | |||
| 120 | /** Put the /IRQ line into CMOS mode */ | 120 | /** Put the /IRQ line into CMOS mode */ |
| 121 | bool irq_cmos; | 121 | bool irq_cmos; |
| 122 | 122 | ||
| 123 | /** Disable the touchscreen */ | ||
| 124 | bool disable_touch; | ||
| 125 | |||
| 123 | int irq_base; | 126 | int irq_base; |
| 124 | int gpio_base; | 127 | int gpio_base; |
| 125 | int gpio_defaults[WM831X_GPIO_NUM]; | 128 | int gpio_defaults[WM831X_GPIO_NUM]; |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 3172a1c0f08e..f2690cf49827 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -1600,6 +1600,7 @@ enum mf_flags { | |||
| 1600 | }; | 1600 | }; |
| 1601 | extern void memory_failure(unsigned long pfn, int trapno); | 1601 | extern void memory_failure(unsigned long pfn, int trapno); |
| 1602 | extern int __memory_failure(unsigned long pfn, int trapno, int flags); | 1602 | extern int __memory_failure(unsigned long pfn, int trapno, int flags); |
| 1603 | extern void memory_failure_queue(unsigned long pfn, int trapno, int flags); | ||
| 1603 | extern int unpoison_memory(unsigned long pfn); | 1604 | extern int unpoison_memory(unsigned long pfn); |
| 1604 | extern int sysctl_memory_failure_early_kill; | 1605 | extern int sysctl_memory_failure_early_kill; |
| 1605 | extern int sysctl_memory_failure_recovery; | 1606 | extern int sysctl_memory_failure_recovery; |
diff --git a/include/linux/nfs.h b/include/linux/nfs.h index f387919bbc59..8c6ee44914cb 100644 --- a/include/linux/nfs.h +++ b/include/linux/nfs.h | |||
| @@ -29,6 +29,8 @@ | |||
| 29 | #define NFS_MNT_VERSION 1 | 29 | #define NFS_MNT_VERSION 1 |
| 30 | #define NFS_MNT3_VERSION 3 | 30 | #define NFS_MNT3_VERSION 3 |
| 31 | 31 | ||
| 32 | #define NFS_PIPE_DIRNAME "/nfs" | ||
| 33 | |||
| 32 | /* | 34 | /* |
| 33 | * NFS stats. The good thing with these values is that NFSv3 errors are | 35 | * NFS stats. The good thing with these values is that NFSv3 errors are |
| 34 | * a superset of NFSv2 errors (with the exception of NFSERR_WFLUSH which | 36 | * a superset of NFSv2 errors (with the exception of NFSERR_WFLUSH which |
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h index a3c4bc800dce..76f99e8714f3 100644 --- a/include/linux/nfs4.h +++ b/include/linux/nfs4.h | |||
| @@ -566,6 +566,7 @@ enum { | |||
| 566 | NFSPROC4_CLNT_SECINFO_NO_NAME, | 566 | NFSPROC4_CLNT_SECINFO_NO_NAME, |
| 567 | NFSPROC4_CLNT_TEST_STATEID, | 567 | NFSPROC4_CLNT_TEST_STATEID, |
| 568 | NFSPROC4_CLNT_FREE_STATEID, | 568 | NFSPROC4_CLNT_FREE_STATEID, |
| 569 | NFSPROC4_CLNT_GETDEVICELIST, | ||
| 569 | }; | 570 | }; |
| 570 | 571 | ||
| 571 | /* nfs41 types */ | 572 | /* nfs41 types */ |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 8b579beb6358..eaac770f886e 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
| @@ -99,9 +99,10 @@ struct nfs_open_context { | |||
| 99 | 99 | ||
| 100 | struct nfs_open_dir_context { | 100 | struct nfs_open_dir_context { |
| 101 | struct rpc_cred *cred; | 101 | struct rpc_cred *cred; |
| 102 | unsigned long attr_gencount; | ||
| 102 | __u64 dir_cookie; | 103 | __u64 dir_cookie; |
| 103 | __u64 dup_cookie; | 104 | __u64 dup_cookie; |
| 104 | int duped; | 105 | signed char duped; |
| 105 | }; | 106 | }; |
| 106 | 107 | ||
| 107 | /* | 108 | /* |
| @@ -568,12 +569,12 @@ extern struct posix_acl *nfs3_proc_getacl(struct inode *inode, int type); | |||
| 568 | extern int nfs3_proc_setacl(struct inode *inode, int type, | 569 | extern int nfs3_proc_setacl(struct inode *inode, int type, |
| 569 | struct posix_acl *acl); | 570 | struct posix_acl *acl); |
| 570 | extern int nfs3_proc_set_default_acl(struct inode *dir, struct inode *inode, | 571 | extern int nfs3_proc_set_default_acl(struct inode *dir, struct inode *inode, |
| 571 | mode_t mode); | 572 | umode_t mode); |
| 572 | extern void nfs3_forget_cached_acls(struct inode *inode); | 573 | extern void nfs3_forget_cached_acls(struct inode *inode); |
| 573 | #else | 574 | #else |
| 574 | static inline int nfs3_proc_set_default_acl(struct inode *dir, | 575 | static inline int nfs3_proc_set_default_acl(struct inode *dir, |
| 575 | struct inode *inode, | 576 | struct inode *inode, |
| 576 | mode_t mode) | 577 | umode_t mode) |
| 577 | { | 578 | { |
| 578 | return 0; | 579 | return 0; |
| 579 | } | 580 | } |
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 50a661f8b45a..b5479df8378d 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h | |||
| @@ -131,8 +131,9 @@ struct nfs_server { | |||
| 131 | struct fscache_cookie *fscache; /* superblock cookie */ | 131 | struct fscache_cookie *fscache; /* superblock cookie */ |
| 132 | #endif | 132 | #endif |
| 133 | 133 | ||
| 134 | u32 pnfs_blksize; /* layout_blksize attr */ | ||
| 134 | #ifdef CONFIG_NFS_V4 | 135 | #ifdef CONFIG_NFS_V4 |
| 135 | u32 attr_bitmask[2];/* V4 bitmask representing the set | 136 | u32 attr_bitmask[3];/* V4 bitmask representing the set |
| 136 | of attributes supported on this | 137 | of attributes supported on this |
| 137 | filesystem */ | 138 | filesystem */ |
| 138 | u32 cache_consistency_bitmask[2]; | 139 | u32 cache_consistency_bitmask[2]; |
| @@ -145,6 +146,7 @@ struct nfs_server { | |||
| 145 | filesystem */ | 146 | filesystem */ |
| 146 | struct pnfs_layoutdriver_type *pnfs_curr_ld; /* Active layout driver */ | 147 | struct pnfs_layoutdriver_type *pnfs_curr_ld; /* Active layout driver */ |
| 147 | struct rpc_wait_queue roc_rpcwaitq; | 148 | struct rpc_wait_queue roc_rpcwaitq; |
| 149 | void *pnfs_ld_data; /* per mount point data */ | ||
| 148 | 150 | ||
| 149 | /* the following fields are protected by nfs_client->cl_lock */ | 151 | /* the following fields are protected by nfs_client->cl_lock */ |
| 150 | struct rb_root state_owners; | 152 | struct rb_root state_owners; |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 5b115956abac..abd615d74a29 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
| @@ -122,6 +122,7 @@ struct nfs_fsinfo { | |||
| 122 | struct timespec time_delta; /* server time granularity */ | 122 | struct timespec time_delta; /* server time granularity */ |
| 123 | __u32 lease_time; /* in seconds */ | 123 | __u32 lease_time; /* in seconds */ |
| 124 | __u32 layouttype; /* supported pnfs layout driver */ | 124 | __u32 layouttype; /* supported pnfs layout driver */ |
| 125 | __u32 blksize; /* preferred pnfs io block size */ | ||
| 125 | }; | 126 | }; |
| 126 | 127 | ||
| 127 | struct nfs_fsstat { | 128 | struct nfs_fsstat { |
| @@ -235,6 +236,17 @@ struct nfs4_layoutget { | |||
| 235 | gfp_t gfp_flags; | 236 | gfp_t gfp_flags; |
| 236 | }; | 237 | }; |
| 237 | 238 | ||
| 239 | struct nfs4_getdevicelist_args { | ||
| 240 | const struct nfs_fh *fh; | ||
| 241 | u32 layoutclass; | ||
| 242 | struct nfs4_sequence_args seq_args; | ||
| 243 | }; | ||
| 244 | |||
| 245 | struct nfs4_getdevicelist_res { | ||
| 246 | struct pnfs_devicelist *devlist; | ||
| 247 | struct nfs4_sequence_res seq_res; | ||
| 248 | }; | ||
| 249 | |||
| 238 | struct nfs4_getdeviceinfo_args { | 250 | struct nfs4_getdeviceinfo_args { |
| 239 | struct pnfs_device *pdev; | 251 | struct pnfs_device *pdev; |
| 240 | struct nfs4_sequence_args seq_args; | 252 | struct nfs4_sequence_args seq_args; |
| @@ -257,12 +269,13 @@ struct nfs4_layoutcommit_res { | |||
| 257 | struct nfs_fattr *fattr; | 269 | struct nfs_fattr *fattr; |
| 258 | const struct nfs_server *server; | 270 | const struct nfs_server *server; |
| 259 | struct nfs4_sequence_res seq_res; | 271 | struct nfs4_sequence_res seq_res; |
| 272 | int status; | ||
| 260 | }; | 273 | }; |
| 261 | 274 | ||
| 262 | struct nfs4_layoutcommit_data { | 275 | struct nfs4_layoutcommit_data { |
| 263 | struct rpc_task task; | 276 | struct rpc_task task; |
| 264 | struct nfs_fattr fattr; | 277 | struct nfs_fattr fattr; |
| 265 | struct pnfs_layout_segment *lseg; | 278 | struct list_head lseg_list; |
| 266 | struct rpc_cred *cred; | 279 | struct rpc_cred *cred; |
| 267 | struct nfs4_layoutcommit_args args; | 280 | struct nfs4_layoutcommit_args args; |
| 268 | struct nfs4_layoutcommit_res res; | 281 | struct nfs4_layoutcommit_res res; |
| @@ -760,6 +773,11 @@ struct nfs3_getaclres { | |||
| 760 | struct posix_acl * acl_default; | 773 | struct posix_acl * acl_default; |
| 761 | }; | 774 | }; |
| 762 | 775 | ||
| 776 | struct nfs4_string { | ||
| 777 | unsigned int len; | ||
| 778 | char *data; | ||
| 779 | }; | ||
| 780 | |||
| 763 | #ifdef CONFIG_NFS_V4 | 781 | #ifdef CONFIG_NFS_V4 |
| 764 | 782 | ||
| 765 | typedef u64 clientid4; | 783 | typedef u64 clientid4; |
| @@ -943,18 +961,13 @@ struct nfs4_server_caps_arg { | |||
| 943 | }; | 961 | }; |
| 944 | 962 | ||
| 945 | struct nfs4_server_caps_res { | 963 | struct nfs4_server_caps_res { |
| 946 | u32 attr_bitmask[2]; | 964 | u32 attr_bitmask[3]; |
| 947 | u32 acl_bitmask; | 965 | u32 acl_bitmask; |
| 948 | u32 has_links; | 966 | u32 has_links; |
| 949 | u32 has_symlinks; | 967 | u32 has_symlinks; |
| 950 | struct nfs4_sequence_res seq_res; | 968 | struct nfs4_sequence_res seq_res; |
| 951 | }; | 969 | }; |
| 952 | 970 | ||
| 953 | struct nfs4_string { | ||
| 954 | unsigned int len; | ||
| 955 | char *data; | ||
| 956 | }; | ||
| 957 | |||
| 958 | #define NFS4_PATHNAME_MAXCOMPONENTS 512 | 971 | #define NFS4_PATHNAME_MAXCOMPONENTS 512 |
| 959 | struct nfs4_pathname { | 972 | struct nfs4_pathname { |
| 960 | unsigned int ncomponents; | 973 | unsigned int ncomponents; |
diff --git a/include/linux/of.h b/include/linux/of.h index bd716f8908de..0085bb01c041 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
| @@ -196,12 +196,13 @@ extern struct property *of_find_property(const struct device_node *np, | |||
| 196 | const char *name, | 196 | const char *name, |
| 197 | int *lenp); | 197 | int *lenp); |
| 198 | extern int of_property_read_u32_array(const struct device_node *np, | 198 | extern int of_property_read_u32_array(const struct device_node *np, |
| 199 | char *propname, | 199 | const char *propname, |
| 200 | u32 *out_values, | 200 | u32 *out_values, |
| 201 | size_t sz); | 201 | size_t sz); |
| 202 | 202 | ||
| 203 | extern int of_property_read_string(struct device_node *np, char *propname, | 203 | extern int of_property_read_string(struct device_node *np, |
| 204 | const char **out_string); | 204 | const char *propname, |
| 205 | const char **out_string); | ||
| 205 | extern int of_device_is_compatible(const struct device_node *device, | 206 | extern int of_device_is_compatible(const struct device_node *device, |
| 206 | const char *); | 207 | const char *); |
| 207 | extern int of_device_is_available(const struct device_node *device); | 208 | extern int of_device_is_available(const struct device_node *device); |
| @@ -242,13 +243,15 @@ static inline bool of_have_populated_dt(void) | |||
| 242 | } | 243 | } |
| 243 | 244 | ||
| 244 | static inline int of_property_read_u32_array(const struct device_node *np, | 245 | static inline int of_property_read_u32_array(const struct device_node *np, |
| 245 | char *propname, u32 *out_values, size_t sz) | 246 | const char *propname, |
| 247 | u32 *out_values, size_t sz) | ||
| 246 | { | 248 | { |
| 247 | return -ENOSYS; | 249 | return -ENOSYS; |
| 248 | } | 250 | } |
| 249 | 251 | ||
| 250 | static inline int of_property_read_string(struct device_node *np, | 252 | static inline int of_property_read_string(struct device_node *np, |
| 251 | char *propname, const char **out_string) | 253 | const char *propname, |
| 254 | const char **out_string) | ||
| 252 | { | 255 | { |
| 253 | return -ENOSYS; | 256 | return -ENOSYS; |
| 254 | } | 257 | } |
| @@ -256,7 +259,7 @@ static inline int of_property_read_string(struct device_node *np, | |||
| 256 | #endif /* CONFIG_OF */ | 259 | #endif /* CONFIG_OF */ |
| 257 | 260 | ||
| 258 | static inline int of_property_read_u32(const struct device_node *np, | 261 | static inline int of_property_read_u32(const struct device_node *np, |
| 259 | char *propname, | 262 | const char *propname, |
| 260 | u32 *out_value) | 263 | u32 *out_value) |
| 261 | { | 264 | { |
| 262 | return of_property_read_u32_array(np, propname, out_value, 1); | 265 | return of_property_read_u32_array(np, propname, out_value, 1); |
diff --git a/include/linux/of_gpio.h b/include/linux/of_gpio.h index aec8025c786a..52280a2b5e63 100644 --- a/include/linux/of_gpio.h +++ b/include/linux/of_gpio.h | |||
| @@ -57,6 +57,8 @@ extern int of_mm_gpiochip_add(struct device_node *np, | |||
| 57 | extern void of_gpiochip_add(struct gpio_chip *gc); | 57 | extern void of_gpiochip_add(struct gpio_chip *gc); |
| 58 | extern void of_gpiochip_remove(struct gpio_chip *gc); | 58 | extern void of_gpiochip_remove(struct gpio_chip *gc); |
| 59 | extern struct gpio_chip *of_node_to_gpiochip(struct device_node *np); | 59 | extern struct gpio_chip *of_node_to_gpiochip(struct device_node *np); |
| 60 | extern int of_gpio_simple_xlate(struct gpio_chip *gc, struct device_node *np, | ||
| 61 | const void *gpio_spec, u32 *flags); | ||
| 60 | 62 | ||
| 61 | #else /* CONFIG_OF_GPIO */ | 63 | #else /* CONFIG_OF_GPIO */ |
| 62 | 64 | ||
| @@ -72,6 +74,13 @@ static inline unsigned int of_gpio_count(struct device_node *np) | |||
| 72 | return 0; | 74 | return 0; |
| 73 | } | 75 | } |
| 74 | 76 | ||
| 77 | static inline int of_gpio_simple_xlate(struct gpio_chip *gc, | ||
| 78 | struct device_node *np, | ||
| 79 | const void *gpio_spec, u32 *flags) | ||
| 80 | { | ||
| 81 | return -ENOSYS; | ||
| 82 | } | ||
| 83 | |||
| 75 | static inline void of_gpiochip_add(struct gpio_chip *gc) { } | 84 | static inline void of_gpiochip_add(struct gpio_chip *gc) { } |
| 76 | static inline void of_gpiochip_remove(struct gpio_chip *gc) { } | 85 | static inline void of_gpiochip_remove(struct gpio_chip *gc) { } |
| 77 | 86 | ||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index b00c4ec5056e..ae96bbe54518 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -2709,6 +2709,16 @@ | |||
| 2709 | #define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60 | 2709 | #define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60 |
| 2710 | #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MIN 0x3b00 | 2710 | #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MIN 0x3b00 |
| 2711 | #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MAX 0x3b1f | 2711 | #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MAX 0x3b1f |
| 2712 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB0 0x3c20 | ||
| 2713 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB1 0x3c21 | ||
| 2714 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB2 0x3c22 | ||
| 2715 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB3 0x3c23 | ||
| 2716 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB4 0x3c24 | ||
| 2717 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB5 0x3c25 | ||
| 2718 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB6 0x3c26 | ||
| 2719 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB7 0x3c27 | ||
| 2720 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB8 0x3c2e | ||
| 2721 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB9 0x3c2f | ||
| 2712 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f | 2722 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f |
| 2713 | #define PCI_DEVICE_ID_INTEL_5100_16 0x65f0 | 2723 | #define PCI_DEVICE_ID_INTEL_5100_16 0x65f0 |
| 2714 | #define PCI_DEVICE_ID_INTEL_5100_21 0x65f5 | 2724 | #define PCI_DEVICE_ID_INTEL_5100_21 0x65f5 |
diff --git a/include/linux/posix_acl.h b/include/linux/posix_acl.h index 9a53b99818e2..b7681102a4b9 100644 --- a/include/linux/posix_acl.h +++ b/include/linux/posix_acl.h | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #define __LINUX_POSIX_ACL_H | 9 | #define __LINUX_POSIX_ACL_H |
| 10 | 10 | ||
| 11 | #include <linux/slab.h> | 11 | #include <linux/slab.h> |
| 12 | #include <linux/rcupdate.h> | ||
| 12 | 13 | ||
| 13 | #define ACL_UNDEFINED_ID (-1) | 14 | #define ACL_UNDEFINED_ID (-1) |
| 14 | 15 | ||
| @@ -38,7 +39,10 @@ struct posix_acl_entry { | |||
| 38 | }; | 39 | }; |
| 39 | 40 | ||
| 40 | struct posix_acl { | 41 | struct posix_acl { |
| 41 | atomic_t a_refcount; | 42 | union { |
| 43 | atomic_t a_refcount; | ||
| 44 | struct rcu_head a_rcu; | ||
| 45 | }; | ||
| 42 | unsigned int a_count; | 46 | unsigned int a_count; |
| 43 | struct posix_acl_entry a_entries[0]; | 47 | struct posix_acl_entry a_entries[0]; |
| 44 | }; | 48 | }; |
| @@ -65,7 +69,7 @@ static inline void | |||
| 65 | posix_acl_release(struct posix_acl *acl) | 69 | posix_acl_release(struct posix_acl *acl) |
| 66 | { | 70 | { |
| 67 | if (acl && atomic_dec_and_test(&acl->a_refcount)) | 71 | if (acl && atomic_dec_and_test(&acl->a_refcount)) |
| 68 | kfree(acl); | 72 | kfree_rcu(acl, a_rcu); |
| 69 | } | 73 | } |
| 70 | 74 | ||
| 71 | 75 | ||
| @@ -75,29 +79,31 @@ extern void posix_acl_init(struct posix_acl *, int); | |||
| 75 | extern struct posix_acl *posix_acl_alloc(int, gfp_t); | 79 | extern struct posix_acl *posix_acl_alloc(int, gfp_t); |
| 76 | extern int posix_acl_valid(const struct posix_acl *); | 80 | extern int posix_acl_valid(const struct posix_acl *); |
| 77 | extern int posix_acl_permission(struct inode *, const struct posix_acl *, int); | 81 | extern int posix_acl_permission(struct inode *, const struct posix_acl *, int); |
| 78 | extern struct posix_acl *posix_acl_from_mode(mode_t, gfp_t); | 82 | extern struct posix_acl *posix_acl_from_mode(umode_t, gfp_t); |
| 79 | extern int posix_acl_equiv_mode(const struct posix_acl *, mode_t *); | 83 | extern int posix_acl_equiv_mode(const struct posix_acl *, umode_t *); |
| 80 | extern int posix_acl_create(struct posix_acl **, gfp_t, mode_t *); | 84 | extern int posix_acl_create(struct posix_acl **, gfp_t, umode_t *); |
| 81 | extern int posix_acl_chmod(struct posix_acl **, gfp_t, mode_t); | 85 | extern int posix_acl_chmod(struct posix_acl **, gfp_t, umode_t); |
| 82 | 86 | ||
| 83 | extern struct posix_acl *get_posix_acl(struct inode *, int); | 87 | extern struct posix_acl *get_posix_acl(struct inode *, int); |
| 84 | extern int set_posix_acl(struct inode *, int, struct posix_acl *); | 88 | extern int set_posix_acl(struct inode *, int, struct posix_acl *); |
| 85 | 89 | ||
| 86 | #ifdef CONFIG_FS_POSIX_ACL | 90 | #ifdef CONFIG_FS_POSIX_ACL |
| 87 | static inline struct posix_acl *get_cached_acl(struct inode *inode, int type) | 91 | static inline struct posix_acl **acl_by_type(struct inode *inode, int type) |
| 88 | { | 92 | { |
| 89 | struct posix_acl **p, *acl; | ||
| 90 | switch (type) { | 93 | switch (type) { |
| 91 | case ACL_TYPE_ACCESS: | 94 | case ACL_TYPE_ACCESS: |
| 92 | p = &inode->i_acl; | 95 | return &inode->i_acl; |
| 93 | break; | ||
| 94 | case ACL_TYPE_DEFAULT: | 96 | case ACL_TYPE_DEFAULT: |
| 95 | p = &inode->i_default_acl; | 97 | return &inode->i_default_acl; |
| 96 | break; | ||
| 97 | default: | 98 | default: |
| 98 | return ERR_PTR(-EINVAL); | 99 | BUG(); |
| 99 | } | 100 | } |
| 100 | acl = ACCESS_ONCE(*p); | 101 | } |
| 102 | |||
| 103 | static inline struct posix_acl *get_cached_acl(struct inode *inode, int type) | ||
| 104 | { | ||
| 105 | struct posix_acl **p = acl_by_type(inode, type); | ||
| 106 | struct posix_acl *acl = ACCESS_ONCE(*p); | ||
| 101 | if (acl) { | 107 | if (acl) { |
| 102 | spin_lock(&inode->i_lock); | 108 | spin_lock(&inode->i_lock); |
| 103 | acl = *p; | 109 | acl = *p; |
| @@ -108,41 +114,20 @@ static inline struct posix_acl *get_cached_acl(struct inode *inode, int type) | |||
| 108 | return acl; | 114 | return acl; |
| 109 | } | 115 | } |
| 110 | 116 | ||
| 111 | static inline int negative_cached_acl(struct inode *inode, int type) | 117 | static inline struct posix_acl *get_cached_acl_rcu(struct inode *inode, int type) |
| 112 | { | 118 | { |
| 113 | struct posix_acl **p, *acl; | 119 | return rcu_dereference(*acl_by_type(inode, type)); |
| 114 | switch (type) { | ||
| 115 | case ACL_TYPE_ACCESS: | ||
| 116 | p = &inode->i_acl; | ||
| 117 | break; | ||
| 118 | case ACL_TYPE_DEFAULT: | ||
| 119 | p = &inode->i_default_acl; | ||
| 120 | break; | ||
| 121 | default: | ||
| 122 | BUG(); | ||
| 123 | } | ||
| 124 | acl = ACCESS_ONCE(*p); | ||
| 125 | if (acl) | ||
| 126 | return 0; | ||
| 127 | return 1; | ||
| 128 | } | 120 | } |
| 129 | 121 | ||
| 130 | static inline void set_cached_acl(struct inode *inode, | 122 | static inline void set_cached_acl(struct inode *inode, |
| 131 | int type, | 123 | int type, |
| 132 | struct posix_acl *acl) | 124 | struct posix_acl *acl) |
| 133 | { | 125 | { |
| 134 | struct posix_acl *old = NULL; | 126 | struct posix_acl **p = acl_by_type(inode, type); |
| 127 | struct posix_acl *old; | ||
| 135 | spin_lock(&inode->i_lock); | 128 | spin_lock(&inode->i_lock); |
| 136 | switch (type) { | 129 | old = *p; |
| 137 | case ACL_TYPE_ACCESS: | 130 | rcu_assign_pointer(*p, posix_acl_dup(acl)); |
| 138 | old = inode->i_acl; | ||
| 139 | inode->i_acl = posix_acl_dup(acl); | ||
| 140 | break; | ||
| 141 | case ACL_TYPE_DEFAULT: | ||
| 142 | old = inode->i_default_acl; | ||
| 143 | inode->i_default_acl = posix_acl_dup(acl); | ||
| 144 | break; | ||
| 145 | } | ||
| 146 | spin_unlock(&inode->i_lock); | 131 | spin_unlock(&inode->i_lock); |
| 147 | if (old != ACL_NOT_CACHED) | 132 | if (old != ACL_NOT_CACHED) |
| 148 | posix_acl_release(old); | 133 | posix_acl_release(old); |
| @@ -150,18 +135,11 @@ static inline void set_cached_acl(struct inode *inode, | |||
| 150 | 135 | ||
| 151 | static inline void forget_cached_acl(struct inode *inode, int type) | 136 | static inline void forget_cached_acl(struct inode *inode, int type) |
| 152 | { | 137 | { |
| 153 | struct posix_acl *old = NULL; | 138 | struct posix_acl **p = acl_by_type(inode, type); |
| 139 | struct posix_acl *old; | ||
| 154 | spin_lock(&inode->i_lock); | 140 | spin_lock(&inode->i_lock); |
| 155 | switch (type) { | 141 | old = *p; |
| 156 | case ACL_TYPE_ACCESS: | 142 | *p = ACL_NOT_CACHED; |
| 157 | old = inode->i_acl; | ||
| 158 | inode->i_acl = ACL_NOT_CACHED; | ||
| 159 | break; | ||
| 160 | case ACL_TYPE_DEFAULT: | ||
| 161 | old = inode->i_default_acl; | ||
| 162 | inode->i_default_acl = ACL_NOT_CACHED; | ||
| 163 | break; | ||
| 164 | } | ||
| 165 | spin_unlock(&inode->i_lock); | 143 | spin_unlock(&inode->i_lock); |
| 166 | if (old != ACL_NOT_CACHED) | 144 | if (old != ACL_NOT_CACHED) |
| 167 | posix_acl_release(old); | 145 | posix_acl_release(old); |
diff --git a/include/linux/power/bq20z75.h b/include/linux/power/bq20z75.h index b0843b68af92..1398eb004e83 100644 --- a/include/linux/power/bq20z75.h +++ b/include/linux/power/bq20z75.h | |||
| @@ -29,11 +29,14 @@ | |||
| 29 | * @battery_detect: GPIO which is used to detect battery presence | 29 | * @battery_detect: GPIO which is used to detect battery presence |
| 30 | * @battery_detect_present: gpio state when battery is present (0 / 1) | 30 | * @battery_detect_present: gpio state when battery is present (0 / 1) |
| 31 | * @i2c_retry_count: # of times to retry on i2c IO failure | 31 | * @i2c_retry_count: # of times to retry on i2c IO failure |
| 32 | * @poll_retry_count: # of times to retry looking for new status after | ||
| 33 | * external change notification | ||
| 32 | */ | 34 | */ |
| 33 | struct bq20z75_platform_data { | 35 | struct bq20z75_platform_data { |
| 34 | int battery_detect; | 36 | int battery_detect; |
| 35 | int battery_detect_present; | 37 | int battery_detect_present; |
| 36 | int i2c_retry_count; | 38 | int i2c_retry_count; |
| 39 | int poll_retry_count; | ||
| 37 | }; | 40 | }; |
| 38 | 41 | ||
| 39 | #endif | 42 | #endif |
diff --git a/include/linux/power/max17042_battery.h b/include/linux/power/max17042_battery.h index 7995deb8bfc1..fe99211fb2b8 100644 --- a/include/linux/power/max17042_battery.h +++ b/include/linux/power/max17042_battery.h | |||
| @@ -23,8 +23,99 @@ | |||
| 23 | #ifndef __MAX17042_BATTERY_H_ | 23 | #ifndef __MAX17042_BATTERY_H_ |
| 24 | #define __MAX17042_BATTERY_H_ | 24 | #define __MAX17042_BATTERY_H_ |
| 25 | 25 | ||
| 26 | #define MAX17042_STATUS_BattAbsent (1 << 3) | ||
| 27 | #define MAX17042_BATTERY_FULL (100) | ||
| 28 | #define MAX17042_DEFAULT_SNS_RESISTOR (10000) | ||
| 29 | |||
| 30 | enum max17042_register { | ||
| 31 | MAX17042_STATUS = 0x00, | ||
| 32 | MAX17042_VALRT_Th = 0x01, | ||
| 33 | MAX17042_TALRT_Th = 0x02, | ||
| 34 | MAX17042_SALRT_Th = 0x03, | ||
| 35 | MAX17042_AtRate = 0x04, | ||
| 36 | MAX17042_RepCap = 0x05, | ||
| 37 | MAX17042_RepSOC = 0x06, | ||
| 38 | MAX17042_Age = 0x07, | ||
| 39 | MAX17042_TEMP = 0x08, | ||
| 40 | MAX17042_VCELL = 0x09, | ||
| 41 | MAX17042_Current = 0x0A, | ||
| 42 | MAX17042_AvgCurrent = 0x0B, | ||
| 43 | MAX17042_Qresidual = 0x0C, | ||
| 44 | MAX17042_SOC = 0x0D, | ||
| 45 | MAX17042_AvSOC = 0x0E, | ||
| 46 | MAX17042_RemCap = 0x0F, | ||
| 47 | MAX17402_FullCAP = 0x10, | ||
| 48 | MAX17042_TTE = 0x11, | ||
| 49 | MAX17042_V_empty = 0x12, | ||
| 50 | |||
| 51 | MAX17042_RSLOW = 0x14, | ||
| 52 | |||
| 53 | MAX17042_AvgTA = 0x16, | ||
| 54 | MAX17042_Cycles = 0x17, | ||
| 55 | MAX17042_DesignCap = 0x18, | ||
| 56 | MAX17042_AvgVCELL = 0x19, | ||
| 57 | MAX17042_MinMaxTemp = 0x1A, | ||
| 58 | MAX17042_MinMaxVolt = 0x1B, | ||
| 59 | MAX17042_MinMaxCurr = 0x1C, | ||
| 60 | MAX17042_CONFIG = 0x1D, | ||
| 61 | MAX17042_ICHGTerm = 0x1E, | ||
| 62 | MAX17042_AvCap = 0x1F, | ||
| 63 | MAX17042_ManName = 0x20, | ||
| 64 | MAX17042_DevName = 0x21, | ||
| 65 | MAX17042_DevChem = 0x22, | ||
| 66 | |||
| 67 | MAX17042_TempNom = 0x24, | ||
| 68 | MAX17042_TempCold = 0x25, | ||
| 69 | MAX17042_TempHot = 0x26, | ||
| 70 | MAX17042_AIN = 0x27, | ||
| 71 | MAX17042_LearnCFG = 0x28, | ||
| 72 | MAX17042_SHFTCFG = 0x29, | ||
| 73 | MAX17042_RelaxCFG = 0x2A, | ||
| 74 | MAX17042_MiscCFG = 0x2B, | ||
| 75 | MAX17042_TGAIN = 0x2C, | ||
| 76 | MAx17042_TOFF = 0x2D, | ||
| 77 | MAX17042_CGAIN = 0x2E, | ||
| 78 | MAX17042_COFF = 0x2F, | ||
| 79 | |||
| 80 | MAX17042_Q_empty = 0x33, | ||
| 81 | MAX17042_T_empty = 0x34, | ||
| 82 | |||
| 83 | MAX17042_RCOMP0 = 0x38, | ||
| 84 | MAX17042_TempCo = 0x39, | ||
| 85 | MAX17042_Rx = 0x3A, | ||
| 86 | MAX17042_T_empty0 = 0x3B, | ||
| 87 | MAX17042_TaskPeriod = 0x3C, | ||
| 88 | MAX17042_FSTAT = 0x3D, | ||
| 89 | |||
| 90 | MAX17042_SHDNTIMER = 0x3F, | ||
| 91 | |||
| 92 | MAX17042_VFRemCap = 0x4A, | ||
| 93 | |||
| 94 | MAX17042_QH = 0x4D, | ||
| 95 | MAX17042_QL = 0x4E, | ||
| 96 | }; | ||
| 97 | |||
| 98 | /* | ||
| 99 | * used for setting a register to a desired value | ||
| 100 | * addr : address for a register | ||
| 101 | * data : setting value for the register | ||
| 102 | */ | ||
| 103 | struct max17042_reg_data { | ||
| 104 | u8 addr; | ||
| 105 | u16 data; | ||
| 106 | }; | ||
| 107 | |||
| 26 | struct max17042_platform_data { | 108 | struct max17042_platform_data { |
| 109 | struct max17042_reg_data *init_data; | ||
| 110 | int num_init_data; /* Number of enties in init_data array */ | ||
| 27 | bool enable_current_sense; | 111 | bool enable_current_sense; |
| 112 | |||
| 113 | /* | ||
| 114 | * R_sns in micro-ohms. | ||
| 115 | * default 10000 (if r_sns = 0) as it is the recommended value by | ||
| 116 | * the datasheet although it can be changed by board designers. | ||
| 117 | */ | ||
| 118 | unsigned int r_sns; | ||
| 28 | }; | 119 | }; |
| 29 | 120 | ||
| 30 | #endif /* __MAX17042_BATTERY_H_ */ | 121 | #endif /* __MAX17042_BATTERY_H_ */ |
diff --git a/include/linux/pstore.h b/include/linux/pstore.h index 2455ef2683f0..cc03bbf5c4b8 100644 --- a/include/linux/pstore.h +++ b/include/linux/pstore.h | |||
| @@ -38,9 +38,12 @@ struct pstore_info { | |||
| 38 | int (*open)(struct pstore_info *psi); | 38 | int (*open)(struct pstore_info *psi); |
| 39 | int (*close)(struct pstore_info *psi); | 39 | int (*close)(struct pstore_info *psi); |
| 40 | ssize_t (*read)(u64 *id, enum pstore_type_id *type, | 40 | ssize_t (*read)(u64 *id, enum pstore_type_id *type, |
| 41 | struct timespec *time); | 41 | struct timespec *time, struct pstore_info *psi); |
| 42 | u64 (*write)(enum pstore_type_id type, size_t size); | 42 | u64 (*write)(enum pstore_type_id type, unsigned int part, |
| 43 | int (*erase)(u64 id); | 43 | size_t size, struct pstore_info *psi); |
| 44 | int (*erase)(enum pstore_type_id type, u64 id, | ||
| 45 | struct pstore_info *psi); | ||
| 46 | void *data; | ||
| 44 | }; | 47 | }; |
| 45 | 48 | ||
| 46 | #ifdef CONFIG_PSTORE | 49 | #ifdef CONFIG_PSTORE |
diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h index 23241c2fecce..9d4539c52e53 100644 --- a/include/linux/radix-tree.h +++ b/include/linux/radix-tree.h | |||
| @@ -39,7 +39,15 @@ | |||
| 39 | * when it is shrunk, before we rcu free the node. See shrink code for | 39 | * when it is shrunk, before we rcu free the node. See shrink code for |
| 40 | * details. | 40 | * details. |
| 41 | */ | 41 | */ |
| 42 | #define RADIX_TREE_INDIRECT_PTR 1 | 42 | #define RADIX_TREE_INDIRECT_PTR 1 |
| 43 | /* | ||
| 44 | * A common use of the radix tree is to store pointers to struct pages; | ||
| 45 | * but shmem/tmpfs needs also to store swap entries in the same tree: | ||
| 46 | * those are marked as exceptional entries to distinguish them. | ||
| 47 | * EXCEPTIONAL_ENTRY tests the bit, EXCEPTIONAL_SHIFT shifts content past it. | ||
| 48 | */ | ||
| 49 | #define RADIX_TREE_EXCEPTIONAL_ENTRY 2 | ||
| 50 | #define RADIX_TREE_EXCEPTIONAL_SHIFT 2 | ||
| 43 | 51 | ||
| 44 | #define radix_tree_indirect_to_ptr(ptr) \ | 52 | #define radix_tree_indirect_to_ptr(ptr) \ |
| 45 | radix_tree_indirect_to_ptr((void __force *)(ptr)) | 53 | radix_tree_indirect_to_ptr((void __force *)(ptr)) |
| @@ -174,6 +182,28 @@ static inline int radix_tree_deref_retry(void *arg) | |||
| 174 | } | 182 | } |
| 175 | 183 | ||
| 176 | /** | 184 | /** |
| 185 | * radix_tree_exceptional_entry - radix_tree_deref_slot gave exceptional entry? | ||
| 186 | * @arg: value returned by radix_tree_deref_slot | ||
| 187 | * Returns: 0 if well-aligned pointer, non-0 if exceptional entry. | ||
| 188 | */ | ||
| 189 | static inline int radix_tree_exceptional_entry(void *arg) | ||
| 190 | { | ||
| 191 | /* Not unlikely because radix_tree_exception often tested first */ | ||
| 192 | return (unsigned long)arg & RADIX_TREE_EXCEPTIONAL_ENTRY; | ||
| 193 | } | ||
| 194 | |||
| 195 | /** | ||
| 196 | * radix_tree_exception - radix_tree_deref_slot returned either exception? | ||
| 197 | * @arg: value returned by radix_tree_deref_slot | ||
| 198 | * Returns: 0 if well-aligned pointer, non-0 if either kind of exception. | ||
| 199 | */ | ||
| 200 | static inline int radix_tree_exception(void *arg) | ||
| 201 | { | ||
| 202 | return unlikely((unsigned long)arg & | ||
| 203 | (RADIX_TREE_INDIRECT_PTR | RADIX_TREE_EXCEPTIONAL_ENTRY)); | ||
| 204 | } | ||
| 205 | |||
| 206 | /** | ||
| 177 | * radix_tree_replace_slot - replace item in a slot | 207 | * radix_tree_replace_slot - replace item in a slot |
| 178 | * @pslot: pointer to slot, returned by radix_tree_lookup_slot | 208 | * @pslot: pointer to slot, returned by radix_tree_lookup_slot |
| 179 | * @item: new item to store in the slot. | 209 | * @item: new item to store in the slot. |
| @@ -194,8 +224,8 @@ void *radix_tree_delete(struct radix_tree_root *, unsigned long); | |||
| 194 | unsigned int | 224 | unsigned int |
| 195 | radix_tree_gang_lookup(struct radix_tree_root *root, void **results, | 225 | radix_tree_gang_lookup(struct radix_tree_root *root, void **results, |
| 196 | unsigned long first_index, unsigned int max_items); | 226 | unsigned long first_index, unsigned int max_items); |
| 197 | unsigned int | 227 | unsigned int radix_tree_gang_lookup_slot(struct radix_tree_root *root, |
| 198 | radix_tree_gang_lookup_slot(struct radix_tree_root *root, void ***results, | 228 | void ***results, unsigned long *indices, |
| 199 | unsigned long first_index, unsigned int max_items); | 229 | unsigned long first_index, unsigned int max_items); |
| 200 | unsigned long radix_tree_next_hole(struct radix_tree_root *root, | 230 | unsigned long radix_tree_next_hole(struct radix_tree_root *root, |
| 201 | unsigned long index, unsigned long max_scan); | 231 | unsigned long index, unsigned long max_scan); |
| @@ -222,6 +252,7 @@ unsigned long radix_tree_range_tag_if_tagged(struct radix_tree_root *root, | |||
| 222 | unsigned long nr_to_tag, | 252 | unsigned long nr_to_tag, |
| 223 | unsigned int fromtag, unsigned int totag); | 253 | unsigned int fromtag, unsigned int totag); |
| 224 | int radix_tree_tagged(struct radix_tree_root *root, unsigned int tag); | 254 | int radix_tree_tagged(struct radix_tree_root *root, unsigned int tag); |
| 255 | unsigned long radix_tree_locate_item(struct radix_tree_root *root, void *item); | ||
| 225 | 256 | ||
| 226 | static inline void radix_tree_preload_end(void) | 257 | static inline void radix_tree_preload_end(void) |
| 227 | { | 258 | { |
diff --git a/include/linux/random.h b/include/linux/random.h index ce29a040c8dc..d13059f3ea32 100644 --- a/include/linux/random.h +++ b/include/linux/random.h | |||
| @@ -57,18 +57,6 @@ extern void add_interrupt_randomness(int irq); | |||
| 57 | extern void get_random_bytes(void *buf, int nbytes); | 57 | extern void get_random_bytes(void *buf, int nbytes); |
| 58 | void generate_random_uuid(unsigned char uuid_out[16]); | 58 | void generate_random_uuid(unsigned char uuid_out[16]); |
| 59 | 59 | ||
| 60 | extern __u32 secure_ip_id(__be32 daddr); | ||
| 61 | extern __u32 secure_ipv6_id(const __be32 daddr[4]); | ||
| 62 | extern u32 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport); | ||
| 63 | extern u32 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr, | ||
| 64 | __be16 dport); | ||
| 65 | extern __u32 secure_tcp_sequence_number(__be32 saddr, __be32 daddr, | ||
| 66 | __be16 sport, __be16 dport); | ||
| 67 | extern __u32 secure_tcpv6_sequence_number(__be32 *saddr, __be32 *daddr, | ||
| 68 | __be16 sport, __be16 dport); | ||
| 69 | extern u64 secure_dccp_sequence_number(__be32 saddr, __be32 daddr, | ||
| 70 | __be16 sport, __be16 dport); | ||
| 71 | |||
| 72 | #ifndef MODULE | 60 | #ifndef MODULE |
| 73 | extern const struct file_operations random_fops, urandom_fops; | 61 | extern const struct file_operations random_fops, urandom_fops; |
| 74 | #endif | 62 | #endif |
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h index 9e87c1cb7270..26f6ea4444e3 100644 --- a/include/linux/regulator/consumer.h +++ b/include/linux/regulator/consumer.h | |||
| @@ -122,6 +122,9 @@ struct regulator; | |||
| 122 | struct regulator_bulk_data { | 122 | struct regulator_bulk_data { |
| 123 | const char *supply; | 123 | const char *supply; |
| 124 | struct regulator *consumer; | 124 | struct regulator *consumer; |
| 125 | |||
| 126 | /* Internal use */ | ||
| 127 | int ret; | ||
| 125 | }; | 128 | }; |
| 126 | 129 | ||
| 127 | #if defined(CONFIG_REGULATOR) | 130 | #if defined(CONFIG_REGULATOR) |
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h index 6c433b89c80d..1a80bc77517d 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h | |||
| @@ -188,18 +188,16 @@ struct regulator_dev { | |||
| 188 | 188 | ||
| 189 | /* lists we belong to */ | 189 | /* lists we belong to */ |
| 190 | struct list_head list; /* list of all regulators */ | 190 | struct list_head list; /* list of all regulators */ |
| 191 | struct list_head slist; /* list of supplied regulators */ | ||
| 192 | 191 | ||
| 193 | /* lists we own */ | 192 | /* lists we own */ |
| 194 | struct list_head consumer_list; /* consumers we supply */ | 193 | struct list_head consumer_list; /* consumers we supply */ |
| 195 | struct list_head supply_list; /* regulators we supply */ | ||
| 196 | 194 | ||
| 197 | struct blocking_notifier_head notifier; | 195 | struct blocking_notifier_head notifier; |
| 198 | struct mutex mutex; /* consumer lock */ | 196 | struct mutex mutex; /* consumer lock */ |
| 199 | struct module *owner; | 197 | struct module *owner; |
| 200 | struct device dev; | 198 | struct device dev; |
| 201 | struct regulation_constraints *constraints; | 199 | struct regulation_constraints *constraints; |
| 202 | struct regulator_dev *supply; /* for tree */ | 200 | struct regulator *supply; /* for tree */ |
| 203 | 201 | ||
| 204 | void *reg_data; /* regulator_dev data */ | 202 | void *reg_data; /* regulator_dev data */ |
| 205 | 203 | ||
diff --git a/include/linux/serial_sci.h b/include/linux/serial_sci.h index a2afc9fbe186..8bffe9ae2ca0 100644 --- a/include/linux/serial_sci.h +++ b/include/linux/serial_sci.h | |||
| @@ -8,6 +8,8 @@ | |||
| 8 | * Generic header for SuperH SCI(F) (used by sh/sh64/h8300 and related parts) | 8 | * Generic header for SuperH SCI(F) (used by sh/sh64/h8300 and related parts) |
| 9 | */ | 9 | */ |
| 10 | 10 | ||
| 11 | #define SCIx_NOT_SUPPORTED (-1) | ||
| 12 | |||
| 11 | enum { | 13 | enum { |
| 12 | SCBRR_ALGO_1, /* ((clk + 16 * bps) / (16 * bps) - 1) */ | 14 | SCBRR_ALGO_1, /* ((clk + 16 * bps) / (16 * bps) - 1) */ |
| 13 | SCBRR_ALGO_2, /* ((clk + 16 * bps) / (32 * bps) - 1) */ | 15 | SCBRR_ALGO_2, /* ((clk + 16 * bps) / (32 * bps) - 1) */ |
| @@ -25,6 +27,28 @@ enum { | |||
| 25 | #define SCSCR_CKE1 (1 << 1) | 27 | #define SCSCR_CKE1 (1 << 1) |
| 26 | #define SCSCR_CKE0 (1 << 0) | 28 | #define SCSCR_CKE0 (1 << 0) |
| 27 | 29 | ||
| 30 | /* SCxSR SCI */ | ||
| 31 | #define SCI_TDRE 0x80 | ||
| 32 | #define SCI_RDRF 0x40 | ||
| 33 | #define SCI_ORER 0x20 | ||
| 34 | #define SCI_FER 0x10 | ||
| 35 | #define SCI_PER 0x08 | ||
| 36 | #define SCI_TEND 0x04 | ||
| 37 | |||
| 38 | #define SCI_DEFAULT_ERROR_MASK (SCI_PER | SCI_FER) | ||
| 39 | |||
| 40 | /* SCxSR SCIF */ | ||
| 41 | #define SCIF_ER 0x0080 | ||
| 42 | #define SCIF_TEND 0x0040 | ||
| 43 | #define SCIF_TDFE 0x0020 | ||
| 44 | #define SCIF_BRK 0x0010 | ||
| 45 | #define SCIF_FER 0x0008 | ||
| 46 | #define SCIF_PER 0x0004 | ||
| 47 | #define SCIF_RDF 0x0002 | ||
| 48 | #define SCIF_DR 0x0001 | ||
| 49 | |||
| 50 | #define SCIF_DEFAULT_ERROR_MASK (SCIF_PER | SCIF_FER | SCIF_ER | SCIF_BRK) | ||
| 51 | |||
| 28 | /* Offsets into the sci_port->irqs array */ | 52 | /* Offsets into the sci_port->irqs array */ |
| 29 | enum { | 53 | enum { |
| 30 | SCIx_ERI_IRQ, | 54 | SCIx_ERI_IRQ, |
| @@ -32,6 +56,24 @@ enum { | |||
| 32 | SCIx_TXI_IRQ, | 56 | SCIx_TXI_IRQ, |
| 33 | SCIx_BRI_IRQ, | 57 | SCIx_BRI_IRQ, |
| 34 | SCIx_NR_IRQS, | 58 | SCIx_NR_IRQS, |
| 59 | |||
| 60 | SCIx_MUX_IRQ = SCIx_NR_IRQS, /* special case */ | ||
| 61 | }; | ||
| 62 | |||
| 63 | enum { | ||
| 64 | SCIx_PROBE_REGTYPE, | ||
| 65 | |||
| 66 | SCIx_SCI_REGTYPE, | ||
| 67 | SCIx_IRDA_REGTYPE, | ||
| 68 | SCIx_SCIFA_REGTYPE, | ||
| 69 | SCIx_SCIFB_REGTYPE, | ||
| 70 | SCIx_SH3_SCIF_REGTYPE, | ||
| 71 | SCIx_SH4_SCIF_REGTYPE, | ||
| 72 | SCIx_SH4_SCIF_NO_SCSPTR_REGTYPE, | ||
| 73 | SCIx_SH4_SCIF_FIFODATA_REGTYPE, | ||
| 74 | SCIx_SH7705_SCIF_REGTYPE, | ||
| 75 | |||
| 76 | SCIx_NR_REGTYPES, | ||
| 35 | }; | 77 | }; |
| 36 | 78 | ||
| 37 | #define SCIx_IRQ_MUXED(irq) \ | 79 | #define SCIx_IRQ_MUXED(irq) \ |
| @@ -42,8 +84,29 @@ enum { | |||
| 42 | [SCIx_BRI_IRQ] = (irq), \ | 84 | [SCIx_BRI_IRQ] = (irq), \ |
| 43 | } | 85 | } |
| 44 | 86 | ||
| 87 | #define SCIx_IRQ_IS_MUXED(port) \ | ||
| 88 | ((port)->cfg->irqs[SCIx_ERI_IRQ] == \ | ||
| 89 | (port)->cfg->irqs[SCIx_RXI_IRQ]) || \ | ||
| 90 | ((port)->cfg->irqs[SCIx_ERI_IRQ] && \ | ||
| 91 | !(port)->cfg->irqs[SCIx_RXI_IRQ]) | ||
| 92 | /* | ||
| 93 | * SCI register subset common for all port types. | ||
| 94 | * Not all registers will exist on all parts. | ||
| 95 | */ | ||
| 96 | enum { | ||
| 97 | SCSMR, SCBRR, SCSCR, SCxSR, | ||
| 98 | SCFCR, SCFDR, SCxTDR, SCxRDR, | ||
| 99 | SCLSR, SCTFDR, SCRFDR, SCSPTR, | ||
| 100 | |||
| 101 | SCIx_NR_REGS, | ||
| 102 | }; | ||
| 103 | |||
| 45 | struct device; | 104 | struct device; |
| 46 | 105 | ||
| 106 | struct plat_sci_port_ops { | ||
| 107 | void (*init_pins)(struct uart_port *, unsigned int cflag); | ||
| 108 | }; | ||
| 109 | |||
| 47 | /* | 110 | /* |
| 48 | * Platform device specific platform_data struct | 111 | * Platform device specific platform_data struct |
| 49 | */ | 112 | */ |
| @@ -56,6 +119,18 @@ struct plat_sci_port { | |||
| 56 | unsigned int scbrr_algo_id; /* SCBRR calculation algo */ | 119 | unsigned int scbrr_algo_id; /* SCBRR calculation algo */ |
| 57 | unsigned int scscr; /* SCSCR initialization */ | 120 | unsigned int scscr; /* SCSCR initialization */ |
| 58 | 121 | ||
| 122 | /* | ||
| 123 | * Platform overrides if necessary, defaults otherwise. | ||
| 124 | */ | ||
| 125 | int overrun_bit; | ||
| 126 | unsigned int error_mask; | ||
| 127 | |||
| 128 | int port_reg; | ||
| 129 | unsigned char regshift; | ||
| 130 | unsigned char regtype; | ||
| 131 | |||
| 132 | struct plat_sci_port_ops *ops; | ||
| 133 | |||
| 59 | struct device *dma_dev; | 134 | struct device *dma_dev; |
| 60 | 135 | ||
| 61 | unsigned int dma_slave_tx; | 136 | unsigned int dma_slave_tx; |
diff --git a/include/linux/sh_clk.h b/include/linux/sh_clk.h index 9a52f72527dc..3ccf18648d0a 100644 --- a/include/linux/sh_clk.h +++ b/include/linux/sh_clk.h | |||
| @@ -147,4 +147,8 @@ int sh_clk_div4_reparent_register(struct clk *clks, int nr, | |||
| 147 | int sh_clk_div6_register(struct clk *clks, int nr); | 147 | int sh_clk_div6_register(struct clk *clks, int nr); |
| 148 | int sh_clk_div6_reparent_register(struct clk *clks, int nr); | 148 | int sh_clk_div6_reparent_register(struct clk *clks, int nr); |
| 149 | 149 | ||
| 150 | #define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk } | ||
| 151 | #define CLKDEV_DEV_ID(_id, _clk) { .dev_id = _id, .clk = _clk } | ||
| 152 | #define CLKDEV_ICK_ID(_cid, _did, _clk) { .con_id = _cid, .dev_id = _did, .clk = _clk } | ||
| 153 | |||
| 150 | #endif /* __SH_CLOCK_H */ | 154 | #endif /* __SH_CLOCK_H */ |
diff --git a/include/linux/sh_dma.h b/include/linux/sh_dma.h index b08cd4efa15c..cb2dd118cc0f 100644 --- a/include/linux/sh_dma.h +++ b/include/linux/sh_dma.h | |||
| @@ -62,6 +62,12 @@ struct sh_dmae_pdata { | |||
| 62 | const unsigned int *ts_shift; | 62 | const unsigned int *ts_shift; |
| 63 | int ts_shift_num; | 63 | int ts_shift_num; |
| 64 | u16 dmaor_init; | 64 | u16 dmaor_init; |
| 65 | unsigned int chcr_offset; | ||
| 66 | u32 chcr_ie_bit; | ||
| 67 | |||
| 68 | unsigned int dmaor_is_32bit:1; | ||
| 69 | unsigned int needs_tend_set:1; | ||
| 70 | unsigned int no_dmars:1; | ||
| 65 | }; | 71 | }; |
| 66 | 72 | ||
| 67 | /* DMA register */ | 73 | /* DMA register */ |
| @@ -71,6 +77,8 @@ struct sh_dmae_pdata { | |||
| 71 | #define CHCR 0x0C | 77 | #define CHCR 0x0C |
| 72 | #define DMAOR 0x40 | 78 | #define DMAOR 0x40 |
| 73 | 79 | ||
| 80 | #define TEND 0x18 /* USB-DMAC */ | ||
| 81 | |||
| 74 | /* DMAOR definitions */ | 82 | /* DMAOR definitions */ |
| 75 | #define DMAOR_AE 0x00000004 | 83 | #define DMAOR_AE 0x00000004 |
| 76 | #define DMAOR_NMIF 0x00000002 | 84 | #define DMAOR_NMIF 0x00000002 |
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h index aa08fa8fd79b..9291ac3cc627 100644 --- a/include/linux/shmem_fs.h +++ b/include/linux/shmem_fs.h | |||
| @@ -8,22 +8,15 @@ | |||
| 8 | 8 | ||
| 9 | /* inode in-kernel data */ | 9 | /* inode in-kernel data */ |
| 10 | 10 | ||
| 11 | #define SHMEM_NR_DIRECT 16 | ||
| 12 | |||
| 13 | #define SHMEM_SYMLINK_INLINE_LEN (SHMEM_NR_DIRECT * sizeof(swp_entry_t)) | ||
| 14 | |||
| 15 | struct shmem_inode_info { | 11 | struct shmem_inode_info { |
| 16 | spinlock_t lock; | 12 | spinlock_t lock; |
| 17 | unsigned long flags; | 13 | unsigned long flags; |
| 18 | unsigned long alloced; /* data pages alloced to file */ | 14 | unsigned long alloced; /* data pages alloced to file */ |
| 19 | unsigned long swapped; /* subtotal assigned to swap */ | ||
| 20 | unsigned long next_index; /* highest alloced index + 1 */ | ||
| 21 | struct shared_policy policy; /* NUMA memory alloc policy */ | ||
| 22 | struct page *i_indirect; /* top indirect blocks page */ | ||
| 23 | union { | 15 | union { |
| 24 | swp_entry_t i_direct[SHMEM_NR_DIRECT]; /* first blocks */ | 16 | unsigned long swapped; /* subtotal assigned to swap */ |
| 25 | char inline_symlink[SHMEM_SYMLINK_INLINE_LEN]; | 17 | char *symlink; /* unswappable short symlink */ |
| 26 | }; | 18 | }; |
| 19 | struct shared_policy policy; /* NUMA memory alloc policy */ | ||
| 27 | struct list_head swaplist; /* chain of maybes on swap */ | 20 | struct list_head swaplist; /* chain of maybes on swap */ |
| 28 | struct list_head xattr_list; /* list of shmem_xattr */ | 21 | struct list_head xattr_list; /* list of shmem_xattr */ |
| 29 | struct inode vfs_inode; | 22 | struct inode vfs_inode; |
| @@ -49,7 +42,7 @@ static inline struct shmem_inode_info *SHMEM_I(struct inode *inode) | |||
| 49 | /* | 42 | /* |
| 50 | * Functions in mm/shmem.c called directly from elsewhere: | 43 | * Functions in mm/shmem.c called directly from elsewhere: |
| 51 | */ | 44 | */ |
| 52 | extern int init_tmpfs(void); | 45 | extern int shmem_init(void); |
| 53 | extern int shmem_fill_super(struct super_block *sb, void *data, int silent); | 46 | extern int shmem_fill_super(struct super_block *sb, void *data, int silent); |
| 54 | extern struct file *shmem_file_setup(const char *name, | 47 | extern struct file *shmem_file_setup(const char *name, |
| 55 | loff_t size, unsigned long flags); | 48 | loff_t size, unsigned long flags); |
| @@ -59,8 +52,6 @@ extern struct page *shmem_read_mapping_page_gfp(struct address_space *mapping, | |||
| 59 | pgoff_t index, gfp_t gfp_mask); | 52 | pgoff_t index, gfp_t gfp_mask); |
| 60 | extern void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end); | 53 | extern void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end); |
| 61 | extern int shmem_unuse(swp_entry_t entry, struct page *page); | 54 | extern int shmem_unuse(swp_entry_t entry, struct page *page); |
| 62 | extern void mem_cgroup_get_shmem_target(struct inode *inode, pgoff_t pgoff, | ||
| 63 | struct page **pagep, swp_entry_t *ent); | ||
| 64 | 55 | ||
| 65 | static inline struct page *shmem_read_mapping_page( | 56 | static inline struct page *shmem_read_mapping_page( |
| 66 | struct address_space *mapping, pgoff_t index) | 57 | struct address_space *mapping, pgoff_t index) |
diff --git a/include/linux/swapops.h b/include/linux/swapops.h index cd42e30b7c6e..2189d3ffc85d 100644 --- a/include/linux/swapops.h +++ b/include/linux/swapops.h | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | #ifndef _LINUX_SWAPOPS_H | ||
| 2 | #define _LINUX_SWAPOPS_H | ||
| 3 | |||
| 4 | #include <linux/radix-tree.h> | ||
| 5 | |||
| 1 | /* | 6 | /* |
| 2 | * swapcache pages are stored in the swapper_space radix tree. We want to | 7 | * swapcache pages are stored in the swapper_space radix tree. We want to |
| 3 | * get good packing density in that tree, so the index should be dense in | 8 | * get good packing density in that tree, so the index should be dense in |
| @@ -76,6 +81,22 @@ static inline pte_t swp_entry_to_pte(swp_entry_t entry) | |||
| 76 | return __swp_entry_to_pte(arch_entry); | 81 | return __swp_entry_to_pte(arch_entry); |
| 77 | } | 82 | } |
| 78 | 83 | ||
| 84 | static inline swp_entry_t radix_to_swp_entry(void *arg) | ||
| 85 | { | ||
| 86 | swp_entry_t entry; | ||
| 87 | |||
| 88 | entry.val = (unsigned long)arg >> RADIX_TREE_EXCEPTIONAL_SHIFT; | ||
| 89 | return entry; | ||
| 90 | } | ||
| 91 | |||
| 92 | static inline void *swp_to_radix_entry(swp_entry_t entry) | ||
| 93 | { | ||
| 94 | unsigned long value; | ||
| 95 | |||
| 96 | value = entry.val << RADIX_TREE_EXCEPTIONAL_SHIFT; | ||
| 97 | return (void *)(value | RADIX_TREE_EXCEPTIONAL_ENTRY); | ||
| 98 | } | ||
| 99 | |||
| 79 | #ifdef CONFIG_MIGRATION | 100 | #ifdef CONFIG_MIGRATION |
| 80 | static inline swp_entry_t make_migration_entry(struct page *page, int write) | 101 | static inline swp_entry_t make_migration_entry(struct page *page, int write) |
| 81 | { | 102 | { |
| @@ -169,3 +190,5 @@ static inline int non_swap_entry(swp_entry_t entry) | |||
| 169 | return 0; | 190 | return 0; |
| 170 | } | 191 | } |
| 171 | #endif | 192 | #endif |
| 193 | |||
| 194 | #endif /* _LINUX_SWAPOPS_H */ | ||
diff --git a/include/linux/thermal.h b/include/linux/thermal.h index d3ec89fb4122..47b4a27e6e97 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h | |||
| @@ -85,22 +85,6 @@ struct thermal_cooling_device { | |||
| 85 | ((long)t-2732+5)/10 : ((long)t-2732-5)/10) | 85 | ((long)t-2732+5)/10 : ((long)t-2732-5)/10) |
| 86 | #define CELSIUS_TO_KELVIN(t) ((t)*10+2732) | 86 | #define CELSIUS_TO_KELVIN(t) ((t)*10+2732) |
| 87 | 87 | ||
| 88 | #if defined(CONFIG_THERMAL_HWMON) | ||
| 89 | /* thermal zone devices with the same type share one hwmon device */ | ||
| 90 | struct thermal_hwmon_device { | ||
| 91 | char type[THERMAL_NAME_LENGTH]; | ||
| 92 | struct device *device; | ||
| 93 | int count; | ||
| 94 | struct list_head tz_list; | ||
| 95 | struct list_head node; | ||
| 96 | }; | ||
| 97 | |||
| 98 | struct thermal_hwmon_attr { | ||
| 99 | struct device_attribute attr; | ||
| 100 | char name[16]; | ||
| 101 | }; | ||
| 102 | #endif | ||
| 103 | |||
| 104 | struct thermal_zone_device { | 88 | struct thermal_zone_device { |
| 105 | int id; | 89 | int id; |
| 106 | char type[THERMAL_NAME_LENGTH]; | 90 | char type[THERMAL_NAME_LENGTH]; |
| @@ -120,12 +104,6 @@ struct thermal_zone_device { | |||
| 120 | struct mutex lock; /* protect cooling devices list */ | 104 | struct mutex lock; /* protect cooling devices list */ |
| 121 | struct list_head node; | 105 | struct list_head node; |
| 122 | struct delayed_work poll_queue; | 106 | struct delayed_work poll_queue; |
| 123 | #if defined(CONFIG_THERMAL_HWMON) | ||
| 124 | struct list_head hwmon_node; | ||
| 125 | struct thermal_hwmon_device *hwmon; | ||
| 126 | struct thermal_hwmon_attr temp_input; /* hwmon sys attr */ | ||
| 127 | struct thermal_hwmon_attr temp_crit; /* hwmon sys attr */ | ||
| 128 | #endif | ||
| 129 | }; | 107 | }; |
| 130 | /* Adding event notification support elements */ | 108 | /* Adding event notification support elements */ |
| 131 | #define THERMAL_GENL_FAMILY_NAME "thermal_event" | 109 | #define THERMAL_GENL_FAMILY_NAME "thermal_event" |
