Manual merge with Linus
This commit is contained in:
@@ -41,7 +41,7 @@
|
||||
#include <asm/acpi.h>
|
||||
|
||||
|
||||
#ifdef CONFIG_ACPI_BOOT
|
||||
#ifdef CONFIG_ACPI
|
||||
|
||||
enum acpi_irq_model_id {
|
||||
ACPI_IRQ_MODEL_PIC = 0,
|
||||
@@ -429,23 +429,13 @@ extern int pci_mmcfg_config_num;
|
||||
|
||||
extern int sbf_port ;
|
||||
|
||||
#else /*!CONFIG_ACPI_BOOT*/
|
||||
#else /* !CONFIG_ACPI */
|
||||
|
||||
#define acpi_mp_config 0
|
||||
|
||||
static inline int acpi_boot_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* !CONFIG_ACPI */
|
||||
|
||||
static inline int acpi_boot_table_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /*!CONFIG_ACPI_BOOT*/
|
||||
|
||||
unsigned int acpi_register_gsi (u32 gsi, int edge_level, int active_high_low);
|
||||
int acpi_register_gsi (u32 gsi, int edge_level, int active_high_low);
|
||||
int acpi_gsi_to_irq (u32 gsi, unsigned int *irq);
|
||||
|
||||
/*
|
||||
@@ -455,7 +445,7 @@ int acpi_gsi_to_irq (u32 gsi, unsigned int *irq);
|
||||
*/
|
||||
void acpi_unregister_gsi (u32 gsi);
|
||||
|
||||
#ifdef CONFIG_ACPI_PCI
|
||||
#ifdef CONFIG_ACPI
|
||||
|
||||
struct acpi_prt_entry {
|
||||
struct list_head node;
|
||||
@@ -489,7 +479,7 @@ struct acpi_pci_driver {
|
||||
int acpi_pci_register_driver(struct acpi_pci_driver *driver);
|
||||
void acpi_pci_unregister_driver(struct acpi_pci_driver *driver);
|
||||
|
||||
#endif /*CONFIG_ACPI_PCI*/
|
||||
#endif /* CONFIG_ACPI */
|
||||
|
||||
#ifdef CONFIG_ACPI_EC
|
||||
|
||||
@@ -498,20 +488,9 @@ extern int ec_write(u8 addr, u8 val);
|
||||
|
||||
#endif /*CONFIG_ACPI_EC*/
|
||||
|
||||
#ifdef CONFIG_ACPI_INTERPRETER
|
||||
|
||||
extern int acpi_blacklisted(void);
|
||||
extern void acpi_bios_year(char *s);
|
||||
|
||||
#else /*!CONFIG_ACPI_INTERPRETER*/
|
||||
|
||||
static inline int acpi_blacklisted(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /*!CONFIG_ACPI_INTERPRETER*/
|
||||
|
||||
#define ACPI_CSTATE_LIMIT_DEFINED /* for driver builds */
|
||||
#ifdef CONFIG_ACPI
|
||||
|
||||
@@ -549,5 +528,17 @@ static inline int acpi_get_pxm(acpi_handle handle)
|
||||
|
||||
extern int pnpacpi_disabled;
|
||||
|
||||
#else /* CONFIG_ACPI */
|
||||
|
||||
static inline int acpi_boot_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int acpi_boot_table_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_ACPI */
|
||||
#endif /*_LINUX_ACPI_H*/
|
||||
|
||||
@@ -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 */
|
||||
@@ -14,8 +14,9 @@
|
||||
#define BFS_INODES_PER_BLOCK 8
|
||||
|
||||
/* SVR4 vnode type values (bfs_inode->i_vtype) */
|
||||
#define BFS_VDIR 2
|
||||
#define BFS_VREG 1
|
||||
#define BFS_VDIR 2L
|
||||
#define BFS_VREG 1L
|
||||
|
||||
|
||||
/* BFS inode layout on disk */
|
||||
struct bfs_inode {
|
||||
@@ -58,22 +59,22 @@ struct bfs_super_block {
|
||||
__u32 s_padding[118];
|
||||
};
|
||||
|
||||
#define BFS_NZFILESIZE(ip) \
|
||||
(((ip)->i_eoffset + 1) - (ip)->i_sblock * BFS_BSIZE)
|
||||
|
||||
#define BFS_FILESIZE(ip) \
|
||||
((ip)->i_sblock == 0 ? 0 : BFS_NZFILESIZE(ip))
|
||||
|
||||
#define BFS_FILEBLOCKS(ip) \
|
||||
((ip)->i_sblock == 0 ? 0 : ((ip)->i_eblock + 1) - (ip)->i_sblock)
|
||||
|
||||
#define BFS_OFF2INO(offset) \
|
||||
((((offset) - BFS_BSIZE) / sizeof(struct bfs_inode)) + BFS_ROOT_INO)
|
||||
|
||||
#define BFS_INO2OFF(ino) \
|
||||
((__u32)(((ino) - BFS_ROOT_INO) * sizeof(struct bfs_inode)) + BFS_BSIZE)
|
||||
#define BFS_NZFILESIZE(ip) \
|
||||
((cpu_to_le32((ip)->i_eoffset) + 1) - cpu_to_le32((ip)->i_sblock) * BFS_BSIZE)
|
||||
|
||||
#define BFS_FILESIZE(ip) \
|
||||
((ip)->i_sblock == 0 ? 0 : BFS_NZFILESIZE(ip))
|
||||
|
||||
#define BFS_FILEBLOCKS(ip) \
|
||||
((ip)->i_sblock == 0 ? 0 : (cpu_to_le32((ip)->i_eblock) + 1) - cpu_to_le32((ip)->i_sblock))
|
||||
#define BFS_UNCLEAN(bfs_sb, sb) \
|
||||
((bfs_sb->s_from != -1) && (bfs_sb->s_to != -1) && !(sb->s_flags & MS_RDONLY))
|
||||
((cpu_to_le32(bfs_sb->s_from) != -1) && (cpu_to_le32(bfs_sb->s_to) != -1) && !(sb->s_flags & MS_RDONLY))
|
||||
|
||||
|
||||
#endif /* _LINUX_BFS_FS_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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
44
include/linux/crc16.h
Normal file
44
include/linux/crc16.h
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* crc16.h - CRC-16 routine
|
||||
*
|
||||
* Implements the standard CRC-16, as used with 1-wire devices:
|
||||
* Width 16
|
||||
* Poly 0x8005 (x^16 + x^15 + x^2 + 1)
|
||||
* Init 0
|
||||
*
|
||||
* For 1-wire devices, the CRC is stored inverted, LSB-first
|
||||
*
|
||||
* Example buffer with the CRC attached:
|
||||
* 31 32 33 34 35 36 37 38 39 C2 44
|
||||
*
|
||||
* The CRC over a buffer with the CRC attached is 0xB001.
|
||||
* So, if (crc16(0, buf, size) == 0xB001) then the buffer is valid.
|
||||
*
|
||||
* Refer to "Application Note 937: Book of iButton Standards" for details.
|
||||
* http://www.maxim-ic.com/appnotes.cfm/appnote_number/937
|
||||
*
|
||||
* Copyright (c) 2005 Ben Gardner <bgardner@wabtec.com>
|
||||
*
|
||||
* This source code is licensed under the GNU General Public License,
|
||||
* Version 2. See the file COPYING for more details.
|
||||
*/
|
||||
|
||||
#ifndef __CRC16_H
|
||||
#define __CRC16_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define CRC16_INIT 0
|
||||
#define CRC16_VALID 0xb001
|
||||
|
||||
extern u16 const crc16_table[256];
|
||||
|
||||
extern u16 crc16(u16 crc, const u8 *buffer, size_t len);
|
||||
|
||||
static inline u16 crc16_byte(u16 crc, const u8 data)
|
||||
{
|
||||
return (crc >> 8) ^ crc16_table[(crc ^ data) & 0xff];
|
||||
}
|
||||
|
||||
#endif /* __CRC16_H */
|
||||
|
||||
@@ -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 */
|
||||
};
|
||||
|
||||
@@ -432,7 +432,10 @@ struct dccp_sock {
|
||||
struct ccid *dccps_hc_rx_ccid;
|
||||
struct ccid *dccps_hc_tx_ccid;
|
||||
struct dccp_options_received dccps_options_received;
|
||||
struct timeval dccps_epoch;
|
||||
enum dccp_role dccps_role:2;
|
||||
__u8 dccps_hc_rx_insert_options:1;
|
||||
__u8 dccps_hc_tx_insert_options:1;
|
||||
};
|
||||
|
||||
static inline struct dccp_sock *dccp_sk(const struct sock *sk)
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -107,6 +107,8 @@
|
||||
#define FB_ACCEL_NV_20 44 /* nVidia Arch 20 */
|
||||
#define FB_ACCEL_NV_30 45 /* nVidia Arch 30 */
|
||||
#define FB_ACCEL_NV_40 46 /* nVidia Arch 40 */
|
||||
#define FB_ACCEL_XGI_VOLARI_V 47 /* XGI Volari V3XT, V5, V8 */
|
||||
#define FB_ACCEL_XGI_VOLARI_Z 48 /* XGI Volari Z7 */
|
||||
#define FB_ACCEL_NEOMAGIC_NM2070 90 /* NeoMagic NM2070 */
|
||||
#define FB_ACCEL_NEOMAGIC_NM2090 91 /* NeoMagic NM2090 */
|
||||
#define FB_ACCEL_NEOMAGIC_NM2093 92 /* NeoMagic NM2093 */
|
||||
@@ -495,6 +497,9 @@ struct fb_cursor_user {
|
||||
#define FB_EVENT_BLANK 0x08
|
||||
/* Private modelist is to be replaced */
|
||||
#define FB_EVENT_NEW_MODELIST 0x09
|
||||
/* The resolution of the passed in fb_info about to change and
|
||||
all vc's should be changed */
|
||||
#define FB_EVENT_MODE_CHANGE_ALL 0x0A
|
||||
|
||||
struct fb_event {
|
||||
struct fb_info *info;
|
||||
@@ -820,13 +825,29 @@ extern void fb_pad_unaligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 idx,
|
||||
u32 height, u32 shift_high, u32 shift_low, u32 mod);
|
||||
extern void fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch, u32 height);
|
||||
extern void fb_set_suspend(struct fb_info *info, int state);
|
||||
extern int fb_get_color_depth(struct fb_var_screeninfo *var);
|
||||
extern int fb_get_color_depth(struct fb_var_screeninfo *var,
|
||||
struct fb_fix_screeninfo *fix);
|
||||
extern int fb_get_options(char *name, char **option);
|
||||
extern int fb_new_modelist(struct fb_info *info);
|
||||
|
||||
extern struct fb_info *registered_fb[FB_MAX];
|
||||
extern int num_registered_fb;
|
||||
|
||||
static inline void __fb_pad_aligned_buffer(u8 *dst, u32 d_pitch,
|
||||
u8 *src, u32 s_pitch, u32 height)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
d_pitch -= s_pitch;
|
||||
|
||||
for (i = height; i--; ) {
|
||||
/* s_pitch is a few bytes at the most, memcpy is suboptimal */
|
||||
for (j = 0; j < s_pitch; j++)
|
||||
*dst++ = *src++;
|
||||
dst += d_pitch;
|
||||
}
|
||||
}
|
||||
|
||||
/* drivers/video/fbsysfs.c */
|
||||
extern struct fb_info *framebuffer_alloc(size_t size, struct device *dev);
|
||||
extern void framebuffer_release(struct fb_info *info);
|
||||
@@ -856,8 +877,11 @@ extern int fb_get_mode(int flags, u32 val, struct fb_var_screeninfo *var,
|
||||
extern int fb_validate_mode(const struct fb_var_screeninfo *var,
|
||||
struct fb_info *info);
|
||||
extern int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var);
|
||||
extern void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs);
|
||||
extern const unsigned char *fb_firmware_edid(struct device *device);
|
||||
extern void fb_edid_to_monspecs(unsigned char *edid,
|
||||
struct fb_monspecs *specs);
|
||||
extern void fb_destroy_modedb(struct fb_videomode *modedb);
|
||||
extern int fb_find_mode_cvt(struct fb_videomode *mode, int margins, int rb);
|
||||
|
||||
/* drivers/video/modedb.c */
|
||||
#define VESA_MODEDB_SIZE 34
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <linux/posix_types.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/rcupdate.h>
|
||||
|
||||
/*
|
||||
* The default fd array needs to be at least BITS_PER_LONG,
|
||||
@@ -16,23 +17,33 @@
|
||||
*/
|
||||
#define NR_OPEN_DEFAULT BITS_PER_LONG
|
||||
|
||||
struct fdtable {
|
||||
unsigned int max_fds;
|
||||
int max_fdset;
|
||||
int next_fd;
|
||||
struct file ** fd; /* current fd array */
|
||||
fd_set *close_on_exec;
|
||||
fd_set *open_fds;
|
||||
struct rcu_head rcu;
|
||||
struct files_struct *free_files;
|
||||
struct fdtable *next;
|
||||
};
|
||||
|
||||
/*
|
||||
* Open file table structure
|
||||
*/
|
||||
struct files_struct {
|
||||
atomic_t count;
|
||||
spinlock_t file_lock; /* Protects all the below members. Nests inside tsk->alloc_lock */
|
||||
int max_fds;
|
||||
int max_fdset;
|
||||
int next_fd;
|
||||
struct file ** fd; /* current fd array */
|
||||
fd_set *close_on_exec;
|
||||
fd_set *open_fds;
|
||||
struct fdtable *fdt;
|
||||
struct fdtable fdtab;
|
||||
fd_set close_on_exec_init;
|
||||
fd_set open_fds_init;
|
||||
struct file * fd_array[NR_OPEN_DEFAULT];
|
||||
};
|
||||
|
||||
#define files_fdtable(files) (rcu_dereference((files)->fdt))
|
||||
|
||||
extern void FASTCALL(__fput(struct file *));
|
||||
extern void FASTCALL(fput(struct file *));
|
||||
|
||||
@@ -59,13 +70,16 @@ extern fd_set *alloc_fdset(int);
|
||||
extern void free_fdset(fd_set *, int);
|
||||
|
||||
extern int expand_files(struct files_struct *, int nr);
|
||||
extern void free_fdtable(struct fdtable *fdt);
|
||||
extern void __init files_defer_init(void);
|
||||
|
||||
static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd)
|
||||
{
|
||||
struct file * file = NULL;
|
||||
struct fdtable *fdt = files_fdtable(files);
|
||||
|
||||
if (fd < files->max_fds)
|
||||
file = files->fd[fd];
|
||||
if (fd < fdt->max_fds)
|
||||
file = rcu_dereference(fdt->fd[fd]);
|
||||
return file;
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <linux/config.h>
|
||||
#include <linux/limits.h>
|
||||
#include <linux/ioctl.h>
|
||||
#include <linux/rcuref.h>
|
||||
|
||||
/*
|
||||
* It's silly to have NR_OPEN bigger than NR_FILE, but you can change
|
||||
@@ -69,6 +70,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 +283,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 +586,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;
|
||||
|
||||
@@ -607,12 +598,13 @@ struct file {
|
||||
spinlock_t f_ep_lock;
|
||||
#endif /* #ifdef CONFIG_EPOLL */
|
||||
struct address_space *f_mapping;
|
||||
struct rcu_head f_rcuhead;
|
||||
};
|
||||
extern spinlock_t files_lock;
|
||||
#define file_list_lock() spin_lock(&files_lock);
|
||||
#define file_list_unlock() spin_unlock(&files_lock);
|
||||
|
||||
#define get_file(x) atomic_inc(&(x)->f_count)
|
||||
#define get_file(x) rcuref_inc(&(x)->f_count)
|
||||
#define file_count(x) atomic_read(&(x)->f_count)
|
||||
|
||||
#define MAX_NON_LFS ((1UL<<31) - 1)
|
||||
@@ -1291,6 +1283,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);
|
||||
|
||||
259
include/linux/fuse.h
Normal file
259
include/linux/fuse.h
Normal file
@@ -0,0 +1,259 @@
|
||||
/*
|
||||
FUSE: Filesystem in Userspace
|
||||
Copyright (C) 2001-2005 Miklos Szeredi <miklos@szeredi.hu>
|
||||
|
||||
This program can be distributed under the terms of the GNU GPL.
|
||||
See the file COPYING.
|
||||
*/
|
||||
|
||||
/* This file defines the kernel interface of FUSE */
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
/** Version number of this interface */
|
||||
#define FUSE_KERNEL_VERSION 7
|
||||
|
||||
/** Minor version number of this interface */
|
||||
#define FUSE_KERNEL_MINOR_VERSION 2
|
||||
|
||||
/** The node ID of the root inode */
|
||||
#define FUSE_ROOT_ID 1
|
||||
|
||||
/** The major number of the fuse character device */
|
||||
#define FUSE_MAJOR 10
|
||||
|
||||
/** The minor number of the fuse character device */
|
||||
#define FUSE_MINOR 229
|
||||
|
||||
/* Make sure all structures are padded to 64bit boundary, so 32bit
|
||||
userspace works under 64bit kernels */
|
||||
|
||||
struct fuse_attr {
|
||||
__u64 ino;
|
||||
__u64 size;
|
||||
__u64 blocks;
|
||||
__u64 atime;
|
||||
__u64 mtime;
|
||||
__u64 ctime;
|
||||
__u32 atimensec;
|
||||
__u32 mtimensec;
|
||||
__u32 ctimensec;
|
||||
__u32 mode;
|
||||
__u32 nlink;
|
||||
__u32 uid;
|
||||
__u32 gid;
|
||||
__u32 rdev;
|
||||
};
|
||||
|
||||
struct fuse_kstatfs {
|
||||
__u64 blocks;
|
||||
__u64 bfree;
|
||||
__u64 bavail;
|
||||
__u64 files;
|
||||
__u64 ffree;
|
||||
__u32 bsize;
|
||||
__u32 namelen;
|
||||
};
|
||||
|
||||
#define FATTR_MODE (1 << 0)
|
||||
#define FATTR_UID (1 << 1)
|
||||
#define FATTR_GID (1 << 2)
|
||||
#define FATTR_SIZE (1 << 3)
|
||||
#define FATTR_ATIME (1 << 4)
|
||||
#define FATTR_MTIME (1 << 5)
|
||||
#define FATTR_CTIME (1 << 6)
|
||||
|
||||
/**
|
||||
* Flags returned by the OPEN request
|
||||
*
|
||||
* FOPEN_DIRECT_IO: bypass page cache for this open file
|
||||
* FOPEN_KEEP_CACHE: don't invalidate the data cache on open
|
||||
*/
|
||||
#define FOPEN_DIRECT_IO (1 << 0)
|
||||
#define FOPEN_KEEP_CACHE (1 << 1)
|
||||
|
||||
enum fuse_opcode {
|
||||
FUSE_LOOKUP = 1,
|
||||
FUSE_FORGET = 2, /* no reply */
|
||||
FUSE_GETATTR = 3,
|
||||
FUSE_SETATTR = 4,
|
||||
FUSE_READLINK = 5,
|
||||
FUSE_SYMLINK = 6,
|
||||
FUSE_MKNOD = 8,
|
||||
FUSE_MKDIR = 9,
|
||||
FUSE_UNLINK = 10,
|
||||
FUSE_RMDIR = 11,
|
||||
FUSE_RENAME = 12,
|
||||
FUSE_LINK = 13,
|
||||
FUSE_OPEN = 14,
|
||||
FUSE_READ = 15,
|
||||
FUSE_WRITE = 16,
|
||||
FUSE_STATFS = 17,
|
||||
FUSE_RELEASE = 18,
|
||||
FUSE_FSYNC = 20,
|
||||
FUSE_SETXATTR = 21,
|
||||
FUSE_GETXATTR = 22,
|
||||
FUSE_LISTXATTR = 23,
|
||||
FUSE_REMOVEXATTR = 24,
|
||||
FUSE_FLUSH = 25,
|
||||
FUSE_INIT = 26,
|
||||
FUSE_OPENDIR = 27,
|
||||
FUSE_READDIR = 28,
|
||||
FUSE_RELEASEDIR = 29,
|
||||
FUSE_FSYNCDIR = 30
|
||||
};
|
||||
|
||||
/* Conservative buffer size for the client */
|
||||
#define FUSE_MAX_IN 8192
|
||||
|
||||
#define FUSE_NAME_MAX 1024
|
||||
#define FUSE_SYMLINK_MAX 4096
|
||||
#define FUSE_XATTR_SIZE_MAX 4096
|
||||
|
||||
struct fuse_entry_out {
|
||||
__u64 nodeid; /* Inode ID */
|
||||
__u64 generation; /* Inode generation: nodeid:gen must
|
||||
be unique for the fs's lifetime */
|
||||
__u64 entry_valid; /* Cache timeout for the name */
|
||||
__u64 attr_valid; /* Cache timeout for the attributes */
|
||||
__u32 entry_valid_nsec;
|
||||
__u32 attr_valid_nsec;
|
||||
struct fuse_attr attr;
|
||||
};
|
||||
|
||||
struct fuse_forget_in {
|
||||
__u64 nlookup;
|
||||
};
|
||||
|
||||
struct fuse_attr_out {
|
||||
__u64 attr_valid; /* Cache timeout for the attributes */
|
||||
__u32 attr_valid_nsec;
|
||||
__u32 dummy;
|
||||
struct fuse_attr attr;
|
||||
};
|
||||
|
||||
struct fuse_mknod_in {
|
||||
__u32 mode;
|
||||
__u32 rdev;
|
||||
};
|
||||
|
||||
struct fuse_mkdir_in {
|
||||
__u32 mode;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_rename_in {
|
||||
__u64 newdir;
|
||||
};
|
||||
|
||||
struct fuse_link_in {
|
||||
__u64 oldnodeid;
|
||||
};
|
||||
|
||||
struct fuse_setattr_in {
|
||||
__u32 valid;
|
||||
__u32 padding;
|
||||
struct fuse_attr attr;
|
||||
};
|
||||
|
||||
struct fuse_open_in {
|
||||
__u32 flags;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_open_out {
|
||||
__u64 fh;
|
||||
__u32 open_flags;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_release_in {
|
||||
__u64 fh;
|
||||
__u32 flags;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_flush_in {
|
||||
__u64 fh;
|
||||
__u32 flush_flags;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_read_in {
|
||||
__u64 fh;
|
||||
__u64 offset;
|
||||
__u32 size;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_write_in {
|
||||
__u64 fh;
|
||||
__u64 offset;
|
||||
__u32 size;
|
||||
__u32 write_flags;
|
||||
};
|
||||
|
||||
struct fuse_write_out {
|
||||
__u32 size;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_statfs_out {
|
||||
struct fuse_kstatfs st;
|
||||
};
|
||||
|
||||
struct fuse_fsync_in {
|
||||
__u64 fh;
|
||||
__u32 fsync_flags;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_setxattr_in {
|
||||
__u32 size;
|
||||
__u32 flags;
|
||||
};
|
||||
|
||||
struct fuse_getxattr_in {
|
||||
__u32 size;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_getxattr_out {
|
||||
__u32 size;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_init_in_out {
|
||||
__u32 major;
|
||||
__u32 minor;
|
||||
};
|
||||
|
||||
struct fuse_in_header {
|
||||
__u32 len;
|
||||
__u32 opcode;
|
||||
__u64 unique;
|
||||
__u64 nodeid;
|
||||
__u32 uid;
|
||||
__u32 gid;
|
||||
__u32 pid;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_out_header {
|
||||
__u32 len;
|
||||
__s32 error;
|
||||
__u64 unique;
|
||||
};
|
||||
|
||||
struct fuse_dirent {
|
||||
__u64 ino;
|
||||
__u64 off;
|
||||
__u32 namelen;
|
||||
__u32 type;
|
||||
char name[0];
|
||||
};
|
||||
|
||||
#define FUSE_NAME_OFFSET ((unsigned) ((struct fuse_dirent *) 0)->name)
|
||||
#define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
|
||||
#define FUSE_DIRENT_SIZE(d) \
|
||||
FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
|
||||
@@ -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 */
|
||||
48
include/linux/i2c-pxa.h
Normal file
48
include/linux/i2c-pxa.h
Normal file
@@ -0,0 +1,48 @@
|
||||
#ifndef _LINUX_I2C_ALGO_PXA_H
|
||||
#define _LINUX_I2C_ALGO_PXA_H
|
||||
|
||||
struct i2c_eeprom_emu_watcher {
|
||||
void (*write)(void *, unsigned int addr, unsigned char newval);
|
||||
};
|
||||
|
||||
struct i2c_eeprom_emu_watch {
|
||||
struct list_head node;
|
||||
unsigned int start;
|
||||
unsigned int end;
|
||||
struct i2c_eeprom_emu_watcher *ops;
|
||||
void *data;
|
||||
};
|
||||
|
||||
#define I2C_EEPROM_EMU_SIZE (256)
|
||||
|
||||
struct i2c_eeprom_emu {
|
||||
unsigned int size;
|
||||
unsigned int ptr;
|
||||
unsigned int seen_start;
|
||||
struct list_head watch;
|
||||
|
||||
unsigned char bytes[I2C_EEPROM_EMU_SIZE];
|
||||
};
|
||||
|
||||
typedef enum i2c_slave_event_e {
|
||||
I2C_SLAVE_EVENT_START_READ,
|
||||
I2C_SLAVE_EVENT_START_WRITE,
|
||||
I2C_SLAVE_EVENT_STOP
|
||||
} i2c_slave_event_t;
|
||||
|
||||
struct i2c_slave_client {
|
||||
void *data;
|
||||
void (*event)(void *ptr, i2c_slave_event_t event);
|
||||
int (*read) (void *ptr);
|
||||
void (*write)(void *ptr, unsigned int val);
|
||||
};
|
||||
|
||||
extern int i2c_eeprom_emu_addwatcher(struct i2c_eeprom_emu *, void *data,
|
||||
unsigned int addr, unsigned int size,
|
||||
struct i2c_eeprom_emu_watcher *);
|
||||
|
||||
extern void i2c_eeprom_emu_delwatcher(struct i2c_eeprom_emu *, void *data, struct i2c_eeprom_emu_watcher *watcher);
|
||||
|
||||
extern struct i2c_eeprom_emu *i2c_pxa_get_eeprom(void);
|
||||
|
||||
#endif /* _LINUX_I2C_ALGO_PXA_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
|
||||
|
||||
@@ -148,13 +148,13 @@ struct in6_flowlabel_req
|
||||
*/
|
||||
|
||||
#define IPV6_ADDRFORM 1
|
||||
#define IPV6_PKTINFO 2
|
||||
#define IPV6_HOPOPTS 3
|
||||
#define IPV6_DSTOPTS 4
|
||||
#define IPV6_RTHDR 5
|
||||
#define IPV6_PKTOPTIONS 6
|
||||
#define IPV6_2292PKTINFO 2
|
||||
#define IPV6_2292HOPOPTS 3
|
||||
#define IPV6_2292DSTOPTS 4
|
||||
#define IPV6_2292RTHDR 5
|
||||
#define IPV6_2292PKTOPTIONS 6
|
||||
#define IPV6_CHECKSUM 7
|
||||
#define IPV6_HOPLIMIT 8
|
||||
#define IPV6_2292HOPLIMIT 8
|
||||
#define IPV6_NEXTHOP 9
|
||||
#define IPV6_AUTHHDR 10 /* obsolete */
|
||||
#define IPV6_FLOWINFO 11
|
||||
@@ -198,4 +198,28 @@ struct in6_flowlabel_req
|
||||
* MCAST_MSFILTER 48
|
||||
*/
|
||||
|
||||
/* RFC3542 advanced socket options (50-67) */
|
||||
#define IPV6_RECVPKTINFO 50
|
||||
#define IPV6_PKTINFO 51
|
||||
#if 0
|
||||
#define IPV6_RECVPATHMTU 52
|
||||
#define IPV6_PATHMTU 53
|
||||
#define IPV6_DONTFRAG 54
|
||||
#define IPV6_USE_MIN_MTU 55
|
||||
#endif
|
||||
#define IPV6_RECVHOPOPTS 56
|
||||
#define IPV6_HOPOPTS 57
|
||||
#if 0
|
||||
#define IPV6_RECVRTHDRDSTOPTS 58 /* Unused, see net/ipv6/datagram.c */
|
||||
#endif
|
||||
#define IPV6_RTHDRDSTOPTS 59
|
||||
#define IPV6_RECVRTHDR 60
|
||||
#define IPV6_RTHDR 61
|
||||
#define IPV6_RECVDSTOPTS 62
|
||||
#define IPV6_DSTOPTS 63
|
||||
#define IPV6_RECVHOPLIMIT 64
|
||||
#define IPV6_HOPLIMIT 65
|
||||
#define IPV6_RECVTCLASS 66
|
||||
#define IPV6_TCLASS 67
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,17 +2,27 @@
|
||||
#define _LINUX__INIT_TASK_H
|
||||
|
||||
#include <linux/file.h>
|
||||
#include <linux/rcupdate.h>
|
||||
|
||||
#define INIT_FILES \
|
||||
{ \
|
||||
.count = ATOMIC_INIT(1), \
|
||||
.file_lock = SPIN_LOCK_UNLOCKED, \
|
||||
#define INIT_FDTABLE \
|
||||
{ \
|
||||
.max_fds = NR_OPEN_DEFAULT, \
|
||||
.max_fdset = __FD_SETSIZE, \
|
||||
.next_fd = 0, \
|
||||
.fd = &init_files.fd_array[0], \
|
||||
.close_on_exec = &init_files.close_on_exec_init, \
|
||||
.open_fds = &init_files.open_fds_init, \
|
||||
.rcu = RCU_HEAD_INIT, \
|
||||
.free_files = NULL, \
|
||||
.next = NULL, \
|
||||
}
|
||||
|
||||
#define INIT_FILES \
|
||||
{ \
|
||||
.count = ATOMIC_INIT(1), \
|
||||
.file_lock = SPIN_LOCK_UNLOCKED, \
|
||||
.fdt = &init_files.fdtab, \
|
||||
.fdtab = INIT_FDTABLE, \
|
||||
.close_on_exec_init = { { 0, } }, \
|
||||
.open_fds_init = { { 0, } }, \
|
||||
.fd_array = { NULL, } \
|
||||
|
||||
@@ -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
|
||||
@@ -558,6 +560,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
|
||||
*/
|
||||
@@ -832,6 +848,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;
|
||||
@@ -852,6 +869,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];
|
||||
@@ -894,6 +912,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)
|
||||
@@ -914,6 +933,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;
|
||||
};
|
||||
@@ -1006,6 +1026,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)
|
||||
|
||||
@@ -189,6 +189,7 @@ struct inet6_skb_parm {
|
||||
__u16 dst0;
|
||||
__u16 srcrt;
|
||||
__u16 dst1;
|
||||
__u16 lastopt;
|
||||
};
|
||||
|
||||
#define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb))
|
||||
@@ -234,14 +235,20 @@ struct ipv6_pinfo {
|
||||
/* pktoption flags */
|
||||
union {
|
||||
struct {
|
||||
__u8 srcrt:2,
|
||||
__u16 srcrt:2,
|
||||
osrcrt:2,
|
||||
rxinfo:1,
|
||||
rxoinfo:1,
|
||||
rxhlim:1,
|
||||
rxohlim:1,
|
||||
hopopts:1,
|
||||
ohopopts:1,
|
||||
dstopts:1,
|
||||
rxflow:1;
|
||||
odstopts:1,
|
||||
rxflow:1,
|
||||
rxtclass:1;
|
||||
} bits;
|
||||
__u8 all;
|
||||
__u16 all;
|
||||
} rxopt;
|
||||
|
||||
/* sockopt flags */
|
||||
@@ -250,6 +257,7 @@ struct ipv6_pinfo {
|
||||
sndflow:1,
|
||||
pmtudisc:2,
|
||||
ipv6only:1;
|
||||
__u8 tclass;
|
||||
|
||||
__u32 dst_cookie;
|
||||
|
||||
@@ -263,6 +271,7 @@ struct ipv6_pinfo {
|
||||
struct ipv6_txoptions *opt;
|
||||
struct rt6_info *rt;
|
||||
int hop_limit;
|
||||
int tclass;
|
||||
} cork;
|
||||
};
|
||||
|
||||
|
||||
@@ -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 */
|
||||
@@ -450,6 +449,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,8 +150,12 @@ 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);
|
||||
extern struct mempolicy default_policy;
|
||||
|
||||
#else
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -89,6 +109,8 @@ struct mmc_host {
|
||||
struct mmc_card *card_selected; /* the selected MMC card */
|
||||
|
||||
struct work_struct detect;
|
||||
|
||||
unsigned long private[0] ____cacheline_aligned;
|
||||
};
|
||||
|
||||
extern struct mmc_host *mmc_alloc_host(int extra, struct device *);
|
||||
@@ -96,14 +118,18 @@ extern int mmc_add_host(struct mmc_host *);
|
||||
extern void mmc_remove_host(struct mmc_host *);
|
||||
extern void mmc_free_host(struct mmc_host *);
|
||||
|
||||
#define mmc_priv(x) ((void *)((x) + 1))
|
||||
static inline void *mmc_priv(struct mmc_host *host)
|
||||
{
|
||||
return (void *)host->private;
|
||||
}
|
||||
|
||||
#define mmc_dev(x) ((x)->dev)
|
||||
#define mmc_hostname(x) ((x)->class_dev.class_id)
|
||||
|
||||
extern int mmc_suspend_host(struct mmc_host *, pm_message_t);
|
||||
extern int mmc_resume_host(struct mmc_host *);
|
||||
|
||||
extern void mmc_detect_change(struct mmc_host *);
|
||||
extern void mmc_detect_change(struct mmc_host *, unsigned long delay);
|
||||
extern void mmc_request_done(struct mmc_host *, struct mmc_request *);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -19,436 +19,10 @@
|
||||
|
||||
#include <linux/mod_devicetable.h>
|
||||
|
||||
/*
|
||||
* Under PCI, each device has 256 bytes of configuration address space,
|
||||
* of which the first 64 bytes are standardized as follows:
|
||||
*/
|
||||
#define PCI_VENDOR_ID 0x00 /* 16 bits */
|
||||
#define PCI_DEVICE_ID 0x02 /* 16 bits */
|
||||
#define PCI_COMMAND 0x04 /* 16 bits */
|
||||
#define PCI_COMMAND_IO 0x1 /* Enable response in I/O space */
|
||||
#define PCI_COMMAND_MEMORY 0x2 /* Enable response in Memory space */
|
||||
#define PCI_COMMAND_MASTER 0x4 /* Enable bus mastering */
|
||||
#define PCI_COMMAND_SPECIAL 0x8 /* Enable response to special cycles */
|
||||
#define PCI_COMMAND_INVALIDATE 0x10 /* Use memory write and invalidate */
|
||||
#define PCI_COMMAND_VGA_PALETTE 0x20 /* Enable palette snooping */
|
||||
#define PCI_COMMAND_PARITY 0x40 /* Enable parity checking */
|
||||
#define PCI_COMMAND_WAIT 0x80 /* Enable address/data stepping */
|
||||
#define PCI_COMMAND_SERR 0x100 /* Enable SERR */
|
||||
#define PCI_COMMAND_FAST_BACK 0x200 /* Enable back-to-back writes */
|
||||
#define PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */
|
||||
|
||||
#define PCI_STATUS 0x06 /* 16 bits */
|
||||
#define PCI_STATUS_CAP_LIST 0x10 /* Support Capability List */
|
||||
#define PCI_STATUS_66MHZ 0x20 /* Support 66 Mhz PCI 2.1 bus */
|
||||
#define PCI_STATUS_UDF 0x40 /* Support User Definable Features [obsolete] */
|
||||
#define PCI_STATUS_FAST_BACK 0x80 /* Accept fast-back to back */
|
||||
#define PCI_STATUS_PARITY 0x100 /* Detected parity error */
|
||||
#define PCI_STATUS_DEVSEL_MASK 0x600 /* DEVSEL timing */
|
||||
#define PCI_STATUS_DEVSEL_FAST 0x000
|
||||
#define PCI_STATUS_DEVSEL_MEDIUM 0x200
|
||||
#define PCI_STATUS_DEVSEL_SLOW 0x400
|
||||
#define PCI_STATUS_SIG_TARGET_ABORT 0x800 /* Set on target abort */
|
||||
#define PCI_STATUS_REC_TARGET_ABORT 0x1000 /* Master ack of " */
|
||||
#define PCI_STATUS_REC_MASTER_ABORT 0x2000 /* Set on master abort */
|
||||
#define PCI_STATUS_SIG_SYSTEM_ERROR 0x4000 /* Set when we drive SERR */
|
||||
#define PCI_STATUS_DETECTED_PARITY 0x8000 /* Set on parity error */
|
||||
|
||||
#define PCI_CLASS_REVISION 0x08 /* High 24 bits are class, low 8
|
||||
revision */
|
||||
#define PCI_REVISION_ID 0x08 /* Revision ID */
|
||||
#define PCI_CLASS_PROG 0x09 /* Reg. Level Programming Interface */
|
||||
#define PCI_CLASS_DEVICE 0x0a /* Device class */
|
||||
|
||||
#define PCI_CACHE_LINE_SIZE 0x0c /* 8 bits */
|
||||
#define PCI_LATENCY_TIMER 0x0d /* 8 bits */
|
||||
#define PCI_HEADER_TYPE 0x0e /* 8 bits */
|
||||
#define PCI_HEADER_TYPE_NORMAL 0
|
||||
#define PCI_HEADER_TYPE_BRIDGE 1
|
||||
#define PCI_HEADER_TYPE_CARDBUS 2
|
||||
|
||||
#define PCI_BIST 0x0f /* 8 bits */
|
||||
#define PCI_BIST_CODE_MASK 0x0f /* Return result */
|
||||
#define PCI_BIST_START 0x40 /* 1 to start BIST, 2 secs or less */
|
||||
#define PCI_BIST_CAPABLE 0x80 /* 1 if BIST capable */
|
||||
|
||||
/*
|
||||
* Base addresses specify locations in memory or I/O space.
|
||||
* Decoded size can be determined by writing a value of
|
||||
* 0xffffffff to the register, and reading it back. Only
|
||||
* 1 bits are decoded.
|
||||
*/
|
||||
#define PCI_BASE_ADDRESS_0 0x10 /* 32 bits */
|
||||
#define PCI_BASE_ADDRESS_1 0x14 /* 32 bits [htype 0,1 only] */
|
||||
#define PCI_BASE_ADDRESS_2 0x18 /* 32 bits [htype 0 only] */
|
||||
#define PCI_BASE_ADDRESS_3 0x1c /* 32 bits */
|
||||
#define PCI_BASE_ADDRESS_4 0x20 /* 32 bits */
|
||||
#define PCI_BASE_ADDRESS_5 0x24 /* 32 bits */
|
||||
#define PCI_BASE_ADDRESS_SPACE 0x01 /* 0 = memory, 1 = I/O */
|
||||
#define PCI_BASE_ADDRESS_SPACE_IO 0x01
|
||||
#define PCI_BASE_ADDRESS_SPACE_MEMORY 0x00
|
||||
#define PCI_BASE_ADDRESS_MEM_TYPE_MASK 0x06
|
||||
#define PCI_BASE_ADDRESS_MEM_TYPE_32 0x00 /* 32 bit address */
|
||||
#define PCI_BASE_ADDRESS_MEM_TYPE_1M 0x02 /* Below 1M [obsolete] */
|
||||
#define PCI_BASE_ADDRESS_MEM_TYPE_64 0x04 /* 64 bit address */
|
||||
#define PCI_BASE_ADDRESS_MEM_PREFETCH 0x08 /* prefetchable? */
|
||||
#define PCI_BASE_ADDRESS_MEM_MASK (~0x0fUL)
|
||||
#define PCI_BASE_ADDRESS_IO_MASK (~0x03UL)
|
||||
/* bit 1 is reserved if address_space = 1 */
|
||||
|
||||
/* Header type 0 (normal devices) */
|
||||
#define PCI_CARDBUS_CIS 0x28
|
||||
#define PCI_SUBSYSTEM_VENDOR_ID 0x2c
|
||||
#define PCI_SUBSYSTEM_ID 0x2e
|
||||
#define PCI_ROM_ADDRESS 0x30 /* Bits 31..11 are address, 10..1 reserved */
|
||||
#define PCI_ROM_ADDRESS_ENABLE 0x01
|
||||
#define PCI_ROM_ADDRESS_MASK (~0x7ffUL)
|
||||
|
||||
#define PCI_CAPABILITY_LIST 0x34 /* Offset of first capability list entry */
|
||||
|
||||
/* 0x35-0x3b are reserved */
|
||||
#define PCI_INTERRUPT_LINE 0x3c /* 8 bits */
|
||||
#define PCI_INTERRUPT_PIN 0x3d /* 8 bits */
|
||||
#define PCI_MIN_GNT 0x3e /* 8 bits */
|
||||
#define PCI_MAX_LAT 0x3f /* 8 bits */
|
||||
|
||||
/* Header type 1 (PCI-to-PCI bridges) */
|
||||
#define PCI_PRIMARY_BUS 0x18 /* Primary bus number */
|
||||
#define PCI_SECONDARY_BUS 0x19 /* Secondary bus number */
|
||||
#define PCI_SUBORDINATE_BUS 0x1a /* Highest bus number behind the bridge */
|
||||
#define PCI_SEC_LATENCY_TIMER 0x1b /* Latency timer for secondary interface */
|
||||
#define PCI_IO_BASE 0x1c /* I/O range behind the bridge */
|
||||
#define PCI_IO_LIMIT 0x1d
|
||||
#define PCI_IO_RANGE_TYPE_MASK 0x0fUL /* I/O bridging type */
|
||||
#define PCI_IO_RANGE_TYPE_16 0x00
|
||||
#define PCI_IO_RANGE_TYPE_32 0x01
|
||||
#define PCI_IO_RANGE_MASK (~0x0fUL)
|
||||
#define PCI_SEC_STATUS 0x1e /* Secondary status register, only bit 14 used */
|
||||
#define PCI_MEMORY_BASE 0x20 /* Memory range behind */
|
||||
#define PCI_MEMORY_LIMIT 0x22
|
||||
#define PCI_MEMORY_RANGE_TYPE_MASK 0x0fUL
|
||||
#define PCI_MEMORY_RANGE_MASK (~0x0fUL)
|
||||
#define PCI_PREF_MEMORY_BASE 0x24 /* Prefetchable memory range behind */
|
||||
#define PCI_PREF_MEMORY_LIMIT 0x26
|
||||
#define PCI_PREF_RANGE_TYPE_MASK 0x0fUL
|
||||
#define PCI_PREF_RANGE_TYPE_32 0x00
|
||||
#define PCI_PREF_RANGE_TYPE_64 0x01
|
||||
#define PCI_PREF_RANGE_MASK (~0x0fUL)
|
||||
#define PCI_PREF_BASE_UPPER32 0x28 /* Upper half of prefetchable memory range */
|
||||
#define PCI_PREF_LIMIT_UPPER32 0x2c
|
||||
#define PCI_IO_BASE_UPPER16 0x30 /* Upper half of I/O addresses */
|
||||
#define PCI_IO_LIMIT_UPPER16 0x32
|
||||
/* 0x34 same as for htype 0 */
|
||||
/* 0x35-0x3b is reserved */
|
||||
#define PCI_ROM_ADDRESS1 0x38 /* Same as PCI_ROM_ADDRESS, but for htype 1 */
|
||||
/* 0x3c-0x3d are same as for htype 0 */
|
||||
#define PCI_BRIDGE_CONTROL 0x3e
|
||||
#define PCI_BRIDGE_CTL_PARITY 0x01 /* Enable parity detection on secondary interface */
|
||||
#define PCI_BRIDGE_CTL_SERR 0x02 /* The same for SERR forwarding */
|
||||
#define PCI_BRIDGE_CTL_NO_ISA 0x04 /* Disable bridging of ISA ports */
|
||||
#define PCI_BRIDGE_CTL_VGA 0x08 /* Forward VGA addresses */
|
||||
#define PCI_BRIDGE_CTL_MASTER_ABORT 0x20 /* Report master aborts */
|
||||
#define PCI_BRIDGE_CTL_BUS_RESET 0x40 /* Secondary bus reset */
|
||||
#define PCI_BRIDGE_CTL_FAST_BACK 0x80 /* Fast Back2Back enabled on secondary interface */
|
||||
|
||||
/* Header type 2 (CardBus bridges) */
|
||||
#define PCI_CB_CAPABILITY_LIST 0x14
|
||||
/* 0x15 reserved */
|
||||
#define PCI_CB_SEC_STATUS 0x16 /* Secondary status */
|
||||
#define PCI_CB_PRIMARY_BUS 0x18 /* PCI bus number */
|
||||
#define PCI_CB_CARD_BUS 0x19 /* CardBus bus number */
|
||||
#define PCI_CB_SUBORDINATE_BUS 0x1a /* Subordinate bus number */
|
||||
#define PCI_CB_LATENCY_TIMER 0x1b /* CardBus latency timer */
|
||||
#define PCI_CB_MEMORY_BASE_0 0x1c
|
||||
#define PCI_CB_MEMORY_LIMIT_0 0x20
|
||||
#define PCI_CB_MEMORY_BASE_1 0x24
|
||||
#define PCI_CB_MEMORY_LIMIT_1 0x28
|
||||
#define PCI_CB_IO_BASE_0 0x2c
|
||||
#define PCI_CB_IO_BASE_0_HI 0x2e
|
||||
#define PCI_CB_IO_LIMIT_0 0x30
|
||||
#define PCI_CB_IO_LIMIT_0_HI 0x32
|
||||
#define PCI_CB_IO_BASE_1 0x34
|
||||
#define PCI_CB_IO_BASE_1_HI 0x36
|
||||
#define PCI_CB_IO_LIMIT_1 0x38
|
||||
#define PCI_CB_IO_LIMIT_1_HI 0x3a
|
||||
#define PCI_CB_IO_RANGE_MASK (~0x03UL)
|
||||
/* 0x3c-0x3d are same as for htype 0 */
|
||||
#define PCI_CB_BRIDGE_CONTROL 0x3e
|
||||
#define PCI_CB_BRIDGE_CTL_PARITY 0x01 /* Similar to standard bridge control register */
|
||||
#define PCI_CB_BRIDGE_CTL_SERR 0x02
|
||||
#define PCI_CB_BRIDGE_CTL_ISA 0x04
|
||||
#define PCI_CB_BRIDGE_CTL_VGA 0x08
|
||||
#define PCI_CB_BRIDGE_CTL_MASTER_ABORT 0x20
|
||||
#define PCI_CB_BRIDGE_CTL_CB_RESET 0x40 /* CardBus reset */
|
||||
#define PCI_CB_BRIDGE_CTL_16BIT_INT 0x80 /* Enable interrupt for 16-bit cards */
|
||||
#define PCI_CB_BRIDGE_CTL_PREFETCH_MEM0 0x100 /* Prefetch enable for both memory regions */
|
||||
#define PCI_CB_BRIDGE_CTL_PREFETCH_MEM1 0x200
|
||||
#define PCI_CB_BRIDGE_CTL_POST_WRITES 0x400
|
||||
#define PCI_CB_SUBSYSTEM_VENDOR_ID 0x40
|
||||
#define PCI_CB_SUBSYSTEM_ID 0x42
|
||||
#define PCI_CB_LEGACY_MODE_BASE 0x44 /* 16-bit PC Card legacy mode base address (ExCa) */
|
||||
/* 0x48-0x7f reserved */
|
||||
|
||||
/* Capability lists */
|
||||
|
||||
#define PCI_CAP_LIST_ID 0 /* Capability ID */
|
||||
#define PCI_CAP_ID_PM 0x01 /* Power Management */
|
||||
#define PCI_CAP_ID_AGP 0x02 /* Accelerated Graphics Port */
|
||||
#define PCI_CAP_ID_VPD 0x03 /* Vital Product Data */
|
||||
#define PCI_CAP_ID_SLOTID 0x04 /* Slot Identification */
|
||||
#define PCI_CAP_ID_MSI 0x05 /* Message Signalled Interrupts */
|
||||
#define PCI_CAP_ID_CHSWP 0x06 /* CompactPCI HotSwap */
|
||||
#define PCI_CAP_ID_PCIX 0x07 /* PCI-X */
|
||||
#define PCI_CAP_ID_SHPC 0x0C /* PCI Standard Hot-Plug Controller */
|
||||
#define PCI_CAP_ID_EXP 0x10 /* PCI Express */
|
||||
#define PCI_CAP_ID_MSIX 0x11 /* MSI-X */
|
||||
#define PCI_CAP_LIST_NEXT 1 /* Next capability in the list */
|
||||
#define PCI_CAP_FLAGS 2 /* Capability defined flags (16 bits) */
|
||||
#define PCI_CAP_SIZEOF 4
|
||||
|
||||
/* Power Management Registers */
|
||||
|
||||
#define PCI_PM_PMC 2 /* PM Capabilities Register */
|
||||
#define PCI_PM_CAP_VER_MASK 0x0007 /* Version */
|
||||
#define PCI_PM_CAP_PME_CLOCK 0x0008 /* PME clock required */
|
||||
#define PCI_PM_CAP_RESERVED 0x0010 /* Reserved field */
|
||||
#define PCI_PM_CAP_DSI 0x0020 /* Device specific initialization */
|
||||
#define PCI_PM_CAP_AUX_POWER 0x01C0 /* Auxilliary power support mask */
|
||||
#define PCI_PM_CAP_D1 0x0200 /* D1 power state support */
|
||||
#define PCI_PM_CAP_D2 0x0400 /* D2 power state support */
|
||||
#define PCI_PM_CAP_PME 0x0800 /* PME pin supported */
|
||||
#define PCI_PM_CAP_PME_MASK 0xF800 /* PME Mask of all supported states */
|
||||
#define PCI_PM_CAP_PME_D0 0x0800 /* PME# from D0 */
|
||||
#define PCI_PM_CAP_PME_D1 0x1000 /* PME# from D1 */
|
||||
#define PCI_PM_CAP_PME_D2 0x2000 /* PME# from D2 */
|
||||
#define PCI_PM_CAP_PME_D3 0x4000 /* PME# from D3 (hot) */
|
||||
#define PCI_PM_CAP_PME_D3cold 0x8000 /* PME# from D3 (cold) */
|
||||
#define PCI_PM_CTRL 4 /* PM control and status register */
|
||||
#define PCI_PM_CTRL_STATE_MASK 0x0003 /* Current power state (D0 to D3) */
|
||||
#define PCI_PM_CTRL_PME_ENABLE 0x0100 /* PME pin enable */
|
||||
#define PCI_PM_CTRL_DATA_SEL_MASK 0x1e00 /* Data select (??) */
|
||||
#define PCI_PM_CTRL_DATA_SCALE_MASK 0x6000 /* Data scale (??) */
|
||||
#define PCI_PM_CTRL_PME_STATUS 0x8000 /* PME pin status */
|
||||
#define PCI_PM_PPB_EXTENSIONS 6 /* PPB support extensions (??) */
|
||||
#define PCI_PM_PPB_B2_B3 0x40 /* Stop clock when in D3hot (??) */
|
||||
#define PCI_PM_BPCC_ENABLE 0x80 /* Bus power/clock control enable (??) */
|
||||
#define PCI_PM_DATA_REGISTER 7 /* (??) */
|
||||
#define PCI_PM_SIZEOF 8
|
||||
|
||||
/* AGP registers */
|
||||
|
||||
#define PCI_AGP_VERSION 2 /* BCD version number */
|
||||
#define PCI_AGP_RFU 3 /* Rest of capability flags */
|
||||
#define PCI_AGP_STATUS 4 /* Status register */
|
||||
#define PCI_AGP_STATUS_RQ_MASK 0xff000000 /* Maximum number of requests - 1 */
|
||||
#define PCI_AGP_STATUS_SBA 0x0200 /* Sideband addressing supported */
|
||||
#define PCI_AGP_STATUS_64BIT 0x0020 /* 64-bit addressing supported */
|
||||
#define PCI_AGP_STATUS_FW 0x0010 /* FW transfers supported */
|
||||
#define PCI_AGP_STATUS_RATE4 0x0004 /* 4x transfer rate supported */
|
||||
#define PCI_AGP_STATUS_RATE2 0x0002 /* 2x transfer rate supported */
|
||||
#define PCI_AGP_STATUS_RATE1 0x0001 /* 1x transfer rate supported */
|
||||
#define PCI_AGP_COMMAND 8 /* Control register */
|
||||
#define PCI_AGP_COMMAND_RQ_MASK 0xff000000 /* Master: Maximum number of requests */
|
||||
#define PCI_AGP_COMMAND_SBA 0x0200 /* Sideband addressing enabled */
|
||||
#define PCI_AGP_COMMAND_AGP 0x0100 /* Allow processing of AGP transactions */
|
||||
#define PCI_AGP_COMMAND_64BIT 0x0020 /* Allow processing of 64-bit addresses */
|
||||
#define PCI_AGP_COMMAND_FW 0x0010 /* Force FW transfers */
|
||||
#define PCI_AGP_COMMAND_RATE4 0x0004 /* Use 4x rate */
|
||||
#define PCI_AGP_COMMAND_RATE2 0x0002 /* Use 2x rate */
|
||||
#define PCI_AGP_COMMAND_RATE1 0x0001 /* Use 1x rate */
|
||||
#define PCI_AGP_SIZEOF 12
|
||||
|
||||
/* Vital Product Data */
|
||||
|
||||
#define PCI_VPD_ADDR 2 /* Address to access (15 bits!) */
|
||||
#define PCI_VPD_ADDR_MASK 0x7fff /* Address mask */
|
||||
#define PCI_VPD_ADDR_F 0x8000 /* Write 0, 1 indicates completion */
|
||||
#define PCI_VPD_DATA 4 /* 32-bits of data returned here */
|
||||
|
||||
/* Slot Identification */
|
||||
|
||||
#define PCI_SID_ESR 2 /* Expansion Slot Register */
|
||||
#define PCI_SID_ESR_NSLOTS 0x1f /* Number of expansion slots available */
|
||||
#define PCI_SID_ESR_FIC 0x20 /* First In Chassis Flag */
|
||||
#define PCI_SID_CHASSIS_NR 3 /* Chassis Number */
|
||||
|
||||
/* Message Signalled Interrupts registers */
|
||||
|
||||
#define PCI_MSI_FLAGS 2 /* Various flags */
|
||||
#define PCI_MSI_FLAGS_64BIT 0x80 /* 64-bit addresses allowed */
|
||||
#define PCI_MSI_FLAGS_QSIZE 0x70 /* Message queue size configured */
|
||||
#define PCI_MSI_FLAGS_QMASK 0x0e /* Maximum queue size available */
|
||||
#define PCI_MSI_FLAGS_ENABLE 0x01 /* MSI feature enabled */
|
||||
#define PCI_MSI_FLAGS_MASKBIT 0x100 /* 64-bit mask bits allowed */
|
||||
#define PCI_MSI_RFU 3 /* Rest of capability flags */
|
||||
#define PCI_MSI_ADDRESS_LO 4 /* Lower 32 bits */
|
||||
#define PCI_MSI_ADDRESS_HI 8 /* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
|
||||
#define PCI_MSI_DATA_32 8 /* 16 bits of data for 32-bit devices */
|
||||
#define PCI_MSI_DATA_64 12 /* 16 bits of data for 64-bit devices */
|
||||
#define PCI_MSI_MASK_BIT 16 /* Mask bits register */
|
||||
|
||||
/* CompactPCI Hotswap Register */
|
||||
|
||||
#define PCI_CHSWP_CSR 2 /* Control and Status Register */
|
||||
#define PCI_CHSWP_DHA 0x01 /* Device Hiding Arm */
|
||||
#define PCI_CHSWP_EIM 0x02 /* ENUM# Signal Mask */
|
||||
#define PCI_CHSWP_PIE 0x04 /* Pending Insert or Extract */
|
||||
#define PCI_CHSWP_LOO 0x08 /* LED On / Off */
|
||||
#define PCI_CHSWP_PI 0x30 /* Programming Interface */
|
||||
#define PCI_CHSWP_EXT 0x40 /* ENUM# status - extraction */
|
||||
#define PCI_CHSWP_INS 0x80 /* ENUM# status - insertion */
|
||||
|
||||
/* PCI-X registers */
|
||||
|
||||
#define PCI_X_CMD 2 /* Modes & Features */
|
||||
#define PCI_X_CMD_DPERR_E 0x0001 /* Data Parity Error Recovery Enable */
|
||||
#define PCI_X_CMD_ERO 0x0002 /* Enable Relaxed Ordering */
|
||||
#define PCI_X_CMD_MAX_READ 0x000c /* Max Memory Read Byte Count */
|
||||
#define PCI_X_CMD_MAX_SPLIT 0x0070 /* Max Outstanding Split Transactions */
|
||||
#define PCI_X_CMD_VERSION(x) (((x) >> 12) & 3) /* Version */
|
||||
#define PCI_X_STATUS 4 /* PCI-X capabilities */
|
||||
#define PCI_X_STATUS_DEVFN 0x000000ff /* A copy of devfn */
|
||||
#define PCI_X_STATUS_BUS 0x0000ff00 /* A copy of bus nr */
|
||||
#define PCI_X_STATUS_64BIT 0x00010000 /* 64-bit device */
|
||||
#define PCI_X_STATUS_133MHZ 0x00020000 /* 133 MHz capable */
|
||||
#define PCI_X_STATUS_SPL_DISC 0x00040000 /* Split Completion Discarded */
|
||||
#define PCI_X_STATUS_UNX_SPL 0x00080000 /* Unexpected Split Completion */
|
||||
#define PCI_X_STATUS_COMPLEX 0x00100000 /* Device Complexity */
|
||||
#define PCI_X_STATUS_MAX_READ 0x00600000 /* Designed Max Memory Read Count */
|
||||
#define PCI_X_STATUS_MAX_SPLIT 0x03800000 /* Designed Max Outstanding Split Transactions */
|
||||
#define PCI_X_STATUS_MAX_CUM 0x1c000000 /* Designed Max Cumulative Read Size */
|
||||
#define PCI_X_STATUS_SPL_ERR 0x20000000 /* Rcvd Split Completion Error Msg */
|
||||
#define PCI_X_STATUS_266MHZ 0x40000000 /* 266 MHz capable */
|
||||
#define PCI_X_STATUS_533MHZ 0x80000000 /* 533 MHz capable */
|
||||
|
||||
/* PCI Express capability registers */
|
||||
|
||||
#define PCI_EXP_FLAGS 2 /* Capabilities register */
|
||||
#define PCI_EXP_FLAGS_VERS 0x000f /* Capability version */
|
||||
#define PCI_EXP_FLAGS_TYPE 0x00f0 /* Device/Port type */
|
||||
#define PCI_EXP_TYPE_ENDPOINT 0x0 /* Express Endpoint */
|
||||
#define PCI_EXP_TYPE_LEG_END 0x1 /* Legacy Endpoint */
|
||||
#define PCI_EXP_TYPE_ROOT_PORT 0x4 /* Root Port */
|
||||
#define PCI_EXP_TYPE_UPSTREAM 0x5 /* Upstream Port */
|
||||
#define PCI_EXP_TYPE_DOWNSTREAM 0x6 /* Downstream Port */
|
||||
#define PCI_EXP_TYPE_PCI_BRIDGE 0x7 /* PCI/PCI-X Bridge */
|
||||
#define PCI_EXP_FLAGS_SLOT 0x0100 /* Slot implemented */
|
||||
#define PCI_EXP_FLAGS_IRQ 0x3e00 /* Interrupt message number */
|
||||
#define PCI_EXP_DEVCAP 4 /* Device capabilities */
|
||||
#define PCI_EXP_DEVCAP_PAYLOAD 0x07 /* Max_Payload_Size */
|
||||
#define PCI_EXP_DEVCAP_PHANTOM 0x18 /* Phantom functions */
|
||||
#define PCI_EXP_DEVCAP_EXT_TAG 0x20 /* Extended tags */
|
||||
#define PCI_EXP_DEVCAP_L0S 0x1c0 /* L0s Acceptable Latency */
|
||||
#define PCI_EXP_DEVCAP_L1 0xe00 /* L1 Acceptable Latency */
|
||||
#define PCI_EXP_DEVCAP_ATN_BUT 0x1000 /* Attention Button Present */
|
||||
#define PCI_EXP_DEVCAP_ATN_IND 0x2000 /* Attention Indicator Present */
|
||||
#define PCI_EXP_DEVCAP_PWR_IND 0x4000 /* Power Indicator Present */
|
||||
#define PCI_EXP_DEVCAP_PWR_VAL 0x3fc0000 /* Slot Power Limit Value */
|
||||
#define PCI_EXP_DEVCAP_PWR_SCL 0xc000000 /* Slot Power Limit Scale */
|
||||
#define PCI_EXP_DEVCTL 8 /* Device Control */
|
||||
#define PCI_EXP_DEVCTL_CERE 0x0001 /* Correctable Error Reporting En. */
|
||||
#define PCI_EXP_DEVCTL_NFERE 0x0002 /* Non-Fatal Error Reporting Enable */
|
||||
#define PCI_EXP_DEVCTL_FERE 0x0004 /* Fatal Error Reporting Enable */
|
||||
#define PCI_EXP_DEVCTL_URRE 0x0008 /* Unsupported Request Reporting En. */
|
||||
#define PCI_EXP_DEVCTL_RELAX_EN 0x0010 /* Enable relaxed ordering */
|
||||
#define PCI_EXP_DEVCTL_PAYLOAD 0x00e0 /* Max_Payload_Size */
|
||||
#define PCI_EXP_DEVCTL_EXT_TAG 0x0100 /* Extended Tag Field Enable */
|
||||
#define PCI_EXP_DEVCTL_PHANTOM 0x0200 /* Phantom Functions Enable */
|
||||
#define PCI_EXP_DEVCTL_AUX_PME 0x0400 /* Auxiliary Power PM Enable */
|
||||
#define PCI_EXP_DEVCTL_NOSNOOP_EN 0x0800 /* Enable No Snoop */
|
||||
#define PCI_EXP_DEVCTL_READRQ 0x7000 /* Max_Read_Request_Size */
|
||||
#define PCI_EXP_DEVSTA 10 /* Device Status */
|
||||
#define PCI_EXP_DEVSTA_CED 0x01 /* Correctable Error Detected */
|
||||
#define PCI_EXP_DEVSTA_NFED 0x02 /* Non-Fatal Error Detected */
|
||||
#define PCI_EXP_DEVSTA_FED 0x04 /* Fatal Error Detected */
|
||||
#define PCI_EXP_DEVSTA_URD 0x08 /* Unsupported Request Detected */
|
||||
#define PCI_EXP_DEVSTA_AUXPD 0x10 /* AUX Power Detected */
|
||||
#define PCI_EXP_DEVSTA_TRPND 0x20 /* Transactions Pending */
|
||||
#define PCI_EXP_LNKCAP 12 /* Link Capabilities */
|
||||
#define PCI_EXP_LNKCTL 16 /* Link Control */
|
||||
#define PCI_EXP_LNKSTA 18 /* Link Status */
|
||||
#define PCI_EXP_SLTCAP 20 /* Slot Capabilities */
|
||||
#define PCI_EXP_SLTCTL 24 /* Slot Control */
|
||||
#define PCI_EXP_SLTSTA 26 /* Slot Status */
|
||||
#define PCI_EXP_RTCTL 28 /* Root Control */
|
||||
#define PCI_EXP_RTCTL_SECEE 0x01 /* System Error on Correctable Error */
|
||||
#define PCI_EXP_RTCTL_SENFEE 0x02 /* System Error on Non-Fatal Error */
|
||||
#define PCI_EXP_RTCTL_SEFEE 0x04 /* System Error on Fatal Error */
|
||||
#define PCI_EXP_RTCTL_PMEIE 0x08 /* PME Interrupt Enable */
|
||||
#define PCI_EXP_RTCTL_CRSSVE 0x10 /* CRS Software Visibility Enable */
|
||||
#define PCI_EXP_RTCAP 30 /* Root Capabilities */
|
||||
#define PCI_EXP_RTSTA 32 /* Root Status */
|
||||
|
||||
/* Extended Capabilities (PCI-X 2.0 and Express) */
|
||||
#define PCI_EXT_CAP_ID(header) (header & 0x0000ffff)
|
||||
#define PCI_EXT_CAP_VER(header) ((header >> 16) & 0xf)
|
||||
#define PCI_EXT_CAP_NEXT(header) ((header >> 20) & 0xffc)
|
||||
|
||||
#define PCI_EXT_CAP_ID_ERR 1
|
||||
#define PCI_EXT_CAP_ID_VC 2
|
||||
#define PCI_EXT_CAP_ID_DSN 3
|
||||
#define PCI_EXT_CAP_ID_PWR 4
|
||||
|
||||
/* Advanced Error Reporting */
|
||||
#define PCI_ERR_UNCOR_STATUS 4 /* Uncorrectable Error Status */
|
||||
#define PCI_ERR_UNC_TRAIN 0x00000001 /* Training */
|
||||
#define PCI_ERR_UNC_DLP 0x00000010 /* Data Link Protocol */
|
||||
#define PCI_ERR_UNC_POISON_TLP 0x00001000 /* Poisoned TLP */
|
||||
#define PCI_ERR_UNC_FCP 0x00002000 /* Flow Control Protocol */
|
||||
#define PCI_ERR_UNC_COMP_TIME 0x00004000 /* Completion Timeout */
|
||||
#define PCI_ERR_UNC_COMP_ABORT 0x00008000 /* Completer Abort */
|
||||
#define PCI_ERR_UNC_UNX_COMP 0x00010000 /* Unexpected Completion */
|
||||
#define PCI_ERR_UNC_RX_OVER 0x00020000 /* Receiver Overflow */
|
||||
#define PCI_ERR_UNC_MALF_TLP 0x00040000 /* Malformed TLP */
|
||||
#define PCI_ERR_UNC_ECRC 0x00080000 /* ECRC Error Status */
|
||||
#define PCI_ERR_UNC_UNSUP 0x00100000 /* Unsupported Request */
|
||||
#define PCI_ERR_UNCOR_MASK 8 /* Uncorrectable Error Mask */
|
||||
/* Same bits as above */
|
||||
#define PCI_ERR_UNCOR_SEVER 12 /* Uncorrectable Error Severity */
|
||||
/* Same bits as above */
|
||||
#define PCI_ERR_COR_STATUS 16 /* Correctable Error Status */
|
||||
#define PCI_ERR_COR_RCVR 0x00000001 /* Receiver Error Status */
|
||||
#define PCI_ERR_COR_BAD_TLP 0x00000040 /* Bad TLP Status */
|
||||
#define PCI_ERR_COR_BAD_DLLP 0x00000080 /* Bad DLLP Status */
|
||||
#define PCI_ERR_COR_REP_ROLL 0x00000100 /* REPLAY_NUM Rollover */
|
||||
#define PCI_ERR_COR_REP_TIMER 0x00001000 /* Replay Timer Timeout */
|
||||
#define PCI_ERR_COR_MASK 20 /* Correctable Error Mask */
|
||||
/* Same bits as above */
|
||||
#define PCI_ERR_CAP 24 /* Advanced Error Capabilities */
|
||||
#define PCI_ERR_CAP_FEP(x) ((x) & 31) /* First Error Pointer */
|
||||
#define PCI_ERR_CAP_ECRC_GENC 0x00000020 /* ECRC Generation Capable */
|
||||
#define PCI_ERR_CAP_ECRC_GENE 0x00000040 /* ECRC Generation Enable */
|
||||
#define PCI_ERR_CAP_ECRC_CHKC 0x00000080 /* ECRC Check Capable */
|
||||
#define PCI_ERR_CAP_ECRC_CHKE 0x00000100 /* ECRC Check Enable */
|
||||
#define PCI_ERR_HEADER_LOG 28 /* Header Log Register (16 bytes) */
|
||||
#define PCI_ERR_ROOT_COMMAND 44 /* Root Error Command */
|
||||
#define PCI_ERR_ROOT_STATUS 48
|
||||
#define PCI_ERR_ROOT_COR_SRC 52
|
||||
#define PCI_ERR_ROOT_SRC 54
|
||||
|
||||
/* Virtual Channel */
|
||||
#define PCI_VC_PORT_REG1 4
|
||||
#define PCI_VC_PORT_REG2 8
|
||||
#define PCI_VC_PORT_CTRL 12
|
||||
#define PCI_VC_PORT_STATUS 14
|
||||
#define PCI_VC_RES_CAP 16
|
||||
#define PCI_VC_RES_CTRL 20
|
||||
#define PCI_VC_RES_STATUS 26
|
||||
|
||||
/* Power Budgeting */
|
||||
#define PCI_PWR_DSR 4 /* Data Select Register */
|
||||
#define PCI_PWR_DATA 8 /* Data Register */
|
||||
#define PCI_PWR_DATA_BASE(x) ((x) & 0xff) /* Base Power */
|
||||
#define PCI_PWR_DATA_SCALE(x) (((x) >> 8) & 3) /* Data Scale */
|
||||
#define PCI_PWR_DATA_PM_SUB(x) (((x) >> 10) & 7) /* PM Sub State */
|
||||
#define PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3) /* PM State */
|
||||
#define PCI_PWR_DATA_TYPE(x) (((x) >> 15) & 7) /* Type */
|
||||
#define PCI_PWR_DATA_RAIL(x) (((x) >> 18) & 7) /* Power Rail */
|
||||
#define PCI_PWR_CAP 12 /* Capability */
|
||||
#define PCI_PWR_CAP_BUDGET(x) ((x) & 1) /* Included in system budget */
|
||||
/* Include the pci register defines */
|
||||
#include <linux/pci_regs.h>
|
||||
|
||||
/* Include the ID list */
|
||||
|
||||
#include <linux/pci_ids.h>
|
||||
|
||||
/*
|
||||
@@ -496,11 +70,12 @@ enum pci_mmap_state {
|
||||
|
||||
typedef int __bitwise pci_power_t;
|
||||
|
||||
#define PCI_D0 ((pci_power_t __force) 0)
|
||||
#define PCI_D1 ((pci_power_t __force) 1)
|
||||
#define PCI_D2 ((pci_power_t __force) 2)
|
||||
#define PCI_D0 ((pci_power_t __force) 0)
|
||||
#define PCI_D1 ((pci_power_t __force) 1)
|
||||
#define PCI_D2 ((pci_power_t __force) 2)
|
||||
#define PCI_D3hot ((pci_power_t __force) 3)
|
||||
#define PCI_D3cold ((pci_power_t __force) 4)
|
||||
#define PCI_UNKNOWN ((pci_power_t __force) 5)
|
||||
#define PCI_POWER_ERROR ((pci_power_t __force) -1)
|
||||
|
||||
/*
|
||||
@@ -562,11 +137,6 @@ struct pci_dev {
|
||||
struct bin_attribute *rom_attr; /* attribute descriptor for sysfs ROM entry */
|
||||
int rom_attr_enabled; /* has display of the rom attribute been enabled? */
|
||||
struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE]; /* sysfs file for resources */
|
||||
#ifdef CONFIG_PCI_NAMES
|
||||
#define PCI_NAME_SIZE 255
|
||||
#define PCI_NAME_HALF __stringify(43) /* less than half to handle slop */
|
||||
char pretty_name[PCI_NAME_SIZE]; /* pretty name for users to see */
|
||||
#endif
|
||||
};
|
||||
|
||||
#define pci_dev_g(n) list_entry(n, struct pci_dev, global_list)
|
||||
@@ -582,15 +152,15 @@ struct pci_dev {
|
||||
* 7-10 bridges: address space assigned to buses behind the bridge
|
||||
*/
|
||||
|
||||
#define PCI_ROM_RESOURCE 6
|
||||
#define PCI_BRIDGE_RESOURCES 7
|
||||
#define PCI_NUM_RESOURCES 11
|
||||
#define PCI_ROM_RESOURCE 6
|
||||
#define PCI_BRIDGE_RESOURCES 7
|
||||
#define PCI_NUM_RESOURCES 11
|
||||
|
||||
#ifndef PCI_BUS_NUM_RESOURCES
|
||||
#define PCI_BUS_NUM_RESOURCES 8
|
||||
#define PCI_BUS_NUM_RESOURCES 8
|
||||
#endif
|
||||
|
||||
#define PCI_REGION_FLAG_MASK 0x0fU /* These bits of resource flags tell us the PCI region flags */
|
||||
|
||||
#define PCI_REGION_FLAG_MASK 0x0fU /* These bits of resource flags tell us the PCI region flags */
|
||||
|
||||
struct pci_bus {
|
||||
struct list_head node; /* node in list of buses */
|
||||
@@ -699,7 +269,7 @@ struct pci_driver {
|
||||
* @dev_class_mask: the class mask for this device
|
||||
*
|
||||
* This macro is used to create a struct pci_device_id that matches a
|
||||
* specific PCI class. The vendor, device, subvendor, and subdevice
|
||||
* specific PCI class. The vendor, device, subvendor, and subdevice
|
||||
* fields will be set to PCI_ANY_ID.
|
||||
*/
|
||||
#define PCI_DEVICE_CLASS(dev_class,dev_class_mask) \
|
||||
@@ -707,7 +277,7 @@ struct pci_driver {
|
||||
.vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \
|
||||
.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
|
||||
|
||||
/*
|
||||
/*
|
||||
* pci_module_init is obsolete, this stays here till we fix up all usages of it
|
||||
* in the tree.
|
||||
*/
|
||||
@@ -745,12 +315,13 @@ static inline struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *s
|
||||
pci_bus_add_devices(root_bus);
|
||||
return root_bus;
|
||||
}
|
||||
struct pci_bus *pci_create_bus(struct device *parent, int bus, struct pci_ops *ops, void *sysdata);
|
||||
struct pci_bus * pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr);
|
||||
int pci_scan_slot(struct pci_bus *bus, int devfn);
|
||||
struct pci_dev * pci_scan_single_device(struct pci_bus *bus, int devfn);
|
||||
void pci_device_add(struct pci_dev *dev, struct pci_bus *bus);
|
||||
unsigned int pci_scan_child_bus(struct pci_bus *bus);
|
||||
void pci_bus_add_device(struct pci_dev *dev);
|
||||
void pci_name_device(struct pci_dev *dev);
|
||||
char *pci_class_name(u32 class);
|
||||
void pci_read_bridge_bases(struct pci_bus *child);
|
||||
struct resource *pci_find_parent_resource(const struct pci_dev *dev, struct resource *res);
|
||||
int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge);
|
||||
@@ -758,6 +329,7 @@ extern struct pci_dev *pci_dev_get(struct pci_dev *dev);
|
||||
extern void pci_dev_put(struct pci_dev *dev);
|
||||
extern void pci_remove_bus(struct pci_bus *b);
|
||||
extern void pci_remove_bus_device(struct pci_dev *dev);
|
||||
void pci_setup_cardbus(struct pci_bus *bus);
|
||||
|
||||
/* Generic PCI functions exported to card drivers */
|
||||
|
||||
@@ -815,13 +387,16 @@ void pci_set_master(struct pci_dev *dev);
|
||||
#define HAVE_PCI_SET_MWI
|
||||
int pci_set_mwi(struct pci_dev *dev);
|
||||
void pci_clear_mwi(struct pci_dev *dev);
|
||||
void pci_intx(struct pci_dev *dev, int enable);
|
||||
int pci_set_dma_mask(struct pci_dev *dev, u64 mask);
|
||||
int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask);
|
||||
void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno);
|
||||
int pci_assign_resource(struct pci_dev *dev, int i);
|
||||
void pci_restore_bars(struct pci_dev *dev);
|
||||
|
||||
/* ROM control related routines */
|
||||
void __iomem *pci_map_rom(struct pci_dev *pdev, size_t *size);
|
||||
void __iomem *pci_map_rom_copy(struct pci_dev *pdev, size_t *size);
|
||||
void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size);
|
||||
void __iomem __must_check *pci_map_rom_copy(struct pci_dev *pdev, size_t *size);
|
||||
void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom);
|
||||
void pci_remove_rom(struct pci_dev *pdev);
|
||||
|
||||
@@ -865,6 +440,9 @@ const struct pci_device_id *pci_match_device(struct pci_driver *drv, struct pci_
|
||||
const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, struct pci_dev *dev);
|
||||
int pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass);
|
||||
|
||||
void pci_walk_bus(struct pci_bus *top, void (*cb)(struct pci_dev *, void *),
|
||||
void *userdata);
|
||||
|
||||
/* kmem_cache style wrapper around pci_alloc_consistent() */
|
||||
|
||||
#include <linux/dmapool.h>
|
||||
@@ -912,18 +490,26 @@ extern void pci_disable_msix(struct pci_dev *dev);
|
||||
extern void msi_remove_pci_irq_vectors(struct pci_dev *dev);
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_PCI */
|
||||
/*
|
||||
* PCI domain support. Sometimes called PCI segment (eg by ACPI),
|
||||
* a PCI domain is defined to be a set of PCI busses which share
|
||||
* configuration space.
|
||||
*/
|
||||
#ifndef CONFIG_PCI_DOMAINS
|
||||
static inline int pci_domain_nr(struct pci_bus *bus) { return 0; }
|
||||
static inline int pci_proc_domain(struct pci_bus *bus)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Include architecture-dependent settings and functions */
|
||||
|
||||
#include <asm/pci.h>
|
||||
#else /* CONFIG_PCI is not enabled */
|
||||
|
||||
/*
|
||||
* If the system does not have PCI, clearly these return errors. Define
|
||||
* these as simple inline functions to avoid hair in drivers.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_PCI
|
||||
#define _PCI_NOP(o,s,t) \
|
||||
static inline int pci_##o##_config_##s (struct pci_dev *dev, int where, t val) \
|
||||
{ return PCIBIOS_FUNC_NOT_SUPPORTED; }
|
||||
@@ -974,21 +560,11 @@ static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int en
|
||||
|
||||
#define pci_dma_burst_advice(pdev, strat, strategy_parameter) do { } while (0)
|
||||
|
||||
#else
|
||||
#endif /* CONFIG_PCI */
|
||||
|
||||
/*
|
||||
* PCI domain support. Sometimes called PCI segment (eg by ACPI),
|
||||
* a PCI domain is defined to be a set of PCI busses which share
|
||||
* configuration space.
|
||||
*/
|
||||
#ifndef CONFIG_PCI_DOMAINS
|
||||
static inline int pci_domain_nr(struct pci_bus *bus) { return 0; }
|
||||
static inline int pci_proc_domain(struct pci_bus *bus)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#endif /* !CONFIG_PCI */
|
||||
/* Include architecture-dependent settings and functions */
|
||||
|
||||
#include <asm/pci.h>
|
||||
|
||||
/* these helpers provide future and backwards compatibility
|
||||
* for accessing popular PCI BAR info */
|
||||
@@ -1025,13 +601,6 @@ static inline char *pci_name(struct pci_dev *pdev)
|
||||
return pdev->dev.bus_id;
|
||||
}
|
||||
|
||||
/* Some archs want to see the pretty pci name, so use this macro */
|
||||
#ifdef CONFIG_PCI_NAMES
|
||||
#define pci_pretty_name(dev) ((dev)->pretty_name)
|
||||
#else
|
||||
#define pci_pretty_name(dev) ""
|
||||
#endif
|
||||
|
||||
|
||||
/* Some archs don't want to expose struct resource to userland as-is
|
||||
* in sysfs and /proc
|
||||
@@ -1067,7 +636,7 @@ enum pci_fixup_pass {
|
||||
|
||||
/* Anonymous variables would be nice... */
|
||||
#define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, hook) \
|
||||
static struct pci_fixup __pci_fixup_##name __attribute_used__ \
|
||||
static const struct pci_fixup __pci_fixup_##name __attribute_used__ \
|
||||
__attribute__((__section__(#section))) = { vendor, device, hook };
|
||||
#define DECLARE_PCI_FIXUP_EARLY(vendor, device, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \
|
||||
|
||||
@@ -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
|
||||
|
||||
448
include/linux/pci_regs.h
Normal file
448
include/linux/pci_regs.h
Normal file
@@ -0,0 +1,448 @@
|
||||
/*
|
||||
* pci_regs.h
|
||||
*
|
||||
* PCI standard defines
|
||||
* Copyright 1994, Drew Eckhardt
|
||||
* Copyright 1997--1999 Martin Mares <mj@ucw.cz>
|
||||
*
|
||||
* For more information, please consult the following manuals (look at
|
||||
* http://www.pcisig.com/ for how to get them):
|
||||
*
|
||||
* PCI BIOS Specification
|
||||
* PCI Local Bus Specification
|
||||
* PCI to PCI Bridge Specification
|
||||
* PCI System Design Guide
|
||||
*/
|
||||
|
||||
#ifndef LINUX_PCI_REGS_H
|
||||
#define LINUX_PCI_REGS_H
|
||||
|
||||
/*
|
||||
* Under PCI, each device has 256 bytes of configuration address space,
|
||||
* of which the first 64 bytes are standardized as follows:
|
||||
*/
|
||||
#define PCI_VENDOR_ID 0x00 /* 16 bits */
|
||||
#define PCI_DEVICE_ID 0x02 /* 16 bits */
|
||||
#define PCI_COMMAND 0x04 /* 16 bits */
|
||||
#define PCI_COMMAND_IO 0x1 /* Enable response in I/O space */
|
||||
#define PCI_COMMAND_MEMORY 0x2 /* Enable response in Memory space */
|
||||
#define PCI_COMMAND_MASTER 0x4 /* Enable bus mastering */
|
||||
#define PCI_COMMAND_SPECIAL 0x8 /* Enable response to special cycles */
|
||||
#define PCI_COMMAND_INVALIDATE 0x10 /* Use memory write and invalidate */
|
||||
#define PCI_COMMAND_VGA_PALETTE 0x20 /* Enable palette snooping */
|
||||
#define PCI_COMMAND_PARITY 0x40 /* Enable parity checking */
|
||||
#define PCI_COMMAND_WAIT 0x80 /* Enable address/data stepping */
|
||||
#define PCI_COMMAND_SERR 0x100 /* Enable SERR */
|
||||
#define PCI_COMMAND_FAST_BACK 0x200 /* Enable back-to-back writes */
|
||||
#define PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */
|
||||
|
||||
#define PCI_STATUS 0x06 /* 16 bits */
|
||||
#define PCI_STATUS_CAP_LIST 0x10 /* Support Capability List */
|
||||
#define PCI_STATUS_66MHZ 0x20 /* Support 66 Mhz PCI 2.1 bus */
|
||||
#define PCI_STATUS_UDF 0x40 /* Support User Definable Features [obsolete] */
|
||||
#define PCI_STATUS_FAST_BACK 0x80 /* Accept fast-back to back */
|
||||
#define PCI_STATUS_PARITY 0x100 /* Detected parity error */
|
||||
#define PCI_STATUS_DEVSEL_MASK 0x600 /* DEVSEL timing */
|
||||
#define PCI_STATUS_DEVSEL_FAST 0x000
|
||||
#define PCI_STATUS_DEVSEL_MEDIUM 0x200
|
||||
#define PCI_STATUS_DEVSEL_SLOW 0x400
|
||||
#define PCI_STATUS_SIG_TARGET_ABORT 0x800 /* Set on target abort */
|
||||
#define PCI_STATUS_REC_TARGET_ABORT 0x1000 /* Master ack of " */
|
||||
#define PCI_STATUS_REC_MASTER_ABORT 0x2000 /* Set on master abort */
|
||||
#define PCI_STATUS_SIG_SYSTEM_ERROR 0x4000 /* Set when we drive SERR */
|
||||
#define PCI_STATUS_DETECTED_PARITY 0x8000 /* Set on parity error */
|
||||
|
||||
#define PCI_CLASS_REVISION 0x08 /* High 24 bits are class, low 8 revision */
|
||||
#define PCI_REVISION_ID 0x08 /* Revision ID */
|
||||
#define PCI_CLASS_PROG 0x09 /* Reg. Level Programming Interface */
|
||||
#define PCI_CLASS_DEVICE 0x0a /* Device class */
|
||||
|
||||
#define PCI_CACHE_LINE_SIZE 0x0c /* 8 bits */
|
||||
#define PCI_LATENCY_TIMER 0x0d /* 8 bits */
|
||||
#define PCI_HEADER_TYPE 0x0e /* 8 bits */
|
||||
#define PCI_HEADER_TYPE_NORMAL 0
|
||||
#define PCI_HEADER_TYPE_BRIDGE 1
|
||||
#define PCI_HEADER_TYPE_CARDBUS 2
|
||||
|
||||
#define PCI_BIST 0x0f /* 8 bits */
|
||||
#define PCI_BIST_CODE_MASK 0x0f /* Return result */
|
||||
#define PCI_BIST_START 0x40 /* 1 to start BIST, 2 secs or less */
|
||||
#define PCI_BIST_CAPABLE 0x80 /* 1 if BIST capable */
|
||||
|
||||
/*
|
||||
* Base addresses specify locations in memory or I/O space.
|
||||
* Decoded size can be determined by writing a value of
|
||||
* 0xffffffff to the register, and reading it back. Only
|
||||
* 1 bits are decoded.
|
||||
*/
|
||||
#define PCI_BASE_ADDRESS_0 0x10 /* 32 bits */
|
||||
#define PCI_BASE_ADDRESS_1 0x14 /* 32 bits [htype 0,1 only] */
|
||||
#define PCI_BASE_ADDRESS_2 0x18 /* 32 bits [htype 0 only] */
|
||||
#define PCI_BASE_ADDRESS_3 0x1c /* 32 bits */
|
||||
#define PCI_BASE_ADDRESS_4 0x20 /* 32 bits */
|
||||
#define PCI_BASE_ADDRESS_5 0x24 /* 32 bits */
|
||||
#define PCI_BASE_ADDRESS_SPACE 0x01 /* 0 = memory, 1 = I/O */
|
||||
#define PCI_BASE_ADDRESS_SPACE_IO 0x01
|
||||
#define PCI_BASE_ADDRESS_SPACE_MEMORY 0x00
|
||||
#define PCI_BASE_ADDRESS_MEM_TYPE_MASK 0x06
|
||||
#define PCI_BASE_ADDRESS_MEM_TYPE_32 0x00 /* 32 bit address */
|
||||
#define PCI_BASE_ADDRESS_MEM_TYPE_1M 0x02 /* Below 1M [obsolete] */
|
||||
#define PCI_BASE_ADDRESS_MEM_TYPE_64 0x04 /* 64 bit address */
|
||||
#define PCI_BASE_ADDRESS_MEM_PREFETCH 0x08 /* prefetchable? */
|
||||
#define PCI_BASE_ADDRESS_MEM_MASK (~0x0fUL)
|
||||
#define PCI_BASE_ADDRESS_IO_MASK (~0x03UL)
|
||||
/* bit 1 is reserved if address_space = 1 */
|
||||
|
||||
/* Header type 0 (normal devices) */
|
||||
#define PCI_CARDBUS_CIS 0x28
|
||||
#define PCI_SUBSYSTEM_VENDOR_ID 0x2c
|
||||
#define PCI_SUBSYSTEM_ID 0x2e
|
||||
#define PCI_ROM_ADDRESS 0x30 /* Bits 31..11 are address, 10..1 reserved */
|
||||
#define PCI_ROM_ADDRESS_ENABLE 0x01
|
||||
#define PCI_ROM_ADDRESS_MASK (~0x7ffUL)
|
||||
|
||||
#define PCI_CAPABILITY_LIST 0x34 /* Offset of first capability list entry */
|
||||
|
||||
/* 0x35-0x3b are reserved */
|
||||
#define PCI_INTERRUPT_LINE 0x3c /* 8 bits */
|
||||
#define PCI_INTERRUPT_PIN 0x3d /* 8 bits */
|
||||
#define PCI_MIN_GNT 0x3e /* 8 bits */
|
||||
#define PCI_MAX_LAT 0x3f /* 8 bits */
|
||||
|
||||
/* Header type 1 (PCI-to-PCI bridges) */
|
||||
#define PCI_PRIMARY_BUS 0x18 /* Primary bus number */
|
||||
#define PCI_SECONDARY_BUS 0x19 /* Secondary bus number */
|
||||
#define PCI_SUBORDINATE_BUS 0x1a /* Highest bus number behind the bridge */
|
||||
#define PCI_SEC_LATENCY_TIMER 0x1b /* Latency timer for secondary interface */
|
||||
#define PCI_IO_BASE 0x1c /* I/O range behind the bridge */
|
||||
#define PCI_IO_LIMIT 0x1d
|
||||
#define PCI_IO_RANGE_TYPE_MASK 0x0fUL /* I/O bridging type */
|
||||
#define PCI_IO_RANGE_TYPE_16 0x00
|
||||
#define PCI_IO_RANGE_TYPE_32 0x01
|
||||
#define PCI_IO_RANGE_MASK (~0x0fUL)
|
||||
#define PCI_SEC_STATUS 0x1e /* Secondary status register, only bit 14 used */
|
||||
#define PCI_MEMORY_BASE 0x20 /* Memory range behind */
|
||||
#define PCI_MEMORY_LIMIT 0x22
|
||||
#define PCI_MEMORY_RANGE_TYPE_MASK 0x0fUL
|
||||
#define PCI_MEMORY_RANGE_MASK (~0x0fUL)
|
||||
#define PCI_PREF_MEMORY_BASE 0x24 /* Prefetchable memory range behind */
|
||||
#define PCI_PREF_MEMORY_LIMIT 0x26
|
||||
#define PCI_PREF_RANGE_TYPE_MASK 0x0fUL
|
||||
#define PCI_PREF_RANGE_TYPE_32 0x00
|
||||
#define PCI_PREF_RANGE_TYPE_64 0x01
|
||||
#define PCI_PREF_RANGE_MASK (~0x0fUL)
|
||||
#define PCI_PREF_BASE_UPPER32 0x28 /* Upper half of prefetchable memory range */
|
||||
#define PCI_PREF_LIMIT_UPPER32 0x2c
|
||||
#define PCI_IO_BASE_UPPER16 0x30 /* Upper half of I/O addresses */
|
||||
#define PCI_IO_LIMIT_UPPER16 0x32
|
||||
/* 0x34 same as for htype 0 */
|
||||
/* 0x35-0x3b is reserved */
|
||||
#define PCI_ROM_ADDRESS1 0x38 /* Same as PCI_ROM_ADDRESS, but for htype 1 */
|
||||
/* 0x3c-0x3d are same as for htype 0 */
|
||||
#define PCI_BRIDGE_CONTROL 0x3e
|
||||
#define PCI_BRIDGE_CTL_PARITY 0x01 /* Enable parity detection on secondary interface */
|
||||
#define PCI_BRIDGE_CTL_SERR 0x02 /* The same for SERR forwarding */
|
||||
#define PCI_BRIDGE_CTL_NO_ISA 0x04 /* Disable bridging of ISA ports */
|
||||
#define PCI_BRIDGE_CTL_VGA 0x08 /* Forward VGA addresses */
|
||||
#define PCI_BRIDGE_CTL_MASTER_ABORT 0x20 /* Report master aborts */
|
||||
#define PCI_BRIDGE_CTL_BUS_RESET 0x40 /* Secondary bus reset */
|
||||
#define PCI_BRIDGE_CTL_FAST_BACK 0x80 /* Fast Back2Back enabled on secondary interface */
|
||||
|
||||
/* Header type 2 (CardBus bridges) */
|
||||
#define PCI_CB_CAPABILITY_LIST 0x14
|
||||
/* 0x15 reserved */
|
||||
#define PCI_CB_SEC_STATUS 0x16 /* Secondary status */
|
||||
#define PCI_CB_PRIMARY_BUS 0x18 /* PCI bus number */
|
||||
#define PCI_CB_CARD_BUS 0x19 /* CardBus bus number */
|
||||
#define PCI_CB_SUBORDINATE_BUS 0x1a /* Subordinate bus number */
|
||||
#define PCI_CB_LATENCY_TIMER 0x1b /* CardBus latency timer */
|
||||
#define PCI_CB_MEMORY_BASE_0 0x1c
|
||||
#define PCI_CB_MEMORY_LIMIT_0 0x20
|
||||
#define PCI_CB_MEMORY_BASE_1 0x24
|
||||
#define PCI_CB_MEMORY_LIMIT_1 0x28
|
||||
#define PCI_CB_IO_BASE_0 0x2c
|
||||
#define PCI_CB_IO_BASE_0_HI 0x2e
|
||||
#define PCI_CB_IO_LIMIT_0 0x30
|
||||
#define PCI_CB_IO_LIMIT_0_HI 0x32
|
||||
#define PCI_CB_IO_BASE_1 0x34
|
||||
#define PCI_CB_IO_BASE_1_HI 0x36
|
||||
#define PCI_CB_IO_LIMIT_1 0x38
|
||||
#define PCI_CB_IO_LIMIT_1_HI 0x3a
|
||||
#define PCI_CB_IO_RANGE_MASK (~0x03UL)
|
||||
/* 0x3c-0x3d are same as for htype 0 */
|
||||
#define PCI_CB_BRIDGE_CONTROL 0x3e
|
||||
#define PCI_CB_BRIDGE_CTL_PARITY 0x01 /* Similar to standard bridge control register */
|
||||
#define PCI_CB_BRIDGE_CTL_SERR 0x02
|
||||
#define PCI_CB_BRIDGE_CTL_ISA 0x04
|
||||
#define PCI_CB_BRIDGE_CTL_VGA 0x08
|
||||
#define PCI_CB_BRIDGE_CTL_MASTER_ABORT 0x20
|
||||
#define PCI_CB_BRIDGE_CTL_CB_RESET 0x40 /* CardBus reset */
|
||||
#define PCI_CB_BRIDGE_CTL_16BIT_INT 0x80 /* Enable interrupt for 16-bit cards */
|
||||
#define PCI_CB_BRIDGE_CTL_PREFETCH_MEM0 0x100 /* Prefetch enable for both memory regions */
|
||||
#define PCI_CB_BRIDGE_CTL_PREFETCH_MEM1 0x200
|
||||
#define PCI_CB_BRIDGE_CTL_POST_WRITES 0x400
|
||||
#define PCI_CB_SUBSYSTEM_VENDOR_ID 0x40
|
||||
#define PCI_CB_SUBSYSTEM_ID 0x42
|
||||
#define PCI_CB_LEGACY_MODE_BASE 0x44 /* 16-bit PC Card legacy mode base address (ExCa) */
|
||||
/* 0x48-0x7f reserved */
|
||||
|
||||
/* Capability lists */
|
||||
|
||||
#define PCI_CAP_LIST_ID 0 /* Capability ID */
|
||||
#define PCI_CAP_ID_PM 0x01 /* Power Management */
|
||||
#define PCI_CAP_ID_AGP 0x02 /* Accelerated Graphics Port */
|
||||
#define PCI_CAP_ID_VPD 0x03 /* Vital Product Data */
|
||||
#define PCI_CAP_ID_SLOTID 0x04 /* Slot Identification */
|
||||
#define PCI_CAP_ID_MSI 0x05 /* Message Signalled Interrupts */
|
||||
#define PCI_CAP_ID_CHSWP 0x06 /* CompactPCI HotSwap */
|
||||
#define PCI_CAP_ID_PCIX 0x07 /* PCI-X */
|
||||
#define PCI_CAP_ID_SHPC 0x0C /* PCI Standard Hot-Plug Controller */
|
||||
#define PCI_CAP_ID_EXP 0x10 /* PCI Express */
|
||||
#define PCI_CAP_ID_MSIX 0x11 /* MSI-X */
|
||||
#define PCI_CAP_LIST_NEXT 1 /* Next capability in the list */
|
||||
#define PCI_CAP_FLAGS 2 /* Capability defined flags (16 bits) */
|
||||
#define PCI_CAP_SIZEOF 4
|
||||
|
||||
/* Power Management Registers */
|
||||
|
||||
#define PCI_PM_PMC 2 /* PM Capabilities Register */
|
||||
#define PCI_PM_CAP_VER_MASK 0x0007 /* Version */
|
||||
#define PCI_PM_CAP_PME_CLOCK 0x0008 /* PME clock required */
|
||||
#define PCI_PM_CAP_RESERVED 0x0010 /* Reserved field */
|
||||
#define PCI_PM_CAP_DSI 0x0020 /* Device specific initialization */
|
||||
#define PCI_PM_CAP_AUX_POWER 0x01C0 /* Auxilliary power support mask */
|
||||
#define PCI_PM_CAP_D1 0x0200 /* D1 power state support */
|
||||
#define PCI_PM_CAP_D2 0x0400 /* D2 power state support */
|
||||
#define PCI_PM_CAP_PME 0x0800 /* PME pin supported */
|
||||
#define PCI_PM_CAP_PME_MASK 0xF800 /* PME Mask of all supported states */
|
||||
#define PCI_PM_CAP_PME_D0 0x0800 /* PME# from D0 */
|
||||
#define PCI_PM_CAP_PME_D1 0x1000 /* PME# from D1 */
|
||||
#define PCI_PM_CAP_PME_D2 0x2000 /* PME# from D2 */
|
||||
#define PCI_PM_CAP_PME_D3 0x4000 /* PME# from D3 (hot) */
|
||||
#define PCI_PM_CAP_PME_D3cold 0x8000 /* PME# from D3 (cold) */
|
||||
#define PCI_PM_CTRL 4 /* PM control and status register */
|
||||
#define PCI_PM_CTRL_STATE_MASK 0x0003 /* Current power state (D0 to D3) */
|
||||
#define PCI_PM_CTRL_NO_SOFT_RESET 0x0004 /* No reset for D3hot->D0 */
|
||||
#define PCI_PM_CTRL_PME_ENABLE 0x0100 /* PME pin enable */
|
||||
#define PCI_PM_CTRL_DATA_SEL_MASK 0x1e00 /* Data select (??) */
|
||||
#define PCI_PM_CTRL_DATA_SCALE_MASK 0x6000 /* Data scale (??) */
|
||||
#define PCI_PM_CTRL_PME_STATUS 0x8000 /* PME pin status */
|
||||
#define PCI_PM_PPB_EXTENSIONS 6 /* PPB support extensions (??) */
|
||||
#define PCI_PM_PPB_B2_B3 0x40 /* Stop clock when in D3hot (??) */
|
||||
#define PCI_PM_BPCC_ENABLE 0x80 /* Bus power/clock control enable (??) */
|
||||
#define PCI_PM_DATA_REGISTER 7 /* (??) */
|
||||
#define PCI_PM_SIZEOF 8
|
||||
|
||||
/* AGP registers */
|
||||
|
||||
#define PCI_AGP_VERSION 2 /* BCD version number */
|
||||
#define PCI_AGP_RFU 3 /* Rest of capability flags */
|
||||
#define PCI_AGP_STATUS 4 /* Status register */
|
||||
#define PCI_AGP_STATUS_RQ_MASK 0xff000000 /* Maximum number of requests - 1 */
|
||||
#define PCI_AGP_STATUS_SBA 0x0200 /* Sideband addressing supported */
|
||||
#define PCI_AGP_STATUS_64BIT 0x0020 /* 64-bit addressing supported */
|
||||
#define PCI_AGP_STATUS_FW 0x0010 /* FW transfers supported */
|
||||
#define PCI_AGP_STATUS_RATE4 0x0004 /* 4x transfer rate supported */
|
||||
#define PCI_AGP_STATUS_RATE2 0x0002 /* 2x transfer rate supported */
|
||||
#define PCI_AGP_STATUS_RATE1 0x0001 /* 1x transfer rate supported */
|
||||
#define PCI_AGP_COMMAND 8 /* Control register */
|
||||
#define PCI_AGP_COMMAND_RQ_MASK 0xff000000 /* Master: Maximum number of requests */
|
||||
#define PCI_AGP_COMMAND_SBA 0x0200 /* Sideband addressing enabled */
|
||||
#define PCI_AGP_COMMAND_AGP 0x0100 /* Allow processing of AGP transactions */
|
||||
#define PCI_AGP_COMMAND_64BIT 0x0020 /* Allow processing of 64-bit addresses */
|
||||
#define PCI_AGP_COMMAND_FW 0x0010 /* Force FW transfers */
|
||||
#define PCI_AGP_COMMAND_RATE4 0x0004 /* Use 4x rate */
|
||||
#define PCI_AGP_COMMAND_RATE2 0x0002 /* Use 2x rate */
|
||||
#define PCI_AGP_COMMAND_RATE1 0x0001 /* Use 1x rate */
|
||||
#define PCI_AGP_SIZEOF 12
|
||||
|
||||
/* Vital Product Data */
|
||||
|
||||
#define PCI_VPD_ADDR 2 /* Address to access (15 bits!) */
|
||||
#define PCI_VPD_ADDR_MASK 0x7fff /* Address mask */
|
||||
#define PCI_VPD_ADDR_F 0x8000 /* Write 0, 1 indicates completion */
|
||||
#define PCI_VPD_DATA 4 /* 32-bits of data returned here */
|
||||
|
||||
/* Slot Identification */
|
||||
|
||||
#define PCI_SID_ESR 2 /* Expansion Slot Register */
|
||||
#define PCI_SID_ESR_NSLOTS 0x1f /* Number of expansion slots available */
|
||||
#define PCI_SID_ESR_FIC 0x20 /* First In Chassis Flag */
|
||||
#define PCI_SID_CHASSIS_NR 3 /* Chassis Number */
|
||||
|
||||
/* Message Signalled Interrupts registers */
|
||||
|
||||
#define PCI_MSI_FLAGS 2 /* Various flags */
|
||||
#define PCI_MSI_FLAGS_64BIT 0x80 /* 64-bit addresses allowed */
|
||||
#define PCI_MSI_FLAGS_QSIZE 0x70 /* Message queue size configured */
|
||||
#define PCI_MSI_FLAGS_QMASK 0x0e /* Maximum queue size available */
|
||||
#define PCI_MSI_FLAGS_ENABLE 0x01 /* MSI feature enabled */
|
||||
#define PCI_MSI_FLAGS_MASKBIT 0x100 /* 64-bit mask bits allowed */
|
||||
#define PCI_MSI_RFU 3 /* Rest of capability flags */
|
||||
#define PCI_MSI_ADDRESS_LO 4 /* Lower 32 bits */
|
||||
#define PCI_MSI_ADDRESS_HI 8 /* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
|
||||
#define PCI_MSI_DATA_32 8 /* 16 bits of data for 32-bit devices */
|
||||
#define PCI_MSI_DATA_64 12 /* 16 bits of data for 64-bit devices */
|
||||
#define PCI_MSI_MASK_BIT 16 /* Mask bits register */
|
||||
|
||||
/* CompactPCI Hotswap Register */
|
||||
|
||||
#define PCI_CHSWP_CSR 2 /* Control and Status Register */
|
||||
#define PCI_CHSWP_DHA 0x01 /* Device Hiding Arm */
|
||||
#define PCI_CHSWP_EIM 0x02 /* ENUM# Signal Mask */
|
||||
#define PCI_CHSWP_PIE 0x04 /* Pending Insert or Extract */
|
||||
#define PCI_CHSWP_LOO 0x08 /* LED On / Off */
|
||||
#define PCI_CHSWP_PI 0x30 /* Programming Interface */
|
||||
#define PCI_CHSWP_EXT 0x40 /* ENUM# status - extraction */
|
||||
#define PCI_CHSWP_INS 0x80 /* ENUM# status - insertion */
|
||||
|
||||
/* PCI-X registers */
|
||||
|
||||
#define PCI_X_CMD 2 /* Modes & Features */
|
||||
#define PCI_X_CMD_DPERR_E 0x0001 /* Data Parity Error Recovery Enable */
|
||||
#define PCI_X_CMD_ERO 0x0002 /* Enable Relaxed Ordering */
|
||||
#define PCI_X_CMD_MAX_READ 0x000c /* Max Memory Read Byte Count */
|
||||
#define PCI_X_CMD_MAX_SPLIT 0x0070 /* Max Outstanding Split Transactions */
|
||||
#define PCI_X_CMD_VERSION(x) (((x) >> 12) & 3) /* Version */
|
||||
#define PCI_X_STATUS 4 /* PCI-X capabilities */
|
||||
#define PCI_X_STATUS_DEVFN 0x000000ff /* A copy of devfn */
|
||||
#define PCI_X_STATUS_BUS 0x0000ff00 /* A copy of bus nr */
|
||||
#define PCI_X_STATUS_64BIT 0x00010000 /* 64-bit device */
|
||||
#define PCI_X_STATUS_133MHZ 0x00020000 /* 133 MHz capable */
|
||||
#define PCI_X_STATUS_SPL_DISC 0x00040000 /* Split Completion Discarded */
|
||||
#define PCI_X_STATUS_UNX_SPL 0x00080000 /* Unexpected Split Completion */
|
||||
#define PCI_X_STATUS_COMPLEX 0x00100000 /* Device Complexity */
|
||||
#define PCI_X_STATUS_MAX_READ 0x00600000 /* Designed Max Memory Read Count */
|
||||
#define PCI_X_STATUS_MAX_SPLIT 0x03800000 /* Designed Max Outstanding Split Transactions */
|
||||
#define PCI_X_STATUS_MAX_CUM 0x1c000000 /* Designed Max Cumulative Read Size */
|
||||
#define PCI_X_STATUS_SPL_ERR 0x20000000 /* Rcvd Split Completion Error Msg */
|
||||
#define PCI_X_STATUS_266MHZ 0x40000000 /* 266 MHz capable */
|
||||
#define PCI_X_STATUS_533MHZ 0x80000000 /* 533 MHz capable */
|
||||
|
||||
/* PCI Express capability registers */
|
||||
|
||||
#define PCI_EXP_FLAGS 2 /* Capabilities register */
|
||||
#define PCI_EXP_FLAGS_VERS 0x000f /* Capability version */
|
||||
#define PCI_EXP_FLAGS_TYPE 0x00f0 /* Device/Port type */
|
||||
#define PCI_EXP_TYPE_ENDPOINT 0x0 /* Express Endpoint */
|
||||
#define PCI_EXP_TYPE_LEG_END 0x1 /* Legacy Endpoint */
|
||||
#define PCI_EXP_TYPE_ROOT_PORT 0x4 /* Root Port */
|
||||
#define PCI_EXP_TYPE_UPSTREAM 0x5 /* Upstream Port */
|
||||
#define PCI_EXP_TYPE_DOWNSTREAM 0x6 /* Downstream Port */
|
||||
#define PCI_EXP_TYPE_PCI_BRIDGE 0x7 /* PCI/PCI-X Bridge */
|
||||
#define PCI_EXP_FLAGS_SLOT 0x0100 /* Slot implemented */
|
||||
#define PCI_EXP_FLAGS_IRQ 0x3e00 /* Interrupt message number */
|
||||
#define PCI_EXP_DEVCAP 4 /* Device capabilities */
|
||||
#define PCI_EXP_DEVCAP_PAYLOAD 0x07 /* Max_Payload_Size */
|
||||
#define PCI_EXP_DEVCAP_PHANTOM 0x18 /* Phantom functions */
|
||||
#define PCI_EXP_DEVCAP_EXT_TAG 0x20 /* Extended tags */
|
||||
#define PCI_EXP_DEVCAP_L0S 0x1c0 /* L0s Acceptable Latency */
|
||||
#define PCI_EXP_DEVCAP_L1 0xe00 /* L1 Acceptable Latency */
|
||||
#define PCI_EXP_DEVCAP_ATN_BUT 0x1000 /* Attention Button Present */
|
||||
#define PCI_EXP_DEVCAP_ATN_IND 0x2000 /* Attention Indicator Present */
|
||||
#define PCI_EXP_DEVCAP_PWR_IND 0x4000 /* Power Indicator Present */
|
||||
#define PCI_EXP_DEVCAP_PWR_VAL 0x3fc0000 /* Slot Power Limit Value */
|
||||
#define PCI_EXP_DEVCAP_PWR_SCL 0xc000000 /* Slot Power Limit Scale */
|
||||
#define PCI_EXP_DEVCTL 8 /* Device Control */
|
||||
#define PCI_EXP_DEVCTL_CERE 0x0001 /* Correctable Error Reporting En. */
|
||||
#define PCI_EXP_DEVCTL_NFERE 0x0002 /* Non-Fatal Error Reporting Enable */
|
||||
#define PCI_EXP_DEVCTL_FERE 0x0004 /* Fatal Error Reporting Enable */
|
||||
#define PCI_EXP_DEVCTL_URRE 0x0008 /* Unsupported Request Reporting En. */
|
||||
#define PCI_EXP_DEVCTL_RELAX_EN 0x0010 /* Enable relaxed ordering */
|
||||
#define PCI_EXP_DEVCTL_PAYLOAD 0x00e0 /* Max_Payload_Size */
|
||||
#define PCI_EXP_DEVCTL_EXT_TAG 0x0100 /* Extended Tag Field Enable */
|
||||
#define PCI_EXP_DEVCTL_PHANTOM 0x0200 /* Phantom Functions Enable */
|
||||
#define PCI_EXP_DEVCTL_AUX_PME 0x0400 /* Auxiliary Power PM Enable */
|
||||
#define PCI_EXP_DEVCTL_NOSNOOP_EN 0x0800 /* Enable No Snoop */
|
||||
#define PCI_EXP_DEVCTL_READRQ 0x7000 /* Max_Read_Request_Size */
|
||||
#define PCI_EXP_DEVSTA 10 /* Device Status */
|
||||
#define PCI_EXP_DEVSTA_CED 0x01 /* Correctable Error Detected */
|
||||
#define PCI_EXP_DEVSTA_NFED 0x02 /* Non-Fatal Error Detected */
|
||||
#define PCI_EXP_DEVSTA_FED 0x04 /* Fatal Error Detected */
|
||||
#define PCI_EXP_DEVSTA_URD 0x08 /* Unsupported Request Detected */
|
||||
#define PCI_EXP_DEVSTA_AUXPD 0x10 /* AUX Power Detected */
|
||||
#define PCI_EXP_DEVSTA_TRPND 0x20 /* Transactions Pending */
|
||||
#define PCI_EXP_LNKCAP 12 /* Link Capabilities */
|
||||
#define PCI_EXP_LNKCTL 16 /* Link Control */
|
||||
#define PCI_EXP_LNKSTA 18 /* Link Status */
|
||||
#define PCI_EXP_SLTCAP 20 /* Slot Capabilities */
|
||||
#define PCI_EXP_SLTCTL 24 /* Slot Control */
|
||||
#define PCI_EXP_SLTSTA 26 /* Slot Status */
|
||||
#define PCI_EXP_RTCTL 28 /* Root Control */
|
||||
#define PCI_EXP_RTCTL_SECEE 0x01 /* System Error on Correctable Error */
|
||||
#define PCI_EXP_RTCTL_SENFEE 0x02 /* System Error on Non-Fatal Error */
|
||||
#define PCI_EXP_RTCTL_SEFEE 0x04 /* System Error on Fatal Error */
|
||||
#define PCI_EXP_RTCTL_PMEIE 0x08 /* PME Interrupt Enable */
|
||||
#define PCI_EXP_RTCTL_CRSSVE 0x10 /* CRS Software Visibility Enable */
|
||||
#define PCI_EXP_RTCAP 30 /* Root Capabilities */
|
||||
#define PCI_EXP_RTSTA 32 /* Root Status */
|
||||
|
||||
/* Extended Capabilities (PCI-X 2.0 and Express) */
|
||||
#define PCI_EXT_CAP_ID(header) (header & 0x0000ffff)
|
||||
#define PCI_EXT_CAP_VER(header) ((header >> 16) & 0xf)
|
||||
#define PCI_EXT_CAP_NEXT(header) ((header >> 20) & 0xffc)
|
||||
|
||||
#define PCI_EXT_CAP_ID_ERR 1
|
||||
#define PCI_EXT_CAP_ID_VC 2
|
||||
#define PCI_EXT_CAP_ID_DSN 3
|
||||
#define PCI_EXT_CAP_ID_PWR 4
|
||||
|
||||
/* Advanced Error Reporting */
|
||||
#define PCI_ERR_UNCOR_STATUS 4 /* Uncorrectable Error Status */
|
||||
#define PCI_ERR_UNC_TRAIN 0x00000001 /* Training */
|
||||
#define PCI_ERR_UNC_DLP 0x00000010 /* Data Link Protocol */
|
||||
#define PCI_ERR_UNC_POISON_TLP 0x00001000 /* Poisoned TLP */
|
||||
#define PCI_ERR_UNC_FCP 0x00002000 /* Flow Control Protocol */
|
||||
#define PCI_ERR_UNC_COMP_TIME 0x00004000 /* Completion Timeout */
|
||||
#define PCI_ERR_UNC_COMP_ABORT 0x00008000 /* Completer Abort */
|
||||
#define PCI_ERR_UNC_UNX_COMP 0x00010000 /* Unexpected Completion */
|
||||
#define PCI_ERR_UNC_RX_OVER 0x00020000 /* Receiver Overflow */
|
||||
#define PCI_ERR_UNC_MALF_TLP 0x00040000 /* Malformed TLP */
|
||||
#define PCI_ERR_UNC_ECRC 0x00080000 /* ECRC Error Status */
|
||||
#define PCI_ERR_UNC_UNSUP 0x00100000 /* Unsupported Request */
|
||||
#define PCI_ERR_UNCOR_MASK 8 /* Uncorrectable Error Mask */
|
||||
/* Same bits as above */
|
||||
#define PCI_ERR_UNCOR_SEVER 12 /* Uncorrectable Error Severity */
|
||||
/* Same bits as above */
|
||||
#define PCI_ERR_COR_STATUS 16 /* Correctable Error Status */
|
||||
#define PCI_ERR_COR_RCVR 0x00000001 /* Receiver Error Status */
|
||||
#define PCI_ERR_COR_BAD_TLP 0x00000040 /* Bad TLP Status */
|
||||
#define PCI_ERR_COR_BAD_DLLP 0x00000080 /* Bad DLLP Status */
|
||||
#define PCI_ERR_COR_REP_ROLL 0x00000100 /* REPLAY_NUM Rollover */
|
||||
#define PCI_ERR_COR_REP_TIMER 0x00001000 /* Replay Timer Timeout */
|
||||
#define PCI_ERR_COR_MASK 20 /* Correctable Error Mask */
|
||||
/* Same bits as above */
|
||||
#define PCI_ERR_CAP 24 /* Advanced Error Capabilities */
|
||||
#define PCI_ERR_CAP_FEP(x) ((x) & 31) /* First Error Pointer */
|
||||
#define PCI_ERR_CAP_ECRC_GENC 0x00000020 /* ECRC Generation Capable */
|
||||
#define PCI_ERR_CAP_ECRC_GENE 0x00000040 /* ECRC Generation Enable */
|
||||
#define PCI_ERR_CAP_ECRC_CHKC 0x00000080 /* ECRC Check Capable */
|
||||
#define PCI_ERR_CAP_ECRC_CHKE 0x00000100 /* ECRC Check Enable */
|
||||
#define PCI_ERR_HEADER_LOG 28 /* Header Log Register (16 bytes) */
|
||||
#define PCI_ERR_ROOT_COMMAND 44 /* Root Error Command */
|
||||
#define PCI_ERR_ROOT_STATUS 48
|
||||
#define PCI_ERR_ROOT_COR_SRC 52
|
||||
#define PCI_ERR_ROOT_SRC 54
|
||||
|
||||
/* Virtual Channel */
|
||||
#define PCI_VC_PORT_REG1 4
|
||||
#define PCI_VC_PORT_REG2 8
|
||||
#define PCI_VC_PORT_CTRL 12
|
||||
#define PCI_VC_PORT_STATUS 14
|
||||
#define PCI_VC_RES_CAP 16
|
||||
#define PCI_VC_RES_CTRL 20
|
||||
#define PCI_VC_RES_STATUS 26
|
||||
|
||||
/* Power Budgeting */
|
||||
#define PCI_PWR_DSR 4 /* Data Select Register */
|
||||
#define PCI_PWR_DATA 8 /* Data Register */
|
||||
#define PCI_PWR_DATA_BASE(x) ((x) & 0xff) /* Base Power */
|
||||
#define PCI_PWR_DATA_SCALE(x) (((x) >> 8) & 3) /* Data Scale */
|
||||
#define PCI_PWR_DATA_PM_SUB(x) (((x) >> 10) & 7) /* PM Sub State */
|
||||
#define PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3) /* PM State */
|
||||
#define PCI_PWR_DATA_TYPE(x) (((x) >> 15) & 7) /* Type */
|
||||
#define PCI_PWR_DATA_RAIL(x) (((x) >> 18) & 7) /* Power Rail */
|
||||
#define PCI_PWR_CAP 12 /* Capability */
|
||||
#define PCI_PWR_CAP_BUDGET(x) ((x) & 1) /* Included in system budget */
|
||||
|
||||
#endif /* LINUX_PCI_REGS_H */
|
||||
@@ -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)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
#define BITMAP_H 1
|
||||
|
||||
#define BITMAP_MAJOR 3
|
||||
#define BITMAP_MINOR 38
|
||||
#define BITMAP_MINOR 39
|
||||
|
||||
/*
|
||||
* in-memory bitmap:
|
||||
@@ -147,8 +147,9 @@ typedef struct bitmap_super_s {
|
||||
__u32 state; /* 48 bitmap state information */
|
||||
__u32 chunksize; /* 52 the bitmap chunk size in bytes */
|
||||
__u32 daemon_sleep; /* 56 seconds between disk flushes */
|
||||
__u32 write_behind; /* 60 number of outstanding write-behind writes */
|
||||
|
||||
__u8 pad[256 - 60]; /* set to zero */
|
||||
__u8 pad[256 - 64]; /* set to zero */
|
||||
} bitmap_super_t;
|
||||
|
||||
/* notes:
|
||||
@@ -226,6 +227,9 @@ struct bitmap {
|
||||
|
||||
unsigned long flags;
|
||||
|
||||
unsigned long max_write_behind; /* write-behind mode */
|
||||
atomic_t behind_writes;
|
||||
|
||||
/*
|
||||
* the bitmap daemon - periodically wakes up and sweeps the bitmap
|
||||
* file, cleaning up bits and flushing out pages to disk as necessary
|
||||
@@ -260,9 +264,10 @@ int bitmap_setallbits(struct bitmap *bitmap);
|
||||
void bitmap_write_all(struct bitmap *bitmap);
|
||||
|
||||
/* these are exported */
|
||||
int bitmap_startwrite(struct bitmap *bitmap, sector_t offset, unsigned long sectors);
|
||||
void bitmap_endwrite(struct bitmap *bitmap, sector_t offset, unsigned long sectors,
|
||||
int success);
|
||||
int bitmap_startwrite(struct bitmap *bitmap, sector_t offset,
|
||||
unsigned long sectors, int behind);
|
||||
void bitmap_endwrite(struct bitmap *bitmap, sector_t offset,
|
||||
unsigned long sectors, int success, int behind);
|
||||
int bitmap_start_sync(struct bitmap *bitmap, sector_t offset, int *blocks, int degraded);
|
||||
void bitmap_end_sync(struct bitmap *bitmap, sector_t offset, int *blocks, int aborted);
|
||||
void bitmap_close_sync(struct bitmap *bitmap);
|
||||
|
||||
@@ -14,8 +14,8 @@ typedef struct dev_info dev_info_t;
|
||||
struct linear_private_data
|
||||
{
|
||||
dev_info_t **hash_table;
|
||||
dev_info_t *smallest;
|
||||
int nr_zones;
|
||||
sector_t hash_spacing;
|
||||
int preshift; /* shift before dividing by hash_spacing */
|
||||
dev_info_t disks[0];
|
||||
};
|
||||
|
||||
|
||||
@@ -85,70 +85,6 @@ typedef struct mdk_rdev_s mdk_rdev_t;
|
||||
|
||||
#define MAX_CHUNK_SIZE (4096*1024)
|
||||
|
||||
/*
|
||||
* default readahead
|
||||
*/
|
||||
|
||||
static inline int disk_faulty(mdp_disk_t * d)
|
||||
{
|
||||
return d->state & (1 << MD_DISK_FAULTY);
|
||||
}
|
||||
|
||||
static inline int disk_active(mdp_disk_t * d)
|
||||
{
|
||||
return d->state & (1 << MD_DISK_ACTIVE);
|
||||
}
|
||||
|
||||
static inline int disk_sync(mdp_disk_t * d)
|
||||
{
|
||||
return d->state & (1 << MD_DISK_SYNC);
|
||||
}
|
||||
|
||||
static inline int disk_spare(mdp_disk_t * d)
|
||||
{
|
||||
return !disk_sync(d) && !disk_active(d) && !disk_faulty(d);
|
||||
}
|
||||
|
||||
static inline int disk_removed(mdp_disk_t * d)
|
||||
{
|
||||
return d->state & (1 << MD_DISK_REMOVED);
|
||||
}
|
||||
|
||||
static inline void mark_disk_faulty(mdp_disk_t * d)
|
||||
{
|
||||
d->state |= (1 << MD_DISK_FAULTY);
|
||||
}
|
||||
|
||||
static inline void mark_disk_active(mdp_disk_t * d)
|
||||
{
|
||||
d->state |= (1 << MD_DISK_ACTIVE);
|
||||
}
|
||||
|
||||
static inline void mark_disk_sync(mdp_disk_t * d)
|
||||
{
|
||||
d->state |= (1 << MD_DISK_SYNC);
|
||||
}
|
||||
|
||||
static inline void mark_disk_spare(mdp_disk_t * d)
|
||||
{
|
||||
d->state = 0;
|
||||
}
|
||||
|
||||
static inline void mark_disk_removed(mdp_disk_t * d)
|
||||
{
|
||||
d->state = (1 << MD_DISK_FAULTY) | (1 << MD_DISK_REMOVED);
|
||||
}
|
||||
|
||||
static inline void mark_disk_inactive(mdp_disk_t * d)
|
||||
{
|
||||
d->state &= ~(1 << MD_DISK_ACTIVE);
|
||||
}
|
||||
|
||||
static inline void mark_disk_nonsync(mdp_disk_t * d)
|
||||
{
|
||||
d->state &= ~(1 << MD_DISK_SYNC);
|
||||
}
|
||||
|
||||
/*
|
||||
* MD's 'extended' device
|
||||
*/
|
||||
@@ -166,6 +102,7 @@ struct mdk_rdev_s
|
||||
int sb_loaded;
|
||||
sector_t data_offset; /* start of data in array */
|
||||
sector_t sb_offset;
|
||||
int sb_size; /* bytes in the superblock */
|
||||
int preferred_minor; /* autorun support */
|
||||
|
||||
/* A device can be in one of three states based on two flags:
|
||||
@@ -181,6 +118,9 @@ struct mdk_rdev_s
|
||||
int faulty; /* if faulty do not issue IO requests */
|
||||
int in_sync; /* device is a full member of the array */
|
||||
|
||||
unsigned long flags; /* Should include faulty and in_sync here. */
|
||||
#define WriteMostly 4 /* Avoid reading if at all possible */
|
||||
|
||||
int desc_nr; /* descriptor index in the superblock */
|
||||
int raid_disk; /* role of device in array */
|
||||
int saved_raid_disk; /* role that device used to have in the
|
||||
@@ -272,12 +212,19 @@ struct mddev_s
|
||||
atomic_t writes_pending;
|
||||
request_queue_t *queue; /* for plugging ... */
|
||||
|
||||
atomic_t write_behind; /* outstanding async IO */
|
||||
unsigned int max_write_behind; /* 0 = sync */
|
||||
|
||||
struct bitmap *bitmap; /* the bitmap for the device */
|
||||
struct file *bitmap_file; /* the bitmap file */
|
||||
long bitmap_offset; /* offset from superblock of
|
||||
* start of bitmap. May be
|
||||
* negative, but not '0'
|
||||
*/
|
||||
long default_bitmap_offset; /* this is the offset to use when
|
||||
* hot-adding a bitmap. It should
|
||||
* eventually be settable by sysfs.
|
||||
*/
|
||||
|
||||
struct list_head all_mddevs;
|
||||
};
|
||||
@@ -314,6 +261,12 @@ struct mdk_personality_s
|
||||
int (*resize) (mddev_t *mddev, sector_t sectors);
|
||||
int (*reshape) (mddev_t *mddev, int raid_disks);
|
||||
int (*reconfig) (mddev_t *mddev, int layout, int chunk_size);
|
||||
/* quiesce moves between quiescence states
|
||||
* 0 - fully active
|
||||
* 1 - no new requests allowed
|
||||
* others - reserved
|
||||
*/
|
||||
void (*quiesce) (mddev_t *mddev, int state);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -79,6 +79,11 @@
|
||||
#define MD_DISK_SYNC 2 /* disk is in sync with the raid set */
|
||||
#define MD_DISK_REMOVED 3 /* disk is in sync with the raid set */
|
||||
|
||||
#define MD_DISK_WRITEMOSTLY 9 /* disk is "write-mostly" is RAID1 config.
|
||||
* read requests will only be sent here in
|
||||
* dire need
|
||||
*/
|
||||
|
||||
typedef struct mdp_device_descriptor_s {
|
||||
__u32 number; /* 0 Device number in the entire set */
|
||||
__u32 major; /* 1 Device major number */
|
||||
@@ -193,7 +198,7 @@ struct mdp_superblock_1 {
|
||||
|
||||
__u64 ctime; /* lo 40 bits are seconds, top 24 are microseconds or 0*/
|
||||
__u32 level; /* -4 (multipath), -1 (linear), 0,1,4,5 */
|
||||
__u32 layout; /* only for raid5 currently */
|
||||
__u32 layout; /* only for raid5 and raid10 currently */
|
||||
__u64 size; /* used size of component devices, in 512byte sectors */
|
||||
|
||||
__u32 chunksize; /* in 512byte sectors */
|
||||
@@ -212,7 +217,9 @@ struct mdp_superblock_1 {
|
||||
__u32 dev_number; /* permanent identifier of this device - not role in raid */
|
||||
__u32 cnt_corrected_read; /* number of read errors that were corrected by re-writing */
|
||||
__u8 device_uuid[16]; /* user-space setable, ignored by kernel */
|
||||
__u8 pad2[64-56]; /* set to 0 when writing */
|
||||
__u8 devflags; /* per-device flags. Only one defined...*/
|
||||
#define WriteMostly1 1 /* mask for writemostly flag in above */
|
||||
__u8 pad2[64-57]; /* set to 0 when writing */
|
||||
|
||||
/* array state information - 64 bytes */
|
||||
__u64 utime; /* 40 bits second, 24 btes microseconds */
|
||||
@@ -231,5 +238,10 @@ struct mdp_superblock_1 {
|
||||
__u16 dev_roles[0]; /* role in array, or 0xffff for a spare, or 0xfffe for faulty */
|
||||
};
|
||||
|
||||
/* feature_map bits */
|
||||
#define MD_FEATURE_BITMAP_OFFSET 1
|
||||
|
||||
#define MD_FEATURE_ALL 1
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -80,6 +80,9 @@ struct r1bio_s {
|
||||
atomic_t remaining; /* 'have we finished' count,
|
||||
* used from IRQ handlers
|
||||
*/
|
||||
atomic_t behind_remaining; /* number of write-behind ios remaining
|
||||
* in this BehindIO request
|
||||
*/
|
||||
sector_t sector;
|
||||
int sectors;
|
||||
unsigned long state;
|
||||
@@ -107,4 +110,14 @@ struct r1bio_s {
|
||||
#define R1BIO_Uptodate 0
|
||||
#define R1BIO_IsSync 1
|
||||
#define R1BIO_Degraded 2
|
||||
#define R1BIO_BehindIO 3
|
||||
/* For write-behind requests, we call bi_end_io when
|
||||
* the last non-write-behind device completes, providing
|
||||
* any write was successful. Otherwise we call when
|
||||
* any write-behind write succeeds, otherwise we call
|
||||
* with failure when last write completes (and all failed).
|
||||
* Record that bi_end_io was called with this flag...
|
||||
*/
|
||||
#define R1BIO_Returned 4
|
||||
|
||||
#endif
|
||||
|
||||
@@ -134,6 +134,7 @@ struct stripe_head {
|
||||
unsigned long state; /* state flags */
|
||||
atomic_t count; /* nr of active thread/requests */
|
||||
spinlock_t lock;
|
||||
int bm_seq; /* sequence number for bitmap flushes */
|
||||
struct r5dev {
|
||||
struct bio req;
|
||||
struct bio_vec vec;
|
||||
@@ -165,12 +166,13 @@ struct stripe_head {
|
||||
/*
|
||||
* Stripe state
|
||||
*/
|
||||
#define STRIPE_ERROR 1
|
||||
#define STRIPE_HANDLE 2
|
||||
#define STRIPE_SYNCING 3
|
||||
#define STRIPE_INSYNC 4
|
||||
#define STRIPE_PREREAD_ACTIVE 5
|
||||
#define STRIPE_DELAYED 6
|
||||
#define STRIPE_DEGRADED 7
|
||||
#define STRIPE_BIT_DELAY 8
|
||||
|
||||
/*
|
||||
* Plugging:
|
||||
@@ -210,10 +212,20 @@ struct raid5_private_data {
|
||||
|
||||
struct list_head handle_list; /* stripes needing handling */
|
||||
struct list_head delayed_list; /* stripes that have plugged requests */
|
||||
struct list_head bitmap_list; /* stripes delaying awaiting bitmap update */
|
||||
atomic_t preread_active_stripes; /* stripes with scheduled io */
|
||||
|
||||
char cache_name[20];
|
||||
kmem_cache_t *slab_cache; /* for allocating stripes */
|
||||
|
||||
int seq_flush, seq_write;
|
||||
int quiesce;
|
||||
|
||||
int fullsync; /* set to 1 if a full sync is needed,
|
||||
* (fresh device added).
|
||||
* Cleared when a sync completes.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Free stripes pool
|
||||
*/
|
||||
|
||||
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 *);
|
||||
@@ -52,8 +52,8 @@ struct rcu_head {
|
||||
void (*func)(struct rcu_head *head);
|
||||
};
|
||||
|
||||
#define RCU_HEAD_INIT(head) { .next = NULL, .func = NULL }
|
||||
#define RCU_HEAD(head) struct rcu_head head = RCU_HEAD_INIT(head)
|
||||
#define RCU_HEAD_INIT { .next = NULL, .func = NULL }
|
||||
#define RCU_HEAD(head) struct rcu_head head = RCU_HEAD_INIT
|
||||
#define INIT_RCU_HEAD(ptr) do { \
|
||||
(ptr)->next = NULL; (ptr)->func = NULL; \
|
||||
} while (0)
|
||||
|
||||
220
include/linux/rcuref.h
Normal file
220
include/linux/rcuref.h
Normal file
@@ -0,0 +1,220 @@
|
||||
/*
|
||||
* rcuref.h
|
||||
*
|
||||
* Reference counting for elements of lists/arrays protected by
|
||||
* RCU.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Copyright (C) IBM Corporation, 2005
|
||||
*
|
||||
* Author: Dipankar Sarma <dipankar@in.ibm.com>
|
||||
* Ravikiran Thirumalai <kiran_th@gmail.com>
|
||||
*
|
||||
* See Documentation/RCU/rcuref.txt for detailed user guide.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _RCUREF_H_
|
||||
#define _RCUREF_H_
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
/*
|
||||
* These APIs work on traditional atomic_t counters used in the
|
||||
* kernel for reference counting. Under special circumstances
|
||||
* where a lock-free get() operation races with a put() operation
|
||||
* these APIs can be used. See Documentation/RCU/rcuref.txt.
|
||||
*/
|
||||
|
||||
#ifdef __HAVE_ARCH_CMPXCHG
|
||||
|
||||
/**
|
||||
* rcuref_inc - increment refcount for object.
|
||||
* @rcuref: reference counter in the object in question.
|
||||
*
|
||||
* This should be used only for objects where we use RCU and
|
||||
* use the rcuref_inc_lf() api to acquire a reference
|
||||
* in a lock-free reader-side critical section.
|
||||
*/
|
||||
static inline void rcuref_inc(atomic_t *rcuref)
|
||||
{
|
||||
atomic_inc(rcuref);
|
||||
}
|
||||
|
||||
/**
|
||||
* rcuref_dec - decrement refcount for object.
|
||||
* @rcuref: reference counter in the object in question.
|
||||
*
|
||||
* This should be used only for objects where we use RCU and
|
||||
* use the rcuref_inc_lf() api to acquire a reference
|
||||
* in a lock-free reader-side critical section.
|
||||
*/
|
||||
static inline void rcuref_dec(atomic_t *rcuref)
|
||||
{
|
||||
atomic_dec(rcuref);
|
||||
}
|
||||
|
||||
/**
|
||||
* rcuref_dec_and_test - decrement refcount for object and test
|
||||
* @rcuref: reference counter in the object.
|
||||
* @release: pointer to the function that will clean up the object
|
||||
* when the last reference to the object is released.
|
||||
* This pointer is required.
|
||||
*
|
||||
* Decrement the refcount, and if 0, return 1. Else return 0.
|
||||
*
|
||||
* This should be used only for objects where we use RCU and
|
||||
* use the rcuref_inc_lf() api to acquire a reference
|
||||
* in a lock-free reader-side critical section.
|
||||
*/
|
||||
static inline int rcuref_dec_and_test(atomic_t *rcuref)
|
||||
{
|
||||
return atomic_dec_and_test(rcuref);
|
||||
}
|
||||
|
||||
/*
|
||||
* cmpxchg is needed on UP too, if deletions to the list/array can happen
|
||||
* in interrupt context.
|
||||
*/
|
||||
|
||||
/**
|
||||
* rcuref_inc_lf - Take reference to an object in a read-side
|
||||
* critical section protected by RCU.
|
||||
* @rcuref: reference counter in the object in question.
|
||||
*
|
||||
* Try and increment the refcount by 1. The increment might fail if
|
||||
* the reference counter has been through a 1 to 0 transition and
|
||||
* is no longer part of the lock-free list.
|
||||
* Returns non-zero on successful increment and zero otherwise.
|
||||
*/
|
||||
static inline int rcuref_inc_lf(atomic_t *rcuref)
|
||||
{
|
||||
int c, old;
|
||||
c = atomic_read(rcuref);
|
||||
while (c && (old = cmpxchg(&rcuref->counter, c, c + 1)) != c)
|
||||
c = old;
|
||||
return c;
|
||||
}
|
||||
|
||||
#else /* !__HAVE_ARCH_CMPXCHG */
|
||||
|
||||
extern spinlock_t __rcuref_hash[];
|
||||
|
||||
/*
|
||||
* Use a hash table of locks to protect the reference count
|
||||
* since cmpxchg is not available in this arch.
|
||||
*/
|
||||
#ifdef CONFIG_SMP
|
||||
#define RCUREF_HASH_SIZE 4
|
||||
#define RCUREF_HASH(k) \
|
||||
(&__rcuref_hash[(((unsigned long)k)>>8) & (RCUREF_HASH_SIZE-1)])
|
||||
#else
|
||||
#define RCUREF_HASH_SIZE 1
|
||||
#define RCUREF_HASH(k) &__rcuref_hash[0]
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
/**
|
||||
* rcuref_inc - increment refcount for object.
|
||||
* @rcuref: reference counter in the object in question.
|
||||
*
|
||||
* This should be used only for objects where we use RCU and
|
||||
* use the rcuref_inc_lf() api to acquire a reference in a lock-free
|
||||
* reader-side critical section.
|
||||
*/
|
||||
static inline void rcuref_inc(atomic_t *rcuref)
|
||||
{
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(RCUREF_HASH(rcuref), flags);
|
||||
rcuref->counter += 1;
|
||||
spin_unlock_irqrestore(RCUREF_HASH(rcuref), flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* rcuref_dec - decrement refcount for object.
|
||||
* @rcuref: reference counter in the object in question.
|
||||
*
|
||||
* This should be used only for objects where we use RCU and
|
||||
* use the rcuref_inc_lf() api to acquire a reference in a lock-free
|
||||
* reader-side critical section.
|
||||
*/
|
||||
static inline void rcuref_dec(atomic_t *rcuref)
|
||||
{
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(RCUREF_HASH(rcuref), flags);
|
||||
rcuref->counter -= 1;
|
||||
spin_unlock_irqrestore(RCUREF_HASH(rcuref), flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* rcuref_dec_and_test - decrement refcount for object and test
|
||||
* @rcuref: reference counter in the object.
|
||||
* @release: pointer to the function that will clean up the object
|
||||
* when the last reference to the object is released.
|
||||
* This pointer is required.
|
||||
*
|
||||
* Decrement the refcount, and if 0, return 1. Else return 0.
|
||||
*
|
||||
* This should be used only for objects where we use RCU and
|
||||
* use the rcuref_inc_lf() api to acquire a reference in a lock-free
|
||||
* reader-side critical section.
|
||||
*/
|
||||
static inline int rcuref_dec_and_test(atomic_t *rcuref)
|
||||
{
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(RCUREF_HASH(rcuref), flags);
|
||||
rcuref->counter--;
|
||||
if (!rcuref->counter) {
|
||||
spin_unlock_irqrestore(RCUREF_HASH(rcuref), flags);
|
||||
return 1;
|
||||
} else {
|
||||
spin_unlock_irqrestore(RCUREF_HASH(rcuref), flags);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* rcuref_inc_lf - Take reference to an object of a lock-free collection
|
||||
* by traversing a lock-free list/array.
|
||||
* @rcuref: reference counter in the object in question.
|
||||
*
|
||||
* Try and increment the refcount by 1. The increment might fail if
|
||||
* the reference counter has been through a 1 to 0 transition and
|
||||
* object is no longer part of the lock-free list.
|
||||
* Returns non-zero on successful increment and zero otherwise.
|
||||
*/
|
||||
static inline int rcuref_inc_lf(atomic_t *rcuref)
|
||||
{
|
||||
int ret;
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(RCUREF_HASH(rcuref), flags);
|
||||
if (rcuref->counter)
|
||||
ret = rcuref->counter++;
|
||||
else
|
||||
ret = 0;
|
||||
spin_unlock_irqrestore(RCUREF_HASH(rcuref), flags);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
#endif /* !__HAVE_ARCH_CMPXCHG */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _RCUREF_H_ */
|
||||
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 */
|
||||
|
||||
|
||||
@@ -592,6 +604,11 @@ extern int groups_search(struct group_info *group_info, gid_t grp);
|
||||
#define GROUP_AT(gi, i) \
|
||||
((gi)->blocks[(i)/NGROUPS_PER_BLOCK][(i)%NGROUPS_PER_BLOCK])
|
||||
|
||||
#ifdef ARCH_HAS_PREFETCH_SWITCH_STACK
|
||||
extern void prefetch_stack(struct task_struct*);
|
||||
#else
|
||||
static inline void prefetch_stack(struct task_struct *t) { }
|
||||
#endif
|
||||
|
||||
struct audit_context; /* See audit.c */
|
||||
struct mempolicy;
|
||||
|
||||
@@ -250,29 +250,37 @@ struct swap_info_struct;
|
||||
* @inode contains the inode structure.
|
||||
* Deallocate the inode security structure and set @inode->i_security to
|
||||
* NULL.
|
||||
* @inode_init_security:
|
||||
* Obtain the security attribute name suffix and value to set on a newly
|
||||
* created inode and set up the incore security field for the new inode.
|
||||
* This hook is called by the fs code as part of the inode creation
|
||||
* transaction and provides for atomic labeling of the inode, unlike
|
||||
* the post_create/mkdir/... hooks called by the VFS. The hook function
|
||||
* is expected to allocate the name and value via kmalloc, with the caller
|
||||
* being responsible for calling kfree after using them.
|
||||
* If the security module does not use security attributes or does
|
||||
* not wish to put a security attribute on this particular inode,
|
||||
* then it should return -EOPNOTSUPP to skip this processing.
|
||||
* @inode contains the inode structure of the newly created inode.
|
||||
* @dir contains the inode structure of the parent directory.
|
||||
* @name will be set to the allocated name suffix (e.g. selinux).
|
||||
* @value will be set to the allocated attribute value.
|
||||
* @len will be set to the length of the value.
|
||||
* Returns 0 if @name and @value have been successfully set,
|
||||
* -EOPNOTSUPP if no security attribute is needed, or
|
||||
* -ENOMEM on memory allocation failure.
|
||||
* @inode_create:
|
||||
* Check permission to create a regular file.
|
||||
* @dir contains inode structure of the parent of the new file.
|
||||
* @dentry contains the dentry structure for the file to be created.
|
||||
* @mode contains the file mode of the file to be created.
|
||||
* Return 0 if permission is granted.
|
||||
* @inode_post_create:
|
||||
* Set the security attributes on a newly created regular file. This hook
|
||||
* is called after a file has been successfully created.
|
||||
* @dir contains the inode structure of the parent directory of the new file.
|
||||
* @dentry contains the the dentry structure for the newly created file.
|
||||
* @mode contains the file mode.
|
||||
* @inode_link:
|
||||
* Check permission before creating a new hard link to a file.
|
||||
* @old_dentry contains the dentry structure for an existing link to the file.
|
||||
* @dir contains the inode structure of the parent directory of the new link.
|
||||
* @new_dentry contains the dentry structure for the new link.
|
||||
* Return 0 if permission is granted.
|
||||
* @inode_post_link:
|
||||
* Set security attributes for a new hard link to a file.
|
||||
* @old_dentry contains the dentry structure for the existing link.
|
||||
* @dir contains the inode structure of the parent directory of the new file.
|
||||
* @new_dentry contains the dentry structure for the new file link.
|
||||
* @inode_unlink:
|
||||
* Check the permission to remove a hard link to a file.
|
||||
* @dir contains the inode structure of parent directory of the file.
|
||||
@@ -284,13 +292,6 @@ struct swap_info_struct;
|
||||
* @dentry contains the dentry structure of the symbolic link.
|
||||
* @old_name contains the pathname of file.
|
||||
* Return 0 if permission is granted.
|
||||
* @inode_post_symlink:
|
||||
* @dir contains the inode structure of the parent directory of the new link.
|
||||
* @dentry contains the dentry structure of new symbolic link.
|
||||
* @old_name contains the pathname of file.
|
||||
* Set security attributes for a newly created symbolic link. Note that
|
||||
* @dentry->d_inode may be NULL, since the filesystem might not
|
||||
* instantiate the dentry (e.g. NFS).
|
||||
* @inode_mkdir:
|
||||
* Check permissions to create a new directory in the existing directory
|
||||
* associated with inode strcture @dir.
|
||||
@@ -298,11 +299,6 @@ struct swap_info_struct;
|
||||
* @dentry contains the dentry structure of new directory.
|
||||
* @mode contains the mode of new directory.
|
||||
* Return 0 if permission is granted.
|
||||
* @inode_post_mkdir:
|
||||
* Set security attributes on a newly created directory.
|
||||
* @dir contains the inode structure of parent of the directory to be created.
|
||||
* @dentry contains the dentry structure of new directory.
|
||||
* @mode contains the mode of new directory.
|
||||
* @inode_rmdir:
|
||||
* Check the permission to remove a directory.
|
||||
* @dir contains the inode structure of parent of the directory to be removed.
|
||||
@@ -318,13 +314,6 @@ struct swap_info_struct;
|
||||
* @mode contains the mode of the new file.
|
||||
* @dev contains the the device number.
|
||||
* Return 0 if permission is granted.
|
||||
* @inode_post_mknod:
|
||||
* Set security attributes on a newly created special file (or socket or
|
||||
* fifo file created via the mknod system call).
|
||||
* @dir contains the inode structure of parent of the new node.
|
||||
* @dentry contains the dentry structure of the new node.
|
||||
* @mode contains the mode of the new node.
|
||||
* @dev contains the the device number.
|
||||
* @inode_rename:
|
||||
* Check for permission to rename a file or directory.
|
||||
* @old_dir contains the inode structure for parent of the old link.
|
||||
@@ -332,12 +321,6 @@ struct swap_info_struct;
|
||||
* @new_dir contains the inode structure for parent of the new link.
|
||||
* @new_dentry contains the dentry structure of the new link.
|
||||
* Return 0 if permission is granted.
|
||||
* @inode_post_rename:
|
||||
* Set security attributes on a renamed file or directory.
|
||||
* @old_dir contains the inode structure for parent of the old link.
|
||||
* @old_dentry contains the dentry structure of the old link.
|
||||
* @new_dir contains the inode structure for parent of the new link.
|
||||
* @new_dentry contains the dentry structure of the new link.
|
||||
* @inode_readlink:
|
||||
* Check the permission to read the symbolic link.
|
||||
* @dentry contains the dentry structure for the file link.
|
||||
@@ -1080,34 +1063,21 @@ struct security_operations {
|
||||
|
||||
int (*inode_alloc_security) (struct inode *inode);
|
||||
void (*inode_free_security) (struct inode *inode);
|
||||
int (*inode_init_security) (struct inode *inode, struct inode *dir,
|
||||
char **name, void **value, size_t *len);
|
||||
int (*inode_create) (struct inode *dir,
|
||||
struct dentry *dentry, int mode);
|
||||
void (*inode_post_create) (struct inode *dir,
|
||||
struct dentry *dentry, int mode);
|
||||
int (*inode_link) (struct dentry *old_dentry,
|
||||
struct inode *dir, struct dentry *new_dentry);
|
||||
void (*inode_post_link) (struct dentry *old_dentry,
|
||||
struct inode *dir, struct dentry *new_dentry);
|
||||
int (*inode_unlink) (struct inode *dir, struct dentry *dentry);
|
||||
int (*inode_symlink) (struct inode *dir,
|
||||
struct dentry *dentry, const char *old_name);
|
||||
void (*inode_post_symlink) (struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
const char *old_name);
|
||||
int (*inode_mkdir) (struct inode *dir, struct dentry *dentry, int mode);
|
||||
void (*inode_post_mkdir) (struct inode *dir, struct dentry *dentry,
|
||||
int mode);
|
||||
int (*inode_rmdir) (struct inode *dir, struct dentry *dentry);
|
||||
int (*inode_mknod) (struct inode *dir, struct dentry *dentry,
|
||||
int mode, dev_t dev);
|
||||
void (*inode_post_mknod) (struct inode *dir, struct dentry *dentry,
|
||||
int mode, dev_t dev);
|
||||
int (*inode_rename) (struct inode *old_dir, struct dentry *old_dentry,
|
||||
struct inode *new_dir, struct dentry *new_dentry);
|
||||
void (*inode_post_rename) (struct inode *old_dir,
|
||||
struct dentry *old_dentry,
|
||||
struct inode *new_dir,
|
||||
struct dentry *new_dentry);
|
||||
int (*inode_readlink) (struct dentry *dentry);
|
||||
int (*inode_follow_link) (struct dentry *dentry, struct nameidata *nd);
|
||||
int (*inode_permission) (struct inode *inode, int mask, struct nameidata *nd);
|
||||
@@ -1442,6 +1412,17 @@ static inline void security_inode_free (struct inode *inode)
|
||||
return;
|
||||
security_ops->inode_free_security (inode);
|
||||
}
|
||||
|
||||
static inline int security_inode_init_security (struct inode *inode,
|
||||
struct inode *dir,
|
||||
char **name,
|
||||
void **value,
|
||||
size_t *len)
|
||||
{
|
||||
if (unlikely (IS_PRIVATE (inode)))
|
||||
return -EOPNOTSUPP;
|
||||
return security_ops->inode_init_security (inode, dir, name, value, len);
|
||||
}
|
||||
|
||||
static inline int security_inode_create (struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
@@ -1452,15 +1433,6 @@ static inline int security_inode_create (struct inode *dir,
|
||||
return security_ops->inode_create (dir, dentry, mode);
|
||||
}
|
||||
|
||||
static inline void security_inode_post_create (struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
int mode)
|
||||
{
|
||||
if (dentry->d_inode && unlikely (IS_PRIVATE (dentry->d_inode)))
|
||||
return;
|
||||
security_ops->inode_post_create (dir, dentry, mode);
|
||||
}
|
||||
|
||||
static inline int security_inode_link (struct dentry *old_dentry,
|
||||
struct inode *dir,
|
||||
struct dentry *new_dentry)
|
||||
@@ -1470,15 +1442,6 @@ static inline int security_inode_link (struct dentry *old_dentry,
|
||||
return security_ops->inode_link (old_dentry, dir, new_dentry);
|
||||
}
|
||||
|
||||
static inline void security_inode_post_link (struct dentry *old_dentry,
|
||||
struct inode *dir,
|
||||
struct dentry *new_dentry)
|
||||
{
|
||||
if (new_dentry->d_inode && unlikely (IS_PRIVATE (new_dentry->d_inode)))
|
||||
return;
|
||||
security_ops->inode_post_link (old_dentry, dir, new_dentry);
|
||||
}
|
||||
|
||||
static inline int security_inode_unlink (struct inode *dir,
|
||||
struct dentry *dentry)
|
||||
{
|
||||
@@ -1496,15 +1459,6 @@ static inline int security_inode_symlink (struct inode *dir,
|
||||
return security_ops->inode_symlink (dir, dentry, old_name);
|
||||
}
|
||||
|
||||
static inline void security_inode_post_symlink (struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
const char *old_name)
|
||||
{
|
||||
if (dentry->d_inode && unlikely (IS_PRIVATE (dentry->d_inode)))
|
||||
return;
|
||||
security_ops->inode_post_symlink (dir, dentry, old_name);
|
||||
}
|
||||
|
||||
static inline int security_inode_mkdir (struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
int mode)
|
||||
@@ -1514,15 +1468,6 @@ static inline int security_inode_mkdir (struct inode *dir,
|
||||
return security_ops->inode_mkdir (dir, dentry, mode);
|
||||
}
|
||||
|
||||
static inline void security_inode_post_mkdir (struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
int mode)
|
||||
{
|
||||
if (dentry->d_inode && unlikely (IS_PRIVATE (dentry->d_inode)))
|
||||
return;
|
||||
security_ops->inode_post_mkdir (dir, dentry, mode);
|
||||
}
|
||||
|
||||
static inline int security_inode_rmdir (struct inode *dir,
|
||||
struct dentry *dentry)
|
||||
{
|
||||
@@ -1540,15 +1485,6 @@ static inline int security_inode_mknod (struct inode *dir,
|
||||
return security_ops->inode_mknod (dir, dentry, mode, dev);
|
||||
}
|
||||
|
||||
static inline void security_inode_post_mknod (struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
int mode, dev_t dev)
|
||||
{
|
||||
if (dentry->d_inode && unlikely (IS_PRIVATE (dentry->d_inode)))
|
||||
return;
|
||||
security_ops->inode_post_mknod (dir, dentry, mode, dev);
|
||||
}
|
||||
|
||||
static inline int security_inode_rename (struct inode *old_dir,
|
||||
struct dentry *old_dentry,
|
||||
struct inode *new_dir,
|
||||
@@ -1561,18 +1497,6 @@ static inline int security_inode_rename (struct inode *old_dir,
|
||||
new_dir, new_dentry);
|
||||
}
|
||||
|
||||
static inline void security_inode_post_rename (struct inode *old_dir,
|
||||
struct dentry *old_dentry,
|
||||
struct inode *new_dir,
|
||||
struct dentry *new_dentry)
|
||||
{
|
||||
if (unlikely (IS_PRIVATE (old_dentry->d_inode) ||
|
||||
(new_dentry->d_inode && IS_PRIVATE (new_dentry->d_inode))))
|
||||
return;
|
||||
security_ops->inode_post_rename (old_dir, old_dentry,
|
||||
new_dir, new_dentry);
|
||||
}
|
||||
|
||||
static inline int security_inode_readlink (struct dentry *dentry)
|
||||
{
|
||||
if (unlikely (IS_PRIVATE (dentry->d_inode)))
|
||||
@@ -2171,6 +2095,15 @@ static inline int security_inode_alloc (struct inode *inode)
|
||||
|
||||
static inline void security_inode_free (struct inode *inode)
|
||||
{ }
|
||||
|
||||
static inline int security_inode_init_security (struct inode *inode,
|
||||
struct inode *dir,
|
||||
char **name,
|
||||
void **value,
|
||||
size_t *len)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int security_inode_create (struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
@@ -2179,11 +2112,6 @@ static inline int security_inode_create (struct inode *dir,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void security_inode_post_create (struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
int mode)
|
||||
{ }
|
||||
|
||||
static inline int security_inode_link (struct dentry *old_dentry,
|
||||
struct inode *dir,
|
||||
struct dentry *new_dentry)
|
||||
@@ -2191,11 +2119,6 @@ static inline int security_inode_link (struct dentry *old_dentry,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void security_inode_post_link (struct dentry *old_dentry,
|
||||
struct inode *dir,
|
||||
struct dentry *new_dentry)
|
||||
{ }
|
||||
|
||||
static inline int security_inode_unlink (struct inode *dir,
|
||||
struct dentry *dentry)
|
||||
{
|
||||
@@ -2209,11 +2132,6 @@ static inline int security_inode_symlink (struct inode *dir,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void security_inode_post_symlink (struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
const char *old_name)
|
||||
{ }
|
||||
|
||||
static inline int security_inode_mkdir (struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
int mode)
|
||||
@@ -2221,11 +2139,6 @@ static inline int security_inode_mkdir (struct inode *dir,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void security_inode_post_mkdir (struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
int mode)
|
||||
{ }
|
||||
|
||||
static inline int security_inode_rmdir (struct inode *dir,
|
||||
struct dentry *dentry)
|
||||
{
|
||||
@@ -2239,11 +2152,6 @@ static inline int security_inode_mknod (struct inode *dir,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void security_inode_post_mknod (struct inode *dir,
|
||||
struct dentry *dentry,
|
||||
int mode, dev_t dev)
|
||||
{ }
|
||||
|
||||
static inline int security_inode_rename (struct inode *old_dir,
|
||||
struct dentry *old_dentry,
|
||||
struct inode *new_dir,
|
||||
@@ -2252,12 +2160,6 @@ static inline int security_inode_rename (struct inode *old_dir,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void security_inode_post_rename (struct inode *old_dir,
|
||||
struct dentry *old_dentry,
|
||||
struct inode *new_dir,
|
||||
struct dentry *new_dentry)
|
||||
{ }
|
||||
|
||||
static inline int security_inode_readlink (struct dentry *dentry)
|
||||
{
|
||||
return 0;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -29,6 +29,21 @@ struct plat_serial8250_port {
|
||||
unsigned int flags; /* UPF_* flags */
|
||||
};
|
||||
|
||||
/*
|
||||
* Allocate 8250 platform device IDs. Nothing is implied by
|
||||
* the numbering here, except for the legacy entry being -1.
|
||||
*/
|
||||
enum {
|
||||
PLAT8250_DEV_LEGACY = -1,
|
||||
PLAT8250_DEV_PLATFORM,
|
||||
PLAT8250_DEV_PLATFORM1,
|
||||
PLAT8250_DEV_FOURPORT,
|
||||
PLAT8250_DEV_ACCENT,
|
||||
PLAT8250_DEV_BOCA,
|
||||
PLAT8250_DEV_HUB6,
|
||||
PLAT8250_DEV_MCA,
|
||||
};
|
||||
|
||||
/*
|
||||
* This should be used by drivers which want to register
|
||||
* their own 8250 ports without registering their own
|
||||
|
||||
@@ -385,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);
|
||||
@@ -398,10 +398,11 @@ 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)
|
||||
#ifndef SUPPORT_SYSRQ
|
||||
#define uart_handle_sysrq_char(port,ch,regs) uart_handle_sysrq_char(port, 0, NULL)
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
@@ -1167,7 +1167,7 @@ static inline void skb_postpull_rcsum(struct sk_buff *skb,
|
||||
|
||||
static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)
|
||||
{
|
||||
if (len >= skb->len)
|
||||
if (likely(len >= skb->len))
|
||||
return 0;
|
||||
if (skb->ip_summed == CHECKSUM_HW)
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
@@ -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);
|
||||
|
||||
@@ -32,6 +32,10 @@ extern struct timer_base_s __init_timer_base;
|
||||
.magic = TIMER_MAGIC, \
|
||||
}
|
||||
|
||||
#define DEFINE_TIMER(_name, _function, _expires, _data) \
|
||||
struct timer_list _name = \
|
||||
TIMER_INITIALIZER(_function, _expires, _data)
|
||||
|
||||
void fastcall init_timer(struct timer_list * timer);
|
||||
|
||||
/***
|
||||
|
||||
@@ -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) \
|
||||
|
||||
@@ -74,7 +74,8 @@ struct screen_info {
|
||||
u16 vesapm_off; /* 0x30 */
|
||||
u16 pages; /* 0x32 */
|
||||
u16 vesa_attributes; /* 0x34 */
|
||||
/* 0x36 -- 0x3f reserved for future expansion */
|
||||
u32 capabilities; /* 0x36 */
|
||||
/* 0x3a -- 0x3f reserved for future expansion */
|
||||
};
|
||||
|
||||
extern struct screen_info screen_info;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <linux/usb_ch9.h>
|
||||
|
||||
#define USB_MAJOR 180
|
||||
#define USB_DEVICE_MAJOR 189
|
||||
|
||||
|
||||
#ifdef __KERNEL__
|
||||
@@ -349,6 +350,7 @@ struct usb_device {
|
||||
char *manufacturer;
|
||||
char *serial; /* static strings from the device */
|
||||
struct list_head filelist;
|
||||
struct class_device *class_dev;
|
||||
struct dentry *usbfs_dentry; /* usbfs dentry entry for the device */
|
||||
|
||||
/*
|
||||
@@ -614,7 +616,6 @@ extern int usb_disabled(void);
|
||||
#define URB_ISO_ASAP 0x0002 /* iso-only, urb->start_frame ignored */
|
||||
#define URB_NO_TRANSFER_DMA_MAP 0x0004 /* urb->transfer_dma valid on submit */
|
||||
#define URB_NO_SETUP_DMA_MAP 0x0008 /* urb->setup_dma valid on submit */
|
||||
#define URB_ASYNC_UNLINK 0x0010 /* usb_unlink_urb() returns asap */
|
||||
#define URB_NO_FSBR 0x0020 /* UHCI-specific */
|
||||
#define URB_ZERO_PACKET 0x0040 /* Finish bulk OUTs with short packet */
|
||||
#define URB_NO_INTERRUPT 0x0080 /* HINT: no non-error interrupt needed */
|
||||
@@ -722,13 +723,7 @@ typedef void (*usb_complete_t)(struct urb *, struct pt_regs *);
|
||||
* Initialization:
|
||||
*
|
||||
* All URBs submitted must initialize the dev, pipe, transfer_flags (may be
|
||||
* zero), and complete fields.
|
||||
* The URB_ASYNC_UNLINK transfer flag affects later invocations of
|
||||
* the usb_unlink_urb() routine. Note: Failure to set URB_ASYNC_UNLINK
|
||||
* with usb_unlink_urb() is deprecated. For synchronous unlinks use
|
||||
* usb_kill_urb() instead.
|
||||
*
|
||||
* All URBs must also initialize
|
||||
* zero), and complete fields. All URBs must also initialize
|
||||
* transfer_buffer and transfer_buffer_length. They may provide the
|
||||
* URB_SHORT_NOT_OK transfer flag, indicating that short reads are
|
||||
* to be treated as errors; that flag is invalid for write requests.
|
||||
|
||||
@@ -7,36 +7,18 @@
|
||||
struct isp116x_platform_data {
|
||||
/* Enable internal resistors on downstream ports */
|
||||
unsigned sel15Kres:1;
|
||||
/* Chip's internal clock won't be stopped in suspended state.
|
||||
Setting/unsetting this bit takes effect only if
|
||||
'remote_wakeup_enable' below is not set. */
|
||||
unsigned clknotstop:1;
|
||||
/* On-chip overcurrent protection */
|
||||
/* On-chip overcurrent detection */
|
||||
unsigned oc_enable:1;
|
||||
/* INT output polarity */
|
||||
unsigned int_act_high:1;
|
||||
/* INT edge or level triggered */
|
||||
unsigned int_edge_triggered:1;
|
||||
/* WAKEUP pin connected - NOT SUPPORTED */
|
||||
/* unsigned remote_wakeup_connected:1; */
|
||||
/* Wakeup by devices on usb bus enabled */
|
||||
/* Enable wakeup by devices on usb bus (e.g. wakeup
|
||||
by attachment/detachment or by device activity
|
||||
such as moving a mouse). When chosen, this option
|
||||
prevents stopping internal clock, increasing
|
||||
thereby power consumption in suspended state. */
|
||||
unsigned remote_wakeup_enable:1;
|
||||
/* Switch or not to switch (keep always powered) */
|
||||
unsigned no_power_switching:1;
|
||||
/* Ganged port power switching (0) or individual port
|
||||
power switching (1) */
|
||||
unsigned power_switching_mode:1;
|
||||
/* Given port_power, msec/2 after power on till power good */
|
||||
u8 potpg;
|
||||
/* Hardware reset set/clear. If implemented, this function must:
|
||||
if set == 0, deassert chip's HW reset pin
|
||||
otherwise, assert chip's HW reset pin */
|
||||
void (*reset) (struct device * dev, int set);
|
||||
/* Hardware clock start/stop. If implemented, this function must:
|
||||
if start == 0, stop the external clock
|
||||
otherwise, start the external clock
|
||||
*/
|
||||
void (*clock) (struct device * dev, int start);
|
||||
/* Inter-io delay (ns). The chip is picky about access timings; it
|
||||
expects at least:
|
||||
150ns delay between consecutive accesses to DATA_REG,
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/version.h>
|
||||
|
||||
#define HAVE_V4L2 1
|
||||
#include <linux/videodev2.h>
|
||||
@@ -29,7 +28,6 @@ struct video_device
|
||||
void (*release)(struct video_device *vfd);
|
||||
|
||||
|
||||
#if 1 /* to be removed in 2.7.x */
|
||||
/* obsolete -- fops->owner is used instead */
|
||||
struct module *owner;
|
||||
/* dev->driver_data will be used instead some day.
|
||||
@@ -37,7 +35,6 @@ struct video_device
|
||||
* so the switch over will be transparent for you.
|
||||
* Or use {pci|usb}_{get|set}_drvdata() directly. */
|
||||
void *priv;
|
||||
#endif
|
||||
|
||||
/* for videodev.c intenal usage -- please don't touch */
|
||||
int users; /* video_exclusive_{open|close} ... */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user