Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
334d0dd8b6
2168 changed files with 143813 additions and 45260 deletions
|
@ -96,6 +96,7 @@ header-y += iso_fs.h
|
|||
header-y += ixjuser.h
|
||||
header-y += jffs2.h
|
||||
header-y += keyctl.h
|
||||
header-y += kvm.h
|
||||
header-y += limits.h
|
||||
header-y += lock_dlm_plock.h
|
||||
header-y += magic.h
|
||||
|
|
|
@ -122,9 +122,9 @@ extern void *alloc_large_system_hash(const char *tablename,
|
|||
#define HASH_EARLY 0x00000001 /* Allocating during early boot? */
|
||||
|
||||
/* Only NUMA needs hash distribution.
|
||||
* IA64 is known to have sufficient vmalloc space.
|
||||
* IA64 and x86_64 have sufficient vmalloc space.
|
||||
*/
|
||||
#if defined(CONFIG_NUMA) && defined(CONFIG_IA64)
|
||||
#if defined(CONFIG_NUMA) && (defined(CONFIG_IA64) || defined(CONFIG_X86_64))
|
||||
#define HASHDIST_DEFAULT 1
|
||||
#else
|
||||
#define HASHDIST_DEFAULT 0
|
||||
|
|
|
@ -165,7 +165,7 @@ int sync_mapping_buffers(struct address_space *mapping);
|
|||
void unmap_underlying_metadata(struct block_device *bdev, sector_t block);
|
||||
|
||||
void mark_buffer_async_write(struct buffer_head *bh);
|
||||
void invalidate_bdev(struct block_device *, int);
|
||||
void invalidate_bdev(struct block_device *);
|
||||
int sync_blockdev(struct block_device *bdev);
|
||||
void __wait_on_buffer(struct buffer_head *);
|
||||
wait_queue_head_t *bh_waitq_head(struct buffer_head *bh);
|
||||
|
@ -182,6 +182,7 @@ void __brelse(struct buffer_head *);
|
|||
void __bforget(struct buffer_head *);
|
||||
void __breadahead(struct block_device *, sector_t block, unsigned int size);
|
||||
struct buffer_head *__bread(struct block_device *, sector_t block, unsigned size);
|
||||
void invalidate_bh_lrus(void);
|
||||
struct buffer_head *alloc_buffer_head(gfp_t gfp_flags);
|
||||
void free_buffer_head(struct buffer_head * bh);
|
||||
void FASTCALL(unlock_buffer(struct buffer_head *bh));
|
||||
|
@ -319,7 +320,7 @@ static inline int inode_has_buffers(struct inode *inode) { return 0; }
|
|||
static inline void invalidate_inode_buffers(struct inode *inode) {}
|
||||
static inline int remove_inode_buffers(struct inode *inode) { return 1; }
|
||||
static inline int sync_mapping_buffers(struct address_space *mapping) { return 0; }
|
||||
static inline void invalidate_bdev(struct block_device *bdev, int destroy_dirty_buffers) {}
|
||||
static inline void invalidate_bdev(struct block_device *bdev) {}
|
||||
|
||||
|
||||
#endif /* CONFIG_BLOCK */
|
||||
|
|
|
@ -22,6 +22,9 @@
|
|||
__asm__ ("" : "=r"(__ptr) : "0"(ptr)); \
|
||||
(typeof(ptr)) (__ptr + (off)); })
|
||||
|
||||
/* &a[0] degrades to a pointer: a different type from an array */
|
||||
#define __must_be_array(a) \
|
||||
BUILD_BUG_ON_ZERO(__builtin_types_compatible_p(typeof(a), typeof(&a[0])))
|
||||
|
||||
#define inline inline __attribute__((always_inline))
|
||||
#define __inline__ __inline__ __attribute__((always_inline))
|
||||
|
|
|
@ -13,4 +13,10 @@
|
|||
#define __must_check __attribute__((warn_unused_result))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* A trick to suppress uninitialized variable warning without generating any
|
||||
* code
|
||||
*/
|
||||
#define uninitialized_var(x) x = x
|
||||
|
||||
#define __always_inline inline __attribute__((always_inline))
|
||||
|
|
|
@ -16,3 +16,9 @@
|
|||
#define __must_check __attribute__((warn_unused_result))
|
||||
#define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
|
||||
#define __always_inline inline __attribute__((always_inline))
|
||||
|
||||
/*
|
||||
* A trick to suppress uninitialized variable warning without generating any
|
||||
* code
|
||||
*/
|
||||
#define uninitialized_var(x) x = x
|
||||
|
|
|
@ -21,4 +21,9 @@
|
|||
__ptr = (unsigned long) (ptr); \
|
||||
(typeof(ptr)) (__ptr + (off)); })
|
||||
|
||||
/* Intel ECC compiler doesn't support __builtin_types_compatible_p() */
|
||||
#define __must_be_array(a) 0
|
||||
|
||||
#endif
|
||||
|
||||
#define uninitialized_var(x) x
|
||||
|
|
|
@ -32,7 +32,15 @@
|
|||
* CPUFREQ NOTIFIER INTERFACE *
|
||||
*********************************************************************/
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list);
|
||||
#else
|
||||
static inline int cpufreq_register_notifier(struct notifier_block *nb,
|
||||
unsigned int list)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list);
|
||||
|
||||
#define CPUFREQ_TRANSITION_NOTIFIER (0)
|
||||
|
@ -257,21 +265,25 @@ struct freq_attr {
|
|||
/*********************************************************************
|
||||
* CPUFREQ 2.6. INTERFACE *
|
||||
*********************************************************************/
|
||||
int cpufreq_set_policy(struct cpufreq_policy *policy);
|
||||
int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu);
|
||||
int cpufreq_update_policy(unsigned int cpu);
|
||||
|
||||
/* query the current CPU frequency (in kHz). If zero, cpufreq couldn't detect it */
|
||||
unsigned int cpufreq_get(unsigned int cpu);
|
||||
|
||||
/* query the last known CPU freq (in kHz). If zero, cpufreq couldn't detect it */
|
||||
/*
|
||||
* query the last known CPU freq (in kHz). If zero, cpufreq couldn't detect it
|
||||
*/
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
unsigned int cpufreq_quick_get(unsigned int cpu);
|
||||
unsigned int cpufreq_get(unsigned int cpu);
|
||||
#else
|
||||
static inline unsigned int cpufreq_quick_get(unsigned int cpu)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline unsigned int cpufreq_get(unsigned int cpu)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -14,5 +14,13 @@ extern ssize_t copy_oldmem_page(unsigned long, char *, size_t,
|
|||
extern const struct file_operations proc_vmcore_operations;
|
||||
extern struct proc_dir_entry *proc_vmcore;
|
||||
|
||||
/* Architecture code defines this if there are other possible ELF
|
||||
* machine types, e.g. on bi-arch capable hardware. */
|
||||
#ifndef vmcore_elf_check_arch_cross
|
||||
#define vmcore_elf_check_arch_cross(x) 0
|
||||
#endif
|
||||
|
||||
#define vmcore_elf_check_arch(x) (elf_check_arch(x) || vmcore_elf_check_arch_cross(x))
|
||||
|
||||
#endif /* CONFIG_CRASH_DUMP */
|
||||
#endif /* LINUX_CRASHDUMP_H */
|
||||
|
|
|
@ -56,6 +56,7 @@
|
|||
|
||||
#define CRYPTO_TFM_REQ_WEAK_KEY 0x00000100
|
||||
#define CRYPTO_TFM_REQ_MAY_SLEEP 0x00000200
|
||||
#define CRYPTO_TFM_REQ_MAY_BACKLOG 0x00000400
|
||||
#define CRYPTO_TFM_RES_WEAK_KEY 0x00100000
|
||||
#define CRYPTO_TFM_RES_BAD_KEY_LEN 0x00200000
|
||||
#define CRYPTO_TFM_RES_BAD_KEY_SCHED 0x00400000
|
||||
|
@ -88,11 +89,38 @@
|
|||
#endif
|
||||
|
||||
struct scatterlist;
|
||||
struct crypto_ablkcipher;
|
||||
struct crypto_async_request;
|
||||
struct crypto_blkcipher;
|
||||
struct crypto_hash;
|
||||
struct crypto_queue;
|
||||
struct crypto_tfm;
|
||||
struct crypto_type;
|
||||
|
||||
typedef void (*crypto_completion_t)(struct crypto_async_request *req, int err);
|
||||
|
||||
struct crypto_async_request {
|
||||
struct list_head list;
|
||||
crypto_completion_t complete;
|
||||
void *data;
|
||||
struct crypto_tfm *tfm;
|
||||
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
struct ablkcipher_request {
|
||||
struct crypto_async_request base;
|
||||
|
||||
unsigned int nbytes;
|
||||
|
||||
void *info;
|
||||
|
||||
struct scatterlist *src;
|
||||
struct scatterlist *dst;
|
||||
|
||||
void *__ctx[] CRYPTO_MINALIGN_ATTR;
|
||||
};
|
||||
|
||||
struct blkcipher_desc {
|
||||
struct crypto_blkcipher *tfm;
|
||||
void *info;
|
||||
|
@ -116,6 +144,19 @@ struct hash_desc {
|
|||
* Algorithms: modular crypto algorithm implementations, managed
|
||||
* via crypto_register_alg() and crypto_unregister_alg().
|
||||
*/
|
||||
struct ablkcipher_alg {
|
||||
int (*setkey)(struct crypto_ablkcipher *tfm, const u8 *key,
|
||||
unsigned int keylen);
|
||||
int (*encrypt)(struct ablkcipher_request *req);
|
||||
int (*decrypt)(struct ablkcipher_request *req);
|
||||
|
||||
struct crypto_queue *queue;
|
||||
|
||||
unsigned int min_keysize;
|
||||
unsigned int max_keysize;
|
||||
unsigned int ivsize;
|
||||
};
|
||||
|
||||
struct blkcipher_alg {
|
||||
int (*setkey)(struct crypto_tfm *tfm, const u8 *key,
|
||||
unsigned int keylen);
|
||||
|
@ -170,6 +211,7 @@ struct compress_alg {
|
|||
unsigned int slen, u8 *dst, unsigned int *dlen);
|
||||
};
|
||||
|
||||
#define cra_ablkcipher cra_u.ablkcipher
|
||||
#define cra_blkcipher cra_u.blkcipher
|
||||
#define cra_cipher cra_u.cipher
|
||||
#define cra_digest cra_u.digest
|
||||
|
@ -194,6 +236,7 @@ struct crypto_alg {
|
|||
const struct crypto_type *cra_type;
|
||||
|
||||
union {
|
||||
struct ablkcipher_alg ablkcipher;
|
||||
struct blkcipher_alg blkcipher;
|
||||
struct cipher_alg cipher;
|
||||
struct digest_alg digest;
|
||||
|
@ -232,6 +275,15 @@ static inline int crypto_has_alg(const char *name, u32 type, u32 mask)
|
|||
* crypto_free_*(), as well as the various helpers below.
|
||||
*/
|
||||
|
||||
struct ablkcipher_tfm {
|
||||
int (*setkey)(struct crypto_ablkcipher *tfm, const u8 *key,
|
||||
unsigned int keylen);
|
||||
int (*encrypt)(struct ablkcipher_request *req);
|
||||
int (*decrypt)(struct ablkcipher_request *req);
|
||||
unsigned int ivsize;
|
||||
unsigned int reqsize;
|
||||
};
|
||||
|
||||
struct blkcipher_tfm {
|
||||
void *iv;
|
||||
int (*setkey)(struct crypto_tfm *tfm, const u8 *key,
|
||||
|
@ -290,6 +342,7 @@ struct compress_tfm {
|
|||
u8 *dst, unsigned int *dlen);
|
||||
};
|
||||
|
||||
#define crt_ablkcipher crt_u.ablkcipher
|
||||
#define crt_blkcipher crt_u.blkcipher
|
||||
#define crt_cipher crt_u.cipher
|
||||
#define crt_hash crt_u.hash
|
||||
|
@ -300,6 +353,7 @@ struct crypto_tfm {
|
|||
u32 crt_flags;
|
||||
|
||||
union {
|
||||
struct ablkcipher_tfm ablkcipher;
|
||||
struct blkcipher_tfm blkcipher;
|
||||
struct cipher_tfm cipher;
|
||||
struct hash_tfm hash;
|
||||
|
@ -311,6 +365,10 @@ struct crypto_tfm {
|
|||
void *__crt_ctx[] CRYPTO_MINALIGN_ATTR;
|
||||
};
|
||||
|
||||
struct crypto_ablkcipher {
|
||||
struct crypto_tfm base;
|
||||
};
|
||||
|
||||
struct crypto_blkcipher {
|
||||
struct crypto_tfm base;
|
||||
};
|
||||
|
@ -330,12 +388,21 @@ struct crypto_hash {
|
|||
enum {
|
||||
CRYPTOA_UNSPEC,
|
||||
CRYPTOA_ALG,
|
||||
CRYPTOA_TYPE,
|
||||
__CRYPTOA_MAX,
|
||||
};
|
||||
|
||||
#define CRYPTOA_MAX (__CRYPTOA_MAX - 1)
|
||||
|
||||
struct crypto_attr_alg {
|
||||
char name[CRYPTO_MAX_ALG_NAME];
|
||||
};
|
||||
|
||||
struct crypto_attr_type {
|
||||
u32 type;
|
||||
u32 mask;
|
||||
};
|
||||
|
||||
/*
|
||||
* Transform user interface.
|
||||
*/
|
||||
|
@ -411,6 +478,167 @@ static inline unsigned int crypto_tfm_ctx_alignment(void)
|
|||
/*
|
||||
* API wrappers.
|
||||
*/
|
||||
static inline struct crypto_ablkcipher *__crypto_ablkcipher_cast(
|
||||
struct crypto_tfm *tfm)
|
||||
{
|
||||
return (struct crypto_ablkcipher *)tfm;
|
||||
}
|
||||
|
||||
static inline struct crypto_ablkcipher *crypto_alloc_ablkcipher(
|
||||
const char *alg_name, u32 type, u32 mask)
|
||||
{
|
||||
type &= ~CRYPTO_ALG_TYPE_MASK;
|
||||
type |= CRYPTO_ALG_TYPE_BLKCIPHER;
|
||||
mask |= CRYPTO_ALG_TYPE_MASK;
|
||||
|
||||
return __crypto_ablkcipher_cast(
|
||||
crypto_alloc_base(alg_name, type, mask));
|
||||
}
|
||||
|
||||
static inline struct crypto_tfm *crypto_ablkcipher_tfm(
|
||||
struct crypto_ablkcipher *tfm)
|
||||
{
|
||||
return &tfm->base;
|
||||
}
|
||||
|
||||
static inline void crypto_free_ablkcipher(struct crypto_ablkcipher *tfm)
|
||||
{
|
||||
crypto_free_tfm(crypto_ablkcipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline int crypto_has_ablkcipher(const char *alg_name, u32 type,
|
||||
u32 mask)
|
||||
{
|
||||
type &= ~CRYPTO_ALG_TYPE_MASK;
|
||||
type |= CRYPTO_ALG_TYPE_BLKCIPHER;
|
||||
mask |= CRYPTO_ALG_TYPE_MASK;
|
||||
|
||||
return crypto_has_alg(alg_name, type, mask);
|
||||
}
|
||||
|
||||
static inline struct ablkcipher_tfm *crypto_ablkcipher_crt(
|
||||
struct crypto_ablkcipher *tfm)
|
||||
{
|
||||
return &crypto_ablkcipher_tfm(tfm)->crt_ablkcipher;
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_ablkcipher_ivsize(
|
||||
struct crypto_ablkcipher *tfm)
|
||||
{
|
||||
return crypto_ablkcipher_crt(tfm)->ivsize;
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_ablkcipher_blocksize(
|
||||
struct crypto_ablkcipher *tfm)
|
||||
{
|
||||
return crypto_tfm_alg_blocksize(crypto_ablkcipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_ablkcipher_alignmask(
|
||||
struct crypto_ablkcipher *tfm)
|
||||
{
|
||||
return crypto_tfm_alg_alignmask(crypto_ablkcipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline u32 crypto_ablkcipher_get_flags(struct crypto_ablkcipher *tfm)
|
||||
{
|
||||
return crypto_tfm_get_flags(crypto_ablkcipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline void crypto_ablkcipher_set_flags(struct crypto_ablkcipher *tfm,
|
||||
u32 flags)
|
||||
{
|
||||
crypto_tfm_set_flags(crypto_ablkcipher_tfm(tfm), flags);
|
||||
}
|
||||
|
||||
static inline void crypto_ablkcipher_clear_flags(struct crypto_ablkcipher *tfm,
|
||||
u32 flags)
|
||||
{
|
||||
crypto_tfm_clear_flags(crypto_ablkcipher_tfm(tfm), flags);
|
||||
}
|
||||
|
||||
static inline int crypto_ablkcipher_setkey(struct crypto_ablkcipher *tfm,
|
||||
const u8 *key, unsigned int keylen)
|
||||
{
|
||||
return crypto_ablkcipher_crt(tfm)->setkey(tfm, key, keylen);
|
||||
}
|
||||
|
||||
static inline struct crypto_ablkcipher *crypto_ablkcipher_reqtfm(
|
||||
struct ablkcipher_request *req)
|
||||
{
|
||||
return __crypto_ablkcipher_cast(req->base.tfm);
|
||||
}
|
||||
|
||||
static inline int crypto_ablkcipher_encrypt(struct ablkcipher_request *req)
|
||||
{
|
||||
struct ablkcipher_tfm *crt =
|
||||
crypto_ablkcipher_crt(crypto_ablkcipher_reqtfm(req));
|
||||
return crt->encrypt(req);
|
||||
}
|
||||
|
||||
static inline int crypto_ablkcipher_decrypt(struct ablkcipher_request *req)
|
||||
{
|
||||
struct ablkcipher_tfm *crt =
|
||||
crypto_ablkcipher_crt(crypto_ablkcipher_reqtfm(req));
|
||||
return crt->decrypt(req);
|
||||
}
|
||||
|
||||
static inline int crypto_ablkcipher_reqsize(struct crypto_ablkcipher *tfm)
|
||||
{
|
||||
return crypto_ablkcipher_crt(tfm)->reqsize;
|
||||
}
|
||||
|
||||
static inline void ablkcipher_request_set_tfm(
|
||||
struct ablkcipher_request *req, struct crypto_ablkcipher *tfm)
|
||||
{
|
||||
req->base.tfm = crypto_ablkcipher_tfm(tfm);
|
||||
}
|
||||
|
||||
static inline struct ablkcipher_request *ablkcipher_request_cast(
|
||||
struct crypto_async_request *req)
|
||||
{
|
||||
return container_of(req, struct ablkcipher_request, base);
|
||||
}
|
||||
|
||||
static inline struct ablkcipher_request *ablkcipher_request_alloc(
|
||||
struct crypto_ablkcipher *tfm, gfp_t gfp)
|
||||
{
|
||||
struct ablkcipher_request *req;
|
||||
|
||||
req = kmalloc(sizeof(struct ablkcipher_request) +
|
||||
crypto_ablkcipher_reqsize(tfm), gfp);
|
||||
|
||||
if (likely(req))
|
||||
ablkcipher_request_set_tfm(req, tfm);
|
||||
|
||||
return req;
|
||||
}
|
||||
|
||||
static inline void ablkcipher_request_free(struct ablkcipher_request *req)
|
||||
{
|
||||
kfree(req);
|
||||
}
|
||||
|
||||
static inline void ablkcipher_request_set_callback(
|
||||
struct ablkcipher_request *req,
|
||||
u32 flags, crypto_completion_t complete, void *data)
|
||||
{
|
||||
req->base.complete = complete;
|
||||
req->base.data = data;
|
||||
req->base.flags = flags;
|
||||
}
|
||||
|
||||
static inline void ablkcipher_request_set_crypt(
|
||||
struct ablkcipher_request *req,
|
||||
struct scatterlist *src, struct scatterlist *dst,
|
||||
unsigned int nbytes, void *iv)
|
||||
{
|
||||
req->src = src;
|
||||
req->dst = dst;
|
||||
req->nbytes = nbytes;
|
||||
req->info = iv;
|
||||
}
|
||||
|
||||
static inline struct crypto_blkcipher *__crypto_blkcipher_cast(
|
||||
struct crypto_tfm *tfm)
|
||||
{
|
||||
|
@ -427,9 +655,9 @@ static inline struct crypto_blkcipher *crypto_blkcipher_cast(
|
|||
static inline struct crypto_blkcipher *crypto_alloc_blkcipher(
|
||||
const char *alg_name, u32 type, u32 mask)
|
||||
{
|
||||
type &= ~CRYPTO_ALG_TYPE_MASK;
|
||||
type &= ~(CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_ASYNC);
|
||||
type |= CRYPTO_ALG_TYPE_BLKCIPHER;
|
||||
mask |= CRYPTO_ALG_TYPE_MASK;
|
||||
mask |= CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_ASYNC;
|
||||
|
||||
return __crypto_blkcipher_cast(crypto_alloc_base(alg_name, type, mask));
|
||||
}
|
||||
|
@ -447,9 +675,9 @@ static inline void crypto_free_blkcipher(struct crypto_blkcipher *tfm)
|
|||
|
||||
static inline int crypto_has_blkcipher(const char *alg_name, u32 type, u32 mask)
|
||||
{
|
||||
type &= ~CRYPTO_ALG_TYPE_MASK;
|
||||
type &= ~(CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_ASYNC);
|
||||
type |= CRYPTO_ALG_TYPE_BLKCIPHER;
|
||||
mask |= CRYPTO_ALG_TYPE_MASK;
|
||||
mask |= CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_ASYNC;
|
||||
|
||||
return crypto_has_alg(alg_name, type, mask);
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@ struct bus_type {
|
|||
const char * name;
|
||||
struct module * owner;
|
||||
|
||||
struct subsystem subsys;
|
||||
struct kset subsys;
|
||||
struct kset drivers;
|
||||
struct kset devices;
|
||||
struct klist klist_devices;
|
||||
|
@ -80,7 +80,6 @@ struct bus_type {
|
|||
int (*resume)(struct device * dev);
|
||||
|
||||
unsigned int drivers_autoprobe:1;
|
||||
unsigned int multithread_probe:1;
|
||||
};
|
||||
|
||||
extern int __must_check bus_register(struct bus_type * bus);
|
||||
|
@ -179,7 +178,7 @@ struct class {
|
|||
const char * name;
|
||||
struct module * owner;
|
||||
|
||||
struct subsystem subsys;
|
||||
struct kset subsys;
|
||||
struct list_head children;
|
||||
struct list_head devices;
|
||||
struct list_head interfaces;
|
||||
|
@ -559,8 +558,8 @@ extern void device_shutdown(void);
|
|||
|
||||
|
||||
/* drivers/base/firmware.c */
|
||||
extern int __must_check firmware_register(struct subsystem *);
|
||||
extern void firmware_unregister(struct subsystem *);
|
||||
extern int __must_check firmware_register(struct kset *);
|
||||
extern void firmware_unregister(struct kset *);
|
||||
|
||||
/* debugging and troubleshooting/diagnostic helpers. */
|
||||
extern const char *dev_driver_string(struct device *dev);
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
/* Version of the device interface */
|
||||
#define DLM_DEVICE_VERSION_MAJOR 5
|
||||
#define DLM_DEVICE_VERSION_MINOR 0
|
||||
#define DLM_DEVICE_VERSION_MINOR 1
|
||||
#define DLM_DEVICE_VERSION_PATCH 0
|
||||
|
||||
/* struct passed to the lock write */
|
||||
|
@ -44,6 +44,11 @@ struct dlm_lspace_params {
|
|||
char name[0];
|
||||
};
|
||||
|
||||
struct dlm_purge_params {
|
||||
__u32 nodeid;
|
||||
__u32 pid;
|
||||
};
|
||||
|
||||
struct dlm_write_request {
|
||||
__u32 version[3];
|
||||
__u8 cmd;
|
||||
|
@ -53,6 +58,7 @@ struct dlm_write_request {
|
|||
union {
|
||||
struct dlm_lock_params lock;
|
||||
struct dlm_lspace_params lspace;
|
||||
struct dlm_purge_params purge;
|
||||
} i;
|
||||
};
|
||||
|
||||
|
@ -76,6 +82,7 @@ struct dlm_lock_result {
|
|||
#define DLM_USER_QUERY 3
|
||||
#define DLM_USER_CREATE_LOCKSPACE 4
|
||||
#define DLM_USER_REMOVE_LOCKSPACE 5
|
||||
#define DLM_USER_PURGE 6
|
||||
|
||||
/* Arbitrary length restriction */
|
||||
#define MAX_LS_NAME_LEN 64
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#define EM_V850 87 /* NEC v850 */
|
||||
#define EM_M32R 88 /* Renesas M32R */
|
||||
#define EM_H8_300 46 /* Renesas H8/300,300H,H8S */
|
||||
#define EM_BLACKFIN 106 /* ADI Blackfin Processor */
|
||||
#define EM_FRV 0x5441 /* Fujitsu FR-V */
|
||||
#define EM_AVR32 0x18ad /* Atmel AVR32 */
|
||||
|
||||
|
|
|
@ -83,6 +83,23 @@ typedef __s64 Elf64_Sxword;
|
|||
#define DT_DEBUG 21
|
||||
#define DT_TEXTREL 22
|
||||
#define DT_JMPREL 23
|
||||
#define DT_ENCODING 32
|
||||
#define OLD_DT_LOOS 0x60000000
|
||||
#define DT_LOOS 0x6000000d
|
||||
#define DT_HIOS 0x6ffff000
|
||||
#define DT_VALRNGLO 0x6ffffd00
|
||||
#define DT_VALRNGHI 0x6ffffdff
|
||||
#define DT_ADDRRNGLO 0x6ffffe00
|
||||
#define DT_ADDRRNGHI 0x6ffffeff
|
||||
#define DT_VERSYM 0x6ffffff0
|
||||
#define DT_RELACOUNT 0x6ffffff9
|
||||
#define DT_RELCOUNT 0x6ffffffa
|
||||
#define DT_FLAGS_1 0x6ffffffb
|
||||
#define DT_VERDEF 0x6ffffffc
|
||||
#define DT_VERDEFNUM 0x6ffffffd
|
||||
#define DT_VERNEED 0x6ffffffe
|
||||
#define DT_VERNEEDNUM 0x6fffffff
|
||||
#define OLD_DT_HIOS 0x6fffffff
|
||||
#define DT_LOPROC 0x70000000
|
||||
#define DT_HIPROC 0x7fffffff
|
||||
|
||||
|
|
|
@ -39,12 +39,12 @@
|
|||
* ELFNOTE(XYZCo, 12, .long, 0xdeadbeef)
|
||||
*/
|
||||
#define ELFNOTE(name, type, desctype, descdata) \
|
||||
.pushsection .note.name ; \
|
||||
.pushsection .note.name, "",@note ; \
|
||||
.align 4 ; \
|
||||
.long 2f - 1f /* namesz */ ; \
|
||||
.long 4f - 3f /* descsz */ ; \
|
||||
.long type ; \
|
||||
1:.asciz "name" ; \
|
||||
1:.asciz #name ; \
|
||||
2:.align 4 ; \
|
||||
3:desctype descdata ; \
|
||||
4:.align 4 ; \
|
||||
|
|
|
@ -70,6 +70,18 @@ static inline int is_multicast_ether_addr(const u8 *addr)
|
|||
return (0x01 & addr[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* is_local_ether_addr - Determine if the Ethernet address is locally-assigned
|
||||
* one (IEEE 802).
|
||||
* @addr: Pointer to a six-byte array containing the Ethernet address
|
||||
*
|
||||
* Return true if the address is a local address.
|
||||
*/
|
||||
static inline int is_local_ether_addr(const u8 *addr)
|
||||
{
|
||||
return (0x02 & addr[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* is_broadcast_ether_addr - Determine if the Ethernet address is broadcast
|
||||
* @addr: Pointer to a six-byte array containing the Ethernet address
|
||||
|
|
|
@ -434,6 +434,7 @@ struct ethtool_ops {
|
|||
#define SUPPORTED_10000baseT_Full (1 << 12)
|
||||
#define SUPPORTED_Pause (1 << 13)
|
||||
#define SUPPORTED_Asym_Pause (1 << 14)
|
||||
#define SUPPORTED_2500baseX_Full (1 << 15)
|
||||
|
||||
/* Indicates what features are advertised by the interface. */
|
||||
#define ADVERTISED_10baseT_Half (1 << 0)
|
||||
|
@ -451,6 +452,7 @@ struct ethtool_ops {
|
|||
#define ADVERTISED_10000baseT_Full (1 << 12)
|
||||
#define ADVERTISED_Pause (1 << 13)
|
||||
#define ADVERTISED_Asym_Pause (1 << 14)
|
||||
#define ADVERTISED_2500baseX_Full (1 << 15)
|
||||
|
||||
/* The following are all involved in forcing a particular link
|
||||
* mode for the device for setting things. When getting the
|
||||
|
|
|
@ -3,6 +3,10 @@
|
|||
|
||||
#include <asm/fcntl.h>
|
||||
|
||||
/* Cancel a blocking posix lock; internal use only until we expose an
|
||||
* asynchronous lock api to userspace: */
|
||||
#define F_CANCELLK (F_LINUX_SPECIFIC_BASE+5)
|
||||
|
||||
#define F_SETLEASE (F_LINUX_SPECIFIC_BASE+0)
|
||||
#define F_GETLEASE (F_LINUX_SPECIFIC_BASE+1)
|
||||
|
||||
|
|
|
@ -696,12 +696,13 @@ struct file_ra_state {
|
|||
unsigned long size;
|
||||
unsigned long flags; /* ra flags RA_FLAG_xxx*/
|
||||
unsigned long cache_hit; /* cache hit count*/
|
||||
unsigned long prev_page; /* Cache last read() position */
|
||||
unsigned long prev_index; /* Cache last read() position */
|
||||
unsigned long ahead_start; /* Ahead window */
|
||||
unsigned long ahead_size;
|
||||
unsigned long ra_pages; /* Maximum readahead window */
|
||||
unsigned long mmap_hit; /* Cache hit stat for mmap accesses */
|
||||
unsigned long mmap_miss; /* Cache miss stat for mmap accesses */
|
||||
unsigned int prev_offset; /* Offset where last read() ended in a page */
|
||||
};
|
||||
#define RA_FLAG_MISS 0x01 /* a cache miss occured against this file */
|
||||
#define RA_FLAG_INCACHE 0x02 /* file is already in cache */
|
||||
|
@ -785,6 +786,7 @@ struct file_lock_operations {
|
|||
struct lock_manager_operations {
|
||||
int (*fl_compare_owner)(struct file_lock *, struct file_lock *);
|
||||
void (*fl_notify)(struct file_lock *); /* unblock callback */
|
||||
int (*fl_grant)(struct file_lock *, struct file_lock *, int);
|
||||
void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
|
||||
void (*fl_release_private)(struct file_lock *);
|
||||
void (*fl_break)(struct file_lock *);
|
||||
|
@ -856,11 +858,13 @@ extern void locks_init_lock(struct file_lock *);
|
|||
extern void locks_copy_lock(struct file_lock *, struct file_lock *);
|
||||
extern void locks_remove_posix(struct file *, fl_owner_t);
|
||||
extern void locks_remove_flock(struct file *);
|
||||
extern int posix_test_lock(struct file *, struct file_lock *, struct file_lock *);
|
||||
extern int posix_lock_file_conf(struct file *, struct file_lock *, struct file_lock *);
|
||||
extern int posix_lock_file(struct file *, struct file_lock *);
|
||||
extern int posix_test_lock(struct file *, struct file_lock *);
|
||||
extern int posix_lock_file(struct file *, struct file_lock *, struct file_lock *);
|
||||
extern int posix_lock_file_wait(struct file *, struct file_lock *);
|
||||
extern int posix_unblock_lock(struct file *, struct file_lock *);
|
||||
extern int vfs_test_lock(struct file *, struct file_lock *);
|
||||
extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *);
|
||||
extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl);
|
||||
extern int flock_lock_file_wait(struct file *filp, struct file_lock *fl);
|
||||
extern int __break_lease(struct inode *inode, unsigned int flags);
|
||||
extern void lease_get_mtime(struct inode *, struct timespec *time);
|
||||
|
@ -1416,7 +1420,7 @@ extern void mnt_set_mountpoint(struct vfsmount *, struct dentry *,
|
|||
extern int vfs_statfs(struct dentry *, struct kstatfs *);
|
||||
|
||||
/* /sys/fs */
|
||||
extern struct subsystem fs_subsys;
|
||||
extern struct kset fs_subsys;
|
||||
|
||||
#define FLOCK_VERIFY_READ 1
|
||||
#define FLOCK_VERIFY_WRITE 2
|
||||
|
|
|
@ -40,7 +40,6 @@ struct vm_area_struct;
|
|||
#define __GFP_REPEAT ((__force gfp_t)0x400u) /* Retry the allocation. Might fail */
|
||||
#define __GFP_NOFAIL ((__force gfp_t)0x800u) /* Retry for ever. Cannot fail */
|
||||
#define __GFP_NORETRY ((__force gfp_t)0x1000u)/* Do not retry. Might fail */
|
||||
#define __GFP_NO_GROW ((__force gfp_t)0x2000u)/* Slab internal usage */
|
||||
#define __GFP_COMP ((__force gfp_t)0x4000u)/* Add compound page metadata */
|
||||
#define __GFP_ZERO ((__force gfp_t)0x8000u)/* Return zeroed page on success */
|
||||
#define __GFP_NOMEMALLOC ((__force gfp_t)0x10000u) /* Don't use emergency reserves */
|
||||
|
@ -53,7 +52,7 @@ struct vm_area_struct;
|
|||
/* if you forget to add the bitmask here kernel will crash, period */
|
||||
#define GFP_LEVEL_MASK (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_FS| \
|
||||
__GFP_COLD|__GFP_NOWARN|__GFP_REPEAT| \
|
||||
__GFP_NOFAIL|__GFP_NORETRY|__GFP_NO_GROW|__GFP_COMP| \
|
||||
__GFP_NOFAIL|__GFP_NORETRY|__GFP_COMP| \
|
||||
__GFP_NOMEMALLOC|__GFP_HARDWALL|__GFP_THISNODE)
|
||||
|
||||
/* This equals 0, but use constants in case they ever change */
|
||||
|
|
|
@ -27,6 +27,8 @@ static inline void flush_kernel_dcache_page(struct page *page)
|
|||
unsigned int nr_free_highpages(void);
|
||||
extern unsigned long totalhigh_pages;
|
||||
|
||||
void kmap_flush_unused(void);
|
||||
|
||||
#else /* CONFIG_HIGHMEM */
|
||||
|
||||
static inline unsigned int nr_free_highpages(void) { return 0; }
|
||||
|
@ -42,11 +44,20 @@ static inline void *kmap(struct page *page)
|
|||
|
||||
#define kunmap(page) do { (void) (page); } while (0)
|
||||
|
||||
#define kmap_atomic(page, idx) \
|
||||
({ pagefault_disable(); page_address(page); })
|
||||
#include <asm/kmap_types.h>
|
||||
|
||||
static inline void *kmap_atomic(struct page *page, enum km_type idx)
|
||||
{
|
||||
pagefault_disable();
|
||||
return page_address(page);
|
||||
}
|
||||
#define kmap_atomic_prot(page, idx, prot) kmap_atomic(page, idx)
|
||||
|
||||
#define kunmap_atomic(addr, idx) do { pagefault_enable(); } while (0)
|
||||
#define kmap_atomic_pfn(pfn, idx) kmap_atomic(pfn_to_page(pfn), (idx))
|
||||
#define kmap_atomic_to_page(ptr) virt_to_page(ptr)
|
||||
|
||||
#define kmap_flush_unused() do {} while(0)
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_HIGHMEM */
|
||||
|
|
|
@ -189,4 +189,10 @@ static inline void set_file_hugepages(struct file *file)
|
|||
|
||||
#endif /* !CONFIG_HUGETLBFS */
|
||||
|
||||
#ifdef HAVE_ARCH_HUGETLB_UNMAPPED_AREA
|
||||
unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
|
||||
unsigned long len, unsigned long pgoff,
|
||||
unsigned long flags);
|
||||
#endif /* HAVE_ARCH_HUGETLB_UNMAPPED_AREA */
|
||||
|
||||
#endif /* _LINUX_HUGETLB_H */
|
||||
|
|
|
@ -38,11 +38,14 @@ struct i2c_algo_bit_data {
|
|||
int (*getscl) (void *data);
|
||||
|
||||
/* local settings */
|
||||
int udelay; /* half-clock-cycle time in microsecs */
|
||||
/* i.e. clock is (500 / udelay) KHz */
|
||||
int udelay; /* half clock cycle time in us,
|
||||
minimum 2 us for fast-mode I2C,
|
||||
minimum 5 us for standard-mode I2C and SMBus,
|
||||
maximum 50 us for SMBus */
|
||||
int timeout; /* in jiffies */
|
||||
};
|
||||
|
||||
int i2c_bit_add_bus(struct i2c_adapter *);
|
||||
int i2c_bit_add_numbered_bus(struct i2c_adapter *);
|
||||
|
||||
#endif /* _LINUX_I2C_ALGO_BIT_H */
|
||||
|
|
38
include/linux/i2c-gpio.h
Normal file
38
include/linux/i2c-gpio.h
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* i2c-gpio interface to platform code
|
||||
*
|
||||
* Copyright (C) 2007 Atmel Corporation
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#ifndef _LINUX_I2C_GPIO_H
|
||||
#define _LINUX_I2C_GPIO_H
|
||||
|
||||
/**
|
||||
* struct i2c_gpio_platform_data - Platform-dependent data for i2c-gpio
|
||||
* @sda_pin: GPIO pin ID to use for SDA
|
||||
* @scl_pin: GPIO pin ID to use for SCL
|
||||
* @udelay: signal toggle delay. SCL frequency is (500 / udelay) kHz
|
||||
* @timeout: clock stretching timeout in jiffies. If the slave keeps
|
||||
* SCL low for longer than this, the transfer will time out.
|
||||
* @sda_is_open_drain: SDA is configured as open drain, i.e. the pin
|
||||
* isn't actively driven high when setting the output value high.
|
||||
* gpio_get_value() must return the actual pin state even if the
|
||||
* pin is configured as an output.
|
||||
* @scl_is_open_drain: SCL is set up as open drain. Same requirements
|
||||
* as for sda_is_open_drain apply.
|
||||
* @scl_is_output_only: SCL output drivers cannot be turned off.
|
||||
*/
|
||||
struct i2c_gpio_platform_data {
|
||||
unsigned int sda_pin;
|
||||
unsigned int scl_pin;
|
||||
int udelay;
|
||||
int timeout;
|
||||
unsigned int sda_is_open_drain:1;
|
||||
unsigned int scl_is_open_drain:1;
|
||||
unsigned int scl_is_output_only:1;
|
||||
};
|
||||
|
||||
#endif /* _LINUX_I2C_GPIO_H */
|
|
@ -258,8 +258,9 @@
|
|||
/* --- MCP107 adapter */
|
||||
#define I2C_HW_MPC107 0x0d0000
|
||||
|
||||
/* --- Marvell mv64xxx i2c adapter */
|
||||
/* --- Embedded adapters */
|
||||
#define I2C_HW_MV64XXX 0x190000
|
||||
#define I2C_HW_BLACKFIN 0x190001 /* ADI Blackfin I2C TWI driver */
|
||||
|
||||
/* --- Miscellaneous adapters */
|
||||
#define I2C_HW_SAA7146 0x060000 /* SAA7146 video decoder bus */
|
||||
|
|
|
@ -35,11 +35,6 @@
|
|||
#include <linux/sched.h> /* for completion */
|
||||
#include <linux/mutex.h>
|
||||
|
||||
/* --- For i2c-isa ---------------------------------------------------- */
|
||||
|
||||
extern void i2c_adapter_dev_release(struct device *dev);
|
||||
extern struct device_driver i2c_adapter_driver;
|
||||
extern struct class i2c_adapter_class;
|
||||
extern struct bus_type i2c_bus_type;
|
||||
|
||||
/* --- General options ------------------------------------------------ */
|
||||
|
@ -87,6 +82,9 @@ extern s32 i2c_smbus_write_byte_data(struct i2c_client * client,
|
|||
extern s32 i2c_smbus_read_word_data(struct i2c_client * client, u8 command);
|
||||
extern s32 i2c_smbus_write_word_data(struct i2c_client * client,
|
||||
u8 command, u16 value);
|
||||
/* Returns the number of read bytes */
|
||||
extern s32 i2c_smbus_read_block_data(struct i2c_client *client,
|
||||
u8 command, u8 *values);
|
||||
extern s32 i2c_smbus_write_block_data(struct i2c_client * client,
|
||||
u8 command, u8 length,
|
||||
const u8 *values);
|
||||
|
@ -114,7 +112,7 @@ struct i2c_driver {
|
|||
* can be used by the driver to test if the bus meets its conditions
|
||||
* & seek for the presence of the chip(s) it supports. If found, it
|
||||
* registers the client(s) that are on the bus to the i2c admin. via
|
||||
* i2c_attach_client.
|
||||
* i2c_attach_client. (LEGACY I2C DRIVERS ONLY)
|
||||
*/
|
||||
int (*attach_adapter)(struct i2c_adapter *);
|
||||
int (*detach_adapter)(struct i2c_adapter *);
|
||||
|
@ -122,10 +120,17 @@ struct i2c_driver {
|
|||
/* tells the driver that a client is about to be deleted & gives it
|
||||
* the chance to remove its private data. Also, if the client struct
|
||||
* has been dynamically allocated by the driver in the function above,
|
||||
* it must be freed here.
|
||||
* it must be freed here. (LEGACY I2C DRIVERS ONLY)
|
||||
*/
|
||||
int (*detach_client)(struct i2c_client *);
|
||||
|
||||
/* Standard driver model interfaces, for "new style" i2c drivers.
|
||||
* With the driver model, device enumeration is NEVER done by drivers;
|
||||
* it's done by infrastructure. (NEW STYLE DRIVERS ONLY)
|
||||
*/
|
||||
int (*probe)(struct i2c_client *);
|
||||
int (*remove)(struct i2c_client *);
|
||||
|
||||
/* driver model interfaces that don't relate to enumeration */
|
||||
void (*shutdown)(struct i2c_client *);
|
||||
int (*suspend)(struct i2c_client *, pm_message_t mesg);
|
||||
|
@ -141,25 +146,34 @@ struct i2c_driver {
|
|||
};
|
||||
#define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
|
||||
|
||||
#define I2C_NAME_SIZE 50
|
||||
#define I2C_NAME_SIZE 20
|
||||
|
||||
/*
|
||||
* i2c_client identifies a single device (i.e. chip) that is connected to an
|
||||
* i2c bus. The behaviour is defined by the routines of the driver. This
|
||||
* function is mainly used for lookup & other admin. functions.
|
||||
/**
|
||||
* struct i2c_client - represent an I2C slave device
|
||||
* @addr: Address used on the I2C bus connected to the parent adapter.
|
||||
* @name: Indicates the type of the device, usually a chip name that's
|
||||
* generic enough to hide second-sourcing and compatible revisions.
|
||||
* @dev: Driver model device node for the slave.
|
||||
* @driver_name: Identifies new-style driver used with this device; also
|
||||
* used as the module name for hotplug/coldplug modprobe support.
|
||||
*
|
||||
* An i2c_client identifies a single device (i.e. chip) connected to an
|
||||
* i2c bus. The behaviour is defined by the routines of the driver.
|
||||
*/
|
||||
struct i2c_client {
|
||||
unsigned int flags; /* div., see below */
|
||||
unsigned short flags; /* div., see below */
|
||||
unsigned short addr; /* chip address - NOTE: 7bit */
|
||||
/* addresses are stored in the */
|
||||
/* _LOWER_ 7 bits */
|
||||
char name[I2C_NAME_SIZE];
|
||||
struct i2c_adapter *adapter; /* the adapter we sit on */
|
||||
struct i2c_driver *driver; /* and our access routines */
|
||||
int usage_count; /* How many accesses currently */
|
||||
/* to the client */
|
||||
struct device dev; /* the device structure */
|
||||
int irq; /* irq issued by device (or -1) */
|
||||
char driver_name[KOBJ_NAME_LEN];
|
||||
struct list_head list;
|
||||
char name[I2C_NAME_SIZE];
|
||||
struct completion released;
|
||||
};
|
||||
#define to_i2c_client(d) container_of(d, struct i2c_client, dev)
|
||||
|
@ -179,6 +193,76 @@ static inline void i2c_set_clientdata (struct i2c_client *dev, void *data)
|
|||
dev_set_drvdata (&dev->dev, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* struct i2c_board_info - template for device creation
|
||||
* @driver_name: identifies the driver to be bound to the device
|
||||
* @type: optional chip type information, to initialize i2c_client.name
|
||||
* @flags: to initialize i2c_client.flags
|
||||
* @addr: stored in i2c_client.addr
|
||||
* @platform_data: stored in i2c_client.dev.platform_data
|
||||
* @irq: stored in i2c_client.irq
|
||||
|
||||
* I2C doesn't actually support hardware probing, although controllers and
|
||||
* devices may be able to use I2C_SMBUS_QUICK to tell whether or not there's
|
||||
* a device at a given address. Drivers commonly need more information than
|
||||
* that, such as chip type, configuration, associated IRQ, and so on.
|
||||
*
|
||||
* i2c_board_info is used to build tables of information listing I2C devices
|
||||
* that are present. This information is used to grow the driver model tree
|
||||
* for "new style" I2C drivers. For mainboards this is done statically using
|
||||
* i2c_register_board_info(), where @bus_num represents an adapter that isn't
|
||||
* yet available. For add-on boards, i2c_new_device() does this dynamically
|
||||
* with the adapter already known.
|
||||
*/
|
||||
struct i2c_board_info {
|
||||
char driver_name[KOBJ_NAME_LEN];
|
||||
char type[I2C_NAME_SIZE];
|
||||
unsigned short flags;
|
||||
unsigned short addr;
|
||||
void *platform_data;
|
||||
int irq;
|
||||
};
|
||||
|
||||
/**
|
||||
* I2C_BOARD_INFO - macro used to list an i2c device and its driver
|
||||
* @driver: identifies the driver to use with the device
|
||||
* @dev_addr: the device's address on the bus.
|
||||
*
|
||||
* This macro initializes essential fields of a struct i2c_board_info,
|
||||
* declaring what has been provided on a particular board. Optional
|
||||
* fields (such as the chip type, its associated irq, or device-specific
|
||||
* platform_data) are provided using conventional syntax.
|
||||
*/
|
||||
#define I2C_BOARD_INFO(driver,dev_addr) \
|
||||
.driver_name = (driver), .addr = (dev_addr)
|
||||
|
||||
|
||||
/* Add-on boards should register/unregister their devices; e.g. a board
|
||||
* with integrated I2C, a config eeprom, sensors, and a codec that's
|
||||
* used in conjunction with the primary hardware.
|
||||
*/
|
||||
extern struct i2c_client *
|
||||
i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info);
|
||||
|
||||
/* If you don't know the exact address of an I2C device, use this variant
|
||||
* instead, which can probe for device presence in a list of possible
|
||||
* addresses.
|
||||
*/
|
||||
extern struct i2c_client *
|
||||
i2c_new_probed_device(struct i2c_adapter *adap,
|
||||
struct i2c_board_info *info,
|
||||
unsigned short const *addr_list);
|
||||
|
||||
extern void i2c_unregister_device(struct i2c_client *);
|
||||
|
||||
/* Mainboard arch_initcall() code should register all its I2C devices.
|
||||
* This is done at arch_initcall time, before declaring any i2c adapters.
|
||||
* Modules for add-on boards must use other calls.
|
||||
*/
|
||||
extern int
|
||||
i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned n);
|
||||
|
||||
|
||||
/*
|
||||
* The following structs are for those who like to implement new bus drivers:
|
||||
* i2c_algorithm is the interface to a class of hardware solutions which can
|
||||
|
@ -228,17 +312,14 @@ struct i2c_adapter {
|
|||
int timeout;
|
||||
int retries;
|
||||
struct device dev; /* the adapter device */
|
||||
struct class_device class_dev; /* the class device */
|
||||
|
||||
int nr;
|
||||
struct list_head clients;
|
||||
struct list_head list;
|
||||
char name[I2C_NAME_SIZE];
|
||||
char name[48];
|
||||
struct completion dev_released;
|
||||
struct completion class_dev_released;
|
||||
};
|
||||
#define dev_to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
|
||||
#define class_dev_to_i2c_adapter(d) container_of(d, struct i2c_adapter, class_dev)
|
||||
#define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
|
||||
|
||||
static inline void *i2c_get_adapdata (struct i2c_adapter *dev)
|
||||
{
|
||||
|
@ -290,9 +371,10 @@ struct i2c_client_address_data {
|
|||
*/
|
||||
extern int i2c_add_adapter(struct i2c_adapter *);
|
||||
extern int i2c_del_adapter(struct i2c_adapter *);
|
||||
extern int i2c_add_numbered_adapter(struct i2c_adapter *);
|
||||
|
||||
extern int i2c_register_driver(struct module *, struct i2c_driver *);
|
||||
extern int i2c_del_driver(struct i2c_driver *);
|
||||
extern void i2c_del_driver(struct i2c_driver *);
|
||||
|
||||
static inline int i2c_add_driver(struct i2c_driver *driver)
|
||||
{
|
||||
|
@ -365,6 +447,7 @@ struct i2c_msg {
|
|||
#define I2C_M_REV_DIR_ADDR 0x2000
|
||||
#define I2C_M_IGNORE_NAK 0x1000
|
||||
#define I2C_M_NO_RD_ACK 0x0800
|
||||
#define I2C_M_RECV_LEN 0x0400 /* length will be first received byte */
|
||||
__u16 len; /* msg length */
|
||||
__u8 *buf; /* pointer to msg data */
|
||||
};
|
||||
|
|
|
@ -613,7 +613,6 @@ typedef struct ide_drive_s {
|
|||
|
||||
u8 quirk_list; /* considered quirky, set for a specific host */
|
||||
u8 init_speed; /* transfer rate set at boot */
|
||||
u8 pio_speed; /* unused by core, used by some drivers for fallback from DMA */
|
||||
u8 current_speed; /* current transfer rate set */
|
||||
u8 desired_speed; /* desired transfer rate set */
|
||||
u8 dn; /* now wide spread use */
|
||||
|
|
342
include/linux/ieee80211.h
Normal file
342
include/linux/ieee80211.h
Normal file
|
@ -0,0 +1,342 @@
|
|||
/*
|
||||
* IEEE 802.11 defines
|
||||
*
|
||||
* Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen
|
||||
* <jkmaline@cc.hut.fi>
|
||||
* Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi>
|
||||
* Copyright (c) 2005, Devicescape Software, Inc.
|
||||
* Copyright (c) 2006, Michael Wu <flamingice@sourmilk.net>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef IEEE80211_H
|
||||
#define IEEE80211_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define FCS_LEN 4
|
||||
|
||||
#define IEEE80211_FCTL_VERS 0x0003
|
||||
#define IEEE80211_FCTL_FTYPE 0x000c
|
||||
#define IEEE80211_FCTL_STYPE 0x00f0
|
||||
#define IEEE80211_FCTL_TODS 0x0100
|
||||
#define IEEE80211_FCTL_FROMDS 0x0200
|
||||
#define IEEE80211_FCTL_MOREFRAGS 0x0400
|
||||
#define IEEE80211_FCTL_RETRY 0x0800
|
||||
#define IEEE80211_FCTL_PM 0x1000
|
||||
#define IEEE80211_FCTL_MOREDATA 0x2000
|
||||
#define IEEE80211_FCTL_PROTECTED 0x4000
|
||||
#define IEEE80211_FCTL_ORDER 0x8000
|
||||
|
||||
#define IEEE80211_SCTL_FRAG 0x000F
|
||||
#define IEEE80211_SCTL_SEQ 0xFFF0
|
||||
|
||||
#define IEEE80211_FTYPE_MGMT 0x0000
|
||||
#define IEEE80211_FTYPE_CTL 0x0004
|
||||
#define IEEE80211_FTYPE_DATA 0x0008
|
||||
|
||||
/* management */
|
||||
#define IEEE80211_STYPE_ASSOC_REQ 0x0000
|
||||
#define IEEE80211_STYPE_ASSOC_RESP 0x0010
|
||||
#define IEEE80211_STYPE_REASSOC_REQ 0x0020
|
||||
#define IEEE80211_STYPE_REASSOC_RESP 0x0030
|
||||
#define IEEE80211_STYPE_PROBE_REQ 0x0040
|
||||
#define IEEE80211_STYPE_PROBE_RESP 0x0050
|
||||
#define IEEE80211_STYPE_BEACON 0x0080
|
||||
#define IEEE80211_STYPE_ATIM 0x0090
|
||||
#define IEEE80211_STYPE_DISASSOC 0x00A0
|
||||
#define IEEE80211_STYPE_AUTH 0x00B0
|
||||
#define IEEE80211_STYPE_DEAUTH 0x00C0
|
||||
#define IEEE80211_STYPE_ACTION 0x00D0
|
||||
|
||||
/* control */
|
||||
#define IEEE80211_STYPE_PSPOLL 0x00A0
|
||||
#define IEEE80211_STYPE_RTS 0x00B0
|
||||
#define IEEE80211_STYPE_CTS 0x00C0
|
||||
#define IEEE80211_STYPE_ACK 0x00D0
|
||||
#define IEEE80211_STYPE_CFEND 0x00E0
|
||||
#define IEEE80211_STYPE_CFENDACK 0x00F0
|
||||
|
||||
/* data */
|
||||
#define IEEE80211_STYPE_DATA 0x0000
|
||||
#define IEEE80211_STYPE_DATA_CFACK 0x0010
|
||||
#define IEEE80211_STYPE_DATA_CFPOLL 0x0020
|
||||
#define IEEE80211_STYPE_DATA_CFACKPOLL 0x0030
|
||||
#define IEEE80211_STYPE_NULLFUNC 0x0040
|
||||
#define IEEE80211_STYPE_CFACK 0x0050
|
||||
#define IEEE80211_STYPE_CFPOLL 0x0060
|
||||
#define IEEE80211_STYPE_CFACKPOLL 0x0070
|
||||
#define IEEE80211_STYPE_QOS_DATA 0x0080
|
||||
#define IEEE80211_STYPE_QOS_DATA_CFACK 0x0090
|
||||
#define IEEE80211_STYPE_QOS_DATA_CFPOLL 0x00A0
|
||||
#define IEEE80211_STYPE_QOS_DATA_CFACKPOLL 0x00B0
|
||||
#define IEEE80211_STYPE_QOS_NULLFUNC 0x00C0
|
||||
#define IEEE80211_STYPE_QOS_CFACK 0x00D0
|
||||
#define IEEE80211_STYPE_QOS_CFPOLL 0x00E0
|
||||
#define IEEE80211_STYPE_QOS_CFACKPOLL 0x00F0
|
||||
|
||||
|
||||
/* miscellaneous IEEE 802.11 constants */
|
||||
#define IEEE80211_MAX_FRAG_THRESHOLD 2346
|
||||
#define IEEE80211_MAX_RTS_THRESHOLD 2347
|
||||
#define IEEE80211_MAX_AID 2007
|
||||
#define IEEE80211_MAX_TIM_LEN 251
|
||||
#define IEEE80211_MAX_DATA_LEN 2304
|
||||
/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section
|
||||
6.2.1.1.2.
|
||||
|
||||
The figure in section 7.1.2 suggests a body size of up to 2312
|
||||
bytes is allowed, which is a bit confusing, I suspect this
|
||||
represents the 2304 bytes of real data, plus a possible 8 bytes of
|
||||
WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) */
|
||||
|
||||
#define IEEE80211_MAX_SSID_LEN 32
|
||||
|
||||
struct ieee80211_hdr {
|
||||
__le16 frame_control;
|
||||
__le16 duration_id;
|
||||
u8 addr1[6];
|
||||
u8 addr2[6];
|
||||
u8 addr3[6];
|
||||
__le16 seq_ctrl;
|
||||
u8 addr4[6];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
|
||||
struct ieee80211_mgmt {
|
||||
__le16 frame_control;
|
||||
__le16 duration;
|
||||
u8 da[6];
|
||||
u8 sa[6];
|
||||
u8 bssid[6];
|
||||
__le16 seq_ctrl;
|
||||
union {
|
||||
struct {
|
||||
__le16 auth_alg;
|
||||
__le16 auth_transaction;
|
||||
__le16 status_code;
|
||||
/* possibly followed by Challenge text */
|
||||
u8 variable[0];
|
||||
} __attribute__ ((packed)) auth;
|
||||
struct {
|
||||
__le16 reason_code;
|
||||
} __attribute__ ((packed)) deauth;
|
||||
struct {
|
||||
__le16 capab_info;
|
||||
__le16 listen_interval;
|
||||
/* followed by SSID and Supported rates */
|
||||
u8 variable[0];
|
||||
} __attribute__ ((packed)) assoc_req;
|
||||
struct {
|
||||
__le16 capab_info;
|
||||
__le16 status_code;
|
||||
__le16 aid;
|
||||
/* followed by Supported rates */
|
||||
u8 variable[0];
|
||||
} __attribute__ ((packed)) assoc_resp, reassoc_resp;
|
||||
struct {
|
||||
__le16 capab_info;
|
||||
__le16 listen_interval;
|
||||
u8 current_ap[6];
|
||||
/* followed by SSID and Supported rates */
|
||||
u8 variable[0];
|
||||
} __attribute__ ((packed)) reassoc_req;
|
||||
struct {
|
||||
__le16 reason_code;
|
||||
} __attribute__ ((packed)) disassoc;
|
||||
struct {
|
||||
__le64 timestamp;
|
||||
__le16 beacon_int;
|
||||
__le16 capab_info;
|
||||
/* followed by some of SSID, Supported rates,
|
||||
* FH Params, DS Params, CF Params, IBSS Params, TIM */
|
||||
u8 variable[0];
|
||||
} __attribute__ ((packed)) beacon;
|
||||
struct {
|
||||
/* only variable items: SSID, Supported rates */
|
||||
u8 variable[0];
|
||||
} __attribute__ ((packed)) probe_req;
|
||||
struct {
|
||||
__le64 timestamp;
|
||||
__le16 beacon_int;
|
||||
__le16 capab_info;
|
||||
/* followed by some of SSID, Supported rates,
|
||||
* FH Params, DS Params, CF Params, IBSS Params */
|
||||
u8 variable[0];
|
||||
} __attribute__ ((packed)) probe_resp;
|
||||
struct {
|
||||
u8 category;
|
||||
union {
|
||||
struct {
|
||||
u8 action_code;
|
||||
u8 dialog_token;
|
||||
u8 status_code;
|
||||
u8 variable[0];
|
||||
} __attribute__ ((packed)) wme_action;
|
||||
struct{
|
||||
u8 action_code;
|
||||
u8 element_id;
|
||||
u8 length;
|
||||
u8 switch_mode;
|
||||
u8 new_chan;
|
||||
u8 switch_count;
|
||||
} __attribute__((packed)) chan_switch;
|
||||
} u;
|
||||
} __attribute__ ((packed)) action;
|
||||
} u;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
|
||||
/* Control frames */
|
||||
struct ieee80211_rts {
|
||||
__le16 frame_control;
|
||||
__le16 duration;
|
||||
u8 ra[6];
|
||||
u8 ta[6];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct ieee80211_cts {
|
||||
__le16 frame_control;
|
||||
__le16 duration;
|
||||
u8 ra[6];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
|
||||
/* Authentication algorithms */
|
||||
#define WLAN_AUTH_OPEN 0
|
||||
#define WLAN_AUTH_SHARED_KEY 1
|
||||
#define WLAN_AUTH_FAST_BSS_TRANSITION 2
|
||||
#define WLAN_AUTH_LEAP 128
|
||||
|
||||
#define WLAN_AUTH_CHALLENGE_LEN 128
|
||||
|
||||
#define WLAN_CAPABILITY_ESS (1<<0)
|
||||
#define WLAN_CAPABILITY_IBSS (1<<1)
|
||||
#define WLAN_CAPABILITY_CF_POLLABLE (1<<2)
|
||||
#define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3)
|
||||
#define WLAN_CAPABILITY_PRIVACY (1<<4)
|
||||
#define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5)
|
||||
#define WLAN_CAPABILITY_PBCC (1<<6)
|
||||
#define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7)
|
||||
/* 802.11h */
|
||||
#define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8)
|
||||
#define WLAN_CAPABILITY_QOS (1<<9)
|
||||
#define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10)
|
||||
#define WLAN_CAPABILITY_DSSS_OFDM (1<<13)
|
||||
|
||||
/* Status codes */
|
||||
enum ieee80211_statuscode {
|
||||
WLAN_STATUS_SUCCESS = 0,
|
||||
WLAN_STATUS_UNSPECIFIED_FAILURE = 1,
|
||||
WLAN_STATUS_CAPS_UNSUPPORTED = 10,
|
||||
WLAN_STATUS_REASSOC_NO_ASSOC = 11,
|
||||
WLAN_STATUS_ASSOC_DENIED_UNSPEC = 12,
|
||||
WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG = 13,
|
||||
WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION = 14,
|
||||
WLAN_STATUS_CHALLENGE_FAIL = 15,
|
||||
WLAN_STATUS_AUTH_TIMEOUT = 16,
|
||||
WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA = 17,
|
||||
WLAN_STATUS_ASSOC_DENIED_RATES = 18,
|
||||
/* 802.11b */
|
||||
WLAN_STATUS_ASSOC_DENIED_NOSHORTPREAMBLE = 19,
|
||||
WLAN_STATUS_ASSOC_DENIED_NOPBCC = 20,
|
||||
WLAN_STATUS_ASSOC_DENIED_NOAGILITY = 21,
|
||||
/* 802.11h */
|
||||
WLAN_STATUS_ASSOC_DENIED_NOSPECTRUM = 22,
|
||||
WLAN_STATUS_ASSOC_REJECTED_BAD_POWER = 23,
|
||||
WLAN_STATUS_ASSOC_REJECTED_BAD_SUPP_CHAN = 24,
|
||||
/* 802.11g */
|
||||
WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25,
|
||||
WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26,
|
||||
/* 802.11i */
|
||||
WLAN_STATUS_INVALID_IE = 40,
|
||||
WLAN_STATUS_INVALID_GROUP_CIPHER = 41,
|
||||
WLAN_STATUS_INVALID_PAIRWISE_CIPHER = 42,
|
||||
WLAN_STATUS_INVALID_AKMP = 43,
|
||||
WLAN_STATUS_UNSUPP_RSN_VERSION = 44,
|
||||
WLAN_STATUS_INVALID_RSN_IE_CAP = 45,
|
||||
WLAN_STATUS_CIPHER_SUITE_REJECTED = 46,
|
||||
};
|
||||
|
||||
|
||||
/* Reason codes */
|
||||
enum ieee80211_reasoncode {
|
||||
WLAN_REASON_UNSPECIFIED = 1,
|
||||
WLAN_REASON_PREV_AUTH_NOT_VALID = 2,
|
||||
WLAN_REASON_DEAUTH_LEAVING = 3,
|
||||
WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY = 4,
|
||||
WLAN_REASON_DISASSOC_AP_BUSY = 5,
|
||||
WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA = 6,
|
||||
WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA = 7,
|
||||
WLAN_REASON_DISASSOC_STA_HAS_LEFT = 8,
|
||||
WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH = 9,
|
||||
/* 802.11h */
|
||||
WLAN_REASON_DISASSOC_BAD_POWER = 10,
|
||||
WLAN_REASON_DISASSOC_BAD_SUPP_CHAN = 11,
|
||||
/* 802.11i */
|
||||
WLAN_REASON_INVALID_IE = 13,
|
||||
WLAN_REASON_MIC_FAILURE = 14,
|
||||
WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT = 15,
|
||||
WLAN_REASON_GROUP_KEY_HANDSHAKE_TIMEOUT = 16,
|
||||
WLAN_REASON_IE_DIFFERENT = 17,
|
||||
WLAN_REASON_INVALID_GROUP_CIPHER = 18,
|
||||
WLAN_REASON_INVALID_PAIRWISE_CIPHER = 19,
|
||||
WLAN_REASON_INVALID_AKMP = 20,
|
||||
WLAN_REASON_UNSUPP_RSN_VERSION = 21,
|
||||
WLAN_REASON_INVALID_RSN_IE_CAP = 22,
|
||||
WLAN_REASON_IEEE8021X_FAILED = 23,
|
||||
WLAN_REASON_CIPHER_SUITE_REJECTED = 24,
|
||||
};
|
||||
|
||||
|
||||
/* Information Element IDs */
|
||||
enum ieee80211_eid {
|
||||
WLAN_EID_SSID = 0,
|
||||
WLAN_EID_SUPP_RATES = 1,
|
||||
WLAN_EID_FH_PARAMS = 2,
|
||||
WLAN_EID_DS_PARAMS = 3,
|
||||
WLAN_EID_CF_PARAMS = 4,
|
||||
WLAN_EID_TIM = 5,
|
||||
WLAN_EID_IBSS_PARAMS = 6,
|
||||
WLAN_EID_CHALLENGE = 16,
|
||||
/* 802.11d */
|
||||
WLAN_EID_COUNTRY = 7,
|
||||
WLAN_EID_HP_PARAMS = 8,
|
||||
WLAN_EID_HP_TABLE = 9,
|
||||
WLAN_EID_REQUEST = 10,
|
||||
/* 802.11h */
|
||||
WLAN_EID_PWR_CONSTRAINT = 32,
|
||||
WLAN_EID_PWR_CAPABILITY = 33,
|
||||
WLAN_EID_TPC_REQUEST = 34,
|
||||
WLAN_EID_TPC_REPORT = 35,
|
||||
WLAN_EID_SUPPORTED_CHANNELS = 36,
|
||||
WLAN_EID_CHANNEL_SWITCH = 37,
|
||||
WLAN_EID_MEASURE_REQUEST = 38,
|
||||
WLAN_EID_MEASURE_REPORT = 39,
|
||||
WLAN_EID_QUIET = 40,
|
||||
WLAN_EID_IBSS_DFS = 41,
|
||||
/* 802.11g */
|
||||
WLAN_EID_ERP_INFO = 42,
|
||||
WLAN_EID_EXT_SUPP_RATES = 50,
|
||||
/* 802.11i */
|
||||
WLAN_EID_RSN = 48,
|
||||
WLAN_EID_WPA = 221,
|
||||
WLAN_EID_GENERIC = 221,
|
||||
WLAN_EID_VENDOR_SPECIFIC = 221,
|
||||
WLAN_EID_QOS_PARAMETER = 222
|
||||
};
|
||||
|
||||
/* cipher suite selectors */
|
||||
#define WLAN_CIPHER_SUITE_USE_GROUP 0x000FAC00
|
||||
#define WLAN_CIPHER_SUITE_WEP40 0x000FAC01
|
||||
#define WLAN_CIPHER_SUITE_TKIP 0x000FAC02
|
||||
/* reserved: 0x000FAC03 */
|
||||
#define WLAN_CIPHER_SUITE_CCMP 0x000FAC04
|
||||
#define WLAN_CIPHER_SUITE_WEP104 0x000FAC05
|
||||
|
||||
#define WLAN_MAX_KEY_LEN 32
|
||||
|
||||
#endif /* IEEE80211_H */
|
|
@ -52,9 +52,14 @@
|
|||
#endif
|
||||
|
||||
/* For assembly routines */
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
#define __INIT .section ".text","ax"
|
||||
#define __INITDATA .section ".data","aw"
|
||||
#else
|
||||
#define __INIT .section ".init.text","ax"
|
||||
#define __FINIT .previous
|
||||
#define __INITDATA .section ".init.data","aw"
|
||||
#endif
|
||||
#define __FINIT .previous
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
/*
|
||||
|
@ -228,7 +233,7 @@ void __init parse_early_param(void);
|
|||
#define __obsolete_setup(str) /* nothing */
|
||||
#endif
|
||||
|
||||
/* Data marked not to be saved by software_suspend() */
|
||||
/* Data marked not to be saved by software suspend */
|
||||
#define __nosavedata __attribute__ ((__section__ (".data.nosave")))
|
||||
|
||||
/* This means "can be init if no module support, otherwise module load
|
||||
|
|
|
@ -677,6 +677,7 @@ struct input_absinfo {
|
|||
#define BUS_I2C 0x18
|
||||
#define BUS_HOST 0x19
|
||||
#define BUS_GSC 0x1A
|
||||
#define BUS_ATARI 0x1B
|
||||
|
||||
/*
|
||||
* Values describing the status of a force-feedback effect
|
||||
|
@ -989,6 +990,10 @@ struct input_dev {
|
|||
#error "EV_MAX and INPUT_DEVICE_ID_EV_MAX do not match"
|
||||
#endif
|
||||
|
||||
#if KEY_MIN_INTERESTING != INPUT_DEVICE_ID_KEY_MIN_INTERESTING
|
||||
#error "KEY_MIN_INTERESTING and INPUT_DEVICE_ID_KEY_MIN_INTERESTING do not match"
|
||||
#endif
|
||||
|
||||
#if KEY_MAX != INPUT_DEVICE_ID_KEY_MAX
|
||||
#error "KEY_MAX and INPUT_DEVICE_ID_KEY_MAX do not match"
|
||||
#endif
|
||||
|
|
|
@ -185,10 +185,14 @@ static inline int disable_irq_wake(unsigned int irq)
|
|||
* validator need to define the methods below in their asm/irq.h
|
||||
* files, under an #ifdef CONFIG_LOCKDEP section.
|
||||
*/
|
||||
# ifndef CONFIG_LOCKDEP
|
||||
#ifndef CONFIG_LOCKDEP
|
||||
# define disable_irq_nosync_lockdep(irq) disable_irq_nosync(irq)
|
||||
# define disable_irq_nosync_lockdep_irqsave(irq, flags) \
|
||||
disable_irq_nosync(irq)
|
||||
# define disable_irq_lockdep(irq) disable_irq(irq)
|
||||
# define enable_irq_lockdep(irq) enable_irq(irq)
|
||||
# define enable_irq_lockdep_irqrestore(irq, flags) \
|
||||
enable_irq(irq)
|
||||
# endif
|
||||
|
||||
#endif /* CONFIG_GENERIC_HARDIRQS */
|
||||
|
|
|
@ -35,7 +35,8 @@ extern const char linux_proc_banner[];
|
|||
#define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1)
|
||||
#define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask))
|
||||
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||||
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
|
||||
|
||||
#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
|
||||
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
|
||||
#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
|
||||
|
|
|
@ -124,7 +124,6 @@ struct kset_uevent_ops {
|
|||
};
|
||||
|
||||
struct kset {
|
||||
struct subsystem * subsys;
|
||||
struct kobj_type * ktype;
|
||||
struct list_head list;
|
||||
spinlock_t list_lock;
|
||||
|
@ -171,32 +170,23 @@ extern struct kobject * kset_find_obj(struct kset *, const char *);
|
|||
#define set_kset_name(str) .kset = { .kobj = { .name = str } }
|
||||
|
||||
|
||||
|
||||
struct subsystem {
|
||||
struct kset kset;
|
||||
};
|
||||
|
||||
#define decl_subsys(_name,_type,_uevent_ops) \
|
||||
struct subsystem _name##_subsys = { \
|
||||
.kset = { \
|
||||
.kobj = { .name = __stringify(_name) }, \
|
||||
.ktype = _type, \
|
||||
.uevent_ops =_uevent_ops, \
|
||||
} \
|
||||
struct kset _name##_subsys = { \
|
||||
.kobj = { .name = __stringify(_name) }, \
|
||||
.ktype = _type, \
|
||||
.uevent_ops =_uevent_ops, \
|
||||
}
|
||||
#define decl_subsys_name(_varname,_name,_type,_uevent_ops) \
|
||||
struct subsystem _varname##_subsys = { \
|
||||
.kset = { \
|
||||
.kobj = { .name = __stringify(_name) }, \
|
||||
.ktype = _type, \
|
||||
.uevent_ops =_uevent_ops, \
|
||||
} \
|
||||
struct kset _varname##_subsys = { \
|
||||
.kobj = { .name = __stringify(_name) }, \
|
||||
.ktype = _type, \
|
||||
.uevent_ops =_uevent_ops, \
|
||||
}
|
||||
|
||||
/* The global /sys/kernel/ subsystem for people to chain off of */
|
||||
extern struct subsystem kernel_subsys;
|
||||
extern struct kset kernel_subsys;
|
||||
/* The global /sys/hypervisor/ subsystem */
|
||||
extern struct subsystem hypervisor_subsys;
|
||||
extern struct kset hypervisor_subsys;
|
||||
|
||||
/**
|
||||
* Helpers for setting the kset of registered objects.
|
||||
|
@ -214,7 +204,7 @@ extern struct subsystem hypervisor_subsys;
|
|||
*/
|
||||
|
||||
#define kobj_set_kset_s(obj,subsys) \
|
||||
(obj)->kobj.kset = &(subsys).kset
|
||||
(obj)->kobj.kset = &(subsys)
|
||||
|
||||
/**
|
||||
* kset_set_kset_s(obj,subsys) - set kset for embedded kset.
|
||||
|
@ -228,7 +218,7 @@ extern struct subsystem hypervisor_subsys;
|
|||
*/
|
||||
|
||||
#define kset_set_kset_s(obj,subsys) \
|
||||
(obj)->kset.kobj.kset = &(subsys).kset
|
||||
(obj)->kset.kobj.kset = &(subsys)
|
||||
|
||||
/**
|
||||
* subsys_set_kset(obj,subsys) - set kset for subsystem
|
||||
|
@ -241,29 +231,31 @@ extern struct subsystem hypervisor_subsys;
|
|||
*/
|
||||
|
||||
#define subsys_set_kset(obj,_subsys) \
|
||||
(obj)->subsys.kset.kobj.kset = &(_subsys).kset
|
||||
(obj)->subsys.kobj.kset = &(_subsys)
|
||||
|
||||
extern void subsystem_init(struct subsystem *);
|
||||
extern int __must_check subsystem_register(struct subsystem *);
|
||||
extern void subsystem_unregister(struct subsystem *);
|
||||
extern void subsystem_init(struct kset *);
|
||||
extern int __must_check subsystem_register(struct kset *);
|
||||
extern void subsystem_unregister(struct kset *);
|
||||
|
||||
static inline struct subsystem * subsys_get(struct subsystem * s)
|
||||
static inline struct kset *subsys_get(struct kset *s)
|
||||
{
|
||||
return s ? container_of(kset_get(&s->kset),struct subsystem,kset) : NULL;
|
||||
if (s)
|
||||
return kset_get(s);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void subsys_put(struct subsystem * s)
|
||||
static inline void subsys_put(struct kset *s)
|
||||
{
|
||||
kset_put(&s->kset);
|
||||
kset_put(s);
|
||||
}
|
||||
|
||||
struct subsys_attribute {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct subsystem *, char *);
|
||||
ssize_t (*store)(struct subsystem *, const char *, size_t);
|
||||
ssize_t (*show)(struct kset *, char *);
|
||||
ssize_t (*store)(struct kset *, const char *, size_t);
|
||||
};
|
||||
|
||||
extern int __must_check subsys_create_file(struct subsystem * ,
|
||||
extern int __must_check subsys_create_file(struct kset *,
|
||||
struct subsys_attribute *);
|
||||
|
||||
#if defined(CONFIG_HOTPLUG)
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include <asm/types.h>
|
||||
#include <linux/ioctl.h>
|
||||
|
||||
#define KVM_API_VERSION 4
|
||||
#define KVM_API_VERSION 12
|
||||
|
||||
/*
|
||||
* Architectural interrupt line count, and the size of the bitmap needed
|
||||
|
@ -33,37 +33,39 @@ struct kvm_memory_region {
|
|||
/* for kvm_memory_region::flags */
|
||||
#define KVM_MEM_LOG_DIRTY_PAGES 1UL
|
||||
|
||||
|
||||
#define KVM_EXIT_TYPE_FAIL_ENTRY 1
|
||||
#define KVM_EXIT_TYPE_VM_EXIT 2
|
||||
struct kvm_memory_alias {
|
||||
__u32 slot; /* this has a different namespace than memory slots */
|
||||
__u32 flags;
|
||||
__u64 guest_phys_addr;
|
||||
__u64 memory_size;
|
||||
__u64 target_phys_addr;
|
||||
};
|
||||
|
||||
enum kvm_exit_reason {
|
||||
KVM_EXIT_UNKNOWN = 0,
|
||||
KVM_EXIT_EXCEPTION = 1,
|
||||
KVM_EXIT_IO = 2,
|
||||
KVM_EXIT_CPUID = 3,
|
||||
KVM_EXIT_HYPERCALL = 3,
|
||||
KVM_EXIT_DEBUG = 4,
|
||||
KVM_EXIT_HLT = 5,
|
||||
KVM_EXIT_MMIO = 6,
|
||||
KVM_EXIT_IRQ_WINDOW_OPEN = 7,
|
||||
KVM_EXIT_SHUTDOWN = 8,
|
||||
KVM_EXIT_FAIL_ENTRY = 9,
|
||||
KVM_EXIT_INTR = 10,
|
||||
};
|
||||
|
||||
/* for KVM_RUN */
|
||||
/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
|
||||
struct kvm_run {
|
||||
/* in */
|
||||
__u32 emulated; /* skip current instruction */
|
||||
__u32 mmio_completed; /* mmio request completed */
|
||||
__u8 request_interrupt_window;
|
||||
__u8 padding1[7];
|
||||
|
||||
/* out */
|
||||
__u32 exit_type;
|
||||
__u32 exit_reason;
|
||||
__u32 instruction_length;
|
||||
__u8 ready_for_interrupt_injection;
|
||||
__u8 if_flag;
|
||||
__u16 padding2;
|
||||
__u8 padding2[2];
|
||||
|
||||
/* in (pre_kvm_run), out (post_kvm_run) */
|
||||
__u64 cr8;
|
||||
|
@ -72,29 +74,26 @@ struct kvm_run {
|
|||
union {
|
||||
/* KVM_EXIT_UNKNOWN */
|
||||
struct {
|
||||
__u32 hardware_exit_reason;
|
||||
__u64 hardware_exit_reason;
|
||||
} hw;
|
||||
/* KVM_EXIT_FAIL_ENTRY */
|
||||
struct {
|
||||
__u64 hardware_entry_failure_reason;
|
||||
} fail_entry;
|
||||
/* KVM_EXIT_EXCEPTION */
|
||||
struct {
|
||||
__u32 exception;
|
||||
__u32 error_code;
|
||||
} ex;
|
||||
/* KVM_EXIT_IO */
|
||||
struct {
|
||||
struct kvm_io {
|
||||
#define KVM_EXIT_IO_IN 0
|
||||
#define KVM_EXIT_IO_OUT 1
|
||||
__u8 direction;
|
||||
__u8 size; /* bytes */
|
||||
__u8 string;
|
||||
__u8 string_down;
|
||||
__u8 rep;
|
||||
__u8 pad;
|
||||
__u16 port;
|
||||
__u64 count;
|
||||
union {
|
||||
__u64 address;
|
||||
__u32 value;
|
||||
};
|
||||
__u32 count;
|
||||
__u64 data_offset; /* relative to kvm_run start */
|
||||
} io;
|
||||
struct {
|
||||
} debug;
|
||||
|
@ -105,6 +104,13 @@ struct kvm_run {
|
|||
__u32 len;
|
||||
__u8 is_write;
|
||||
} mmio;
|
||||
/* KVM_EXIT_HYPERCALL */
|
||||
struct {
|
||||
__u64 args[6];
|
||||
__u64 ret;
|
||||
__u32 longmode;
|
||||
__u32 pad;
|
||||
} hypercall;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -118,6 +124,21 @@ struct kvm_regs {
|
|||
__u64 rip, rflags;
|
||||
};
|
||||
|
||||
/* for KVM_GET_FPU and KVM_SET_FPU */
|
||||
struct kvm_fpu {
|
||||
__u8 fpr[8][16];
|
||||
__u16 fcw;
|
||||
__u16 fsw;
|
||||
__u8 ftwx; /* in fxsave format */
|
||||
__u8 pad1;
|
||||
__u16 last_opcode;
|
||||
__u64 last_ip;
|
||||
__u64 last_dp;
|
||||
__u8 xmm[16][16];
|
||||
__u32 mxcsr;
|
||||
__u32 pad2;
|
||||
};
|
||||
|
||||
struct kvm_segment {
|
||||
__u64 base;
|
||||
__u32 limit;
|
||||
|
@ -210,38 +231,74 @@ struct kvm_dirty_log {
|
|||
};
|
||||
};
|
||||
|
||||
struct kvm_cpuid_entry {
|
||||
__u32 function;
|
||||
__u32 eax;
|
||||
__u32 ebx;
|
||||
__u32 ecx;
|
||||
__u32 edx;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
/* for KVM_SET_CPUID */
|
||||
struct kvm_cpuid {
|
||||
__u32 nent;
|
||||
__u32 padding;
|
||||
struct kvm_cpuid_entry entries[0];
|
||||
};
|
||||
|
||||
/* for KVM_SET_SIGNAL_MASK */
|
||||
struct kvm_signal_mask {
|
||||
__u32 len;
|
||||
__u8 sigset[0];
|
||||
};
|
||||
|
||||
#define KVMIO 0xAE
|
||||
|
||||
/*
|
||||
* ioctls for /dev/kvm fds:
|
||||
*/
|
||||
#define KVM_GET_API_VERSION _IO(KVMIO, 1)
|
||||
#define KVM_CREATE_VM _IO(KVMIO, 2) /* returns a VM fd */
|
||||
#define KVM_GET_MSR_INDEX_LIST _IOWR(KVMIO, 15, struct kvm_msr_list)
|
||||
#define KVM_GET_API_VERSION _IO(KVMIO, 0x00)
|
||||
#define KVM_CREATE_VM _IO(KVMIO, 0x01) /* returns a VM fd */
|
||||
#define KVM_GET_MSR_INDEX_LIST _IOWR(KVMIO, 0x02, struct kvm_msr_list)
|
||||
/*
|
||||
* Check if a kvm extension is available. Argument is extension number,
|
||||
* return is 1 (yes) or 0 (no, sorry).
|
||||
*/
|
||||
#define KVM_CHECK_EXTENSION _IO(KVMIO, 0x03)
|
||||
/*
|
||||
* Get size for mmap(vcpu_fd)
|
||||
*/
|
||||
#define KVM_GET_VCPU_MMAP_SIZE _IO(KVMIO, 0x04) /* in bytes */
|
||||
|
||||
/*
|
||||
* ioctls for VM fds
|
||||
*/
|
||||
#define KVM_SET_MEMORY_REGION _IOW(KVMIO, 10, struct kvm_memory_region)
|
||||
#define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region)
|
||||
/*
|
||||
* KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
|
||||
* a vcpu fd.
|
||||
*/
|
||||
#define KVM_CREATE_VCPU _IOW(KVMIO, 11, int)
|
||||
#define KVM_GET_DIRTY_LOG _IOW(KVMIO, 12, struct kvm_dirty_log)
|
||||
#define KVM_CREATE_VCPU _IO(KVMIO, 0x41)
|
||||
#define KVM_GET_DIRTY_LOG _IOW(KVMIO, 0x42, struct kvm_dirty_log)
|
||||
#define KVM_SET_MEMORY_ALIAS _IOW(KVMIO, 0x43, struct kvm_memory_alias)
|
||||
|
||||
/*
|
||||
* ioctls for vcpu fds
|
||||
*/
|
||||
#define KVM_RUN _IOWR(KVMIO, 2, struct kvm_run)
|
||||
#define KVM_GET_REGS _IOR(KVMIO, 3, struct kvm_regs)
|
||||
#define KVM_SET_REGS _IOW(KVMIO, 4, struct kvm_regs)
|
||||
#define KVM_GET_SREGS _IOR(KVMIO, 5, struct kvm_sregs)
|
||||
#define KVM_SET_SREGS _IOW(KVMIO, 6, struct kvm_sregs)
|
||||
#define KVM_TRANSLATE _IOWR(KVMIO, 7, struct kvm_translation)
|
||||
#define KVM_INTERRUPT _IOW(KVMIO, 8, struct kvm_interrupt)
|
||||
#define KVM_DEBUG_GUEST _IOW(KVMIO, 9, struct kvm_debug_guest)
|
||||
#define KVM_GET_MSRS _IOWR(KVMIO, 13, struct kvm_msrs)
|
||||
#define KVM_SET_MSRS _IOW(KVMIO, 14, struct kvm_msrs)
|
||||
#define KVM_RUN _IO(KVMIO, 0x80)
|
||||
#define KVM_GET_REGS _IOR(KVMIO, 0x81, struct kvm_regs)
|
||||
#define KVM_SET_REGS _IOW(KVMIO, 0x82, struct kvm_regs)
|
||||
#define KVM_GET_SREGS _IOR(KVMIO, 0x83, struct kvm_sregs)
|
||||
#define KVM_SET_SREGS _IOW(KVMIO, 0x84, struct kvm_sregs)
|
||||
#define KVM_TRANSLATE _IOWR(KVMIO, 0x85, struct kvm_translation)
|
||||
#define KVM_INTERRUPT _IOW(KVMIO, 0x86, struct kvm_interrupt)
|
||||
#define KVM_DEBUG_GUEST _IOW(KVMIO, 0x87, struct kvm_debug_guest)
|
||||
#define KVM_GET_MSRS _IOWR(KVMIO, 0x88, struct kvm_msrs)
|
||||
#define KVM_SET_MSRS _IOW(KVMIO, 0x89, struct kvm_msrs)
|
||||
#define KVM_SET_CPUID _IOW(KVMIO, 0x8a, struct kvm_cpuid)
|
||||
#define KVM_SET_SIGNAL_MASK _IOW(KVMIO, 0x8b, struct kvm_signal_mask)
|
||||
#define KVM_GET_FPU _IOR(KVMIO, 0x8c, struct kvm_fpu)
|
||||
#define KVM_SET_FPU _IOW(KVMIO, 0x8d, struct kvm_fpu)
|
||||
|
||||
#endif
|
||||
|
|
|
@ -88,7 +88,7 @@ struct nlm_wait;
|
|||
/*
|
||||
* Memory chunk for NLM client RPC request.
|
||||
*/
|
||||
#define NLMCLNT_OHSIZE (sizeof(utsname()->nodename)+10)
|
||||
#define NLMCLNT_OHSIZE ((__NEW_UTS_LEN) + 10u)
|
||||
struct nlm_rqst {
|
||||
unsigned int a_flags; /* initial RPC task flags */
|
||||
struct nlm_host * a_host; /* host handle */
|
||||
|
@ -119,6 +119,9 @@ struct nlm_file {
|
|||
* couldn't be granted because of a conflicting lock).
|
||||
*/
|
||||
#define NLM_NEVER (~(unsigned long) 0)
|
||||
/* timeout on non-blocking call: */
|
||||
#define NLM_TIMEOUT (7 * HZ)
|
||||
|
||||
struct nlm_block {
|
||||
struct kref b_count; /* Reference count */
|
||||
struct list_head b_list; /* linked list of all blocks */
|
||||
|
@ -130,6 +133,13 @@ struct nlm_block {
|
|||
unsigned int b_id; /* block id */
|
||||
unsigned char b_granted; /* VFS granted lock */
|
||||
struct nlm_file * b_file; /* file in question */
|
||||
struct cache_req * b_cache_req; /* deferred request handling */
|
||||
struct file_lock * b_fl; /* set for GETLK */
|
||||
struct cache_deferred_req * b_deferred_req;
|
||||
unsigned int b_flags; /* block flags */
|
||||
#define B_QUEUED 1 /* lock queued */
|
||||
#define B_GOT_CALLBACK 2 /* got lock or conflicting lock */
|
||||
#define B_TIMED_OUT 4 /* filesystem too slow to respond */
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -185,8 +195,8 @@ typedef int (*nlm_host_match_fn_t)(struct nlm_host *cur, struct nlm_host *ref)
|
|||
__be32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *,
|
||||
struct nlm_lock *, int, struct nlm_cookie *);
|
||||
__be32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *);
|
||||
__be32 nlmsvc_testlock(struct nlm_file *, struct nlm_lock *,
|
||||
struct nlm_lock *);
|
||||
__be32 nlmsvc_testlock(struct svc_rqst *, struct nlm_file *,
|
||||
struct nlm_lock *, struct nlm_lock *, struct nlm_cookie *);
|
||||
__be32 nlmsvc_cancel_blocked(struct nlm_file *, struct nlm_lock *);
|
||||
unsigned long nlmsvc_retry_blocked(void);
|
||||
void nlmsvc_traverse_blocks(struct nlm_host *, struct nlm_file *,
|
||||
|
|
|
@ -2,18 +2,29 @@
|
|||
#define _LINUX_MIGRATE_H
|
||||
|
||||
#include <linux/mm.h>
|
||||
#include <linux/mempolicy.h>
|
||||
#include <linux/pagemap.h>
|
||||
|
||||
typedef struct page *new_page_t(struct page *, unsigned long private, int **);
|
||||
|
||||
#ifdef CONFIG_MIGRATION
|
||||
/* Check if a vma is migratable */
|
||||
static inline int vma_migratable(struct vm_area_struct *vma)
|
||||
{
|
||||
if (vma->vm_flags & (VM_IO|VM_HUGETLB|VM_PFNMAP|VM_RESERVED))
|
||||
return 0;
|
||||
/*
|
||||
* Migration allocates pages in the highest zone. If we cannot
|
||||
* do so then migration (at least from node to node) is not
|
||||
* possible.
|
||||
*/
|
||||
if (vma->vm_file &&
|
||||
gfp_zone(mapping_gfp_mask(vma->vm_file->f_mapping))
|
||||
< policy_zone)
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MIGRATION
|
||||
extern int isolate_lru_page(struct page *p, struct list_head *pagelist);
|
||||
extern int putback_lru_pages(struct list_head *l);
|
||||
extern int migrate_page(struct address_space *,
|
||||
|
@ -28,6 +39,8 @@ extern int migrate_vmas(struct mm_struct *mm,
|
|||
const nodemask_t *from, const nodemask_t *to,
|
||||
unsigned long flags);
|
||||
#else
|
||||
static inline int vma_migratable(struct vm_area_struct *vma)
|
||||
{ return 0; }
|
||||
|
||||
static inline int isolate_lru_page(struct page *p, struct list_head *list)
|
||||
{ return -ENOSYS; }
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
#define TUN_MINOR 200
|
||||
#define HPET_MINOR 228
|
||||
#define KVM_MINOR 232
|
||||
|
||||
struct device;
|
||||
|
||||
|
|
|
@ -267,21 +267,31 @@ static inline int get_page_unless_zero(struct page *page)
|
|||
return atomic_inc_not_zero(&page->_count);
|
||||
}
|
||||
|
||||
static inline struct page *compound_head(struct page *page)
|
||||
{
|
||||
if (unlikely(PageTail(page)))
|
||||
return page->first_page;
|
||||
return page;
|
||||
}
|
||||
|
||||
static inline int page_count(struct page *page)
|
||||
{
|
||||
if (unlikely(PageCompound(page)))
|
||||
page = (struct page *)page_private(page);
|
||||
return atomic_read(&page->_count);
|
||||
return atomic_read(&compound_head(page)->_count);
|
||||
}
|
||||
|
||||
static inline void get_page(struct page *page)
|
||||
{
|
||||
if (unlikely(PageCompound(page)))
|
||||
page = (struct page *)page_private(page);
|
||||
page = compound_head(page);
|
||||
VM_BUG_ON(atomic_read(&page->_count) == 0);
|
||||
atomic_inc(&page->_count);
|
||||
}
|
||||
|
||||
static inline struct page *virt_to_head_page(const void *x)
|
||||
{
|
||||
struct page *page = virt_to_page(x);
|
||||
return compound_head(page);
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup the page count before being freed into the page allocator for
|
||||
* the first time (boot or memory hotplug)
|
||||
|
@ -314,6 +324,18 @@ static inline compound_page_dtor *get_compound_page_dtor(struct page *page)
|
|||
return (compound_page_dtor *)page[1].lru.next;
|
||||
}
|
||||
|
||||
static inline int compound_order(struct page *page)
|
||||
{
|
||||
if (!PageHead(page))
|
||||
return 0;
|
||||
return (unsigned long)page[1].lru.prev;
|
||||
}
|
||||
|
||||
static inline void set_compound_order(struct page *page, unsigned long order)
|
||||
{
|
||||
page[1].lru.prev = (void *)order;
|
||||
}
|
||||
|
||||
/*
|
||||
* Multiple processes may "see" the same page. E.g. for untouched
|
||||
* mappings of /dev/null, all processes see the same page full of
|
||||
|
@ -850,8 +872,26 @@ static inline int vma_wants_writenotify(struct vm_area_struct *vma)
|
|||
|
||||
extern pte_t *FASTCALL(get_locked_pte(struct mm_struct *mm, unsigned long addr, spinlock_t **ptl));
|
||||
|
||||
#ifdef __PAGETABLE_PUD_FOLDED
|
||||
static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd,
|
||||
unsigned long address)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address);
|
||||
#endif
|
||||
|
||||
#ifdef __PAGETABLE_PMD_FOLDED
|
||||
static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud,
|
||||
unsigned long address)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address);
|
||||
#endif
|
||||
|
||||
int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address);
|
||||
int __pte_alloc_kernel(pmd_t *pmd, unsigned long address);
|
||||
|
||||
|
@ -1130,6 +1170,11 @@ struct page *follow_page(struct vm_area_struct *, unsigned long address,
|
|||
#define FOLL_GET 0x04 /* do get_page on page */
|
||||
#define FOLL_ANON 0x08 /* give ZERO_PAGE if no pgtable */
|
||||
|
||||
typedef int (*pte_fn_t)(pte_t *pte, struct page *pmd_page, unsigned long addr,
|
||||
void *data);
|
||||
extern int apply_to_page_range(struct mm_struct *mm, unsigned long address,
|
||||
unsigned long size, pte_fn_t fn, void *data);
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);
|
||||
#else
|
||||
|
|
|
@ -19,10 +19,16 @@ struct page {
|
|||
unsigned long flags; /* Atomic flags, some possibly
|
||||
* updated asynchronously */
|
||||
atomic_t _count; /* Usage count, see below. */
|
||||
atomic_t _mapcount; /* Count of ptes mapped in mms,
|
||||
union {
|
||||
atomic_t _mapcount; /* Count of ptes mapped in mms,
|
||||
* to show when page is mapped
|
||||
* & limit reverse map searches.
|
||||
*/
|
||||
struct { /* SLUB uses */
|
||||
short unsigned int inuse;
|
||||
short unsigned int offset;
|
||||
};
|
||||
};
|
||||
union {
|
||||
struct {
|
||||
unsigned long private; /* Mapping-private opaque data:
|
||||
|
@ -43,8 +49,15 @@ struct page {
|
|||
#if NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS
|
||||
spinlock_t ptl;
|
||||
#endif
|
||||
struct { /* SLUB uses */
|
||||
struct page *first_page; /* Compound pages */
|
||||
struct kmem_cache *slab; /* Pointer to slab */
|
||||
};
|
||||
};
|
||||
union {
|
||||
pgoff_t index; /* Our offset within mapping. */
|
||||
void *freelist; /* SLUB: pointer to free object */
|
||||
};
|
||||
pgoff_t index; /* Our offset within mapping. */
|
||||
struct list_head lru; /* Pageout list, eg. active_list
|
||||
* protected by zone->lru_lock !
|
||||
*/
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#ifndef LINUX_MMC_CARD_H
|
||||
#define LINUX_MMC_CARD_H
|
||||
|
||||
#include <linux/mmc/mmc.h>
|
||||
#include <linux/mmc/core.h>
|
||||
|
||||
struct mmc_cid {
|
||||
unsigned int manfid;
|
||||
|
@ -41,6 +41,7 @@ struct mmc_csd {
|
|||
|
||||
struct mmc_ext_csd {
|
||||
unsigned int hs_max_dtr;
|
||||
unsigned int sectors;
|
||||
};
|
||||
|
||||
struct sd_scr {
|
||||
|
@ -60,18 +61,17 @@ struct mmc_host;
|
|||
* MMC device
|
||||
*/
|
||||
struct mmc_card {
|
||||
struct list_head node; /* node in hosts devices list */
|
||||
struct mmc_host *host; /* the host this device belongs to */
|
||||
struct device dev; /* the device */
|
||||
unsigned int rca; /* relative card address of device */
|
||||
unsigned int type; /* card type */
|
||||
#define MMC_TYPE_MMC 0 /* MMC card */
|
||||
#define MMC_TYPE_SD 1 /* SD card */
|
||||
unsigned int state; /* (our) card state */
|
||||
#define MMC_STATE_PRESENT (1<<0) /* present in sysfs */
|
||||
#define MMC_STATE_DEAD (1<<1) /* device no longer in stack */
|
||||
#define MMC_STATE_BAD (1<<2) /* unrecognised device */
|
||||
#define MMC_STATE_SDCARD (1<<3) /* is an SD card */
|
||||
#define MMC_STATE_READONLY (1<<4) /* card is read-only */
|
||||
#define MMC_STATE_HIGHSPEED (1<<5) /* card is in high speed mode */
|
||||
#define MMC_STATE_BLOCKADDR (1<<6) /* card uses block-addressing */
|
||||
#define MMC_STATE_READONLY (1<<1) /* card is read-only */
|
||||
#define MMC_STATE_HIGHSPEED (1<<2) /* card is in high speed mode */
|
||||
#define MMC_STATE_BLOCKADDR (1<<3) /* card uses block-addressing */
|
||||
u32 raw_cid[4]; /* raw card CID */
|
||||
u32 raw_csd[4]; /* raw card CSD */
|
||||
u32 raw_scr[2]; /* raw card SCR */
|
||||
|
@ -82,18 +82,15 @@ struct mmc_card {
|
|||
struct sd_switch_caps sw_caps; /* switch (CMD6) caps */
|
||||
};
|
||||
|
||||
#define mmc_card_mmc(c) ((c)->type == MMC_TYPE_MMC)
|
||||
#define mmc_card_sd(c) ((c)->type == MMC_TYPE_SD)
|
||||
|
||||
#define mmc_card_present(c) ((c)->state & MMC_STATE_PRESENT)
|
||||
#define mmc_card_dead(c) ((c)->state & MMC_STATE_DEAD)
|
||||
#define mmc_card_bad(c) ((c)->state & MMC_STATE_BAD)
|
||||
#define mmc_card_sd(c) ((c)->state & MMC_STATE_SDCARD)
|
||||
#define mmc_card_readonly(c) ((c)->state & MMC_STATE_READONLY)
|
||||
#define mmc_card_highspeed(c) ((c)->state & MMC_STATE_HIGHSPEED)
|
||||
#define mmc_card_blockaddr(c) ((c)->state & MMC_STATE_BLOCKADDR)
|
||||
|
||||
#define mmc_card_set_present(c) ((c)->state |= MMC_STATE_PRESENT)
|
||||
#define mmc_card_set_dead(c) ((c)->state |= MMC_STATE_DEAD)
|
||||
#define mmc_card_set_bad(c) ((c)->state |= MMC_STATE_BAD)
|
||||
#define mmc_card_set_sd(c) ((c)->state |= MMC_STATE_SDCARD)
|
||||
#define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY)
|
||||
#define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED)
|
||||
#define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR)
|
||||
|
@ -119,11 +116,4 @@ struct mmc_driver {
|
|||
extern int mmc_register_driver(struct mmc_driver *);
|
||||
extern void mmc_unregister_driver(struct mmc_driver *);
|
||||
|
||||
static inline int mmc_card_claim_host(struct mmc_card *card)
|
||||
{
|
||||
return __mmc_claim_host(card->host, card);
|
||||
}
|
||||
|
||||
#define mmc_card_release_host(c) mmc_release_host((c)->host)
|
||||
|
||||
#endif
|
||||
|
|
112
include/linux/mmc/core.h
Normal file
112
include/linux/mmc/core.h
Normal file
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
* linux/include/linux/mmc/core.h
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#ifndef LINUX_MMC_CORE_H
|
||||
#define LINUX_MMC_CORE_H
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/device.h>
|
||||
|
||||
struct request;
|
||||
struct mmc_data;
|
||||
struct mmc_request;
|
||||
|
||||
struct mmc_command {
|
||||
u32 opcode;
|
||||
u32 arg;
|
||||
u32 resp[4];
|
||||
unsigned int flags; /* expected response type */
|
||||
#define MMC_RSP_PRESENT (1 << 0)
|
||||
#define MMC_RSP_136 (1 << 1) /* 136 bit response */
|
||||
#define MMC_RSP_CRC (1 << 2) /* expect valid crc */
|
||||
#define MMC_RSP_BUSY (1 << 3) /* card may send busy */
|
||||
#define MMC_RSP_OPCODE (1 << 4) /* response contains opcode */
|
||||
#define MMC_CMD_MASK (3 << 5) /* command type */
|
||||
#define MMC_CMD_AC (0 << 5)
|
||||
#define MMC_CMD_ADTC (1 << 5)
|
||||
#define MMC_CMD_BC (2 << 5)
|
||||
#define MMC_CMD_BCR (3 << 5)
|
||||
|
||||
/*
|
||||
* These are the response types, and correspond to valid bit
|
||||
* patterns of the above flags. One additional valid pattern
|
||||
* is all zeros, which means we don't expect a response.
|
||||
*/
|
||||
#define MMC_RSP_NONE (0)
|
||||
#define MMC_RSP_R1 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
|
||||
#define MMC_RSP_R1B (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE|MMC_RSP_BUSY)
|
||||
#define MMC_RSP_R2 (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC)
|
||||
#define MMC_RSP_R3 (MMC_RSP_PRESENT)
|
||||
#define MMC_RSP_R6 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
|
||||
#define MMC_RSP_R7 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
|
||||
|
||||
#define mmc_resp_type(cmd) ((cmd)->flags & (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC|MMC_RSP_BUSY|MMC_RSP_OPCODE))
|
||||
|
||||
/*
|
||||
* These are the command types.
|
||||
*/
|
||||
#define mmc_cmd_type(cmd) ((cmd)->flags & MMC_CMD_MASK)
|
||||
|
||||
unsigned int retries; /* max number of retries */
|
||||
unsigned int error; /* command error */
|
||||
|
||||
#define MMC_ERR_NONE 0
|
||||
#define MMC_ERR_TIMEOUT 1
|
||||
#define MMC_ERR_BADCRC 2
|
||||
#define MMC_ERR_FIFO 3
|
||||
#define MMC_ERR_FAILED 4
|
||||
#define MMC_ERR_INVALID 5
|
||||
|
||||
struct mmc_data *data; /* data segment associated with cmd */
|
||||
struct mmc_request *mrq; /* associated request */
|
||||
};
|
||||
|
||||
struct mmc_data {
|
||||
unsigned int timeout_ns; /* data timeout (in ns, max 80ms) */
|
||||
unsigned int timeout_clks; /* data timeout (in clocks) */
|
||||
unsigned int blksz; /* data block size */
|
||||
unsigned int blocks; /* number of blocks */
|
||||
unsigned int error; /* data error */
|
||||
unsigned int flags;
|
||||
|
||||
#define MMC_DATA_WRITE (1 << 8)
|
||||
#define MMC_DATA_READ (1 << 9)
|
||||
#define MMC_DATA_STREAM (1 << 10)
|
||||
#define MMC_DATA_MULTI (1 << 11)
|
||||
|
||||
unsigned int bytes_xfered;
|
||||
|
||||
struct mmc_command *stop; /* stop command */
|
||||
struct mmc_request *mrq; /* associated request */
|
||||
|
||||
unsigned int sg_len; /* size of scatter list */
|
||||
struct scatterlist *sg; /* I/O scatter list */
|
||||
};
|
||||
|
||||
struct mmc_request {
|
||||
struct mmc_command *cmd;
|
||||
struct mmc_data *data;
|
||||
struct mmc_command *stop;
|
||||
|
||||
void *done_data; /* completion data */
|
||||
void (*done)(struct mmc_request *);/* completion function */
|
||||
};
|
||||
|
||||
struct mmc_host;
|
||||
struct mmc_card;
|
||||
|
||||
extern int mmc_wait_for_req(struct mmc_host *, struct mmc_request *);
|
||||
extern int mmc_wait_for_cmd(struct mmc_host *, struct mmc_command *, int);
|
||||
extern int mmc_wait_for_app_cmd(struct mmc_host *, struct mmc_card *,
|
||||
struct mmc_command *, int);
|
||||
|
||||
extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *, int);
|
||||
|
||||
extern void mmc_claim_host(struct mmc_host *host);
|
||||
extern void mmc_release_host(struct mmc_host *host);
|
||||
|
||||
#endif
|
|
@ -10,36 +10,13 @@
|
|||
#ifndef LINUX_MMC_HOST_H
|
||||
#define LINUX_MMC_HOST_H
|
||||
|
||||
#include <linux/mmc/mmc.h>
|
||||
#include <linux/mmc/core.h>
|
||||
|
||||
struct mmc_ios {
|
||||
unsigned int clock; /* clock rate */
|
||||
unsigned short vdd;
|
||||
|
||||
#define MMC_VDD_150 0
|
||||
#define MMC_VDD_155 1
|
||||
#define MMC_VDD_160 2
|
||||
#define MMC_VDD_165 3
|
||||
#define MMC_VDD_170 4
|
||||
#define MMC_VDD_180 5
|
||||
#define MMC_VDD_190 6
|
||||
#define MMC_VDD_200 7
|
||||
#define MMC_VDD_210 8
|
||||
#define MMC_VDD_220 9
|
||||
#define MMC_VDD_230 10
|
||||
#define MMC_VDD_240 11
|
||||
#define MMC_VDD_250 12
|
||||
#define MMC_VDD_260 13
|
||||
#define MMC_VDD_270 14
|
||||
#define MMC_VDD_280 15
|
||||
#define MMC_VDD_290 16
|
||||
#define MMC_VDD_300 17
|
||||
#define MMC_VDD_310 18
|
||||
#define MMC_VDD_320 19
|
||||
#define MMC_VDD_330 20
|
||||
#define MMC_VDD_340 21
|
||||
#define MMC_VDD_350 22
|
||||
#define MMC_VDD_360 23
|
||||
/* vdd stores the bit number of the selected voltage range from below. */
|
||||
|
||||
unsigned char bus_mode; /* command output mode */
|
||||
|
||||
|
@ -88,6 +65,24 @@ struct mmc_host {
|
|||
unsigned int f_max;
|
||||
u32 ocr_avail;
|
||||
|
||||
#define MMC_VDD_165_195 0x00000080 /* VDD voltage 1.65 - 1.95 */
|
||||
#define MMC_VDD_20_21 0x00000100 /* VDD voltage 2.0 ~ 2.1 */
|
||||
#define MMC_VDD_21_22 0x00000200 /* VDD voltage 2.1 ~ 2.2 */
|
||||
#define MMC_VDD_22_23 0x00000400 /* VDD voltage 2.2 ~ 2.3 */
|
||||
#define MMC_VDD_23_24 0x00000800 /* VDD voltage 2.3 ~ 2.4 */
|
||||
#define MMC_VDD_24_25 0x00001000 /* VDD voltage 2.4 ~ 2.5 */
|
||||
#define MMC_VDD_25_26 0x00002000 /* VDD voltage 2.5 ~ 2.6 */
|
||||
#define MMC_VDD_26_27 0x00004000 /* VDD voltage 2.6 ~ 2.7 */
|
||||
#define MMC_VDD_27_28 0x00008000 /* VDD voltage 2.7 ~ 2.8 */
|
||||
#define MMC_VDD_28_29 0x00010000 /* VDD voltage 2.8 ~ 2.9 */
|
||||
#define MMC_VDD_29_30 0x00020000 /* VDD voltage 2.9 ~ 3.0 */
|
||||
#define MMC_VDD_30_31 0x00040000 /* VDD voltage 3.0 ~ 3.1 */
|
||||
#define MMC_VDD_31_32 0x00080000 /* VDD voltage 3.1 ~ 3.2 */
|
||||
#define MMC_VDD_32_33 0x00100000 /* VDD voltage 3.2 ~ 3.3 */
|
||||
#define MMC_VDD_33_34 0x00200000 /* VDD voltage 3.3 ~ 3.4 */
|
||||
#define MMC_VDD_34_35 0x00400000 /* VDD voltage 3.4 ~ 3.5 */
|
||||
#define MMC_VDD_35_36 0x00800000 /* VDD voltage 3.5 ~ 3.6 */
|
||||
|
||||
unsigned long caps; /* Host capabilities */
|
||||
|
||||
#define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */
|
||||
|
@ -106,6 +101,8 @@ struct mmc_host {
|
|||
unsigned int max_blk_count; /* maximum number of blocks in one req */
|
||||
|
||||
/* private data */
|
||||
spinlock_t lock; /* lock for claim and bus ops */
|
||||
|
||||
struct mmc_ios ios; /* current io bus settings */
|
||||
u32 ocr; /* the current OCR setting */
|
||||
|
||||
|
@ -113,15 +110,19 @@ struct mmc_host {
|
|||
#define MMC_MODE_MMC 0
|
||||
#define MMC_MODE_SD 1
|
||||
|
||||
struct list_head cards; /* devices attached to this host */
|
||||
struct mmc_card *card; /* device attached to this host */
|
||||
|
||||
wait_queue_head_t wq;
|
||||
spinlock_t lock; /* claimed lock */
|
||||
unsigned int claimed:1; /* host exclusively claimed */
|
||||
|
||||
struct mmc_card *card_selected; /* the selected MMC card */
|
||||
|
||||
struct delayed_work detect;
|
||||
#ifdef CONFIG_MMC_DEBUG
|
||||
unsigned int removed:1; /* host is being removed */
|
||||
#endif
|
||||
|
||||
const struct mmc_bus_ops *bus_ops; /* current bus driver */
|
||||
unsigned int bus_refs; /* reference counter */
|
||||
unsigned int bus_dead:1; /* bus has been released */
|
||||
|
||||
unsigned long private[0] ____cacheline_aligned;
|
||||
};
|
||||
|
|
|
@ -1,119 +1,257 @@
|
|||
/*
|
||||
* linux/include/linux/mmc/mmc.h
|
||||
* Header for MultiMediaCard (MMC)
|
||||
*
|
||||
* 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.
|
||||
* Copyright 2002 Hewlett-Packard Company
|
||||
*
|
||||
* Use consistent with the GNU GPL is permitted,
|
||||
* provided that this copyright notice is
|
||||
* preserved in its entirety in all copies and derived works.
|
||||
*
|
||||
* HEWLETT-PACKARD COMPANY MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
|
||||
* AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
|
||||
* FITNESS FOR ANY PARTICULAR PURPOSE.
|
||||
*
|
||||
* Many thanks to Alessandro Rubini and Jonathan Corbet!
|
||||
*
|
||||
* Based strongly on code by:
|
||||
*
|
||||
* Author: Yong-iL Joh <tolkien@mizi.com>
|
||||
* Date : $Date: 2002/06/18 12:37:30 $
|
||||
*
|
||||
* Author: Andrew Christian
|
||||
* 15 May 2002
|
||||
*/
|
||||
#ifndef MMC_H
|
||||
#define MMC_H
|
||||
|
||||
#include <linux/list.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/device.h>
|
||||
#ifndef MMC_MMC_H
|
||||
#define MMC_MMC_H
|
||||
|
||||
struct request;
|
||||
struct mmc_data;
|
||||
struct mmc_request;
|
||||
/* Standard MMC commands (4.1) type argument response */
|
||||
/* class 1 */
|
||||
#define MMC_GO_IDLE_STATE 0 /* bc */
|
||||
#define MMC_SEND_OP_COND 1 /* bcr [31:0] OCR R3 */
|
||||
#define MMC_ALL_SEND_CID 2 /* bcr R2 */
|
||||
#define MMC_SET_RELATIVE_ADDR 3 /* ac [31:16] RCA R1 */
|
||||
#define MMC_SET_DSR 4 /* bc [31:16] RCA */
|
||||
#define MMC_SWITCH 6 /* ac [31:0] See below R1b */
|
||||
#define MMC_SELECT_CARD 7 /* ac [31:16] RCA R1 */
|
||||
#define MMC_SEND_EXT_CSD 8 /* adtc R1 */
|
||||
#define MMC_SEND_CSD 9 /* ac [31:16] RCA R2 */
|
||||
#define MMC_SEND_CID 10 /* ac [31:16] RCA R2 */
|
||||
#define MMC_READ_DAT_UNTIL_STOP 11 /* adtc [31:0] dadr R1 */
|
||||
#define MMC_STOP_TRANSMISSION 12 /* ac R1b */
|
||||
#define MMC_SEND_STATUS 13 /* ac [31:16] RCA R1 */
|
||||
#define MMC_GO_INACTIVE_STATE 15 /* ac [31:16] RCA */
|
||||
|
||||
struct mmc_command {
|
||||
u32 opcode;
|
||||
u32 arg;
|
||||
u32 resp[4];
|
||||
unsigned int flags; /* expected response type */
|
||||
#define MMC_RSP_PRESENT (1 << 0)
|
||||
#define MMC_RSP_136 (1 << 1) /* 136 bit response */
|
||||
#define MMC_RSP_CRC (1 << 2) /* expect valid crc */
|
||||
#define MMC_RSP_BUSY (1 << 3) /* card may send busy */
|
||||
#define MMC_RSP_OPCODE (1 << 4) /* response contains opcode */
|
||||
#define MMC_CMD_MASK (3 << 5) /* command type */
|
||||
#define MMC_CMD_AC (0 << 5)
|
||||
#define MMC_CMD_ADTC (1 << 5)
|
||||
#define MMC_CMD_BC (2 << 5)
|
||||
#define MMC_CMD_BCR (3 << 5)
|
||||
/* class 2 */
|
||||
#define MMC_SET_BLOCKLEN 16 /* ac [31:0] block len R1 */
|
||||
#define MMC_READ_SINGLE_BLOCK 17 /* adtc [31:0] data addr R1 */
|
||||
#define MMC_READ_MULTIPLE_BLOCK 18 /* adtc [31:0] data addr R1 */
|
||||
|
||||
/* class 3 */
|
||||
#define MMC_WRITE_DAT_UNTIL_STOP 20 /* adtc [31:0] data addr R1 */
|
||||
|
||||
/* class 4 */
|
||||
#define MMC_SET_BLOCK_COUNT 23 /* adtc [31:0] data addr R1 */
|
||||
#define MMC_WRITE_BLOCK 24 /* adtc [31:0] data addr R1 */
|
||||
#define MMC_WRITE_MULTIPLE_BLOCK 25 /* adtc R1 */
|
||||
#define MMC_PROGRAM_CID 26 /* adtc R1 */
|
||||
#define MMC_PROGRAM_CSD 27 /* adtc R1 */
|
||||
|
||||
/* class 6 */
|
||||
#define MMC_SET_WRITE_PROT 28 /* ac [31:0] data addr R1b */
|
||||
#define MMC_CLR_WRITE_PROT 29 /* ac [31:0] data addr R1b */
|
||||
#define MMC_SEND_WRITE_PROT 30 /* adtc [31:0] wpdata addr R1 */
|
||||
|
||||
/* class 5 */
|
||||
#define MMC_ERASE_GROUP_START 35 /* ac [31:0] data addr R1 */
|
||||
#define MMC_ERASE_GROUP_END 36 /* ac [31:0] data addr R1 */
|
||||
#define MMC_ERASE 38 /* ac R1b */
|
||||
|
||||
/* class 9 */
|
||||
#define MMC_FAST_IO 39 /* ac <Complex> R4 */
|
||||
#define MMC_GO_IRQ_STATE 40 /* bcr R5 */
|
||||
|
||||
/* class 7 */
|
||||
#define MMC_LOCK_UNLOCK 42 /* adtc R1b */
|
||||
|
||||
/* class 8 */
|
||||
#define MMC_APP_CMD 55 /* ac [31:16] RCA R1 */
|
||||
#define MMC_GEN_CMD 56 /* adtc [0] RD/WR R1 */
|
||||
|
||||
/*
|
||||
* These are the response types, and correspond to valid bit
|
||||
* patterns of the above flags. One additional valid pattern
|
||||
* is all zeros, which means we don't expect a response.
|
||||
* MMC_SWITCH argument format:
|
||||
*
|
||||
* [31:26] Always 0
|
||||
* [25:24] Access Mode
|
||||
* [23:16] Location of target Byte in EXT_CSD
|
||||
* [15:08] Value Byte
|
||||
* [07:03] Always 0
|
||||
* [02:00] Command Set
|
||||
*/
|
||||
#define MMC_RSP_NONE (0)
|
||||
#define MMC_RSP_R1 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
|
||||
#define MMC_RSP_R1B (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE|MMC_RSP_BUSY)
|
||||
#define MMC_RSP_R2 (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC)
|
||||
#define MMC_RSP_R3 (MMC_RSP_PRESENT)
|
||||
#define MMC_RSP_R6 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
|
||||
#define MMC_RSP_R7 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
|
||||
|
||||
#define mmc_resp_type(cmd) ((cmd)->flags & (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC|MMC_RSP_BUSY|MMC_RSP_OPCODE))
|
||||
|
||||
/*
|
||||
* These are the command types.
|
||||
MMC status in R1
|
||||
Type
|
||||
e : error bit
|
||||
s : status bit
|
||||
r : detected and set for the actual command response
|
||||
x : detected and set during command execution. the host must poll
|
||||
the card by sending status command in order to read these bits.
|
||||
Clear condition
|
||||
a : according to the card state
|
||||
b : always related to the previous command. Reception of
|
||||
a valid command will clear it (with a delay of one command)
|
||||
c : clear by read
|
||||
*/
|
||||
#define mmc_cmd_type(cmd) ((cmd)->flags & MMC_CMD_MASK)
|
||||
|
||||
unsigned int retries; /* max number of retries */
|
||||
unsigned int error; /* command error */
|
||||
#define R1_OUT_OF_RANGE (1 << 31) /* er, c */
|
||||
#define R1_ADDRESS_ERROR (1 << 30) /* erx, c */
|
||||
#define R1_BLOCK_LEN_ERROR (1 << 29) /* er, c */
|
||||
#define R1_ERASE_SEQ_ERROR (1 << 28) /* er, c */
|
||||
#define R1_ERASE_PARAM (1 << 27) /* ex, c */
|
||||
#define R1_WP_VIOLATION (1 << 26) /* erx, c */
|
||||
#define R1_CARD_IS_LOCKED (1 << 25) /* sx, a */
|
||||
#define R1_LOCK_UNLOCK_FAILED (1 << 24) /* erx, c */
|
||||
#define R1_COM_CRC_ERROR (1 << 23) /* er, b */
|
||||
#define R1_ILLEGAL_COMMAND (1 << 22) /* er, b */
|
||||
#define R1_CARD_ECC_FAILED (1 << 21) /* ex, c */
|
||||
#define R1_CC_ERROR (1 << 20) /* erx, c */
|
||||
#define R1_ERROR (1 << 19) /* erx, c */
|
||||
#define R1_UNDERRUN (1 << 18) /* ex, c */
|
||||
#define R1_OVERRUN (1 << 17) /* ex, c */
|
||||
#define R1_CID_CSD_OVERWRITE (1 << 16) /* erx, c, CID/CSD overwrite */
|
||||
#define R1_WP_ERASE_SKIP (1 << 15) /* sx, c */
|
||||
#define R1_CARD_ECC_DISABLED (1 << 14) /* sx, a */
|
||||
#define R1_ERASE_RESET (1 << 13) /* sr, c */
|
||||
#define R1_STATUS(x) (x & 0xFFFFE000)
|
||||
#define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */
|
||||
#define R1_READY_FOR_DATA (1 << 8) /* sx, a */
|
||||
#define R1_APP_CMD (1 << 5) /* sr, c */
|
||||
|
||||
#define MMC_ERR_NONE 0
|
||||
#define MMC_ERR_TIMEOUT 1
|
||||
#define MMC_ERR_BADCRC 2
|
||||
#define MMC_ERR_FIFO 3
|
||||
#define MMC_ERR_FAILED 4
|
||||
#define MMC_ERR_INVALID 5
|
||||
/* These are unpacked versions of the actual responses */
|
||||
|
||||
struct mmc_data *data; /* data segment associated with cmd */
|
||||
struct mmc_request *mrq; /* associated request */
|
||||
struct _mmc_csd {
|
||||
u8 csd_structure;
|
||||
u8 spec_vers;
|
||||
u8 taac;
|
||||
u8 nsac;
|
||||
u8 tran_speed;
|
||||
u16 ccc;
|
||||
u8 read_bl_len;
|
||||
u8 read_bl_partial;
|
||||
u8 write_blk_misalign;
|
||||
u8 read_blk_misalign;
|
||||
u8 dsr_imp;
|
||||
u16 c_size;
|
||||
u8 vdd_r_curr_min;
|
||||
u8 vdd_r_curr_max;
|
||||
u8 vdd_w_curr_min;
|
||||
u8 vdd_w_curr_max;
|
||||
u8 c_size_mult;
|
||||
union {
|
||||
struct { /* MMC system specification version 3.1 */
|
||||
u8 erase_grp_size;
|
||||
u8 erase_grp_mult;
|
||||
} v31;
|
||||
struct { /* MMC system specification version 2.2 */
|
||||
u8 sector_size;
|
||||
u8 erase_grp_size;
|
||||
} v22;
|
||||
} erase;
|
||||
u8 wp_grp_size;
|
||||
u8 wp_grp_enable;
|
||||
u8 default_ecc;
|
||||
u8 r2w_factor;
|
||||
u8 write_bl_len;
|
||||
u8 write_bl_partial;
|
||||
u8 file_format_grp;
|
||||
u8 copy;
|
||||
u8 perm_write_protect;
|
||||
u8 tmp_write_protect;
|
||||
u8 file_format;
|
||||
u8 ecc;
|
||||
};
|
||||
|
||||
struct mmc_data {
|
||||
unsigned int timeout_ns; /* data timeout (in ns, max 80ms) */
|
||||
unsigned int timeout_clks; /* data timeout (in clocks) */
|
||||
unsigned int blksz; /* data block size */
|
||||
unsigned int blocks; /* number of blocks */
|
||||
unsigned int error; /* data error */
|
||||
unsigned int flags;
|
||||
/*
|
||||
* OCR bits are mostly in host.h
|
||||
*/
|
||||
#define MMC_CARD_BUSY 0x80000000 /* Card Power up status bit */
|
||||
|
||||
#define MMC_DATA_WRITE (1 << 8)
|
||||
#define MMC_DATA_READ (1 << 9)
|
||||
#define MMC_DATA_STREAM (1 << 10)
|
||||
#define MMC_DATA_MULTI (1 << 11)
|
||||
/*
|
||||
* Card Command Classes (CCC)
|
||||
*/
|
||||
#define CCC_BASIC (1<<0) /* (0) Basic protocol functions */
|
||||
/* (CMD0,1,2,3,4,7,9,10,12,13,15) */
|
||||
#define CCC_STREAM_READ (1<<1) /* (1) Stream read commands */
|
||||
/* (CMD11) */
|
||||
#define CCC_BLOCK_READ (1<<2) /* (2) Block read commands */
|
||||
/* (CMD16,17,18) */
|
||||
#define CCC_STREAM_WRITE (1<<3) /* (3) Stream write commands */
|
||||
/* (CMD20) */
|
||||
#define CCC_BLOCK_WRITE (1<<4) /* (4) Block write commands */
|
||||
/* (CMD16,24,25,26,27) */
|
||||
#define CCC_ERASE (1<<5) /* (5) Ability to erase blocks */
|
||||
/* (CMD32,33,34,35,36,37,38,39) */
|
||||
#define CCC_WRITE_PROT (1<<6) /* (6) Able to write protect blocks */
|
||||
/* (CMD28,29,30) */
|
||||
#define CCC_LOCK_CARD (1<<7) /* (7) Able to lock down card */
|
||||
/* (CMD16,CMD42) */
|
||||
#define CCC_APP_SPEC (1<<8) /* (8) Application specific */
|
||||
/* (CMD55,56,57,ACMD*) */
|
||||
#define CCC_IO_MODE (1<<9) /* (9) I/O mode */
|
||||
/* (CMD5,39,40,52,53) */
|
||||
#define CCC_SWITCH (1<<10) /* (10) High speed switch */
|
||||
/* (CMD6,34,35,36,37,50) */
|
||||
/* (11) Reserved */
|
||||
/* (CMD?) */
|
||||
|
||||
unsigned int bytes_xfered;
|
||||
/*
|
||||
* CSD field definitions
|
||||
*/
|
||||
|
||||
struct mmc_command *stop; /* stop command */
|
||||
struct mmc_request *mrq; /* associated request */
|
||||
#define CSD_STRUCT_VER_1_0 0 /* Valid for system specification 1.0 - 1.2 */
|
||||
#define CSD_STRUCT_VER_1_1 1 /* Valid for system specification 1.4 - 2.2 */
|
||||
#define CSD_STRUCT_VER_1_2 2 /* Valid for system specification 3.1 - 3.2 - 3.31 - 4.0 - 4.1 */
|
||||
#define CSD_STRUCT_EXT_CSD 3 /* Version is coded in CSD_STRUCTURE in EXT_CSD */
|
||||
|
||||
unsigned int sg_len; /* size of scatter list */
|
||||
struct scatterlist *sg; /* I/O scatter list */
|
||||
};
|
||||
#define CSD_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.2 */
|
||||
#define CSD_SPEC_VER_1 1 /* Implements system specification 1.4 */
|
||||
#define CSD_SPEC_VER_2 2 /* Implements system specification 2.0 - 2.2 */
|
||||
#define CSD_SPEC_VER_3 3 /* Implements system specification 3.1 - 3.2 - 3.31 */
|
||||
#define CSD_SPEC_VER_4 4 /* Implements system specification 4.0 - 4.1 */
|
||||
|
||||
struct mmc_request {
|
||||
struct mmc_command *cmd;
|
||||
struct mmc_data *data;
|
||||
struct mmc_command *stop;
|
||||
/*
|
||||
* EXT_CSD fields
|
||||
*/
|
||||
|
||||
void *done_data; /* completion data */
|
||||
void (*done)(struct mmc_request *);/* completion function */
|
||||
};
|
||||
#define EXT_CSD_BUS_WIDTH 183 /* R/W */
|
||||
#define EXT_CSD_HS_TIMING 185 /* R/W */
|
||||
#define EXT_CSD_CARD_TYPE 196 /* RO */
|
||||
#define EXT_CSD_SEC_CNT 212 /* RO, 4 bytes */
|
||||
|
||||
struct mmc_host;
|
||||
struct mmc_card;
|
||||
/*
|
||||
* EXT_CSD field definitions
|
||||
*/
|
||||
|
||||
extern int mmc_wait_for_req(struct mmc_host *, struct mmc_request *);
|
||||
extern int mmc_wait_for_cmd(struct mmc_host *, struct mmc_command *, int);
|
||||
extern int mmc_wait_for_app_cmd(struct mmc_host *, unsigned int,
|
||||
struct mmc_command *, int);
|
||||
#define EXT_CSD_CMD_SET_NORMAL (1<<0)
|
||||
#define EXT_CSD_CMD_SET_SECURE (1<<1)
|
||||
#define EXT_CSD_CMD_SET_CPSECURE (1<<2)
|
||||
|
||||
extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *, int);
|
||||
#define EXT_CSD_CARD_TYPE_26 (1<<0) /* Card can run at 26MHz */
|
||||
#define EXT_CSD_CARD_TYPE_52 (1<<1) /* Card can run at 52MHz */
|
||||
|
||||
extern int __mmc_claim_host(struct mmc_host *host, struct mmc_card *card);
|
||||
#define EXT_CSD_BUS_WIDTH_1 0 /* Card is in 1 bit mode */
|
||||
#define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */
|
||||
#define EXT_CSD_BUS_WIDTH_8 2 /* Card is in 8 bit mode */
|
||||
|
||||
static inline void mmc_claim_host(struct mmc_host *host)
|
||||
{
|
||||
__mmc_claim_host(host, (struct mmc_card *)-1);
|
||||
}
|
||||
/*
|
||||
* MMC_SWITCH access modes
|
||||
*/
|
||||
|
||||
extern void mmc_release_host(struct mmc_host *host);
|
||||
#define MMC_SWITCH_MODE_CMD_SET 0x00 /* Change the command set */
|
||||
#define MMC_SWITCH_MODE_SET_BITS 0x01 /* Set bits which are 1 in value */
|
||||
#define MMC_SWITCH_MODE_CLEAR_BITS 0x02 /* Clear bits which are 1 in value */
|
||||
#define MMC_SWITCH_MODE_WRITE_BYTE 0x03 /* Set target to value */
|
||||
|
||||
#endif /* MMC_MMC_PROTOCOL_H */
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,327 +0,0 @@
|
|||
/*
|
||||
* Header for MultiMediaCard (MMC)
|
||||
*
|
||||
* Copyright 2002 Hewlett-Packard Company
|
||||
*
|
||||
* Use consistent with the GNU GPL is permitted,
|
||||
* provided that this copyright notice is
|
||||
* preserved in its entirety in all copies and derived works.
|
||||
*
|
||||
* HEWLETT-PACKARD COMPANY MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
|
||||
* AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
|
||||
* FITNESS FOR ANY PARTICULAR PURPOSE.
|
||||
*
|
||||
* Many thanks to Alessandro Rubini and Jonathan Corbet!
|
||||
*
|
||||
* Based strongly on code by:
|
||||
*
|
||||
* Author: Yong-iL Joh <tolkien@mizi.com>
|
||||
* Date : $Date: 2002/06/18 12:37:30 $
|
||||
*
|
||||
* Author: Andrew Christian
|
||||
* 15 May 2002
|
||||
*/
|
||||
|
||||
#ifndef MMC_MMC_PROTOCOL_H
|
||||
#define MMC_MMC_PROTOCOL_H
|
||||
|
||||
/* Standard MMC commands (4.1) type argument response */
|
||||
/* class 1 */
|
||||
#define MMC_GO_IDLE_STATE 0 /* bc */
|
||||
#define MMC_SEND_OP_COND 1 /* bcr [31:0] OCR R3 */
|
||||
#define MMC_ALL_SEND_CID 2 /* bcr R2 */
|
||||
#define MMC_SET_RELATIVE_ADDR 3 /* ac [31:16] RCA R1 */
|
||||
#define MMC_SET_DSR 4 /* bc [31:16] RCA */
|
||||
#define MMC_SWITCH 6 /* ac [31:0] See below R1b */
|
||||
#define MMC_SELECT_CARD 7 /* ac [31:16] RCA R1 */
|
||||
#define MMC_SEND_EXT_CSD 8 /* adtc R1 */
|
||||
#define MMC_SEND_CSD 9 /* ac [31:16] RCA R2 */
|
||||
#define MMC_SEND_CID 10 /* ac [31:16] RCA R2 */
|
||||
#define MMC_READ_DAT_UNTIL_STOP 11 /* adtc [31:0] dadr R1 */
|
||||
#define MMC_STOP_TRANSMISSION 12 /* ac R1b */
|
||||
#define MMC_SEND_STATUS 13 /* ac [31:16] RCA R1 */
|
||||
#define MMC_GO_INACTIVE_STATE 15 /* ac [31:16] RCA */
|
||||
|
||||
/* class 2 */
|
||||
#define MMC_SET_BLOCKLEN 16 /* ac [31:0] block len R1 */
|
||||
#define MMC_READ_SINGLE_BLOCK 17 /* adtc [31:0] data addr R1 */
|
||||
#define MMC_READ_MULTIPLE_BLOCK 18 /* adtc [31:0] data addr R1 */
|
||||
|
||||
/* class 3 */
|
||||
#define MMC_WRITE_DAT_UNTIL_STOP 20 /* adtc [31:0] data addr R1 */
|
||||
|
||||
/* class 4 */
|
||||
#define MMC_SET_BLOCK_COUNT 23 /* adtc [31:0] data addr R1 */
|
||||
#define MMC_WRITE_BLOCK 24 /* adtc [31:0] data addr R1 */
|
||||
#define MMC_WRITE_MULTIPLE_BLOCK 25 /* adtc R1 */
|
||||
#define MMC_PROGRAM_CID 26 /* adtc R1 */
|
||||
#define MMC_PROGRAM_CSD 27 /* adtc R1 */
|
||||
|
||||
/* class 6 */
|
||||
#define MMC_SET_WRITE_PROT 28 /* ac [31:0] data addr R1b */
|
||||
#define MMC_CLR_WRITE_PROT 29 /* ac [31:0] data addr R1b */
|
||||
#define MMC_SEND_WRITE_PROT 30 /* adtc [31:0] wpdata addr R1 */
|
||||
|
||||
/* class 5 */
|
||||
#define MMC_ERASE_GROUP_START 35 /* ac [31:0] data addr R1 */
|
||||
#define MMC_ERASE_GROUP_END 36 /* ac [31:0] data addr R1 */
|
||||
#define MMC_ERASE 38 /* ac R1b */
|
||||
|
||||
/* class 9 */
|
||||
#define MMC_FAST_IO 39 /* ac <Complex> R4 */
|
||||
#define MMC_GO_IRQ_STATE 40 /* bcr R5 */
|
||||
|
||||
/* class 7 */
|
||||
#define MMC_LOCK_UNLOCK 42 /* adtc R1b */
|
||||
|
||||
/* class 8 */
|
||||
#define MMC_APP_CMD 55 /* ac [31:16] RCA R1 */
|
||||
#define MMC_GEN_CMD 56 /* adtc [0] RD/WR R1 */
|
||||
|
||||
/* SD commands type argument response */
|
||||
/* class 0 */
|
||||
/* This is basically the same command as for MMC with some quirks. */
|
||||
#define SD_SEND_RELATIVE_ADDR 3 /* bcr R6 */
|
||||
#define SD_SEND_IF_COND 8 /* bcr [11:0] See below R7 */
|
||||
|
||||
/* class 10 */
|
||||
#define SD_SWITCH 6 /* adtc [31:0] See below R1 */
|
||||
|
||||
/* Application commands */
|
||||
#define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */
|
||||
#define SD_APP_SEND_NUM_WR_BLKS 22 /* adtc R1 */
|
||||
#define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */
|
||||
#define SD_APP_SEND_SCR 51 /* adtc R1 */
|
||||
|
||||
/*
|
||||
* MMC_SWITCH argument format:
|
||||
*
|
||||
* [31:26] Always 0
|
||||
* [25:24] Access Mode
|
||||
* [23:16] Location of target Byte in EXT_CSD
|
||||
* [15:08] Value Byte
|
||||
* [07:03] Always 0
|
||||
* [02:00] Command Set
|
||||
*/
|
||||
|
||||
/*
|
||||
* SD_SWITCH argument format:
|
||||
*
|
||||
* [31] Check (0) or switch (1)
|
||||
* [30:24] Reserved (0)
|
||||
* [23:20] Function group 6
|
||||
* [19:16] Function group 5
|
||||
* [15:12] Function group 4
|
||||
* [11:8] Function group 3
|
||||
* [7:4] Function group 2
|
||||
* [3:0] Function group 1
|
||||
*/
|
||||
|
||||
/*
|
||||
* SD_SEND_IF_COND argument format:
|
||||
*
|
||||
* [31:12] Reserved (0)
|
||||
* [11:8] Host Voltage Supply Flags
|
||||
* [7:0] Check Pattern (0xAA)
|
||||
*/
|
||||
|
||||
/*
|
||||
MMC status in R1
|
||||
Type
|
||||
e : error bit
|
||||
s : status bit
|
||||
r : detected and set for the actual command response
|
||||
x : detected and set during command execution. the host must poll
|
||||
the card by sending status command in order to read these bits.
|
||||
Clear condition
|
||||
a : according to the card state
|
||||
b : always related to the previous command. Reception of
|
||||
a valid command will clear it (with a delay of one command)
|
||||
c : clear by read
|
||||
*/
|
||||
|
||||
#define R1_OUT_OF_RANGE (1 << 31) /* er, c */
|
||||
#define R1_ADDRESS_ERROR (1 << 30) /* erx, c */
|
||||
#define R1_BLOCK_LEN_ERROR (1 << 29) /* er, c */
|
||||
#define R1_ERASE_SEQ_ERROR (1 << 28) /* er, c */
|
||||
#define R1_ERASE_PARAM (1 << 27) /* ex, c */
|
||||
#define R1_WP_VIOLATION (1 << 26) /* erx, c */
|
||||
#define R1_CARD_IS_LOCKED (1 << 25) /* sx, a */
|
||||
#define R1_LOCK_UNLOCK_FAILED (1 << 24) /* erx, c */
|
||||
#define R1_COM_CRC_ERROR (1 << 23) /* er, b */
|
||||
#define R1_ILLEGAL_COMMAND (1 << 22) /* er, b */
|
||||
#define R1_CARD_ECC_FAILED (1 << 21) /* ex, c */
|
||||
#define R1_CC_ERROR (1 << 20) /* erx, c */
|
||||
#define R1_ERROR (1 << 19) /* erx, c */
|
||||
#define R1_UNDERRUN (1 << 18) /* ex, c */
|
||||
#define R1_OVERRUN (1 << 17) /* ex, c */
|
||||
#define R1_CID_CSD_OVERWRITE (1 << 16) /* erx, c, CID/CSD overwrite */
|
||||
#define R1_WP_ERASE_SKIP (1 << 15) /* sx, c */
|
||||
#define R1_CARD_ECC_DISABLED (1 << 14) /* sx, a */
|
||||
#define R1_ERASE_RESET (1 << 13) /* sr, c */
|
||||
#define R1_STATUS(x) (x & 0xFFFFE000)
|
||||
#define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */
|
||||
#define R1_READY_FOR_DATA (1 << 8) /* sx, a */
|
||||
#define R1_APP_CMD (1 << 5) /* sr, c */
|
||||
|
||||
/* These are unpacked versions of the actual responses */
|
||||
|
||||
struct _mmc_csd {
|
||||
u8 csd_structure;
|
||||
u8 spec_vers;
|
||||
u8 taac;
|
||||
u8 nsac;
|
||||
u8 tran_speed;
|
||||
u16 ccc;
|
||||
u8 read_bl_len;
|
||||
u8 read_bl_partial;
|
||||
u8 write_blk_misalign;
|
||||
u8 read_blk_misalign;
|
||||
u8 dsr_imp;
|
||||
u16 c_size;
|
||||
u8 vdd_r_curr_min;
|
||||
u8 vdd_r_curr_max;
|
||||
u8 vdd_w_curr_min;
|
||||
u8 vdd_w_curr_max;
|
||||
u8 c_size_mult;
|
||||
union {
|
||||
struct { /* MMC system specification version 3.1 */
|
||||
u8 erase_grp_size;
|
||||
u8 erase_grp_mult;
|
||||
} v31;
|
||||
struct { /* MMC system specification version 2.2 */
|
||||
u8 sector_size;
|
||||
u8 erase_grp_size;
|
||||
} v22;
|
||||
} erase;
|
||||
u8 wp_grp_size;
|
||||
u8 wp_grp_enable;
|
||||
u8 default_ecc;
|
||||
u8 r2w_factor;
|
||||
u8 write_bl_len;
|
||||
u8 write_bl_partial;
|
||||
u8 file_format_grp;
|
||||
u8 copy;
|
||||
u8 perm_write_protect;
|
||||
u8 tmp_write_protect;
|
||||
u8 file_format;
|
||||
u8 ecc;
|
||||
};
|
||||
|
||||
#define MMC_VDD_145_150 0x00000001 /* VDD voltage 1.45 - 1.50 */
|
||||
#define MMC_VDD_150_155 0x00000002 /* VDD voltage 1.50 - 1.55 */
|
||||
#define MMC_VDD_155_160 0x00000004 /* VDD voltage 1.55 - 1.60 */
|
||||
#define MMC_VDD_160_165 0x00000008 /* VDD voltage 1.60 - 1.65 */
|
||||
#define MMC_VDD_165_170 0x00000010 /* VDD voltage 1.65 - 1.70 */
|
||||
#define MMC_VDD_17_18 0x00000020 /* VDD voltage 1.7 - 1.8 */
|
||||
#define MMC_VDD_18_19 0x00000040 /* VDD voltage 1.8 - 1.9 */
|
||||
#define MMC_VDD_19_20 0x00000080 /* VDD voltage 1.9 - 2.0 */
|
||||
#define MMC_VDD_20_21 0x00000100 /* VDD voltage 2.0 ~ 2.1 */
|
||||
#define MMC_VDD_21_22 0x00000200 /* VDD voltage 2.1 ~ 2.2 */
|
||||
#define MMC_VDD_22_23 0x00000400 /* VDD voltage 2.2 ~ 2.3 */
|
||||
#define MMC_VDD_23_24 0x00000800 /* VDD voltage 2.3 ~ 2.4 */
|
||||
#define MMC_VDD_24_25 0x00001000 /* VDD voltage 2.4 ~ 2.5 */
|
||||
#define MMC_VDD_25_26 0x00002000 /* VDD voltage 2.5 ~ 2.6 */
|
||||
#define MMC_VDD_26_27 0x00004000 /* VDD voltage 2.6 ~ 2.7 */
|
||||
#define MMC_VDD_27_28 0x00008000 /* VDD voltage 2.7 ~ 2.8 */
|
||||
#define MMC_VDD_28_29 0x00010000 /* VDD voltage 2.8 ~ 2.9 */
|
||||
#define MMC_VDD_29_30 0x00020000 /* VDD voltage 2.9 ~ 3.0 */
|
||||
#define MMC_VDD_30_31 0x00040000 /* VDD voltage 3.0 ~ 3.1 */
|
||||
#define MMC_VDD_31_32 0x00080000 /* VDD voltage 3.1 ~ 3.2 */
|
||||
#define MMC_VDD_32_33 0x00100000 /* VDD voltage 3.2 ~ 3.3 */
|
||||
#define MMC_VDD_33_34 0x00200000 /* VDD voltage 3.3 ~ 3.4 */
|
||||
#define MMC_VDD_34_35 0x00400000 /* VDD voltage 3.4 ~ 3.5 */
|
||||
#define MMC_VDD_35_36 0x00800000 /* VDD voltage 3.5 ~ 3.6 */
|
||||
#define MMC_CARD_BUSY 0x80000000 /* Card Power up status bit */
|
||||
|
||||
/*
|
||||
* Card Command Classes (CCC)
|
||||
*/
|
||||
#define CCC_BASIC (1<<0) /* (0) Basic protocol functions */
|
||||
/* (CMD0,1,2,3,4,7,9,10,12,13,15) */
|
||||
#define CCC_STREAM_READ (1<<1) /* (1) Stream read commands */
|
||||
/* (CMD11) */
|
||||
#define CCC_BLOCK_READ (1<<2) /* (2) Block read commands */
|
||||
/* (CMD16,17,18) */
|
||||
#define CCC_STREAM_WRITE (1<<3) /* (3) Stream write commands */
|
||||
/* (CMD20) */
|
||||
#define CCC_BLOCK_WRITE (1<<4) /* (4) Block write commands */
|
||||
/* (CMD16,24,25,26,27) */
|
||||
#define CCC_ERASE (1<<5) /* (5) Ability to erase blocks */
|
||||
/* (CMD32,33,34,35,36,37,38,39) */
|
||||
#define CCC_WRITE_PROT (1<<6) /* (6) Able to write protect blocks */
|
||||
/* (CMD28,29,30) */
|
||||
#define CCC_LOCK_CARD (1<<7) /* (7) Able to lock down card */
|
||||
/* (CMD16,CMD42) */
|
||||
#define CCC_APP_SPEC (1<<8) /* (8) Application specific */
|
||||
/* (CMD55,56,57,ACMD*) */
|
||||
#define CCC_IO_MODE (1<<9) /* (9) I/O mode */
|
||||
/* (CMD5,39,40,52,53) */
|
||||
#define CCC_SWITCH (1<<10) /* (10) High speed switch */
|
||||
/* (CMD6,34,35,36,37,50) */
|
||||
/* (11) Reserved */
|
||||
/* (CMD?) */
|
||||
|
||||
/*
|
||||
* CSD field definitions
|
||||
*/
|
||||
|
||||
#define CSD_STRUCT_VER_1_0 0 /* Valid for system specification 1.0 - 1.2 */
|
||||
#define CSD_STRUCT_VER_1_1 1 /* Valid for system specification 1.4 - 2.2 */
|
||||
#define CSD_STRUCT_VER_1_2 2 /* Valid for system specification 3.1 - 3.2 - 3.31 - 4.0 - 4.1 */
|
||||
#define CSD_STRUCT_EXT_CSD 3 /* Version is coded in CSD_STRUCTURE in EXT_CSD */
|
||||
|
||||
#define CSD_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.2 */
|
||||
#define CSD_SPEC_VER_1 1 /* Implements system specification 1.4 */
|
||||
#define CSD_SPEC_VER_2 2 /* Implements system specification 2.0 - 2.2 */
|
||||
#define CSD_SPEC_VER_3 3 /* Implements system specification 3.1 - 3.2 - 3.31 */
|
||||
#define CSD_SPEC_VER_4 4 /* Implements system specification 4.0 - 4.1 */
|
||||
|
||||
/*
|
||||
* EXT_CSD fields
|
||||
*/
|
||||
|
||||
#define EXT_CSD_BUS_WIDTH 183 /* R/W */
|
||||
#define EXT_CSD_HS_TIMING 185 /* R/W */
|
||||
#define EXT_CSD_CARD_TYPE 196 /* RO */
|
||||
|
||||
/*
|
||||
* EXT_CSD field definitions
|
||||
*/
|
||||
|
||||
#define EXT_CSD_CMD_SET_NORMAL (1<<0)
|
||||
#define EXT_CSD_CMD_SET_SECURE (1<<1)
|
||||
#define EXT_CSD_CMD_SET_CPSECURE (1<<2)
|
||||
|
||||
#define EXT_CSD_CARD_TYPE_26 (1<<0) /* Card can run at 26MHz */
|
||||
#define EXT_CSD_CARD_TYPE_52 (1<<1) /* Card can run at 52MHz */
|
||||
|
||||
#define EXT_CSD_BUS_WIDTH_1 0 /* Card is in 1 bit mode */
|
||||
#define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */
|
||||
#define EXT_CSD_BUS_WIDTH_8 2 /* Card is in 8 bit mode */
|
||||
|
||||
/*
|
||||
* MMC_SWITCH access modes
|
||||
*/
|
||||
|
||||
#define MMC_SWITCH_MODE_CMD_SET 0x00 /* Change the command set */
|
||||
#define MMC_SWITCH_MODE_SET_BITS 0x01 /* Set bits which are 1 in value */
|
||||
#define MMC_SWITCH_MODE_CLEAR_BITS 0x02 /* Clear bits which are 1 in value */
|
||||
#define MMC_SWITCH_MODE_WRITE_BYTE 0x03 /* Set target to value */
|
||||
|
||||
/*
|
||||
* SCR field definitions
|
||||
*/
|
||||
|
||||
#define SCR_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.01 */
|
||||
#define SCR_SPEC_VER_1 1 /* Implements system specification 1.10 */
|
||||
#define SCR_SPEC_VER_2 2 /* Implements system specification 2.00 */
|
||||
|
||||
/*
|
||||
* SD bus widths
|
||||
*/
|
||||
#define SD_BUS_WIDTH_1 0
|
||||
#define SD_BUS_WIDTH_4 2
|
||||
|
||||
#endif /* MMC_MMC_PROTOCOL_H */
|
||||
|
83
include/linux/mmc/sd.h
Normal file
83
include/linux/mmc/sd.h
Normal file
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
* include/linux/mmc/sd.h
|
||||
*
|
||||
* Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved.
|
||||
*
|
||||
* 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 MMC_SD_H
|
||||
#define MMC_SD_H
|
||||
|
||||
/* SD commands type argument response */
|
||||
/* class 0 */
|
||||
/* This is basically the same command as for MMC with some quirks. */
|
||||
#define SD_SEND_RELATIVE_ADDR 3 /* bcr R6 */
|
||||
#define SD_SEND_IF_COND 8 /* bcr [11:0] See below R7 */
|
||||
|
||||
/* class 10 */
|
||||
#define SD_SWITCH 6 /* adtc [31:0] See below R1 */
|
||||
|
||||
/* Application commands */
|
||||
#define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */
|
||||
#define SD_APP_SEND_NUM_WR_BLKS 22 /* adtc R1 */
|
||||
#define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */
|
||||
#define SD_APP_SEND_SCR 51 /* adtc R1 */
|
||||
|
||||
/*
|
||||
* SD_SWITCH argument format:
|
||||
*
|
||||
* [31] Check (0) or switch (1)
|
||||
* [30:24] Reserved (0)
|
||||
* [23:20] Function group 6
|
||||
* [19:16] Function group 5
|
||||
* [15:12] Function group 4
|
||||
* [11:8] Function group 3
|
||||
* [7:4] Function group 2
|
||||
* [3:0] Function group 1
|
||||
*/
|
||||
|
||||
/*
|
||||
* SD_SEND_IF_COND argument format:
|
||||
*
|
||||
* [31:12] Reserved (0)
|
||||
* [11:8] Host Voltage Supply Flags
|
||||
* [7:0] Check Pattern (0xAA)
|
||||
*/
|
||||
|
||||
/*
|
||||
* SCR field definitions
|
||||
*/
|
||||
|
||||
#define SCR_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.01 */
|
||||
#define SCR_SPEC_VER_1 1 /* Implements system specification 1.10 */
|
||||
#define SCR_SPEC_VER_2 2 /* Implements system specification 2.00 */
|
||||
|
||||
/*
|
||||
* SD bus widths
|
||||
*/
|
||||
#define SD_BUS_WIDTH_1 0
|
||||
#define SD_BUS_WIDTH_4 2
|
||||
|
||||
/*
|
||||
* SD_SWITCH mode
|
||||
*/
|
||||
#define SD_SWITCH_CHECK 0
|
||||
#define SD_SWITCH_SET 1
|
||||
|
||||
/*
|
||||
* SD_SWITCH function groups
|
||||
*/
|
||||
#define SD_SWITCH_GRP_ACCESS 0
|
||||
|
||||
/*
|
||||
* SD_SWITCH access modes
|
||||
*/
|
||||
#define SD_SWITCH_ACCESS_DEF 0
|
||||
#define SD_SWITCH_ACCESS_HS 1
|
||||
|
||||
#endif
|
||||
|
|
@ -784,6 +784,18 @@ void sparse_init(void);
|
|||
void memory_present(int nid, unsigned long start, unsigned long end);
|
||||
unsigned long __init node_memmap_size_bytes(int, unsigned long, unsigned long);
|
||||
|
||||
/*
|
||||
* If it is possible to have holes within a MAX_ORDER_NR_PAGES, then we
|
||||
* need to check pfn validility within that MAX_ORDER_NR_PAGES block.
|
||||
* pfn_valid_within() should be used in this case; we optimise this away
|
||||
* when we have no holes within a MAX_ORDER_NR_PAGES block.
|
||||
*/
|
||||
#ifdef CONFIG_HOLES_IN_ZONE
|
||||
#define pfn_valid_within(pfn) pfn_valid(pfn)
|
||||
#else
|
||||
#define pfn_valid_within(pfn) (1)
|
||||
#endif
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_MMZONE_H */
|
||||
|
|
|
@ -262,6 +262,7 @@ struct i2c_device_id {
|
|||
|
||||
/* Input */
|
||||
#define INPUT_DEVICE_ID_EV_MAX 0x1f
|
||||
#define INPUT_DEVICE_ID_KEY_MIN_INTERESTING 0x71
|
||||
#define INPUT_DEVICE_ID_KEY_MAX 0x1ff
|
||||
#define INPUT_DEVICE_ID_REL_MAX 0x0f
|
||||
#define INPUT_DEVICE_ID_ABS_MAX 0x3f
|
||||
|
|
|
@ -568,7 +568,7 @@ struct device_driver;
|
|||
#ifdef CONFIG_SYSFS
|
||||
struct module;
|
||||
|
||||
extern struct subsystem module_subsys;
|
||||
extern struct kset module_subsys;
|
||||
|
||||
int mod_sysfs_init(struct module *mod);
|
||||
int mod_sysfs_setup(struct module *mod,
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef LINUX_MSI_H
|
||||
#define LINUX_MSI_H
|
||||
|
||||
#include <linux/list.h>
|
||||
|
||||
struct msi_msg {
|
||||
u32 address_lo; /* low 32 bits of msi message address */
|
||||
u32 address_hi; /* high 32 bits of msi message address */
|
||||
|
@ -24,10 +26,8 @@ struct msi_desc {
|
|||
unsigned default_irq; /* default pre-assigned irq */
|
||||
}msi_attrib;
|
||||
|
||||
struct {
|
||||
__u16 head;
|
||||
__u16 tail;
|
||||
}link;
|
||||
unsigned int irq;
|
||||
struct list_head list;
|
||||
|
||||
void __iomem *mask_base;
|
||||
struct pci_dev *dev;
|
||||
|
@ -41,6 +41,9 @@ struct msi_desc {
|
|||
*/
|
||||
int arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc);
|
||||
void arch_teardown_msi_irq(unsigned int irq);
|
||||
extern int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
|
||||
extern void arch_teardown_msi_irqs(struct pci_dev *dev);
|
||||
extern int arch_msi_check_device(struct pci_dev* dev, int nvec, int type);
|
||||
|
||||
|
||||
#endif /* LINUX_MSI_H */
|
||||
|
|
|
@ -304,7 +304,7 @@ struct net_device
|
|||
|
||||
unsigned long state;
|
||||
|
||||
struct net_device *next;
|
||||
struct list_head dev_list;
|
||||
|
||||
/* The device initialization function. Called only once. */
|
||||
int (*init)(struct net_device *dev);
|
||||
|
@ -575,13 +575,36 @@ struct packet_type {
|
|||
#include <linux/notifier.h>
|
||||
|
||||
extern struct net_device loopback_dev; /* The loopback */
|
||||
extern struct net_device *dev_base; /* All devices */
|
||||
extern struct list_head dev_base_head; /* All devices */
|
||||
extern rwlock_t dev_base_lock; /* Device list lock */
|
||||
|
||||
#define for_each_netdev(d) \
|
||||
list_for_each_entry(d, &dev_base_head, dev_list)
|
||||
#define for_each_netdev_safe(d, n) \
|
||||
list_for_each_entry_safe(d, n, &dev_base_head, dev_list)
|
||||
#define for_each_netdev_continue(d) \
|
||||
list_for_each_entry_continue(d, &dev_base_head, dev_list)
|
||||
#define net_device_entry(lh) list_entry(lh, struct net_device, dev_list)
|
||||
|
||||
static inline struct net_device *next_net_device(struct net_device *dev)
|
||||
{
|
||||
struct list_head *lh;
|
||||
|
||||
lh = dev->dev_list.next;
|
||||
return lh == &dev_base_head ? NULL : net_device_entry(lh);
|
||||
}
|
||||
|
||||
static inline struct net_device *first_net_device(void)
|
||||
{
|
||||
return list_empty(&dev_base_head) ? NULL :
|
||||
net_device_entry(dev_base_head.next);
|
||||
}
|
||||
|
||||
extern int netdev_boot_setup_check(struct net_device *dev);
|
||||
extern unsigned long netdev_boot_base(const char *prefix, int unit);
|
||||
extern struct net_device *dev_getbyhwaddr(unsigned short type, char *hwaddr);
|
||||
extern struct net_device *dev_getfirstbyhwtype(unsigned short type);
|
||||
extern struct net_device *__dev_getfirstbyhwtype(unsigned short type);
|
||||
extern void dev_add_pack(struct packet_type *pt);
|
||||
extern void dev_remove_pack(struct packet_type *pt);
|
||||
extern void __dev_remove_pack(struct packet_type *pt);
|
||||
|
|
|
@ -87,24 +87,6 @@ int nf_ct_gre_keymap_add(struct nf_conn *ct, enum ip_conntrack_dir dir,
|
|||
/* delete keymap entries */
|
||||
void nf_ct_gre_keymap_destroy(struct nf_conn *ct);
|
||||
|
||||
/* get pointer to gre key, if present */
|
||||
static inline __be32 *gre_key(struct gre_hdr *greh)
|
||||
{
|
||||
if (!greh->key)
|
||||
return NULL;
|
||||
if (greh->csum || greh->routing)
|
||||
return (__be32 *)(greh+sizeof(*greh)+4);
|
||||
return (__be32 *)(greh+sizeof(*greh));
|
||||
}
|
||||
|
||||
/* get pointer ot gre csum, if present */
|
||||
static inline __sum16 *gre_csum(struct gre_hdr *greh)
|
||||
{
|
||||
if (!greh->csum)
|
||||
return NULL;
|
||||
return (__sum16 *)(greh+sizeof(*greh));
|
||||
}
|
||||
|
||||
extern void nf_ct_gre_keymap_flush(void);
|
||||
extern void nf_nat_need_gre(void);
|
||||
|
||||
|
|
|
@ -55,18 +55,25 @@ static inline int nf_bridge_maybe_copy_header(struct sk_buff *skb)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline unsigned int nf_bridge_encap_header_len(const struct sk_buff *skb)
|
||||
{
|
||||
switch (skb->protocol) {
|
||||
case __constant_htons(ETH_P_8021Q):
|
||||
return VLAN_HLEN;
|
||||
case __constant_htons(ETH_P_PPP_SES):
|
||||
return PPPOE_SES_HLEN;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* This is called by the IP fragmenting code and it ensures there is
|
||||
* enough room for the encapsulating header (if there is one). */
|
||||
static inline int nf_bridge_pad(const struct sk_buff *skb)
|
||||
static inline unsigned int nf_bridge_pad(const struct sk_buff *skb)
|
||||
{
|
||||
int padding = 0;
|
||||
|
||||
if (skb->nf_bridge && skb->protocol == htons(ETH_P_8021Q))
|
||||
padding = VLAN_HLEN;
|
||||
else if (skb->nf_bridge && skb->protocol == htons(ETH_P_PPP_SES))
|
||||
padding = PPPOE_SES_HLEN;
|
||||
|
||||
return padding;
|
||||
if (skb->nf_bridge)
|
||||
return nf_bridge_encap_header_len(skb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct bridge_skb_cb {
|
||||
|
|
|
@ -31,7 +31,7 @@ struct sockaddr_nl
|
|||
{
|
||||
sa_family_t nl_family; /* AF_NETLINK */
|
||||
unsigned short nl_pad; /* zero */
|
||||
__u32 nl_pid; /* process pid */
|
||||
__u32 nl_pid; /* port ID */
|
||||
__u32 nl_groups; /* multicast groups mask */
|
||||
};
|
||||
|
||||
|
@ -41,7 +41,7 @@ struct nlmsghdr
|
|||
__u16 nlmsg_type; /* Message content */
|
||||
__u16 nlmsg_flags; /* Additional flags */
|
||||
__u32 nlmsg_seq; /* Sequence number */
|
||||
__u32 nlmsg_pid; /* Sending process PID */
|
||||
__u32 nlmsg_pid; /* Sending process port ID */
|
||||
};
|
||||
|
||||
/* Flags values */
|
||||
|
|
|
@ -455,7 +455,7 @@ nfs_have_writebacks(struct inode *inode)
|
|||
/*
|
||||
* Allocate nfs_write_data structures
|
||||
*/
|
||||
extern struct nfs_write_data *nfs_writedata_alloc(size_t len);
|
||||
extern struct nfs_write_data *nfs_writedata_alloc(unsigned int npages);
|
||||
|
||||
/*
|
||||
* linux/fs/nfs/read.c
|
||||
|
@ -469,7 +469,7 @@ extern void nfs_readdata_release(void *data);
|
|||
/*
|
||||
* Allocate nfs_read_data structures
|
||||
*/
|
||||
extern struct nfs_read_data *nfs_readdata_alloc(size_t len);
|
||||
extern struct nfs_read_data *nfs_readdata_alloc(unsigned int npages);
|
||||
|
||||
/*
|
||||
* linux/fs/nfs3proc.c
|
||||
|
|
|
@ -61,6 +61,7 @@ struct nfs_mount_data {
|
|||
#define NFS_MOUNT_NOACL 0x0800 /* 4 */
|
||||
#define NFS_MOUNT_STRICTLOCK 0x1000 /* reserved for NFSv4 */
|
||||
#define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */
|
||||
#define NFS_MOUNT_NORDIRPLUS 0x4000 /* 5 */
|
||||
#define NFS_MOUNT_FLAGMASK 0xFFFF
|
||||
|
||||
#endif
|
||||
|
|
|
@ -21,8 +21,7 @@
|
|||
/*
|
||||
* Valid flags for the radix tree
|
||||
*/
|
||||
#define NFS_PAGE_TAG_DIRTY 0
|
||||
#define NFS_PAGE_TAG_WRITEBACK 1
|
||||
#define NFS_PAGE_TAG_WRITEBACK 0
|
||||
|
||||
/*
|
||||
* Valid flags for a dirty buffer
|
||||
|
@ -39,7 +38,7 @@ struct nfs_page {
|
|||
struct page *wb_page; /* page to read in/write out */
|
||||
struct nfs_open_context *wb_context; /* File state context info */
|
||||
atomic_t wb_complete; /* i/os we're waiting for */
|
||||
unsigned long wb_index; /* Offset >> PAGE_CACHE_SHIFT */
|
||||
pgoff_t wb_index; /* Offset >> PAGE_CACHE_SHIFT */
|
||||
unsigned int wb_offset, /* Offset & ~PAGE_CACHE_MASK */
|
||||
wb_pgbase, /* Start of page data */
|
||||
wb_bytes; /* Length of request */
|
||||
|
@ -48,6 +47,19 @@ struct nfs_page {
|
|||
struct nfs_writeverf wb_verf; /* Commit cookie */
|
||||
};
|
||||
|
||||
struct nfs_pageio_descriptor {
|
||||
struct list_head pg_list;
|
||||
unsigned long pg_bytes_written;
|
||||
size_t pg_count;
|
||||
size_t pg_bsize;
|
||||
unsigned int pg_base;
|
||||
|
||||
struct inode *pg_inode;
|
||||
int (*pg_doio)(struct inode *, struct list_head *, unsigned int, size_t, int);
|
||||
int pg_ioflags;
|
||||
int pg_error;
|
||||
};
|
||||
|
||||
#define NFS_WBACK_BUSY(req) (test_bit(PG_BUSY,&(req)->wb_flags))
|
||||
|
||||
extern struct nfs_page *nfs_create_request(struct nfs_open_context *ctx,
|
||||
|
@ -59,13 +71,16 @@ extern void nfs_clear_request(struct nfs_page *req);
|
|||
extern void nfs_release_request(struct nfs_page *req);
|
||||
|
||||
|
||||
extern long nfs_scan_dirty(struct address_space *mapping,
|
||||
struct writeback_control *wbc,
|
||||
struct list_head *dst);
|
||||
extern int nfs_scan_list(struct nfs_inode *nfsi, struct list_head *head, struct list_head *dst,
|
||||
unsigned long idx_start, unsigned int npages);
|
||||
extern int nfs_coalesce_requests(struct list_head *, struct list_head *,
|
||||
unsigned int);
|
||||
pgoff_t idx_start, unsigned int npages);
|
||||
extern void nfs_pageio_init(struct nfs_pageio_descriptor *desc,
|
||||
struct inode *inode,
|
||||
int (*doio)(struct inode *, struct list_head *, unsigned int, size_t, int),
|
||||
size_t bsize,
|
||||
int how);
|
||||
extern int nfs_pageio_add_request(struct nfs_pageio_descriptor *,
|
||||
struct nfs_page *);
|
||||
extern void nfs_pageio_complete(struct nfs_pageio_descriptor *desc);
|
||||
extern int nfs_wait_on_request(struct nfs_page *);
|
||||
extern void nfs_unlock_request(struct nfs_page *req);
|
||||
extern int nfs_set_page_writeback_locked(struct nfs_page *req);
|
||||
|
|
|
@ -28,18 +28,18 @@ enum nubus_category {
|
|||
};
|
||||
|
||||
enum nubus_type_network {
|
||||
NUBUS_TYPE_ETHERNET = 0x0001,
|
||||
NUBUS_TYPE_RS232 = 0x0002
|
||||
NUBUS_TYPE_ETHERNET = 0x0001,
|
||||
NUBUS_TYPE_RS232 = 0x0002
|
||||
};
|
||||
|
||||
enum nubus_type_display {
|
||||
NUBUS_TYPE_VIDEO = 0x0001
|
||||
NUBUS_TYPE_VIDEO = 0x0001
|
||||
};
|
||||
|
||||
enum nubus_type_cpu {
|
||||
NUBUS_TYPE_68020 = 0x0003,
|
||||
NUBUS_TYPE_68030 = 0x0004,
|
||||
NUBUS_TYPE_68040 = 0x0005
|
||||
NUBUS_TYPE_68020 = 0x0003,
|
||||
NUBUS_TYPE_68030 = 0x0004,
|
||||
NUBUS_TYPE_68040 = 0x0005
|
||||
};
|
||||
|
||||
/* Known <Cat,Type,SW,HW> tuples: (according to TattleTech and Slots)
|
||||
|
@ -56,6 +56,7 @@ enum nubus_type_cpu {
|
|||
*
|
||||
* SONIC comm-slot/on-board and DuoDock Ethernet: <4,1,1,272>
|
||||
* SONIC LC-PDS Ethernet (Dayna, but like Apple 16-bit, sort of): <4,1,1,271>
|
||||
* Apple SONIC LC-PDS Ethernet ("Apple Ethernet LC Twisted-Pair Card"): <4,1,0,281>
|
||||
* Sonic Systems Ethernet A-Series Card: <4,1,268,256>
|
||||
* Asante MacCon NuBus-A: <4,1,260,256> (alpha-1.0,1.1 revision)
|
||||
* ROM on the above card: <2,1,0,0>
|
||||
|
@ -80,24 +81,26 @@ enum nubus_type_cpu {
|
|||
/* Add known DrSW values here */
|
||||
enum nubus_drsw {
|
||||
/* NUBUS_CAT_DISPLAY */
|
||||
NUBUS_DRSW_APPLE = 0x0001,
|
||||
NUBUS_DRSW_APPLE_HIRES = 0x0013, /* MacII HiRes card driver */
|
||||
NUBUS_DRSW_APPLE = 0x0001,
|
||||
NUBUS_DRSW_APPLE_HIRES = 0x0013, /* MacII HiRes card driver */
|
||||
|
||||
/* NUBUS_CAT_NETWORK */
|
||||
NUBUS_DRSW_CABLETRON = 0x0001,
|
||||
NUBUS_DRSW_SONIC_LC = 0x0001,
|
||||
NUBUS_DRSW_KINETICS = 0x0103,
|
||||
NUBUS_DRSW_ASANTE = 0x0104,
|
||||
NUBUS_DRSW_DAYNA = 0x010b,
|
||||
NUBUS_DRSW_FARALLON = 0x010c,
|
||||
NUBUS_DRSW_APPLE_SN = 0x010f,
|
||||
NUBUS_DRSW_DAYNA2 = 0x0115,
|
||||
NUBUS_DRSW_3COM = 0x0000,
|
||||
NUBUS_DRSW_CABLETRON = 0x0001,
|
||||
NUBUS_DRSW_SONIC_LC = 0x0001,
|
||||
NUBUS_DRSW_KINETICS = 0x0103,
|
||||
NUBUS_DRSW_ASANTE = 0x0104,
|
||||
NUBUS_DRSW_TECHWORKS = 0x0109,
|
||||
NUBUS_DRSW_DAYNA = 0x010b,
|
||||
NUBUS_DRSW_FARALLON = 0x010c,
|
||||
NUBUS_DRSW_APPLE_SN = 0x010f,
|
||||
NUBUS_DRSW_DAYNA2 = 0x0115,
|
||||
NUBUS_DRSW_FOCUS = 0x011a,
|
||||
NUBUS_DRSW_ASANTE_CS = 0x011d, /* use asante SMC9194 driver */
|
||||
NUBUS_DRSW_DAYNA_LC = 0x011e,
|
||||
NUBUS_DRSW_DAYNA_LC = 0x011e,
|
||||
|
||||
/* NUBUS_CAT_CPU */
|
||||
NUBUS_DRSW_NONE = 0x0000,
|
||||
NUBUS_DRSW_NONE = 0x0000,
|
||||
};
|
||||
|
||||
/* DrHW: Uniquely identifies the hardware interface to a board (or at
|
||||
|
@ -107,27 +110,48 @@ enum nubus_drsw {
|
|||
/* Add known DrHW values here */
|
||||
enum nubus_drhw {
|
||||
/* NUBUS_CAT_DISPLAY */
|
||||
NUBUS_DRHW_APPLE_TFB = 0x0001, /* Toby frame buffer card */
|
||||
NUBUS_DRHW_APPLE_HRVC = 0x0013, /* Mac II High Res Video card */
|
||||
NUBUS_DRHW_APPLE_RBV1 = 0x0018, /* IIci RBV video */
|
||||
NUBUS_DRHW_APPLE_MDC = 0x0019, /* Macintosh Display Card */
|
||||
NUBUS_DRHW_APPLE_SONORA = 0x0022, /* Sonora built-in video */
|
||||
NUBUS_DRHW_APPLE_JET = 0x0029, /* Jet framebuffer (DuoDock) */
|
||||
NUBUS_DRHW_APPLE_TFB = 0x0001, /* Toby frame buffer card */
|
||||
NUBUS_DRHW_APPLE_WVC = 0x0006, /* Apple Workstation Video Card */
|
||||
NUBUS_DRHW_SIGMA_CLRMAX = 0x0007, /* Sigma Design ColorMax */
|
||||
NUBUS_DRHW_APPLE_SE30 = 0x0009, /* Apple SE/30 video */
|
||||
NUBUS_DRHW_APPLE_HRVC = 0x0013, /* Mac II High-Res Video Card */
|
||||
NUBUS_DRHW_APPLE_PVC = 0x0017, /* Mac II Portrait Video Card */
|
||||
NUBUS_DRHW_APPLE_RBV1 = 0x0018, /* IIci RBV video */
|
||||
NUBUS_DRHW_APPLE_MDC = 0x0019, /* Macintosh Display Card */
|
||||
NUBUS_DRHW_APPLE_SONORA = 0x0022, /* Sonora built-in video */
|
||||
NUBUS_DRHW_APPLE_24AC = 0x002b, /* Mac 24AC Video Card */
|
||||
NUBUS_DRHW_APPLE_VALKYRIE = 0x002e,
|
||||
NUBUS_DRHW_THUNDER24 = 0x02cb, /* SuperMac Thunder/24 */
|
||||
NUBUS_DRHW_APPLE_JET = 0x0029, /* Jet framebuffer (DuoDock) */
|
||||
NUBUS_DRHW_SMAC_GFX = 0x0105, /* SuperMac GFX */
|
||||
NUBUS_DRHW_RASTER_CB264 = 0x013B, /* RasterOps ColorBoard 264 */
|
||||
NUBUS_DRHW_MICRON_XCEED = 0x0146, /* Micron Exceed color */
|
||||
NUBUS_DRHW_RDIUS_GSC = 0x0153, /* Radius GS/C */
|
||||
NUBUS_DRHW_SMAC_SPEC8 = 0x017B, /* SuperMac Spectrum/8 */
|
||||
NUBUS_DRHW_SMAC_SPEC24 = 0x017C, /* SuperMac Spectrum/24 */
|
||||
NUBUS_DRHW_RASTER_CB364 = 0x026F, /* RasterOps ColorBoard 364 */
|
||||
NUBUS_DRHW_RDIUS_DCGX = 0x027C, /* Radius DirectColor/GX */
|
||||
NUBUS_DRHW_RDIUS_PC8 = 0x0291, /* Radius PrecisionColor 8 */
|
||||
NUBUS_DRHW_LAPIS_PCS8 = 0x0292, /* Lapis ProColorServer 8 */
|
||||
NUBUS_DRHW_RASTER_24LXI = 0x02A0, /* RasterOps 8/24 XLi */
|
||||
NUBUS_DRHW_RASTER_PBPGT = 0x02A5, /* RasterOps PaintBoard Prism GT */
|
||||
NUBUS_DRHW_EMACH_FSX = 0x02AE, /* E-Machines Futura SX */
|
||||
NUBUS_DRHW_SMAC_THUND24 = 0x02CB, /* SuperMac Thunder/24 */
|
||||
NUBUS_DRHW_RDIUS_PC24XP = 0x0406, /* Radius PrecisionColor 24Xp */
|
||||
NUBUS_DRHW_RDIUS_PC24X = 0x040A, /* Radius PrecisionColor 24X */
|
||||
NUBUS_DRHW_RDIUS_PC8XJ = 0x040B, /* Radius PrecisionColor 8XJ */
|
||||
|
||||
/* NUBUS_CAT_NETWORK */
|
||||
NUBUS_DRHW_INTERLAN = 0x0100,
|
||||
NUBUS_DRHW_SMC9194 = 0x0101,
|
||||
NUBUS_DRHW_KINETICS = 0x0106,
|
||||
NUBUS_DRHW_CABLETRON = 0x0109,
|
||||
NUBUS_DRHW_ASANTE_LC = 0x010f,
|
||||
NUBUS_DRHW_SONIC = 0x0110,
|
||||
NUBUS_DRHW_SONIC_NB = 0x0118,
|
||||
NUBUS_DRHW_SONIC_LC = 0x0119,
|
||||
|
||||
/* NUBUS_CAT_COMMUNICATIONS */
|
||||
NUBUS_DRHW_DOVEFAX = 0x0100,
|
||||
NUBUS_DRHW_INTERLAN = 0x0100,
|
||||
NUBUS_DRHW_SMC9194 = 0x0101,
|
||||
NUBUS_DRHW_KINETICS = 0x0106,
|
||||
NUBUS_DRHW_CABLETRON = 0x0109,
|
||||
NUBUS_DRHW_ASANTE_LC = 0x010f,
|
||||
NUBUS_DRHW_SONIC = 0x0110,
|
||||
NUBUS_DRHW_TECHWORKS = 0x0112,
|
||||
NUBUS_DRHW_APPLE_SONIC_NB = 0x0118,
|
||||
NUBUS_DRHW_APPLE_SONIC_LC = 0x0119,
|
||||
NUBUS_DRHW_FOCUS = 0x011c,
|
||||
NUBUS_DRHW_SONNET = 0x011d,
|
||||
};
|
||||
|
||||
/* Resource IDs: These are the identifiers for the various weird and
|
||||
|
@ -153,17 +177,17 @@ enum nubus_res_id {
|
|||
|
||||
/* Category-specific resources. */
|
||||
enum nubus_board_res_id {
|
||||
NUBUS_RESID_BOARDID = 0x0020,
|
||||
NUBUS_RESID_BOARDID = 0x0020,
|
||||
NUBUS_RESID_PRAMINITDATA = 0x0021,
|
||||
NUBUS_RESID_PRIMARYINIT = 0x0022,
|
||||
NUBUS_RESID_PRIMARYINIT = 0x0022,
|
||||
NUBUS_RESID_TIMEOUTCONST = 0x0023,
|
||||
NUBUS_RESID_VENDORINFO = 0x0024,
|
||||
NUBUS_RESID_BOARDFLAGS = 0x0025,
|
||||
NUBUS_RESID_SECONDINIT = 0x0026,
|
||||
NUBUS_RESID_VENDORINFO = 0x0024,
|
||||
NUBUS_RESID_BOARDFLAGS = 0x0025,
|
||||
NUBUS_RESID_SECONDINIT = 0x0026,
|
||||
|
||||
/* Not sure why Apple put these next two in here */
|
||||
NUBUS_RESID_VIDNAMES = 0x0041,
|
||||
NUBUS_RESID_VIDMODES = 0x007e
|
||||
NUBUS_RESID_VIDNAMES = 0x0041,
|
||||
NUBUS_RESID_VIDMODES = 0x007e
|
||||
};
|
||||
|
||||
/* Fields within the vendor info directory */
|
||||
|
@ -185,13 +209,13 @@ enum nubus_cpu_res_id {
|
|||
};
|
||||
|
||||
enum nubus_display_res_id {
|
||||
NUBUS_RESID_GAMMADIR = 0x0040,
|
||||
NUBUS_RESID_FIRSTMODE = 0x0080,
|
||||
NUBUS_RESID_SECONDMODE = 0x0081,
|
||||
NUBUS_RESID_THIRDMODE = 0x0082,
|
||||
NUBUS_RESID_FOURTHMODE = 0x0083,
|
||||
NUBUS_RESID_FIFTHMODE = 0x0084,
|
||||
NUBUS_RESID_SIXTHMODE = 0x0085
|
||||
NUBUS_RESID_GAMMADIR = 0x0040,
|
||||
NUBUS_RESID_FIRSTMODE = 0x0080,
|
||||
NUBUS_RESID_SECONDMODE = 0x0081,
|
||||
NUBUS_RESID_THIRDMODE = 0x0082,
|
||||
NUBUS_RESID_FOURTHMODE = 0x0083,
|
||||
NUBUS_RESID_FIFTHMODE = 0x0084,
|
||||
NUBUS_RESID_SIXTHMODE = 0x0085
|
||||
};
|
||||
|
||||
struct nubus_dir
|
||||
|
@ -214,7 +238,7 @@ struct nubus_board {
|
|||
struct nubus_board* next;
|
||||
struct nubus_dev* first_dev;
|
||||
|
||||
/* Only 9-E actually exist, though 0-8 are also theoretically
|
||||
/* Only 9-E actually exist, though 0-8 are also theoretically
|
||||
possible, and 0 is a special case which represents the
|
||||
motherboard and onboard peripherals (Ethernet, video) */
|
||||
int slot;
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#define PAGE_FLAGS_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm_types.h>
|
||||
|
||||
/*
|
||||
* Various page->flags bits:
|
||||
|
@ -82,13 +83,11 @@
|
|||
#define PG_private 11 /* If pagecache, has fs-private data */
|
||||
|
||||
#define PG_writeback 12 /* Page is under writeback */
|
||||
#define PG_nosave 13 /* Used for system suspend/resume */
|
||||
#define PG_compound 14 /* Part of a compound page */
|
||||
#define PG_swapcache 15 /* Swap page: swp_entry_t in private */
|
||||
|
||||
#define PG_mappedtodisk 16 /* Has blocks allocated on-disk */
|
||||
#define PG_reclaim 17 /* To be reclaimed asap */
|
||||
#define PG_nosave_free 18 /* Used for system suspend/resume */
|
||||
#define PG_buddy 19 /* Page is free, on buddy lists */
|
||||
|
||||
/* PG_owner_priv_1 users should have descriptive aliases */
|
||||
|
@ -214,16 +213,6 @@ static inline void SetPageUptodate(struct page *page)
|
|||
ret; \
|
||||
})
|
||||
|
||||
#define PageNosave(page) test_bit(PG_nosave, &(page)->flags)
|
||||
#define SetPageNosave(page) set_bit(PG_nosave, &(page)->flags)
|
||||
#define TestSetPageNosave(page) test_and_set_bit(PG_nosave, &(page)->flags)
|
||||
#define ClearPageNosave(page) clear_bit(PG_nosave, &(page)->flags)
|
||||
#define TestClearPageNosave(page) test_and_clear_bit(PG_nosave, &(page)->flags)
|
||||
|
||||
#define PageNosaveFree(page) test_bit(PG_nosave_free, &(page)->flags)
|
||||
#define SetPageNosaveFree(page) set_bit(PG_nosave_free, &(page)->flags)
|
||||
#define ClearPageNosaveFree(page) clear_bit(PG_nosave_free, &(page)->flags)
|
||||
|
||||
#define PageBuddy(page) test_bit(PG_buddy, &(page)->flags)
|
||||
#define __SetPageBuddy(page) __set_bit(PG_buddy, &(page)->flags)
|
||||
#define __ClearPageBuddy(page) __clear_bit(PG_buddy, &(page)->flags)
|
||||
|
@ -241,6 +230,34 @@ static inline void SetPageUptodate(struct page *page)
|
|||
#define __SetPageCompound(page) __set_bit(PG_compound, &(page)->flags)
|
||||
#define __ClearPageCompound(page) __clear_bit(PG_compound, &(page)->flags)
|
||||
|
||||
/*
|
||||
* PG_reclaim is used in combination with PG_compound to mark the
|
||||
* head and tail of a compound page
|
||||
*
|
||||
* PG_compound & PG_reclaim => Tail page
|
||||
* PG_compound & ~PG_reclaim => Head page
|
||||
*/
|
||||
|
||||
#define PG_head_tail_mask ((1L << PG_compound) | (1L << PG_reclaim))
|
||||
|
||||
#define PageTail(page) ((page->flags & PG_head_tail_mask) \
|
||||
== PG_head_tail_mask)
|
||||
|
||||
static inline void __SetPageTail(struct page *page)
|
||||
{
|
||||
page->flags |= PG_head_tail_mask;
|
||||
}
|
||||
|
||||
static inline void __ClearPageTail(struct page *page)
|
||||
{
|
||||
page->flags &= ~PG_head_tail_mask;
|
||||
}
|
||||
|
||||
#define PageHead(page) ((page->flags & PG_head_tail_mask) \
|
||||
== (1L << PG_compound))
|
||||
#define __SetPageHead(page) __SetPageCompound(page)
|
||||
#define __ClearPageHead(page) __ClearPageCompound(page)
|
||||
|
||||
#ifdef CONFIG_SWAP
|
||||
#define PageSwapCache(page) test_bit(PG_swapcache, &(page)->flags)
|
||||
#define SetPageSwapCache(page) set_bit(PG_swapcache, &(page)->flags)
|
||||
|
|
|
@ -95,12 +95,23 @@ static inline struct page *grab_cache_page(struct address_space *mapping, unsign
|
|||
|
||||
extern struct page * grab_cache_page_nowait(struct address_space *mapping,
|
||||
unsigned long index);
|
||||
extern struct page * read_cache_page_async(struct address_space *mapping,
|
||||
unsigned long index, filler_t *filler,
|
||||
void *data);
|
||||
extern struct page * read_cache_page(struct address_space *mapping,
|
||||
unsigned long index, filler_t *filler,
|
||||
void *data);
|
||||
extern int read_cache_pages(struct address_space *mapping,
|
||||
struct list_head *pages, filler_t *filler, void *data);
|
||||
|
||||
static inline struct page *read_mapping_page_async(
|
||||
struct address_space *mapping,
|
||||
unsigned long index, void *data)
|
||||
{
|
||||
filler_t *filler = (filler_t *)mapping->a_ops->readpage;
|
||||
return read_cache_page_async(mapping, index, filler, data);
|
||||
}
|
||||
|
||||
static inline struct page *read_mapping_page(struct address_space *mapping,
|
||||
unsigned long index, void *data)
|
||||
{
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
/* associates an integer enumerator with a pattern string. */
|
||||
struct match_token {
|
||||
int token;
|
||||
char *pattern;
|
||||
const char *pattern;
|
||||
};
|
||||
|
||||
typedef struct match_token match_table_t[];
|
||||
|
@ -29,5 +29,5 @@ int match_token(char *, match_table_t table, substring_t args[]);
|
|||
int match_int(substring_t *, int *result);
|
||||
int match_octal(substring_t *, int *result);
|
||||
int match_hex(substring_t *, int *result);
|
||||
void match_strcpy(char *, substring_t *);
|
||||
char *match_strdup(substring_t *);
|
||||
void match_strcpy(char *, const substring_t *);
|
||||
char *match_strdup(const substring_t *);
|
||||
|
|
|
@ -96,6 +96,19 @@ enum pci_channel_state {
|
|||
pci_channel_io_perm_failure = (__force pci_channel_state_t) 3,
|
||||
};
|
||||
|
||||
typedef unsigned int __bitwise pcie_reset_state_t;
|
||||
|
||||
enum pcie_reset_state {
|
||||
/* Reset is NOT asserted (Use to deassert reset) */
|
||||
pcie_deassert_reset = (__force pcie_reset_state_t) 1,
|
||||
|
||||
/* Use #PERST to reset PCI-E device */
|
||||
pcie_warm_reset = (__force pcie_reset_state_t) 2,
|
||||
|
||||
/* Use PCI-E Hot Reset to reset device */
|
||||
pcie_hot_reset = (__force pcie_reset_state_t) 3
|
||||
};
|
||||
|
||||
typedef unsigned short __bitwise pci_bus_flags_t;
|
||||
enum pci_bus_flags {
|
||||
PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1,
|
||||
|
@ -176,10 +189,12 @@ struct pci_dev {
|
|||
int rom_attr_enabled; /* has display of the rom attribute been enabled? */
|
||||
struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE]; /* sysfs file for resources */
|
||||
#ifdef CONFIG_PCI_MSI
|
||||
unsigned int first_msi_irq;
|
||||
struct list_head msi_list;
|
||||
#endif
|
||||
};
|
||||
|
||||
extern struct pci_dev *alloc_pci_dev(void);
|
||||
|
||||
#define pci_dev_g(n) list_entry(n, struct pci_dev, global_list)
|
||||
#define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list)
|
||||
#define to_pci_dev(n) container_of(n, struct pci_dev, dev)
|
||||
|
@ -392,12 +407,6 @@ struct pci_driver {
|
|||
.vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \
|
||||
.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
|
||||
|
||||
/*
|
||||
* pci_module_init is obsolete, this stays here till we fix up all usages of it
|
||||
* in the tree.
|
||||
*/
|
||||
#define pci_module_init pci_register_driver
|
||||
|
||||
/**
|
||||
* PCI_VDEVICE - macro used to describe a specific pci device in short form
|
||||
* @vend: the vendor name
|
||||
|
@ -532,6 +541,7 @@ static inline int pci_is_managed(struct pci_dev *pdev)
|
|||
|
||||
void pci_disable_device(struct pci_dev *dev);
|
||||
void pci_set_master(struct pci_dev *dev);
|
||||
int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state);
|
||||
#define HAVE_PCI_SET_MWI
|
||||
int __must_check pci_set_mwi(struct pci_dev *dev);
|
||||
void pci_clear_mwi(struct pci_dev *dev);
|
||||
|
@ -730,6 +740,9 @@ static inline int pci_set_power_state(struct pci_dev *dev, pci_power_t state) {
|
|||
static inline pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state) { return PCI_D0; }
|
||||
static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable) { return 0; }
|
||||
|
||||
static inline int pci_request_regions(struct pci_dev *dev, const char *res_name) { return -EIO; }
|
||||
static inline void pci_release_regions(struct pci_dev *dev) { }
|
||||
|
||||
#define pci_dma_burst_advice(pdev, strat, strategy_parameter) do { } while (0)
|
||||
|
||||
static inline void pci_block_user_cfg_access(struct pci_dev *dev) { }
|
||||
|
|
|
@ -174,7 +174,7 @@ extern int pci_hp_register (struct hotplug_slot *slot);
|
|||
extern int pci_hp_deregister (struct hotplug_slot *slot);
|
||||
extern int __must_check pci_hp_change_slot_info (struct hotplug_slot *slot,
|
||||
struct hotplug_slot_info *info);
|
||||
extern struct subsystem pci_hotplug_slots_subsys;
|
||||
extern struct kset pci_hotplug_slots_subsys;
|
||||
|
||||
/* PCI Setting Record (Type 0) */
|
||||
struct hpp_type0 {
|
||||
|
|
|
@ -1213,11 +1213,13 @@
|
|||
#define PCI_DEVICE_ID_NVIDIA_NVENET_16 0x03E5
|
||||
#define PCI_DEVICE_ID_NVIDIA_NVENET_17 0x03E6
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA 0x03E7
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SMBUS 0x03EB
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE 0x03EC
|
||||
#define PCI_DEVICE_ID_NVIDIA_NVENET_18 0x03EE
|
||||
#define PCI_DEVICE_ID_NVIDIA_NVENET_19 0x03EF
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_SMBUS 0x0446
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE 0x0448
|
||||
#define PCI_DEVICE_ID_NVIDIA_NVENET_20 0x0450
|
||||
#define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451
|
||||
|
@ -1924,6 +1926,7 @@
|
|||
#define PCI_DEVICE_ID_TIGON3_5752 0x1600
|
||||
#define PCI_DEVICE_ID_TIGON3_5752M 0x1601
|
||||
#define PCI_DEVICE_ID_NX2_5709 0x1639
|
||||
#define PCI_DEVICE_ID_NX2_5709S 0x163a
|
||||
#define PCI_DEVICE_ID_TIGON3_5700 0x1644
|
||||
#define PCI_DEVICE_ID_TIGON3_5701 0x1645
|
||||
#define PCI_DEVICE_ID_TIGON3_5702 0x1646
|
||||
|
|
|
@ -11,9 +11,16 @@
|
|||
|
||||
/* Enough to cover all DEFINE_PER_CPUs in kernel, including modules. */
|
||||
#ifndef PERCPU_ENOUGH_ROOM
|
||||
#define PERCPU_ENOUGH_ROOM 32768
|
||||
#ifdef CONFIG_MODULES
|
||||
#define PERCPU_MODULE_RESERVE 8192
|
||||
#else
|
||||
#define PERCPU_MODULE_RESERVE 0
|
||||
#endif
|
||||
|
||||
#define PERCPU_ENOUGH_ROOM \
|
||||
(__per_cpu_end - __per_cpu_start + PERCPU_MODULE_RESERVE)
|
||||
#endif /* PERCPU_ENOUGH_ROOM */
|
||||
|
||||
/*
|
||||
* Must be an lvalue. Since @var must be a simple identifier,
|
||||
* we force a syntax error here if it isn't.
|
||||
|
|
|
@ -18,6 +18,9 @@
|
|||
#define RED_INACTIVE 0x5A2CF071UL /* when obj is inactive */
|
||||
#define RED_ACTIVE 0x170FC2A5UL /* when obj is active */
|
||||
|
||||
#define SLUB_RED_INACTIVE 0xbb
|
||||
#define SLUB_RED_ACTIVE 0xcc
|
||||
|
||||
/* ...and for poisoning */
|
||||
#define POISON_INUSE 0x5a /* for use-uninitialised poisoning */
|
||||
#define POISON_FREE 0x6b /* for use-after-free poisoning */
|
||||
|
@ -26,9 +29,6 @@
|
|||
/********** arch/$ARCH/mm/init.c **********/
|
||||
#define POISON_FREE_INITMEM 0xcc
|
||||
|
||||
/********** arch/x86_64/mm/init.c **********/
|
||||
#define POISON_FREE_INITDATA 0xba
|
||||
|
||||
/********** arch/ia64/hp/common/sba_iommu.c **********/
|
||||
/*
|
||||
* arch/ia64/hp/common/sba_iommu.c uses a 16-byte poison string with a
|
||||
|
|
|
@ -104,6 +104,7 @@ int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir);
|
|||
unsigned long task_vsize(struct mm_struct *);
|
||||
int task_statm(struct mm_struct *, int *, int *, int *, int *);
|
||||
char *task_mem(struct mm_struct *, char *);
|
||||
void clear_refs_smap(struct mm_struct *mm);
|
||||
|
||||
extern struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode,
|
||||
struct proc_dir_entry *parent);
|
||||
|
|
94
include/linux/quicklist.h
Normal file
94
include/linux/quicklist.h
Normal file
|
@ -0,0 +1,94 @@
|
|||
#ifndef LINUX_QUICKLIST_H
|
||||
#define LINUX_QUICKLIST_H
|
||||
/*
|
||||
* Fast allocations and disposal of pages. Pages must be in the condition
|
||||
* as needed after allocation when they are freed. Per cpu lists of pages
|
||||
* are kept that only contain node local pages.
|
||||
*
|
||||
* (C) 2007, SGI. Christoph Lameter <clameter@sgi.com>
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/percpu.h>
|
||||
|
||||
#ifdef CONFIG_QUICKLIST
|
||||
|
||||
struct quicklist {
|
||||
void *page;
|
||||
int nr_pages;
|
||||
};
|
||||
|
||||
DECLARE_PER_CPU(struct quicklist, quicklist)[CONFIG_NR_QUICK];
|
||||
|
||||
/*
|
||||
* The two key functions quicklist_alloc and quicklist_free are inline so
|
||||
* that they may be custom compiled for the platform.
|
||||
* Specifying a NULL ctor can remove constructor support. Specifying
|
||||
* a constant quicklist allows the determination of the exact address
|
||||
* in the per cpu area.
|
||||
*
|
||||
* The fast patch in quicklist_alloc touched only a per cpu cacheline and
|
||||
* the first cacheline of the page itself. There is minmal overhead involved.
|
||||
*/
|
||||
static inline void *quicklist_alloc(int nr, gfp_t flags, void (*ctor)(void *))
|
||||
{
|
||||
struct quicklist *q;
|
||||
void **p = NULL;
|
||||
|
||||
q =&get_cpu_var(quicklist)[nr];
|
||||
p = q->page;
|
||||
if (likely(p)) {
|
||||
q->page = p[0];
|
||||
p[0] = NULL;
|
||||
q->nr_pages--;
|
||||
}
|
||||
put_cpu_var(quicklist);
|
||||
if (likely(p))
|
||||
return p;
|
||||
|
||||
p = (void *)__get_free_page(flags | __GFP_ZERO);
|
||||
if (ctor && p)
|
||||
ctor(p);
|
||||
return p;
|
||||
}
|
||||
|
||||
static inline void __quicklist_free(int nr, void (*dtor)(void *), void *p,
|
||||
struct page *page)
|
||||
{
|
||||
struct quicklist *q;
|
||||
int nid = page_to_nid(page);
|
||||
|
||||
if (unlikely(nid != numa_node_id())) {
|
||||
if (dtor)
|
||||
dtor(p);
|
||||
__free_page(page);
|
||||
return;
|
||||
}
|
||||
|
||||
q = &get_cpu_var(quicklist)[nr];
|
||||
*(void **)p = q->page;
|
||||
q->page = p;
|
||||
q->nr_pages++;
|
||||
put_cpu_var(quicklist);
|
||||
}
|
||||
|
||||
static inline void quicklist_free(int nr, void (*dtor)(void *), void *pp)
|
||||
{
|
||||
__quicklist_free(nr, dtor, pp, virt_to_page(pp));
|
||||
}
|
||||
|
||||
static inline void quicklist_free_page(int nr, void (*dtor)(void *),
|
||||
struct page *page)
|
||||
{
|
||||
__quicklist_free(nr, dtor, page_address(page), page);
|
||||
}
|
||||
|
||||
void quicklist_trim(int nr, void (*dtor)(void *),
|
||||
unsigned long min_pages, unsigned long max_free);
|
||||
|
||||
unsigned long quicklist_total_size(void);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* LINUX_QUICKLIST_H */
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
#ifndef _LINUX_REBOOT_FIXUPS_H
|
||||
#define _LINUX_REBOOT_FIXUPS_H
|
||||
|
||||
#ifdef CONFIG_X86_REBOOTFIXUPS
|
||||
extern void mach_reboot_fixups(void);
|
||||
#else
|
||||
#define mach_reboot_fixups() ((void)(0))
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_REBOOT_FIXUPS_H */
|
89
include/linux/rfkill.h
Normal file
89
include/linux/rfkill.h
Normal file
|
@ -0,0 +1,89 @@
|
|||
#ifndef __RFKILL_H
|
||||
#define __RFKILL_H
|
||||
|
||||
/*
|
||||
* Copyright (C) 2006 Ivo van Doorn
|
||||
* Copyright (C) 2007 Dmitry Torokhov
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/device.h>
|
||||
|
||||
/**
|
||||
* enum rfkill_type - type of rfkill switch.
|
||||
* RFKILL_TYPE_WLAN: switch is no a Wireless network devices.
|
||||
* RFKILL_TYPE_BlUETOOTH: switch is on a bluetooth device.
|
||||
* RFKILL_TYPE_IRDA: switch is on an infrared devices.
|
||||
*/
|
||||
enum rfkill_type {
|
||||
RFKILL_TYPE_WLAN = 0,
|
||||
RFKILL_TYPE_BLUETOOTH = 1,
|
||||
RFKILL_TYPE_IRDA = 2,
|
||||
RFKILL_TYPE_MAX = 3,
|
||||
};
|
||||
|
||||
enum rfkill_state {
|
||||
RFKILL_STATE_OFF = 0,
|
||||
RFKILL_STATE_ON = 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rfkill - rfkill control structure.
|
||||
* @name: Name of the switch.
|
||||
* @type: Radio type which the button controls, the value stored
|
||||
* here should be a value from enum rfkill_type.
|
||||
* @state: State of the switch (on/off).
|
||||
* @user_claim: Set when the switch is controlled exlusively by userspace.
|
||||
* @mutex: Guards switch state transitions
|
||||
* @data: Pointer to the RF button drivers private data which will be
|
||||
* passed along when toggling radio state.
|
||||
* @toggle_radio(): Mandatory handler to control state of the radio.
|
||||
* @dev: Device structure integrating the switch into device tree.
|
||||
* @node: Used to place switch into list of all switches known to the
|
||||
* the system.
|
||||
*
|
||||
* This structure represents a RF switch located on a network device.
|
||||
*/
|
||||
struct rfkill {
|
||||
char *name;
|
||||
enum rfkill_type type;
|
||||
|
||||
enum rfkill_state state;
|
||||
bool user_claim;
|
||||
|
||||
struct mutex mutex;
|
||||
|
||||
void *data;
|
||||
int (*toggle_radio)(void *data, enum rfkill_state state);
|
||||
|
||||
struct device dev;
|
||||
struct list_head node;
|
||||
};
|
||||
#define to_rfkill(d) container_of(d, struct rfkill, dev)
|
||||
|
||||
struct rfkill *rfkill_allocate(struct device *parent, enum rfkill_type type);
|
||||
void rfkill_free(struct rfkill *rfkill);
|
||||
int rfkill_register(struct rfkill *rfkill);
|
||||
void rfkill_unregister(struct rfkill *rfkill);
|
||||
|
||||
void rfkill_switch_all(enum rfkill_type type, enum rfkill_state state);
|
||||
|
||||
#endif /* RFKILL_H */
|
|
@ -39,7 +39,8 @@
|
|||
#define PORT_RSA 13
|
||||
#define PORT_NS16550A 14
|
||||
#define PORT_XSCALE 15
|
||||
#define PORT_MAX_8250 15 /* max port ID */
|
||||
#define PORT_RM9000 16 /* PMC-Sierra RM9xxx internal UART */
|
||||
#define PORT_MAX_8250 16 /* max port ID */
|
||||
|
||||
/*
|
||||
* ARM specific type numbers. These are not currently guaranteed
|
||||
|
@ -135,6 +136,9 @@
|
|||
/* Xilinx uartlite */
|
||||
#define PORT_UARTLITE 74
|
||||
|
||||
/* Blackfin bf5xx */
|
||||
#define PORT_BFIN 75
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/compiler.h>
|
||||
|
@ -230,6 +234,8 @@ struct uart_port {
|
|||
#define UPIO_MEM32 (3)
|
||||
#define UPIO_AU (4) /* Au1x00 type IO */
|
||||
#define UPIO_TSI (5) /* Tsi108/109 type IO */
|
||||
#define UPIO_DWAPB (6) /* DesignWare APB UART */
|
||||
#define UPIO_RM9000 (7) /* RM9000 type IO */
|
||||
|
||||
unsigned int read_status_mask; /* driver specific */
|
||||
unsigned int ignore_status_mask; /* driver specific */
|
||||
|
@ -260,6 +266,7 @@ struct uart_port {
|
|||
#define UPF_CONS_FLOW ((__force upf_t) (1 << 23))
|
||||
#define UPF_SHARE_IRQ ((__force upf_t) (1 << 24))
|
||||
#define UPF_BOOT_AUTOCONF ((__force upf_t) (1 << 28))
|
||||
#define UPF_FIXED_PORT ((__force upf_t) (1 << 29))
|
||||
#define UPF_DEAD ((__force upf_t) (1 << 30))
|
||||
#define UPF_IOREMAP ((__force upf_t) (1 << 31))
|
||||
|
||||
|
@ -276,6 +283,7 @@ struct uart_port {
|
|||
struct device *dev; /* parent device */
|
||||
unsigned char hub6; /* this should be in the 8250 driver */
|
||||
unsigned char unused[3];
|
||||
void *private_data; /* generic platform data pointer */
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -38,6 +38,8 @@
|
|||
#define UART_IIR_RDI 0x04 /* Receiver data interrupt */
|
||||
#define UART_IIR_RLSI 0x06 /* Receiver line status interrupt */
|
||||
|
||||
#define UART_IIR_BUSY 0x07 /* DesignWare APB Busy Detect */
|
||||
|
||||
#define UART_FCR 2 /* Out: FIFO Control Register */
|
||||
#define UART_FCR_ENABLE_FIFO 0x01 /* Enable the FIFO */
|
||||
#define UART_FCR_CLEAR_RCVR 0x02 /* Clear the RCVR FIFO */
|
||||
|
|
|
@ -197,7 +197,7 @@ typedef unsigned char *sk_buff_data_t;
|
|||
* @tstamp: Time we arrived
|
||||
* @dev: Device we arrived on/are leaving by
|
||||
* @iif: ifindex of device we arrived on
|
||||
* @h: Transport layer header
|
||||
* @transport_header: Transport layer header
|
||||
* @network_header: Network layer header
|
||||
* @mac_header: Link layer header
|
||||
* @dst: destination entry
|
||||
|
|
|
@ -21,28 +21,25 @@ typedef struct kmem_cache kmem_cache_t __deprecated;
|
|||
* The ones marked DEBUG are only valid if CONFIG_SLAB_DEBUG is set.
|
||||
*/
|
||||
#define SLAB_DEBUG_FREE 0x00000100UL /* DEBUG: Perform (expensive) checks on free */
|
||||
#define SLAB_DEBUG_INITIAL 0x00000200UL /* DEBUG: Call constructor (as verifier) */
|
||||
#define SLAB_RED_ZONE 0x00000400UL /* DEBUG: Red zone objs in a cache */
|
||||
#define SLAB_POISON 0x00000800UL /* DEBUG: Poison objects */
|
||||
#define SLAB_HWCACHE_ALIGN 0x00002000UL /* Align objs on cache lines */
|
||||
#define SLAB_CACHE_DMA 0x00004000UL /* Use GFP_DMA memory */
|
||||
#define SLAB_MUST_HWCACHE_ALIGN 0x00008000UL /* Force alignment even if debuggin is active */
|
||||
#define SLAB_STORE_USER 0x00010000UL /* DEBUG: Store the last owner for bug hunting */
|
||||
#define SLAB_RECLAIM_ACCOUNT 0x00020000UL /* Objects are reclaimable */
|
||||
#define SLAB_PANIC 0x00040000UL /* Panic if kmem_cache_create() fails */
|
||||
#define SLAB_DESTROY_BY_RCU 0x00080000UL /* Defer freeing slabs to RCU */
|
||||
#define SLAB_MEM_SPREAD 0x00100000UL /* Spread some memory over cpuset */
|
||||
#define SLAB_TRACE 0x00200000UL /* Trace allocations and frees */
|
||||
|
||||
/* Flags passed to a constructor functions */
|
||||
#define SLAB_CTOR_CONSTRUCTOR 0x001UL /* If not set, then deconstructor */
|
||||
#define SLAB_CTOR_ATOMIC 0x002UL /* Tell constructor it can't sleep */
|
||||
#define SLAB_CTOR_VERIFY 0x004UL /* Tell constructor it's a verify call */
|
||||
|
||||
/*
|
||||
* struct kmem_cache related prototypes
|
||||
*/
|
||||
void __init kmem_cache_init(void);
|
||||
extern int slab_is_available(void);
|
||||
int slab_is_available(void);
|
||||
|
||||
struct kmem_cache *kmem_cache_create(const char *, size_t, size_t,
|
||||
unsigned long,
|
||||
|
@ -57,6 +54,18 @@ unsigned int kmem_cache_size(struct kmem_cache *);
|
|||
const char *kmem_cache_name(struct kmem_cache *);
|
||||
int kmem_ptr_validate(struct kmem_cache *cachep, const void *ptr);
|
||||
|
||||
/*
|
||||
* Please use this macro to create slab caches. Simply specify the
|
||||
* name of the structure and maybe some flags that are listed above.
|
||||
*
|
||||
* The alignment of the struct determines object alignment. If you
|
||||
* f.e. add ____cacheline_aligned_in_smp to the struct declaration
|
||||
* then the objects will be properly aligned in SMP configurations.
|
||||
*/
|
||||
#define KMEM_CACHE(__struct, __flags) kmem_cache_create(#__struct,\
|
||||
sizeof(struct __struct), __alignof__(struct __struct),\
|
||||
(__flags), NULL, NULL)
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
extern void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node);
|
||||
#else
|
||||
|
@ -72,8 +81,9 @@ static inline void *kmem_cache_alloc_node(struct kmem_cache *cachep,
|
|||
*/
|
||||
void *__kmalloc(size_t, gfp_t);
|
||||
void *__kzalloc(size_t, gfp_t);
|
||||
void * __must_check krealloc(const void *, size_t, gfp_t);
|
||||
void kfree(const void *);
|
||||
unsigned int ksize(const void *);
|
||||
size_t ksize(const void *);
|
||||
|
||||
/**
|
||||
* kcalloc - allocate memory for an array. The memory is set to zero.
|
||||
|
@ -94,9 +104,14 @@ static inline void *kcalloc(size_t n, size_t size, gfp_t flags)
|
|||
* the appropriate general cache at compile time.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_SLAB
|
||||
#include <linux/slab_def.h>
|
||||
#if defined(CONFIG_SLAB) || defined(CONFIG_SLUB)
|
||||
#ifdef CONFIG_SLUB
|
||||
#include <linux/slub_def.h>
|
||||
#else
|
||||
#include <linux/slab_def.h>
|
||||
#endif /* !CONFIG_SLUB */
|
||||
#else
|
||||
|
||||
/*
|
||||
* Fallback definitions for an allocator not wanting to provide
|
||||
* its own optimized kmalloc definitions (like SLOB).
|
||||
|
@ -183,7 +198,7 @@ static inline void *__kmalloc_node(size_t size, gfp_t flags, int node)
|
|||
* allocator where we care about the real place the memory allocation
|
||||
* request comes from.
|
||||
*/
|
||||
#ifdef CONFIG_DEBUG_SLAB
|
||||
#if defined(CONFIG_DEBUG_SLAB) || defined(CONFIG_SLUB)
|
||||
extern void *__kmalloc_track_caller(size_t, gfp_t, void*);
|
||||
#define kmalloc_track_caller(size, flags) \
|
||||
__kmalloc_track_caller(size, flags, __builtin_return_address(0))
|
||||
|
@ -201,7 +216,7 @@ extern void *__kmalloc_track_caller(size_t, gfp_t, void*);
|
|||
* standard allocator where we care about the real place the memory
|
||||
* allocation request comes from.
|
||||
*/
|
||||
#ifdef CONFIG_DEBUG_SLAB
|
||||
#if defined(CONFIG_DEBUG_SLAB) || defined(CONFIG_SLUB)
|
||||
extern void *__kmalloc_node_track_caller(size_t, gfp_t, int, void *);
|
||||
#define kmalloc_node_track_caller(size, flags, node) \
|
||||
__kmalloc_node_track_caller(size, flags, node, \
|
||||
|
@ -218,6 +233,9 @@ extern void *__kmalloc_node_track_caller(size_t, gfp_t, int, void *);
|
|||
|
||||
#endif /* DEBUG_SLAB */
|
||||
|
||||
extern const struct seq_operations slabinfo_op;
|
||||
ssize_t slabinfo_write(struct file *, const char __user *, size_t, loff_t *);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_SLAB_H */
|
||||
|
||||
|
|
206
include/linux/slub_def.h
Normal file
206
include/linux/slub_def.h
Normal file
|
@ -0,0 +1,206 @@
|
|||
#ifndef _LINUX_SLUB_DEF_H
|
||||
#define _LINUX_SLUB_DEF_H
|
||||
|
||||
/*
|
||||
* SLUB : A Slab allocator without object queues.
|
||||
*
|
||||
* (C) 2007 SGI, Christoph Lameter <clameter@sgi.com>
|
||||
*/
|
||||
#include <linux/types.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/kobject.h>
|
||||
|
||||
struct kmem_cache_node {
|
||||
spinlock_t list_lock; /* Protect partial list and nr_partial */
|
||||
unsigned long nr_partial;
|
||||
atomic_long_t nr_slabs;
|
||||
struct list_head partial;
|
||||
struct list_head full;
|
||||
};
|
||||
|
||||
/*
|
||||
* Slab cache management.
|
||||
*/
|
||||
struct kmem_cache {
|
||||
/* Used for retriving partial slabs etc */
|
||||
unsigned long flags;
|
||||
int size; /* The size of an object including meta data */
|
||||
int objsize; /* The size of an object without meta data */
|
||||
int offset; /* Free pointer offset. */
|
||||
unsigned int order;
|
||||
|
||||
/*
|
||||
* Avoid an extra cache line for UP, SMP and for the node local to
|
||||
* struct kmem_cache.
|
||||
*/
|
||||
struct kmem_cache_node local_node;
|
||||
|
||||
/* Allocation and freeing of slabs */
|
||||
int objects; /* Number of objects in slab */
|
||||
int refcount; /* Refcount for slab cache destroy */
|
||||
void (*ctor)(void *, struct kmem_cache *, unsigned long);
|
||||
void (*dtor)(void *, struct kmem_cache *, unsigned long);
|
||||
int inuse; /* Offset to metadata */
|
||||
int align; /* Alignment */
|
||||
const char *name; /* Name (only for display!) */
|
||||
struct list_head list; /* List of slab caches */
|
||||
struct kobject kobj; /* For sysfs */
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
int defrag_ratio;
|
||||
struct kmem_cache_node *node[MAX_NUMNODES];
|
||||
#endif
|
||||
struct page *cpu_slab[NR_CPUS];
|
||||
};
|
||||
|
||||
/*
|
||||
* Kmalloc subsystem.
|
||||
*/
|
||||
#define KMALLOC_SHIFT_LOW 3
|
||||
|
||||
#ifdef CONFIG_LARGE_ALLOCS
|
||||
#define KMALLOC_SHIFT_HIGH 25
|
||||
#else
|
||||
#if !defined(CONFIG_MMU) || NR_CPUS > 512 || MAX_NUMNODES > 256
|
||||
#define KMALLOC_SHIFT_HIGH 20
|
||||
#else
|
||||
#define KMALLOC_SHIFT_HIGH 18
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We keep the general caches in an array of slab caches that are used for
|
||||
* 2^x bytes of allocations.
|
||||
*/
|
||||
extern struct kmem_cache kmalloc_caches[KMALLOC_SHIFT_HIGH + 1];
|
||||
|
||||
/*
|
||||
* Sorry that the following has to be that ugly but some versions of GCC
|
||||
* have trouble with constant propagation and loops.
|
||||
*/
|
||||
static inline int kmalloc_index(int size)
|
||||
{
|
||||
/*
|
||||
* We should return 0 if size == 0 but we use the smallest object
|
||||
* here for SLAB legacy reasons.
|
||||
*/
|
||||
WARN_ON_ONCE(size == 0);
|
||||
|
||||
if (size > 64 && size <= 96)
|
||||
return 1;
|
||||
if (size > 128 && size <= 192)
|
||||
return 2;
|
||||
if (size <= 8) return 3;
|
||||
if (size <= 16) return 4;
|
||||
if (size <= 32) return 5;
|
||||
if (size <= 64) return 6;
|
||||
if (size <= 128) return 7;
|
||||
if (size <= 256) return 8;
|
||||
if (size <= 512) return 9;
|
||||
if (size <= 1024) return 10;
|
||||
if (size <= 2 * 1024) return 11;
|
||||
if (size <= 4 * 1024) return 12;
|
||||
if (size <= 8 * 1024) return 13;
|
||||
if (size <= 16 * 1024) return 14;
|
||||
if (size <= 32 * 1024) return 15;
|
||||
if (size <= 64 * 1024) return 16;
|
||||
if (size <= 128 * 1024) return 17;
|
||||
if (size <= 256 * 1024) return 18;
|
||||
#if KMALLOC_SHIFT_HIGH > 18
|
||||
if (size <= 512 * 1024) return 19;
|
||||
if (size <= 1024 * 1024) return 20;
|
||||
#endif
|
||||
#if KMALLOC_SHIFT_HIGH > 20
|
||||
if (size <= 2 * 1024 * 1024) return 21;
|
||||
if (size <= 4 * 1024 * 1024) return 22;
|
||||
if (size <= 8 * 1024 * 1024) return 23;
|
||||
if (size <= 16 * 1024 * 1024) return 24;
|
||||
if (size <= 32 * 1024 * 1024) return 25;
|
||||
#endif
|
||||
return -1;
|
||||
|
||||
/*
|
||||
* What we really wanted to do and cannot do because of compiler issues is:
|
||||
* int i;
|
||||
* for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++)
|
||||
* if (size <= (1 << i))
|
||||
* return i;
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
* Find the slab cache for a given combination of allocation flags and size.
|
||||
*
|
||||
* This ought to end up with a global pointer to the right cache
|
||||
* in kmalloc_caches.
|
||||
*/
|
||||
static inline struct kmem_cache *kmalloc_slab(size_t size)
|
||||
{
|
||||
int index = kmalloc_index(size);
|
||||
|
||||
if (index == 0)
|
||||
return NULL;
|
||||
|
||||
if (index < 0) {
|
||||
/*
|
||||
* Generate a link failure. Would be great if we could
|
||||
* do something to stop the compile here.
|
||||
*/
|
||||
extern void __kmalloc_size_too_large(void);
|
||||
__kmalloc_size_too_large();
|
||||
}
|
||||
return &kmalloc_caches[index];
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ZONE_DMA
|
||||
#define SLUB_DMA __GFP_DMA
|
||||
#else
|
||||
/* Disable DMA functionality */
|
||||
#define SLUB_DMA 0
|
||||
#endif
|
||||
|
||||
static inline void *kmalloc(size_t size, gfp_t flags)
|
||||
{
|
||||
if (__builtin_constant_p(size) && !(flags & SLUB_DMA)) {
|
||||
struct kmem_cache *s = kmalloc_slab(size);
|
||||
|
||||
if (!s)
|
||||
return NULL;
|
||||
|
||||
return kmem_cache_alloc(s, flags);
|
||||
} else
|
||||
return __kmalloc(size, flags);
|
||||
}
|
||||
|
||||
static inline void *kzalloc(size_t size, gfp_t flags)
|
||||
{
|
||||
if (__builtin_constant_p(size) && !(flags & SLUB_DMA)) {
|
||||
struct kmem_cache *s = kmalloc_slab(size);
|
||||
|
||||
if (!s)
|
||||
return NULL;
|
||||
|
||||
return kmem_cache_zalloc(s, flags);
|
||||
} else
|
||||
return __kzalloc(size, flags);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
extern void *__kmalloc_node(size_t size, gfp_t flags, int node);
|
||||
|
||||
static inline void *kmalloc_node(size_t size, gfp_t flags, int node)
|
||||
{
|
||||
if (__builtin_constant_p(size) && !(flags & SLUB_DMA)) {
|
||||
struct kmem_cache *s = kmalloc_slab(size);
|
||||
|
||||
if (!s)
|
||||
return NULL;
|
||||
|
||||
return kmem_cache_alloc_node(s, flags, node);
|
||||
} else
|
||||
return __kmalloc_node(size, flags, node);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_SLUB_DEF_H */
|
24
include/linux/spi/ad7877.h
Normal file
24
include/linux/spi/ad7877.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* linux/spi/ad7877.h */
|
||||
|
||||
/* Touchscreen characteristics vary between boards and models. The
|
||||
* platform_data for the device's "struct device" holds this information.
|
||||
*
|
||||
* It's OK if the min/max values are zero.
|
||||
*/
|
||||
struct ad7877_platform_data {
|
||||
u16 model; /* 7877 */
|
||||
u16 vref_delay_usecs; /* 0 for external vref; etc */
|
||||
u16 x_plate_ohms;
|
||||
u16 y_plate_ohms;
|
||||
|
||||
u16 x_min, x_max;
|
||||
u16 y_min, y_max;
|
||||
u16 pressure_min, pressure_max;
|
||||
|
||||
u8 stopacq_polarity; /* 1 = Active HIGH, 0 = Active LOW */
|
||||
u8 first_conversion_delay; /* 0 = 0.5us, 1 = 128us, 2 = 1ms, 3 = 8ms */
|
||||
u8 acquisition_time; /* 0 = 2us, 1 = 4us, 2 = 8us, 3 = 16us */
|
||||
u8 averaging; /* 0 = 1, 1 = 4, 2 = 8, 3 = 16 */
|
||||
u8 pen_down_acc_interval; /* 0 = covert once, 1 = every 0.5 ms,
|
||||
2 = ever 1 ms, 3 = every 8 ms,*/
|
||||
};
|
|
@ -84,7 +84,8 @@ struct rpc_procinfo {
|
|||
u32 p_proc; /* RPC procedure number */
|
||||
kxdrproc_t p_encode; /* XDR encode function */
|
||||
kxdrproc_t p_decode; /* XDR decode function */
|
||||
unsigned int p_bufsiz; /* req. buffer size */
|
||||
unsigned int p_arglen; /* argument hdr length (u32) */
|
||||
unsigned int p_replen; /* reply hdr length (u32) */
|
||||
unsigned int p_count; /* call count */
|
||||
unsigned int p_timer; /* Which RTT timer to use */
|
||||
u32 p_statidx; /* Which procedure to account */
|
||||
|
@ -121,8 +122,8 @@ struct rpc_clnt *rpc_clone_client(struct rpc_clnt *);
|
|||
int rpc_shutdown_client(struct rpc_clnt *);
|
||||
int rpc_destroy_client(struct rpc_clnt *);
|
||||
void rpc_release_client(struct rpc_clnt *);
|
||||
void rpc_getport(struct rpc_task *);
|
||||
int rpc_register(u32, u32, int, unsigned short, int *);
|
||||
int rpcb_register(u32, u32, int, unsigned short, int *);
|
||||
void rpcb_getport(struct rpc_task *);
|
||||
|
||||
void rpc_call_setup(struct rpc_task *, struct rpc_message *, int);
|
||||
|
||||
|
@ -144,7 +145,7 @@ char * rpc_peeraddr2str(struct rpc_clnt *, enum rpc_display_format_t);
|
|||
/*
|
||||
* Helper function for NFSroot support
|
||||
*/
|
||||
int rpc_getport_external(struct sockaddr_in *, __u32, __u32, int);
|
||||
int rpcb_getport_external(struct sockaddr_in *, __u32, __u32, int);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_SUNRPC_CLNT_H */
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#define RPCDBG_DEBUG 0x0004
|
||||
#define RPCDBG_NFS 0x0008
|
||||
#define RPCDBG_AUTH 0x0010
|
||||
#define RPCDBG_PMAP 0x0020
|
||||
#define RPCDBG_BIND 0x0020
|
||||
#define RPCDBG_SCHED 0x0040
|
||||
#define RPCDBG_TRANS 0x0080
|
||||
#define RPCDBG_SVCSOCK 0x0100
|
||||
|
|
|
@ -78,10 +78,6 @@ enum rpc_auth_stat {
|
|||
RPCSEC_GSS_CTXPROBLEM = 14
|
||||
};
|
||||
|
||||
#define RPC_PMAP_PROGRAM 100000
|
||||
#define RPC_PMAP_VERSION 2
|
||||
#define RPC_PMAP_PORT 111
|
||||
|
||||
#define RPC_MAXNETNAMELEN 256
|
||||
|
||||
/*
|
||||
|
|
|
@ -264,7 +264,7 @@ struct rpc_task *rpc_wake_up_next(struct rpc_wait_queue *);
|
|||
void rpc_wake_up_status(struct rpc_wait_queue *, int);
|
||||
void rpc_delay(struct rpc_task *, unsigned long);
|
||||
void * rpc_malloc(struct rpc_task *, size_t);
|
||||
void rpc_free(struct rpc_task *);
|
||||
void rpc_free(void *);
|
||||
int rpciod_up(void);
|
||||
void rpciod_down(void);
|
||||
int __rpc_wait_for_completion_task(struct rpc_task *task, int (*)(void *));
|
||||
|
|
|
@ -84,7 +84,9 @@ struct rpc_rqst {
|
|||
struct list_head rq_list;
|
||||
|
||||
__u32 * rq_buffer; /* XDR encode buffer */
|
||||
size_t rq_bufsize;
|
||||
size_t rq_bufsize,
|
||||
rq_callsize,
|
||||
rq_rcvsize;
|
||||
|
||||
struct xdr_buf rq_private_buf; /* The receive buffer
|
||||
* used in the softirq.
|
||||
|
@ -112,7 +114,7 @@ struct rpc_xprt_ops {
|
|||
void (*set_port)(struct rpc_xprt *xprt, unsigned short port);
|
||||
void (*connect)(struct rpc_task *task);
|
||||
void * (*buf_alloc)(struct rpc_task *task, size_t size);
|
||||
void (*buf_free)(struct rpc_task *task);
|
||||
void (*buf_free)(void *buffer);
|
||||
int (*send_request)(struct rpc_task *task);
|
||||
void (*set_retrans_timeout)(struct rpc_task *task);
|
||||
void (*timer)(struct rpc_task *task);
|
||||
|
@ -150,6 +152,7 @@ struct rpc_xprt {
|
|||
unsigned long state; /* transport state */
|
||||
unsigned char shutdown : 1, /* being shut down */
|
||||
resvport : 1; /* use a reserved port */
|
||||
unsigned int bind_index; /* bind function index */
|
||||
|
||||
/*
|
||||
* Connection of transports
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include <linux/notifier.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
/* struct pbe is used for creating lists of pages that should be restored
|
||||
* atomically during the resume from disk, because the page frames they have
|
||||
|
@ -23,36 +24,32 @@ struct pbe {
|
|||
extern void drain_local_pages(void);
|
||||
extern void mark_free_pages(struct zone *zone);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
/* kernel/power/swsusp.c */
|
||||
extern int software_suspend(void);
|
||||
|
||||
#if defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE)
|
||||
#if defined(CONFIG_PM) && defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE)
|
||||
extern int pm_prepare_console(void);
|
||||
extern void pm_restore_console(void);
|
||||
#else
|
||||
static inline int pm_prepare_console(void) { return 0; }
|
||||
static inline void pm_restore_console(void) {}
|
||||
#endif /* defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE) */
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_PM) && defined(CONFIG_SOFTWARE_SUSPEND)
|
||||
/* kernel/power/snapshot.c */
|
||||
extern void __init register_nosave_region(unsigned long, unsigned long);
|
||||
extern int swsusp_page_is_forbidden(struct page *);
|
||||
extern void swsusp_set_page_free(struct page *);
|
||||
extern void swsusp_unset_page_free(struct page *);
|
||||
extern unsigned long get_safe_page(gfp_t gfp_mask);
|
||||
#else
|
||||
static inline int software_suspend(void)
|
||||
{
|
||||
printk("Warning: fake suspend called\n");
|
||||
return -ENOSYS;
|
||||
}
|
||||
#endif /* CONFIG_PM */
|
||||
static inline void register_nosave_region(unsigned long b, unsigned long e) {}
|
||||
static inline int swsusp_page_is_forbidden(struct page *p) { return 0; }
|
||||
static inline void swsusp_set_page_free(struct page *p) {}
|
||||
static inline void swsusp_unset_page_free(struct page *p) {}
|
||||
#endif /* defined(CONFIG_PM) && defined(CONFIG_SOFTWARE_SUSPEND) */
|
||||
|
||||
void save_processor_state(void);
|
||||
void restore_processor_state(void);
|
||||
struct saved_context;
|
||||
void __save_processor_state(struct saved_context *ctxt);
|
||||
void __restore_processor_state(struct saved_context *ctxt);
|
||||
unsigned long get_safe_page(gfp_t gfp_mask);
|
||||
|
||||
/*
|
||||
* XXX: We try to keep some more pages free so that I/O operations succeed
|
||||
* without paging. Might this be more?
|
||||
*/
|
||||
#define PAGES_FOR_IO 1024
|
||||
|
||||
#endif /* _LINUX_SWSUSP_H */
|
||||
|
|
|
@ -14,16 +14,16 @@
|
|||
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
/* Host registers (relative to pci base address): */
|
||||
enum {
|
||||
FM_SET_INTERRUPT_ENABLE = 0x008,
|
||||
FM_CLEAR_INTERRUPT_ENABLE = 0x00c,
|
||||
FM_INTERRUPT_STATUS = 0x014 };
|
||||
FM_INTERRUPT_STATUS = 0x014
|
||||
};
|
||||
|
||||
/* Socket registers (relative to socket base address): */
|
||||
enum {
|
||||
|
@ -58,14 +58,8 @@ enum {
|
|||
SOCK_MS_DATA = 0x188,
|
||||
SOCK_MS_STATUS = 0x18c,
|
||||
SOCK_MS_SYSTEM = 0x190,
|
||||
SOCK_FIFO_ACCESS = 0x200 };
|
||||
|
||||
|
||||
#define TIFM_IRQ_ENABLE 0x80000000
|
||||
#define TIFM_IRQ_SOCKMASK(x) (x)
|
||||
#define TIFM_IRQ_CARDMASK(x) ((x) << 8)
|
||||
#define TIFM_IRQ_FIFOMASK(x) ((x) << 16)
|
||||
#define TIFM_IRQ_SETALL 0xffffffff
|
||||
SOCK_FIFO_ACCESS = 0x200
|
||||
};
|
||||
|
||||
#define TIFM_CTRL_LED 0x00000040
|
||||
#define TIFM_CTRL_FAST_CLK 0x00000100
|
||||
|
@ -73,63 +67,76 @@ enum {
|
|||
#define TIFM_SOCK_STATE_OCCUPIED 0x00000008
|
||||
#define TIFM_SOCK_STATE_POWERED 0x00000080
|
||||
|
||||
#define TIFM_FIFO_ENABLE 0x00000001 /* Meaning of this constant is unverified */
|
||||
#define TIFM_FIFO_ENABLE 0x00000001
|
||||
#define TIFM_FIFO_READY 0x00000001
|
||||
#define TIFM_FIFO_INT_SETALL 0x0000ffff
|
||||
#define TIFM_FIFO_INTMASK 0x00000005 /* Meaning of this constant is unverified */
|
||||
#define TIFM_FIFO_INTMASK 0x00000005
|
||||
|
||||
#define TIFM_DMA_RESET 0x00000002 /* Meaning of this constant is unverified */
|
||||
#define TIFM_DMA_TX 0x00008000 /* Meaning of this constant is unverified */
|
||||
#define TIFM_DMA_EN 0x00000001 /* Meaning of this constant is unverified */
|
||||
#define TIFM_DMA_RESET 0x00000002
|
||||
#define TIFM_DMA_TX 0x00008000
|
||||
#define TIFM_DMA_EN 0x00000001
|
||||
#define TIFM_DMA_TSIZE 0x0000007f
|
||||
|
||||
typedef enum {FM_NULL = 0, FM_XD = 0x01, FM_MS = 0x02, FM_SD = 0x03} tifm_media_id;
|
||||
#define TIFM_TYPE_XD 1
|
||||
#define TIFM_TYPE_MS 2
|
||||
#define TIFM_TYPE_SD 3
|
||||
|
||||
struct tifm_device_id {
|
||||
unsigned char type;
|
||||
};
|
||||
|
||||
struct tifm_driver;
|
||||
struct tifm_dev {
|
||||
char __iomem *addr;
|
||||
spinlock_t lock;
|
||||
tifm_media_id media_id;
|
||||
unsigned int socket_id;
|
||||
char __iomem *addr;
|
||||
spinlock_t lock;
|
||||
unsigned char type;
|
||||
unsigned int socket_id;
|
||||
|
||||
void (*signal_irq)(struct tifm_dev *sock,
|
||||
unsigned int sock_irq_status);
|
||||
void (*card_event)(struct tifm_dev *sock);
|
||||
void (*data_event)(struct tifm_dev *sock);
|
||||
|
||||
struct tifm_driver *drv;
|
||||
struct device dev;
|
||||
struct device dev;
|
||||
};
|
||||
|
||||
struct tifm_driver {
|
||||
tifm_media_id *id_table;
|
||||
int (*probe)(struct tifm_dev *dev);
|
||||
void (*remove)(struct tifm_dev *dev);
|
||||
int (*suspend)(struct tifm_dev *dev,
|
||||
pm_message_t state);
|
||||
int (*resume)(struct tifm_dev *dev);
|
||||
struct tifm_device_id *id_table;
|
||||
int (*probe)(struct tifm_dev *dev);
|
||||
void (*remove)(struct tifm_dev *dev);
|
||||
int (*suspend)(struct tifm_dev *dev,
|
||||
pm_message_t state);
|
||||
int (*resume)(struct tifm_dev *dev);
|
||||
|
||||
struct device_driver driver;
|
||||
struct device_driver driver;
|
||||
};
|
||||
|
||||
struct tifm_adapter {
|
||||
char __iomem *addr;
|
||||
spinlock_t lock;
|
||||
unsigned int irq_status;
|
||||
unsigned int socket_change_set;
|
||||
wait_queue_head_t change_set_notify;
|
||||
unsigned int id;
|
||||
unsigned int num_sockets;
|
||||
struct tifm_dev **sockets;
|
||||
struct task_struct *media_switcher;
|
||||
struct class_device cdev;
|
||||
struct device *dev;
|
||||
char __iomem *addr;
|
||||
spinlock_t lock;
|
||||
unsigned int irq_status;
|
||||
unsigned int socket_change_set;
|
||||
unsigned int id;
|
||||
unsigned int num_sockets;
|
||||
struct completion *finish_me;
|
||||
|
||||
void (*eject)(struct tifm_adapter *fm, struct tifm_dev *sock);
|
||||
struct work_struct media_switcher;
|
||||
struct class_device cdev;
|
||||
|
||||
void (*eject)(struct tifm_adapter *fm,
|
||||
struct tifm_dev *sock);
|
||||
|
||||
struct tifm_dev *sockets[0];
|
||||
};
|
||||
|
||||
struct tifm_adapter *tifm_alloc_adapter(void);
|
||||
void tifm_free_device(struct device *dev);
|
||||
void tifm_free_adapter(struct tifm_adapter *fm);
|
||||
int tifm_add_adapter(struct tifm_adapter *fm, int (*mediathreadfn)(void *data));
|
||||
struct tifm_adapter *tifm_alloc_adapter(unsigned int num_sockets,
|
||||
struct device *dev);
|
||||
int tifm_add_adapter(struct tifm_adapter *fm);
|
||||
void tifm_remove_adapter(struct tifm_adapter *fm);
|
||||
struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm);
|
||||
void tifm_free_adapter(struct tifm_adapter *fm);
|
||||
|
||||
void tifm_free_device(struct device *dev);
|
||||
struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm, unsigned int id,
|
||||
unsigned char type);
|
||||
|
||||
int tifm_register_driver(struct tifm_driver *drv);
|
||||
void tifm_unregister_driver(struct tifm_driver *drv);
|
||||
void tifm_eject(struct tifm_dev *sock);
|
||||
|
@ -137,11 +144,11 @@ int tifm_map_sg(struct tifm_dev *sock, struct scatterlist *sg, int nents,
|
|||
int direction);
|
||||
void tifm_unmap_sg(struct tifm_dev *sock, struct scatterlist *sg, int nents,
|
||||
int direction);
|
||||
|
||||
void tifm_queue_work(struct work_struct *work);
|
||||
|
||||
static inline void *tifm_get_drvdata(struct tifm_dev *dev)
|
||||
{
|
||||
return dev_get_drvdata(&dev->dev);
|
||||
return dev_get_drvdata(&dev->dev);
|
||||
}
|
||||
|
||||
static inline void tifm_set_drvdata(struct tifm_dev *dev, void *data)
|
||||
|
@ -149,8 +156,4 @@ static inline void tifm_set_drvdata(struct tifm_dev *dev, void *data)
|
|||
dev_set_drvdata(&dev->dev, data);
|
||||
}
|
||||
|
||||
struct tifm_device_id {
|
||||
tifm_media_id media_id;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
26
include/linux/usb_sl811.h
Normal file
26
include/linux/usb_sl811.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
|
||||
/*
|
||||
* board initialization should put one of these into dev->platform_data
|
||||
* and place the sl811hs onto platform_bus named "sl811-hcd".
|
||||
*/
|
||||
|
||||
struct sl811_platform_data {
|
||||
unsigned can_wakeup:1;
|
||||
|
||||
/* given port_power, msec/2 after power on till power good */
|
||||
u8 potpg;
|
||||
|
||||
/* mA/2 power supplied on this port (max = default = 250) */
|
||||
u8 power;
|
||||
|
||||
/* sl811 relies on an external source of VBUS current */
|
||||
void (*port_power)(struct device *dev, int is_on);
|
||||
|
||||
/* pulse sl811 nRST (probably with a GPIO) */
|
||||
void (*reset)(struct device *dev);
|
||||
|
||||
// some boards need something like these:
|
||||
// int (*check_overcurrent)(struct device *dev);
|
||||
// void (*clock_enable)(struct device *dev, int is_on);
|
||||
};
|
||||
|
|
@ -59,6 +59,8 @@ struct writeback_control {
|
|||
unsigned for_reclaim:1; /* Invoked from the page allocator */
|
||||
unsigned for_writepages:1; /* This is a writepages() call */
|
||||
unsigned range_cyclic:1; /* range_start is cyclic */
|
||||
|
||||
void *fs_private; /* For use by ->writepages() */
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -243,17 +243,6 @@ enum xfrm_ae_ftype_t {
|
|||
#define XFRM_AE_MAX (__XFRM_AE_MAX - 1)
|
||||
};
|
||||
|
||||
/* SAD Table filter flags */
|
||||
enum xfrm_sad_ftype_t {
|
||||
XFRM_SAD_UNSPEC,
|
||||
XFRM_SAD_HMASK=1,
|
||||
XFRM_SAD_HMAX=2,
|
||||
XFRM_SAD_CNT=4,
|
||||
__XFRM_SAD_MAX
|
||||
|
||||
#define XFRM_SAD_MAX (__XFRM_SAD_MAX - 1)
|
||||
};
|
||||
|
||||
struct xfrm_userpolicy_type {
|
||||
__u8 type;
|
||||
__u16 reserved1;
|
||||
|
@ -287,44 +276,41 @@ enum xfrm_attr_type_t {
|
|||
|
||||
enum xfrm_sadattr_type_t {
|
||||
XFRMA_SAD_UNSPEC,
|
||||
XFRMA_SADHMASK,
|
||||
XFRMA_SADHMAX,
|
||||
XFRMA_SADCNT,
|
||||
XFRMA_SAD_CNT,
|
||||
XFRMA_SAD_HINFO,
|
||||
__XFRMA_SAD_MAX
|
||||
|
||||
#define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1)
|
||||
};
|
||||
|
||||
/* SPD Table filter flags */
|
||||
enum xfrm_spd_ftype_t {
|
||||
XFRM_SPD_UNSPEC,
|
||||
XFRM_SPD_HMASK=1,
|
||||
XFRM_SPD_HMAX=2,
|
||||
XFRM_SPD_ICNT=4,
|
||||
XFRM_SPD_OCNT=8,
|
||||
XFRM_SPD_FCNT=16,
|
||||
XFRM_SPD_ISCNT=32,
|
||||
XFRM_SPD_OSCNT=64,
|
||||
XFRM_SPD_FSCNT=128,
|
||||
__XFRM_SPD_MAX
|
||||
|
||||
#define XFRM_SPD_MAX (__XFRM_SPD_MAX - 1)
|
||||
struct xfrmu_sadhinfo {
|
||||
__u32 sadhcnt; /* current hash bkts */
|
||||
__u32 sadhmcnt; /* max allowed hash bkts */
|
||||
};
|
||||
|
||||
enum xfrm_spdattr_type_t {
|
||||
XFRMA_SPD_UNSPEC,
|
||||
XFRMA_SPDHMASK,
|
||||
XFRMA_SPDHMAX,
|
||||
XFRMA_SPDICNT,
|
||||
XFRMA_SPDOCNT,
|
||||
XFRMA_SPDFCNT,
|
||||
XFRMA_SPDISCNT,
|
||||
XFRMA_SPDOSCNT,
|
||||
XFRMA_SPDFSCNT,
|
||||
XFRMA_SPD_INFO,
|
||||
XFRMA_SPD_HINFO,
|
||||
__XFRMA_SPD_MAX
|
||||
|
||||
#define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1)
|
||||
};
|
||||
|
||||
struct xfrmu_spdinfo {
|
||||
__u32 incnt;
|
||||
__u32 outcnt;
|
||||
__u32 fwdcnt;
|
||||
__u32 inscnt;
|
||||
__u32 outscnt;
|
||||
__u32 fwdscnt;
|
||||
};
|
||||
|
||||
struct xfrmu_spdhinfo {
|
||||
__u32 spdhcnt;
|
||||
__u32 spdhmcnt;
|
||||
};
|
||||
|
||||
struct xfrm_usersa_info {
|
||||
struct xfrm_selector sel;
|
||||
struct xfrm_id id;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue