Merge /spare/repo/linux-2.6/
This commit is contained in:
commit
142e27fc8a
2127 changed files with 105223 additions and 49219 deletions
|
@ -11,10 +11,12 @@
|
|||
|
||||
#include <linux/device.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/klist.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
struct attribute_container {
|
||||
struct list_head node;
|
||||
struct list_head containers;
|
||||
struct klist containers;
|
||||
struct class *class;
|
||||
struct class_device_attribute **attrs;
|
||||
int (*match)(struct attribute_container *, struct device *);
|
||||
|
@ -62,12 +64,8 @@ int attribute_container_add_class_device_adapter(struct attribute_container *con
|
|||
struct class_device *classdev);
|
||||
void attribute_container_remove_attrs(struct class_device *classdev);
|
||||
void attribute_container_class_device_del(struct class_device *classdev);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
struct attribute_container *attribute_container_classdev_to_container(struct class_device *);
|
||||
struct class_device *attribute_container_find_class_device(struct attribute_container *, struct device *);
|
||||
struct class_device_attribute **attribute_container_classdev_to_attrs(const struct class_device *classdev);
|
||||
|
||||
#endif
|
||||
|
|
31
include/linux/auxvec.h
Normal file
31
include/linux/auxvec.h
Normal file
|
@ -0,0 +1,31 @@
|
|||
#ifndef _LINUX_AUXVEC_H
|
||||
#define _LINUX_AUXVEC_H
|
||||
|
||||
#include <asm/auxvec.h>
|
||||
|
||||
/* Symbolic values for the entries in the auxiliary table
|
||||
put on the initial stack */
|
||||
#define AT_NULL 0 /* end of vector */
|
||||
#define AT_IGNORE 1 /* entry should be ignored */
|
||||
#define AT_EXECFD 2 /* file descriptor of program */
|
||||
#define AT_PHDR 3 /* program headers for program */
|
||||
#define AT_PHENT 4 /* size of program header entry */
|
||||
#define AT_PHNUM 5 /* number of program headers */
|
||||
#define AT_PAGESZ 6 /* system page size */
|
||||
#define AT_BASE 7 /* base address of interpreter */
|
||||
#define AT_FLAGS 8 /* flags */
|
||||
#define AT_ENTRY 9 /* entry point of program */
|
||||
#define AT_NOTELF 10 /* program is not ELF */
|
||||
#define AT_UID 11 /* real uid */
|
||||
#define AT_EUID 12 /* effective uid */
|
||||
#define AT_GID 13 /* real gid */
|
||||
#define AT_EGID 14 /* effective gid */
|
||||
#define AT_PLATFORM 15 /* string identifying CPU for optimizations */
|
||||
#define AT_HWCAP 16 /* arch dependent hints at CPU capabilities */
|
||||
#define AT_CLKTCK 17 /* frequency at which times() increments */
|
||||
|
||||
#define AT_SECURE 23 /* secure mode boolean */
|
||||
|
||||
#define AT_VECTOR_SIZE 42 /* Size of auxiliary table. */
|
||||
|
||||
#endif /* _LINUX_AUXVEC_H */
|
|
@ -111,7 +111,6 @@ struct bio {
|
|||
void *bi_private;
|
||||
|
||||
bio_destructor_t *bi_destructor; /* destructor */
|
||||
struct bio_set *bi_set; /* memory pools set */
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -280,6 +279,7 @@ extern void bioset_free(struct bio_set *);
|
|||
extern struct bio *bio_alloc(unsigned int __nocast, int);
|
||||
extern struct bio *bio_alloc_bioset(unsigned int __nocast, int, struct bio_set *);
|
||||
extern void bio_put(struct bio *);
|
||||
extern void bio_free(struct bio *, struct bio_set *);
|
||||
|
||||
extern void bio_endio(struct bio *, unsigned int, int);
|
||||
struct request_queue;
|
||||
|
@ -295,7 +295,13 @@ extern int bio_add_page(struct bio *, struct page *, unsigned int,unsigned int);
|
|||
extern int bio_get_nr_vecs(struct block_device *);
|
||||
extern struct bio *bio_map_user(struct request_queue *, struct block_device *,
|
||||
unsigned long, unsigned int, int);
|
||||
struct sg_iovec;
|
||||
extern struct bio *bio_map_user_iov(struct request_queue *,
|
||||
struct block_device *,
|
||||
struct sg_iovec *, int, int);
|
||||
extern void bio_unmap_user(struct bio *);
|
||||
extern struct bio *bio_map_kern(struct request_queue *, void *, unsigned int,
|
||||
unsigned int);
|
||||
extern void bio_set_pages_dirty(struct bio *bio);
|
||||
extern void bio_check_pages_dirty(struct bio *bio);
|
||||
extern struct bio *bio_copy_user(struct request_queue *, unsigned long, unsigned int, int);
|
||||
|
|
|
@ -563,10 +563,12 @@ extern void blk_sync_queue(struct request_queue *q);
|
|||
extern void __blk_stop_queue(request_queue_t *q);
|
||||
extern void blk_run_queue(request_queue_t *);
|
||||
extern void blk_queue_activity_fn(request_queue_t *, activity_fn *, void *);
|
||||
extern struct request *blk_rq_map_user(request_queue_t *, int, void __user *, unsigned int);
|
||||
extern int blk_rq_unmap_user(struct request *, struct bio *, unsigned int);
|
||||
extern int blk_execute_rq(request_queue_t *, struct gendisk *, struct request *);
|
||||
|
||||
extern int blk_rq_map_user(request_queue_t *, struct request *, void __user *, unsigned int);
|
||||
extern int blk_rq_unmap_user(struct bio *, unsigned int);
|
||||
extern int blk_rq_map_kern(request_queue_t *, struct request *, void *, unsigned int, unsigned int);
|
||||
extern int blk_rq_map_user_iov(request_queue_t *, struct request *, struct sg_iovec *, int);
|
||||
extern int blk_execute_rq(request_queue_t *, struct gendisk *,
|
||||
struct request *, int);
|
||||
static inline request_queue_t *bdev_get_queue(struct block_device *bdev)
|
||||
{
|
||||
return bdev->bd_disk->queue;
|
||||
|
|
|
@ -233,6 +233,7 @@ typedef __u32 kernel_cap_t;
|
|||
/* Allow enabling/disabling tagged queuing on SCSI controllers and sending
|
||||
arbitrary SCSI commands */
|
||||
/* Allow setting encryption key on loopback filesystem */
|
||||
/* Allow setting zone reclaim policy */
|
||||
|
||||
#define CAP_SYS_ADMIN 21
|
||||
|
||||
|
|
|
@ -18,6 +18,9 @@
|
|||
#define compat_jiffies_to_clock_t(x) \
|
||||
(((unsigned long)(x) * COMPAT_USER_HZ) / HZ)
|
||||
|
||||
typedef __compat_uid32_t compat_uid_t;
|
||||
typedef __compat_gid32_t compat_gid_t;
|
||||
|
||||
struct rusage;
|
||||
|
||||
struct compat_itimerspec {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* Basic handling of the devices is done in drivers/base/cpu.c
|
||||
* and system devices are handled in drivers/base/sys.c.
|
||||
*
|
||||
* CPUs are exported via driverfs in the class/cpu/devices/
|
||||
* CPUs are exported via sysfs in the class/cpu/devices/
|
||||
* directory.
|
||||
*
|
||||
* Per-cpu interfaces can be implemented using a struct device_interface.
|
||||
|
|
|
@ -23,7 +23,8 @@ void cpuset_init_current_mems_allowed(void);
|
|||
void cpuset_update_current_mems_allowed(void);
|
||||
void cpuset_restrict_to_mems_allowed(unsigned long *nodes);
|
||||
int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl);
|
||||
int cpuset_zone_allowed(struct zone *z);
|
||||
extern int cpuset_zone_allowed(struct zone *z, unsigned int __nocast gfp_mask);
|
||||
extern int cpuset_excl_nodes_overlap(const struct task_struct *p);
|
||||
extern struct file_operations proc_cpuset_operations;
|
||||
extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer);
|
||||
|
||||
|
@ -48,7 +49,13 @@ static inline int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static inline int cpuset_zone_allowed(struct zone *z)
|
||||
static inline int cpuset_zone_allowed(struct zone *z,
|
||||
unsigned int __nocast gfp_mask)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline int cpuset_excl_nodes_overlap(const struct task_struct *p)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#define CRYPTO_TFM_MODE_CTR 0x00000008
|
||||
|
||||
#define CRYPTO_TFM_REQ_WEAK_KEY 0x00000100
|
||||
#define CRYPTO_TFM_REQ_MAY_SLEEP 0x00000200
|
||||
#define CRYPTO_TFM_RES_WEAK_KEY 0x00100000
|
||||
#define CRYPTO_TFM_RES_BAD_KEY_LEN 0x00200000
|
||||
#define CRYPTO_TFM_RES_BAD_KEY_SCHED 0x00400000
|
||||
|
|
|
@ -88,8 +88,9 @@ struct dentry {
|
|||
* negative */
|
||||
/*
|
||||
* The next three fields are touched by __d_lookup. Place them here
|
||||
* so they all fit in a 16-byte range, with 16-byte alignment.
|
||||
* so they all fit in a cache line.
|
||||
*/
|
||||
struct hlist_node d_hash; /* lookup hash list */
|
||||
struct dentry *d_parent; /* parent directory */
|
||||
struct qstr d_name;
|
||||
|
||||
|
@ -103,7 +104,6 @@ struct dentry {
|
|||
void *d_fsdata; /* fs-specific data */
|
||||
struct rcu_head d_rcu;
|
||||
struct dcookie_struct *d_cookie; /* cookie, if any */
|
||||
struct hlist_node d_hash; /* lookup hash list */
|
||||
int d_mounted;
|
||||
unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* small names */
|
||||
};
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef __DMI_H__
|
||||
#define __DMI_H__
|
||||
|
||||
#include <linux/list.h>
|
||||
|
||||
enum dmi_field {
|
||||
DMI_NONE,
|
||||
DMI_BIOS_VENDOR,
|
||||
|
@ -16,6 +18,24 @@ enum dmi_field {
|
|||
DMI_STRING_MAX,
|
||||
};
|
||||
|
||||
enum dmi_device_type {
|
||||
DMI_DEV_TYPE_ANY = 0,
|
||||
DMI_DEV_TYPE_OTHER,
|
||||
DMI_DEV_TYPE_UNKNOWN,
|
||||
DMI_DEV_TYPE_VIDEO,
|
||||
DMI_DEV_TYPE_SCSI,
|
||||
DMI_DEV_TYPE_ETHERNET,
|
||||
DMI_DEV_TYPE_TOKENRING,
|
||||
DMI_DEV_TYPE_SOUND,
|
||||
DMI_DEV_TYPE_IPMI = -1
|
||||
};
|
||||
|
||||
struct dmi_header {
|
||||
u8 type;
|
||||
u8 length;
|
||||
u16 handle;
|
||||
};
|
||||
|
||||
/*
|
||||
* DMI callbacks for problem boards
|
||||
*/
|
||||
|
@ -26,22 +46,32 @@ struct dmi_strmatch {
|
|||
|
||||
struct dmi_system_id {
|
||||
int (*callback)(struct dmi_system_id *);
|
||||
char *ident;
|
||||
const char *ident;
|
||||
struct dmi_strmatch matches[4];
|
||||
void *driver_data;
|
||||
};
|
||||
|
||||
#define DMI_MATCH(a,b) { a, b }
|
||||
#define DMI_MATCH(a, b) { a, b }
|
||||
|
||||
struct dmi_device {
|
||||
struct list_head list;
|
||||
int type;
|
||||
const char *name;
|
||||
void *device_data; /* Type specific data */
|
||||
};
|
||||
|
||||
#if defined(CONFIG_X86) && !defined(CONFIG_X86_64)
|
||||
|
||||
extern int dmi_check_system(struct dmi_system_id *list);
|
||||
extern char * dmi_get_system_info(int field);
|
||||
|
||||
extern struct dmi_device * dmi_find_device(int type, const char *name,
|
||||
struct dmi_device *from);
|
||||
#else
|
||||
|
||||
static inline int dmi_check_system(struct dmi_system_id *list) { return 0; }
|
||||
static inline char * dmi_get_system_info(int field) { return NULL; }
|
||||
static struct dmi_device * dmi_find_device(int type, const char *name,
|
||||
struct dmi_device *from) { return NULL; }
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -91,11 +91,6 @@ typedef struct {
|
|||
|
||||
#define EFI_PAGE_SHIFT 12
|
||||
|
||||
/*
|
||||
* For current x86 implementations of EFI, there is
|
||||
* additional padding in the mem descriptors. This is not
|
||||
* the case in ia64. Need to have this fixed in the f/w.
|
||||
*/
|
||||
typedef struct {
|
||||
u32 type;
|
||||
u32 pad;
|
||||
|
@ -103,9 +98,6 @@ typedef struct {
|
|||
u64 virt_addr;
|
||||
u64 num_pages;
|
||||
u64 attribute;
|
||||
#if defined (__i386__)
|
||||
u64 pad1;
|
||||
#endif
|
||||
} efi_memory_desc_t;
|
||||
|
||||
typedef int (*efi_freemem_callback_t) (unsigned long start, unsigned long end, void *arg);
|
||||
|
@ -240,10 +232,12 @@ typedef struct {
|
|||
} efi_system_table_t;
|
||||
|
||||
struct efi_memory_map {
|
||||
efi_memory_desc_t *phys_map;
|
||||
efi_memory_desc_t *map;
|
||||
void *phys_map;
|
||||
void *map;
|
||||
void *map_end;
|
||||
int nr_map;
|
||||
unsigned long desc_version;
|
||||
unsigned long desc_size;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define _LINUX_ELF_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/auxvec.h>
|
||||
#include <asm/elf.h>
|
||||
|
||||
#ifndef elf_read_implies_exec
|
||||
|
@ -158,29 +159,6 @@ typedef __s64 Elf64_Sxword;
|
|||
#define ELF64_ST_BIND(x) ELF_ST_BIND(x)
|
||||
#define ELF64_ST_TYPE(x) ELF_ST_TYPE(x)
|
||||
|
||||
/* Symbolic values for the entries in the auxiliary table
|
||||
put on the initial stack */
|
||||
#define AT_NULL 0 /* end of vector */
|
||||
#define AT_IGNORE 1 /* entry should be ignored */
|
||||
#define AT_EXECFD 2 /* file descriptor of program */
|
||||
#define AT_PHDR 3 /* program headers for program */
|
||||
#define AT_PHENT 4 /* size of program header entry */
|
||||
#define AT_PHNUM 5 /* number of program headers */
|
||||
#define AT_PAGESZ 6 /* system page size */
|
||||
#define AT_BASE 7 /* base address of interpreter */
|
||||
#define AT_FLAGS 8 /* flags */
|
||||
#define AT_ENTRY 9 /* entry point of program */
|
||||
#define AT_NOTELF 10 /* program is not ELF */
|
||||
#define AT_UID 11 /* real uid */
|
||||
#define AT_EUID 12 /* effective uid */
|
||||
#define AT_GID 13 /* real gid */
|
||||
#define AT_EGID 14 /* effective gid */
|
||||
#define AT_PLATFORM 15 /* string identifying CPU for optimizations */
|
||||
#define AT_HWCAP 16 /* arch dependent hints at CPU capabilities */
|
||||
#define AT_CLKTCK 17 /* frequency at which times() increments */
|
||||
|
||||
#define AT_SECURE 23 /* secure mode boolean */
|
||||
|
||||
typedef struct dynamic{
|
||||
Elf32_Sword d_tag;
|
||||
union{
|
||||
|
|
|
@ -69,6 +69,12 @@ static inline int is_multicast_ether_addr(const u8 *addr)
|
|||
return ((addr[0] != 0xff) && (0x01 & addr[0]));
|
||||
}
|
||||
|
||||
static inline int is_broadcast_ether_addr(const u8 *addr)
|
||||
{
|
||||
return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) &&
|
||||
(addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
|
||||
}
|
||||
|
||||
/**
|
||||
* is_valid_ether_addr - Determine if the given Ethernet address is valid
|
||||
* @addr: Pointer to a six-byte array containing the Ethernet address
|
||||
|
|
|
@ -313,6 +313,9 @@ struct ext2_inode {
|
|||
#define EXT2_MOUNT_XATTR_USER 0x004000 /* Extended user attributes */
|
||||
#define EXT2_MOUNT_POSIX_ACL 0x008000 /* POSIX Access Control Lists */
|
||||
#define EXT2_MOUNT_XIP 0x010000 /* Execute in place */
|
||||
#define EXT2_MOUNT_USRQUOTA 0x020000 /* user quota */
|
||||
#define EXT2_MOUNT_GRPQUOTA 0x040000 /* group quota */
|
||||
|
||||
|
||||
#define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt
|
||||
#define set_opt(o, opt) o |= EXT2_MOUNT_##opt
|
||||
|
|
|
@ -373,6 +373,8 @@ struct ext3_inode {
|
|||
#define EXT3_MOUNT_BARRIER 0x20000 /* Use block barriers */
|
||||
#define EXT3_MOUNT_NOBH 0x40000 /* No bufferheads */
|
||||
#define EXT3_MOUNT_QUOTA 0x80000 /* Some quota option set */
|
||||
#define EXT3_MOUNT_USRQUOTA 0x100000 /* "old" user quota */
|
||||
#define EXT3_MOUNT_GRPQUOTA 0x200000 /* "old" group quota */
|
||||
|
||||
/* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
|
||||
#ifndef _LINUX_EXT2_FS_H
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
#define FIRMWARE_NAME_MAX 30
|
||||
#define FW_ACTION_NOHOTPLUG 0
|
||||
#define FW_ACTION_HOTPLUG 1
|
||||
|
||||
struct firmware {
|
||||
size_t size;
|
||||
u8 *data;
|
||||
|
@ -11,7 +14,7 @@ struct device;
|
|||
int request_firmware(const struct firmware **fw, const char *name,
|
||||
struct device *device);
|
||||
int request_firmware_nowait(
|
||||
struct module *module,
|
||||
struct module *module, int hotplug,
|
||||
const char *name, struct device *device, void *context,
|
||||
void (*cont)(const struct firmware *fw, void *context));
|
||||
|
||||
|
|
|
@ -69,6 +69,7 @@ extern int dir_notify_enable;
|
|||
#define READ 0
|
||||
#define WRITE 1
|
||||
#define READA 2 /* read-ahead - don't block if no resources */
|
||||
#define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */
|
||||
#define SPECIAL 4 /* For non-blockdevice requests in request queue */
|
||||
#define READ_SYNC (READ | (1 << BIO_RW_SYNC))
|
||||
#define WRITE_SYNC (WRITE | (1 << BIO_RW_SYNC))
|
||||
|
@ -281,18 +282,8 @@ struct iattr {
|
|||
struct timespec ia_atime;
|
||||
struct timespec ia_mtime;
|
||||
struct timespec ia_ctime;
|
||||
unsigned int ia_attr_flags;
|
||||
};
|
||||
|
||||
/*
|
||||
* This is the inode attributes flag definitions
|
||||
*/
|
||||
#define ATTR_FLAG_SYNCRONOUS 1 /* Syncronous write */
|
||||
#define ATTR_FLAG_NOATIME 2 /* Don't update atime */
|
||||
#define ATTR_FLAG_APPEND 4 /* Append-only file */
|
||||
#define ATTR_FLAG_IMMUTABLE 8 /* Immutable file */
|
||||
#define ATTR_FLAG_NODIRATIME 16 /* Don't update atime for directory */
|
||||
|
||||
/*
|
||||
* Includes for diskquotas.
|
||||
*/
|
||||
|
@ -594,7 +585,6 @@ struct file {
|
|||
unsigned int f_uid, f_gid;
|
||||
struct file_ra_state f_ra;
|
||||
|
||||
size_t f_maxcount;
|
||||
unsigned long f_version;
|
||||
void *f_security;
|
||||
|
||||
|
@ -1291,6 +1281,7 @@ static inline int break_lease(struct inode *inode, unsigned int mode)
|
|||
/* fs/open.c */
|
||||
|
||||
extern int do_truncate(struct dentry *, loff_t start);
|
||||
extern long do_sys_open(const char __user *filename, int flags, int mode);
|
||||
extern struct file *filp_open(const char *, int, int);
|
||||
extern struct file * dentry_open(struct dentry *, struct vfsmount *, int);
|
||||
extern int filp_close(struct file *, fl_owner_t id);
|
||||
|
|
|
@ -4,14 +4,40 @@
|
|||
/* Second argument to futex syscall */
|
||||
|
||||
|
||||
#define FUTEX_WAIT (0)
|
||||
#define FUTEX_WAKE (1)
|
||||
#define FUTEX_FD (2)
|
||||
#define FUTEX_REQUEUE (3)
|
||||
#define FUTEX_CMP_REQUEUE (4)
|
||||
#define FUTEX_WAIT 0
|
||||
#define FUTEX_WAKE 1
|
||||
#define FUTEX_FD 2
|
||||
#define FUTEX_REQUEUE 3
|
||||
#define FUTEX_CMP_REQUEUE 4
|
||||
#define FUTEX_WAKE_OP 5
|
||||
|
||||
long do_futex(unsigned long uaddr, int op, int val,
|
||||
unsigned long timeout, unsigned long uaddr2, int val2,
|
||||
int val3);
|
||||
|
||||
#define FUTEX_OP_SET 0 /* *(int *)UADDR2 = OPARG; */
|
||||
#define FUTEX_OP_ADD 1 /* *(int *)UADDR2 += OPARG; */
|
||||
#define FUTEX_OP_OR 2 /* *(int *)UADDR2 |= OPARG; */
|
||||
#define FUTEX_OP_ANDN 3 /* *(int *)UADDR2 &= ~OPARG; */
|
||||
#define FUTEX_OP_XOR 4 /* *(int *)UADDR2 ^= OPARG; */
|
||||
|
||||
#define FUTEX_OP_OPARG_SHIFT 8 /* Use (1 << OPARG) instead of OPARG. */
|
||||
|
||||
#define FUTEX_OP_CMP_EQ 0 /* if (oldval == CMPARG) wake */
|
||||
#define FUTEX_OP_CMP_NE 1 /* if (oldval != CMPARG) wake */
|
||||
#define FUTEX_OP_CMP_LT 2 /* if (oldval < CMPARG) wake */
|
||||
#define FUTEX_OP_CMP_LE 3 /* if (oldval <= CMPARG) wake */
|
||||
#define FUTEX_OP_CMP_GT 4 /* if (oldval > CMPARG) wake */
|
||||
#define FUTEX_OP_CMP_GE 5 /* if (oldval >= CMPARG) wake */
|
||||
|
||||
/* FUTEX_WAKE_OP will perform atomically
|
||||
int oldval = *(int *)UADDR2;
|
||||
*(int *)UADDR2 = oldval OP OPARG;
|
||||
if (oldval CMP CMPARG)
|
||||
wake UADDR2; */
|
||||
|
||||
#define FUTEX_OP(op, oparg, cmp, cmparg) \
|
||||
(((op & 0xf) << 28) | ((cmp & 0xf) << 24) \
|
||||
| ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
|
||||
|
||||
#endif
|
||||
|
|
|
@ -40,6 +40,7 @@ struct vm_area_struct;
|
|||
#define __GFP_ZERO 0x8000u /* Return zeroed page on success */
|
||||
#define __GFP_NOMEMALLOC 0x10000u /* Don't use emergency reserves */
|
||||
#define __GFP_NORECLAIM 0x20000u /* No realy zone reclaim during allocation */
|
||||
#define __GFP_HARDWALL 0x40000u /* Enforce hardwall cpuset memory allocs */
|
||||
|
||||
#define __GFP_BITS_SHIFT 20 /* Room for 20 __GFP_FOO bits */
|
||||
#define __GFP_BITS_MASK ((1 << __GFP_BITS_SHIFT) - 1)
|
||||
|
@ -48,14 +49,15 @@ struct vm_area_struct;
|
|||
#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_NOMEMALLOC|__GFP_NORECLAIM)
|
||||
__GFP_NOMEMALLOC|__GFP_NORECLAIM|__GFP_HARDWALL)
|
||||
|
||||
#define GFP_ATOMIC (__GFP_HIGH)
|
||||
#define GFP_NOIO (__GFP_WAIT)
|
||||
#define GFP_NOFS (__GFP_WAIT | __GFP_IO)
|
||||
#define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS)
|
||||
#define GFP_USER (__GFP_WAIT | __GFP_IO | __GFP_FS)
|
||||
#define GFP_HIGHUSER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HIGHMEM)
|
||||
#define GFP_USER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL)
|
||||
#define GFP_HIGHUSER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL | \
|
||||
__GFP_HIGHMEM)
|
||||
|
||||
/* Flag - indicates that the buffer will be suitable for DMA. Ignored on some
|
||||
platforms, used as appropriate on others */
|
||||
|
|
|
@ -70,12 +70,6 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
|
|||
void hugetlb_prefault_arch_hook(struct mm_struct *mm);
|
||||
#endif
|
||||
|
||||
#ifndef ARCH_HAS_HUGETLB_CLEAN_STALE_PGTABLE
|
||||
#define hugetlb_clean_stale_pgtable(pte) BUG()
|
||||
#else
|
||||
void hugetlb_clean_stale_pgtable(pte_t *pte);
|
||||
#endif
|
||||
|
||||
#else /* !CONFIG_HUGETLB_PAGE */
|
||||
|
||||
static inline int is_vm_hugetlb_page(struct vm_area_struct *vma)
|
||||
|
|
|
@ -33,4 +33,19 @@ struct sensor_device_attribute sensor_dev_attr_##_name = { \
|
|||
.index = _index, \
|
||||
}
|
||||
|
||||
struct sensor_device_attribute_2 {
|
||||
struct device_attribute dev_attr;
|
||||
u8 index;
|
||||
u8 nr;
|
||||
};
|
||||
#define to_sensor_dev_attr_2(_dev_attr) \
|
||||
container_of(_dev_attr, struct sensor_device_attribute_2, dev_attr)
|
||||
|
||||
#define SENSOR_DEVICE_ATTR_2(_name,_mode,_show,_store,_nr,_index) \
|
||||
struct sensor_device_attribute_2 sensor_dev_attr_##_name = { \
|
||||
.dev_attr = __ATTR(_name,_mode,_show,_store), \
|
||||
.index = _index, \
|
||||
.nr = _nr, \
|
||||
}
|
||||
|
||||
#endif /* _LINUX_HWMON_SYSFS_H */
|
||||
|
|
45
include/linux/hwmon-vid.h
Normal file
45
include/linux/hwmon-vid.h
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
hwmon-vid.h - VID/VRM/VRD voltage conversions
|
||||
|
||||
Originally part of lm_sensors
|
||||
Copyright (c) 2002 Mark D. Studebaker <mdsxyz123@yahoo.com>
|
||||
With assistance from Trent Piepho <xyzzy@speakeasy.org>
|
||||
|
||||
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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_HWMON_VID_H
|
||||
#define _LINUX_HWMON_VID_H
|
||||
|
||||
int vid_from_reg(int val, int vrm);
|
||||
int vid_which_vrm(void);
|
||||
|
||||
/* vrm is the VRM/VRD document version multiplied by 10.
|
||||
val is in mV to avoid floating point in the kernel.
|
||||
Returned value is the 4-, 5- or 6-bit VID code.
|
||||
Note that only VRM 9.x is supported for now. */
|
||||
static inline int vid_to_reg(int val, int vrm)
|
||||
{
|
||||
switch (vrm) {
|
||||
case 91: /* VRM 9.1 */
|
||||
case 90: /* VRM 9.0 */
|
||||
return ((val >= 1100) && (val <= 1850) ?
|
||||
((18499 - val * 10) / 25 + 5) / 10 : -1);
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* _LINUX_HWMON_VID_H */
|
35
include/linux/hwmon.h
Normal file
35
include/linux/hwmon.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
hwmon.h - part of lm_sensors, Linux kernel modules for hardware monitoring
|
||||
|
||||
This file declares helper functions for the sysfs class "hwmon",
|
||||
for use by sensors drivers.
|
||||
|
||||
Copyright (C) 2005 Mark M. Hoffman <mhoffman@lightlink.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; version 2 of the License.
|
||||
*/
|
||||
|
||||
#ifndef _HWMON_H_
|
||||
#define _HWMON_H_
|
||||
|
||||
#include <linux/device.h>
|
||||
|
||||
struct class_device *hwmon_device_register(struct device *dev);
|
||||
|
||||
void hwmon_device_unregister(struct class_device *cdev);
|
||||
|
||||
/* Scale user input to sensible values */
|
||||
static inline int SENSORS_LIMIT(long value, long low, long high)
|
||||
{
|
||||
if (value < low)
|
||||
return low;
|
||||
else if (value > high)
|
||||
return high;
|
||||
else
|
||||
return value;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
/* ------------------------------------------------------------------------- */
|
||||
/* */
|
||||
/* i2c.h - definitions for the i2c-bus interface */
|
||||
/* i2c-id.h - identifier values for i2c drivers and adapters */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Copyright (C) 1995-1999 Simon G. Vogl
|
||||
|
@ -23,16 +23,6 @@
|
|||
#ifndef LINUX_I2C_ID_H
|
||||
#define LINUX_I2C_ID_H
|
||||
|
||||
/*
|
||||
* This file is part of the i2c-bus package and contains the identifier
|
||||
* values for drivers, adapters and other folk populating these serial
|
||||
* worlds.
|
||||
*
|
||||
* These will change often (i.e. additions) , therefore this has been
|
||||
* separated from the functional interface definitions of the i2c api.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* ---- Driver types -----------------------------------------------------
|
||||
* device id name + number function description, i2c address(es)
|
||||
|
@ -170,151 +160,113 @@
|
|||
|
||||
/*
|
||||
* ---- Adapter types ----------------------------------------------------
|
||||
*
|
||||
* First, we distinguish between several algorithms to access the hardware
|
||||
* interface types, as a PCF 8584 needs other care than a bit adapter.
|
||||
*/
|
||||
|
||||
#define I2C_ALGO_NONE 0x000000
|
||||
#define I2C_ALGO_BIT 0x010000 /* bit style adapters */
|
||||
#define I2C_ALGO_PCF 0x020000 /* PCF 8584 style adapters */
|
||||
#define I2C_ALGO_ATI 0x030000 /* ATI video card */
|
||||
#define I2C_ALGO_SMBUS 0x040000
|
||||
#define I2C_ALGO_ISA 0x050000 /* lm_sensors ISA pseudo-adapter */
|
||||
#define I2C_ALGO_SAA7146 0x060000 /* SAA 7146 video decoder bus */
|
||||
#define I2C_ALGO_ACB 0x070000 /* ACCESS.bus algorithm */
|
||||
#define I2C_ALGO_IIC 0x080000 /* ITE IIC bus */
|
||||
#define I2C_ALGO_SAA7134 0x090000
|
||||
#define I2C_ALGO_MPC824X 0x0a0000 /* Motorola 8240 / 8245 */
|
||||
#define I2C_ALGO_IPMI 0x0b0000 /* IPMI dummy adapter */
|
||||
#define I2C_ALGO_IPMB 0x0c0000 /* IPMB adapter */
|
||||
#define I2C_ALGO_MPC107 0x0d0000
|
||||
#define I2C_ALGO_EC 0x100000 /* ACPI embedded controller */
|
||||
|
||||
#define I2C_ALGO_MPC8XX 0x110000 /* MPC8xx PowerPC I2C algorithm */
|
||||
#define I2C_ALGO_OCP 0x120000 /* IBM or otherwise On-chip I2C algorithm */
|
||||
#define I2C_ALGO_BITHS 0x130000 /* enhanced bit style adapters */
|
||||
#define I2C_ALGO_IOP3XX 0x140000 /* XSCALE IOP3XX On-chip I2C alg */
|
||||
#define I2C_ALGO_SIBYTE 0x150000 /* Broadcom SiByte SOCs */
|
||||
#define I2C_ALGO_SGI 0x160000 /* SGI algorithm */
|
||||
|
||||
#define I2C_ALGO_USB 0x170000 /* USB algorithm */
|
||||
#define I2C_ALGO_VIRT 0x180000 /* Virtual bus adapter */
|
||||
|
||||
#define I2C_ALGO_MV64XXX 0x190000 /* Marvell mv64xxx i2c ctlr */
|
||||
#define I2C_ALGO_PCA 0x1a0000 /* PCA 9564 style adapters */
|
||||
#define I2C_ALGO_AU1550 0x1b0000 /* Au1550 PSC algorithm */
|
||||
|
||||
#define I2C_ALGO_EXP 0x800000 /* experimental */
|
||||
|
||||
#define I2C_ALGO_MASK 0xff0000 /* Mask for algorithms */
|
||||
#define I2C_ALGO_SHIFT 0x10 /* right shift to get index values */
|
||||
|
||||
#define I2C_HW_ADAPS 0x10000 /* # adapter types */
|
||||
#define I2C_HW_MASK 0xffff
|
||||
|
||||
|
||||
/* hw specific modules that are defined per algorithm layer
|
||||
*/
|
||||
|
||||
/* --- Bit algorithm adapters */
|
||||
#define I2C_HW_B_LP 0x00 /* Parallel port Philips style adapter */
|
||||
#define I2C_HW_B_LPC 0x01 /* Parallel port, over control reg. */
|
||||
#define I2C_HW_B_SER 0x02 /* Serial line interface */
|
||||
#define I2C_HW_B_ELV 0x03 /* ELV Card */
|
||||
#define I2C_HW_B_VELLE 0x04 /* Vellemann K8000 */
|
||||
#define I2C_HW_B_BT848 0x05 /* BT848 video boards */
|
||||
#define I2C_HW_B_WNV 0x06 /* Winnov Videums */
|
||||
#define I2C_HW_B_VIA 0x07 /* Via vt82c586b */
|
||||
#define I2C_HW_B_HYDRA 0x08 /* Apple Hydra Mac I/O */
|
||||
#define I2C_HW_B_G400 0x09 /* Matrox G400 */
|
||||
#define I2C_HW_B_I810 0x0a /* Intel I810 */
|
||||
#define I2C_HW_B_VOO 0x0b /* 3dfx Voodoo 3 / Banshee */
|
||||
#define I2C_HW_B_PPORT 0x0c /* Primitive parallel port adapter */
|
||||
#define I2C_HW_B_SAVG 0x0d /* Savage 4 */
|
||||
#define I2C_HW_B_SCX200 0x0e /* Nat'l Semi SCx200 I2C */
|
||||
#define I2C_HW_B_RIVA 0x10 /* Riva based graphics cards */
|
||||
#define I2C_HW_B_IOC 0x11 /* IOC bit-wiggling */
|
||||
#define I2C_HW_B_TSUNA 0x12 /* DEC Tsunami chipset */
|
||||
#define I2C_HW_B_FRODO 0x13 /* 2d3D, Inc. SA-1110 Development Board */
|
||||
#define I2C_HW_B_OMAHA 0x14 /* Omaha I2C interface (ARM) */
|
||||
#define I2C_HW_B_GUIDE 0x15 /* Guide bit-basher */
|
||||
#define I2C_HW_B_IXP2000 0x16 /* GPIO on IXP2000 systems */
|
||||
#define I2C_HW_B_IXP4XX 0x17 /* GPIO on IXP4XX systems */
|
||||
#define I2C_HW_B_S3VIA 0x18 /* S3Via ProSavage adapter */
|
||||
#define I2C_HW_B_ZR36067 0x19 /* Zoran-36057/36067 based boards */
|
||||
#define I2C_HW_B_PCILYNX 0x1a /* TI PCILynx I2C adapter */
|
||||
#define I2C_HW_B_CX2388x 0x1b /* connexant 2388x based tv cards */
|
||||
#define I2C_HW_B_LP 0x010000 /* Parallel port Philips style */
|
||||
#define I2C_HW_B_LPC 0x010001 /* Parallel port control reg. */
|
||||
#define I2C_HW_B_SER 0x010002 /* Serial line interface */
|
||||
#define I2C_HW_B_ELV 0x010003 /* ELV Card */
|
||||
#define I2C_HW_B_VELLE 0x010004 /* Vellemann K8000 */
|
||||
#define I2C_HW_B_BT848 0x010005 /* BT848 video boards */
|
||||
#define I2C_HW_B_WNV 0x010006 /* Winnov Videums */
|
||||
#define I2C_HW_B_VIA 0x010007 /* Via vt82c586b */
|
||||
#define I2C_HW_B_HYDRA 0x010008 /* Apple Hydra Mac I/O */
|
||||
#define I2C_HW_B_G400 0x010009 /* Matrox G400 */
|
||||
#define I2C_HW_B_I810 0x01000a /* Intel I810 */
|
||||
#define I2C_HW_B_VOO 0x01000b /* 3dfx Voodoo 3 / Banshee */
|
||||
#define I2C_HW_B_PPORT 0x01000c /* Primitive parallel port adapter */
|
||||
#define I2C_HW_B_SAVG 0x01000d /* Savage 4 */
|
||||
#define I2C_HW_B_SCX200 0x01000e /* Nat'l Semi SCx200 I2C */
|
||||
#define I2C_HW_B_RIVA 0x010010 /* Riva based graphics cards */
|
||||
#define I2C_HW_B_IOC 0x010011 /* IOC bit-wiggling */
|
||||
#define I2C_HW_B_TSUNA 0x010012 /* DEC Tsunami chipset */
|
||||
#define I2C_HW_B_FRODO 0x010013 /* 2d3D SA-1110 Development Board */
|
||||
#define I2C_HW_B_OMAHA 0x010014 /* Omaha I2C interface (ARM) */
|
||||
#define I2C_HW_B_GUIDE 0x010015 /* Guide bit-basher */
|
||||
#define I2C_HW_B_IXP2000 0x010016 /* GPIO on IXP2000 systems */
|
||||
#define I2C_HW_B_IXP4XX 0x010017 /* GPIO on IXP4XX systems */
|
||||
#define I2C_HW_B_S3VIA 0x010018 /* S3Via ProSavage adapter */
|
||||
#define I2C_HW_B_ZR36067 0x010019 /* Zoran-36057/36067 based boards */
|
||||
#define I2C_HW_B_PCILYNX 0x01001a /* TI PCILynx I2C adapter */
|
||||
#define I2C_HW_B_CX2388x 0x01001b /* connexant 2388x based tv cards */
|
||||
#define I2C_HW_B_NVIDIA 0x01001c /* nvidia framebuffer driver */
|
||||
#define I2C_HW_B_SAVAGE 0x01001d /* savage framebuffer driver */
|
||||
#define I2C_HW_B_RADEON 0x01001e /* radeon framebuffer driver */
|
||||
|
||||
/* --- PCF 8584 based algorithms */
|
||||
#define I2C_HW_P_LP 0x00 /* Parallel port interface */
|
||||
#define I2C_HW_P_ISA 0x01 /* generic ISA Bus inteface card */
|
||||
#define I2C_HW_P_ELEK 0x02 /* Elektor ISA Bus inteface card */
|
||||
#define I2C_HW_P_LP 0x020000 /* Parallel port interface */
|
||||
#define I2C_HW_P_ISA 0x020001 /* generic ISA Bus inteface card */
|
||||
#define I2C_HW_P_ELEK 0x020002 /* Elektor ISA Bus inteface card */
|
||||
|
||||
/* --- PCA 9564 based algorithms */
|
||||
#define I2C_HW_A_ISA 0x00 /* generic ISA Bus interface card */
|
||||
#define I2C_HW_A_ISA 0x1a0000 /* generic ISA Bus interface card */
|
||||
|
||||
/* --- ACPI Embedded controller algorithms */
|
||||
#define I2C_HW_ACPI_EC 0x00
|
||||
#define I2C_HW_ACPI_EC 0x1f0000
|
||||
|
||||
/* --- MPC824x PowerPC adapters */
|
||||
#define I2C_HW_MPC824X 0x00 /* Motorola 8240 / 8245 */
|
||||
#define I2C_HW_MPC824X 0x100001 /* Motorola 8240 / 8245 */
|
||||
|
||||
/* --- MPC8xx PowerPC adapters */
|
||||
#define I2C_HW_MPC8XX_EPON 0x00 /* Eponymous MPC8xx I2C adapter */
|
||||
#define I2C_HW_MPC8XX_EPON 0x110000 /* Eponymous MPC8xx I2C adapter */
|
||||
|
||||
/* --- ITE based algorithms */
|
||||
#define I2C_HW_I_IIC 0x00 /* controller on the ITE */
|
||||
#define I2C_HW_I_IIC 0x080000 /* controller on the ITE */
|
||||
|
||||
/* --- PowerPC on-chip adapters */
|
||||
#define I2C_HW_OCP 0x00 /* IBM on-chip I2C adapter */
|
||||
#define I2C_HW_OCP 0x120000 /* IBM on-chip I2C adapter */
|
||||
|
||||
/* --- Broadcom SiByte adapters */
|
||||
#define I2C_HW_SIBYTE 0x00
|
||||
#define I2C_HW_SIBYTE 0x150000
|
||||
|
||||
/* --- SGI adapters */
|
||||
#define I2C_HW_SGI_VINO 0x00
|
||||
#define I2C_HW_SGI_MACE 0x01
|
||||
#define I2C_HW_SGI_VINO 0x160000
|
||||
#define I2C_HW_SGI_MACE 0x160001
|
||||
|
||||
/* --- XSCALE on-chip adapters */
|
||||
#define I2C_HW_IOP3XX 0x00
|
||||
#define I2C_HW_IOP3XX 0x140000
|
||||
|
||||
/* --- Au1550 PSC adapters adapters */
|
||||
#define I2C_HW_AU1550_PSC 0x00
|
||||
#define I2C_HW_AU1550_PSC 0x1b0000
|
||||
|
||||
/* --- SMBus only adapters */
|
||||
#define I2C_HW_SMBUS_PIIX4 0x00
|
||||
#define I2C_HW_SMBUS_ALI15X3 0x01
|
||||
#define I2C_HW_SMBUS_VIA2 0x02
|
||||
#define I2C_HW_SMBUS_VOODOO3 0x03
|
||||
#define I2C_HW_SMBUS_I801 0x04
|
||||
#define I2C_HW_SMBUS_AMD756 0x05
|
||||
#define I2C_HW_SMBUS_SIS5595 0x06
|
||||
#define I2C_HW_SMBUS_ALI1535 0x07
|
||||
#define I2C_HW_SMBUS_SIS630 0x08
|
||||
#define I2C_HW_SMBUS_SIS96X 0x09
|
||||
#define I2C_HW_SMBUS_AMD8111 0x0a
|
||||
#define I2C_HW_SMBUS_SCX200 0x0b
|
||||
#define I2C_HW_SMBUS_NFORCE2 0x0c
|
||||
#define I2C_HW_SMBUS_W9968CF 0x0d
|
||||
#define I2C_HW_SMBUS_OV511 0x0e /* OV511(+) USB 1.1 webcam ICs */
|
||||
#define I2C_HW_SMBUS_OV518 0x0f /* OV518(+) USB 1.1 webcam ICs */
|
||||
#define I2C_HW_SMBUS_OV519 0x10 /* OV519 USB 1.1 webcam IC */
|
||||
#define I2C_HW_SMBUS_OVFX2 0x11 /* Cypress/OmniVision FX2 webcam */
|
||||
#define I2C_HW_SMBUS_PIIX4 0x040000
|
||||
#define I2C_HW_SMBUS_ALI15X3 0x040001
|
||||
#define I2C_HW_SMBUS_VIA2 0x040002
|
||||
#define I2C_HW_SMBUS_VOODOO3 0x040003
|
||||
#define I2C_HW_SMBUS_I801 0x040004
|
||||
#define I2C_HW_SMBUS_AMD756 0x040005
|
||||
#define I2C_HW_SMBUS_SIS5595 0x040006
|
||||
#define I2C_HW_SMBUS_ALI1535 0x040007
|
||||
#define I2C_HW_SMBUS_SIS630 0x040008
|
||||
#define I2C_HW_SMBUS_SIS96X 0x040009
|
||||
#define I2C_HW_SMBUS_AMD8111 0x04000a
|
||||
#define I2C_HW_SMBUS_SCX200 0x04000b
|
||||
#define I2C_HW_SMBUS_NFORCE2 0x04000c
|
||||
#define I2C_HW_SMBUS_W9968CF 0x04000d
|
||||
#define I2C_HW_SMBUS_OV511 0x04000e /* OV511(+) USB 1.1 webcam ICs */
|
||||
#define I2C_HW_SMBUS_OV518 0x04000f /* OV518(+) USB 1.1 webcam ICs */
|
||||
#define I2C_HW_SMBUS_OV519 0x040010 /* OV519 USB 1.1 webcam IC */
|
||||
#define I2C_HW_SMBUS_OVFX2 0x040011 /* Cypress/OmniVision FX2 webcam */
|
||||
|
||||
/* --- ISA pseudo-adapter */
|
||||
#define I2C_HW_ISA 0x00
|
||||
#define I2C_HW_ISA 0x050000
|
||||
|
||||
/* --- IPMI pseudo-adapter */
|
||||
#define I2C_HW_IPMI 0x00
|
||||
#define I2C_HW_IPMI 0x0b0000
|
||||
|
||||
/* --- IPMB adapter */
|
||||
#define I2C_HW_IPMB 0x00
|
||||
#define I2C_HW_IPMB 0x0c0000
|
||||
|
||||
/* --- MCP107 adapter */
|
||||
#define I2C_HW_MPC107 0x00
|
||||
#define I2C_HW_MPC107 0x0d0000
|
||||
|
||||
/* --- Marvell mv64xxx i2c adapter */
|
||||
#define I2C_HW_MV64XXX 0x00
|
||||
#define I2C_HW_MV64XXX 0x190000
|
||||
|
||||
/* --- Miscellaneous adapters */
|
||||
#define I2C_HW_SAA7146 0x060000 /* SAA7146 video decoder bus */
|
||||
#define I2C_HW_SAA7134 0x090000 /* SAA7134 video decoder bus */
|
||||
|
||||
#endif /* LINUX_I2C_ID_H */
|
||||
|
|
36
include/linux/i2c-isa.h
Normal file
36
include/linux/i2c-isa.h
Normal file
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* i2c-isa.h - definitions for the i2c-isa pseudo-i2c-adapter interface
|
||||
*
|
||||
* Copyright (C) 2005 Jean Delvare <khali@linux-fr.org>
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_I2C_ISA_H
|
||||
#define _LINUX_I2C_ISA_H
|
||||
|
||||
#include <linux/i2c.h>
|
||||
|
||||
extern int i2c_isa_add_driver(struct i2c_driver *driver);
|
||||
extern int i2c_isa_del_driver(struct i2c_driver *driver);
|
||||
|
||||
/* Detect whether we are on the isa bus. This is only useful to hybrid
|
||||
(i2c+isa) drivers. */
|
||||
#define i2c_is_isa_adapter(adapptr) \
|
||||
((adapptr)->id == I2C_HW_ISA)
|
||||
#define i2c_is_isa_client(clientptr) \
|
||||
i2c_is_isa_adapter((clientptr)->adapter)
|
||||
|
||||
#endif /* _LINUX_I2C_ISA_H */
|
|
@ -1,263 +0,0 @@
|
|||
/*
|
||||
i2c-sensor.h - Part of the i2c package
|
||||
was originally sensors.h - Part of lm_sensors, Linux kernel modules
|
||||
for hardware monitoring
|
||||
Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl>
|
||||
|
||||
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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_I2C_SENSOR_H
|
||||
#define _LINUX_I2C_SENSOR_H
|
||||
|
||||
/* A structure containing detect information.
|
||||
Force variables overrule all other variables; they force a detection on
|
||||
that place. If a specific chip is given, the module blindly assumes this
|
||||
chip type is present; if a general force (kind == 0) is given, the module
|
||||
will still try to figure out what type of chip is present. This is useful
|
||||
if for some reasons the detect for SMBus or ISA address space filled
|
||||
fails.
|
||||
probe: insmod parameter. Initialize this list with I2C_CLIENT_ISA_END values.
|
||||
A list of pairs. The first value is a bus number (ANY_I2C_ISA_BUS for
|
||||
the ISA bus, -1 for any I2C bus), the second is the address.
|
||||
kind: The kind of chip. 0 equals any chip.
|
||||
*/
|
||||
struct i2c_force_data {
|
||||
unsigned short *force;
|
||||
unsigned short kind;
|
||||
};
|
||||
|
||||
/* A structure containing the detect information.
|
||||
normal_i2c: filled in by the module writer. Terminated by I2C_CLIENT_ISA_END.
|
||||
A list of I2C addresses which should normally be examined.
|
||||
normal_isa: filled in by the module writer. Terminated by SENSORS_ISA_END.
|
||||
A list of ISA addresses which should normally be examined.
|
||||
probe: insmod parameter. Initialize this list with I2C_CLIENT_ISA_END values.
|
||||
A list of pairs. The first value is a bus number (ANY_I2C_ISA_BUS for
|
||||
the ISA bus, -1 for any I2C bus), the second is the address. These
|
||||
addresses are also probed, as if they were in the 'normal' list.
|
||||
ignore: insmod parameter. Initialize this list with I2C_CLIENT_ISA_END values.
|
||||
A list of pairs. The first value is a bus number (ANY_I2C_ISA_BUS for
|
||||
the ISA bus, -1 for any I2C bus), the second is the I2C address. These
|
||||
addresses are never probed. This parameter overrules 'normal' and
|
||||
'probe', but not the 'force' lists.
|
||||
force_data: insmod parameters. A list, ending with an element of which
|
||||
the force field is NULL.
|
||||
*/
|
||||
struct i2c_address_data {
|
||||
unsigned short *normal_i2c;
|
||||
unsigned int *normal_isa;
|
||||
unsigned short *probe;
|
||||
unsigned short *ignore;
|
||||
struct i2c_force_data *forces;
|
||||
};
|
||||
|
||||
#define SENSORS_MODULE_PARM_FORCE(name) \
|
||||
I2C_CLIENT_MODULE_PARM(force_ ## name, \
|
||||
"List of adapter,address pairs which are unquestionably" \
|
||||
" assumed to contain a `" # name "' chip")
|
||||
|
||||
|
||||
/* This defines several insmod variables, and the addr_data structure */
|
||||
#define SENSORS_INSMOD \
|
||||
I2C_CLIENT_MODULE_PARM(probe, \
|
||||
"List of adapter,address pairs to scan additionally"); \
|
||||
I2C_CLIENT_MODULE_PARM(ignore, \
|
||||
"List of adapter,address pairs not to scan"); \
|
||||
static struct i2c_address_data addr_data = { \
|
||||
.normal_i2c = normal_i2c, \
|
||||
.normal_isa = normal_isa, \
|
||||
.probe = probe, \
|
||||
.ignore = ignore, \
|
||||
.forces = forces, \
|
||||
}
|
||||
|
||||
/* The following functions create an enum with the chip names as elements.
|
||||
The first element of the enum is any_chip. These are the only macros
|
||||
a module will want to use. */
|
||||
|
||||
#define SENSORS_INSMOD_0 \
|
||||
enum chips { any_chip }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, \
|
||||
"List of adapter,address pairs to boldly assume " \
|
||||
"to be present"); \
|
||||
static struct i2c_force_data forces[] = {{force,any_chip},{NULL}}; \
|
||||
SENSORS_INSMOD
|
||||
|
||||
#define SENSORS_INSMOD_1(chip1) \
|
||||
enum chips { any_chip, chip1 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, \
|
||||
"List of adapter,address pairs to boldly assume " \
|
||||
"to be present"); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip1); \
|
||||
static struct i2c_force_data forces[] = {{force,any_chip},\
|
||||
{force_ ## chip1,chip1}, \
|
||||
{NULL}}; \
|
||||
SENSORS_INSMOD
|
||||
|
||||
#define SENSORS_INSMOD_2(chip1,chip2) \
|
||||
enum chips { any_chip, chip1, chip2 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, \
|
||||
"List of adapter,address pairs to boldly assume " \
|
||||
"to be present"); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip1); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip2); \
|
||||
static struct i2c_force_data forces[] = {{force,any_chip}, \
|
||||
{force_ ## chip1,chip1}, \
|
||||
{force_ ## chip2,chip2}, \
|
||||
{NULL}}; \
|
||||
SENSORS_INSMOD
|
||||
|
||||
#define SENSORS_INSMOD_3(chip1,chip2,chip3) \
|
||||
enum chips { any_chip, chip1, chip2, chip3 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, \
|
||||
"List of adapter,address pairs to boldly assume " \
|
||||
"to be present"); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip1); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip2); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip3); \
|
||||
static struct i2c_force_data forces[] = {{force,any_chip}, \
|
||||
{force_ ## chip1,chip1}, \
|
||||
{force_ ## chip2,chip2}, \
|
||||
{force_ ## chip3,chip3}, \
|
||||
{NULL}}; \
|
||||
SENSORS_INSMOD
|
||||
|
||||
#define SENSORS_INSMOD_4(chip1,chip2,chip3,chip4) \
|
||||
enum chips { any_chip, chip1, chip2, chip3, chip4 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, \
|
||||
"List of adapter,address pairs to boldly assume " \
|
||||
"to be present"); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip1); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip2); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip3); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip4); \
|
||||
static struct i2c_force_data forces[] = {{force,any_chip}, \
|
||||
{force_ ## chip1,chip1}, \
|
||||
{force_ ## chip2,chip2}, \
|
||||
{force_ ## chip3,chip3}, \
|
||||
{force_ ## chip4,chip4}, \
|
||||
{NULL}}; \
|
||||
SENSORS_INSMOD
|
||||
|
||||
#define SENSORS_INSMOD_5(chip1,chip2,chip3,chip4,chip5) \
|
||||
enum chips { any_chip, chip1, chip2, chip3, chip4, chip5 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, \
|
||||
"List of adapter,address pairs to boldly assume " \
|
||||
"to be present"); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip1); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip2); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip3); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip4); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip5); \
|
||||
static struct i2c_force_data forces[] = {{force,any_chip}, \
|
||||
{force_ ## chip1,chip1}, \
|
||||
{force_ ## chip2,chip2}, \
|
||||
{force_ ## chip3,chip3}, \
|
||||
{force_ ## chip4,chip4}, \
|
||||
{force_ ## chip5,chip5}, \
|
||||
{NULL}}; \
|
||||
SENSORS_INSMOD
|
||||
|
||||
#define SENSORS_INSMOD_6(chip1,chip2,chip3,chip4,chip5,chip6) \
|
||||
enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, \
|
||||
"List of adapter,address pairs to boldly assume " \
|
||||
"to be present"); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip1); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip2); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip3); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip4); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip5); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip6); \
|
||||
static struct i2c_force_data forces[] = {{force,any_chip}, \
|
||||
{force_ ## chip1,chip1}, \
|
||||
{force_ ## chip2,chip2}, \
|
||||
{force_ ## chip3,chip3}, \
|
||||
{force_ ## chip4,chip4}, \
|
||||
{force_ ## chip5,chip5}, \
|
||||
{force_ ## chip6,chip6}, \
|
||||
{NULL}}; \
|
||||
SENSORS_INSMOD
|
||||
|
||||
#define SENSORS_INSMOD_7(chip1,chip2,chip3,chip4,chip5,chip6,chip7) \
|
||||
enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, chip7 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, \
|
||||
"List of adapter,address pairs to boldly assume " \
|
||||
"to be present"); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip1); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip2); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip3); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip4); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip5); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip6); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip7); \
|
||||
static struct i2c_force_data forces[] = {{force,any_chip}, \
|
||||
{force_ ## chip1,chip1}, \
|
||||
{force_ ## chip2,chip2}, \
|
||||
{force_ ## chip3,chip3}, \
|
||||
{force_ ## chip4,chip4}, \
|
||||
{force_ ## chip5,chip5}, \
|
||||
{force_ ## chip6,chip6}, \
|
||||
{force_ ## chip7,chip7}, \
|
||||
{NULL}}; \
|
||||
SENSORS_INSMOD
|
||||
|
||||
#define SENSORS_INSMOD_8(chip1,chip2,chip3,chip4,chip5,chip6,chip7,chip8) \
|
||||
enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, chip7, chip8 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, \
|
||||
"List of adapter,address pairs to boldly assume " \
|
||||
"to be present"); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip1); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip2); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip3); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip4); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip5); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip6); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip7); \
|
||||
SENSORS_MODULE_PARM_FORCE(chip8); \
|
||||
static struct i2c_force_data forces[] = {{force,any_chip}, \
|
||||
{force_ ## chip1,chip1}, \
|
||||
{force_ ## chip2,chip2}, \
|
||||
{force_ ## chip3,chip3}, \
|
||||
{force_ ## chip4,chip4}, \
|
||||
{force_ ## chip5,chip5}, \
|
||||
{force_ ## chip6,chip6}, \
|
||||
{force_ ## chip7,chip7}, \
|
||||
{force_ ## chip8,chip8}, \
|
||||
{NULL}}; \
|
||||
SENSORS_INSMOD
|
||||
|
||||
/* Detect function. It iterates over all possible addresses itself. For
|
||||
SMBus addresses, it will only call found_proc if some client is connected
|
||||
to the SMBus (unless a 'force' matched); for ISA detections, this is not
|
||||
done. */
|
||||
extern int i2c_detect(struct i2c_adapter *adapter,
|
||||
struct i2c_address_data *address_data,
|
||||
int (*found_proc) (struct i2c_adapter *, int, int));
|
||||
|
||||
|
||||
/* This macro is used to scale user-input to sensible values in almost all
|
||||
chip drivers. */
|
||||
static inline int SENSORS_LIMIT(long value, long low, long high)
|
||||
{
|
||||
if (value < low)
|
||||
return low;
|
||||
else if (value > high)
|
||||
return high;
|
||||
else
|
||||
return value;
|
||||
}
|
||||
#endif /* def _LINUX_I2C_SENSOR_H */
|
|
@ -1,111 +0,0 @@
|
|||
/*
|
||||
i2c-vid.h - Part of lm_sensors, Linux kernel modules for hardware
|
||||
monitoring
|
||||
Copyright (c) 2002 Mark D. Studebaker <mdsxyz123@yahoo.com>
|
||||
With assistance from Trent Piepho <xyzzy@speakeasy.org>
|
||||
|
||||
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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
This file contains common code for decoding VID pins.
|
||||
This file is #included in various chip drivers in this directory.
|
||||
As the user is unlikely to load more than one driver which
|
||||
includes this code we don't worry about the wasted space.
|
||||
Reference: VRM x.y DC-DC Converter Design Guidelines,
|
||||
available at http://developer.intel.com
|
||||
*/
|
||||
|
||||
/*
|
||||
AMD Opteron processors don't follow the Intel VRM spec.
|
||||
I'm going to "make up" 2.4 as the VRM spec for the Opterons.
|
||||
No good reason just a mnemonic for the 24x Opteron processor
|
||||
series
|
||||
|
||||
Opteron VID encoding is:
|
||||
|
||||
00000 = 1.550 V
|
||||
00001 = 1.525 V
|
||||
. . . .
|
||||
11110 = 0.800 V
|
||||
11111 = 0.000 V (off)
|
||||
*/
|
||||
|
||||
/*
|
||||
Legal val values 0x00 - 0x1f; except for VRD 10.0, 0x00 - 0x3f.
|
||||
vrm is the Intel VRM document version.
|
||||
Note: vrm version is scaled by 10 and the return value is scaled by 1000
|
||||
to avoid floating point in the kernel.
|
||||
*/
|
||||
|
||||
int i2c_which_vrm(void);
|
||||
|
||||
#define DEFAULT_VRM 82
|
||||
|
||||
static inline int vid_from_reg(int val, int vrm)
|
||||
{
|
||||
int vid;
|
||||
|
||||
switch(vrm) {
|
||||
|
||||
case 0:
|
||||
return 0;
|
||||
|
||||
case 100: /* VRD 10.0 */
|
||||
if((val & 0x1f) == 0x1f)
|
||||
return 0;
|
||||
if((val & 0x1f) <= 0x09 || val == 0x0a)
|
||||
vid = 10875 - (val & 0x1f) * 250;
|
||||
else
|
||||
vid = 18625 - (val & 0x1f) * 250;
|
||||
if(val & 0x20)
|
||||
vid -= 125;
|
||||
vid /= 10; /* only return 3 dec. places for now */
|
||||
return vid;
|
||||
|
||||
case 24: /* Opteron processor */
|
||||
return(val == 0x1f ? 0 : 1550 - val * 25);
|
||||
|
||||
case 91: /* VRM 9.1 */
|
||||
case 90: /* VRM 9.0 */
|
||||
return(val == 0x1f ? 0 :
|
||||
1850 - val * 25);
|
||||
|
||||
case 85: /* VRM 8.5 */
|
||||
return((val & 0x10 ? 25 : 0) +
|
||||
((val & 0x0f) > 0x04 ? 2050 : 1250) -
|
||||
((val & 0x0f) * 50));
|
||||
|
||||
case 84: /* VRM 8.4 */
|
||||
val &= 0x0f;
|
||||
/* fall through */
|
||||
default: /* VRM 8.2 */
|
||||
return(val == 0x1f ? 0 :
|
||||
val & 0x10 ? 5100 - (val) * 100 :
|
||||
2050 - (val) * 50);
|
||||
}
|
||||
}
|
||||
|
||||
static inline int vid_to_reg(int val, int vrm)
|
||||
{
|
||||
switch (vrm) {
|
||||
case 91: /* VRM 9.1 */
|
||||
case 90: /* VRM 9.0 */
|
||||
return ((val >= 1100) && (val <= 1850) ?
|
||||
((18499 - val * 10) / 25 + 5) / 10 : -1);
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
|
@ -34,6 +34,13 @@
|
|||
#include <linux/device.h> /* for struct device */
|
||||
#include <asm/semaphore.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 ------------------------------------------------ */
|
||||
|
||||
struct i2c_msg;
|
||||
|
@ -41,7 +48,6 @@ struct i2c_algorithm;
|
|||
struct i2c_adapter;
|
||||
struct i2c_client;
|
||||
struct i2c_driver;
|
||||
struct i2c_client_address_data;
|
||||
union i2c_smbus_data;
|
||||
|
||||
/*
|
||||
|
@ -143,12 +149,9 @@ struct i2c_driver {
|
|||
*/
|
||||
struct i2c_client {
|
||||
unsigned int flags; /* div., see below */
|
||||
unsigned int addr; /* chip address - NOTE: 7bit */
|
||||
unsigned short addr; /* chip address - NOTE: 7bit */
|
||||
/* addresses are stored in the */
|
||||
/* _LOWER_ 7 bits of this char */
|
||||
/* addr: unsigned int to make lm_sensors i2c-isa adapter work
|
||||
more cleanly. It does not take any more memory space, due to
|
||||
alignment considerations */
|
||||
/* _LOWER_ 7 bits */
|
||||
struct i2c_adapter *adapter; /* the adapter we sit on */
|
||||
struct i2c_driver *driver; /* and our access routines */
|
||||
int usage_count; /* How many accesses currently */
|
||||
|
@ -160,6 +163,11 @@ struct i2c_client {
|
|||
};
|
||||
#define to_i2c_client(d) container_of(d, struct i2c_client, dev)
|
||||
|
||||
static inline struct i2c_client *kobj_to_i2c_client(struct kobject *kobj)
|
||||
{
|
||||
return to_i2c_client(container_of(kobj, struct device, kobj));
|
||||
}
|
||||
|
||||
static inline void *i2c_get_clientdata (struct i2c_client *dev)
|
||||
{
|
||||
return dev_get_drvdata (&dev->dev);
|
||||
|
@ -170,13 +178,6 @@ static inline void i2c_set_clientdata (struct i2c_client *dev, void *data)
|
|||
dev_set_drvdata (&dev->dev, data);
|
||||
}
|
||||
|
||||
#define I2C_DEVNAME(str) .name = str
|
||||
|
||||
static inline char *i2c_clientname(struct i2c_client *c)
|
||||
{
|
||||
return &c->name[0];
|
||||
}
|
||||
|
||||
/*
|
||||
* 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
|
||||
|
@ -184,9 +185,6 @@ static inline char *i2c_clientname(struct i2c_client *c)
|
|||
* to name two of the most common.
|
||||
*/
|
||||
struct i2c_algorithm {
|
||||
char name[32]; /* textual description */
|
||||
unsigned int id;
|
||||
|
||||
/* If an adapter algorithm can't do I2C-level access, set master_xfer
|
||||
to NULL. If an adapter algorithm can do SMBus access, set
|
||||
smbus_xfer. If set to NULL, the SMBus protocol is simulated
|
||||
|
@ -214,8 +212,7 @@ struct i2c_algorithm {
|
|||
*/
|
||||
struct i2c_adapter {
|
||||
struct module *owner;
|
||||
unsigned int id;/* == is algo->id | hwdep.struct->id, */
|
||||
/* for registered values see below */
|
||||
unsigned int id;
|
||||
unsigned int class;
|
||||
struct i2c_algorithm *algo;/* the algorithm to access the bus */
|
||||
void *algo_data;
|
||||
|
@ -292,12 +289,11 @@ struct i2c_client_address_data {
|
|||
unsigned short *normal_i2c;
|
||||
unsigned short *probe;
|
||||
unsigned short *ignore;
|
||||
unsigned short *force;
|
||||
unsigned short **forces;
|
||||
};
|
||||
|
||||
/* Internal numbers to terminate lists */
|
||||
#define I2C_CLIENT_END 0xfffeU
|
||||
#define I2C_CLIENT_ISA_END 0xfffefffeU
|
||||
|
||||
/* The numbers to use to set I2C bus address */
|
||||
#define ANY_I2C_BUS 0xffff
|
||||
|
@ -356,10 +352,6 @@ extern int i2c_probe(struct i2c_adapter *adapter,
|
|||
*/
|
||||
extern int i2c_control(struct i2c_client *,unsigned int, unsigned long);
|
||||
|
||||
/* This call returns a unique low identifier for each registered adapter,
|
||||
* or -1 if the adapter was not registered.
|
||||
*/
|
||||
extern int i2c_adapter_id(struct i2c_adapter *adap);
|
||||
extern struct i2c_adapter* i2c_get_adapter(int id);
|
||||
extern void i2c_put_adapter(struct i2c_adapter *adap);
|
||||
|
||||
|
@ -376,6 +368,12 @@ static inline int i2c_check_functionality(struct i2c_adapter *adap, u32 func)
|
|||
return (func & i2c_get_functionality(adap)) == func;
|
||||
}
|
||||
|
||||
/* Return id number for a specific adapter */
|
||||
static inline int i2c_adapter_id(struct i2c_adapter *adap)
|
||||
{
|
||||
return adap->nr;
|
||||
}
|
||||
|
||||
/*
|
||||
* I2C Message - used for pure i2c transaction, also from /dev interface
|
||||
*/
|
||||
|
@ -510,9 +508,6 @@ union i2c_smbus_data {
|
|||
#define I2C_FUNCS 0x0705 /* Get the adapter functionality */
|
||||
#define I2C_RDWR 0x0707 /* Combined R/W transfer (one stop only)*/
|
||||
#define I2C_PEC 0x0708 /* != 0 for SMBus PEC */
|
||||
#if 0
|
||||
#define I2C_ACK_TEST 0x0710 /* See if a slave is at a specific address */
|
||||
#endif
|
||||
|
||||
#define I2C_SMBUS 0x0720 /* SMBus-level access */
|
||||
|
||||
|
@ -556,27 +551,148 @@ union i2c_smbus_data {
|
|||
module_param_array(var, short, &var##_num, 0); \
|
||||
MODULE_PARM_DESC(var,desc)
|
||||
|
||||
/* This is the one you want to use in your own modules */
|
||||
#define I2C_CLIENT_MODULE_PARM_FORCE(name) \
|
||||
I2C_CLIENT_MODULE_PARM(force_##name, \
|
||||
"List of adapter,address pairs which are " \
|
||||
"unquestionably assumed to contain a `" \
|
||||
# name "' chip")
|
||||
|
||||
|
||||
#define I2C_CLIENT_INSMOD_COMMON \
|
||||
I2C_CLIENT_MODULE_PARM(probe, "List of adapter,address pairs to scan " \
|
||||
"additionally"); \
|
||||
I2C_CLIENT_MODULE_PARM(ignore, "List of adapter,address pairs not to " \
|
||||
"scan"); \
|
||||
static struct i2c_client_address_data addr_data = { \
|
||||
.normal_i2c = normal_i2c, \
|
||||
.probe = probe, \
|
||||
.ignore = ignore, \
|
||||
.forces = forces, \
|
||||
}
|
||||
|
||||
/* These are the ones you want to use in your own drivers. Pick the one
|
||||
which matches the number of devices the driver differenciates between. */
|
||||
#define I2C_CLIENT_INSMOD \
|
||||
I2C_CLIENT_MODULE_PARM(probe, \
|
||||
"List of adapter,address pairs to scan additionally"); \
|
||||
I2C_CLIENT_MODULE_PARM(ignore, \
|
||||
"List of adapter,address pairs not to scan"); \
|
||||
I2C_CLIENT_MODULE_PARM(force, \
|
||||
"List of adapter,address pairs to boldly assume " \
|
||||
"to be present"); \
|
||||
static struct i2c_client_address_data addr_data = { \
|
||||
.normal_i2c = normal_i2c, \
|
||||
.probe = probe, \
|
||||
.ignore = ignore, \
|
||||
.force = force, \
|
||||
}
|
||||
static unsigned short *forces[] = { \
|
||||
force, \
|
||||
NULL \
|
||||
}; \
|
||||
I2C_CLIENT_INSMOD_COMMON
|
||||
|
||||
/* Detect whether we are on the isa bus. If this returns true, all i2c
|
||||
access will fail! */
|
||||
#define i2c_is_isa_client(clientptr) \
|
||||
((clientptr)->adapter->algo->id == I2C_ALGO_ISA)
|
||||
#define i2c_is_isa_adapter(adapptr) \
|
||||
((adapptr)->algo->id == I2C_ALGO_ISA)
|
||||
#define I2C_CLIENT_INSMOD_1(chip1) \
|
||||
enum chips { any_chip, chip1 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \
|
||||
"boldly assume to be present"); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
|
||||
static unsigned short *forces[] = { force, force_##chip1, NULL }; \
|
||||
I2C_CLIENT_INSMOD_COMMON
|
||||
|
||||
#define I2C_CLIENT_INSMOD_2(chip1, chip2) \
|
||||
enum chips { any_chip, chip1, chip2 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \
|
||||
"boldly assume to be present"); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
|
||||
static unsigned short *forces[] = { force, force_##chip1, \
|
||||
force_##chip2, NULL }; \
|
||||
I2C_CLIENT_INSMOD_COMMON
|
||||
|
||||
#define I2C_CLIENT_INSMOD_3(chip1, chip2, chip3) \
|
||||
enum chips { any_chip, chip1, chip2, chip3 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \
|
||||
"boldly assume to be present"); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
|
||||
static unsigned short *forces[] = { force, force_##chip1, \
|
||||
force_##chip2, force_##chip3, \
|
||||
NULL }; \
|
||||
I2C_CLIENT_INSMOD_COMMON
|
||||
|
||||
#define I2C_CLIENT_INSMOD_4(chip1, chip2, chip3, chip4) \
|
||||
enum chips { any_chip, chip1, chip2, chip3, chip4 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \
|
||||
"boldly assume to be present"); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
|
||||
static unsigned short *forces[] = { force, force_##chip1, \
|
||||
force_##chip2, force_##chip3, \
|
||||
force_##chip4, NULL}; \
|
||||
I2C_CLIENT_INSMOD_COMMON
|
||||
|
||||
#define I2C_CLIENT_INSMOD_5(chip1, chip2, chip3, chip4, chip5) \
|
||||
enum chips { any_chip, chip1, chip2, chip3, chip4, chip5 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \
|
||||
"boldly assume to be present"); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip5); \
|
||||
static unsigned short *forces[] = { force, force_##chip1, \
|
||||
force_##chip2, force_##chip3, \
|
||||
force_##chip4, force_##chip5, \
|
||||
NULL }; \
|
||||
I2C_CLIENT_INSMOD_COMMON
|
||||
|
||||
#define I2C_CLIENT_INSMOD_6(chip1, chip2, chip3, chip4, chip5, chip6) \
|
||||
enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \
|
||||
"boldly assume to be present"); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip5); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip6); \
|
||||
static unsigned short *forces[] = { force, force_##chip1, \
|
||||
force_##chip2, force_##chip3, \
|
||||
force_##chip4, force_##chip5, \
|
||||
force_##chip6, NULL }; \
|
||||
I2C_CLIENT_INSMOD_COMMON
|
||||
|
||||
#define I2C_CLIENT_INSMOD_7(chip1, chip2, chip3, chip4, chip5, chip6, chip7) \
|
||||
enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, \
|
||||
chip7 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \
|
||||
"boldly assume to be present"); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip5); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip6); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip7); \
|
||||
static unsigned short *forces[] = { force, force_##chip1, \
|
||||
force_##chip2, force_##chip3, \
|
||||
force_##chip4, force_##chip5, \
|
||||
force_##chip6, force_##chip7, \
|
||||
NULL }; \
|
||||
I2C_CLIENT_INSMOD_COMMON
|
||||
|
||||
#define I2C_CLIENT_INSMOD_8(chip1, chip2, chip3, chip4, chip5, chip6, chip7, chip8) \
|
||||
enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, \
|
||||
chip7, chip8 }; \
|
||||
I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \
|
||||
"boldly assume to be present"); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip1); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip2); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip3); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip4); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip5); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip6); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip7); \
|
||||
I2C_CLIENT_MODULE_PARM_FORCE(chip8); \
|
||||
static unsigned short *forces[] = { force, force_##chip1, \
|
||||
force_##chip2, force_##chip3, \
|
||||
force_##chip4, force_##chip5, \
|
||||
force_##chip6, force_##chip7, \
|
||||
force_##chip8, NULL }; \
|
||||
I2C_CLIENT_INSMOD_COMMON
|
||||
|
||||
#endif /* _LINUX_I2C_H */
|
||||
|
|
|
@ -77,6 +77,7 @@ struct tun_struct {
|
|||
#define TUNSETIFF _IOW('T', 202, int)
|
||||
#define TUNSETPERSIST _IOW('T', 203, int)
|
||||
#define TUNSETOWNER _IOW('T', 204, int)
|
||||
#define TUNSETLINK _IOW('T', 205, int)
|
||||
|
||||
/* TUNSETIFF ifr flags */
|
||||
#define IFF_TUN 0x0001
|
||||
|
|
|
@ -47,6 +47,7 @@ struct inotify_event {
|
|||
#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* moves */
|
||||
|
||||
/* special flags */
|
||||
#define IN_MASK_ADD 0x20000000 /* add to the mask of an already existing watch */
|
||||
#define IN_ISDIR 0x40000000 /* event occurred against dir */
|
||||
#define IN_ONESHOT 0x80000000 /* only send event once */
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ struct input_absinfo {
|
|||
#define EVIOCGKEY(len) _IOC(_IOC_READ, 'E', 0x18, len) /* get global keystate */
|
||||
#define EVIOCGLED(len) _IOC(_IOC_READ, 'E', 0x19, len) /* get all LEDs */
|
||||
#define EVIOCGSND(len) _IOC(_IOC_READ, 'E', 0x1a, len) /* get all sounds status */
|
||||
#define EVIOCGSW(len) _IOC(_IOC_READ, 'E', 0x1b, len) /* get all switch states */
|
||||
|
||||
#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len) /* get event bits */
|
||||
#define EVIOCGABS(abs) _IOR('E', 0x40 + abs, struct input_absinfo) /* get abs value/limits */
|
||||
|
@ -86,6 +87,7 @@ struct input_absinfo {
|
|||
#define EV_REL 0x02
|
||||
#define EV_ABS 0x03
|
||||
#define EV_MSC 0x04
|
||||
#define EV_SW 0x05
|
||||
#define EV_LED 0x11
|
||||
#define EV_SND 0x12
|
||||
#define EV_REP 0x14
|
||||
|
@ -550,6 +552,20 @@ struct input_absinfo {
|
|||
#define ABS_MISC 0x28
|
||||
#define ABS_MAX 0x3f
|
||||
|
||||
/*
|
||||
* Switch events
|
||||
*/
|
||||
|
||||
#define SW_0 0x00
|
||||
#define SW_1 0x01
|
||||
#define SW_2 0x02
|
||||
#define SW_3 0x03
|
||||
#define SW_4 0x04
|
||||
#define SW_5 0x05
|
||||
#define SW_6 0x06
|
||||
#define SW_7 0x07
|
||||
#define SW_MAX 0x0f
|
||||
|
||||
/*
|
||||
* Misc events
|
||||
*/
|
||||
|
@ -824,6 +840,7 @@ struct input_dev {
|
|||
unsigned long ledbit[NBITS(LED_MAX)];
|
||||
unsigned long sndbit[NBITS(SND_MAX)];
|
||||
unsigned long ffbit[NBITS(FF_MAX)];
|
||||
unsigned long swbit[NBITS(SW_MAX)];
|
||||
int ff_effects_max;
|
||||
|
||||
unsigned int keycodemax;
|
||||
|
@ -844,6 +861,7 @@ struct input_dev {
|
|||
unsigned long key[NBITS(KEY_MAX)];
|
||||
unsigned long led[NBITS(LED_MAX)];
|
||||
unsigned long snd[NBITS(SND_MAX)];
|
||||
unsigned long sw[NBITS(SW_MAX)];
|
||||
|
||||
int absmax[ABS_MAX + 1];
|
||||
int absmin[ABS_MAX + 1];
|
||||
|
@ -886,6 +904,7 @@ struct input_dev {
|
|||
#define INPUT_DEVICE_ID_MATCH_LEDBIT 0x200
|
||||
#define INPUT_DEVICE_ID_MATCH_SNDBIT 0x400
|
||||
#define INPUT_DEVICE_ID_MATCH_FFBIT 0x800
|
||||
#define INPUT_DEVICE_ID_MATCH_SWBIT 0x1000
|
||||
|
||||
#define INPUT_DEVICE_ID_MATCH_DEVICE\
|
||||
(INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT)
|
||||
|
@ -906,6 +925,7 @@ struct input_device_id {
|
|||
unsigned long ledbit[NBITS(LED_MAX)];
|
||||
unsigned long sndbit[NBITS(SND_MAX)];
|
||||
unsigned long ffbit[NBITS(FF_MAX)];
|
||||
unsigned long swbit[NBITS(SW_MAX)];
|
||||
|
||||
unsigned long driver_info;
|
||||
};
|
||||
|
@ -998,6 +1018,11 @@ static inline void input_report_ff_status(struct input_dev *dev, unsigned int co
|
|||
input_event(dev, EV_FF_STATUS, code, value);
|
||||
}
|
||||
|
||||
static inline void input_report_switch(struct input_dev *dev, unsigned int code, int value)
|
||||
{
|
||||
input_event(dev, EV_SW, code, !!value);
|
||||
}
|
||||
|
||||
static inline void input_regs(struct input_dev *dev, struct pt_regs *regs)
|
||||
{
|
||||
dev->regs = regs;
|
||||
|
|
|
@ -14,26 +14,4 @@ struct ioctl_trans {
|
|||
struct ioctl_trans *next;
|
||||
};
|
||||
|
||||
/*
|
||||
* Register an 32bit ioctl translation handler for ioctl cmd.
|
||||
*
|
||||
* handler == NULL: use 64bit ioctl handler.
|
||||
* arguments to handler: fd: file descriptor
|
||||
* cmd: ioctl command.
|
||||
* arg: ioctl argument
|
||||
* struct file *file: file descriptor pointer.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
extern int __deprecated register_ioctl32_conversion(unsigned int cmd,
|
||||
ioctl_trans_handler_t handler);
|
||||
extern int __deprecated unregister_ioctl32_conversion(unsigned int cmd);
|
||||
|
||||
#else
|
||||
|
||||
#define register_ioctl32_conversion(cmd, handler) ({ 0; })
|
||||
#define unregister_ioctl32_conversion(cmd) ({ 0; })
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#define __LINUX_IPMI_H
|
||||
|
||||
#include <linux/ipmi_msgdefs.h>
|
||||
#include <linux/compiler.h>
|
||||
|
||||
/*
|
||||
* This file describes an interface to an IPMI driver. You have to
|
||||
|
@ -241,7 +242,8 @@ struct ipmi_recv_msg
|
|||
/* The user_msg_data is the data supplied when a message was
|
||||
sent, if this is a response to a sent message. If this is
|
||||
not a response to a sent message, then user_msg_data will
|
||||
be NULL. */
|
||||
be NULL. If the user above is NULL, then this will be the
|
||||
intf. */
|
||||
void *user_msg_data;
|
||||
|
||||
/* Call this when done with the message. It will presumably free
|
||||
|
@ -298,13 +300,19 @@ void ipmi_get_version(ipmi_user_t user,
|
|||
this user, so it will affect all users of this interface. This is
|
||||
so some initialization code can come in and do the OEM-specific
|
||||
things it takes to determine your address (if not the BMC) and set
|
||||
it for everyone else. */
|
||||
void ipmi_set_my_address(ipmi_user_t user,
|
||||
unsigned char address);
|
||||
unsigned char ipmi_get_my_address(ipmi_user_t user);
|
||||
void ipmi_set_my_LUN(ipmi_user_t user,
|
||||
unsigned char LUN);
|
||||
unsigned char ipmi_get_my_LUN(ipmi_user_t user);
|
||||
it for everyone else. Note that each channel can have its own address. */
|
||||
int ipmi_set_my_address(ipmi_user_t user,
|
||||
unsigned int channel,
|
||||
unsigned char address);
|
||||
int ipmi_get_my_address(ipmi_user_t user,
|
||||
unsigned int channel,
|
||||
unsigned char *address);
|
||||
int ipmi_set_my_LUN(ipmi_user_t user,
|
||||
unsigned int channel,
|
||||
unsigned char LUN);
|
||||
int ipmi_get_my_LUN(ipmi_user_t user,
|
||||
unsigned int channel,
|
||||
unsigned char *LUN);
|
||||
|
||||
/*
|
||||
* Like ipmi_request, but lets you specify the number of retries and
|
||||
|
@ -585,6 +593,16 @@ struct ipmi_cmdspec
|
|||
* things it takes to determine your address (if not the BMC) and set
|
||||
* it for everyone else. You should probably leave the LUN alone.
|
||||
*/
|
||||
struct ipmi_channel_lun_address_set
|
||||
{
|
||||
unsigned short channel;
|
||||
unsigned char value;
|
||||
};
|
||||
#define IPMICTL_SET_MY_CHANNEL_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 24, struct ipmi_channel_lun_address_set)
|
||||
#define IPMICTL_GET_MY_CHANNEL_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 25, struct ipmi_channel_lun_address_set)
|
||||
#define IPMICTL_SET_MY_CHANNEL_LUN_CMD _IOR(IPMI_IOC_MAGIC, 26, struct ipmi_channel_lun_address_set)
|
||||
#define IPMICTL_GET_MY_CHANNEL_LUN_CMD _IOR(IPMI_IOC_MAGIC, 27, struct ipmi_channel_lun_address_set)
|
||||
/* Legacy interfaces, these only set IPMB 0. */
|
||||
#define IPMICTL_SET_MY_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 17, unsigned int)
|
||||
#define IPMICTL_GET_MY_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 18, unsigned int)
|
||||
#define IPMICTL_SET_MY_LUN_CMD _IOR(IPMI_IOC_MAGIC, 19, unsigned int)
|
||||
|
|
|
@ -32,7 +32,12 @@
|
|||
#define IRQ_WAITING 32 /* IRQ not yet seen - for autodetection */
|
||||
#define IRQ_LEVEL 64 /* IRQ level triggered */
|
||||
#define IRQ_MASKED 128 /* IRQ masked - shouldn't be seen again */
|
||||
#define IRQ_PER_CPU 256 /* IRQ is per CPU */
|
||||
#if defined(ARCH_HAS_IRQ_PER_CPU)
|
||||
# define IRQ_PER_CPU 256 /* IRQ is per CPU */
|
||||
# define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU)
|
||||
#else
|
||||
# define CHECK_IRQ_PER_CPU(var) 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Interrupt controller descriptor. This is all we need
|
||||
|
@ -71,16 +76,139 @@ typedef struct irq_desc {
|
|||
unsigned int irq_count; /* For detecting broken interrupts */
|
||||
unsigned int irqs_unhandled;
|
||||
spinlock_t lock;
|
||||
#if defined (CONFIG_GENERIC_PENDING_IRQ) || defined (CONFIG_IRQBALANCE)
|
||||
unsigned int move_irq; /* Flag need to re-target intr dest*/
|
||||
#endif
|
||||
} ____cacheline_aligned irq_desc_t;
|
||||
|
||||
extern irq_desc_t irq_desc [NR_IRQS];
|
||||
|
||||
/* Return a pointer to the irq descriptor for IRQ. */
|
||||
static inline irq_desc_t *
|
||||
irq_descp (int irq)
|
||||
{
|
||||
return irq_desc + irq;
|
||||
}
|
||||
|
||||
#include <asm/hw_irq.h> /* the arch dependent stuff */
|
||||
|
||||
extern int setup_irq(unsigned int irq, struct irqaction * new);
|
||||
|
||||
#ifdef CONFIG_GENERIC_HARDIRQS
|
||||
extern cpumask_t irq_affinity[NR_IRQS];
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
static inline void set_native_irq_info(int irq, cpumask_t mask)
|
||||
{
|
||||
irq_affinity[irq] = mask;
|
||||
}
|
||||
#else
|
||||
static inline void set_native_irq_info(int irq, cpumask_t mask)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
#if defined (CONFIG_GENERIC_PENDING_IRQ) || defined (CONFIG_IRQBALANCE)
|
||||
extern cpumask_t pending_irq_cpumask[NR_IRQS];
|
||||
|
||||
static inline void set_pending_irq(unsigned int irq, cpumask_t mask)
|
||||
{
|
||||
irq_desc_t *desc = irq_desc + irq;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&desc->lock, flags);
|
||||
desc->move_irq = 1;
|
||||
pending_irq_cpumask[irq] = mask;
|
||||
spin_unlock_irqrestore(&desc->lock, flags);
|
||||
}
|
||||
|
||||
static inline void
|
||||
move_native_irq(int irq)
|
||||
{
|
||||
cpumask_t tmp;
|
||||
irq_desc_t *desc = irq_descp(irq);
|
||||
|
||||
if (likely (!desc->move_irq))
|
||||
return;
|
||||
|
||||
desc->move_irq = 0;
|
||||
|
||||
if (likely(cpus_empty(pending_irq_cpumask[irq])))
|
||||
return;
|
||||
|
||||
if (!desc->handler->set_affinity)
|
||||
return;
|
||||
|
||||
/* note - we hold the desc->lock */
|
||||
cpus_and(tmp, pending_irq_cpumask[irq], cpu_online_map);
|
||||
|
||||
/*
|
||||
* If there was a valid mask to work with, please
|
||||
* do the disable, re-program, enable sequence.
|
||||
* This is *not* particularly important for level triggered
|
||||
* but in a edge trigger case, we might be setting rte
|
||||
* when an active trigger is comming in. This could
|
||||
* cause some ioapics to mal-function.
|
||||
* Being paranoid i guess!
|
||||
*/
|
||||
if (unlikely(!cpus_empty(tmp))) {
|
||||
desc->handler->disable(irq);
|
||||
desc->handler->set_affinity(irq,tmp);
|
||||
desc->handler->enable(irq);
|
||||
}
|
||||
cpus_clear(pending_irq_cpumask[irq]);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PCI_MSI
|
||||
/*
|
||||
* Wonder why these are dummies?
|
||||
* For e.g the set_ioapic_affinity_vector() calls the set_ioapic_affinity_irq()
|
||||
* counter part after translating the vector to irq info. We need to perform
|
||||
* this operation on the real irq, when we dont use vector, i.e when
|
||||
* pci_use_vector() is false.
|
||||
*/
|
||||
static inline void move_irq(int irq)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void set_irq_info(int irq, cpumask_t mask)
|
||||
{
|
||||
}
|
||||
|
||||
#else // CONFIG_PCI_MSI
|
||||
|
||||
static inline void move_irq(int irq)
|
||||
{
|
||||
move_native_irq(irq);
|
||||
}
|
||||
|
||||
static inline void set_irq_info(int irq, cpumask_t mask)
|
||||
{
|
||||
set_native_irq_info(irq, mask);
|
||||
}
|
||||
#endif // CONFIG_PCI_MSI
|
||||
|
||||
#else // CONFIG_GENERIC_PENDING_IRQ || CONFIG_IRQBALANCE
|
||||
|
||||
#define move_irq(x)
|
||||
#define move_native_irq(x)
|
||||
#define set_pending_irq(x,y)
|
||||
static inline void set_irq_info(int irq, cpumask_t mask)
|
||||
{
|
||||
set_native_irq_info(irq, mask);
|
||||
}
|
||||
|
||||
#endif // CONFIG_GENERIC_PENDING_IRQ
|
||||
|
||||
#else // CONFIG_SMP
|
||||
|
||||
#define move_irq(x)
|
||||
#define move_native_irq(x)
|
||||
|
||||
#endif // CONFIG_SMP
|
||||
|
||||
extern int no_irq_affinity;
|
||||
extern int noirqdebug_setup(char *str);
|
||||
|
||||
|
|
|
@ -150,7 +150,6 @@ typedef struct {
|
|||
#include <linux/errno.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/major.h>
|
||||
#include <asm/segment.h>
|
||||
#include <asm/io.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/signal.h>
|
||||
|
|
|
@ -914,7 +914,6 @@ extern int journal_wipe (journal_t *, int);
|
|||
extern int journal_skip_recovery (journal_t *);
|
||||
extern void journal_update_superblock (journal_t *, int);
|
||||
extern void __journal_abort_hard (journal_t *);
|
||||
extern void __journal_abort_soft (journal_t *, int);
|
||||
extern void journal_abort (journal_t *, int);
|
||||
extern int journal_errno (journal_t *);
|
||||
extern void journal_ack_err (journal_t *);
|
||||
|
|
|
@ -9,20 +9,25 @@
|
|||
* This file is rleased under the GPL v2.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_KLIST_H
|
||||
#define _LINUX_KLIST_H
|
||||
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/completion.h>
|
||||
#include <linux/kref.h>
|
||||
#include <linux/list.h>
|
||||
|
||||
|
||||
struct klist_node;
|
||||
struct klist {
|
||||
spinlock_t k_lock;
|
||||
struct list_head k_list;
|
||||
void (*get)(struct klist_node *);
|
||||
void (*put)(struct klist_node *);
|
||||
};
|
||||
|
||||
|
||||
extern void klist_init(struct klist * k);
|
||||
|
||||
extern void klist_init(struct klist * k, void (*get)(struct klist_node *),
|
||||
void (*put)(struct klist_node *));
|
||||
|
||||
struct klist_node {
|
||||
struct klist * n_klist;
|
||||
|
@ -31,8 +36,8 @@ struct klist_node {
|
|||
struct completion n_removed;
|
||||
};
|
||||
|
||||
extern void klist_add_tail(struct klist * k, struct klist_node * n);
|
||||
extern void klist_add_head(struct klist * k, struct klist_node * n);
|
||||
extern void klist_add_tail(struct klist_node * n, struct klist * k);
|
||||
extern void klist_add_head(struct klist_node * n, struct klist * k);
|
||||
|
||||
extern void klist_del(struct klist_node * n);
|
||||
extern void klist_remove(struct klist_node * n);
|
||||
|
@ -53,3 +58,4 @@ extern void klist_iter_init_node(struct klist * k, struct klist_iter * i,
|
|||
extern void klist_iter_exit(struct klist_iter * i);
|
||||
extern struct klist_node * klist_next(struct klist_iter * i);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -42,6 +42,9 @@
|
|||
#define KPROBE_REENTER 0x00000004
|
||||
#define KPROBE_HIT_SSDONE 0x00000008
|
||||
|
||||
/* Attach to insert probes on any functions which should be ignored*/
|
||||
#define __kprobes __attribute__((__section__(".kprobes.text")))
|
||||
|
||||
struct kprobe;
|
||||
struct pt_regs;
|
||||
struct kretprobe;
|
||||
|
|
|
@ -40,7 +40,6 @@
|
|||
#undef ATA_VERBOSE_DEBUG /* yet more debugging output */
|
||||
#undef ATA_IRQ_TRAP /* define to ack screaming irqs */
|
||||
#undef ATA_NDEBUG /* define to disable quick runtime checks */
|
||||
#undef ATA_ENABLE_ATAPI /* define to enable ATAPI support */
|
||||
#undef ATA_ENABLE_PATA /* define to enable PATA support in some
|
||||
* low-level drivers */
|
||||
#undef ATAPI_ENABLE_DMADIR /* enables ATAPI DMADIR bridge support */
|
||||
|
@ -456,6 +455,7 @@ struct pci_bits {
|
|||
unsigned long val;
|
||||
};
|
||||
|
||||
extern void ata_pci_host_stop (struct ata_host_set *host_set);
|
||||
extern struct ata_probe_ent *
|
||||
ata_pci_init_native_mode(struct pci_dev *pdev, struct ata_port_info **port);
|
||||
extern int pci_test_config_bits(struct pci_dev *pdev, struct pci_bits *bits);
|
||||
|
|
|
@ -33,6 +33,13 @@
|
|||
ALIGN; \
|
||||
name:
|
||||
|
||||
#define KPROBE_ENTRY(name) \
|
||||
.section .kprobes.text, "ax"; \
|
||||
.globl name; \
|
||||
ALIGN; \
|
||||
name:
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#define NORET_TYPE /**/
|
||||
|
|
|
@ -150,6 +150,9 @@ void mpol_free_shared_policy(struct shared_policy *p);
|
|||
struct mempolicy *mpol_shared_policy_lookup(struct shared_policy *sp,
|
||||
unsigned long idx);
|
||||
|
||||
struct mempolicy *get_vma_policy(struct task_struct *task,
|
||||
struct vm_area_struct *vma, unsigned long addr);
|
||||
|
||||
extern void numa_default_policy(void);
|
||||
extern void numa_policy_init(void);
|
||||
|
||||
|
|
|
@ -33,6 +33,13 @@ struct mmc_csd {
|
|||
unsigned int capacity;
|
||||
};
|
||||
|
||||
struct sd_scr {
|
||||
unsigned char sda_vsn;
|
||||
unsigned char bus_widths;
|
||||
#define SD_SCR_BUS_WIDTH_1 (1<<0)
|
||||
#define SD_SCR_BUS_WIDTH_4 (1<<2)
|
||||
};
|
||||
|
||||
struct mmc_host;
|
||||
|
||||
/*
|
||||
|
@ -47,19 +54,27 @@ struct mmc_card {
|
|||
#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 */
|
||||
u32 raw_cid[4]; /* raw card CID */
|
||||
u32 raw_csd[4]; /* raw card CSD */
|
||||
u32 raw_scr[2]; /* raw card SCR */
|
||||
struct mmc_cid cid; /* card identification */
|
||||
struct mmc_csd csd; /* card specific */
|
||||
struct sd_scr scr; /* extra SD information */
|
||||
};
|
||||
|
||||
#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_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_name(c) ((c)->cid.prod_name)
|
||||
#define mmc_card_id(c) ((c)->dev.bus_id)
|
||||
|
|
|
@ -46,16 +46,28 @@ struct mmc_ios {
|
|||
#define MMC_BUSMODE_OPENDRAIN 1
|
||||
#define MMC_BUSMODE_PUSHPULL 2
|
||||
|
||||
unsigned char chip_select; /* SPI chip select */
|
||||
|
||||
#define MMC_CS_DONTCARE 0
|
||||
#define MMC_CS_HIGH 1
|
||||
#define MMC_CS_LOW 2
|
||||
|
||||
unsigned char power_mode; /* power supply mode */
|
||||
|
||||
#define MMC_POWER_OFF 0
|
||||
#define MMC_POWER_UP 1
|
||||
#define MMC_POWER_ON 2
|
||||
|
||||
unsigned char bus_width; /* data bus width */
|
||||
|
||||
#define MMC_BUS_WIDTH_1 0
|
||||
#define MMC_BUS_WIDTH_4 2
|
||||
};
|
||||
|
||||
struct mmc_host_ops {
|
||||
void (*request)(struct mmc_host *host, struct mmc_request *req);
|
||||
void (*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
|
||||
int (*get_ro)(struct mmc_host *host);
|
||||
};
|
||||
|
||||
struct mmc_card;
|
||||
|
@ -70,6 +82,10 @@ struct mmc_host {
|
|||
unsigned int f_max;
|
||||
u32 ocr_avail;
|
||||
|
||||
unsigned long caps; /* Host capabilities */
|
||||
|
||||
#define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */
|
||||
|
||||
/* host specific block data */
|
||||
unsigned int max_seg_size; /* see blk_queue_max_segment_size */
|
||||
unsigned short max_hw_segs; /* see blk_queue_max_hw_segments */
|
||||
|
@ -81,6 +97,10 @@ struct mmc_host {
|
|||
struct mmc_ios ios; /* current io bus settings */
|
||||
u32 ocr; /* the current OCR setting */
|
||||
|
||||
unsigned int mode; /* current card mode of host */
|
||||
#define MMC_MODE_MMC 0
|
||||
#define MMC_MODE_SD 1
|
||||
|
||||
struct list_head cards; /* devices attached to this host */
|
||||
|
||||
wait_queue_head_t wq;
|
||||
|
|
|
@ -88,6 +88,8 @@ 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 *, unsigned int,
|
||||
struct mmc_command *, int);
|
||||
|
||||
extern int __mmc_claim_host(struct mmc_host *host, struct mmc_card *card);
|
||||
|
||||
|
|
|
@ -236,5 +236,12 @@ struct _mmc_csd {
|
|||
#define CSD_SPEC_VER_2 2 /* Implements system specification 2.0 - 2.2 */
|
||||
#define CSD_SPEC_VER_3 3 /* Implements system specification 3.1 */
|
||||
|
||||
|
||||
/*
|
||||
* SD bus widths
|
||||
*/
|
||||
#define SD_BUS_WIDTH_1 0
|
||||
#define SD_BUS_WIDTH_4 2
|
||||
|
||||
#endif /* MMC_MMC_PROTOCOL_H */
|
||||
|
||||
|
|
|
@ -487,11 +487,27 @@ struct mem_section {
|
|||
unsigned long section_mem_map;
|
||||
};
|
||||
|
||||
extern struct mem_section mem_section[NR_MEM_SECTIONS];
|
||||
#ifdef CONFIG_SPARSEMEM_EXTREME
|
||||
#define SECTIONS_PER_ROOT (PAGE_SIZE / sizeof (struct mem_section))
|
||||
#else
|
||||
#define SECTIONS_PER_ROOT 1
|
||||
#endif
|
||||
|
||||
#define SECTION_NR_TO_ROOT(sec) ((sec) / SECTIONS_PER_ROOT)
|
||||
#define NR_SECTION_ROOTS (NR_MEM_SECTIONS / SECTIONS_PER_ROOT)
|
||||
#define SECTION_ROOT_MASK (SECTIONS_PER_ROOT - 1)
|
||||
|
||||
#ifdef CONFIG_SPARSEMEM_EXTREME
|
||||
extern struct mem_section *mem_section[NR_SECTION_ROOTS];
|
||||
#else
|
||||
extern struct mem_section mem_section[NR_SECTION_ROOTS][SECTIONS_PER_ROOT];
|
||||
#endif
|
||||
|
||||
static inline struct mem_section *__nr_to_section(unsigned long nr)
|
||||
{
|
||||
return &mem_section[nr];
|
||||
if (!mem_section[SECTION_NR_TO_ROOT(nr)])
|
||||
return NULL;
|
||||
return &mem_section[SECTION_NR_TO_ROOT(nr)][nr & SECTION_ROOT_MASK];
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -513,12 +529,12 @@ static inline struct page *__section_mem_map_addr(struct mem_section *section)
|
|||
|
||||
static inline int valid_section(struct mem_section *section)
|
||||
{
|
||||
return (section->section_mem_map & SECTION_MARKED_PRESENT);
|
||||
return (section && (section->section_mem_map & SECTION_MARKED_PRESENT));
|
||||
}
|
||||
|
||||
static inline int section_has_mem_map(struct mem_section *section)
|
||||
{
|
||||
return (section->section_mem_map & SECTION_HAS_MEM_MAP);
|
||||
return (section && (section->section_mem_map & SECTION_HAS_MEM_MAP));
|
||||
}
|
||||
|
||||
static inline int valid_section_nr(unsigned long nr)
|
||||
|
@ -572,6 +588,7 @@ static inline int pfn_valid(unsigned long pfn)
|
|||
void sparse_init(void);
|
||||
#else
|
||||
#define sparse_init() do {} while (0)
|
||||
#define sparse_index_init(_sec, _nid) do {} while (0)
|
||||
#endif /* CONFIG_SPARSEMEM */
|
||||
|
||||
#ifdef CONFIG_NODES_SPAN_OTHER_NODES
|
||||
|
|
|
@ -77,6 +77,7 @@ struct msg_msg {
|
|||
/* one msq_queue structure for each present queue on the system */
|
||||
struct msg_queue {
|
||||
struct kern_ipc_perm q_perm;
|
||||
int q_id;
|
||||
time_t q_stime; /* last msgsnd time */
|
||||
time_t q_rtime; /* last msgrcv time */
|
||||
time_t q_ctime; /* last change time */
|
||||
|
|
|
@ -980,7 +980,7 @@
|
|||
/* I2C Registers */
|
||||
/****************************************/
|
||||
|
||||
#define MV64XXX_I2C_CTLR_NAME "mv64xxx i2c"
|
||||
#define MV64XXX_I2C_CTLR_NAME "mv64xxx_i2c"
|
||||
#define MV64XXX_I2C_OFFSET 0xc000
|
||||
#define MV64XXX_I2C_REG_BLOCK_SIZE 0x0020
|
||||
|
||||
|
|
|
@ -263,6 +263,9 @@ struct ip_conntrack_expect
|
|||
/* Unique ID */
|
||||
unsigned int id;
|
||||
|
||||
/* Flags */
|
||||
unsigned int flags;
|
||||
|
||||
#ifdef CONFIG_IP_NF_NAT_NEEDED
|
||||
/* This is the original per-proto part, used to map the
|
||||
* expected connection the way the recipient expects. */
|
||||
|
@ -272,6 +275,8 @@ struct ip_conntrack_expect
|
|||
#endif
|
||||
};
|
||||
|
||||
#define IP_CT_EXPECT_PERMANENT 0x1
|
||||
|
||||
static inline struct ip_conntrack *
|
||||
tuplehash_to_ctrack(const struct ip_conntrack_tuple_hash *hash)
|
||||
{
|
||||
|
|
|
@ -52,7 +52,7 @@ static inline int ip_conntrack_confirm(struct sk_buff **pskb)
|
|||
return ret;
|
||||
}
|
||||
|
||||
extern void __ip_ct_expect_unlink_destroy(struct ip_conntrack_expect *exp);
|
||||
extern void ip_ct_unlink_expect(struct ip_conntrack_expect *exp);
|
||||
|
||||
extern struct list_head *ip_conntrack_hash;
|
||||
extern struct list_head ip_conntrack_expect_list;
|
||||
|
|
|
@ -19,5 +19,10 @@ extern unsigned int
|
|||
alloc_null_binding(struct ip_conntrack *conntrack,
|
||||
struct ip_nat_info *info,
|
||||
unsigned int hooknum);
|
||||
|
||||
extern unsigned int
|
||||
alloc_null_binding_confirmed(struct ip_conntrack *conntrack,
|
||||
struct ip_nat_info *info,
|
||||
unsigned int hooknum);
|
||||
#endif
|
||||
#endif /* _IP_NAT_RULE_H */
|
||||
|
|
|
@ -134,6 +134,7 @@ struct page_state {
|
|||
};
|
||||
|
||||
extern void get_page_state(struct page_state *ret);
|
||||
extern void get_page_state_node(struct page_state *ret, int node);
|
||||
extern void get_full_page_state(struct page_state *ret);
|
||||
extern unsigned long __read_page_state(unsigned long offset);
|
||||
extern void __mod_page_state(unsigned long offset, unsigned long delta);
|
||||
|
@ -194,6 +195,7 @@ extern void __mod_page_state(unsigned long offset, unsigned long delta);
|
|||
#define SetPageDirty(page) set_bit(PG_dirty, &(page)->flags)
|
||||
#define TestSetPageDirty(page) test_and_set_bit(PG_dirty, &(page)->flags)
|
||||
#define ClearPageDirty(page) clear_bit(PG_dirty, &(page)->flags)
|
||||
#define __ClearPageDirty(page) __clear_bit(PG_dirty, &(page)->flags)
|
||||
#define TestClearPageDirty(page) test_and_clear_bit(PG_dirty, &(page)->flags)
|
||||
|
||||
#define SetPageLRU(page) set_bit(PG_lru, &(page)->flags)
|
||||
|
|
|
@ -1612,6 +1612,7 @@
|
|||
#define PCI_DEVICE_ID_TOSHIBA_TC35815CF 0x0030
|
||||
#define PCI_DEVICE_ID_TOSHIBA_TX4927 0x0180
|
||||
#define PCI_DEVICE_ID_TOSHIBA_TC86C001_MISC 0x0108
|
||||
#define PCI_DEVICE_ID_TOSHIBA_SPIDER_NET 0x01b3
|
||||
|
||||
#define PCI_VENDOR_ID_RICOH 0x1180
|
||||
#define PCI_DEVICE_ID_RICOH_RL5C465 0x0465
|
||||
|
@ -2147,6 +2148,9 @@
|
|||
#define PCI_DEVICE_ID_ENE_1420 0x1420
|
||||
#define PCI_VENDOR_ID_CHELSIO 0x1425
|
||||
|
||||
#define PCI_VENDOR_ID_MIPS 0x153f
|
||||
#define PCI_DEVICE_ID_SOC_IT 0x0001
|
||||
|
||||
#define PCI_VENDOR_ID_SYBA 0x1592
|
||||
#define PCI_DEVICE_ID_SYBA_2P_EPP 0x0782
|
||||
#define PCI_DEVICE_ID_SYBA_1P_ECP 0x0783
|
||||
|
|
|
@ -39,9 +39,6 @@ struct pipe_inode_info {
|
|||
|
||||
#define PIPE_SEM(inode) (&(inode).i_sem)
|
||||
#define PIPE_WAIT(inode) (&(inode).i_pipe->wait)
|
||||
#define PIPE_BASE(inode) ((inode).i_pipe->base)
|
||||
#define PIPE_START(inode) ((inode).i_pipe->start)
|
||||
#define PIPE_LEN(inode) ((inode).i_pipe->len)
|
||||
#define PIPE_READERS(inode) ((inode).i_pipe->readers)
|
||||
#define PIPE_WRITERS(inode) ((inode).i_pipe->writers)
|
||||
#define PIPE_WAITING_WRITERS(inode) ((inode).i_pipe->waiting_writers)
|
||||
|
|
|
@ -186,7 +186,9 @@ extern int pm_suspend(suspend_state_t state);
|
|||
|
||||
struct device;
|
||||
|
||||
typedef u32 __bitwise pm_message_t;
|
||||
typedef struct pm_message {
|
||||
int event;
|
||||
} pm_message_t;
|
||||
|
||||
/*
|
||||
* There are 4 important states driver can be in:
|
||||
|
@ -207,9 +209,13 @@ typedef u32 __bitwise pm_message_t;
|
|||
* or something similar soon.
|
||||
*/
|
||||
|
||||
#define PMSG_FREEZE ((__force pm_message_t) 3)
|
||||
#define PMSG_SUSPEND ((__force pm_message_t) 3)
|
||||
#define PMSG_ON ((__force pm_message_t) 0)
|
||||
#define PM_EVENT_ON 0
|
||||
#define PM_EVENT_FREEZE 1
|
||||
#define PM_EVENT_SUSPEND 2
|
||||
|
||||
#define PMSG_FREEZE ((struct pm_message){ .event = PM_EVENT_FREEZE, })
|
||||
#define PMSG_SUSPEND ((struct pm_message){ .event = PM_EVENT_SUSPEND, })
|
||||
#define PMSG_ON ((struct pm_message){ .event = PM_EVENT_ON, })
|
||||
|
||||
struct dev_pm_info {
|
||||
pm_message_t power_state;
|
||||
|
|
|
@ -443,7 +443,7 @@ static inline void pnp_unregister_driver(struct pnp_driver *drv) { ; }
|
|||
#define pnp_info(format, arg...) printk(KERN_INFO "pnp: " format "\n" , ## arg)
|
||||
#define pnp_warn(format, arg...) printk(KERN_WARNING "pnp: " format "\n" , ## arg)
|
||||
|
||||
#ifdef DEBUG
|
||||
#ifdef CONFIG_PNP_DEBUG
|
||||
#define pnp_dbg(format, arg...) printk(KERN_DEBUG "pnp: " format "\n" , ## arg)
|
||||
#else
|
||||
#define pnp_dbg(format, arg...) do {} while (0)
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
#define PTRACE_DETACH 0x11
|
||||
|
||||
#define PTRACE_SYSCALL 24
|
||||
#define PTRACE_SYSEMU 31
|
||||
#define PTRACE_SYSEMU_SINGLESTEP 32
|
||||
|
||||
/* 0x4200-0x4300 are reserved for architecture-independent additions. */
|
||||
#define PTRACE_SETOPTIONS 0x4200
|
||||
|
@ -88,6 +90,7 @@ extern void __ptrace_link(struct task_struct *child,
|
|||
struct task_struct *new_parent);
|
||||
extern void __ptrace_unlink(struct task_struct *child);
|
||||
extern void ptrace_untrace(struct task_struct *child);
|
||||
extern int ptrace_may_attach(struct task_struct *task);
|
||||
|
||||
static inline void ptrace_link(struct task_struct *child,
|
||||
struct task_struct *new_parent)
|
||||
|
|
59
include/linux/raid_class.h
Normal file
59
include/linux/raid_class.h
Normal file
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
*/
|
||||
#include <linux/transport_class.h>
|
||||
|
||||
struct raid_template {
|
||||
struct transport_container raid_attrs;
|
||||
};
|
||||
|
||||
struct raid_function_template {
|
||||
void *cookie;
|
||||
int (*is_raid)(struct device *);
|
||||
void (*get_resync)(struct device *);
|
||||
void (*get_state)(struct device *);
|
||||
};
|
||||
|
||||
enum raid_state {
|
||||
RAID_ACTIVE = 1,
|
||||
RAID_DEGRADED,
|
||||
RAID_RESYNCING,
|
||||
RAID_OFFLINE,
|
||||
};
|
||||
|
||||
struct raid_data {
|
||||
struct list_head component_list;
|
||||
int component_count;
|
||||
int level;
|
||||
enum raid_state state;
|
||||
int resync;
|
||||
};
|
||||
|
||||
#define DEFINE_RAID_ATTRIBUTE(type, attr) \
|
||||
static inline void \
|
||||
raid_set_##attr(struct raid_template *r, struct device *dev, type value) { \
|
||||
struct class_device *cdev = \
|
||||
attribute_container_find_class_device(&r->raid_attrs.ac, dev);\
|
||||
struct raid_data *rd; \
|
||||
BUG_ON(!cdev); \
|
||||
rd = class_get_devdata(cdev); \
|
||||
rd->attr = value; \
|
||||
} \
|
||||
static inline type \
|
||||
raid_get_##attr(struct raid_template *r, struct device *dev) { \
|
||||
struct class_device *cdev = \
|
||||
attribute_container_find_class_device(&r->raid_attrs.ac, dev);\
|
||||
struct raid_data *rd; \
|
||||
BUG_ON(!cdev); \
|
||||
rd = class_get_devdata(cdev); \
|
||||
return rd->attr; \
|
||||
}
|
||||
|
||||
DEFINE_RAID_ATTRIBUTE(int, level)
|
||||
DEFINE_RAID_ATTRIBUTE(int, resync)
|
||||
DEFINE_RAID_ATTRIBUTE(enum raid_state, state)
|
||||
|
||||
struct raid_template *raid_class_attach(struct raid_function_template *);
|
||||
void raid_class_release(struct raid_template *);
|
||||
|
||||
void raid_component_add(struct raid_template *, struct device *,
|
||||
struct device *);
|
255
include/linux/relayfs_fs.h
Normal file
255
include/linux/relayfs_fs.h
Normal file
|
@ -0,0 +1,255 @@
|
|||
/*
|
||||
* linux/include/linux/relayfs_fs.h
|
||||
*
|
||||
* Copyright (C) 2002, 2003 - Tom Zanussi (zanussi@us.ibm.com), IBM Corp
|
||||
* Copyright (C) 1999, 2000, 2001, 2002 - Karim Yaghmour (karim@opersys.com)
|
||||
*
|
||||
* RelayFS definitions and declarations
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_RELAYFS_FS_H
|
||||
#define _LINUX_RELAYFS_FS_H
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/kref.h>
|
||||
|
||||
/*
|
||||
* Tracks changes to rchan_buf struct
|
||||
*/
|
||||
#define RELAYFS_CHANNEL_VERSION 5
|
||||
|
||||
/*
|
||||
* Per-cpu relay channel buffer
|
||||
*/
|
||||
struct rchan_buf
|
||||
{
|
||||
void *start; /* start of channel buffer */
|
||||
void *data; /* start of current sub-buffer */
|
||||
size_t offset; /* current offset into sub-buffer */
|
||||
size_t subbufs_produced; /* count of sub-buffers produced */
|
||||
size_t subbufs_consumed; /* count of sub-buffers consumed */
|
||||
struct rchan *chan; /* associated channel */
|
||||
wait_queue_head_t read_wait; /* reader wait queue */
|
||||
struct work_struct wake_readers; /* reader wake-up work struct */
|
||||
struct dentry *dentry; /* channel file dentry */
|
||||
struct kref kref; /* channel buffer refcount */
|
||||
struct page **page_array; /* array of current buffer pages */
|
||||
unsigned int page_count; /* number of current buffer pages */
|
||||
unsigned int finalized; /* buffer has been finalized */
|
||||
size_t *padding; /* padding counts per sub-buffer */
|
||||
size_t prev_padding; /* temporary variable */
|
||||
size_t bytes_consumed; /* bytes consumed in cur read subbuf */
|
||||
unsigned int cpu; /* this buf's cpu */
|
||||
} ____cacheline_aligned;
|
||||
|
||||
/*
|
||||
* Relay channel data structure
|
||||
*/
|
||||
struct rchan
|
||||
{
|
||||
u32 version; /* the version of this struct */
|
||||
size_t subbuf_size; /* sub-buffer size */
|
||||
size_t n_subbufs; /* number of sub-buffers per buffer */
|
||||
size_t alloc_size; /* total buffer size allocated */
|
||||
struct rchan_callbacks *cb; /* client callbacks */
|
||||
struct kref kref; /* channel refcount */
|
||||
void *private_data; /* for user-defined data */
|
||||
struct rchan_buf *buf[NR_CPUS]; /* per-cpu channel buffers */
|
||||
};
|
||||
|
||||
/*
|
||||
* Relayfs inode
|
||||
*/
|
||||
struct relayfs_inode_info
|
||||
{
|
||||
struct inode vfs_inode;
|
||||
struct rchan_buf *buf;
|
||||
};
|
||||
|
||||
static inline struct relayfs_inode_info *RELAYFS_I(struct inode *inode)
|
||||
{
|
||||
return container_of(inode, struct relayfs_inode_info, vfs_inode);
|
||||
}
|
||||
|
||||
/*
|
||||
* Relay channel client callbacks
|
||||
*/
|
||||
struct rchan_callbacks
|
||||
{
|
||||
/*
|
||||
* subbuf_start - called on buffer-switch to a new sub-buffer
|
||||
* @buf: the channel buffer containing the new sub-buffer
|
||||
* @subbuf: the start of the new sub-buffer
|
||||
* @prev_subbuf: the start of the previous sub-buffer
|
||||
* @prev_padding: unused space at the end of previous sub-buffer
|
||||
*
|
||||
* The client should return 1 to continue logging, 0 to stop
|
||||
* logging.
|
||||
*
|
||||
* NOTE: subbuf_start will also be invoked when the buffer is
|
||||
* created, so that the first sub-buffer can be initialized
|
||||
* if necessary. In this case, prev_subbuf will be NULL.
|
||||
*
|
||||
* NOTE: the client can reserve bytes at the beginning of the new
|
||||
* sub-buffer by calling subbuf_start_reserve() in this callback.
|
||||
*/
|
||||
int (*subbuf_start) (struct rchan_buf *buf,
|
||||
void *subbuf,
|
||||
void *prev_subbuf,
|
||||
size_t prev_padding);
|
||||
|
||||
/*
|
||||
* buf_mapped - relayfs buffer mmap notification
|
||||
* @buf: the channel buffer
|
||||
* @filp: relayfs file pointer
|
||||
*
|
||||
* Called when a relayfs file is successfully mmapped
|
||||
*/
|
||||
void (*buf_mapped)(struct rchan_buf *buf,
|
||||
struct file *filp);
|
||||
|
||||
/*
|
||||
* buf_unmapped - relayfs buffer unmap notification
|
||||
* @buf: the channel buffer
|
||||
* @filp: relayfs file pointer
|
||||
*
|
||||
* Called when a relayfs file is successfully unmapped
|
||||
*/
|
||||
void (*buf_unmapped)(struct rchan_buf *buf,
|
||||
struct file *filp);
|
||||
};
|
||||
|
||||
/*
|
||||
* relayfs kernel API, fs/relayfs/relay.c
|
||||
*/
|
||||
|
||||
struct rchan *relay_open(const char *base_filename,
|
||||
struct dentry *parent,
|
||||
size_t subbuf_size,
|
||||
size_t n_subbufs,
|
||||
struct rchan_callbacks *cb);
|
||||
extern void relay_close(struct rchan *chan);
|
||||
extern void relay_flush(struct rchan *chan);
|
||||
extern void relay_subbufs_consumed(struct rchan *chan,
|
||||
unsigned int cpu,
|
||||
size_t consumed);
|
||||
extern void relay_reset(struct rchan *chan);
|
||||
extern int relay_buf_full(struct rchan_buf *buf);
|
||||
|
||||
extern size_t relay_switch_subbuf(struct rchan_buf *buf,
|
||||
size_t length);
|
||||
extern struct dentry *relayfs_create_dir(const char *name,
|
||||
struct dentry *parent);
|
||||
extern int relayfs_remove_dir(struct dentry *dentry);
|
||||
|
||||
/**
|
||||
* relay_write - write data into the channel
|
||||
* @chan: relay channel
|
||||
* @data: data to be written
|
||||
* @length: number of bytes to write
|
||||
*
|
||||
* Writes data into the current cpu's channel buffer.
|
||||
*
|
||||
* Protects the buffer by disabling interrupts. Use this
|
||||
* if you might be logging from interrupt context. Try
|
||||
* __relay_write() if you know you won't be logging from
|
||||
* interrupt context.
|
||||
*/
|
||||
static inline void relay_write(struct rchan *chan,
|
||||
const void *data,
|
||||
size_t length)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct rchan_buf *buf;
|
||||
|
||||
local_irq_save(flags);
|
||||
buf = chan->buf[smp_processor_id()];
|
||||
if (unlikely(buf->offset + length > chan->subbuf_size))
|
||||
length = relay_switch_subbuf(buf, length);
|
||||
memcpy(buf->data + buf->offset, data, length);
|
||||
buf->offset += length;
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* __relay_write - write data into the channel
|
||||
* @chan: relay channel
|
||||
* @data: data to be written
|
||||
* @length: number of bytes to write
|
||||
*
|
||||
* Writes data into the current cpu's channel buffer.
|
||||
*
|
||||
* Protects the buffer by disabling preemption. Use
|
||||
* relay_write() if you might be logging from interrupt
|
||||
* context.
|
||||
*/
|
||||
static inline void __relay_write(struct rchan *chan,
|
||||
const void *data,
|
||||
size_t length)
|
||||
{
|
||||
struct rchan_buf *buf;
|
||||
|
||||
buf = chan->buf[get_cpu()];
|
||||
if (unlikely(buf->offset + length > buf->chan->subbuf_size))
|
||||
length = relay_switch_subbuf(buf, length);
|
||||
memcpy(buf->data + buf->offset, data, length);
|
||||
buf->offset += length;
|
||||
put_cpu();
|
||||
}
|
||||
|
||||
/**
|
||||
* relay_reserve - reserve slot in channel buffer
|
||||
* @chan: relay channel
|
||||
* @length: number of bytes to reserve
|
||||
*
|
||||
* Returns pointer to reserved slot, NULL if full.
|
||||
*
|
||||
* Reserves a slot in the current cpu's channel buffer.
|
||||
* Does not protect the buffer at all - caller must provide
|
||||
* appropriate synchronization.
|
||||
*/
|
||||
static inline void *relay_reserve(struct rchan *chan, size_t length)
|
||||
{
|
||||
void *reserved;
|
||||
struct rchan_buf *buf = chan->buf[smp_processor_id()];
|
||||
|
||||
if (unlikely(buf->offset + length > buf->chan->subbuf_size)) {
|
||||
length = relay_switch_subbuf(buf, length);
|
||||
if (!length)
|
||||
return NULL;
|
||||
}
|
||||
reserved = buf->data + buf->offset;
|
||||
buf->offset += length;
|
||||
|
||||
return reserved;
|
||||
}
|
||||
|
||||
/**
|
||||
* subbuf_start_reserve - reserve bytes at the start of a sub-buffer
|
||||
* @buf: relay channel buffer
|
||||
* @length: number of bytes to reserve
|
||||
*
|
||||
* Helper function used to reserve bytes at the beginning of
|
||||
* a sub-buffer in the subbuf_start() callback.
|
||||
*/
|
||||
static inline void subbuf_start_reserve(struct rchan_buf *buf,
|
||||
size_t length)
|
||||
{
|
||||
BUG_ON(length >= buf->chan->subbuf_size - 1);
|
||||
buf->offset = length;
|
||||
}
|
||||
|
||||
/*
|
||||
* exported relayfs file operations, fs/relayfs/inode.c
|
||||
*/
|
||||
|
||||
extern struct file_operations relayfs_file_operations;
|
||||
|
||||
#endif /* _LINUX_RELAYFS_FS_H */
|
||||
|
|
@ -35,6 +35,8 @@
|
|||
#include <linux/topology.h>
|
||||
#include <linux/seccomp.h>
|
||||
|
||||
#include <linux/auxvec.h> /* For AT_VECTOR_SIZE */
|
||||
|
||||
struct exec_domain;
|
||||
|
||||
/*
|
||||
|
@ -176,6 +178,23 @@ extern void trap_init(void);
|
|||
extern void update_process_times(int user);
|
||||
extern void scheduler_tick(void);
|
||||
|
||||
#ifdef CONFIG_DETECT_SOFTLOCKUP
|
||||
extern void softlockup_tick(struct pt_regs *regs);
|
||||
extern void spawn_softlockup_task(void);
|
||||
extern void touch_softlockup_watchdog(void);
|
||||
#else
|
||||
static inline void softlockup_tick(struct pt_regs *regs)
|
||||
{
|
||||
}
|
||||
static inline void spawn_softlockup_task(void)
|
||||
{
|
||||
}
|
||||
static inline void touch_softlockup_watchdog(void)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* Attach to any functions which should be ignored in wchan output. */
|
||||
#define __sched __attribute__((__section__(".sched.text")))
|
||||
/* Is this address in the __sched functions? */
|
||||
|
@ -244,7 +263,7 @@ struct mm_struct {
|
|||
mm_counter_t _rss;
|
||||
mm_counter_t _anon_rss;
|
||||
|
||||
unsigned long saved_auxv[42]; /* for /proc/PID/auxv */
|
||||
unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */
|
||||
|
||||
unsigned dumpable:2;
|
||||
cpumask_t cpu_vm_mask;
|
||||
|
@ -545,13 +564,6 @@ struct sched_domain {
|
|||
|
||||
extern void partition_sched_domains(cpumask_t *partition1,
|
||||
cpumask_t *partition2);
|
||||
#ifdef ARCH_HAS_SCHED_DOMAIN
|
||||
/* Useful helpers that arch setup code may use. Defined in kernel/sched.c */
|
||||
extern cpumask_t cpu_isolated_map;
|
||||
extern void init_sched_build_groups(struct sched_group groups[],
|
||||
cpumask_t span, int (*group_fn)(int cpu));
|
||||
extern void cpu_attach_domain(struct sched_domain *sd, int cpu);
|
||||
#endif /* ARCH_HAS_SCHED_DOMAIN */
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
|
||||
|
|
|
@ -88,6 +88,7 @@ struct sem {
|
|||
/* One sem_array data structure for each set of semaphores in the system. */
|
||||
struct sem_array {
|
||||
struct kern_ipc_perm sem_perm; /* permissions .. see ipc.h */
|
||||
int sem_id;
|
||||
time_t sem_otime; /* last semop time */
|
||||
time_t sem_ctime; /* last change time */
|
||||
struct sem *sem_base; /* ptr to first semaphore in array */
|
||||
|
|
|
@ -176,10 +176,6 @@ struct serial_icounter_struct {
|
|||
#ifdef __KERNEL__
|
||||
#include <linux/compiler.h>
|
||||
|
||||
/* Export to allow PCMCIA to use this - Dave Hinds */
|
||||
extern int __deprecated register_serial(struct serial_struct *req);
|
||||
extern void __deprecated unregister_serial(int line);
|
||||
|
||||
/* Allow architectures to override entries in serial8250_ports[] at run time: */
|
||||
struct uart_port; /* forward declaration */
|
||||
extern int early_serial_setup(struct uart_port *port);
|
||||
|
|
|
@ -14,6 +14,9 @@
|
|||
#include <linux/serial_core.h>
|
||||
#include <linux/device.h>
|
||||
|
||||
/*
|
||||
* This is the platform device platform_data structure
|
||||
*/
|
||||
struct plat_serial8250_port {
|
||||
unsigned long iobase; /* io base address */
|
||||
void __iomem *membase; /* ioremap cookie or NULL */
|
||||
|
@ -26,4 +29,17 @@ struct plat_serial8250_port {
|
|||
unsigned int flags; /* UPF_* flags */
|
||||
};
|
||||
|
||||
/*
|
||||
* This should be used by drivers which want to register
|
||||
* their own 8250 ports without registering their own
|
||||
* platform device. Using these will make your driver
|
||||
* dependent on the 8250 driver.
|
||||
*/
|
||||
struct uart_port;
|
||||
|
||||
int serial8250_register_port(struct uart_port *);
|
||||
void serial8250_unregister_port(int line);
|
||||
void serial8250_suspend_port(int line);
|
||||
void serial8250_resume_port(int line);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -142,8 +142,8 @@ struct uart_ops {
|
|||
unsigned int (*tx_empty)(struct uart_port *);
|
||||
void (*set_mctrl)(struct uart_port *, unsigned int mctrl);
|
||||
unsigned int (*get_mctrl)(struct uart_port *);
|
||||
void (*stop_tx)(struct uart_port *, unsigned int tty_stop);
|
||||
void (*start_tx)(struct uart_port *, unsigned int tty_start);
|
||||
void (*stop_tx)(struct uart_port *);
|
||||
void (*start_tx)(struct uart_port *);
|
||||
void (*send_xchar)(struct uart_port *, char ch);
|
||||
void (*stop_rx)(struct uart_port *);
|
||||
void (*enable_ms)(struct uart_port *);
|
||||
|
@ -360,8 +360,6 @@ struct tty_driver *uart_console_device(struct console *co, int *index);
|
|||
*/
|
||||
int uart_register_driver(struct uart_driver *uart);
|
||||
void uart_unregister_driver(struct uart_driver *uart);
|
||||
void __deprecated uart_unregister_port(struct uart_driver *reg, int line);
|
||||
int __deprecated uart_register_port(struct uart_driver *reg, struct uart_port *port);
|
||||
int uart_add_one_port(struct uart_driver *reg, struct uart_port *port);
|
||||
int uart_remove_one_port(struct uart_driver *reg, struct uart_port *port);
|
||||
int uart_match_port(struct uart_port *port1, struct uart_port *port2);
|
||||
|
@ -387,11 +385,11 @@ int uart_resume_port(struct uart_driver *reg, struct uart_port *port);
|
|||
/*
|
||||
* The following are helper functions for the low level drivers.
|
||||
*/
|
||||
#ifdef SUPPORT_SYSRQ
|
||||
static inline int
|
||||
uart_handle_sysrq_char(struct uart_port *port, unsigned int ch,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
#ifdef SUPPORT_SYSRQ
|
||||
if (port->sysrq) {
|
||||
if (ch && time_before(jiffies, port->sysrq)) {
|
||||
handle_sysrq(ch, regs, NULL);
|
||||
|
@ -400,11 +398,9 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch,
|
|||
}
|
||||
port->sysrq = 0;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define uart_handle_sysrq_char(port,ch,regs) (0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We do the SysRQ and SAK checking like this...
|
||||
|
@ -468,13 +464,13 @@ uart_handle_cts_change(struct uart_port *port, unsigned int status)
|
|||
if (tty->hw_stopped) {
|
||||
if (status) {
|
||||
tty->hw_stopped = 0;
|
||||
port->ops->start_tx(port, 0);
|
||||
port->ops->start_tx(port);
|
||||
uart_write_wakeup(port);
|
||||
}
|
||||
} else {
|
||||
if (!status) {
|
||||
tty->hw_stopped = 1;
|
||||
port->ops->stop_tx(port, 0);
|
||||
port->ops->stop_tx(port);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1251,7 +1251,7 @@ extern void skb_add_mtu(int mtu);
|
|||
* This function converts the offset back to a struct timeval and stores
|
||||
* it in stamp.
|
||||
*/
|
||||
static inline void skb_get_timestamp(struct sk_buff *skb, struct timeval *stamp)
|
||||
static inline void skb_get_timestamp(const struct sk_buff *skb, struct timeval *stamp)
|
||||
{
|
||||
stamp->tv_sec = skb->tstamp.off_sec;
|
||||
stamp->tv_usec = skb->tstamp.off_usec;
|
||||
|
@ -1270,7 +1270,7 @@ static inline void skb_get_timestamp(struct sk_buff *skb, struct timeval *stamp)
|
|||
* This function converts a struct timeval to an offset and stores
|
||||
* it in the skb.
|
||||
*/
|
||||
static inline void skb_set_timestamp(struct sk_buff *skb, struct timeval *stamp)
|
||||
static inline void skb_set_timestamp(struct sk_buff *skb, const struct timeval *stamp)
|
||||
{
|
||||
skb->tstamp.off_sec = stamp->tv_sec - skb_tv_base.tv_sec;
|
||||
skb->tstamp.off_usec = stamp->tv_usec - skb_tv_base.tv_usec;
|
||||
|
|
|
@ -99,7 +99,21 @@ found:
|
|||
return __kmalloc(size, flags);
|
||||
}
|
||||
|
||||
extern void *kcalloc(size_t, size_t, unsigned int __nocast);
|
||||
extern void *kzalloc(size_t, unsigned int __nocast);
|
||||
|
||||
/**
|
||||
* kcalloc - allocate memory for an array. The memory is set to zero.
|
||||
* @n: number of elements.
|
||||
* @size: element size.
|
||||
* @flags: the type of memory to allocate.
|
||||
*/
|
||||
static inline void *kcalloc(size_t n, size_t size, unsigned int __nocast flags)
|
||||
{
|
||||
if (n != 0 && size > INT_MAX / n)
|
||||
return NULL;
|
||||
return kzalloc(n * size, flags);
|
||||
}
|
||||
|
||||
extern void kfree(const void *);
|
||||
extern unsigned int ksize(const void *);
|
||||
|
||||
|
|
|
@ -99,6 +99,8 @@
|
|||
#define SONYPI_EVENT_BATTERY_INSERT 57
|
||||
#define SONYPI_EVENT_BATTERY_REMOVE 58
|
||||
#define SONYPI_EVENT_FNKEY_RELEASED 59
|
||||
#define SONYPI_EVENT_WIRELESS_ON 60
|
||||
#define SONYPI_EVENT_WIRELESS_OFF 61
|
||||
|
||||
/* get/set brightness */
|
||||
#define SONYPI_IOCGBRT _IOR('v', 0, __u8)
|
||||
|
|
|
@ -60,6 +60,7 @@ struct cache_head {
|
|||
#define CACHE_NEW_EXPIRY 120 /* keep new things pending confirmation for 120 seconds */
|
||||
|
||||
struct cache_detail {
|
||||
struct module * owner;
|
||||
int hash_size;
|
||||
struct cache_head ** hash_table;
|
||||
rwlock_t hash_lock;
|
||||
|
|
|
@ -107,6 +107,8 @@ enum {
|
|||
SWP_USED = (1 << 0), /* is slot in swap_info[] used? */
|
||||
SWP_WRITEOK = (1 << 1), /* ok to write to this swap? */
|
||||
SWP_ACTIVE = (SWP_USED | SWP_WRITEOK),
|
||||
/* add others here before... */
|
||||
SWP_SCANNING = (1 << 8), /* refcount in scan_swap_map */
|
||||
};
|
||||
|
||||
#define SWAP_CLUSTER_MAX 32
|
||||
|
@ -116,16 +118,13 @@ enum {
|
|||
|
||||
/*
|
||||
* The in-memory structure used to track swap areas.
|
||||
* extent_list.prev points at the lowest-index extent. That list is
|
||||
* sorted.
|
||||
*/
|
||||
struct swap_info_struct {
|
||||
unsigned int flags;
|
||||
spinlock_t sdev_lock;
|
||||
int prio; /* swap priority */
|
||||
struct file *swap_file;
|
||||
struct block_device *bdev;
|
||||
struct list_head extent_list;
|
||||
int nr_extents;
|
||||
struct swap_extent *curr_swap_extent;
|
||||
unsigned old_block_size;
|
||||
unsigned short * swap_map;
|
||||
|
@ -133,10 +132,9 @@ struct swap_info_struct {
|
|||
unsigned int highest_bit;
|
||||
unsigned int cluster_next;
|
||||
unsigned int cluster_nr;
|
||||
int prio; /* swap priority */
|
||||
int pages;
|
||||
unsigned long max;
|
||||
unsigned long inuse_pages;
|
||||
unsigned int pages;
|
||||
unsigned int max;
|
||||
unsigned int inuse_pages;
|
||||
int next; /* next entry on swap list */
|
||||
};
|
||||
|
||||
|
@ -222,13 +220,7 @@ extern int can_share_swap_page(struct page *);
|
|||
extern int remove_exclusive_swap_page(struct page *);
|
||||
struct backing_dev_info;
|
||||
|
||||
extern struct swap_list_t swap_list;
|
||||
extern spinlock_t swaplock;
|
||||
|
||||
#define swap_list_lock() spin_lock(&swaplock)
|
||||
#define swap_list_unlock() spin_unlock(&swaplock)
|
||||
#define swap_device_lock(p) spin_lock(&p->sdev_lock)
|
||||
#define swap_device_unlock(p) spin_unlock(&p->sdev_lock)
|
||||
extern spinlock_t swap_lock;
|
||||
|
||||
/* linux/mm/thrash.c */
|
||||
extern struct mm_struct * swap_token_mm;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* the low-order bits.
|
||||
*
|
||||
* We arrange the `type' and `offset' fields so that `type' is at the five
|
||||
* high-order bits of the smp_entry_t and `offset' is right-aligned in the
|
||||
* high-order bits of the swp_entry_t and `offset' is right-aligned in the
|
||||
* remaining bits.
|
||||
*
|
||||
* swp_entry_t's are *never* stored anywhere in their arch-dependent format.
|
||||
|
|
|
@ -711,6 +711,7 @@ enum {
|
|||
DEV_RAID=4,
|
||||
DEV_MAC_HID=5,
|
||||
DEV_SCSI=6,
|
||||
DEV_IPMI=7,
|
||||
};
|
||||
|
||||
/* /proc/sys/dev/cdrom */
|
||||
|
@ -776,6 +777,11 @@ enum {
|
|||
DEV_SCSI_LOGGING_LEVEL=1,
|
||||
};
|
||||
|
||||
/* /proc/sys/dev/ipmi */
|
||||
enum {
|
||||
DEV_IPMI_POWEROFF_POWERCYCLE=1,
|
||||
};
|
||||
|
||||
/* /proc/sys/abi */
|
||||
enum
|
||||
{
|
||||
|
|
|
@ -97,7 +97,6 @@ extern int do_settimeofday(struct timespec *tv);
|
|||
extern int do_sys_settimeofday(struct timespec *tv, struct timezone *tz);
|
||||
extern void clock_was_set(void); // call when ever the clock is set
|
||||
extern int do_posix_clock_monotonic_gettime(struct timespec *tp);
|
||||
extern long do_nanosleep(struct timespec *t);
|
||||
extern long do_utimes(char __user * filename, struct timeval * times);
|
||||
struct itimerval;
|
||||
extern int do_setitimer(int which, struct itimerval *value, struct itimerval *ovalue);
|
||||
|
|
|
@ -260,6 +260,29 @@ extern long pps_calcnt; /* calibration intervals */
|
|||
extern long pps_errcnt; /* calibration errors */
|
||||
extern long pps_stbcnt; /* stability limit exceeded */
|
||||
|
||||
/**
|
||||
* ntp_clear - Clears the NTP state variables
|
||||
*
|
||||
* Must be called while holding a write on the xtime_lock
|
||||
*/
|
||||
static inline void ntp_clear(void)
|
||||
{
|
||||
time_adjust = 0; /* stop active adjtime() */
|
||||
time_status |= STA_UNSYNC;
|
||||
time_maxerror = NTP_PHASE_LIMIT;
|
||||
time_esterror = NTP_PHASE_LIMIT;
|
||||
}
|
||||
|
||||
/**
|
||||
* ntp_synced - Returns 1 if the NTP status is not UNSYNC
|
||||
*
|
||||
*/
|
||||
static inline int ntp_synced(void)
|
||||
{
|
||||
return !(time_status & STA_UNSYNC);
|
||||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_TIME_INTERPOLATION
|
||||
|
||||
#define TIME_SOURCE_CPU 0
|
||||
|
|
|
@ -135,6 +135,29 @@
|
|||
}
|
||||
#endif
|
||||
|
||||
/* sched_domains SD_ALLNODES_INIT for NUMA machines */
|
||||
#define SD_ALLNODES_INIT (struct sched_domain) { \
|
||||
.span = CPU_MASK_NONE, \
|
||||
.parent = NULL, \
|
||||
.groups = NULL, \
|
||||
.min_interval = 64, \
|
||||
.max_interval = 64*num_online_cpus(), \
|
||||
.busy_factor = 128, \
|
||||
.imbalance_pct = 133, \
|
||||
.cache_hot_time = (10*1000000), \
|
||||
.cache_nice_tries = 1, \
|
||||
.busy_idx = 3, \
|
||||
.idle_idx = 3, \
|
||||
.newidle_idx = 0, /* unused */ \
|
||||
.wake_idx = 0, /* unused */ \
|
||||
.forkexec_idx = 0, /* unused */ \
|
||||
.per_cpu_gain = 100, \
|
||||
.flags = SD_LOAD_BALANCE, \
|
||||
.last_balance = jiffies, \
|
||||
.balance_interval = 64, \
|
||||
.nr_balance_failed = 0, \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
#ifndef SD_NODE_INIT
|
||||
#error Please define an appropriate SD_NODE_INIT in include/asm/topology.h!!!
|
||||
|
|
|
@ -12,11 +12,16 @@
|
|||
#include <linux/device.h>
|
||||
#include <linux/attribute_container.h>
|
||||
|
||||
struct transport_container;
|
||||
|
||||
struct transport_class {
|
||||
struct class class;
|
||||
int (*setup)(struct device *);
|
||||
int (*configure)(struct device *);
|
||||
int (*remove)(struct device *);
|
||||
int (*setup)(struct transport_container *, struct device *,
|
||||
struct class_device *);
|
||||
int (*configure)(struct transport_container *, struct device *,
|
||||
struct class_device *);
|
||||
int (*remove)(struct transport_container *, struct device *,
|
||||
struct class_device *);
|
||||
};
|
||||
|
||||
#define DECLARE_TRANSPORT_CLASS(cls, nm, su, rm, cfg) \
|
||||
|
|
|
@ -10,6 +10,14 @@
|
|||
#define VM_MAP 0x00000004 /* vmap()ed pages */
|
||||
/* bits [20..32] reserved for arch specific ioremap internals */
|
||||
|
||||
/*
|
||||
* Maximum alignment for ioremap() regions.
|
||||
* Can be overriden by arch-specific value.
|
||||
*/
|
||||
#ifndef IOREMAP_MAX_ORDER
|
||||
#define IOREMAP_MAX_ORDER (7 + PAGE_SHIFT) /* 128 pages */
|
||||
#endif
|
||||
|
||||
struct vm_struct {
|
||||
void *addr;
|
||||
unsigned long size;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file define a set of standard wireless extensions
|
||||
*
|
||||
* Version : 18 12.3.05
|
||||
* Version : 19 18.3.05
|
||||
*
|
||||
* Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
|
||||
* Copyright (c) 1997-2005 Jean Tourrilhes, All Rights Reserved.
|
||||
|
@ -69,8 +69,6 @@
|
|||
|
||||
/***************************** INCLUDES *****************************/
|
||||
|
||||
/* To minimise problems in user space, I might remove those headers
|
||||
* at some point. Jean II */
|
||||
#include <linux/types.h> /* for "caddr_t" et al */
|
||||
#include <linux/socket.h> /* for "struct sockaddr" et al */
|
||||
#include <linux/if.h> /* for IFNAMSIZ and co... */
|
||||
|
@ -82,7 +80,7 @@
|
|||
* (there is some stuff that will be added in the future...)
|
||||
* I just plan to increment with each new version.
|
||||
*/
|
||||
#define WIRELESS_EXT 18
|
||||
#define WIRELESS_EXT 19
|
||||
|
||||
/*
|
||||
* Changes :
|
||||
|
@ -197,6 +195,15 @@
|
|||
* related parameters (extensible up to 4096 parameter values)
|
||||
* - Add wireless events: IWEVGENIE, IWEVMICHAELMICFAILURE,
|
||||
* IWEVASSOCREQIE, IWEVASSOCRESPIE, IWEVPMKIDCAND
|
||||
*
|
||||
* V18 to V19
|
||||
* ----------
|
||||
* - Remove (struct iw_point *)->pointer from events and streams
|
||||
* - Remove header includes to help user space
|
||||
* - Increase IW_ENCODING_TOKEN_MAX from 32 to 64
|
||||
* - Add IW_QUAL_ALL_UPDATED and IW_QUAL_ALL_INVALID macros
|
||||
* - Add explicit flag to tell stats are in dBm : IW_QUAL_DBM
|
||||
* - Add IW_IOCTL_IDX() and IW_EVENT_IDX() macros
|
||||
*/
|
||||
|
||||
/**************************** CONSTANTS ****************************/
|
||||
|
@ -322,6 +329,7 @@
|
|||
/* The first and the last (range) */
|
||||
#define SIOCIWFIRST 0x8B00
|
||||
#define SIOCIWLAST SIOCIWLASTPRIV /* 0x8BFF */
|
||||
#define IW_IOCTL_IDX(cmd) ((cmd) - SIOCIWFIRST)
|
||||
|
||||
/* Even : get (world access), odd : set (root access) */
|
||||
#define IW_IS_SET(cmd) (!((cmd) & 0x1))
|
||||
|
@ -366,6 +374,7 @@
|
|||
* (struct iw_pmkid_cand) */
|
||||
|
||||
#define IWEVFIRST 0x8C00
|
||||
#define IW_EVENT_IDX(cmd) ((cmd) - IWEVFIRST)
|
||||
|
||||
/* ------------------------- PRIVATE INFO ------------------------- */
|
||||
/*
|
||||
|
@ -427,12 +436,15 @@
|
|||
#define IW_MODE_MONITOR 6 /* Passive monitor (listen only) */
|
||||
|
||||
/* Statistics flags (bitmask in updated) */
|
||||
#define IW_QUAL_QUAL_UPDATED 0x1 /* Value was updated since last read */
|
||||
#define IW_QUAL_LEVEL_UPDATED 0x2
|
||||
#define IW_QUAL_NOISE_UPDATED 0x4
|
||||
#define IW_QUAL_QUAL_UPDATED 0x01 /* Value was updated since last read */
|
||||
#define IW_QUAL_LEVEL_UPDATED 0x02
|
||||
#define IW_QUAL_NOISE_UPDATED 0x04
|
||||
#define IW_QUAL_ALL_UPDATED 0x07
|
||||
#define IW_QUAL_DBM 0x08 /* Level + Noise are dBm */
|
||||
#define IW_QUAL_QUAL_INVALID 0x10 /* Driver doesn't provide value */
|
||||
#define IW_QUAL_LEVEL_INVALID 0x20
|
||||
#define IW_QUAL_NOISE_INVALID 0x40
|
||||
#define IW_QUAL_ALL_INVALID 0x70
|
||||
|
||||
/* Frequency flags */
|
||||
#define IW_FREQ_AUTO 0x00 /* Let the driver decides */
|
||||
|
@ -443,7 +455,7 @@
|
|||
#define IW_MAX_ENCODING_SIZES 8
|
||||
|
||||
/* Maximum size of the encoding token in bytes */
|
||||
#define IW_ENCODING_TOKEN_MAX 32 /* 256 bits (for now) */
|
||||
#define IW_ENCODING_TOKEN_MAX 64 /* 512 bits (for now) */
|
||||
|
||||
/* Flags for encoding (along with the token) */
|
||||
#define IW_ENCODE_INDEX 0x00FF /* Token index (if needed) */
|
||||
|
@ -1039,12 +1051,16 @@ struct iw_event
|
|||
#define IW_EV_CHAR_LEN (IW_EV_LCP_LEN + IFNAMSIZ)
|
||||
#define IW_EV_UINT_LEN (IW_EV_LCP_LEN + sizeof(__u32))
|
||||
#define IW_EV_FREQ_LEN (IW_EV_LCP_LEN + sizeof(struct iw_freq))
|
||||
#define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point))
|
||||
#define IW_EV_PARAM_LEN (IW_EV_LCP_LEN + sizeof(struct iw_param))
|
||||
#define IW_EV_ADDR_LEN (IW_EV_LCP_LEN + sizeof(struct sockaddr))
|
||||
#define IW_EV_QUAL_LEN (IW_EV_LCP_LEN + sizeof(struct iw_quality))
|
||||
|
||||
/* Note : in the case of iw_point, the extra data will come at the
|
||||
* end of the event */
|
||||
/* iw_point events are special. First, the payload (extra data) come at
|
||||
* the end of the event, so they are bigger than IW_EV_POINT_LEN. Second,
|
||||
* we omit the pointer, so start at an offset. */
|
||||
#define IW_EV_POINT_OFF (((char *) &(((struct iw_point *) NULL)->length)) - \
|
||||
(char *) NULL)
|
||||
#define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point) - \
|
||||
IW_EV_POINT_OFF)
|
||||
|
||||
#endif /* _LINUX_WIRELESS_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue