mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 14:13:01 -04:00
Merge tag 'v3.1-rc6' into staging/for_v3.2
* tag 'v3.1-rc6': (1902 commits) Linux 3.1-rc6 ioctl: register LTTng ioctl fuse: fix memory leak fuse: fix flock breakage Btrfs: add dummy extent if dst offset excceeds file end in Btrfs: calc file extent num_bytes correctly in file clone btrfs: xattr: fix attribute removal Btrfs: fix wrong nbytes information of the inode Btrfs: fix the file extent gap when doing direct IO Btrfs: fix unclosed transaction handle in btrfs_cont_expand Btrfs: fix misuse of trans block rsv Btrfs: reset to appropriate block rsv after orphan operations Btrfs: skip locking if searching the commit root in csum lookup btrfs: fix warning in iput for bad-inode Btrfs: fix an oops when deleting snapshots [media] vp7045: fix buffer setup [media] nuvoton-cir: simplify raw IR sample handling [media] [Resend] viacam: Don't explode if pci_find_bus() returns NULL [media] v4l2: Fix documentation of the codec device controls [media] gspca - sonixj: Fix the darkness of sensor om6802 in 320x240 ...
This commit is contained in:
commit
7577911244
1867 changed files with 76275 additions and 30045 deletions
|
|
@ -238,7 +238,6 @@ extern int acpi_paddr_to_node(u64 start_addr, u64 size);
|
|||
extern int pnpacpi_disabled;
|
||||
|
||||
#define PXM_INVAL (-1)
|
||||
#define NID_INVAL (-1)
|
||||
|
||||
int acpi_check_resource_conflict(const struct resource *res);
|
||||
|
||||
|
|
@ -280,6 +279,8 @@ acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context);
|
|||
#define OSC_SB_CPUHP_OST_SUPPORT 8
|
||||
#define OSC_SB_APEI_SUPPORT 16
|
||||
|
||||
extern bool osc_sb_apei_support_acked;
|
||||
|
||||
/* PCI defined _OSC bits */
|
||||
/* _OSC DW1 Definition (OS Support Fields) */
|
||||
#define OSC_EXT_PCI_CONFIG_SUPPORT 1
|
||||
|
|
|
|||
|
|
@ -172,8 +172,11 @@ struct pl08x_dma_chan {
|
|||
int phychan_hold;
|
||||
struct tasklet_struct tasklet;
|
||||
char *name;
|
||||
struct pl08x_channel_data *cd;
|
||||
dma_addr_t runtime_addr;
|
||||
const struct pl08x_channel_data *cd;
|
||||
dma_addr_t src_addr;
|
||||
dma_addr_t dst_addr;
|
||||
u32 src_cctl;
|
||||
u32 dst_cctl;
|
||||
enum dma_data_direction runtime_direction;
|
||||
dma_cookie_t lc;
|
||||
struct list_head pend_list;
|
||||
|
|
@ -202,7 +205,7 @@ struct pl08x_dma_chan {
|
|||
* @mem_buses: buses which memory can be accessed from: PL08X_AHB1 | PL08X_AHB2
|
||||
*/
|
||||
struct pl08x_platform_data {
|
||||
struct pl08x_channel_data *slave_channels;
|
||||
const struct pl08x_channel_data *slave_channels;
|
||||
unsigned int num_slave_channels;
|
||||
struct pl08x_channel_data memcpy_channel;
|
||||
int (*get_signal)(struct pl08x_dma_chan *);
|
||||
|
|
|
|||
|
|
@ -146,6 +146,7 @@ extern int bitmap_allocate_region(unsigned long *bitmap, int pos, int order);
|
|||
extern void bitmap_copy_le(void *dst, const unsigned long *src, int nbits);
|
||||
extern int bitmap_ord_to_pos(const unsigned long *bitmap, int n, int bits);
|
||||
|
||||
#define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) % BITS_PER_LONG))
|
||||
#define BITMAP_LAST_WORD_MASK(nbits) \
|
||||
( \
|
||||
((nbits) % BITS_PER_LONG) ? \
|
||||
|
|
|
|||
|
|
@ -125,7 +125,11 @@ enum rq_flag_bits {
|
|||
__REQ_SYNC, /* request is sync (sync write or read) */
|
||||
__REQ_META, /* metadata io request */
|
||||
__REQ_DISCARD, /* request to discard sectors */
|
||||
__REQ_SECURE, /* secure discard (used with __REQ_DISCARD) */
|
||||
|
||||
__REQ_NOIDLE, /* don't anticipate more IO after this one */
|
||||
__REQ_FUA, /* forced unit access */
|
||||
__REQ_FLUSH, /* request for cache flush */
|
||||
|
||||
/* bio only flags */
|
||||
__REQ_RAHEAD, /* read ahead, can fail anytime */
|
||||
|
|
@ -135,7 +139,6 @@ enum rq_flag_bits {
|
|||
/* request only flags */
|
||||
__REQ_SORTED, /* elevator knows about this request */
|
||||
__REQ_SOFTBARRIER, /* may not be passed by ioscheduler */
|
||||
__REQ_FUA, /* forced unit access */
|
||||
__REQ_NOMERGE, /* don't touch this for merging */
|
||||
__REQ_STARTED, /* drive already may have started this one */
|
||||
__REQ_DONTPREP, /* don't call prep for this one */
|
||||
|
|
@ -146,11 +149,9 @@ enum rq_flag_bits {
|
|||
__REQ_PREEMPT, /* set for "ide_preempt" requests */
|
||||
__REQ_ALLOCED, /* request came from our alloc pool */
|
||||
__REQ_COPY_USER, /* contains copies of user pages */
|
||||
__REQ_FLUSH, /* request for cache flush */
|
||||
__REQ_FLUSH_SEQ, /* request for flush sequence */
|
||||
__REQ_IO_STAT, /* account I/O stat */
|
||||
__REQ_MIXED_MERGE, /* merge of different types, fail separately */
|
||||
__REQ_SECURE, /* secure discard (used with __REQ_DISCARD) */
|
||||
__REQ_NR_BITS, /* stops here */
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ struct request_pm_state;
|
|||
struct blk_trace;
|
||||
struct request;
|
||||
struct sg_io_hdr;
|
||||
struct bsg_job;
|
||||
|
||||
#define BLKDEV_MIN_RQ 4
|
||||
#define BLKDEV_MAX_RQ 128 /* Default maximum */
|
||||
|
|
@ -117,6 +118,7 @@ struct request {
|
|||
struct {
|
||||
unsigned int seq;
|
||||
struct list_head list;
|
||||
rq_end_io_fn *saved_end_io;
|
||||
} flush;
|
||||
};
|
||||
|
||||
|
|
@ -209,6 +211,7 @@ typedef int (merge_bvec_fn) (struct request_queue *, struct bvec_merge_data *,
|
|||
typedef void (softirq_done_fn)(struct request *);
|
||||
typedef int (dma_drain_needed_fn)(struct request *);
|
||||
typedef int (lld_busy_fn) (struct request_queue *q);
|
||||
typedef int (bsg_job_fn) (struct bsg_job *);
|
||||
|
||||
enum blk_eh_timer_return {
|
||||
BLK_EH_NOT_HANDLED,
|
||||
|
|
@ -375,6 +378,8 @@ struct request_queue {
|
|||
struct mutex sysfs_lock;
|
||||
|
||||
#if defined(CONFIG_BLK_DEV_BSG)
|
||||
bsg_job_fn *bsg_job_fn;
|
||||
int bsg_job_size;
|
||||
struct bsg_class_device bsg_dev;
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
enum blktrace_cat {
|
||||
BLK_TC_READ = 1 << 0, /* reads */
|
||||
BLK_TC_WRITE = 1 << 1, /* writes */
|
||||
BLK_TC_BARRIER = 1 << 2, /* barrier */
|
||||
BLK_TC_FLUSH = 1 << 2, /* flush */
|
||||
BLK_TC_SYNC = 1 << 3, /* sync IO */
|
||||
BLK_TC_SYNCIO = BLK_TC_SYNC,
|
||||
BLK_TC_QUEUE = 1 << 4, /* queueing/merging */
|
||||
|
|
@ -28,8 +28,9 @@ enum blktrace_cat {
|
|||
BLK_TC_META = 1 << 12, /* metadata */
|
||||
BLK_TC_DISCARD = 1 << 13, /* discard requests */
|
||||
BLK_TC_DRV_DATA = 1 << 14, /* binary per-driver data */
|
||||
BLK_TC_FUA = 1 << 15, /* fua requests */
|
||||
|
||||
BLK_TC_END = 1 << 15, /* only 16-bits, reminder */
|
||||
BLK_TC_END = 1 << 15, /* we've run out of bits! */
|
||||
};
|
||||
|
||||
#define BLK_TC_SHIFT (16)
|
||||
|
|
|
|||
73
include/linux/bsg-lib.h
Normal file
73
include/linux/bsg-lib.h
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* BSG helper library
|
||||
*
|
||||
* Copyright (C) 2008 James Smart, Emulex Corporation
|
||||
* Copyright (C) 2011 Red Hat, Inc. All rights reserved.
|
||||
* Copyright (C) 2011 Mike Christie
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
#ifndef _BLK_BSG_
|
||||
#define _BLK_BSG_
|
||||
|
||||
#include <linux/blkdev.h>
|
||||
|
||||
struct request;
|
||||
struct device;
|
||||
struct scatterlist;
|
||||
struct request_queue;
|
||||
|
||||
struct bsg_buffer {
|
||||
unsigned int payload_len;
|
||||
int sg_cnt;
|
||||
struct scatterlist *sg_list;
|
||||
};
|
||||
|
||||
struct bsg_job {
|
||||
struct device *dev;
|
||||
struct request *req;
|
||||
|
||||
/* Transport/driver specific request/reply structs */
|
||||
void *request;
|
||||
void *reply;
|
||||
|
||||
unsigned int request_len;
|
||||
unsigned int reply_len;
|
||||
/*
|
||||
* On entry : reply_len indicates the buffer size allocated for
|
||||
* the reply.
|
||||
*
|
||||
* Upon completion : the message handler must set reply_len
|
||||
* to indicates the size of the reply to be returned to the
|
||||
* caller.
|
||||
*/
|
||||
|
||||
/* DMA payloads for the request/response */
|
||||
struct bsg_buffer request_payload;
|
||||
struct bsg_buffer reply_payload;
|
||||
|
||||
void *dd_data; /* Used for driver-specific storage */
|
||||
};
|
||||
|
||||
void bsg_job_done(struct bsg_job *job, int result,
|
||||
unsigned int reply_payload_rcv_len);
|
||||
int bsg_setup_queue(struct device *dev, struct request_queue *q, char *name,
|
||||
bsg_job_fn *job_fn, int dd_job_size);
|
||||
void bsg_request_fn(struct request_queue *q);
|
||||
void bsg_remove_queue(struct request_queue *q);
|
||||
void bsg_goose_queue(struct request_queue *q);
|
||||
|
||||
#endif
|
||||
|
|
@ -438,7 +438,6 @@ asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds,
|
|||
struct compat_timespec __user *tsp,
|
||||
const compat_sigset_t __user *sigmask,
|
||||
compat_size_t sigsetsize);
|
||||
asmlinkage long compat_sys_nfsservctl(int cmd, void *notused, void *notused2);
|
||||
asmlinkage long compat_sys_signalfd4(int ufd,
|
||||
const compat_sigset_t __user *sigmask,
|
||||
compat_size_t sigsetsize, int flags);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* connector.h
|
||||
*
|
||||
* 2004-2005 Copyright (c) Evgeniy Polyakov <johnpol@2ka.mipt.ru>
|
||||
* 2004-2005 Copyright (c) Evgeniy Polyakov <zbr@ioremap.net>
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
|
|||
|
|
@ -122,6 +122,8 @@ struct cpuidle_driver {
|
|||
};
|
||||
|
||||
#ifdef CONFIG_CPU_IDLE
|
||||
extern void disable_cpuidle(void);
|
||||
extern int cpuidle_idle_call(void);
|
||||
|
||||
extern int cpuidle_register_driver(struct cpuidle_driver *drv);
|
||||
struct cpuidle_driver *cpuidle_get_driver(void);
|
||||
|
|
@ -135,6 +137,8 @@ extern int cpuidle_enable_device(struct cpuidle_device *dev);
|
|||
extern void cpuidle_disable_device(struct cpuidle_device *dev);
|
||||
|
||||
#else
|
||||
static inline void disable_cpuidle(void) { }
|
||||
static inline int cpuidle_idle_call(void) { return -ENODEV; }
|
||||
|
||||
static inline int cpuidle_register_driver(struct cpuidle_driver *drv)
|
||||
{return -ENODEV; }
|
||||
|
|
|
|||
|
|
@ -265,10 +265,11 @@ static inline void put_cred(const struct cred *_cred)
|
|||
/**
|
||||
* current_cred - Access the current task's subjective credentials
|
||||
*
|
||||
* Access the subjective credentials of the current task.
|
||||
* Access the subjective credentials of the current task. RCU-safe,
|
||||
* since nobody else can modify it.
|
||||
*/
|
||||
#define current_cred() \
|
||||
(current->cred)
|
||||
rcu_dereference_protected(current->cred, 1)
|
||||
|
||||
/**
|
||||
* __task_cred - Access a task's objective credentials
|
||||
|
|
@ -306,8 +307,8 @@ static inline void put_cred(const struct cred *_cred)
|
|||
#define get_current_user() \
|
||||
({ \
|
||||
struct user_struct *__u; \
|
||||
struct cred *__cred; \
|
||||
__cred = (struct cred *) current_cred(); \
|
||||
const struct cred *__cred; \
|
||||
__cred = current_cred(); \
|
||||
__u = get_uid(__cred->user); \
|
||||
__u; \
|
||||
})
|
||||
|
|
@ -321,8 +322,8 @@ static inline void put_cred(const struct cred *_cred)
|
|||
#define get_current_groups() \
|
||||
({ \
|
||||
struct group_info *__groups; \
|
||||
struct cred *__cred; \
|
||||
__cred = (struct cred *) current_cred(); \
|
||||
const struct cred *__cred; \
|
||||
__cred = current_cred(); \
|
||||
__groups = get_group_info(__cred->group_info); \
|
||||
__groups; \
|
||||
})
|
||||
|
|
@ -341,7 +342,7 @@ static inline void put_cred(const struct cred *_cred)
|
|||
|
||||
#define current_cred_xxx(xxx) \
|
||||
({ \
|
||||
current->cred->xxx; \
|
||||
current_cred()->xxx; \
|
||||
})
|
||||
|
||||
#define current_uid() (current_cred_xxx(uid))
|
||||
|
|
|
|||
|
|
@ -3,11 +3,16 @@
|
|||
|
||||
#define SHA_DIGEST_WORDS 5
|
||||
#define SHA_MESSAGE_BYTES (512 /*bits*/ / 8)
|
||||
#define SHA_WORKSPACE_WORDS 80
|
||||
#define SHA_WORKSPACE_WORDS 16
|
||||
|
||||
void sha_init(__u32 *buf);
|
||||
void sha_transform(__u32 *digest, const char *data, __u32 *W);
|
||||
|
||||
#define MD5_DIGEST_WORDS 4
|
||||
#define MD5_MESSAGE_BYTES 64
|
||||
|
||||
void md5_transform(__u32 *hash, __u32 const *in);
|
||||
|
||||
__u32 half_md4_transform(__u32 buf[4], __u32 const in[8]);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -180,12 +180,12 @@ struct dentry_operations {
|
|||
*/
|
||||
|
||||
/* d_flags entries */
|
||||
#define DCACHE_AUTOFS_PENDING 0x0001 /* autofs: "under construction" */
|
||||
#define DCACHE_NFSFS_RENAMED 0x0002
|
||||
/* this dentry has been "silly renamed" and has to be deleted on the last
|
||||
* dput() */
|
||||
#define DCACHE_OP_HASH 0x0001
|
||||
#define DCACHE_OP_COMPARE 0x0002
|
||||
#define DCACHE_OP_REVALIDATE 0x0004
|
||||
#define DCACHE_OP_DELETE 0x0008
|
||||
|
||||
#define DCACHE_DISCONNECTED 0x0004
|
||||
#define DCACHE_DISCONNECTED 0x0010
|
||||
/* This dentry is possibly not currently connected to the dcache tree, in
|
||||
* which case its parent will either be itself, or will have this flag as
|
||||
* well. nfsd will not use a dentry with this bit set, but will first
|
||||
|
|
@ -196,22 +196,18 @@ struct dentry_operations {
|
|||
* dentry into place and return that dentry rather than the passed one,
|
||||
* typically using d_splice_alias. */
|
||||
|
||||
#define DCACHE_REFERENCED 0x0008 /* Recently used, don't discard. */
|
||||
#define DCACHE_RCUACCESS 0x0010 /* Entry has ever been RCU-visible */
|
||||
#define DCACHE_INOTIFY_PARENT_WATCHED 0x0020
|
||||
/* Parent inode is watched by inotify */
|
||||
|
||||
#define DCACHE_COOKIE 0x0040 /* For use by dcookie subsystem */
|
||||
#define DCACHE_FSNOTIFY_PARENT_WATCHED 0x0080
|
||||
/* Parent inode is watched by some fsnotify listener */
|
||||
#define DCACHE_REFERENCED 0x0020 /* Recently used, don't discard. */
|
||||
#define DCACHE_RCUACCESS 0x0040 /* Entry has ever been RCU-visible */
|
||||
|
||||
#define DCACHE_CANT_MOUNT 0x0100
|
||||
#define DCACHE_GENOCIDE 0x0200
|
||||
|
||||
#define DCACHE_OP_HASH 0x1000
|
||||
#define DCACHE_OP_COMPARE 0x2000
|
||||
#define DCACHE_OP_REVALIDATE 0x4000
|
||||
#define DCACHE_OP_DELETE 0x8000
|
||||
#define DCACHE_NFSFS_RENAMED 0x1000
|
||||
/* this dentry has been "silly renamed" and has to be deleted on the last
|
||||
* dput() */
|
||||
#define DCACHE_COOKIE 0x2000 /* For use by dcookie subsystem */
|
||||
#define DCACHE_FSNOTIFY_PARENT_WATCHED 0x4000
|
||||
/* Parent inode is watched by some fsnotify listener */
|
||||
|
||||
#define DCACHE_MOUNTED 0x10000 /* is a mountpoint */
|
||||
#define DCACHE_NEED_AUTOMOUNT 0x20000 /* handle automount on this dir */
|
||||
|
|
|
|||
|
|
@ -208,6 +208,49 @@ struct dm_target_callbacks {
|
|||
int dm_register_target(struct target_type *t);
|
||||
void dm_unregister_target(struct target_type *t);
|
||||
|
||||
/*
|
||||
* Target argument parsing.
|
||||
*/
|
||||
struct dm_arg_set {
|
||||
unsigned argc;
|
||||
char **argv;
|
||||
};
|
||||
|
||||
/*
|
||||
* The minimum and maximum value of a numeric argument, together with
|
||||
* the error message to use if the number is found to be outside that range.
|
||||
*/
|
||||
struct dm_arg {
|
||||
unsigned min;
|
||||
unsigned max;
|
||||
char *error;
|
||||
};
|
||||
|
||||
/*
|
||||
* Validate the next argument, either returning it as *value or, if invalid,
|
||||
* returning -EINVAL and setting *error.
|
||||
*/
|
||||
int dm_read_arg(struct dm_arg *arg, struct dm_arg_set *arg_set,
|
||||
unsigned *value, char **error);
|
||||
|
||||
/*
|
||||
* Process the next argument as the start of a group containing between
|
||||
* arg->min and arg->max further arguments. Either return the size as
|
||||
* *num_args or, if invalid, return -EINVAL and set *error.
|
||||
*/
|
||||
int dm_read_arg_group(struct dm_arg *arg, struct dm_arg_set *arg_set,
|
||||
unsigned *num_args, char **error);
|
||||
|
||||
/*
|
||||
* Return the current argument and shift to the next.
|
||||
*/
|
||||
const char *dm_shift_arg(struct dm_arg_set *as);
|
||||
|
||||
/*
|
||||
* Move through num_args arguments.
|
||||
*/
|
||||
void dm_consume_args(struct dm_arg_set *as, unsigned num_args);
|
||||
|
||||
/*-----------------------------------------------------------------
|
||||
* Functions for creating and manipulating mapped devices.
|
||||
* Drop the reference with dm_put when you finish with the object.
|
||||
|
|
|
|||
|
|
@ -267,9 +267,9 @@ enum {
|
|||
#define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
|
||||
|
||||
#define DM_VERSION_MAJOR 4
|
||||
#define DM_VERSION_MINOR 20
|
||||
#define DM_VERSION_MINOR 21
|
||||
#define DM_VERSION_PATCHLEVEL 0
|
||||
#define DM_VERSION_EXTRA "-ioctl (2011-02-02)"
|
||||
#define DM_VERSION_EXTRA "-ioctl (2011-07-06)"
|
||||
|
||||
/* Status bits */
|
||||
#define DM_READONLY_FLAG (1 << 0) /* In/Out */
|
||||
|
|
|
|||
|
|
@ -42,5 +42,20 @@ int dm_kcopyd_copy(struct dm_kcopyd_client *kc, struct dm_io_region *from,
|
|||
unsigned num_dests, struct dm_io_region *dests,
|
||||
unsigned flags, dm_kcopyd_notify_fn fn, void *context);
|
||||
|
||||
/*
|
||||
* Prepare a callback and submit it via the kcopyd thread.
|
||||
*
|
||||
* dm_kcopyd_prepare_callback allocates a callback structure and returns it.
|
||||
* It must not be called from interrupt context.
|
||||
* The returned value should be passed into dm_kcopyd_do_callback.
|
||||
*
|
||||
* dm_kcopyd_do_callback submits the callback.
|
||||
* It may be called from interrupt context.
|
||||
* The callback is issued from the kcopyd thread.
|
||||
*/
|
||||
void *dm_kcopyd_prepare_callback(struct dm_kcopyd_client *kc,
|
||||
dm_kcopyd_notify_fn fn, void *context);
|
||||
void dm_kcopyd_do_callback(void *job, int read_err, unsigned long write_err);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_DM_KCOPYD_H */
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
#include <linux/rtc.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/pfn.h>
|
||||
#include <linux/pstore.h>
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/system.h>
|
||||
|
|
@ -232,6 +233,9 @@ typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **capsules,
|
|||
#define UV_SYSTEM_TABLE_GUID \
|
||||
EFI_GUID( 0x3b13a7d4, 0x633e, 0x11dd, 0x93, 0xec, 0xda, 0x25, 0x56, 0xd8, 0x95, 0x93 )
|
||||
|
||||
#define LINUX_EFI_CRASH_GUID \
|
||||
EFI_GUID( 0xcfc8fc79, 0xbe2e, 0x4ddc, 0x97, 0xf0, 0x9f, 0x98, 0xbf, 0xe2, 0x98, 0xa0 )
|
||||
|
||||
typedef struct {
|
||||
efi_guid_t guid;
|
||||
unsigned long table;
|
||||
|
|
@ -458,6 +462,8 @@ struct efivars {
|
|||
struct kset *kset;
|
||||
struct bin_attribute *new_var, *del_var;
|
||||
const struct efivar_operations *ops;
|
||||
struct efivar_entry *walk_entry;
|
||||
struct pstore_info efi_pstore_info;
|
||||
};
|
||||
|
||||
int register_efivars(struct efivars *efivars,
|
||||
|
|
|
|||
|
|
@ -25,10 +25,6 @@ struct fault_attr {
|
|||
unsigned long reject_end;
|
||||
|
||||
unsigned long count;
|
||||
|
||||
#ifdef CONFIG_FAULT_INJECTION_DEBUG_FS
|
||||
struct dentry *dir;
|
||||
#endif
|
||||
};
|
||||
|
||||
#define FAULT_ATTR_INITIALIZER { \
|
||||
|
|
@ -45,19 +41,15 @@ bool should_fail(struct fault_attr *attr, ssize_t size);
|
|||
|
||||
#ifdef CONFIG_FAULT_INJECTION_DEBUG_FS
|
||||
|
||||
int init_fault_attr_dentries(struct fault_attr *attr, const char *name);
|
||||
void cleanup_fault_attr_dentries(struct fault_attr *attr);
|
||||
struct dentry *fault_create_debugfs_attr(const char *name,
|
||||
struct dentry *parent, struct fault_attr *attr);
|
||||
|
||||
#else /* CONFIG_FAULT_INJECTION_DEBUG_FS */
|
||||
|
||||
static inline int init_fault_attr_dentries(struct fault_attr *attr,
|
||||
const char *name)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline void cleanup_fault_attr_dentries(struct fault_attr *attr)
|
||||
static inline struct dentry *fault_create_debugfs_attr(const char *name,
|
||||
struct dentry *parent, struct fault_attr *attr)
|
||||
{
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */
|
||||
|
|
|
|||
|
|
@ -738,22 +738,54 @@ static inline int mapping_writably_mapped(struct address_space *mapping)
|
|||
struct posix_acl;
|
||||
#define ACL_NOT_CACHED ((void *)(-1))
|
||||
|
||||
#define IOP_FASTPERM 0x0001
|
||||
#define IOP_LOOKUP 0x0002
|
||||
#define IOP_NOFOLLOW 0x0004
|
||||
|
||||
/*
|
||||
* Keep mostly read-only and often accessed (especially for
|
||||
* the RCU path lookup and 'stat' data) fields at the beginning
|
||||
* of the 'struct inode'
|
||||
*/
|
||||
struct inode {
|
||||
/* RCU path lookup touches following: */
|
||||
umode_t i_mode;
|
||||
unsigned short i_opflags;
|
||||
uid_t i_uid;
|
||||
gid_t i_gid;
|
||||
unsigned int i_flags;
|
||||
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
struct posix_acl *i_acl;
|
||||
struct posix_acl *i_default_acl;
|
||||
#endif
|
||||
|
||||
const struct inode_operations *i_op;
|
||||
struct super_block *i_sb;
|
||||
struct address_space *i_mapping;
|
||||
|
||||
spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */
|
||||
unsigned int i_flags;
|
||||
unsigned long i_state;
|
||||
#ifdef CONFIG_SECURITY
|
||||
void *i_security;
|
||||
#endif
|
||||
struct mutex i_mutex;
|
||||
|
||||
/* Stat data, not accessed from path walking */
|
||||
unsigned long i_ino;
|
||||
unsigned int i_nlink;
|
||||
dev_t i_rdev;
|
||||
loff_t i_size;
|
||||
struct timespec i_atime;
|
||||
struct timespec i_mtime;
|
||||
struct timespec i_ctime;
|
||||
unsigned int i_blkbits;
|
||||
blkcnt_t i_blocks;
|
||||
|
||||
#ifdef __NEED_I_SIZE_ORDERED
|
||||
seqcount_t i_size_seqcount;
|
||||
#endif
|
||||
|
||||
/* Misc */
|
||||
unsigned long i_state;
|
||||
spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */
|
||||
struct mutex i_mutex;
|
||||
|
||||
unsigned long dirtied_when; /* jiffies of first dirtying */
|
||||
|
||||
|
|
@ -765,25 +797,12 @@ struct inode {
|
|||
struct list_head i_dentry;
|
||||
struct rcu_head i_rcu;
|
||||
};
|
||||
unsigned long i_ino;
|
||||
atomic_t i_count;
|
||||
unsigned int i_nlink;
|
||||
dev_t i_rdev;
|
||||
unsigned int i_blkbits;
|
||||
u64 i_version;
|
||||
loff_t i_size;
|
||||
#ifdef __NEED_I_SIZE_ORDERED
|
||||
seqcount_t i_size_seqcount;
|
||||
#endif
|
||||
struct timespec i_atime;
|
||||
struct timespec i_mtime;
|
||||
struct timespec i_ctime;
|
||||
blkcnt_t i_blocks;
|
||||
unsigned short i_bytes;
|
||||
atomic_t i_dio_count;
|
||||
const struct file_operations *i_fop; /* former ->i_op->default_file_ops */
|
||||
struct file_lock *i_flock;
|
||||
struct address_space *i_mapping;
|
||||
struct address_space i_data;
|
||||
#ifdef CONFIG_QUOTA
|
||||
struct dquot *i_dquot[MAXQUOTAS];
|
||||
|
|
@ -806,10 +825,6 @@ struct inode {
|
|||
atomic_t i_readcount; /* struct files open RO */
|
||||
#endif
|
||||
atomic_t i_writecount;
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
struct posix_acl *i_acl;
|
||||
struct posix_acl *i_default_acl;
|
||||
#endif
|
||||
void *i_private; /* fs or device private pointer */
|
||||
};
|
||||
|
||||
|
|
@ -2303,6 +2318,11 @@ extern struct inode * iget5_locked(struct super_block *, unsigned long, int (*te
|
|||
extern struct inode * iget_locked(struct super_block *, unsigned long);
|
||||
extern int insert_inode_locked4(struct inode *, unsigned long, int (*test)(struct inode *, void *), void *);
|
||||
extern int insert_inode_locked(struct inode *);
|
||||
#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
||||
extern void lockdep_annotate_inode_mutex_key(struct inode *inode);
|
||||
#else
|
||||
static inline void lockdep_annotate_inode_mutex_key(struct inode *inode) { };
|
||||
#endif
|
||||
extern void unlock_new_inode(struct inode *);
|
||||
extern unsigned int get_next_ino(void);
|
||||
|
||||
|
|
@ -2317,11 +2337,18 @@ extern int should_remove_suid(struct dentry *);
|
|||
extern int file_remove_suid(struct file *);
|
||||
|
||||
extern void __insert_inode_hash(struct inode *, unsigned long hashval);
|
||||
extern void remove_inode_hash(struct inode *);
|
||||
static inline void insert_inode_hash(struct inode *inode)
|
||||
{
|
||||
__insert_inode_hash(inode, inode->i_ino);
|
||||
}
|
||||
|
||||
extern void __remove_inode_hash(struct inode *);
|
||||
static inline void remove_inode_hash(struct inode *inode)
|
||||
{
|
||||
if (!inode_unhashed(inode))
|
||||
__remove_inode_hash(inode);
|
||||
}
|
||||
|
||||
extern void inode_sb_list_add(struct inode *inode);
|
||||
|
||||
#ifdef CONFIG_BLOCK
|
||||
|
|
|
|||
|
|
@ -47,6 +47,9 @@
|
|||
* - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct
|
||||
* fuse_ioctl_iovec' instead of ambiguous 'struct iovec'
|
||||
* - add FUSE_IOCTL_32BIT flag
|
||||
*
|
||||
* 7.17
|
||||
* - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_FUSE_H
|
||||
|
|
@ -78,7 +81,7 @@
|
|||
#define FUSE_KERNEL_VERSION 7
|
||||
|
||||
/** Minor version number of this interface */
|
||||
#define FUSE_KERNEL_MINOR_VERSION 16
|
||||
#define FUSE_KERNEL_MINOR_VERSION 17
|
||||
|
||||
/** The node ID of the root inode */
|
||||
#define FUSE_ROOT_ID 1
|
||||
|
|
@ -153,8 +156,10 @@ struct fuse_file_lock {
|
|||
/**
|
||||
* INIT request/reply flags
|
||||
*
|
||||
* FUSE_POSIX_LOCKS: remote locking for POSIX file locks
|
||||
* FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".."
|
||||
* FUSE_DONT_MASK: don't apply umask to file mode on create operations
|
||||
* FUSE_FLOCK_LOCKS: remote locking for BSD style file locks
|
||||
*/
|
||||
#define FUSE_ASYNC_READ (1 << 0)
|
||||
#define FUSE_POSIX_LOCKS (1 << 1)
|
||||
|
|
@ -163,6 +168,7 @@ struct fuse_file_lock {
|
|||
#define FUSE_EXPORT_SUPPORT (1 << 4)
|
||||
#define FUSE_BIG_WRITES (1 << 5)
|
||||
#define FUSE_DONT_MASK (1 << 6)
|
||||
#define FUSE_FLOCK_LOCKS (1 << 10)
|
||||
|
||||
/**
|
||||
* CUSE INIT request/reply flags
|
||||
|
|
@ -175,6 +181,7 @@ struct fuse_file_lock {
|
|||
* Release flags
|
||||
*/
|
||||
#define FUSE_RELEASE_FLUSH (1 << 0)
|
||||
#define FUSE_RELEASE_FLOCK_UNLOCK (1 << 1)
|
||||
|
||||
/**
|
||||
* Getattr flags
|
||||
|
|
|
|||
|
|
@ -1,8 +1,26 @@
|
|||
/*
|
||||
* Basic general purpose allocator for managing special purpose memory
|
||||
* not managed by the regular kmalloc/kfree interface.
|
||||
* Uses for this includes on-device special memory, uncached memory
|
||||
* etc.
|
||||
* Basic general purpose allocator for managing special purpose
|
||||
* memory, for example, memory that is not managed by the regular
|
||||
* kmalloc/kfree interface. Uses for this includes on-device special
|
||||
* memory, uncached memory etc.
|
||||
*
|
||||
* It is safe to use the allocator in NMI handlers and other special
|
||||
* unblockable contexts that could otherwise deadlock on locks. This
|
||||
* is implemented by using atomic operations and retries on any
|
||||
* conflicts. The disadvantage is that there may be livelocks in
|
||||
* extreme cases. For better scalability, one allocator can be used
|
||||
* for each CPU.
|
||||
*
|
||||
* The lockless operation only works if there is enough memory
|
||||
* available. If new memory is added to the pool a lock has to be
|
||||
* still taken. So any user relying on locklessness has to ensure
|
||||
* that sufficient memory is preallocated.
|
||||
*
|
||||
* The basic atomic operation of this allocator is cmpxchg on long.
|
||||
* On architectures that don't have NMI-safe cmpxchg implementation,
|
||||
* the allocator can NOT be used in NMI handler. So code uses the
|
||||
* allocator in NMI handler should depend on
|
||||
* CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG.
|
||||
*
|
||||
* This source code is licensed under the GNU General Public License,
|
||||
* Version 2. See the file COPYING for more details.
|
||||
|
|
@ -15,7 +33,7 @@
|
|||
* General purpose special memory pool descriptor.
|
||||
*/
|
||||
struct gen_pool {
|
||||
rwlock_t lock;
|
||||
spinlock_t lock;
|
||||
struct list_head chunks; /* list of chunks in this pool */
|
||||
int min_alloc_order; /* minimum allocation order */
|
||||
};
|
||||
|
|
@ -24,8 +42,8 @@ struct gen_pool {
|
|||
* General purpose special memory pool chunk descriptor.
|
||||
*/
|
||||
struct gen_pool_chunk {
|
||||
spinlock_t lock;
|
||||
struct list_head next_chunk; /* next chunk in pool */
|
||||
atomic_t avail;
|
||||
phys_addr_t phys_addr; /* physical starting address of memory chunk */
|
||||
unsigned long start_addr; /* starting address of memory chunk */
|
||||
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,
|
|||
extern void gen_pool_destroy(struct gen_pool *);
|
||||
extern unsigned long gen_pool_alloc(struct gen_pool *, size_t);
|
||||
extern void gen_pool_free(struct gen_pool *, unsigned long, size_t);
|
||||
extern void gen_pool_for_each_chunk(struct gen_pool *,
|
||||
void (*)(struct gen_pool *, struct gen_pool_chunk *, void *), void *);
|
||||
extern size_t gen_pool_avail(struct gen_pool *);
|
||||
extern size_t gen_pool_size(struct gen_pool *);
|
||||
#endif /* __GENALLOC_H__ */
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ struct vm_area_struct;
|
|||
*/
|
||||
#define __GFP_NOTRACK_FALSE_POSITIVE (__GFP_NOTRACK)
|
||||
|
||||
#define __GFP_BITS_SHIFT 23 /* Room for 23 __GFP_FOO bits */
|
||||
#define __GFP_BITS_SHIFT 24 /* Room for N __GFP_FOO bits */
|
||||
#define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1))
|
||||
|
||||
/* This equals 0, but use constants in case they ever change */
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ static inline u32 hash_32(u32 val, unsigned int bits)
|
|||
return hash >> (32 - bits);
|
||||
}
|
||||
|
||||
static inline unsigned long hash_ptr(void *ptr, unsigned int bits)
|
||||
static inline unsigned long hash_ptr(const void *ptr, unsigned int bits)
|
||||
{
|
||||
return hash_long((unsigned long)ptr, bits);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -146,6 +146,10 @@ void ida_remove(struct ida *ida, int id);
|
|||
void ida_destroy(struct ida *ida);
|
||||
void ida_init(struct ida *ida);
|
||||
|
||||
int ida_simple_get(struct ida *ida, unsigned int start, unsigned int end,
|
||||
gfp_t gfp_mask);
|
||||
void ida_simple_remove(struct ida *ida, unsigned int id);
|
||||
|
||||
void __init idr_init_cache(void);
|
||||
|
||||
#endif /* __IDR_H__ */
|
||||
|
|
|
|||
|
|
@ -438,6 +438,8 @@ struct input_keymap_entry {
|
|||
#define KEY_WIMAX 246
|
||||
#define KEY_RFKILL 247 /* Key that controls all radios */
|
||||
|
||||
#define KEY_MICMUTE 248 /* Mute / unmute the microphone */
|
||||
|
||||
/* Code 255 is reserved for special needs of AT keyboard driver */
|
||||
|
||||
#define BTN_MISC 0x100
|
||||
|
|
|
|||
|
|
@ -162,6 +162,7 @@ extern int allocate_resource(struct resource *root, struct resource *new,
|
|||
resource_size_t,
|
||||
resource_size_t),
|
||||
void *alignf_data);
|
||||
struct resource *lookup_resource(struct resource *root, resource_size_t start);
|
||||
int adjust_resource(struct resource *res, resource_size_t start,
|
||||
resource_size_t size);
|
||||
resource_size_t resource_alignment(struct resource *res);
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
#include <linux/errno.h>
|
||||
#include <linux/topology.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
|
@ -547,7 +548,15 @@ static inline struct msi_desc *irq_data_get_msi(struct irq_data *d)
|
|||
return d->msi_desc;
|
||||
}
|
||||
|
||||
int irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node);
|
||||
int __irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node,
|
||||
struct module *owner);
|
||||
|
||||
static inline int irq_alloc_descs(int irq, unsigned int from, unsigned int cnt,
|
||||
int node)
|
||||
{
|
||||
return __irq_alloc_descs(irq, from, cnt, node, THIS_MODULE);
|
||||
}
|
||||
|
||||
void irq_free_descs(unsigned int irq, unsigned int cnt);
|
||||
int irq_reserve_irqs(unsigned int from, unsigned int cnt);
|
||||
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ struct irq_desc {
|
|||
#ifdef CONFIG_PROC_FS
|
||||
struct proc_dir_entry *dir;
|
||||
#endif
|
||||
struct module *owner;
|
||||
const char *name;
|
||||
} ____cacheline_internodealigned_in_smp;
|
||||
|
||||
|
|
|
|||
|
|
@ -1329,12 +1329,6 @@ extern int jbd_blocks_per_page(struct inode *inode);
|
|||
#define BUFFER_TRACE2(bh, bh2, info) do {} while (0)
|
||||
#define JBUFFER_TRACE(jh, info) do {} while (0)
|
||||
|
||||
/*
|
||||
* jbd2_dev_to_name is a utility function used by the jbd2 and ext4
|
||||
* tracing infrastructure to map a dev_t to a device name.
|
||||
*/
|
||||
extern const char *jbd2_dev_to_name(dev_t device);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _LINUX_JBD2_H */
|
||||
|
|
|
|||
32
include/linux/kconfig.h
Normal file
32
include/linux/kconfig.h
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
#ifndef __LINUX_KCONFIG_H
|
||||
#define __LINUX_KCONFIG_H
|
||||
|
||||
#include <generated/autoconf.h>
|
||||
|
||||
/*
|
||||
* Helper macros to use CONFIG_ options in C expressions. Note that
|
||||
* these only work with boolean and tristate options.
|
||||
*/
|
||||
|
||||
/*
|
||||
* IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',
|
||||
* 0 otherwise.
|
||||
*
|
||||
*/
|
||||
#define IS_ENABLED(option) \
|
||||
(__enabled_ ## option || __enabled_ ## option ## _MODULE)
|
||||
|
||||
/*
|
||||
* IS_BUILTIN(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', 0
|
||||
* otherwise. For boolean options, this is equivalent to
|
||||
* IS_ENABLED(CONFIG_FOO).
|
||||
*/
|
||||
#define IS_BUILTIN(option) __enabled_ ## option
|
||||
|
||||
/*
|
||||
* IS_MODULE(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'm', 0
|
||||
* otherwise.
|
||||
*/
|
||||
#define IS_MODULE(option) __enabled_ ## option ## _MODULE
|
||||
|
||||
#endif /* __LINUX_KCONFIG_H */
|
||||
126
include/linux/llist.h
Normal file
126
include/linux/llist.h
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
#ifndef LLIST_H
|
||||
#define LLIST_H
|
||||
/*
|
||||
* Lock-less NULL terminated single linked list
|
||||
*
|
||||
* If there are multiple producers and multiple consumers, llist_add
|
||||
* can be used in producers and llist_del_all can be used in
|
||||
* consumers. They can work simultaneously without lock. But
|
||||
* llist_del_first can not be used here. Because llist_del_first
|
||||
* depends on list->first->next does not changed if list->first is not
|
||||
* changed during its operation, but llist_del_first, llist_add,
|
||||
* llist_add (or llist_del_all, llist_add, llist_add) sequence in
|
||||
* another consumer may violate that.
|
||||
*
|
||||
* If there are multiple producers and one consumer, llist_add can be
|
||||
* used in producers and llist_del_all or llist_del_first can be used
|
||||
* in the consumer.
|
||||
*
|
||||
* This can be summarized as follow:
|
||||
*
|
||||
* | add | del_first | del_all
|
||||
* add | - | - | -
|
||||
* del_first | | L | L
|
||||
* del_all | | | -
|
||||
*
|
||||
* Where "-" stands for no lock is needed, while "L" stands for lock
|
||||
* is needed.
|
||||
*
|
||||
* The list entries deleted via llist_del_all can be traversed with
|
||||
* traversing function such as llist_for_each etc. But the list
|
||||
* entries can not be traversed safely before deleted from the list.
|
||||
* The order of deleted entries is from the newest to the oldest added
|
||||
* one. If you want to traverse from the oldest to the newest, you
|
||||
* must reverse the order by yourself before traversing.
|
||||
*
|
||||
* The basic atomic operation of this list is cmpxchg on long. On
|
||||
* architectures that don't have NMI-safe cmpxchg implementation, the
|
||||
* list can NOT be used in NMI handler. So code uses the list in NMI
|
||||
* handler should depend on CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG.
|
||||
*/
|
||||
|
||||
struct llist_head {
|
||||
struct llist_node *first;
|
||||
};
|
||||
|
||||
struct llist_node {
|
||||
struct llist_node *next;
|
||||
};
|
||||
|
||||
#define LLIST_HEAD_INIT(name) { NULL }
|
||||
#define LLIST_HEAD(name) struct llist_head name = LLIST_HEAD_INIT(name)
|
||||
|
||||
/**
|
||||
* init_llist_head - initialize lock-less list head
|
||||
* @head: the head for your lock-less list
|
||||
*/
|
||||
static inline void init_llist_head(struct llist_head *list)
|
||||
{
|
||||
list->first = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* llist_entry - get the struct of this entry
|
||||
* @ptr: the &struct llist_node pointer.
|
||||
* @type: the type of the struct this is embedded in.
|
||||
* @member: the name of the llist_node within the struct.
|
||||
*/
|
||||
#define llist_entry(ptr, type, member) \
|
||||
container_of(ptr, type, member)
|
||||
|
||||
/**
|
||||
* llist_for_each - iterate over some deleted entries of a lock-less list
|
||||
* @pos: the &struct llist_node to use as a loop cursor
|
||||
* @node: the first entry of deleted list entries
|
||||
*
|
||||
* In general, some entries of the lock-less list can be traversed
|
||||
* safely only after being deleted from list, so start with an entry
|
||||
* instead of list head.
|
||||
*
|
||||
* If being used on entries deleted from lock-less list directly, the
|
||||
* traverse order is from the newest to the oldest added entry. If
|
||||
* you want to traverse from the oldest to the newest, you must
|
||||
* reverse the order by yourself before traversing.
|
||||
*/
|
||||
#define llist_for_each(pos, node) \
|
||||
for ((pos) = (node); pos; (pos) = (pos)->next)
|
||||
|
||||
/**
|
||||
* llist_for_each_entry - iterate over some deleted entries of lock-less list of given type
|
||||
* @pos: the type * to use as a loop cursor.
|
||||
* @node: the fist entry of deleted list entries.
|
||||
* @member: the name of the llist_node with the struct.
|
||||
*
|
||||
* In general, some entries of the lock-less list can be traversed
|
||||
* safely only after being removed from list, so start with an entry
|
||||
* instead of list head.
|
||||
*
|
||||
* If being used on entries deleted from lock-less list directly, the
|
||||
* traverse order is from the newest to the oldest added entry. If
|
||||
* you want to traverse from the oldest to the newest, you must
|
||||
* reverse the order by yourself before traversing.
|
||||
*/
|
||||
#define llist_for_each_entry(pos, node, member) \
|
||||
for ((pos) = llist_entry((node), typeof(*(pos)), member); \
|
||||
&(pos)->member != NULL; \
|
||||
(pos) = llist_entry((pos)->member.next, typeof(*(pos)), member))
|
||||
|
||||
/**
|
||||
* llist_empty - tests whether a lock-less list is empty
|
||||
* @head: the list to test
|
||||
*
|
||||
* Not guaranteed to be accurate or up to date. Just a quick way to
|
||||
* test whether the list is empty without deleting something from the
|
||||
* list.
|
||||
*/
|
||||
static inline int llist_empty(const struct llist_head *head)
|
||||
{
|
||||
return ACCESS_ONCE(head->first) == NULL;
|
||||
}
|
||||
|
||||
void llist_add(struct llist_node *new, struct llist_head *head);
|
||||
void llist_add_batch(struct llist_node *new_first, struct llist_node *new_last,
|
||||
struct llist_head *head);
|
||||
struct llist_node *llist_del_first(struct llist_head *head);
|
||||
struct llist_node *llist_del_all(struct llist_head *head);
|
||||
#endif /* LLIST_H */
|
||||
|
|
@ -64,7 +64,6 @@ struct loop_device {
|
|||
|
||||
struct request_queue *lo_queue;
|
||||
struct gendisk *lo_disk;
|
||||
struct list_head lo_list;
|
||||
};
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
@ -161,4 +160,8 @@ int loop_unregister_transfer(int number);
|
|||
#define LOOP_CHANGE_FD 0x4C06
|
||||
#define LOOP_SET_CAPACITY 0x4C07
|
||||
|
||||
/* /dev/loop-control interface */
|
||||
#define LOOP_CTL_ADD 0x4C80
|
||||
#define LOOP_CTL_REMOVE 0x4C81
|
||||
#define LOOP_CTL_GET_FREE 0x4C82
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -86,8 +86,6 @@ extern void mem_cgroup_uncharge_end(void);
|
|||
|
||||
extern void mem_cgroup_uncharge_page(struct page *page);
|
||||
extern void mem_cgroup_uncharge_cache_page(struct page *page);
|
||||
extern int mem_cgroup_shmem_charge_fallback(struct page *page,
|
||||
struct mm_struct *mm, gfp_t gfp_mask);
|
||||
|
||||
extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask);
|
||||
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)
|
|||
{
|
||||
}
|
||||
|
||||
static inline int mem_cgroup_shmem_charge_fallback(struct page *page,
|
||||
struct mm_struct *mm, gfp_t gfp_mask)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void mem_cgroup_add_lru_list(struct page *page, int lru)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
181
include/linux/mfd/aat2870.h
Normal file
181
include/linux/mfd/aat2870.h
Normal file
|
|
@ -0,0 +1,181 @@
|
|||
/*
|
||||
* linux/include/linux/mfd/aat2870.h
|
||||
*
|
||||
* Copyright (c) 2011, NVIDIA Corporation.
|
||||
* Author: Jin Park <jinyoungp@nvidia.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_MFD_AAT2870_H
|
||||
#define __LINUX_MFD_AAT2870_H
|
||||
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/i2c.h>
|
||||
|
||||
/* Register offsets */
|
||||
#define AAT2870_BL_CH_EN 0x00
|
||||
#define AAT2870_BLM 0x01
|
||||
#define AAT2870_BLS 0x02
|
||||
#define AAT2870_BL1 0x03
|
||||
#define AAT2870_BL2 0x04
|
||||
#define AAT2870_BL3 0x05
|
||||
#define AAT2870_BL4 0x06
|
||||
#define AAT2870_BL5 0x07
|
||||
#define AAT2870_BL6 0x08
|
||||
#define AAT2870_BL7 0x09
|
||||
#define AAT2870_BL8 0x0A
|
||||
#define AAT2870_FLR 0x0B
|
||||
#define AAT2870_FM 0x0C
|
||||
#define AAT2870_FS 0x0D
|
||||
#define AAT2870_ALS_CFG0 0x0E
|
||||
#define AAT2870_ALS_CFG1 0x0F
|
||||
#define AAT2870_ALS_CFG2 0x10
|
||||
#define AAT2870_AMB 0x11
|
||||
#define AAT2870_ALS0 0x12
|
||||
#define AAT2870_ALS1 0x13
|
||||
#define AAT2870_ALS2 0x14
|
||||
#define AAT2870_ALS3 0x15
|
||||
#define AAT2870_ALS4 0x16
|
||||
#define AAT2870_ALS5 0x17
|
||||
#define AAT2870_ALS6 0x18
|
||||
#define AAT2870_ALS7 0x19
|
||||
#define AAT2870_ALS8 0x1A
|
||||
#define AAT2870_ALS9 0x1B
|
||||
#define AAT2870_ALSA 0x1C
|
||||
#define AAT2870_ALSB 0x1D
|
||||
#define AAT2870_ALSC 0x1E
|
||||
#define AAT2870_ALSD 0x1F
|
||||
#define AAT2870_ALSE 0x20
|
||||
#define AAT2870_ALSF 0x21
|
||||
#define AAT2870_SUB_SET 0x22
|
||||
#define AAT2870_SUB_CTRL 0x23
|
||||
#define AAT2870_LDO_AB 0x24
|
||||
#define AAT2870_LDO_CD 0x25
|
||||
#define AAT2870_LDO_EN 0x26
|
||||
#define AAT2870_REG_NUM 0x27
|
||||
|
||||
/* Device IDs */
|
||||
enum aat2870_id {
|
||||
AAT2870_ID_BL,
|
||||
AAT2870_ID_LDOA,
|
||||
AAT2870_ID_LDOB,
|
||||
AAT2870_ID_LDOC,
|
||||
AAT2870_ID_LDOD
|
||||
};
|
||||
|
||||
/* Backlight channels */
|
||||
#define AAT2870_BL_CH1 0x01
|
||||
#define AAT2870_BL_CH2 0x02
|
||||
#define AAT2870_BL_CH3 0x04
|
||||
#define AAT2870_BL_CH4 0x08
|
||||
#define AAT2870_BL_CH5 0x10
|
||||
#define AAT2870_BL_CH6 0x20
|
||||
#define AAT2870_BL_CH7 0x40
|
||||
#define AAT2870_BL_CH8 0x80
|
||||
#define AAT2870_BL_CH_ALL 0xFF
|
||||
|
||||
/* Backlight current magnitude (mA) */
|
||||
enum aat2870_current {
|
||||
AAT2870_CURRENT_0_45 = 1,
|
||||
AAT2870_CURRENT_0_90,
|
||||
AAT2870_CURRENT_1_80,
|
||||
AAT2870_CURRENT_2_70,
|
||||
AAT2870_CURRENT_3_60,
|
||||
AAT2870_CURRENT_4_50,
|
||||
AAT2870_CURRENT_5_40,
|
||||
AAT2870_CURRENT_6_30,
|
||||
AAT2870_CURRENT_7_20,
|
||||
AAT2870_CURRENT_8_10,
|
||||
AAT2870_CURRENT_9_00,
|
||||
AAT2870_CURRENT_9_90,
|
||||
AAT2870_CURRENT_10_8,
|
||||
AAT2870_CURRENT_11_7,
|
||||
AAT2870_CURRENT_12_6,
|
||||
AAT2870_CURRENT_13_5,
|
||||
AAT2870_CURRENT_14_4,
|
||||
AAT2870_CURRENT_15_3,
|
||||
AAT2870_CURRENT_16_2,
|
||||
AAT2870_CURRENT_17_1,
|
||||
AAT2870_CURRENT_18_0,
|
||||
AAT2870_CURRENT_18_9,
|
||||
AAT2870_CURRENT_19_8,
|
||||
AAT2870_CURRENT_20_7,
|
||||
AAT2870_CURRENT_21_6,
|
||||
AAT2870_CURRENT_22_5,
|
||||
AAT2870_CURRENT_23_4,
|
||||
AAT2870_CURRENT_24_3,
|
||||
AAT2870_CURRENT_25_2,
|
||||
AAT2870_CURRENT_26_1,
|
||||
AAT2870_CURRENT_27_0,
|
||||
AAT2870_CURRENT_27_9
|
||||
};
|
||||
|
||||
struct aat2870_register {
|
||||
bool readable;
|
||||
bool writeable;
|
||||
u8 value;
|
||||
};
|
||||
|
||||
struct aat2870_data {
|
||||
struct device *dev;
|
||||
struct i2c_client *client;
|
||||
|
||||
struct mutex io_lock;
|
||||
struct aat2870_register *reg_cache; /* register cache */
|
||||
int en_pin; /* enable GPIO pin (if < 0, ignore this value) */
|
||||
bool is_enable;
|
||||
|
||||
/* init and uninit for platform specified */
|
||||
int (*init)(struct aat2870_data *aat2870);
|
||||
void (*uninit)(struct aat2870_data *aat2870);
|
||||
|
||||
/* i2c io funcntions */
|
||||
int (*read)(struct aat2870_data *aat2870, u8 addr, u8 *val);
|
||||
int (*write)(struct aat2870_data *aat2870, u8 addr, u8 val);
|
||||
int (*update)(struct aat2870_data *aat2870, u8 addr, u8 mask, u8 val);
|
||||
|
||||
/* for debugfs */
|
||||
struct dentry *dentry_root;
|
||||
struct dentry *dentry_reg;
|
||||
};
|
||||
|
||||
struct aat2870_subdev_info {
|
||||
int id;
|
||||
const char *name;
|
||||
void *platform_data;
|
||||
};
|
||||
|
||||
struct aat2870_platform_data {
|
||||
int en_pin; /* enable GPIO pin (if < 0, ignore this value) */
|
||||
|
||||
struct aat2870_subdev_info *subdevs;
|
||||
int num_subdevs;
|
||||
|
||||
/* init and uninit for platform specified */
|
||||
int (*init)(struct aat2870_data *aat2870);
|
||||
void (*uninit)(struct aat2870_data *aat2870);
|
||||
};
|
||||
|
||||
struct aat2870_bl_platform_data {
|
||||
/* backlight channels, default is AAT2870_BL_CH_ALL */
|
||||
int channels;
|
||||
/* backlight current magnitude, default is AAT2870_CURRENT_27_9 */
|
||||
int max_current;
|
||||
/* maximum brightness, default is 255 */
|
||||
int max_brightness;
|
||||
};
|
||||
|
||||
#endif /* __LINUX_MFD_AAT2870_H */
|
||||
|
|
@ -28,6 +28,7 @@
|
|||
#define AB8500_INTERRUPT 0xE
|
||||
#define AB8500_RTC 0xF
|
||||
#define AB8500_MISC 0x10
|
||||
#define AB8500_DEVELOPMENT 0x11
|
||||
#define AB8500_DEBUG 0x12
|
||||
#define AB8500_PROD_TEST 0x13
|
||||
#define AB8500_OTP_EMUL 0x15
|
||||
|
|
@ -74,13 +75,6 @@
|
|||
#define AB8500_INT_ACC_DETECT_21DB_F 37
|
||||
#define AB8500_INT_ACC_DETECT_21DB_R 38
|
||||
#define AB8500_INT_GP_SW_ADC_CONV_END 39
|
||||
#define AB8500_INT_ACC_DETECT_1DB_F 33
|
||||
#define AB8500_INT_ACC_DETECT_1DB_R 34
|
||||
#define AB8500_INT_ACC_DETECT_22DB_F 35
|
||||
#define AB8500_INT_ACC_DETECT_22DB_R 36
|
||||
#define AB8500_INT_ACC_DETECT_21DB_F 37
|
||||
#define AB8500_INT_ACC_DETECT_21DB_R 38
|
||||
#define AB8500_INT_GP_SW_ADC_CONV_END 39
|
||||
#define AB8500_INT_GPIO6R 40
|
||||
#define AB8500_INT_GPIO7R 41
|
||||
#define AB8500_INT_GPIO8R 42
|
||||
|
|
|
|||
|
|
@ -107,11 +107,16 @@ struct max8997_platform_data {
|
|||
unsigned int buck5_voltage[8];
|
||||
bool buck5_gpiodvs;
|
||||
|
||||
/* ---- Charger control ---- */
|
||||
/* eoc stands for 'end of charge' */
|
||||
int eoc_mA; /* 50 ~ 200mA by 10mA step */
|
||||
/* charge Full Timeout */
|
||||
int timeout; /* 0 (no timeout), 5, 6, 7 hours */
|
||||
|
||||
/* MUIC: Not implemented */
|
||||
/* HAPTIC: Not implemented */
|
||||
/* RTC: Not implemented */
|
||||
/* Flash: Not implemented */
|
||||
/* Charger control: Not implemented */
|
||||
};
|
||||
|
||||
#endif /* __LINUX_MFD_MAX8998_H */
|
||||
|
|
|
|||
|
|
@ -87,6 +87,15 @@ struct max8998_regulator_data {
|
|||
* @wakeup: Allow to wake up from suspend
|
||||
* @rtc_delay: LP3974 RTC chip bug that requires delay after a register
|
||||
* write before reading it.
|
||||
* @eoc: End of Charge Level in percent: 10% ~ 45% by 5% step
|
||||
* If it equals 0, leave it unchanged.
|
||||
* Otherwise, it is a invalid value.
|
||||
* @restart: Restart Level in mV: 100, 150, 200, and -1 for disable.
|
||||
* If it equals 0, leave it unchanged.
|
||||
* Otherwise, it is a invalid value.
|
||||
* @timeout: Full Timeout in hours: 5, 6, 7, and -1 for disable.
|
||||
* If it equals 0, leave it unchanged.
|
||||
* Otherwise, leave it unchanged.
|
||||
*/
|
||||
struct max8998_platform_data {
|
||||
struct max8998_regulator_data *regulators;
|
||||
|
|
@ -107,6 +116,9 @@ struct max8998_platform_data {
|
|||
int buck2_default_idx;
|
||||
bool wakeup;
|
||||
bool rtc_delay;
|
||||
int eoc;
|
||||
int restart;
|
||||
int timeout;
|
||||
};
|
||||
|
||||
#endif /* __LINUX_MFD_MAX8998_H */
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ struct stmpe_variant_info;
|
|||
* @irq_lock: IRQ bus lock
|
||||
* @dev: device, mostly for dev_dbg()
|
||||
* @i2c: i2c client
|
||||
* @partnum: part number
|
||||
* @variant: the detected STMPE model number
|
||||
* @regs: list of addresses of registers which are at different addresses on
|
||||
* different variants. Indexed by one of STMPE_IDX_*.
|
||||
|
|
@ -121,6 +122,8 @@ struct stmpe_keypad_platform_data {
|
|||
* @norequest_mask: bitmask specifying which GPIOs should _not_ be
|
||||
* requestable due to different usage (e.g. touch, keypad)
|
||||
* STMPE_GPIO_NOREQ_* macros can be used here.
|
||||
* @setup: board specific setup callback.
|
||||
* @remove: board specific remove callback
|
||||
*/
|
||||
struct stmpe_gpio_platform_data {
|
||||
int gpio_base;
|
||||
|
|
|
|||
|
|
@ -791,6 +791,7 @@ int tps65910_clear_bits(struct tps65910 *tps65910, u8 reg, u8 mask);
|
|||
void tps65910_gpio_init(struct tps65910 *tps65910, int gpio_base);
|
||||
int tps65910_irq_init(struct tps65910 *tps65910, int irq,
|
||||
struct tps65910_platform_data *pdata);
|
||||
int tps65910_irq_exit(struct tps65910 *tps65910);
|
||||
|
||||
static inline int tps65910_chip_id(struct tps65910 *tps65910)
|
||||
{
|
||||
|
|
|
|||
327
include/linux/mfd/tps65912.h
Normal file
327
include/linux/mfd/tps65912.h
Normal file
|
|
@ -0,0 +1,327 @@
|
|||
/*
|
||||
* tps65912.h -- TI TPS6591x
|
||||
*
|
||||
* Copyright 2011 Texas Instruments Inc.
|
||||
*
|
||||
* Author: Margarita Olaya <magi@slimlogic.co.uk>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_MFD_TPS65912_H
|
||||
#define __LINUX_MFD_TPS65912_H
|
||||
|
||||
/* TPS regulator type list */
|
||||
#define REGULATOR_LDO 0
|
||||
#define REGULATOR_DCDC 1
|
||||
|
||||
/*
|
||||
* List of registers for TPS65912
|
||||
*/
|
||||
|
||||
#define TPS65912_DCDC1_CTRL 0x00
|
||||
#define TPS65912_DCDC2_CTRL 0x01
|
||||
#define TPS65912_DCDC3_CTRL 0x02
|
||||
#define TPS65912_DCDC4_CTRL 0x03
|
||||
#define TPS65912_DCDC1_OP 0x04
|
||||
#define TPS65912_DCDC1_AVS 0x05
|
||||
#define TPS65912_DCDC1_LIMIT 0x06
|
||||
#define TPS65912_DCDC2_OP 0x07
|
||||
#define TPS65912_DCDC2_AVS 0x08
|
||||
#define TPS65912_DCDC2_LIMIT 0x09
|
||||
#define TPS65912_DCDC3_OP 0x0A
|
||||
#define TPS65912_DCDC3_AVS 0x0B
|
||||
#define TPS65912_DCDC3_LIMIT 0x0C
|
||||
#define TPS65912_DCDC4_OP 0x0D
|
||||
#define TPS65912_DCDC4_AVS 0x0E
|
||||
#define TPS65912_DCDC4_LIMIT 0x0F
|
||||
#define TPS65912_LDO1_OP 0x10
|
||||
#define TPS65912_LDO1_AVS 0x11
|
||||
#define TPS65912_LDO1_LIMIT 0x12
|
||||
#define TPS65912_LDO2_OP 0x13
|
||||
#define TPS65912_LDO2_AVS 0x14
|
||||
#define TPS65912_LDO2_LIMIT 0x15
|
||||
#define TPS65912_LDO3_OP 0x16
|
||||
#define TPS65912_LDO3_AVS 0x17
|
||||
#define TPS65912_LDO3_LIMIT 0x18
|
||||
#define TPS65912_LDO4_OP 0x19
|
||||
#define TPS65912_LDO4_AVS 0x1A
|
||||
#define TPS65912_LDO4_LIMIT 0x1B
|
||||
#define TPS65912_LDO5 0x1C
|
||||
#define TPS65912_LDO6 0x1D
|
||||
#define TPS65912_LDO7 0x1E
|
||||
#define TPS65912_LDO8 0x1F
|
||||
#define TPS65912_LDO9 0x20
|
||||
#define TPS65912_LDO10 0x21
|
||||
#define TPS65912_THRM 0x22
|
||||
#define TPS65912_CLK32OUT 0x23
|
||||
#define TPS65912_DEVCTRL 0x24
|
||||
#define TPS65912_DEVCTRL2 0x25
|
||||
#define TPS65912_I2C_SPI_CFG 0x26
|
||||
#define TPS65912_KEEP_ON 0x27
|
||||
#define TPS65912_KEEP_ON2 0x28
|
||||
#define TPS65912_SET_OFF1 0x29
|
||||
#define TPS65912_SET_OFF2 0x2A
|
||||
#define TPS65912_DEF_VOLT 0x2B
|
||||
#define TPS65912_DEF_VOLT_MAPPING 0x2C
|
||||
#define TPS65912_DISCHARGE 0x2D
|
||||
#define TPS65912_DISCHARGE2 0x2E
|
||||
#define TPS65912_EN1_SET1 0x2F
|
||||
#define TPS65912_EN1_SET2 0x30
|
||||
#define TPS65912_EN2_SET1 0x31
|
||||
#define TPS65912_EN2_SET2 0x32
|
||||
#define TPS65912_EN3_SET1 0x33
|
||||
#define TPS65912_EN3_SET2 0x34
|
||||
#define TPS65912_EN4_SET1 0x35
|
||||
#define TPS65912_EN4_SET2 0x36
|
||||
#define TPS65912_PGOOD 0x37
|
||||
#define TPS65912_PGOOD2 0x38
|
||||
#define TPS65912_INT_STS 0x39
|
||||
#define TPS65912_INT_MSK 0x3A
|
||||
#define TPS65912_INT_STS2 0x3B
|
||||
#define TPS65912_INT_MSK2 0x3C
|
||||
#define TPS65912_INT_STS3 0x3D
|
||||
#define TPS65912_INT_MSK3 0x3E
|
||||
#define TPS65912_INT_STS4 0x3F
|
||||
#define TPS65912_INT_MSK4 0x40
|
||||
#define TPS65912_GPIO1 0x41
|
||||
#define TPS65912_GPIO2 0x42
|
||||
#define TPS65912_GPIO3 0x43
|
||||
#define TPS65912_GPIO4 0x44
|
||||
#define TPS65912_GPIO5 0x45
|
||||
#define TPS65912_VMON 0x46
|
||||
#define TPS65912_LEDA_CTRL1 0x47
|
||||
#define TPS65912_LEDA_CTRL2 0x48
|
||||
#define TPS65912_LEDA_CTRL3 0x49
|
||||
#define TPS65912_LEDA_CTRL4 0x4A
|
||||
#define TPS65912_LEDA_CTRL5 0x4B
|
||||
#define TPS65912_LEDA_CTRL6 0x4C
|
||||
#define TPS65912_LEDA_CTRL7 0x4D
|
||||
#define TPS65912_LEDA_CTRL8 0x4E
|
||||
#define TPS65912_LEDB_CTRL1 0x4F
|
||||
#define TPS65912_LEDB_CTRL2 0x50
|
||||
#define TPS65912_LEDB_CTRL3 0x51
|
||||
#define TPS65912_LEDB_CTRL4 0x52
|
||||
#define TPS65912_LEDB_CTRL5 0x53
|
||||
#define TPS65912_LEDB_CTRL6 0x54
|
||||
#define TPS65912_LEDB_CTRL7 0x55
|
||||
#define TPS65912_LEDB_CTRL8 0x56
|
||||
#define TPS65912_LEDC_CTRL1 0x57
|
||||
#define TPS65912_LEDC_CTRL2 0x58
|
||||
#define TPS65912_LEDC_CTRL3 0x59
|
||||
#define TPS65912_LEDC_CTRL4 0x5A
|
||||
#define TPS65912_LEDC_CTRL5 0x5B
|
||||
#define TPS65912_LEDC_CTRL6 0x5C
|
||||
#define TPS65912_LEDC_CTRL7 0x5D
|
||||
#define TPS65912_LEDC_CTRL8 0x5E
|
||||
#define TPS65912_LED_RAMP_UP_TIME 0x5F
|
||||
#define TPS65912_LED_RAMP_DOWN_TIME 0x60
|
||||
#define TPS65912_LED_SEQ_EN 0x61
|
||||
#define TPS65912_LOADSWITCH 0x62
|
||||
#define TPS65912_SPARE 0x63
|
||||
#define TPS65912_VERNUM 0x64
|
||||
#define TPS6591X_MAX_REGISTER 0x64
|
||||
|
||||
/* IRQ Definitions */
|
||||
#define TPS65912_IRQ_PWRHOLD_F 0
|
||||
#define TPS65912_IRQ_VMON 1
|
||||
#define TPS65912_IRQ_PWRON 2
|
||||
#define TPS65912_IRQ_PWRON_LP 3
|
||||
#define TPS65912_IRQ_PWRHOLD_R 4
|
||||
#define TPS65912_IRQ_HOTDIE 5
|
||||
#define TPS65912_IRQ_GPIO1_R 6
|
||||
#define TPS65912_IRQ_GPIO1_F 7
|
||||
#define TPS65912_IRQ_GPIO2_R 8
|
||||
#define TPS65912_IRQ_GPIO2_F 9
|
||||
#define TPS65912_IRQ_GPIO3_R 10
|
||||
#define TPS65912_IRQ_GPIO3_F 11
|
||||
#define TPS65912_IRQ_GPIO4_R 12
|
||||
#define TPS65912_IRQ_GPIO4_F 13
|
||||
#define TPS65912_IRQ_GPIO5_R 14
|
||||
#define TPS65912_IRQ_GPIO5_F 15
|
||||
#define TPS65912_IRQ_PGOOD_DCDC1 16
|
||||
#define TPS65912_IRQ_PGOOD_DCDC2 17
|
||||
#define TPS65912_IRQ_PGOOD_DCDC3 18
|
||||
#define TPS65912_IRQ_PGOOD_DCDC4 19
|
||||
#define TPS65912_IRQ_PGOOD_LDO1 20
|
||||
#define TPS65912_IRQ_PGOOD_LDO2 21
|
||||
#define TPS65912_IRQ_PGOOD_LDO3 22
|
||||
#define TPS65912_IRQ_PGOOD_LDO4 23
|
||||
#define TPS65912_IRQ_PGOOD_LDO5 24
|
||||
#define TPS65912_IRQ_PGOOD_LDO6 25
|
||||
#define TPS65912_IRQ_PGOOD_LDO7 26
|
||||
#define TPS65912_IRQ_PGOOD_LD08 27
|
||||
#define TPS65912_IRQ_PGOOD_LDO9 28
|
||||
#define TPS65912_IRQ_PGOOD_LDO10 29
|
||||
|
||||
#define TPS65912_NUM_IRQ 30
|
||||
|
||||
/* GPIO 1 and 2 Register Definitions */
|
||||
#define GPIO_SLEEP_MASK 0x80
|
||||
#define GPIO_SLEEP_SHIFT 7
|
||||
#define GPIO_DEB_MASK 0x10
|
||||
#define GPIO_DEB_SHIFT 4
|
||||
#define GPIO_CFG_MASK 0x04
|
||||
#define GPIO_CFG_SHIFT 2
|
||||
#define GPIO_STS_MASK 0x02
|
||||
#define GPIO_STS_SHIFT 1
|
||||
#define GPIO_SET_MASK 0x01
|
||||
#define GPIO_SET_SHIFT 0
|
||||
|
||||
/* GPIO 3 Register Definitions */
|
||||
#define GPIO3_SLEEP_MASK 0x80
|
||||
#define GPIO3_SLEEP_SHIFT 7
|
||||
#define GPIO3_SEL_MASK 0x40
|
||||
#define GPIO3_SEL_SHIFT 6
|
||||
#define GPIO3_ODEN_MASK 0x20
|
||||
#define GPIO3_ODEN_SHIFT 5
|
||||
#define GPIO3_DEB_MASK 0x10
|
||||
#define GPIO3_DEB_SHIFT 4
|
||||
#define GPIO3_PDEN_MASK 0x08
|
||||
#define GPIO3_PDEN_SHIFT 3
|
||||
#define GPIO3_CFG_MASK 0x04
|
||||
#define GPIO3_CFG_SHIFT 2
|
||||
#define GPIO3_STS_MASK 0x02
|
||||
#define GPIO3_STS_SHIFT 1
|
||||
#define GPIO3_SET_MASK 0x01
|
||||
#define GPIO3_SET_SHIFT 0
|
||||
|
||||
/* GPIO 4 Register Definitions */
|
||||
#define GPIO4_SLEEP_MASK 0x80
|
||||
#define GPIO4_SLEEP_SHIFT 7
|
||||
#define GPIO4_SEL_MASK 0x40
|
||||
#define GPIO4_SEL_SHIFT 6
|
||||
#define GPIO4_ODEN_MASK 0x20
|
||||
#define GPIO4_ODEN_SHIFT 5
|
||||
#define GPIO4_DEB_MASK 0x10
|
||||
#define GPIO4_DEB_SHIFT 4
|
||||
#define GPIO4_PDEN_MASK 0x08
|
||||
#define GPIO4_PDEN_SHIFT 3
|
||||
#define GPIO4_CFG_MASK 0x04
|
||||
#define GPIO4_CFG_SHIFT 2
|
||||
#define GPIO4_STS_MASK 0x02
|
||||
#define GPIO4_STS_SHIFT 1
|
||||
#define GPIO4_SET_MASK 0x01
|
||||
#define GPIO4_SET_SHIFT 0
|
||||
|
||||
/* Register THERM (0x80) register.RegisterDescription */
|
||||
#define THERM_THERM_HD_MASK 0x20
|
||||
#define THERM_THERM_HD_SHIFT 5
|
||||
#define THERM_THERM_TS_MASK 0x10
|
||||
#define THERM_THERM_TS_SHIFT 4
|
||||
#define THERM_THERM_HDSEL_MASK 0x0C
|
||||
#define THERM_THERM_HDSEL_SHIFT 2
|
||||
#define THERM_RSVD1_MASK 0x02
|
||||
#define THERM_RSVD1_SHIFT 1
|
||||
#define THERM_THERM_STATE_MASK 0x01
|
||||
#define THERM_THERM_STATE_SHIFT 0
|
||||
|
||||
/* Register DCDCCTRL1 register.RegisterDescription */
|
||||
#define DCDCCTRL_VCON_ENABLE_MASK 0x80
|
||||
#define DCDCCTRL_VCON_ENABLE_SHIFT 7
|
||||
#define DCDCCTRL_VCON_RANGE1_MASK 0x40
|
||||
#define DCDCCTRL_VCON_RANGE1_SHIFT 6
|
||||
#define DCDCCTRL_VCON_RANGE0_MASK 0x20
|
||||
#define DCDCCTRL_VCON_RANGE0_SHIFT 5
|
||||
#define DCDCCTRL_TSTEP2_MASK 0x10
|
||||
#define DCDCCTRL_TSTEP2_SHIFT 4
|
||||
#define DCDCCTRL_TSTEP1_MASK 0x08
|
||||
#define DCDCCTRL_TSTEP1_SHIFT 3
|
||||
#define DCDCCTRL_TSTEP0_MASK 0x04
|
||||
#define DCDCCTRL_TSTEP0_SHIFT 2
|
||||
#define DCDCCTRL_DCDC1_MODE_MASK 0x02
|
||||
#define DCDCCTRL_DCDC1_MODE_SHIFT 1
|
||||
|
||||
/* Register DCDCCTRL2 and DCDCCTRL3 register.RegisterDescription */
|
||||
#define DCDCCTRL_TSTEP2_MASK 0x10
|
||||
#define DCDCCTRL_TSTEP2_SHIFT 4
|
||||
#define DCDCCTRL_TSTEP1_MASK 0x08
|
||||
#define DCDCCTRL_TSTEP1_SHIFT 3
|
||||
#define DCDCCTRL_TSTEP0_MASK 0x04
|
||||
#define DCDCCTRL_TSTEP0_SHIFT 2
|
||||
#define DCDCCTRL_DCDC_MODE_MASK 0x02
|
||||
#define DCDCCTRL_DCDC_MODE_SHIFT 1
|
||||
#define DCDCCTRL_RSVD0_MASK 0x01
|
||||
#define DCDCCTRL_RSVD0_SHIFT 0
|
||||
|
||||
/* Register DCDCCTRL4 register.RegisterDescription */
|
||||
#define DCDCCTRL_RAMP_TIME_MASK 0x01
|
||||
#define DCDCCTRL_RAMP_TIME_SHIFT 0
|
||||
|
||||
/* Register DCDCx_AVS */
|
||||
#define DCDC_AVS_ENABLE_MASK 0x80
|
||||
#define DCDC_AVS_ENABLE_SHIFT 7
|
||||
#define DCDC_AVS_ECO_MASK 0x40
|
||||
#define DCDC_AVS_ECO_SHIFT 6
|
||||
|
||||
/* Register DCDCx_LIMIT */
|
||||
#define DCDC_LIMIT_RANGE_MASK 0xC0
|
||||
#define DCDC_LIMIT_RANGE_SHIFT 6
|
||||
#define DCDC_LIMIT_MAX_SEL_MASK 0x3F
|
||||
#define DCDC_LIMIT_MAX_SEL_SHIFT 0
|
||||
|
||||
/**
|
||||
* struct tps65912_board
|
||||
* Board platform dat may be used to initialize regulators.
|
||||
*/
|
||||
struct tps65912_board {
|
||||
int is_dcdc1_avs;
|
||||
int is_dcdc2_avs;
|
||||
int is_dcdc3_avs;
|
||||
int is_dcdc4_avs;
|
||||
int irq;
|
||||
int irq_base;
|
||||
int gpio_base;
|
||||
struct regulator_init_data *tps65912_pmic_init_data;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct tps65912 - tps65912 sub-driver chip access routines
|
||||
*/
|
||||
|
||||
struct tps65912 {
|
||||
struct device *dev;
|
||||
/* for read/write acces */
|
||||
struct mutex io_mutex;
|
||||
|
||||
/* For device IO interfaces: I2C or SPI */
|
||||
void *control_data;
|
||||
|
||||
int (*read)(struct tps65912 *tps65912, u8 reg, int size, void *dest);
|
||||
int (*write)(struct tps65912 *tps65912, u8 reg, int size, void *src);
|
||||
|
||||
/* Client devices */
|
||||
struct tps65912_pmic *pmic;
|
||||
|
||||
/* GPIO Handling */
|
||||
struct gpio_chip gpio;
|
||||
|
||||
/* IRQ Handling */
|
||||
struct mutex irq_lock;
|
||||
int chip_irq;
|
||||
int irq_base;
|
||||
int irq_num;
|
||||
u32 irq_mask;
|
||||
};
|
||||
|
||||
struct tps65912_platform_data {
|
||||
int irq;
|
||||
int irq_base;
|
||||
};
|
||||
|
||||
unsigned int tps_chip(void);
|
||||
|
||||
int tps65912_set_bits(struct tps65912 *tps65912, u8 reg, u8 mask);
|
||||
int tps65912_clear_bits(struct tps65912 *tps65912, u8 reg, u8 mask);
|
||||
int tps65912_reg_read(struct tps65912 *tps65912, u8 reg);
|
||||
int tps65912_reg_write(struct tps65912 *tps65912, u8 reg, u8 val);
|
||||
int tps65912_device_init(struct tps65912 *tps65912);
|
||||
void tps65912_device_exit(struct tps65912 *tps65912);
|
||||
int tps65912_irq_init(struct tps65912 *tps65912, int irq,
|
||||
struct tps65912_platform_data *pdata);
|
||||
|
||||
#endif /* __LINUX_MFD_TPS65912_H */
|
||||
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include <linux/completion.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/list.h>
|
||||
|
||||
/*
|
||||
* Register values.
|
||||
|
|
@ -234,9 +235,111 @@
|
|||
#define WM831X_ON_PIN_TO_SHIFT 0 /* ON_PIN_TO - [1:0] */
|
||||
#define WM831X_ON_PIN_TO_WIDTH 2 /* ON_PIN_TO - [1:0] */
|
||||
|
||||
/*
|
||||
* R16528 (0x4090) - Clock Control 1
|
||||
*/
|
||||
#define WM831X_CLKOUT_ENA 0x8000 /* CLKOUT_ENA */
|
||||
#define WM831X_CLKOUT_ENA_MASK 0x8000 /* CLKOUT_ENA */
|
||||
#define WM831X_CLKOUT_ENA_SHIFT 15 /* CLKOUT_ENA */
|
||||
#define WM831X_CLKOUT_ENA_WIDTH 1 /* CLKOUT_ENA */
|
||||
#define WM831X_CLKOUT_OD 0x2000 /* CLKOUT_OD */
|
||||
#define WM831X_CLKOUT_OD_MASK 0x2000 /* CLKOUT_OD */
|
||||
#define WM831X_CLKOUT_OD_SHIFT 13 /* CLKOUT_OD */
|
||||
#define WM831X_CLKOUT_OD_WIDTH 1 /* CLKOUT_OD */
|
||||
#define WM831X_CLKOUT_SLOT_MASK 0x0700 /* CLKOUT_SLOT - [10:8] */
|
||||
#define WM831X_CLKOUT_SLOT_SHIFT 8 /* CLKOUT_SLOT - [10:8] */
|
||||
#define WM831X_CLKOUT_SLOT_WIDTH 3 /* CLKOUT_SLOT - [10:8] */
|
||||
#define WM831X_CLKOUT_SLPSLOT_MASK 0x0070 /* CLKOUT_SLPSLOT - [6:4] */
|
||||
#define WM831X_CLKOUT_SLPSLOT_SHIFT 4 /* CLKOUT_SLPSLOT - [6:4] */
|
||||
#define WM831X_CLKOUT_SLPSLOT_WIDTH 3 /* CLKOUT_SLPSLOT - [6:4] */
|
||||
#define WM831X_CLKOUT_SRC 0x0001 /* CLKOUT_SRC */
|
||||
#define WM831X_CLKOUT_SRC_MASK 0x0001 /* CLKOUT_SRC */
|
||||
#define WM831X_CLKOUT_SRC_SHIFT 0 /* CLKOUT_SRC */
|
||||
#define WM831X_CLKOUT_SRC_WIDTH 1 /* CLKOUT_SRC */
|
||||
|
||||
/*
|
||||
* R16529 (0x4091) - Clock Control 2
|
||||
*/
|
||||
#define WM831X_XTAL_INH 0x8000 /* XTAL_INH */
|
||||
#define WM831X_XTAL_INH_MASK 0x8000 /* XTAL_INH */
|
||||
#define WM831X_XTAL_INH_SHIFT 15 /* XTAL_INH */
|
||||
#define WM831X_XTAL_INH_WIDTH 1 /* XTAL_INH */
|
||||
#define WM831X_XTAL_ENA 0x2000 /* XTAL_ENA */
|
||||
#define WM831X_XTAL_ENA_MASK 0x2000 /* XTAL_ENA */
|
||||
#define WM831X_XTAL_ENA_SHIFT 13 /* XTAL_ENA */
|
||||
#define WM831X_XTAL_ENA_WIDTH 1 /* XTAL_ENA */
|
||||
#define WM831X_XTAL_BKUPENA 0x1000 /* XTAL_BKUPENA */
|
||||
#define WM831X_XTAL_BKUPENA_MASK 0x1000 /* XTAL_BKUPENA */
|
||||
#define WM831X_XTAL_BKUPENA_SHIFT 12 /* XTAL_BKUPENA */
|
||||
#define WM831X_XTAL_BKUPENA_WIDTH 1 /* XTAL_BKUPENA */
|
||||
#define WM831X_FLL_AUTO 0x0080 /* FLL_AUTO */
|
||||
#define WM831X_FLL_AUTO_MASK 0x0080 /* FLL_AUTO */
|
||||
#define WM831X_FLL_AUTO_SHIFT 7 /* FLL_AUTO */
|
||||
#define WM831X_FLL_AUTO_WIDTH 1 /* FLL_AUTO */
|
||||
#define WM831X_FLL_AUTO_FREQ_MASK 0x0007 /* FLL_AUTO_FREQ - [2:0] */
|
||||
#define WM831X_FLL_AUTO_FREQ_SHIFT 0 /* FLL_AUTO_FREQ - [2:0] */
|
||||
#define WM831X_FLL_AUTO_FREQ_WIDTH 3 /* FLL_AUTO_FREQ - [2:0] */
|
||||
|
||||
/*
|
||||
* R16530 (0x4092) - FLL Control 1
|
||||
*/
|
||||
#define WM831X_FLL_FRAC 0x0004 /* FLL_FRAC */
|
||||
#define WM831X_FLL_FRAC_MASK 0x0004 /* FLL_FRAC */
|
||||
#define WM831X_FLL_FRAC_SHIFT 2 /* FLL_FRAC */
|
||||
#define WM831X_FLL_FRAC_WIDTH 1 /* FLL_FRAC */
|
||||
#define WM831X_FLL_OSC_ENA 0x0002 /* FLL_OSC_ENA */
|
||||
#define WM831X_FLL_OSC_ENA_MASK 0x0002 /* FLL_OSC_ENA */
|
||||
#define WM831X_FLL_OSC_ENA_SHIFT 1 /* FLL_OSC_ENA */
|
||||
#define WM831X_FLL_OSC_ENA_WIDTH 1 /* FLL_OSC_ENA */
|
||||
#define WM831X_FLL_ENA 0x0001 /* FLL_ENA */
|
||||
#define WM831X_FLL_ENA_MASK 0x0001 /* FLL_ENA */
|
||||
#define WM831X_FLL_ENA_SHIFT 0 /* FLL_ENA */
|
||||
#define WM831X_FLL_ENA_WIDTH 1 /* FLL_ENA */
|
||||
|
||||
/*
|
||||
* R16531 (0x4093) - FLL Control 2
|
||||
*/
|
||||
#define WM831X_FLL_OUTDIV_MASK 0x3F00 /* FLL_OUTDIV - [13:8] */
|
||||
#define WM831X_FLL_OUTDIV_SHIFT 8 /* FLL_OUTDIV - [13:8] */
|
||||
#define WM831X_FLL_OUTDIV_WIDTH 6 /* FLL_OUTDIV - [13:8] */
|
||||
#define WM831X_FLL_CTRL_RATE_MASK 0x0070 /* FLL_CTRL_RATE - [6:4] */
|
||||
#define WM831X_FLL_CTRL_RATE_SHIFT 4 /* FLL_CTRL_RATE - [6:4] */
|
||||
#define WM831X_FLL_CTRL_RATE_WIDTH 3 /* FLL_CTRL_RATE - [6:4] */
|
||||
#define WM831X_FLL_FRATIO_MASK 0x0007 /* FLL_FRATIO - [2:0] */
|
||||
#define WM831X_FLL_FRATIO_SHIFT 0 /* FLL_FRATIO - [2:0] */
|
||||
#define WM831X_FLL_FRATIO_WIDTH 3 /* FLL_FRATIO - [2:0] */
|
||||
|
||||
/*
|
||||
* R16532 (0x4094) - FLL Control 3
|
||||
*/
|
||||
#define WM831X_FLL_K_MASK 0xFFFF /* FLL_K - [15:0] */
|
||||
#define WM831X_FLL_K_SHIFT 0 /* FLL_K - [15:0] */
|
||||
#define WM831X_FLL_K_WIDTH 16 /* FLL_K - [15:0] */
|
||||
|
||||
/*
|
||||
* R16533 (0x4095) - FLL Control 4
|
||||
*/
|
||||
#define WM831X_FLL_N_MASK 0x7FE0 /* FLL_N - [14:5] */
|
||||
#define WM831X_FLL_N_SHIFT 5 /* FLL_N - [14:5] */
|
||||
#define WM831X_FLL_N_WIDTH 10 /* FLL_N - [14:5] */
|
||||
#define WM831X_FLL_GAIN_MASK 0x000F /* FLL_GAIN - [3:0] */
|
||||
#define WM831X_FLL_GAIN_SHIFT 0 /* FLL_GAIN - [3:0] */
|
||||
#define WM831X_FLL_GAIN_WIDTH 4 /* FLL_GAIN - [3:0] */
|
||||
|
||||
/*
|
||||
* R16534 (0x4096) - FLL Control 5
|
||||
*/
|
||||
#define WM831X_FLL_CLK_REF_DIV_MASK 0x0018 /* FLL_CLK_REF_DIV - [4:3] */
|
||||
#define WM831X_FLL_CLK_REF_DIV_SHIFT 3 /* FLL_CLK_REF_DIV - [4:3] */
|
||||
#define WM831X_FLL_CLK_REF_DIV_WIDTH 2 /* FLL_CLK_REF_DIV - [4:3] */
|
||||
#define WM831X_FLL_CLK_SRC_MASK 0x0003 /* FLL_CLK_SRC - [1:0] */
|
||||
#define WM831X_FLL_CLK_SRC_SHIFT 0 /* FLL_CLK_SRC - [1:0] */
|
||||
#define WM831X_FLL_CLK_SRC_WIDTH 2 /* FLL_CLK_SRC - [1:0] */
|
||||
|
||||
struct regulator_dev;
|
||||
|
||||
#define WM831X_NUM_IRQ_REGS 5
|
||||
#define WM831X_NUM_GPIO_REGS 16
|
||||
|
||||
enum wm831x_parent {
|
||||
WM8310 = 0x8310,
|
||||
|
|
@ -248,6 +351,12 @@ enum wm831x_parent {
|
|||
WM8326 = 0x8326,
|
||||
};
|
||||
|
||||
struct wm831x;
|
||||
enum wm831x_auxadc;
|
||||
|
||||
typedef int (*wm831x_auxadc_read_fn)(struct wm831x *wm831x,
|
||||
enum wm831x_auxadc input);
|
||||
|
||||
struct wm831x {
|
||||
struct mutex io_lock;
|
||||
|
||||
|
|
@ -261,7 +370,7 @@ struct wm831x {
|
|||
|
||||
int irq; /* Our chip IRQ */
|
||||
struct mutex irq_lock;
|
||||
unsigned int irq_base;
|
||||
int irq_base;
|
||||
int irq_masks_cur[WM831X_NUM_IRQ_REGS]; /* Currently active value */
|
||||
int irq_masks_cache[WM831X_NUM_IRQ_REGS]; /* Cached hardware value */
|
||||
|
||||
|
|
@ -272,8 +381,13 @@ struct wm831x {
|
|||
|
||||
int num_gpio;
|
||||
|
||||
/* Used by the interrupt controller code to post writes */
|
||||
int gpio_update[WM831X_NUM_GPIO_REGS];
|
||||
|
||||
struct mutex auxadc_lock;
|
||||
struct completion auxadc_done;
|
||||
struct list_head auxadc_pending;
|
||||
u16 auxadc_active;
|
||||
wm831x_auxadc_read_fn auxadc_read;
|
||||
|
||||
/* The WM831x has a security key blocking access to certain
|
||||
* registers. The mutex is taken by the accessors for locking
|
||||
|
|
@ -300,5 +414,6 @@ void wm831x_device_exit(struct wm831x *wm831x);
|
|||
int wm831x_device_suspend(struct wm831x *wm831x);
|
||||
int wm831x_irq_init(struct wm831x *wm831x, int irq);
|
||||
void wm831x_irq_exit(struct wm831x *wm831x);
|
||||
void wm831x_auxadc_init(struct wm831x *wm831x);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -120,6 +120,9 @@ struct wm831x_pdata {
|
|||
/** Put the /IRQ line into CMOS mode */
|
||||
bool irq_cmos;
|
||||
|
||||
/** Disable the touchscreen */
|
||||
bool disable_touch;
|
||||
|
||||
int irq_base;
|
||||
int gpio_base;
|
||||
int gpio_defaults[WM831X_GPIO_NUM];
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@
|
|||
#define BTRFS_MINOR 234
|
||||
#define AUTOFS_MINOR 235
|
||||
#define MAPPER_CTRL_MINOR 236
|
||||
#define LOOP_CTRL_MINOR 237
|
||||
#define MISC_DYNAMIC_MINOR 255
|
||||
|
||||
struct device;
|
||||
|
|
|
|||
|
|
@ -685,7 +685,7 @@ static inline void set_page_section(struct page *page, unsigned long section)
|
|||
page->flags |= (section & SECTIONS_MASK) << SECTIONS_PGSHIFT;
|
||||
}
|
||||
|
||||
static inline unsigned long page_to_section(struct page *page)
|
||||
static inline unsigned long page_to_section(const struct page *page)
|
||||
{
|
||||
return (page->flags >> SECTIONS_PGSHIFT) & SECTIONS_MASK;
|
||||
}
|
||||
|
|
@ -720,7 +720,7 @@ static inline void set_page_links(struct page *page, enum zone_type zone,
|
|||
|
||||
static __always_inline void *lowmem_page_address(const struct page *page)
|
||||
{
|
||||
return __va(PFN_PHYS(page_to_pfn((struct page *)page)));
|
||||
return __va(PFN_PHYS(page_to_pfn(page)));
|
||||
}
|
||||
|
||||
#if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL)
|
||||
|
|
@ -737,7 +737,7 @@ static __always_inline void *lowmem_page_address(const struct page *page)
|
|||
#endif
|
||||
|
||||
#if defined(HASHED_PAGE_VIRTUAL)
|
||||
void *page_address(struct page *page);
|
||||
void *page_address(const struct page *page);
|
||||
void set_page_address(struct page *page, void *virtual);
|
||||
void page_address_init(void);
|
||||
#endif
|
||||
|
|
@ -962,6 +962,8 @@ int invalidate_inode_page(struct page *page);
|
|||
#ifdef CONFIG_MMU
|
||||
extern int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
unsigned long address, unsigned int flags);
|
||||
extern int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm,
|
||||
unsigned long address, unsigned int fault_flags);
|
||||
#else
|
||||
static inline int handle_mm_fault(struct mm_struct *mm,
|
||||
struct vm_area_struct *vma, unsigned long address,
|
||||
|
|
@ -971,6 +973,14 @@ static inline int handle_mm_fault(struct mm_struct *mm,
|
|||
BUG();
|
||||
return VM_FAULT_SIGBUS;
|
||||
}
|
||||
static inline int fixup_user_fault(struct task_struct *tsk,
|
||||
struct mm_struct *mm, unsigned long address,
|
||||
unsigned int fault_flags)
|
||||
{
|
||||
/* should never happen if there's no MMU */
|
||||
BUG();
|
||||
return -EFAULT;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int make_pages_present(unsigned long addr, unsigned long end);
|
||||
|
|
@ -988,8 +998,6 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
|
|||
int get_user_pages_fast(unsigned long start, int nr_pages, int write,
|
||||
struct page **pages);
|
||||
struct page *get_dump_page(unsigned long addr);
|
||||
extern int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm,
|
||||
unsigned long address, unsigned int fault_flags);
|
||||
|
||||
extern int try_to_release_page(struct page * page, gfp_t gfp_mask);
|
||||
extern void do_invalidatepage(struct page *page, unsigned long offset);
|
||||
|
|
@ -1600,6 +1608,7 @@ enum mf_flags {
|
|||
};
|
||||
extern void memory_failure(unsigned long pfn, int trapno);
|
||||
extern int __memory_failure(unsigned long pfn, int trapno, int flags);
|
||||
extern void memory_failure_queue(unsigned long pfn, int trapno, int flags);
|
||||
extern int unpoison_memory(unsigned long pfn);
|
||||
extern int sysctl_memory_failure_early_kill;
|
||||
extern int sysctl_memory_failure_recovery;
|
||||
|
|
|
|||
|
|
@ -30,23 +30,61 @@ struct address_space;
|
|||
* moment. Note that we have no way to track which tasks are using
|
||||
* a page, though if it is a pagecache page, rmap structures can tell us
|
||||
* who is mapping it.
|
||||
*
|
||||
* The objects in struct page are organized in double word blocks in
|
||||
* order to allows us to use atomic double word operations on portions
|
||||
* of struct page. That is currently only used by slub but the arrangement
|
||||
* allows the use of atomic double word operations on the flags/mapping
|
||||
* and lru list pointers also.
|
||||
*/
|
||||
struct page {
|
||||
/* First double word block */
|
||||
unsigned long flags; /* Atomic flags, some possibly
|
||||
* updated asynchronously */
|
||||
atomic_t _count; /* Usage count, see below. */
|
||||
union {
|
||||
atomic_t _mapcount; /* Count of ptes mapped in mms,
|
||||
* to show when page is mapped
|
||||
* & limit reverse map searches.
|
||||
struct address_space *mapping; /* If low bit clear, points to
|
||||
* inode address_space, or NULL.
|
||||
* If page mapped as anonymous
|
||||
* memory, low bit is set, and
|
||||
* it points to anon_vma object:
|
||||
* see PAGE_MAPPING_ANON below.
|
||||
*/
|
||||
struct { /* SLUB */
|
||||
u16 inuse;
|
||||
u16 objects;
|
||||
/* Second double word */
|
||||
struct {
|
||||
union {
|
||||
pgoff_t index; /* Our offset within mapping. */
|
||||
void *freelist; /* slub first free object */
|
||||
};
|
||||
|
||||
union {
|
||||
/* Used for cmpxchg_double in slub */
|
||||
unsigned long counters;
|
||||
|
||||
struct {
|
||||
|
||||
union {
|
||||
atomic_t _mapcount; /* Count of ptes mapped in mms,
|
||||
* to show when page is mapped
|
||||
* & limit reverse map searches.
|
||||
*/
|
||||
|
||||
struct {
|
||||
unsigned inuse:16;
|
||||
unsigned objects:15;
|
||||
unsigned frozen:1;
|
||||
};
|
||||
};
|
||||
atomic_t _count; /* Usage count, see below. */
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/* Third double word block */
|
||||
struct list_head lru; /* Pageout list, eg. active_list
|
||||
* protected by zone->lru_lock !
|
||||
*/
|
||||
|
||||
/* Remainder is not double word aligned */
|
||||
union {
|
||||
struct {
|
||||
unsigned long private; /* Mapping-private opaque data:
|
||||
* usually used for buffer_heads
|
||||
* if PagePrivate set; used for
|
||||
|
|
@ -54,27 +92,13 @@ struct page {
|
|||
* indicates order in the buddy
|
||||
* system if PG_buddy is set.
|
||||
*/
|
||||
struct address_space *mapping; /* If low bit clear, points to
|
||||
* inode address_space, or NULL.
|
||||
* If page mapped as anonymous
|
||||
* memory, low bit is set, and
|
||||
* it points to anon_vma object:
|
||||
* see PAGE_MAPPING_ANON below.
|
||||
*/
|
||||
};
|
||||
#if USE_SPLIT_PTLOCKS
|
||||
spinlock_t ptl;
|
||||
spinlock_t ptl;
|
||||
#endif
|
||||
struct kmem_cache *slab; /* SLUB: Pointer to slab */
|
||||
struct page *first_page; /* Compound tail pages */
|
||||
struct kmem_cache *slab; /* SLUB: Pointer to slab */
|
||||
struct page *first_page; /* Compound tail pages */
|
||||
};
|
||||
union {
|
||||
pgoff_t index; /* Our offset within mapping. */
|
||||
void *freelist; /* SLUB: freelist req. slab lock */
|
||||
};
|
||||
struct list_head lru; /* Pageout list, eg. active_list
|
||||
* protected by zone->lru_lock !
|
||||
*/
|
||||
|
||||
/*
|
||||
* On machines where all RAM is mapped into kernel address space,
|
||||
* we can simply calculate the virtual address. On machines with
|
||||
|
|
@ -100,7 +124,16 @@ struct page {
|
|||
*/
|
||||
void *shadow;
|
||||
#endif
|
||||
};
|
||||
}
|
||||
/*
|
||||
* If another subsystem starts using the double word pairing for atomic
|
||||
* operations on struct page then it must change the #if to ensure
|
||||
* proper alignment of the page struct.
|
||||
*/
|
||||
#if defined(CONFIG_SLUB) && defined(CONFIG_CMPXCHG_LOCAL)
|
||||
__attribute__((__aligned__(2*sizeof(unsigned long))))
|
||||
#endif
|
||||
;
|
||||
|
||||
typedef unsigned long __nocast vm_flags_t;
|
||||
|
||||
|
|
|
|||
|
|
@ -56,8 +56,6 @@ struct mmc_ios {
|
|||
#define MMC_TIMING_UHS_SDR104 4
|
||||
#define MMC_TIMING_UHS_DDR50 5
|
||||
|
||||
unsigned char ddr; /* dual data rate used */
|
||||
|
||||
#define MMC_SDR_MODE 0
|
||||
#define MMC_1_2V_DDR_MODE 1
|
||||
#define MMC_1_8V_DDR_MODE 2
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
#define MAX_LINKS 32
|
||||
|
||||
struct sockaddr_nl {
|
||||
sa_family_t nl_family; /* AF_NETLINK */
|
||||
__kernel_sa_family_t nl_family; /* AF_NETLINK */
|
||||
unsigned short nl_pad; /* zero */
|
||||
__u32 nl_pid; /* port ID */
|
||||
__u32 nl_groups; /* multicast groups mask */
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@
|
|||
#define NFS_MNT_VERSION 1
|
||||
#define NFS_MNT3_VERSION 3
|
||||
|
||||
#define NFS_PIPE_DIRNAME "/nfs"
|
||||
|
||||
/*
|
||||
* NFS stats. The good thing with these values is that NFSv3 errors are
|
||||
* a superset of NFSv2 errors (with the exception of NFSERR_WFLUSH which
|
||||
|
|
|
|||
|
|
@ -566,6 +566,7 @@ enum {
|
|||
NFSPROC4_CLNT_SECINFO_NO_NAME,
|
||||
NFSPROC4_CLNT_TEST_STATEID,
|
||||
NFSPROC4_CLNT_FREE_STATEID,
|
||||
NFSPROC4_CLNT_GETDEVICELIST,
|
||||
};
|
||||
|
||||
/* nfs41 types */
|
||||
|
|
|
|||
|
|
@ -99,9 +99,10 @@ struct nfs_open_context {
|
|||
|
||||
struct nfs_open_dir_context {
|
||||
struct rpc_cred *cred;
|
||||
unsigned long attr_gencount;
|
||||
__u64 dir_cookie;
|
||||
__u64 dup_cookie;
|
||||
int duped;
|
||||
signed char duped;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -568,12 +569,12 @@ extern struct posix_acl *nfs3_proc_getacl(struct inode *inode, int type);
|
|||
extern int nfs3_proc_setacl(struct inode *inode, int type,
|
||||
struct posix_acl *acl);
|
||||
extern int nfs3_proc_set_default_acl(struct inode *dir, struct inode *inode,
|
||||
mode_t mode);
|
||||
umode_t mode);
|
||||
extern void nfs3_forget_cached_acls(struct inode *inode);
|
||||
#else
|
||||
static inline int nfs3_proc_set_default_acl(struct inode *dir,
|
||||
struct inode *inode,
|
||||
mode_t mode)
|
||||
umode_t mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -131,8 +131,9 @@ struct nfs_server {
|
|||
struct fscache_cookie *fscache; /* superblock cookie */
|
||||
#endif
|
||||
|
||||
u32 pnfs_blksize; /* layout_blksize attr */
|
||||
#ifdef CONFIG_NFS_V4
|
||||
u32 attr_bitmask[2];/* V4 bitmask representing the set
|
||||
u32 attr_bitmask[3];/* V4 bitmask representing the set
|
||||
of attributes supported on this
|
||||
filesystem */
|
||||
u32 cache_consistency_bitmask[2];
|
||||
|
|
@ -145,6 +146,7 @@ struct nfs_server {
|
|||
filesystem */
|
||||
struct pnfs_layoutdriver_type *pnfs_curr_ld; /* Active layout driver */
|
||||
struct rpc_wait_queue roc_rpcwaitq;
|
||||
void *pnfs_ld_data; /* per mount point data */
|
||||
|
||||
/* the following fields are protected by nfs_client->cl_lock */
|
||||
struct rb_root state_owners;
|
||||
|
|
|
|||
|
|
@ -122,6 +122,7 @@ struct nfs_fsinfo {
|
|||
struct timespec time_delta; /* server time granularity */
|
||||
__u32 lease_time; /* in seconds */
|
||||
__u32 layouttype; /* supported pnfs layout driver */
|
||||
__u32 blksize; /* preferred pnfs io block size */
|
||||
};
|
||||
|
||||
struct nfs_fsstat {
|
||||
|
|
@ -235,6 +236,17 @@ struct nfs4_layoutget {
|
|||
gfp_t gfp_flags;
|
||||
};
|
||||
|
||||
struct nfs4_getdevicelist_args {
|
||||
const struct nfs_fh *fh;
|
||||
u32 layoutclass;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_getdevicelist_res {
|
||||
struct pnfs_devicelist *devlist;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_getdeviceinfo_args {
|
||||
struct pnfs_device *pdev;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
|
|
@ -257,12 +269,13 @@ struct nfs4_layoutcommit_res {
|
|||
struct nfs_fattr *fattr;
|
||||
const struct nfs_server *server;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
int status;
|
||||
};
|
||||
|
||||
struct nfs4_layoutcommit_data {
|
||||
struct rpc_task task;
|
||||
struct nfs_fattr fattr;
|
||||
struct pnfs_layout_segment *lseg;
|
||||
struct list_head lseg_list;
|
||||
struct rpc_cred *cred;
|
||||
struct nfs4_layoutcommit_args args;
|
||||
struct nfs4_layoutcommit_res res;
|
||||
|
|
@ -760,6 +773,11 @@ struct nfs3_getaclres {
|
|||
struct posix_acl * acl_default;
|
||||
};
|
||||
|
||||
struct nfs4_string {
|
||||
unsigned int len;
|
||||
char *data;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_NFS_V4
|
||||
|
||||
typedef u64 clientid4;
|
||||
|
|
@ -943,18 +961,13 @@ struct nfs4_server_caps_arg {
|
|||
};
|
||||
|
||||
struct nfs4_server_caps_res {
|
||||
u32 attr_bitmask[2];
|
||||
u32 attr_bitmask[3];
|
||||
u32 acl_bitmask;
|
||||
u32 has_links;
|
||||
u32 has_symlinks;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_string {
|
||||
unsigned int len;
|
||||
char *data;
|
||||
};
|
||||
|
||||
#define NFS4_PATHNAME_MAXCOMPONENTS 512
|
||||
struct nfs4_pathname {
|
||||
unsigned int ncomponents;
|
||||
|
|
|
|||
|
|
@ -196,12 +196,13 @@ extern struct property *of_find_property(const struct device_node *np,
|
|||
const char *name,
|
||||
int *lenp);
|
||||
extern int of_property_read_u32_array(const struct device_node *np,
|
||||
char *propname,
|
||||
const char *propname,
|
||||
u32 *out_values,
|
||||
size_t sz);
|
||||
|
||||
extern int of_property_read_string(struct device_node *np, char *propname,
|
||||
const char **out_string);
|
||||
extern int of_property_read_string(struct device_node *np,
|
||||
const char *propname,
|
||||
const char **out_string);
|
||||
extern int of_device_is_compatible(const struct device_node *device,
|
||||
const char *);
|
||||
extern int of_device_is_available(const struct device_node *device);
|
||||
|
|
@ -242,21 +243,30 @@ static inline bool of_have_populated_dt(void)
|
|||
}
|
||||
|
||||
static inline int of_property_read_u32_array(const struct device_node *np,
|
||||
char *propname, u32 *out_values, size_t sz)
|
||||
const char *propname,
|
||||
u32 *out_values, size_t sz)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline int of_property_read_string(struct device_node *np,
|
||||
char *propname, const char **out_string)
|
||||
const char *propname,
|
||||
const char **out_string)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline const void *of_get_property(const struct device_node *node,
|
||||
const char *name,
|
||||
int *lenp)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_OF */
|
||||
|
||||
static inline int of_property_read_u32(const struct device_node *np,
|
||||
char *propname,
|
||||
const char *propname,
|
||||
u32 *out_value)
|
||||
{
|
||||
return of_property_read_u32_array(np, propname, out_value, 1);
|
||||
|
|
|
|||
|
|
@ -57,6 +57,8 @@ extern int of_mm_gpiochip_add(struct device_node *np,
|
|||
extern void of_gpiochip_add(struct gpio_chip *gc);
|
||||
extern void of_gpiochip_remove(struct gpio_chip *gc);
|
||||
extern struct gpio_chip *of_node_to_gpiochip(struct device_node *np);
|
||||
extern int of_gpio_simple_xlate(struct gpio_chip *gc, struct device_node *np,
|
||||
const void *gpio_spec, u32 *flags);
|
||||
|
||||
#else /* CONFIG_OF_GPIO */
|
||||
|
||||
|
|
@ -72,6 +74,13 @@ static inline unsigned int of_gpio_count(struct device_node *np)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline int of_gpio_simple_xlate(struct gpio_chip *gc,
|
||||
struct device_node *np,
|
||||
const void *gpio_spec, u32 *flags)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline void of_gpiochip_add(struct gpio_chip *gc) { }
|
||||
static inline void of_gpiochip_remove(struct gpio_chip *gc) { }
|
||||
|
||||
|
|
|
|||
|
|
@ -124,9 +124,6 @@ enum pageflags {
|
|||
|
||||
/* SLOB */
|
||||
PG_slob_free = PG_private,
|
||||
|
||||
/* SLUB */
|
||||
PG_slub_frozen = PG_active,
|
||||
};
|
||||
|
||||
#ifndef __GENERATING_BOUNDS_H
|
||||
|
|
@ -212,8 +209,6 @@ PAGEFLAG(SwapBacked, swapbacked) __CLEARPAGEFLAG(SwapBacked, swapbacked)
|
|||
|
||||
__PAGEFLAG(SlobFree, slob_free)
|
||||
|
||||
__PAGEFLAG(SlubFrozen, slub_frozen)
|
||||
|
||||
/*
|
||||
* Private page markings that may be used by the filesystem that owns the page
|
||||
* for its own purposes.
|
||||
|
|
|
|||
|
|
@ -251,7 +251,8 @@ struct pci_dev {
|
|||
u8 revision; /* PCI revision, low byte of class word */
|
||||
u8 hdr_type; /* PCI header type (`multi' flag masked out) */
|
||||
u8 pcie_cap; /* PCI-E capability offset */
|
||||
u8 pcie_type; /* PCI-E device/port type */
|
||||
u8 pcie_type:4; /* PCI-E device/port type */
|
||||
u8 pcie_mpss:3; /* PCI-E Max Payload Size Supported */
|
||||
u8 rom_base_reg; /* which config register controls the ROM */
|
||||
u8 pin; /* which interrupt pin this device uses */
|
||||
|
||||
|
|
@ -617,6 +618,16 @@ struct pci_driver {
|
|||
/* these external functions are only available when PCI support is enabled */
|
||||
#ifdef CONFIG_PCI
|
||||
|
||||
extern void pcie_bus_configure_settings(struct pci_bus *bus, u8 smpss);
|
||||
|
||||
enum pcie_bus_config_types {
|
||||
PCIE_BUS_PERFORMANCE,
|
||||
PCIE_BUS_SAFE,
|
||||
PCIE_BUS_PEER2PEER,
|
||||
};
|
||||
|
||||
extern enum pcie_bus_config_types pcie_bus_config;
|
||||
|
||||
extern struct bus_type pci_bus_type;
|
||||
|
||||
/* Do NOT directly access these two variables, unless you are arch specific pci
|
||||
|
|
@ -796,10 +807,13 @@ int pcix_get_mmrbc(struct pci_dev *dev);
|
|||
int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc);
|
||||
int pcie_get_readrq(struct pci_dev *dev);
|
||||
int pcie_set_readrq(struct pci_dev *dev, int rq);
|
||||
int pcie_get_mps(struct pci_dev *dev);
|
||||
int pcie_set_mps(struct pci_dev *dev, int mps);
|
||||
int __pci_reset_function(struct pci_dev *dev);
|
||||
int pci_reset_function(struct pci_dev *dev);
|
||||
void pci_update_resource(struct pci_dev *dev, int resno);
|
||||
int __must_check pci_assign_resource(struct pci_dev *dev, int i);
|
||||
int __must_check pci_reassign_resource(struct pci_dev *dev, int i, resource_size_t add_size, resource_size_t align);
|
||||
int pci_select_bars(struct pci_dev *dev, unsigned long flags);
|
||||
|
||||
/* ROM control related routines */
|
||||
|
|
|
|||
|
|
@ -2709,6 +2709,16 @@
|
|||
#define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60
|
||||
#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MIN 0x3b00
|
||||
#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MAX 0x3b1f
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB0 0x3c20
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB1 0x3c21
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB2 0x3c22
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB3 0x3c23
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB4 0x3c24
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB5 0x3c25
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB6 0x3c26
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB7 0x3c27
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB8 0x3c2e
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB9 0x3c2f
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f
|
||||
#define PCI_DEVICE_ID_INTEL_5100_16 0x65f0
|
||||
#define PCI_DEVICE_ID_INTEL_5100_21 0x65f5
|
||||
|
|
|
|||
|
|
@ -944,8 +944,10 @@ extern void perf_pmu_unregister(struct pmu *pmu);
|
|||
|
||||
extern int perf_num_counters(void);
|
||||
extern const char *perf_pmu_name(void);
|
||||
extern void __perf_event_task_sched_in(struct task_struct *task);
|
||||
extern void __perf_event_task_sched_out(struct task_struct *task, struct task_struct *next);
|
||||
extern void __perf_event_task_sched_in(struct task_struct *prev,
|
||||
struct task_struct *task);
|
||||
extern void __perf_event_task_sched_out(struct task_struct *prev,
|
||||
struct task_struct *next);
|
||||
extern int perf_event_init_task(struct task_struct *child);
|
||||
extern void perf_event_exit_task(struct task_struct *child);
|
||||
extern void perf_event_free_task(struct task_struct *task);
|
||||
|
|
@ -1059,17 +1061,20 @@ perf_sw_event(u32 event_id, u64 nr, struct pt_regs *regs, u64 addr)
|
|||
|
||||
extern struct jump_label_key perf_sched_events;
|
||||
|
||||
static inline void perf_event_task_sched_in(struct task_struct *task)
|
||||
static inline void perf_event_task_sched_in(struct task_struct *prev,
|
||||
struct task_struct *task)
|
||||
{
|
||||
if (static_branch(&perf_sched_events))
|
||||
__perf_event_task_sched_in(task);
|
||||
__perf_event_task_sched_in(prev, task);
|
||||
}
|
||||
|
||||
static inline void perf_event_task_sched_out(struct task_struct *task, struct task_struct *next)
|
||||
static inline void perf_event_task_sched_out(struct task_struct *prev,
|
||||
struct task_struct *next)
|
||||
{
|
||||
perf_sw_event(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, NULL, 0);
|
||||
|
||||
__perf_event_task_sched_out(task, next);
|
||||
if (static_branch(&perf_sched_events))
|
||||
__perf_event_task_sched_out(prev, next);
|
||||
}
|
||||
|
||||
extern void perf_event_mmap(struct vm_area_struct *vma);
|
||||
|
|
@ -1139,10 +1144,11 @@ extern void perf_event_disable(struct perf_event *event);
|
|||
extern void perf_event_task_tick(void);
|
||||
#else
|
||||
static inline void
|
||||
perf_event_task_sched_in(struct task_struct *task) { }
|
||||
perf_event_task_sched_in(struct task_struct *prev,
|
||||
struct task_struct *task) { }
|
||||
static inline void
|
||||
perf_event_task_sched_out(struct task_struct *task,
|
||||
struct task_struct *next) { }
|
||||
perf_event_task_sched_out(struct task_struct *prev,
|
||||
struct task_struct *next) { }
|
||||
static inline int perf_event_init_task(struct task_struct *child) { return 0; }
|
||||
static inline void perf_event_exit_task(struct task_struct *child) { }
|
||||
static inline void perf_event_free_task(struct task_struct *task) { }
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ extern int __set_personality(unsigned int);
|
|||
* These occupy the top three bytes.
|
||||
*/
|
||||
enum {
|
||||
UNAME26 = 0x0020000,
|
||||
ADDR_NO_RANDOMIZE = 0x0040000, /* disable randomization of VA space */
|
||||
FDPIC_FUNCPTRS = 0x0080000, /* userspace function ptrs point to descriptors
|
||||
* (signal handling)
|
||||
|
|
|
|||
53
include/linux/platform_data/ntc_thermistor.h
Normal file
53
include/linux/platform_data/ntc_thermistor.h
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* ntc_thermistor.h - NTC Thermistors
|
||||
*
|
||||
* Copyright (C) 2010 Samsung Electronics
|
||||
* MyungJoo Ham <myungjoo.ham@samsung.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef _LINUX_NTC_H
|
||||
#define _LINUX_NTC_H
|
||||
|
||||
enum ntc_thermistor_type {
|
||||
TYPE_NCPXXWB473,
|
||||
TYPE_NCPXXWL333,
|
||||
};
|
||||
|
||||
struct ntc_thermistor_platform_data {
|
||||
/*
|
||||
* One (not both) of read_uV and read_ohm should be provided and only
|
||||
* one of the two should be provided.
|
||||
* Both functions should return negative value for an error case.
|
||||
*
|
||||
* pullup_uV, pullup_ohm, pulldown_ohm, and connect are required to use
|
||||
* read_uV()
|
||||
*
|
||||
* How to setup pullup_ohm, pulldown_ohm, and connect is
|
||||
* described at Documentation/hwmon/ntc
|
||||
*
|
||||
* pullup/down_ohm: 0 for infinite / not-connected
|
||||
*/
|
||||
int (*read_uV)(void);
|
||||
unsigned int pullup_uV;
|
||||
|
||||
unsigned int pullup_ohm;
|
||||
unsigned int pulldown_ohm;
|
||||
enum { NTC_CONNECTED_POSITIVE, NTC_CONNECTED_GROUND } connect;
|
||||
|
||||
int (*read_ohm)(void);
|
||||
};
|
||||
|
||||
#endif /* _LINUX_NTC_H */
|
||||
|
|
@ -72,8 +72,6 @@ extern int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd,
|
|||
extern void pm_genpd_init(struct generic_pm_domain *genpd,
|
||||
struct dev_power_governor *gov, bool is_off);
|
||||
extern int pm_genpd_poweron(struct generic_pm_domain *genpd);
|
||||
extern void pm_genpd_poweroff_unused(void);
|
||||
extern void genpd_queue_power_off_work(struct generic_pm_domain *genpd);
|
||||
#else
|
||||
static inline int pm_genpd_add_device(struct generic_pm_domain *genpd,
|
||||
struct device *dev)
|
||||
|
|
@ -101,8 +99,14 @@ static inline int pm_genpd_poweron(struct generic_pm_domain *genpd)
|
|||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
static inline void pm_genpd_poweroff_unused(void) {}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM_GENERIC_DOMAINS_RUNTIME
|
||||
extern void genpd_queue_power_off_work(struct generic_pm_domain *genpd);
|
||||
extern void pm_genpd_poweroff_unused(void);
|
||||
#else
|
||||
static inline void genpd_queue_power_off_work(struct generic_pm_domain *gpd) {}
|
||||
static inline void pm_genpd_poweroff_unused(void) {}
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_PM_DOMAIN_H */
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
#define __LINUX_POSIX_ACL_H
|
||||
|
||||
#include <linux/slab.h>
|
||||
#include <linux/rcupdate.h>
|
||||
|
||||
#define ACL_UNDEFINED_ID (-1)
|
||||
|
||||
|
|
@ -38,7 +39,10 @@ struct posix_acl_entry {
|
|||
};
|
||||
|
||||
struct posix_acl {
|
||||
atomic_t a_refcount;
|
||||
union {
|
||||
atomic_t a_refcount;
|
||||
struct rcu_head a_rcu;
|
||||
};
|
||||
unsigned int a_count;
|
||||
struct posix_acl_entry a_entries[0];
|
||||
};
|
||||
|
|
@ -65,7 +69,7 @@ static inline void
|
|||
posix_acl_release(struct posix_acl *acl)
|
||||
{
|
||||
if (acl && atomic_dec_and_test(&acl->a_refcount))
|
||||
kfree(acl);
|
||||
kfree_rcu(acl, a_rcu);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -75,29 +79,31 @@ extern void posix_acl_init(struct posix_acl *, int);
|
|||
extern struct posix_acl *posix_acl_alloc(int, gfp_t);
|
||||
extern int posix_acl_valid(const struct posix_acl *);
|
||||
extern int posix_acl_permission(struct inode *, const struct posix_acl *, int);
|
||||
extern struct posix_acl *posix_acl_from_mode(mode_t, gfp_t);
|
||||
extern int posix_acl_equiv_mode(const struct posix_acl *, mode_t *);
|
||||
extern int posix_acl_create(struct posix_acl **, gfp_t, mode_t *);
|
||||
extern int posix_acl_chmod(struct posix_acl **, gfp_t, mode_t);
|
||||
extern struct posix_acl *posix_acl_from_mode(umode_t, gfp_t);
|
||||
extern int posix_acl_equiv_mode(const struct posix_acl *, umode_t *);
|
||||
extern int posix_acl_create(struct posix_acl **, gfp_t, umode_t *);
|
||||
extern int posix_acl_chmod(struct posix_acl **, gfp_t, umode_t);
|
||||
|
||||
extern struct posix_acl *get_posix_acl(struct inode *, int);
|
||||
extern int set_posix_acl(struct inode *, int, struct posix_acl *);
|
||||
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
static inline struct posix_acl *get_cached_acl(struct inode *inode, int type)
|
||||
static inline struct posix_acl **acl_by_type(struct inode *inode, int type)
|
||||
{
|
||||
struct posix_acl **p, *acl;
|
||||
switch (type) {
|
||||
case ACL_TYPE_ACCESS:
|
||||
p = &inode->i_acl;
|
||||
break;
|
||||
return &inode->i_acl;
|
||||
case ACL_TYPE_DEFAULT:
|
||||
p = &inode->i_default_acl;
|
||||
break;
|
||||
return &inode->i_default_acl;
|
||||
default:
|
||||
return ERR_PTR(-EINVAL);
|
||||
BUG();
|
||||
}
|
||||
acl = ACCESS_ONCE(*p);
|
||||
}
|
||||
|
||||
static inline struct posix_acl *get_cached_acl(struct inode *inode, int type)
|
||||
{
|
||||
struct posix_acl **p = acl_by_type(inode, type);
|
||||
struct posix_acl *acl = ACCESS_ONCE(*p);
|
||||
if (acl) {
|
||||
spin_lock(&inode->i_lock);
|
||||
acl = *p;
|
||||
|
|
@ -108,41 +114,20 @@ static inline struct posix_acl *get_cached_acl(struct inode *inode, int type)
|
|||
return acl;
|
||||
}
|
||||
|
||||
static inline int negative_cached_acl(struct inode *inode, int type)
|
||||
static inline struct posix_acl *get_cached_acl_rcu(struct inode *inode, int type)
|
||||
{
|
||||
struct posix_acl **p, *acl;
|
||||
switch (type) {
|
||||
case ACL_TYPE_ACCESS:
|
||||
p = &inode->i_acl;
|
||||
break;
|
||||
case ACL_TYPE_DEFAULT:
|
||||
p = &inode->i_default_acl;
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
acl = ACCESS_ONCE(*p);
|
||||
if (acl)
|
||||
return 0;
|
||||
return 1;
|
||||
return rcu_dereference(*acl_by_type(inode, type));
|
||||
}
|
||||
|
||||
static inline void set_cached_acl(struct inode *inode,
|
||||
int type,
|
||||
struct posix_acl *acl)
|
||||
{
|
||||
struct posix_acl *old = NULL;
|
||||
struct posix_acl **p = acl_by_type(inode, type);
|
||||
struct posix_acl *old;
|
||||
spin_lock(&inode->i_lock);
|
||||
switch (type) {
|
||||
case ACL_TYPE_ACCESS:
|
||||
old = inode->i_acl;
|
||||
inode->i_acl = posix_acl_dup(acl);
|
||||
break;
|
||||
case ACL_TYPE_DEFAULT:
|
||||
old = inode->i_default_acl;
|
||||
inode->i_default_acl = posix_acl_dup(acl);
|
||||
break;
|
||||
}
|
||||
old = *p;
|
||||
rcu_assign_pointer(*p, posix_acl_dup(acl));
|
||||
spin_unlock(&inode->i_lock);
|
||||
if (old != ACL_NOT_CACHED)
|
||||
posix_acl_release(old);
|
||||
|
|
@ -150,18 +135,11 @@ static inline void set_cached_acl(struct inode *inode,
|
|||
|
||||
static inline void forget_cached_acl(struct inode *inode, int type)
|
||||
{
|
||||
struct posix_acl *old = NULL;
|
||||
struct posix_acl **p = acl_by_type(inode, type);
|
||||
struct posix_acl *old;
|
||||
spin_lock(&inode->i_lock);
|
||||
switch (type) {
|
||||
case ACL_TYPE_ACCESS:
|
||||
old = inode->i_acl;
|
||||
inode->i_acl = ACL_NOT_CACHED;
|
||||
break;
|
||||
case ACL_TYPE_DEFAULT:
|
||||
old = inode->i_default_acl;
|
||||
inode->i_default_acl = ACL_NOT_CACHED;
|
||||
break;
|
||||
}
|
||||
old = *p;
|
||||
*p = ACL_NOT_CACHED;
|
||||
spin_unlock(&inode->i_lock);
|
||||
if (old != ACL_NOT_CACHED)
|
||||
posix_acl_release(old);
|
||||
|
|
|
|||
|
|
@ -29,11 +29,14 @@
|
|||
* @battery_detect: GPIO which is used to detect battery presence
|
||||
* @battery_detect_present: gpio state when battery is present (0 / 1)
|
||||
* @i2c_retry_count: # of times to retry on i2c IO failure
|
||||
* @poll_retry_count: # of times to retry looking for new status after
|
||||
* external change notification
|
||||
*/
|
||||
struct bq20z75_platform_data {
|
||||
int battery_detect;
|
||||
int battery_detect_present;
|
||||
int i2c_retry_count;
|
||||
int poll_retry_count;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -23,8 +23,99 @@
|
|||
#ifndef __MAX17042_BATTERY_H_
|
||||
#define __MAX17042_BATTERY_H_
|
||||
|
||||
#define MAX17042_STATUS_BattAbsent (1 << 3)
|
||||
#define MAX17042_BATTERY_FULL (100)
|
||||
#define MAX17042_DEFAULT_SNS_RESISTOR (10000)
|
||||
|
||||
enum max17042_register {
|
||||
MAX17042_STATUS = 0x00,
|
||||
MAX17042_VALRT_Th = 0x01,
|
||||
MAX17042_TALRT_Th = 0x02,
|
||||
MAX17042_SALRT_Th = 0x03,
|
||||
MAX17042_AtRate = 0x04,
|
||||
MAX17042_RepCap = 0x05,
|
||||
MAX17042_RepSOC = 0x06,
|
||||
MAX17042_Age = 0x07,
|
||||
MAX17042_TEMP = 0x08,
|
||||
MAX17042_VCELL = 0x09,
|
||||
MAX17042_Current = 0x0A,
|
||||
MAX17042_AvgCurrent = 0x0B,
|
||||
MAX17042_Qresidual = 0x0C,
|
||||
MAX17042_SOC = 0x0D,
|
||||
MAX17042_AvSOC = 0x0E,
|
||||
MAX17042_RemCap = 0x0F,
|
||||
MAX17402_FullCAP = 0x10,
|
||||
MAX17042_TTE = 0x11,
|
||||
MAX17042_V_empty = 0x12,
|
||||
|
||||
MAX17042_RSLOW = 0x14,
|
||||
|
||||
MAX17042_AvgTA = 0x16,
|
||||
MAX17042_Cycles = 0x17,
|
||||
MAX17042_DesignCap = 0x18,
|
||||
MAX17042_AvgVCELL = 0x19,
|
||||
MAX17042_MinMaxTemp = 0x1A,
|
||||
MAX17042_MinMaxVolt = 0x1B,
|
||||
MAX17042_MinMaxCurr = 0x1C,
|
||||
MAX17042_CONFIG = 0x1D,
|
||||
MAX17042_ICHGTerm = 0x1E,
|
||||
MAX17042_AvCap = 0x1F,
|
||||
MAX17042_ManName = 0x20,
|
||||
MAX17042_DevName = 0x21,
|
||||
MAX17042_DevChem = 0x22,
|
||||
|
||||
MAX17042_TempNom = 0x24,
|
||||
MAX17042_TempCold = 0x25,
|
||||
MAX17042_TempHot = 0x26,
|
||||
MAX17042_AIN = 0x27,
|
||||
MAX17042_LearnCFG = 0x28,
|
||||
MAX17042_SHFTCFG = 0x29,
|
||||
MAX17042_RelaxCFG = 0x2A,
|
||||
MAX17042_MiscCFG = 0x2B,
|
||||
MAX17042_TGAIN = 0x2C,
|
||||
MAx17042_TOFF = 0x2D,
|
||||
MAX17042_CGAIN = 0x2E,
|
||||
MAX17042_COFF = 0x2F,
|
||||
|
||||
MAX17042_Q_empty = 0x33,
|
||||
MAX17042_T_empty = 0x34,
|
||||
|
||||
MAX17042_RCOMP0 = 0x38,
|
||||
MAX17042_TempCo = 0x39,
|
||||
MAX17042_Rx = 0x3A,
|
||||
MAX17042_T_empty0 = 0x3B,
|
||||
MAX17042_TaskPeriod = 0x3C,
|
||||
MAX17042_FSTAT = 0x3D,
|
||||
|
||||
MAX17042_SHDNTIMER = 0x3F,
|
||||
|
||||
MAX17042_VFRemCap = 0x4A,
|
||||
|
||||
MAX17042_QH = 0x4D,
|
||||
MAX17042_QL = 0x4E,
|
||||
};
|
||||
|
||||
/*
|
||||
* used for setting a register to a desired value
|
||||
* addr : address for a register
|
||||
* data : setting value for the register
|
||||
*/
|
||||
struct max17042_reg_data {
|
||||
u8 addr;
|
||||
u16 data;
|
||||
};
|
||||
|
||||
struct max17042_platform_data {
|
||||
struct max17042_reg_data *init_data;
|
||||
int num_init_data; /* Number of enties in init_data array */
|
||||
bool enable_current_sense;
|
||||
|
||||
/*
|
||||
* R_sns in micro-ohms.
|
||||
* default 10000 (if r_sns = 0) as it is the recommended value by
|
||||
* the datasheet although it can be changed by board designers.
|
||||
*/
|
||||
unsigned int r_sns;
|
||||
};
|
||||
|
||||
#endif /* __MAX17042_BATTERY_H_ */
|
||||
|
|
|
|||
|
|
@ -38,9 +38,12 @@ struct pstore_info {
|
|||
int (*open)(struct pstore_info *psi);
|
||||
int (*close)(struct pstore_info *psi);
|
||||
ssize_t (*read)(u64 *id, enum pstore_type_id *type,
|
||||
struct timespec *time);
|
||||
u64 (*write)(enum pstore_type_id type, size_t size);
|
||||
int (*erase)(u64 id);
|
||||
struct timespec *time, struct pstore_info *psi);
|
||||
u64 (*write)(enum pstore_type_id type, unsigned int part,
|
||||
size_t size, struct pstore_info *psi);
|
||||
int (*erase)(enum pstore_type_id type, u64 id,
|
||||
struct pstore_info *psi);
|
||||
void *data;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PSTORE
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ struct platform_pwm_backlight_data {
|
|||
unsigned int pwm_period_ns;
|
||||
int (*init)(struct device *dev);
|
||||
int (*notify)(struct device *dev, int brightness);
|
||||
void (*notify_after)(struct device *dev, int brightness);
|
||||
void (*exit)(struct device *dev);
|
||||
int (*check_fb)(struct device *dev, struct fb_info *info);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -39,7 +39,15 @@
|
|||
* when it is shrunk, before we rcu free the node. See shrink code for
|
||||
* details.
|
||||
*/
|
||||
#define RADIX_TREE_INDIRECT_PTR 1
|
||||
#define RADIX_TREE_INDIRECT_PTR 1
|
||||
/*
|
||||
* A common use of the radix tree is to store pointers to struct pages;
|
||||
* but shmem/tmpfs needs also to store swap entries in the same tree:
|
||||
* those are marked as exceptional entries to distinguish them.
|
||||
* EXCEPTIONAL_ENTRY tests the bit, EXCEPTIONAL_SHIFT shifts content past it.
|
||||
*/
|
||||
#define RADIX_TREE_EXCEPTIONAL_ENTRY 2
|
||||
#define RADIX_TREE_EXCEPTIONAL_SHIFT 2
|
||||
|
||||
#define radix_tree_indirect_to_ptr(ptr) \
|
||||
radix_tree_indirect_to_ptr((void __force *)(ptr))
|
||||
|
|
@ -173,6 +181,28 @@ static inline int radix_tree_deref_retry(void *arg)
|
|||
return unlikely((unsigned long)arg & RADIX_TREE_INDIRECT_PTR);
|
||||
}
|
||||
|
||||
/**
|
||||
* radix_tree_exceptional_entry - radix_tree_deref_slot gave exceptional entry?
|
||||
* @arg: value returned by radix_tree_deref_slot
|
||||
* Returns: 0 if well-aligned pointer, non-0 if exceptional entry.
|
||||
*/
|
||||
static inline int radix_tree_exceptional_entry(void *arg)
|
||||
{
|
||||
/* Not unlikely because radix_tree_exception often tested first */
|
||||
return (unsigned long)arg & RADIX_TREE_EXCEPTIONAL_ENTRY;
|
||||
}
|
||||
|
||||
/**
|
||||
* radix_tree_exception - radix_tree_deref_slot returned either exception?
|
||||
* @arg: value returned by radix_tree_deref_slot
|
||||
* Returns: 0 if well-aligned pointer, non-0 if either kind of exception.
|
||||
*/
|
||||
static inline int radix_tree_exception(void *arg)
|
||||
{
|
||||
return unlikely((unsigned long)arg &
|
||||
(RADIX_TREE_INDIRECT_PTR | RADIX_TREE_EXCEPTIONAL_ENTRY));
|
||||
}
|
||||
|
||||
/**
|
||||
* radix_tree_replace_slot - replace item in a slot
|
||||
* @pslot: pointer to slot, returned by radix_tree_lookup_slot
|
||||
|
|
@ -194,8 +224,8 @@ void *radix_tree_delete(struct radix_tree_root *, unsigned long);
|
|||
unsigned int
|
||||
radix_tree_gang_lookup(struct radix_tree_root *root, void **results,
|
||||
unsigned long first_index, unsigned int max_items);
|
||||
unsigned int
|
||||
radix_tree_gang_lookup_slot(struct radix_tree_root *root, void ***results,
|
||||
unsigned int radix_tree_gang_lookup_slot(struct radix_tree_root *root,
|
||||
void ***results, unsigned long *indices,
|
||||
unsigned long first_index, unsigned int max_items);
|
||||
unsigned long radix_tree_next_hole(struct radix_tree_root *root,
|
||||
unsigned long index, unsigned long max_scan);
|
||||
|
|
@ -222,6 +252,7 @@ unsigned long radix_tree_range_tag_if_tagged(struct radix_tree_root *root,
|
|||
unsigned long nr_to_tag,
|
||||
unsigned int fromtag, unsigned int totag);
|
||||
int radix_tree_tagged(struct radix_tree_root *root, unsigned int tag);
|
||||
unsigned long radix_tree_locate_item(struct radix_tree_root *root, void *item);
|
||||
|
||||
static inline void radix_tree_preload_end(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -57,18 +57,6 @@ extern void add_interrupt_randomness(int irq);
|
|||
extern void get_random_bytes(void *buf, int nbytes);
|
||||
void generate_random_uuid(unsigned char uuid_out[16]);
|
||||
|
||||
extern __u32 secure_ip_id(__be32 daddr);
|
||||
extern __u32 secure_ipv6_id(const __be32 daddr[4]);
|
||||
extern u32 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport);
|
||||
extern u32 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr,
|
||||
__be16 dport);
|
||||
extern __u32 secure_tcp_sequence_number(__be32 saddr, __be32 daddr,
|
||||
__be16 sport, __be16 dport);
|
||||
extern __u32 secure_tcpv6_sequence_number(__be32 *saddr, __be32 *daddr,
|
||||
__be16 sport, __be16 dport);
|
||||
extern u64 secure_dccp_sequence_number(__be32 saddr, __be32 daddr,
|
||||
__be16 sport, __be16 dport);
|
||||
|
||||
#ifndef MODULE
|
||||
extern const struct file_operations random_fops, urandom_fops;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -122,6 +122,9 @@ struct regulator;
|
|||
struct regulator_bulk_data {
|
||||
const char *supply;
|
||||
struct regulator *consumer;
|
||||
|
||||
/* private: Internal use */
|
||||
int ret;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_REGULATOR)
|
||||
|
|
|
|||
|
|
@ -188,18 +188,16 @@ struct regulator_dev {
|
|||
|
||||
/* lists we belong to */
|
||||
struct list_head list; /* list of all regulators */
|
||||
struct list_head slist; /* list of supplied regulators */
|
||||
|
||||
/* lists we own */
|
||||
struct list_head consumer_list; /* consumers we supply */
|
||||
struct list_head supply_list; /* regulators we supply */
|
||||
|
||||
struct blocking_notifier_head notifier;
|
||||
struct mutex mutex; /* consumer lock */
|
||||
struct module *owner;
|
||||
struct device dev;
|
||||
struct regulation_constraints *constraints;
|
||||
struct regulator_dev *supply; /* for tree */
|
||||
struct regulator *supply; /* for tree */
|
||||
|
||||
void *reg_data; /* regulator_dev data */
|
||||
|
||||
|
|
|
|||
|
|
@ -36,12 +36,12 @@
|
|||
#define RIO_PEF_PROCESSOR 0x20000000 /* [I] Processor */
|
||||
#define RIO_PEF_SWITCH 0x10000000 /* [I] Switch */
|
||||
#define RIO_PEF_MULTIPORT 0x08000000 /* [VI, 2.1] Multiport */
|
||||
#define RIO_PEF_INB_MBOX 0x00f00000 /* [II] Mailboxes */
|
||||
#define RIO_PEF_INB_MBOX0 0x00800000 /* [II] Mailbox 0 */
|
||||
#define RIO_PEF_INB_MBOX1 0x00400000 /* [II] Mailbox 1 */
|
||||
#define RIO_PEF_INB_MBOX2 0x00200000 /* [II] Mailbox 2 */
|
||||
#define RIO_PEF_INB_MBOX3 0x00100000 /* [II] Mailbox 3 */
|
||||
#define RIO_PEF_INB_DOORBELL 0x00080000 /* [II] Doorbells */
|
||||
#define RIO_PEF_INB_MBOX 0x00f00000 /* [II, <= 1.2] Mailboxes */
|
||||
#define RIO_PEF_INB_MBOX0 0x00800000 /* [II, <= 1.2] Mailbox 0 */
|
||||
#define RIO_PEF_INB_MBOX1 0x00400000 /* [II, <= 1.2] Mailbox 1 */
|
||||
#define RIO_PEF_INB_MBOX2 0x00200000 /* [II, <= 1.2] Mailbox 2 */
|
||||
#define RIO_PEF_INB_MBOX3 0x00100000 /* [II, <= 1.2] Mailbox 3 */
|
||||
#define RIO_PEF_INB_DOORBELL 0x00080000 /* [II, <= 1.2] Doorbells */
|
||||
#define RIO_PEF_EXT_RT 0x00000200 /* [III, 1.3] Extended route table support */
|
||||
#define RIO_PEF_STD_RT 0x00000100 /* [III, 1.3] Standard route table support */
|
||||
#define RIO_PEF_CTLS 0x00000010 /* [III] CTLS */
|
||||
|
|
@ -102,7 +102,7 @@
|
|||
#define RIO_SWITCH_RT_LIMIT 0x34 /* [III, 1.3] Switch Route Table Destination ID Limit CAR */
|
||||
#define RIO_RT_MAX_DESTID 0x0000ffff
|
||||
|
||||
#define RIO_MBOX_CSR 0x40 /* [II] Mailbox CSR */
|
||||
#define RIO_MBOX_CSR 0x40 /* [II, <= 1.2] Mailbox CSR */
|
||||
#define RIO_MBOX0_AVAIL 0x80000000 /* [II] Mbox 0 avail */
|
||||
#define RIO_MBOX0_FULL 0x40000000 /* [II] Mbox 0 full */
|
||||
#define RIO_MBOX0_EMPTY 0x20000000 /* [II] Mbox 0 empty */
|
||||
|
|
@ -128,8 +128,8 @@
|
|||
#define RIO_MBOX3_FAIL 0x00000008 /* [II] Mbox 3 fail */
|
||||
#define RIO_MBOX3_ERROR 0x00000004 /* [II] Mbox 3 error */
|
||||
|
||||
#define RIO_WRITE_PORT_CSR 0x44 /* [I] Write Port CSR */
|
||||
#define RIO_DOORBELL_CSR 0x44 /* [II] Doorbell CSR */
|
||||
#define RIO_WRITE_PORT_CSR 0x44 /* [I, <= 1.2] Write Port CSR */
|
||||
#define RIO_DOORBELL_CSR 0x44 /* [II, <= 1.2] Doorbell CSR */
|
||||
#define RIO_DOORBELL_AVAIL 0x80000000 /* [II] Doorbell avail */
|
||||
#define RIO_DOORBELL_FULL 0x40000000 /* [II] Doorbell full */
|
||||
#define RIO_DOORBELL_EMPTY 0x20000000 /* [II] Doorbell empty */
|
||||
|
|
|
|||
|
|
@ -97,6 +97,9 @@ struct rtc_pll_info {
|
|||
#define RTC_AF 0x20 /* Alarm interrupt */
|
||||
#define RTC_UF 0x10 /* Update interrupt for 1Hz RTC */
|
||||
|
||||
|
||||
#define RTC_MAX_FREQ 8192
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
|
|
|||
|
|
@ -1767,6 +1767,7 @@ extern void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *
|
|||
#define PF_DUMPCORE 0x00000200 /* dumped core */
|
||||
#define PF_SIGNALED 0x00000400 /* killed by a signal */
|
||||
#define PF_MEMALLOC 0x00000800 /* Allocating memory */
|
||||
#define PF_NPROC_EXCEEDED 0x00001000 /* set_user noticed that RLIMIT_NPROC was exceeded */
|
||||
#define PF_USED_MATH 0x00002000 /* if unset the fpu must be initialized before use */
|
||||
#define PF_FREEZING 0x00004000 /* freeze in progress. do not account to load */
|
||||
#define PF_NOFREEZE 0x00008000 /* this thread should not be frozen */
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@
|
|||
* Generic header for SuperH SCI(F) (used by sh/sh64/h8300 and related parts)
|
||||
*/
|
||||
|
||||
#define SCIx_NOT_SUPPORTED (-1)
|
||||
|
||||
enum {
|
||||
SCBRR_ALGO_1, /* ((clk + 16 * bps) / (16 * bps) - 1) */
|
||||
SCBRR_ALGO_2, /* ((clk + 16 * bps) / (32 * bps) - 1) */
|
||||
|
|
@ -25,6 +27,28 @@ enum {
|
|||
#define SCSCR_CKE1 (1 << 1)
|
||||
#define SCSCR_CKE0 (1 << 0)
|
||||
|
||||
/* SCxSR SCI */
|
||||
#define SCI_TDRE 0x80
|
||||
#define SCI_RDRF 0x40
|
||||
#define SCI_ORER 0x20
|
||||
#define SCI_FER 0x10
|
||||
#define SCI_PER 0x08
|
||||
#define SCI_TEND 0x04
|
||||
|
||||
#define SCI_DEFAULT_ERROR_MASK (SCI_PER | SCI_FER)
|
||||
|
||||
/* SCxSR SCIF */
|
||||
#define SCIF_ER 0x0080
|
||||
#define SCIF_TEND 0x0040
|
||||
#define SCIF_TDFE 0x0020
|
||||
#define SCIF_BRK 0x0010
|
||||
#define SCIF_FER 0x0008
|
||||
#define SCIF_PER 0x0004
|
||||
#define SCIF_RDF 0x0002
|
||||
#define SCIF_DR 0x0001
|
||||
|
||||
#define SCIF_DEFAULT_ERROR_MASK (SCIF_PER | SCIF_FER | SCIF_ER | SCIF_BRK)
|
||||
|
||||
/* Offsets into the sci_port->irqs array */
|
||||
enum {
|
||||
SCIx_ERI_IRQ,
|
||||
|
|
@ -32,6 +56,24 @@ enum {
|
|||
SCIx_TXI_IRQ,
|
||||
SCIx_BRI_IRQ,
|
||||
SCIx_NR_IRQS,
|
||||
|
||||
SCIx_MUX_IRQ = SCIx_NR_IRQS, /* special case */
|
||||
};
|
||||
|
||||
enum {
|
||||
SCIx_PROBE_REGTYPE,
|
||||
|
||||
SCIx_SCI_REGTYPE,
|
||||
SCIx_IRDA_REGTYPE,
|
||||
SCIx_SCIFA_REGTYPE,
|
||||
SCIx_SCIFB_REGTYPE,
|
||||
SCIx_SH3_SCIF_REGTYPE,
|
||||
SCIx_SH4_SCIF_REGTYPE,
|
||||
SCIx_SH4_SCIF_NO_SCSPTR_REGTYPE,
|
||||
SCIx_SH4_SCIF_FIFODATA_REGTYPE,
|
||||
SCIx_SH7705_SCIF_REGTYPE,
|
||||
|
||||
SCIx_NR_REGTYPES,
|
||||
};
|
||||
|
||||
#define SCIx_IRQ_MUXED(irq) \
|
||||
|
|
@ -42,8 +84,29 @@ enum {
|
|||
[SCIx_BRI_IRQ] = (irq), \
|
||||
}
|
||||
|
||||
#define SCIx_IRQ_IS_MUXED(port) \
|
||||
((port)->cfg->irqs[SCIx_ERI_IRQ] == \
|
||||
(port)->cfg->irqs[SCIx_RXI_IRQ]) || \
|
||||
((port)->cfg->irqs[SCIx_ERI_IRQ] && \
|
||||
!(port)->cfg->irqs[SCIx_RXI_IRQ])
|
||||
/*
|
||||
* SCI register subset common for all port types.
|
||||
* Not all registers will exist on all parts.
|
||||
*/
|
||||
enum {
|
||||
SCSMR, SCBRR, SCSCR, SCxSR,
|
||||
SCFCR, SCFDR, SCxTDR, SCxRDR,
|
||||
SCLSR, SCTFDR, SCRFDR, SCSPTR,
|
||||
|
||||
SCIx_NR_REGS,
|
||||
};
|
||||
|
||||
struct device;
|
||||
|
||||
struct plat_sci_port_ops {
|
||||
void (*init_pins)(struct uart_port *, unsigned int cflag);
|
||||
};
|
||||
|
||||
/*
|
||||
* Platform device specific platform_data struct
|
||||
*/
|
||||
|
|
@ -56,6 +119,18 @@ struct plat_sci_port {
|
|||
unsigned int scbrr_algo_id; /* SCBRR calculation algo */
|
||||
unsigned int scscr; /* SCSCR initialization */
|
||||
|
||||
/*
|
||||
* Platform overrides if necessary, defaults otherwise.
|
||||
*/
|
||||
int overrun_bit;
|
||||
unsigned int error_mask;
|
||||
|
||||
int port_reg;
|
||||
unsigned char regshift;
|
||||
unsigned char regtype;
|
||||
|
||||
struct plat_sci_port_ops *ops;
|
||||
|
||||
struct device *dma_dev;
|
||||
|
||||
unsigned int dma_slave_tx;
|
||||
|
|
|
|||
|
|
@ -147,4 +147,8 @@ int sh_clk_div4_reparent_register(struct clk *clks, int nr,
|
|||
int sh_clk_div6_register(struct clk *clks, int nr);
|
||||
int sh_clk_div6_reparent_register(struct clk *clks, int nr);
|
||||
|
||||
#define CLKDEV_CON_ID(_id, _clk) { .con_id = _id, .clk = _clk }
|
||||
#define CLKDEV_DEV_ID(_id, _clk) { .dev_id = _id, .clk = _clk }
|
||||
#define CLKDEV_ICK_ID(_cid, _did, _clk) { .con_id = _cid, .dev_id = _did, .clk = _clk }
|
||||
|
||||
#endif /* __SH_CLOCK_H */
|
||||
|
|
|
|||
|
|
@ -62,6 +62,12 @@ struct sh_dmae_pdata {
|
|||
const unsigned int *ts_shift;
|
||||
int ts_shift_num;
|
||||
u16 dmaor_init;
|
||||
unsigned int chcr_offset;
|
||||
u32 chcr_ie_bit;
|
||||
|
||||
unsigned int dmaor_is_32bit:1;
|
||||
unsigned int needs_tend_set:1;
|
||||
unsigned int no_dmars:1;
|
||||
};
|
||||
|
||||
/* DMA register */
|
||||
|
|
@ -71,6 +77,8 @@ struct sh_dmae_pdata {
|
|||
#define CHCR 0x0C
|
||||
#define DMAOR 0x40
|
||||
|
||||
#define TEND 0x18 /* USB-DMAC */
|
||||
|
||||
/* DMAOR definitions */
|
||||
#define DMAOR_AE 0x00000004
|
||||
#define DMAOR_NMIF 0x00000002
|
||||
|
|
|
|||
|
|
@ -95,6 +95,9 @@ struct shmid_kernel /* private to the kernel */
|
|||
pid_t shm_cprid;
|
||||
pid_t shm_lprid;
|
||||
struct user_struct *mlock_user;
|
||||
|
||||
/* The task created the shm object. NULL if the task is dead. */
|
||||
struct task_struct *shm_creator;
|
||||
};
|
||||
|
||||
/* shm_mode upper byte flags */
|
||||
|
|
|
|||
|
|
@ -8,22 +8,15 @@
|
|||
|
||||
/* inode in-kernel data */
|
||||
|
||||
#define SHMEM_NR_DIRECT 16
|
||||
|
||||
#define SHMEM_SYMLINK_INLINE_LEN (SHMEM_NR_DIRECT * sizeof(swp_entry_t))
|
||||
|
||||
struct shmem_inode_info {
|
||||
spinlock_t lock;
|
||||
unsigned long flags;
|
||||
unsigned long alloced; /* data pages alloced to file */
|
||||
unsigned long swapped; /* subtotal assigned to swap */
|
||||
unsigned long next_index; /* highest alloced index + 1 */
|
||||
struct shared_policy policy; /* NUMA memory alloc policy */
|
||||
struct page *i_indirect; /* top indirect blocks page */
|
||||
union {
|
||||
swp_entry_t i_direct[SHMEM_NR_DIRECT]; /* first blocks */
|
||||
char inline_symlink[SHMEM_SYMLINK_INLINE_LEN];
|
||||
unsigned long swapped; /* subtotal assigned to swap */
|
||||
char *symlink; /* unswappable short symlink */
|
||||
};
|
||||
struct shared_policy policy; /* NUMA memory alloc policy */
|
||||
struct list_head swaplist; /* chain of maybes on swap */
|
||||
struct list_head xattr_list; /* list of shmem_xattr */
|
||||
struct inode vfs_inode;
|
||||
|
|
@ -49,7 +42,7 @@ static inline struct shmem_inode_info *SHMEM_I(struct inode *inode)
|
|||
/*
|
||||
* Functions in mm/shmem.c called directly from elsewhere:
|
||||
*/
|
||||
extern int init_tmpfs(void);
|
||||
extern int shmem_init(void);
|
||||
extern int shmem_fill_super(struct super_block *sb, void *data, int silent);
|
||||
extern struct file *shmem_file_setup(const char *name,
|
||||
loff_t size, unsigned long flags);
|
||||
|
|
@ -59,8 +52,6 @@ extern struct page *shmem_read_mapping_page_gfp(struct address_space *mapping,
|
|||
pgoff_t index, gfp_t gfp_mask);
|
||||
extern void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end);
|
||||
extern int shmem_unuse(swp_entry_t entry, struct page *page);
|
||||
extern void mem_cgroup_get_shmem_target(struct inode *inode, pgoff_t pgoff,
|
||||
struct page **pagep, swp_entry_t *ent);
|
||||
|
||||
static inline struct page *shmem_read_mapping_page(
|
||||
struct address_space *mapping, pgoff_t index)
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ enum stat_item {
|
|||
ALLOC_FROM_PARTIAL, /* Cpu slab acquired from partial list */
|
||||
ALLOC_SLAB, /* Cpu slab acquired from page allocator */
|
||||
ALLOC_REFILL, /* Refill cpu slab from slab freelist */
|
||||
ALLOC_NODE_MISMATCH, /* Switching cpu slab */
|
||||
FREE_SLAB, /* Slab freed to the page allocator */
|
||||
CPUSLAB_FLUSH, /* Abandoning of the cpu slab */
|
||||
DEACTIVATE_FULL, /* Cpu slab was full when deactivated */
|
||||
|
|
@ -31,8 +32,10 @@ enum stat_item {
|
|||
DEACTIVATE_TO_HEAD, /* Cpu slab was moved to the head of partials */
|
||||
DEACTIVATE_TO_TAIL, /* Cpu slab was moved to the tail of partials */
|
||||
DEACTIVATE_REMOTE_FREES,/* Slab contained remotely freed objects */
|
||||
DEACTIVATE_BYPASS, /* Implicit deactivation */
|
||||
ORDER_FALLBACK, /* Number of times fallback was necessary */
|
||||
CMPXCHG_DOUBLE_CPU_FAIL,/* Failure of this_cpu_cmpxchg_double */
|
||||
CMPXCHG_DOUBLE_FAIL, /* Number of times that cmpxchg double did not match */
|
||||
NR_SLUB_STAT_ITEMS };
|
||||
|
||||
struct kmem_cache_cpu {
|
||||
|
|
|
|||
|
|
@ -8,8 +8,10 @@
|
|||
#define _K_SS_ALIGNSIZE (__alignof__ (struct sockaddr *))
|
||||
/* Implementation specific desired alignment */
|
||||
|
||||
typedef unsigned short __kernel_sa_family_t;
|
||||
|
||||
struct __kernel_sockaddr_storage {
|
||||
unsigned short ss_family; /* address family */
|
||||
__kernel_sa_family_t ss_family; /* address family */
|
||||
/* Following field(s) are implementation specific */
|
||||
char __data[_K_SS_MAXSIZE - sizeof(unsigned short)];
|
||||
/* space to achieve desired size, */
|
||||
|
|
@ -35,7 +37,7 @@ struct seq_file;
|
|||
extern void socket_seq_show(struct seq_file *seq);
|
||||
#endif
|
||||
|
||||
typedef unsigned short sa_family_t;
|
||||
typedef __kernel_sa_family_t sa_family_t;
|
||||
|
||||
/*
|
||||
* 1003.1g requires sa_family_t and that sa_data is char.
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
#ifndef _LINUX_SWAPOPS_H
|
||||
#define _LINUX_SWAPOPS_H
|
||||
|
||||
#include <linux/radix-tree.h>
|
||||
|
||||
/*
|
||||
* swapcache pages are stored in the swapper_space radix tree. We want to
|
||||
* 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)
|
|||
return __swp_entry_to_pte(arch_entry);
|
||||
}
|
||||
|
||||
static inline swp_entry_t radix_to_swp_entry(void *arg)
|
||||
{
|
||||
swp_entry_t entry;
|
||||
|
||||
entry.val = (unsigned long)arg >> RADIX_TREE_EXCEPTIONAL_SHIFT;
|
||||
return entry;
|
||||
}
|
||||
|
||||
static inline void *swp_to_radix_entry(swp_entry_t entry)
|
||||
{
|
||||
unsigned long value;
|
||||
|
||||
value = entry.val << RADIX_TREE_EXCEPTIONAL_SHIFT;
|
||||
return (void *)(value | RADIX_TREE_EXCEPTIONAL_ENTRY);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MIGRATION
|
||||
static inline swp_entry_t make_migration_entry(struct page *page, int write)
|
||||
{
|
||||
|
|
@ -169,3 +190,5 @@ static inline int non_swap_entry(swp_entry_t entry)
|
|||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_SWAPOPS_H */
|
||||
|
|
|
|||
|
|
@ -702,9 +702,6 @@ asmlinkage long sys_sysctl(struct __sysctl_args __user *args);
|
|||
asmlinkage long sys_sysinfo(struct sysinfo __user *info);
|
||||
asmlinkage long sys_sysfs(int option,
|
||||
unsigned long arg1, unsigned long arg2);
|
||||
asmlinkage long sys_nfsservctl(int cmd,
|
||||
struct nfsctl_arg __user *arg,
|
||||
void __user *res);
|
||||
asmlinkage long sys_syslog(int type, char __user *buf, int len);
|
||||
asmlinkage long sys_uselib(const char __user *library);
|
||||
asmlinkage long sys_ni_syscall(void);
|
||||
|
|
|
|||
|
|
@ -85,22 +85,6 @@ struct thermal_cooling_device {
|
|||
((long)t-2732+5)/10 : ((long)t-2732-5)/10)
|
||||
#define CELSIUS_TO_KELVIN(t) ((t)*10+2732)
|
||||
|
||||
#if defined(CONFIG_THERMAL_HWMON)
|
||||
/* thermal zone devices with the same type share one hwmon device */
|
||||
struct thermal_hwmon_device {
|
||||
char type[THERMAL_NAME_LENGTH];
|
||||
struct device *device;
|
||||
int count;
|
||||
struct list_head tz_list;
|
||||
struct list_head node;
|
||||
};
|
||||
|
||||
struct thermal_hwmon_attr {
|
||||
struct device_attribute attr;
|
||||
char name[16];
|
||||
};
|
||||
#endif
|
||||
|
||||
struct thermal_zone_device {
|
||||
int id;
|
||||
char type[THERMAL_NAME_LENGTH];
|
||||
|
|
@ -120,12 +104,6 @@ struct thermal_zone_device {
|
|||
struct mutex lock; /* protect cooling devices list */
|
||||
struct list_head node;
|
||||
struct delayed_work poll_queue;
|
||||
#if defined(CONFIG_THERMAL_HWMON)
|
||||
struct list_head hwmon_node;
|
||||
struct thermal_hwmon_device *hwmon;
|
||||
struct thermal_hwmon_attr temp_input; /* hwmon sys attr */
|
||||
struct thermal_hwmon_attr temp_crit; /* hwmon sys attr */
|
||||
#endif
|
||||
};
|
||||
/* Adding event notification support elements */
|
||||
#define THERMAL_GENL_FAMILY_NAME "thermal_event"
|
||||
|
|
|
|||
|
|
@ -410,7 +410,28 @@ struct gps_event_hdr {
|
|||
u16 plen;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* platform data */
|
||||
/**
|
||||
* struct ti_st_plat_data - platform data shared between ST driver and
|
||||
* platform specific board file which adds the ST device.
|
||||
* @nshutdown_gpio: Host's GPIO line to which chip's BT_EN is connected.
|
||||
* @dev_name: The UART/TTY name to which chip is interfaced. (eg: /dev/ttyS1)
|
||||
* @flow_cntrl: Should always be 1, since UART's CTS/RTS is used for PM
|
||||
* purposes.
|
||||
* @baud_rate: The baud rate supported by the Host UART controller, this will
|
||||
* be shared across with the chip via a HCI VS command from User-Space Init
|
||||
* Mgr application.
|
||||
* @suspend:
|
||||
* @resume: legacy PM routines hooked to platform specific board file, so as
|
||||
* to take chip-host interface specific action.
|
||||
* @chip_enable:
|
||||
* @chip_disable: Platform/Interface specific mux mode setting, GPIO
|
||||
* configuring, Host side PM disabling etc.. can be done here.
|
||||
* @chip_asleep:
|
||||
* @chip_awake: Chip specific deep sleep states is communicated to Host
|
||||
* specific board-xx.c to take actions such as cut UART clocks when chip
|
||||
* asleep or run host faster when chip awake etc..
|
||||
*
|
||||
*/
|
||||
struct ti_st_plat_data {
|
||||
long nshutdown_gpio;
|
||||
unsigned char dev_name[UART_DEV_NAME_LEN]; /* uart name */
|
||||
|
|
@ -418,6 +439,10 @@ struct ti_st_plat_data {
|
|||
unsigned long baud_rate;
|
||||
int (*suspend)(struct platform_device *, pm_message_t);
|
||||
int (*resume)(struct platform_device *);
|
||||
int (*chip_enable) (struct kim_data_s *);
|
||||
int (*chip_disable) (struct kim_data_s *);
|
||||
int (*chip_asleep) (struct kim_data_s *);
|
||||
int (*chip_awake) (struct kim_data_s *);
|
||||
};
|
||||
|
||||
#endif /* TI_WILINK_ST_H */
|
||||
|
|
|
|||
|
|
@ -421,6 +421,8 @@ extern void tty_driver_flush_buffer(struct tty_struct *tty);
|
|||
extern void tty_throttle(struct tty_struct *tty);
|
||||
extern void tty_unthrottle(struct tty_struct *tty);
|
||||
extern int tty_do_resize(struct tty_struct *tty, struct winsize *ws);
|
||||
extern void tty_driver_remove_tty(struct tty_driver *driver,
|
||||
struct tty_struct *tty);
|
||||
extern void tty_shutdown(struct tty_struct *tty);
|
||||
extern void tty_free_termios(struct tty_struct *tty);
|
||||
extern int is_current_pgrp_orphaned(void);
|
||||
|
|
|
|||
|
|
@ -47,6 +47,9 @@
|
|||
*
|
||||
* This routine is called synchronously when a particular tty device
|
||||
* is closed for the last time freeing up the resources.
|
||||
* Note that tty_shutdown() is not called if ops->shutdown is defined.
|
||||
* This means one is responsible to take care of calling ops->remove (e.g.
|
||||
* via tty_driver_remove_tty) and releasing tty->termios.
|
||||
*
|
||||
*
|
||||
* void (*cleanup)(struct tty_struct * tty);
|
||||
|
|
|
|||
|
|
@ -12,15 +12,6 @@
|
|||
*
|
||||
* (thresh - thresh/DIRTY_FULL_SCOPE, thresh)
|
||||
*
|
||||
* The 1/16 region above the global dirty limit will be put to maximum pauses:
|
||||
*
|
||||
* (limit, limit + limit/DIRTY_MAXPAUSE_AREA)
|
||||
*
|
||||
* The 1/16 region above the max-pause region, dirty exceeded bdi's will be put
|
||||
* to loops:
|
||||
*
|
||||
* (limit + limit/DIRTY_MAXPAUSE_AREA, limit + limit/DIRTY_PASSGOOD_AREA)
|
||||
*
|
||||
* Further beyond, all dirtier tasks will enter a loop waiting (possibly long
|
||||
* time) for the dirty pages to drop, unless written enough pages.
|
||||
*
|
||||
|
|
@ -31,8 +22,6 @@
|
|||
*/
|
||||
#define DIRTY_SCOPE 8
|
||||
#define DIRTY_FULL_SCOPE (DIRTY_SCOPE / 2)
|
||||
#define DIRTY_MAXPAUSE_AREA 16
|
||||
#define DIRTY_PASSGOOD_AREA 8
|
||||
|
||||
/*
|
||||
* 4MB minimal write chunk size
|
||||
|
|
|
|||
Loading…
Reference in a new issue