Merge ../linus
Conflicts: drivers/cpufreq/cpufreq.c
This commit is contained in:
@@ -60,10 +60,7 @@ header-y += fadvise.h
|
||||
header-y += fd.h
|
||||
header-y += fdreg.h
|
||||
header-y += fib_rules.h
|
||||
header-y += ftape-header-segment.h
|
||||
header-y += ftape-vendors.h
|
||||
header-y += fuse.h
|
||||
header-y += futex.h
|
||||
header-y += genetlink.h
|
||||
header-y += gen_stats.h
|
||||
header-y += gigaset_dev.h
|
||||
@@ -120,6 +117,7 @@ header-y += netrom.h
|
||||
header-y += nfs2.h
|
||||
header-y += nfs4_mount.h
|
||||
header-y += nfs_mount.h
|
||||
header-y += oom.h
|
||||
header-y += param.h
|
||||
header-y += pci_ids.h
|
||||
header-y += pci_regs.h
|
||||
@@ -192,7 +190,6 @@ unifdef-y += cuda.h
|
||||
unifdef-y += cyclades.h
|
||||
unifdef-y += dccp.h
|
||||
unifdef-y += dirent.h
|
||||
unifdef-y += divert.h
|
||||
unifdef-y += dlm.h
|
||||
unifdef-y += elfcore.h
|
||||
unifdef-y += errno.h
|
||||
@@ -205,8 +202,8 @@ unifdef-y += fb.h
|
||||
unifdef-y += fcntl.h
|
||||
unifdef-y += filter.h
|
||||
unifdef-y += flat.h
|
||||
unifdef-y += futex.h
|
||||
unifdef-y += fs.h
|
||||
unifdef-y += ftape.h
|
||||
unifdef-y += gameport.h
|
||||
unifdef-y += generic_serial.h
|
||||
unifdef-y += genhd.h
|
||||
@@ -224,6 +221,7 @@ unifdef-y += if_bridge.h
|
||||
unifdef-y += if_ec.h
|
||||
unifdef-y += if_eql.h
|
||||
unifdef-y += if_ether.h
|
||||
unifdef-y += if_fddi.h
|
||||
unifdef-y += if_frad.h
|
||||
unifdef-y += if_ltalk.h
|
||||
unifdef-y += if_pppox.h
|
||||
@@ -285,6 +283,7 @@ unifdef-y += nvram.h
|
||||
unifdef-y += parport.h
|
||||
unifdef-y += patchkey.h
|
||||
unifdef-y += pci.h
|
||||
unifdef-y += personality.h
|
||||
unifdef-y += pktcdvd.h
|
||||
unifdef-y += pmu.h
|
||||
unifdef-y += poll.h
|
||||
@@ -340,7 +339,7 @@ unifdef-y += videodev.h
|
||||
unifdef-y += wait.h
|
||||
unifdef-y += wanrouter.h
|
||||
unifdef-y += watchdog.h
|
||||
unifdef-y += wireless.h
|
||||
unifdef-y += xfrm.h
|
||||
unifdef-y += zftape.h
|
||||
|
||||
objhdr-y += version.h
|
||||
|
||||
@@ -119,6 +119,7 @@ struct acct_v3
|
||||
#ifdef CONFIG_BSD_PROCESS_ACCT
|
||||
struct vfsmount;
|
||||
struct super_block;
|
||||
struct pacct_struct;
|
||||
extern void acct_auto_close_mnt(struct vfsmount *m);
|
||||
extern void acct_auto_close(struct super_block *sb);
|
||||
extern void acct_init_pacct(struct pacct_struct *pacct);
|
||||
|
||||
+1
-3
@@ -111,7 +111,6 @@ struct kiocb {
|
||||
size_t ki_nbytes; /* copy of iocb->aio_nbytes */
|
||||
char __user *ki_buf; /* remaining iocb->aio_buf */
|
||||
size_t ki_left; /* remaining bytes */
|
||||
long ki_retried; /* just for testing */
|
||||
struct iovec ki_inline_vec; /* inline vector */
|
||||
struct iovec *ki_iovec;
|
||||
unsigned long ki_nr_segs;
|
||||
@@ -194,7 +193,7 @@ struct kioctx {
|
||||
|
||||
struct aio_ring_info ring_info;
|
||||
|
||||
struct work_struct wq;
|
||||
struct delayed_work wq;
|
||||
};
|
||||
|
||||
/* prototypes */
|
||||
@@ -238,7 +237,6 @@ do { \
|
||||
} while (0)
|
||||
|
||||
#define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait)
|
||||
#define is_retried_kiocb(iocb) ((iocb)->ki_retried > 1)
|
||||
|
||||
#include <linux/aio_abi.h>
|
||||
|
||||
|
||||
+12
-2
@@ -200,8 +200,9 @@ enum {
|
||||
ATA_CBL_NONE = 0,
|
||||
ATA_CBL_PATA40 = 1,
|
||||
ATA_CBL_PATA80 = 2,
|
||||
ATA_CBL_PATA_UNK = 3,
|
||||
ATA_CBL_SATA = 4,
|
||||
ATA_CBL_PATA40_SHORT = 3, /* 40 wire cable to high UDMA spec */
|
||||
ATA_CBL_PATA_UNK = 4,
|
||||
ATA_CBL_SATA = 5,
|
||||
|
||||
/* SATA Status and Control Registers */
|
||||
SCR_STATUS = 0,
|
||||
@@ -342,6 +343,15 @@ static inline int ata_id_is_cfa(const u16 *id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int ata_drive_40wire(const u16 *dev_id)
|
||||
{
|
||||
if (ata_id_major_version(dev_id) >= 5 && ata_id_is_sata(dev_id))
|
||||
return 0; /* SATA */
|
||||
if (dev_id[93] & 0x4000)
|
||||
return 0; /* 80 wire */
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline int atapi_cdb_len(const u16 *dev_id)
|
||||
{
|
||||
u16 tmp = dev_id[0] & 0x3;
|
||||
|
||||
@@ -37,7 +37,7 @@ enum atmarp_ctrl_type {
|
||||
struct atmarp_ctrl {
|
||||
enum atmarp_ctrl_type type; /* message type */
|
||||
int itf_num;/* interface number (if present) */
|
||||
uint32_t ip; /* IP address (act_need only) */
|
||||
__be32 ip; /* IP address (act_need only) */
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -86,8 +86,8 @@ struct atm_backend_br2684 {
|
||||
* efficient per-if in/out filters, this support will be removed
|
||||
*/
|
||||
struct br2684_filter {
|
||||
__u32 prefix; /* network byte order */
|
||||
__u32 netmask; /* 0 = disable filter */
|
||||
__be32 prefix; /* network byte order */
|
||||
__be32 netmask; /* 0 = disable filter */
|
||||
};
|
||||
|
||||
struct br2684_filter_set {
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
struct atmmpc_ioc {
|
||||
int dev_num;
|
||||
uint32_t ipaddr; /* the IP address of the shortcut */
|
||||
__be32 ipaddr; /* the IP address of the shortcut */
|
||||
int type; /* ingress or egress */
|
||||
};
|
||||
|
||||
@@ -21,8 +21,8 @@ typedef struct in_ctrl_info {
|
||||
uint8_t Last_NHRP_CIE_code;
|
||||
uint8_t Last_Q2931_cause_value;
|
||||
uint8_t eg_MPC_ATM_addr[ATM_ESA_LEN];
|
||||
uint32_t tag;
|
||||
uint32_t in_dst_ip; /* IP address this ingress MPC sends packets to */
|
||||
__be32 tag;
|
||||
__be32 in_dst_ip; /* IP address this ingress MPC sends packets to */
|
||||
uint16_t holding_time;
|
||||
uint32_t request_id;
|
||||
} in_ctrl_info;
|
||||
@@ -30,10 +30,10 @@ typedef struct in_ctrl_info {
|
||||
typedef struct eg_ctrl_info {
|
||||
uint8_t DLL_header[256];
|
||||
uint8_t DH_length;
|
||||
uint32_t cache_id;
|
||||
uint32_t tag;
|
||||
uint32_t mps_ip;
|
||||
uint32_t eg_dst_ip; /* IP address to which ingress MPC sends packets */
|
||||
__be32 cache_id;
|
||||
__be32 tag;
|
||||
__be32 mps_ip;
|
||||
__be32 eg_dst_ip; /* IP address to which ingress MPC sends packets */
|
||||
uint8_t in_MPC_data_ATM_addr[ATM_ESA_LEN];
|
||||
uint16_t holding_time;
|
||||
} eg_ctrl_info;
|
||||
@@ -49,7 +49,7 @@ struct mpc_parameters {
|
||||
|
||||
struct k_message {
|
||||
uint16_t type;
|
||||
uint32_t ip_mask;
|
||||
__be32 ip_mask;
|
||||
uint8_t MPS_ctrl[ATM_ESA_LEN];
|
||||
union {
|
||||
in_ctrl_info in_info;
|
||||
|
||||
@@ -101,6 +101,10 @@
|
||||
#define AUDIT_MAC_CIPSOV4_DEL 1408 /* NetLabel: del CIPSOv4 DOI entry */
|
||||
#define AUDIT_MAC_MAP_ADD 1409 /* NetLabel: add LSM domain mapping */
|
||||
#define AUDIT_MAC_MAP_DEL 1410 /* NetLabel: del LSM domain mapping */
|
||||
#define AUDIT_MAC_IPSEC_ADDSA 1411 /* Add a XFRM state */
|
||||
#define AUDIT_MAC_IPSEC_DELSA 1412 /* Delete a XFRM state */
|
||||
#define AUDIT_MAC_IPSEC_ADDSPD 1413 /* Add a XFRM policy */
|
||||
#define AUDIT_MAC_IPSEC_DELSPD 1414 /* Delete a XFRM policy */
|
||||
|
||||
#define AUDIT_FIRST_KERN_ANOM_MSG 1700
|
||||
#define AUDIT_LAST_KERN_ANOM_MSG 1799
|
||||
@@ -377,6 +381,7 @@ extern void auditsc_get_stamp(struct audit_context *ctx,
|
||||
struct timespec *t, unsigned int *serial);
|
||||
extern int audit_set_loginuid(struct task_struct *task, uid_t loginuid);
|
||||
extern uid_t audit_get_loginuid(struct audit_context *ctx);
|
||||
extern void audit_log_task_context(struct audit_buffer *ab);
|
||||
extern int __audit_ipc_obj(struct kern_ipc_perm *ipcp);
|
||||
extern int __audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, mode_t mode);
|
||||
extern int audit_bprm(struct linux_binprm *bprm);
|
||||
@@ -449,6 +454,7 @@ extern int audit_n_rules;
|
||||
#define audit_inode_update(i) do { ; } while (0)
|
||||
#define auditsc_get_stamp(c,t,s) do { BUG(); } while (0)
|
||||
#define audit_get_loginuid(c) ({ -1; })
|
||||
#define audit_log_task_context(b) do { ; } while (0)
|
||||
#define audit_ipc_obj(i) ({ 0; })
|
||||
#define audit_ipc_set_perm(q,u,g,m) ({ 0; })
|
||||
#define audit_bprm(p) ({ 0; })
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
||||
struct page;
|
||||
|
||||
/*
|
||||
* Bits in backing_dev_info.state
|
||||
*/
|
||||
@@ -88,6 +90,11 @@ static inline int bdi_rw_congested(struct backing_dev_info *bdi)
|
||||
(1 << BDI_write_congested));
|
||||
}
|
||||
|
||||
void clear_bdi_congested(struct backing_dev_info *bdi, int rw);
|
||||
void set_bdi_congested(struct backing_dev_info *bdi, int rw);
|
||||
long congestion_wait(int rw, long timeout);
|
||||
void congestion_end(int rw);
|
||||
|
||||
#define bdi_cap_writeback_dirty(bdi) \
|
||||
(!((bdi)->capabilities & BDI_CAP_NO_WRITEBACK))
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
#ifndef _LINUX_BITREV_H
|
||||
#define _LINUX_BITREV_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
extern u8 const byte_rev_table[256];
|
||||
|
||||
static inline u8 bitrev8(u8 byte)
|
||||
{
|
||||
return byte_rev_table[byte];
|
||||
}
|
||||
|
||||
extern u32 bitrev32(u32 in);
|
||||
|
||||
#endif /* _LINUX_BITREV_H */
|
||||
+24
-10
@@ -342,7 +342,6 @@ typedef void (unplug_fn) (request_queue_t *);
|
||||
|
||||
struct bio_vec;
|
||||
typedef int (merge_bvec_fn) (request_queue_t *, struct bio *, struct bio_vec *);
|
||||
typedef void (activity_fn) (void *data, int rw);
|
||||
typedef int (issue_flush_fn) (request_queue_t *, struct gendisk *, sector_t *);
|
||||
typedef void (prepare_flush_fn) (request_queue_t *, struct request *);
|
||||
typedef void (softirq_done_fn)(struct request *);
|
||||
@@ -384,7 +383,6 @@ struct request_queue
|
||||
prep_rq_fn *prep_rq_fn;
|
||||
unplug_fn *unplug_fn;
|
||||
merge_bvec_fn *merge_bvec_fn;
|
||||
activity_fn *activity_fn;
|
||||
issue_flush_fn *issue_flush_fn;
|
||||
prepare_flush_fn *prepare_flush_fn;
|
||||
softirq_done_fn *softirq_done_fn;
|
||||
@@ -411,8 +409,6 @@ struct request_queue
|
||||
*/
|
||||
void *queuedata;
|
||||
|
||||
void *activity_data;
|
||||
|
||||
/*
|
||||
* queue needs bounce pages for pages above this limit
|
||||
*/
|
||||
@@ -651,17 +647,37 @@ extern void blk_recount_segments(request_queue_t *, struct bio *);
|
||||
extern int scsi_cmd_ioctl(struct file *, struct gendisk *, unsigned int, void __user *);
|
||||
extern int sg_scsi_ioctl(struct file *, struct request_queue *,
|
||||
struct gendisk *, struct scsi_ioctl_command __user *);
|
||||
|
||||
/*
|
||||
* A queue has just exitted congestion. Note this in the global counter of
|
||||
* congested queues, and wake up anyone who was waiting for requests to be
|
||||
* put back.
|
||||
*/
|
||||
static inline void blk_clear_queue_congested(request_queue_t *q, int rw)
|
||||
{
|
||||
clear_bdi_congested(&q->backing_dev_info, rw);
|
||||
}
|
||||
|
||||
/*
|
||||
* A queue has just entered congestion. Flag that in the queue's VM-visible
|
||||
* state flags and increment the global gounter of congested queues.
|
||||
*/
|
||||
static inline void blk_set_queue_congested(request_queue_t *q, int rw)
|
||||
{
|
||||
set_bdi_congested(&q->backing_dev_info, rw);
|
||||
}
|
||||
|
||||
extern void blk_start_queue(request_queue_t *q);
|
||||
extern void blk_stop_queue(request_queue_t *q);
|
||||
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_start_queueing(request_queue_t *);
|
||||
extern void blk_queue_activity_fn(request_queue_t *, activity_fn *, void *);
|
||||
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_user(request_queue_t *, struct request *, void __user *, unsigned long);
|
||||
extern int blk_rq_unmap_user(struct request *);
|
||||
extern int blk_rq_map_kern(request_queue_t *, struct request *, void *, unsigned int, gfp_t);
|
||||
extern int blk_rq_map_user_iov(request_queue_t *, struct request *, struct sg_iovec *, int);
|
||||
extern int blk_rq_map_user_iov(request_queue_t *, struct request *,
|
||||
struct sg_iovec *, int, unsigned int);
|
||||
extern int blk_execute_rq(request_queue_t *, struct gendisk *,
|
||||
struct request *, int);
|
||||
extern void blk_execute_rq_nowait(request_queue_t *, struct gendisk *,
|
||||
@@ -765,10 +781,8 @@ extern int blk_queue_init_tags(request_queue_t *, int, struct blk_queue_tag *);
|
||||
extern void blk_queue_free_tags(request_queue_t *);
|
||||
extern int blk_queue_resize_tags(request_queue_t *, int);
|
||||
extern void blk_queue_invalidate_tags(request_queue_t *);
|
||||
extern long blk_congestion_wait(int rw, long timeout);
|
||||
extern struct blk_queue_tag *blk_init_tags(int);
|
||||
extern void blk_free_tags(struct blk_queue_tag *);
|
||||
extern void blk_congestion_end(int rw);
|
||||
|
||||
static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt,
|
||||
int tag)
|
||||
|
||||
@@ -49,6 +49,15 @@ enum blktrace_act {
|
||||
__BLK_TA_REMAP, /* bio was remapped */
|
||||
};
|
||||
|
||||
/*
|
||||
* Notify events.
|
||||
*/
|
||||
enum blktrace_notify {
|
||||
__BLK_TN_PROCESS = 0, /* establish pid/name mapping */
|
||||
__BLK_TN_TIMESTAMP, /* include system clock */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Trace actions in full. Additionally, read or write is masked
|
||||
*/
|
||||
@@ -68,6 +77,9 @@ enum blktrace_act {
|
||||
#define BLK_TA_BOUNCE (__BLK_TA_BOUNCE)
|
||||
#define BLK_TA_REMAP (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE))
|
||||
|
||||
#define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY))
|
||||
#define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY))
|
||||
|
||||
#define BLK_IO_TRACE_MAGIC 0x65617400
|
||||
#define BLK_IO_TRACE_VERSION 0x07
|
||||
|
||||
|
||||
@@ -119,8 +119,7 @@ extern void *alloc_large_system_hash(const char *tablename,
|
||||
unsigned int *_hash_mask,
|
||||
unsigned long limit);
|
||||
|
||||
#define HASH_HIGHMEM 0x00000001 /* Consider highmem? */
|
||||
#define HASH_EARLY 0x00000002 /* Allocating during early boot? */
|
||||
#define HASH_EARLY 0x00000001 /* Allocating during early boot? */
|
||||
|
||||
/* Only NUMA needs hash distribution.
|
||||
* IA64 is known to have sufficient vmalloc space.
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
#ifndef _LINUX_BH_H
|
||||
#define _LINUX_BH_H
|
||||
|
||||
extern void local_bh_disable(void);
|
||||
extern void __local_bh_enable(void);
|
||||
extern void _local_bh_enable(void);
|
||||
extern void local_bh_enable(void);
|
||||
extern void local_bh_enable_ip(unsigned long ip);
|
||||
|
||||
#endif /* _LINUX_BH_H */
|
||||
@@ -69,6 +69,8 @@ struct buffer_head {
|
||||
bh_end_io_t *b_end_io; /* I/O completion */
|
||||
void *b_private; /* reserved for b_end_io */
|
||||
struct list_head b_assoc_buffers; /* associated with another mapping */
|
||||
struct address_space *b_assoc_map; /* mapping this buffer is
|
||||
associated with */
|
||||
atomic_t b_count; /* users using this buffer_head */
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
#ifndef _LINUX_BUG_H
|
||||
#define _LINUX_BUG_H
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <asm/bug.h>
|
||||
|
||||
enum bug_trap_type {
|
||||
BUG_TRAP_TYPE_NONE = 0,
|
||||
BUG_TRAP_TYPE_WARN = 1,
|
||||
BUG_TRAP_TYPE_BUG = 2,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_GENERIC_BUG
|
||||
#include <asm-generic/bug.h>
|
||||
|
||||
static inline int is_warning_bug(const struct bug_entry *bug)
|
||||
{
|
||||
return bug->flags & BUGFLAG_WARNING;
|
||||
}
|
||||
|
||||
const struct bug_entry *find_bug(unsigned long bugaddr);
|
||||
|
||||
enum bug_trap_type report_bug(unsigned long bug_addr);
|
||||
|
||||
int module_bug_finalize(const Elf_Ehdr *, const Elf_Shdr *,
|
||||
struct module *);
|
||||
void module_bug_cleanup(struct module *);
|
||||
|
||||
/* These are defined by the architecture */
|
||||
int is_valid_bugaddr(unsigned long addr);
|
||||
|
||||
#else /* !CONFIG_GENERIC_BUG */
|
||||
|
||||
static inline enum bug_trap_type report_bug(unsigned long bug_addr)
|
||||
{
|
||||
return BUG_TRAP_TYPE_BUG;
|
||||
}
|
||||
static inline int module_bug_finalize(const Elf_Ehdr *hdr,
|
||||
const Elf_Shdr *sechdrs,
|
||||
struct module *mod)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void module_bug_cleanup(struct module *mod) {}
|
||||
|
||||
#endif /* CONFIG_GENERIC_BUG */
|
||||
#endif /* _LINUX_BUG_H */
|
||||
@@ -1,29 +0,0 @@
|
||||
/*
|
||||
* Fast, simple, yet decent quality random number generator based on
|
||||
* a paper by David G. Carta ("Two Fast Implementations of the
|
||||
* `Minimal Standard' Random Number Generator," Communications of the
|
||||
* ACM, January, 1990).
|
||||
*
|
||||
* Copyright (c) 2002-2006 Hewlett-Packard Development Company, L.P.
|
||||
* Contributed by Stephane Eranian <eranian@hpl.hp.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of version 2 of the GNU General Public
|
||||
* License as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
* 02111-1307 USA
|
||||
*/
|
||||
#ifndef _LINUX_CARTA_RANDOM32_H_
|
||||
#define _LINUX_CARTA_RANDOM32_H_
|
||||
|
||||
u64 carta_random32(u64 seed);
|
||||
|
||||
#endif /* _LINUX_CARTA_RANDOM32_H_ */
|
||||
@@ -80,7 +80,7 @@ typedef __u32 DriverVer_type;
|
||||
#define HWORD __u16
|
||||
#define DWORD __u32
|
||||
|
||||
#define CISS_MAX_LUN 16
|
||||
#define CISS_MAX_LUN 1024
|
||||
|
||||
#define LEVEL2LUN 1 // index into Target(x) structure, due to byte swapping
|
||||
#define LEVEL3LUN 0
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
#define _LINUX_CDEV_H
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/kobject.h>
|
||||
#include <linux/kdev_t.h>
|
||||
#include <linux/list.h>
|
||||
|
||||
struct cdev {
|
||||
struct kobject kobj;
|
||||
struct module *owner;
|
||||
|
||||
@@ -159,7 +159,7 @@ static inline s64 cyc2ns(struct clocksource *cs, cycle_t cycles)
|
||||
* Unless you're the timekeeping code, you should not be using this!
|
||||
*/
|
||||
static inline void clocksource_calculate_interval(struct clocksource *c,
|
||||
unsigned long length_nsec)
|
||||
unsigned long length_nsec)
|
||||
{
|
||||
u64 tmp;
|
||||
|
||||
|
||||
@@ -196,7 +196,7 @@ asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp,
|
||||
#define BITS_TO_COMPAT_LONGS(bits) \
|
||||
(((bits)+BITS_PER_COMPAT_LONG-1)/BITS_PER_COMPAT_LONG)
|
||||
|
||||
long compat_get_bitmap(unsigned long *mask, compat_ulong_t __user *umask,
|
||||
long compat_get_bitmap(unsigned long *mask, const compat_ulong_t __user *umask,
|
||||
unsigned long bitmap_size);
|
||||
long compat_put_bitmap(compat_ulong_t __user *umask, unsigned long *mask,
|
||||
unsigned long bitmap_size);
|
||||
@@ -230,5 +230,9 @@ asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp);
|
||||
extern int compat_printk(const char *fmt, ...);
|
||||
extern void sigset_from_compat(sigset_t *set, compat_sigset_t *compat);
|
||||
|
||||
asmlinkage long compat_sys_migrate_pages(compat_pid_t pid,
|
||||
compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes,
|
||||
const compat_ulong_t __user *new_nodes);
|
||||
|
||||
#endif /* CONFIG_COMPAT */
|
||||
#endif /* _LINUX_COMPAT_H */
|
||||
|
||||
@@ -131,6 +131,7 @@ COMPATIBLE_IOCTL(RUN_ARRAY)
|
||||
COMPATIBLE_IOCTL(STOP_ARRAY)
|
||||
COMPATIBLE_IOCTL(STOP_ARRAY_RO)
|
||||
COMPATIBLE_IOCTL(RESTART_ARRAY_RW)
|
||||
COMPATIBLE_IOCTL(GET_BITMAP_FILE)
|
||||
ULONG_IOCTL(SET_BITMAP_FILE)
|
||||
/* DM */
|
||||
COMPATIBLE_IOCTL(DM_VERSION_32)
|
||||
|
||||
@@ -133,7 +133,7 @@ struct cn_callback_data {
|
||||
struct cn_callback_entry {
|
||||
struct list_head callback_entry;
|
||||
struct cn_callback *cb;
|
||||
struct work_struct work;
|
||||
struct delayed_work work;
|
||||
struct cn_queue_dev *pdev;
|
||||
|
||||
struct cn_callback_id id;
|
||||
@@ -170,7 +170,7 @@ void cn_queue_free_dev(struct cn_queue_dev *dev);
|
||||
|
||||
int cn_cb_equal(struct cb_id *, struct cb_id *);
|
||||
|
||||
void cn_queue_wrapper(void *data);
|
||||
void cn_queue_wrapper(struct work_struct *work);
|
||||
|
||||
extern int cn_already_initialized;
|
||||
|
||||
|
||||
+33
-6
@@ -24,15 +24,24 @@
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <asm/semaphore.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
struct cpu {
|
||||
int node_id; /* The node which contains the CPU */
|
||||
int no_control; /* Should the sysfs control file be created? */
|
||||
int hotpluggable; /* creates sysfs control file if hotpluggable */
|
||||
struct sys_device sysdev;
|
||||
};
|
||||
|
||||
extern int register_cpu(struct cpu *cpu, int num);
|
||||
extern struct sys_device *get_cpu_sysdev(unsigned cpu);
|
||||
|
||||
extern int cpu_add_sysdev_attr(struct sysdev_attribute *attr);
|
||||
extern void cpu_remove_sysdev_attr(struct sysdev_attribute *attr);
|
||||
|
||||
extern int cpu_add_sysdev_attr_group(struct attribute_group *attrs);
|
||||
extern void cpu_remove_sysdev_attr_group(struct attribute_group *attrs);
|
||||
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
extern void unregister_cpu(struct cpu *cpu);
|
||||
#endif
|
||||
@@ -66,6 +75,17 @@ extern struct sysdev_class cpu_sysdev_class;
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
/* Stop CPUs going up and down. */
|
||||
|
||||
static inline void cpuhotplug_mutex_lock(struct mutex *cpu_hp_mutex)
|
||||
{
|
||||
mutex_lock(cpu_hp_mutex);
|
||||
}
|
||||
|
||||
static inline void cpuhotplug_mutex_unlock(struct mutex *cpu_hp_mutex)
|
||||
{
|
||||
mutex_unlock(cpu_hp_mutex);
|
||||
}
|
||||
|
||||
extern void lock_cpu_hotplug(void);
|
||||
extern void unlock_cpu_hotplug(void);
|
||||
#define hotcpu_notifier(fn, pri) { \
|
||||
@@ -77,17 +97,24 @@ extern void unlock_cpu_hotplug(void);
|
||||
#define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb)
|
||||
int cpu_down(unsigned int cpu);
|
||||
#define cpu_is_offline(cpu) unlikely(!cpu_online(cpu))
|
||||
#else
|
||||
|
||||
#else /* CONFIG_HOTPLUG_CPU */
|
||||
|
||||
static inline void cpuhotplug_mutex_lock(struct mutex *cpu_hp_mutex)
|
||||
{ }
|
||||
static inline void cpuhotplug_mutex_unlock(struct mutex *cpu_hp_mutex)
|
||||
{ }
|
||||
|
||||
#define lock_cpu_hotplug() do { } while (0)
|
||||
#define unlock_cpu_hotplug() do { } while (0)
|
||||
#define lock_cpu_hotplug_interruptible() 0
|
||||
#define hotcpu_notifier(fn, pri) do { } while (0)
|
||||
#define register_hotcpu_notifier(nb) do { } while (0)
|
||||
#define unregister_hotcpu_notifier(nb) do { } while (0)
|
||||
#define hotcpu_notifier(fn, pri) do { (void)(fn); } while (0)
|
||||
#define register_hotcpu_notifier(nb) do { (void)(nb); } while (0)
|
||||
#define unregister_hotcpu_notifier(nb) do { (void)(nb); } while (0)
|
||||
|
||||
/* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */
|
||||
static inline int cpu_is_offline(int cpu) { return 0; }
|
||||
#endif
|
||||
#endif /* CONFIG_HOTPLUG_CPU */
|
||||
|
||||
#ifdef CONFIG_SUSPEND_SMP
|
||||
extern int disable_nonboot_cpus(void);
|
||||
|
||||
@@ -23,6 +23,7 @@ extern void cpuset_fork(struct task_struct *p);
|
||||
extern void cpuset_exit(struct task_struct *p);
|
||||
extern cpumask_t cpuset_cpus_allowed(struct task_struct *p);
|
||||
extern nodemask_t cpuset_mems_allowed(struct task_struct *p);
|
||||
#define cpuset_current_mems_allowed (current->mems_allowed)
|
||||
void cpuset_init_current_mems_allowed(void);
|
||||
void cpuset_update_task_memory_state(void);
|
||||
#define cpuset_nodes_subset_current_mems_allowed(nodes) \
|
||||
@@ -45,7 +46,7 @@ extern int cpuset_excl_nodes_overlap(const struct task_struct *p);
|
||||
extern int cpuset_memory_pressure_enabled;
|
||||
extern void __cpuset_memory_pressure_bump(void);
|
||||
|
||||
extern struct file_operations proc_cpuset_operations;
|
||||
extern const struct file_operations proc_cpuset_operations;
|
||||
extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer);
|
||||
|
||||
extern void cpuset_lock(void);
|
||||
@@ -83,6 +84,7 @@ static inline nodemask_t cpuset_mems_allowed(struct task_struct *p)
|
||||
return node_possible_map;
|
||||
}
|
||||
|
||||
#define cpuset_current_mems_allowed (node_online_map)
|
||||
static inline void cpuset_init_current_mems_allowed(void) {}
|
||||
static inline void cpuset_update_task_memory_state(void) {}
|
||||
#define cpuset_nodes_subset_current_mems_allowed(nodes) (1)
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
#define _LINUX_CRC32_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/bitrev.h>
|
||||
|
||||
extern u32 crc32_le(u32 crc, unsigned char const *p, size_t len);
|
||||
extern u32 crc32_be(u32 crc, unsigned char const *p, size_t len);
|
||||
extern u32 bitreverse(u32 in);
|
||||
|
||||
#define crc32(seed, data, length) crc32_le(seed, (unsigned char const *)data, length)
|
||||
|
||||
@@ -21,7 +21,7 @@ extern u32 bitreverse(u32 in);
|
||||
* is in bit nr 0], thus it must be reversed before use. Except for
|
||||
* nics that bit swap the result internally...
|
||||
*/
|
||||
#define ether_crc(length, data) bitreverse(crc32_le(~0, data, length))
|
||||
#define ether_crc(length, data) bitrev32(crc32_le(~0, data, length))
|
||||
#define ether_crc_le(length, data) crc32_le(~0, data, length)
|
||||
|
||||
#endif /* _LINUX_CRC32_H */
|
||||
|
||||
@@ -241,12 +241,8 @@ int crypto_unregister_alg(struct crypto_alg *alg);
|
||||
* Algorithm query interface.
|
||||
*/
|
||||
#ifdef CONFIG_CRYPTO
|
||||
int crypto_alg_available(const char *name, u32 flags)
|
||||
__deprecated_for_modules;
|
||||
int crypto_has_alg(const char *name, u32 type, u32 mask);
|
||||
#else
|
||||
static int crypto_alg_available(const char *name, u32 flags);
|
||||
__deprecated_for_modules;
|
||||
static inline int crypto_alg_available(const char *name, u32 flags)
|
||||
{
|
||||
return 0;
|
||||
@@ -707,16 +703,6 @@ static inline void crypto_cipher_decrypt_one(struct crypto_cipher *tfm,
|
||||
dst, src);
|
||||
}
|
||||
|
||||
void crypto_digest_init(struct crypto_tfm *tfm) __deprecated_for_modules;
|
||||
void crypto_digest_update(struct crypto_tfm *tfm,
|
||||
struct scatterlist *sg, unsigned int nsg)
|
||||
__deprecated_for_modules;
|
||||
void crypto_digest_final(struct crypto_tfm *tfm, u8 *out)
|
||||
__deprecated_for_modules;
|
||||
void crypto_digest_digest(struct crypto_tfm *tfm,
|
||||
struct scatterlist *sg, unsigned int nsg, u8 *out)
|
||||
__deprecated_for_modules;
|
||||
|
||||
static inline struct crypto_hash *__crypto_hash_cast(struct crypto_tfm *tfm)
|
||||
{
|
||||
return (struct crypto_hash *)tfm;
|
||||
@@ -729,14 +715,6 @@ static inline struct crypto_hash *crypto_hash_cast(struct crypto_tfm *tfm)
|
||||
return __crypto_hash_cast(tfm);
|
||||
}
|
||||
|
||||
static int crypto_digest_setkey(struct crypto_tfm *tfm, const u8 *key,
|
||||
unsigned int keylen) __deprecated;
|
||||
static inline int crypto_digest_setkey(struct crypto_tfm *tfm,
|
||||
const u8 *key, unsigned int keylen)
|
||||
{
|
||||
return tfm->crt_hash.setkey(crypto_hash_cast(tfm), key, keylen);
|
||||
}
|
||||
|
||||
static inline struct crypto_hash *crypto_alloc_hash(const char *alg_name,
|
||||
u32 type, u32 mask)
|
||||
{
|
||||
|
||||
+40
-9
@@ -30,7 +30,7 @@ struct dccp_hdr {
|
||||
#else
|
||||
#error "Adjust your <asm/byteorder.h> defines"
|
||||
#endif
|
||||
__u16 dccph_checksum;
|
||||
__sum16 dccph_checksum;
|
||||
#if defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
__u8 dccph_x:1,
|
||||
dccph_type:4,
|
||||
@@ -175,14 +175,18 @@ enum {
|
||||
DCCPC_CCID3 = 3,
|
||||
};
|
||||
|
||||
/* DCCP features */
|
||||
/* DCCP features (RFC 4340 section 6.4) */
|
||||
enum {
|
||||
DCCPF_RESERVED = 0,
|
||||
DCCPF_CCID = 1,
|
||||
DCCPF_SHORT_SEQNOS = 2, /* XXX: not yet implemented */
|
||||
DCCPF_SEQUENCE_WINDOW = 3,
|
||||
DCCPF_ECN_INCAPABLE = 4, /* XXX: not yet implemented */
|
||||
DCCPF_ACK_RATIO = 5,
|
||||
DCCPF_SEND_ACK_VECTOR = 6,
|
||||
DCCPF_SEND_NDP_COUNT = 7,
|
||||
DCCPF_MIN_CSUM_COVER = 8,
|
||||
DCCPF_DATA_CHECKSUM = 9, /* XXX: not yet implemented */
|
||||
/* 10-127 reserved */
|
||||
DCCPF_MIN_CCID_SPECIFIC = 128,
|
||||
DCCPF_MAX_CCID_SPECIFIC = 255,
|
||||
@@ -196,13 +200,16 @@ struct dccp_so_feat {
|
||||
};
|
||||
|
||||
/* DCCP socket options */
|
||||
#define DCCP_SOCKOPT_PACKET_SIZE 1
|
||||
#define DCCP_SOCKOPT_PACKET_SIZE 1 /* XXX deprecated, without effect */
|
||||
#define DCCP_SOCKOPT_SERVICE 2
|
||||
#define DCCP_SOCKOPT_CHANGE_L 3
|
||||
#define DCCP_SOCKOPT_CHANGE_R 4
|
||||
#define DCCP_SOCKOPT_SEND_CSCOV 10
|
||||
#define DCCP_SOCKOPT_RECV_CSCOV 11
|
||||
#define DCCP_SOCKOPT_CCID_RX_INFO 128
|
||||
#define DCCP_SOCKOPT_CCID_TX_INFO 192
|
||||
|
||||
/* maximum number of services provided on the same listening port */
|
||||
#define DCCP_SERVICE_LIST_MAX_LEN 32
|
||||
|
||||
#ifdef __KERNEL__
|
||||
@@ -256,6 +263,13 @@ static inline struct dccp_hdr *dccp_hdr(const struct sk_buff *skb)
|
||||
return (struct dccp_hdr *)skb->h.raw;
|
||||
}
|
||||
|
||||
static inline struct dccp_hdr *dccp_zeroed_hdr(struct sk_buff *skb, int headlen)
|
||||
{
|
||||
skb->h.raw = skb_push(skb, headlen);
|
||||
memset(skb->h.raw, 0, headlen);
|
||||
return dccp_hdr(skb);
|
||||
}
|
||||
|
||||
static inline struct dccp_hdr_ext *dccp_hdrx(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct dccp_hdr_ext *)(skb->h.raw + sizeof(struct dccp_hdr));
|
||||
@@ -342,6 +356,9 @@ static inline unsigned int dccp_hdr_len(const struct sk_buff *skb)
|
||||
* @dccpms_ccid - Congestion Control Id (CCID) (section 10)
|
||||
* @dccpms_send_ack_vector - Send Ack Vector Feature (section 11.5)
|
||||
* @dccpms_send_ndp_count - Send NDP Count Feature (7.7.2)
|
||||
* @dccpms_ack_ratio - Ack Ratio Feature (section 11.3)
|
||||
* @dccpms_pending - List of features being negotiated
|
||||
* @dccpms_conf -
|
||||
*/
|
||||
struct dccp_minisock {
|
||||
__u64 dccpms_sequence_window;
|
||||
@@ -410,7 +427,7 @@ struct dccp_service_list {
|
||||
};
|
||||
|
||||
#define DCCP_SERVICE_INVALID_VALUE htonl((__u32)-1)
|
||||
#define DCCP_SERVICE_CODE_IS_ABSENT 0
|
||||
#define DCCP_SERVICE_CODE_IS_ABSENT 0
|
||||
|
||||
static inline int dccp_list_has_service(const struct dccp_service_list *sl,
|
||||
const __be32 service)
|
||||
@@ -419,7 +436,7 @@ static inline int dccp_list_has_service(const struct dccp_service_list *sl,
|
||||
u32 i = sl->dccpsl_nr;
|
||||
while (i--)
|
||||
if (sl->dccpsl_list[i] == service)
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -439,12 +456,25 @@ struct dccp_ackvec;
|
||||
* @dccps_gss - greatest sequence number sent
|
||||
* @dccps_gsr - greatest valid sequence number received
|
||||
* @dccps_gar - greatest valid ack number received on a non-Sync; initialized to %dccps_iss
|
||||
* @dccps_service - first (passive sock) or unique (active sock) service code
|
||||
* @dccps_service_list - second .. last service code on passive socket
|
||||
* @dccps_timestamp_time - time of latest TIMESTAMP option
|
||||
* @dccps_timestamp_echo - latest timestamp received on a TIMESTAMP option
|
||||
* @dccps_packet_size - Set thru setsockopt
|
||||
* @dccps_role - Role of this sock, one of %dccp_role
|
||||
* @dccps_l_ack_ratio -
|
||||
* @dccps_r_ack_ratio -
|
||||
* @dccps_pcslen - sender partial checksum coverage (via sockopt)
|
||||
* @dccps_pcrlen - receiver partial checksum coverage (via sockopt)
|
||||
* @dccps_ndp_count - number of Non Data Packets since last data packet
|
||||
* @dccps_mss_cache -
|
||||
* @dccps_minisock -
|
||||
* @dccps_hc_rx_ackvec - rx half connection ack vector
|
||||
* @dccps_hc_rx_ccid -
|
||||
* @dccps_hc_tx_ccid -
|
||||
* @dccps_options_received -
|
||||
* @dccps_epoch -
|
||||
* @dccps_role - Role of this sock, one of %dccp_role
|
||||
* @dccps_hc_rx_insert_options -
|
||||
* @dccps_hc_tx_insert_options -
|
||||
* @dccps_xmit_timer - timer for when CCID is not ready to send
|
||||
*/
|
||||
struct dccp_sock {
|
||||
@@ -464,9 +494,10 @@ struct dccp_sock {
|
||||
struct dccp_service_list *dccps_service_list;
|
||||
struct timeval dccps_timestamp_time;
|
||||
__u32 dccps_timestamp_echo;
|
||||
__u32 dccps_packet_size;
|
||||
__u16 dccps_l_ack_ratio;
|
||||
__u16 dccps_r_ack_ratio;
|
||||
__u16 dccps_pcslen;
|
||||
__u16 dccps_pcrlen;
|
||||
unsigned long dccps_ndp_count;
|
||||
__u32 dccps_mss_cache;
|
||||
struct dccp_minisock dccps_minisock;
|
||||
@@ -480,7 +511,7 @@ struct dccp_sock {
|
||||
__u8 dccps_hc_tx_insert_options:1;
|
||||
struct timer_list dccps_xmit_timer;
|
||||
};
|
||||
|
||||
|
||||
static inline struct dccp_sock *dccp_sk(const struct sock *sk)
|
||||
{
|
||||
return (struct dccp_sock *)sk;
|
||||
|
||||
@@ -24,7 +24,7 @@ extern int debug_locks_off(void);
|
||||
int __ret = 0; \
|
||||
\
|
||||
if (unlikely(c)) { \
|
||||
if (debug_locks_off()) \
|
||||
if (debug_locks_silent || debug_locks_off()) \
|
||||
WARN_ON(1); \
|
||||
__ret = 1; \
|
||||
} \
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
#ifdef CONFIG_TASK_DELAY_ACCT
|
||||
|
||||
extern int delayacct_on; /* Delay accounting turned on/off */
|
||||
extern kmem_cache_t *delayacct_cache;
|
||||
extern struct kmem_cache *delayacct_cache;
|
||||
extern void delayacct_init(void);
|
||||
extern void __delayacct_tsk_init(struct task_struct *);
|
||||
extern void __delayacct_tsk_exit(struct task_struct *);
|
||||
|
||||
@@ -39,7 +39,8 @@ typedef void (*dm_dtr_fn) (struct dm_target *ti);
|
||||
* The map function must return:
|
||||
* < 0: error
|
||||
* = 0: The target will handle the io by resubmitting it later
|
||||
* > 0: simple remap complete
|
||||
* = 1: simple remap complete
|
||||
* = 2: The target wants to push back the io
|
||||
*/
|
||||
typedef int (*dm_map_fn) (struct dm_target *ti, struct bio *bio,
|
||||
union map_info *map_context);
|
||||
@@ -50,6 +51,7 @@ typedef int (*dm_map_fn) (struct dm_target *ti, struct bio *bio,
|
||||
* 0 : ended successfully
|
||||
* 1 : for some reason the io has still not completed (eg,
|
||||
* multipath target might want to requeue a failed io).
|
||||
* 2 : The target wants to push back the io
|
||||
*/
|
||||
typedef int (*dm_endio_fn) (struct dm_target *ti,
|
||||
struct bio *bio, int error,
|
||||
@@ -173,7 +175,7 @@ void *dm_get_mdptr(struct mapped_device *md);
|
||||
/*
|
||||
* A device can still be used while suspended, but I/O is deferred.
|
||||
*/
|
||||
int dm_suspend(struct mapped_device *md, int with_lockfs);
|
||||
int dm_suspend(struct mapped_device *md, unsigned suspend_flags);
|
||||
int dm_resume(struct mapped_device *md);
|
||||
|
||||
/*
|
||||
@@ -188,6 +190,7 @@ int dm_wait_event(struct mapped_device *md, int event_nr);
|
||||
const char *dm_device_name(struct mapped_device *md);
|
||||
struct gendisk *dm_disk(struct mapped_device *md);
|
||||
int dm_suspended(struct mapped_device *md);
|
||||
int dm_noflush_suspending(struct dm_target *ti);
|
||||
|
||||
/*
|
||||
* Geometry functions.
|
||||
|
||||
+54
-5
@@ -21,6 +21,7 @@
|
||||
#include <linux/pm.h>
|
||||
#include <asm/semaphore.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/device.h>
|
||||
|
||||
#define DEVICE_NAME_SIZE 50
|
||||
#define DEVICE_NAME_HALF __stringify(20) /* Less than half to accommodate slop */
|
||||
@@ -42,6 +43,8 @@ struct bus_type {
|
||||
struct klist klist_devices;
|
||||
struct klist klist_drivers;
|
||||
|
||||
struct blocking_notifier_head bus_notifier;
|
||||
|
||||
struct bus_attribute * bus_attrs;
|
||||
struct device_attribute * dev_attrs;
|
||||
struct driver_attribute * drv_attrs;
|
||||
@@ -75,6 +78,29 @@ int __must_check bus_for_each_drv(struct bus_type *bus,
|
||||
struct device_driver *start, void *data,
|
||||
int (*fn)(struct device_driver *, void *));
|
||||
|
||||
/*
|
||||
* Bus notifiers: Get notified of addition/removal of devices
|
||||
* and binding/unbinding of drivers to devices.
|
||||
* In the long run, it should be a replacement for the platform
|
||||
* notify hooks.
|
||||
*/
|
||||
struct notifier_block;
|
||||
|
||||
extern int bus_register_notifier(struct bus_type *bus,
|
||||
struct notifier_block *nb);
|
||||
extern int bus_unregister_notifier(struct bus_type *bus,
|
||||
struct notifier_block *nb);
|
||||
|
||||
/* All 4 notifers below get called with the target struct device *
|
||||
* as an argument. Note that those functions are likely to be called
|
||||
* with the device semaphore held in the core, so be careful.
|
||||
*/
|
||||
#define BUS_NOTIFY_ADD_DEVICE 0x00000001 /* device added */
|
||||
#define BUS_NOTIFY_DEL_DEVICE 0x00000002 /* device removed */
|
||||
#define BUS_NOTIFY_BOUND_DRIVER 0x00000003 /* driver bound to device */
|
||||
#define BUS_NOTIFY_UNBIND_DRIVER 0x00000004 /* driver about to be
|
||||
unbound */
|
||||
|
||||
/* driverfs interface for exporting bus attributes */
|
||||
|
||||
struct bus_attribute {
|
||||
@@ -343,10 +369,11 @@ struct device {
|
||||
void *driver_data; /* data private to the driver */
|
||||
void *platform_data; /* Platform specific data, device
|
||||
core doesn't touch it */
|
||||
void *firmware_data; /* Firmware specific data (e.g. ACPI,
|
||||
BIOS data),reserved for device core*/
|
||||
struct dev_pm_info power;
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
int numa_node; /* NUMA node this device is close to */
|
||||
#endif
|
||||
u64 *dma_mask; /* dma mask (if dma'able device) */
|
||||
u64 coherent_dma_mask;/* Like dma_mask, but for
|
||||
alloc_coherent mappings as
|
||||
@@ -358,6 +385,8 @@ struct device {
|
||||
|
||||
struct dma_coherent_mem *dma_mem; /* internal for coherent mem
|
||||
override */
|
||||
/* arch specific additions */
|
||||
struct dev_archdata archdata;
|
||||
|
||||
/* class_device migration path */
|
||||
struct list_head node;
|
||||
@@ -368,6 +397,25 @@ struct device {
|
||||
void (*release)(struct device * dev);
|
||||
};
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
static inline int dev_to_node(struct device *dev)
|
||||
{
|
||||
return dev->numa_node;
|
||||
}
|
||||
static inline void set_dev_node(struct device *dev, int node)
|
||||
{
|
||||
dev->numa_node = node;
|
||||
}
|
||||
#else
|
||||
static inline int dev_to_node(struct device *dev)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
static inline void set_dev_node(struct device *dev, int node)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline void *
|
||||
dev_get_drvdata (struct device *dev)
|
||||
{
|
||||
@@ -393,9 +441,12 @@ extern void device_unregister(struct device * dev);
|
||||
extern void device_initialize(struct device * dev);
|
||||
extern int __must_check device_add(struct device * dev);
|
||||
extern void device_del(struct device * dev);
|
||||
extern int __must_check device_for_each_child(struct device *, void *,
|
||||
extern int device_for_each_child(struct device *, void *,
|
||||
int (*fn)(struct device *, void *));
|
||||
extern struct device *device_find_child(struct device *, void *data,
|
||||
int (*match)(struct device *, void *));
|
||||
extern int device_rename(struct device *dev, char *new_name);
|
||||
extern int device_move(struct device *dev, struct device *new_parent);
|
||||
|
||||
/*
|
||||
* Manual binding of a device to driver. See drivers/base/bus.c
|
||||
@@ -415,8 +466,6 @@ extern struct device *device_create(struct class *cls, struct device *parent,
|
||||
__attribute__((format(printf,4,5)));
|
||||
extern void device_destroy(struct class *cls, dev_t devt);
|
||||
|
||||
extern int virtual_device_parent(struct device *dev);
|
||||
|
||||
/*
|
||||
* Platform "fixup" functions - allow the platform to have their say
|
||||
* about devices and actions that the general device layer doesn't
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
/*
|
||||
* Frame Diversion, Benoit Locher <Benoit.Locher@skf.com>
|
||||
*
|
||||
* Changes:
|
||||
* 06/09/2000 BL: initial version
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_DIVERT_H
|
||||
#define _LINUX_DIVERT_H
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
#define MAX_DIVERT_PORTS 8 /* Max number of ports to divert (tcp, udp) */
|
||||
|
||||
/* Divertable protocols */
|
||||
#define DIVERT_PROTO_NONE 0x0000
|
||||
#define DIVERT_PROTO_IP 0x0001
|
||||
#define DIVERT_PROTO_ICMP 0x0002
|
||||
#define DIVERT_PROTO_TCP 0x0004
|
||||
#define DIVERT_PROTO_UDP 0x0008
|
||||
|
||||
/*
|
||||
* This is an Ethernet Frame Diverter option block
|
||||
*/
|
||||
struct divert_blk
|
||||
{
|
||||
int divert; /* are we active */
|
||||
unsigned int protos; /* protocols */
|
||||
__u16 tcp_dst[MAX_DIVERT_PORTS]; /* specific tcp dst ports to divert */
|
||||
__u16 tcp_src[MAX_DIVERT_PORTS]; /* specific tcp src ports to divert */
|
||||
__u16 udp_dst[MAX_DIVERT_PORTS]; /* specific udp dst ports to divert */
|
||||
__u16 udp_src[MAX_DIVERT_PORTS]; /* specific udp src ports to divert */
|
||||
};
|
||||
|
||||
/*
|
||||
* Diversion control block, for configuration with the userspace tool
|
||||
* divert
|
||||
*/
|
||||
|
||||
typedef union _divert_cf_arg
|
||||
{
|
||||
__s16 int16;
|
||||
__u16 uint16;
|
||||
__s32 int32;
|
||||
__u32 uint32;
|
||||
__s64 int64;
|
||||
__u64 uint64;
|
||||
void __user *ptr;
|
||||
} divert_cf_arg;
|
||||
|
||||
|
||||
struct divert_cf
|
||||
{
|
||||
int cmd; /* Command */
|
||||
divert_cf_arg arg1,
|
||||
arg2,
|
||||
arg3;
|
||||
int dev_index; /* device index (eth0=0, etc...) */
|
||||
};
|
||||
|
||||
|
||||
/* Diversion commands */
|
||||
#define DIVCMD_DIVERT 1 /* ENABLE/DISABLE diversion */
|
||||
#define DIVCMD_IP 2 /* ENABLE/DISABLE whold IP diversion */
|
||||
#define DIVCMD_TCP 3 /* ENABLE/DISABLE whold TCP diversion */
|
||||
#define DIVCMD_TCPDST 4 /* ADD/REMOVE TCP DST port for diversion */
|
||||
#define DIVCMD_TCPSRC 5 /* ADD/REMOVE TCP SRC port for diversion */
|
||||
#define DIVCMD_UDP 6 /* ENABLE/DISABLE whole UDP diversion */
|
||||
#define DIVCMD_UDPDST 7 /* ADD/REMOVE UDP DST port for diversion */
|
||||
#define DIVCMD_UDPSRC 8 /* ADD/REMOVE UDP SRC port for diversion */
|
||||
#define DIVCMD_ICMP 9 /* ENABLE/DISABLE whole ICMP diversion */
|
||||
#define DIVCMD_GETSTATUS 10 /* GET the status of the diverter */
|
||||
#define DIVCMD_RESET 11 /* Reset the diverter on the specified dev */
|
||||
#define DIVCMD_GETVERSION 12 /* Retrieve the diverter code version (char[32]) */
|
||||
|
||||
/* General syntax of the commands:
|
||||
*
|
||||
* DIVCMD_xxxxxx(arg1, arg2, arg3, dev_index)
|
||||
*
|
||||
* SIOCSIFDIVERT:
|
||||
* DIVCMD_DIVERT(DIVARG1_ENABLE|DIVARG1_DISABLE, , ,ifindex)
|
||||
* DIVCMD_IP(DIVARG1_ENABLE|DIVARG1_DISABLE, , , ifindex)
|
||||
* DIVCMD_TCP(DIVARG1_ENABLE|DIVARG1_DISABLE, , , ifindex)
|
||||
* DIVCMD_TCPDST(DIVARG1_ADD|DIVARG1_REMOVE, port, , ifindex)
|
||||
* DIVCMD_TCPSRC(DIVARG1_ADD|DIVARG1_REMOVE, port, , ifindex)
|
||||
* DIVCMD_UDP(DIVARG1_ENABLE|DIVARG1_DISABLE, , , ifindex)
|
||||
* DIVCMD_UDPDST(DIVARG1_ADD|DIVARG1_REMOVE, port, , ifindex)
|
||||
* DIVCMD_UDPSRC(DIVARG1_ADD|DIVARG1_REMOVE, port, , ifindex)
|
||||
* DIVCMD_ICMP(DIVARG1_ENABLE|DIVARG1_DISABLE, , , ifindex)
|
||||
* DIVCMD_RESET(, , , ifindex)
|
||||
*
|
||||
* SIOGIFDIVERT:
|
||||
* DIVCMD_GETSTATUS(divert_blk, , , ifindex)
|
||||
* DIVCMD_GETVERSION(string[3])
|
||||
*/
|
||||
|
||||
|
||||
/* Possible values for arg1 */
|
||||
#define DIVARG1_ENABLE 0 /* ENABLE something */
|
||||
#define DIVARG1_DISABLE 1 /* DISABLE something */
|
||||
#define DIVARG1_ADD 2 /* ADD something */
|
||||
#define DIVARG1_REMOVE 3 /* REMOVE something */
|
||||
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/* diverter functions */
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
#ifdef CONFIG_NET_DIVERT
|
||||
#include <linux/netdevice.h>
|
||||
|
||||
int alloc_divert_blk(struct net_device *);
|
||||
void free_divert_blk(struct net_device *);
|
||||
int divert_ioctl(unsigned int cmd, struct divert_cf __user *arg);
|
||||
void divert_frame(struct sk_buff *skb);
|
||||
static inline void handle_diverter(struct sk_buff *skb)
|
||||
{
|
||||
/* if diversion is supported on device, then divert */
|
||||
if (skb->dev->divert && skb->dev->divert->divert)
|
||||
divert_frame(skb);
|
||||
}
|
||||
|
||||
#else
|
||||
# define alloc_divert_blk(dev) (0)
|
||||
# define free_divert_blk(dev) do {} while (0)
|
||||
# define divert_ioctl(cmd, arg) (-ENOPKG)
|
||||
# define handle_diverter(skb) do {} while (0)
|
||||
#endif
|
||||
#endif
|
||||
#endif /* _LINUX_DIVERT_H */
|
||||
@@ -285,9 +285,9 @@ typedef char ioctl_struct[308];
|
||||
#define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
|
||||
|
||||
#define DM_VERSION_MAJOR 4
|
||||
#define DM_VERSION_MINOR 10
|
||||
#define DM_VERSION_MINOR 11
|
||||
#define DM_VERSION_PATCHLEVEL 0
|
||||
#define DM_VERSION_EXTRA "-ioctl (2006-09-14)"
|
||||
#define DM_VERSION_EXTRA "-ioctl (2006-10-12)"
|
||||
|
||||
/* Status bits */
|
||||
#define DM_READONLY_FLAG (1 << 0) /* In/Out */
|
||||
@@ -323,4 +323,9 @@ typedef char ioctl_struct[308];
|
||||
*/
|
||||
#define DM_SKIP_LOCKFS_FLAG (1 << 10) /* In */
|
||||
|
||||
/*
|
||||
* Set this to suspend without flushing queued ios.
|
||||
*/
|
||||
#define DM_NOFLUSH_FLAG (1 << 11) /* In */
|
||||
|
||||
#endif /* _LINUX_DM_IOCTL_H */
|
||||
|
||||
@@ -69,6 +69,7 @@ extern struct dmi_device * dmi_find_device(int type, const char *name,
|
||||
struct dmi_device *from);
|
||||
extern void dmi_scan_machine(void);
|
||||
extern int dmi_get_year(int field);
|
||||
extern int dmi_name_in_vendors(char *str);
|
||||
|
||||
#else
|
||||
|
||||
@@ -77,6 +78,7 @@ static inline char * dmi_get_system_info(int field) { return NULL; }
|
||||
static inline struct dmi_device * dmi_find_device(int type, const char *name,
|
||||
struct dmi_device *from) { return NULL; }
|
||||
static inline int dmi_get_year(int year) { return 0; }
|
||||
static inline int dmi_name_in_vendors(char *s) { return 0; }
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
+2
-1
@@ -300,8 +300,9 @@ extern int efi_mem_attribute_range (unsigned long phys_addr, unsigned long size,
|
||||
extern int __init efi_uart_console_only (void);
|
||||
extern void efi_initialize_iomem_resources(struct resource *code_resource,
|
||||
struct resource *data_resource);
|
||||
extern unsigned long __init efi_get_time(void);
|
||||
extern unsigned long efi_get_time(void);
|
||||
extern int __init efi_set_rtc_mmss(unsigned long nowtime);
|
||||
extern int is_available_memory(efi_memory_desc_t * md);
|
||||
extern struct efi_memory_map memmap;
|
||||
|
||||
/**
|
||||
|
||||
@@ -21,11 +21,11 @@ typedef void (elevator_completed_req_fn) (request_queue_t *, struct request *);
|
||||
typedef int (elevator_may_queue_fn) (request_queue_t *, int);
|
||||
|
||||
typedef int (elevator_set_req_fn) (request_queue_t *, struct request *, gfp_t);
|
||||
typedef void (elevator_put_req_fn) (request_queue_t *, struct request *);
|
||||
typedef void (elevator_put_req_fn) (struct request *);
|
||||
typedef void (elevator_activate_req_fn) (request_queue_t *, struct request *);
|
||||
typedef void (elevator_deactivate_req_fn) (request_queue_t *, struct request *);
|
||||
|
||||
typedef void *(elevator_init_fn) (request_queue_t *, elevator_t *);
|
||||
typedef void *(elevator_init_fn) (request_queue_t *);
|
||||
typedef void (elevator_exit_fn) (elevator_t *);
|
||||
|
||||
struct elevator_ops
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
#include <linux/elf-em.h>
|
||||
#include <asm/elf.h>
|
||||
|
||||
struct file;
|
||||
|
||||
#ifndef elf_read_implies_exec
|
||||
/* Executables for which elf_read_implies_exec() returns TRUE will
|
||||
have the READ_IMPLIES_EXEC personality flag set automatically.
|
||||
@@ -358,6 +360,7 @@ extern Elf32_Dyn _DYNAMIC [];
|
||||
#define elfhdr elf32_hdr
|
||||
#define elf_phdr elf32_phdr
|
||||
#define elf_note elf32_note
|
||||
#define elf_addr_t Elf32_Off
|
||||
|
||||
#else
|
||||
|
||||
@@ -365,8 +368,16 @@ extern Elf64_Dyn _DYNAMIC [];
|
||||
#define elfhdr elf64_hdr
|
||||
#define elf_phdr elf64_phdr
|
||||
#define elf_note elf64_note
|
||||
#define elf_addr_t Elf64_Off
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef ARCH_HAVE_EXTRA_ELF_NOTES
|
||||
static inline int arch_notes_size(void) { return 0; }
|
||||
static inline void arch_write_notes(struct file *file) { }
|
||||
|
||||
#define ELF_CORE_EXTRA_NOTES_SIZE arch_notes_size()
|
||||
#define ELF_CORE_WRITE_EXTRA_NOTES arch_write_notes(file)
|
||||
#endif /* ARCH_HAVE_EXTRA_ELF_NOTES */
|
||||
|
||||
#endif /* _LINUX_ELF_H */
|
||||
|
||||
+18
-60
@@ -109,74 +109,32 @@ int ext3_mark_inode_dirty(handle_t *handle, struct inode *inode);
|
||||
* been done yet.
|
||||
*/
|
||||
|
||||
void ext3_journal_abort_handle(const char *caller, const char *err_fn,
|
||||
struct buffer_head *bh, handle_t *handle, int err);
|
||||
|
||||
static inline int
|
||||
__ext3_journal_get_undo_access(const char *where, handle_t *handle,
|
||||
struct buffer_head *bh)
|
||||
{
|
||||
int err = journal_get_undo_access(handle, bh);
|
||||
if (err)
|
||||
ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err);
|
||||
return err;
|
||||
}
|
||||
|
||||
static inline int
|
||||
__ext3_journal_get_write_access(const char *where, handle_t *handle,
|
||||
struct buffer_head *bh)
|
||||
{
|
||||
int err = journal_get_write_access(handle, bh);
|
||||
if (err)
|
||||
ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err);
|
||||
return err;
|
||||
}
|
||||
|
||||
static inline void
|
||||
ext3_journal_release_buffer(handle_t *handle, struct buffer_head *bh)
|
||||
static inline void ext3_journal_release_buffer(handle_t *handle,
|
||||
struct buffer_head *bh)
|
||||
{
|
||||
journal_release_buffer(handle, bh);
|
||||
}
|
||||
|
||||
static inline int
|
||||
__ext3_journal_forget(const char *where, handle_t *handle, struct buffer_head *bh)
|
||||
{
|
||||
int err = journal_forget(handle, bh);
|
||||
if (err)
|
||||
ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err);
|
||||
return err;
|
||||
}
|
||||
void ext3_journal_abort_handle(const char *caller, const char *err_fn,
|
||||
struct buffer_head *bh, handle_t *handle, int err);
|
||||
|
||||
static inline int
|
||||
__ext3_journal_revoke(const char *where, handle_t *handle,
|
||||
unsigned long blocknr, struct buffer_head *bh)
|
||||
{
|
||||
int err = journal_revoke(handle, blocknr, bh);
|
||||
if (err)
|
||||
ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err);
|
||||
return err;
|
||||
}
|
||||
int __ext3_journal_get_undo_access(const char *where, handle_t *handle,
|
||||
struct buffer_head *bh);
|
||||
|
||||
static inline int
|
||||
__ext3_journal_get_create_access(const char *where,
|
||||
handle_t *handle, struct buffer_head *bh)
|
||||
{
|
||||
int err = journal_get_create_access(handle, bh);
|
||||
if (err)
|
||||
ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err);
|
||||
return err;
|
||||
}
|
||||
int __ext3_journal_get_write_access(const char *where, handle_t *handle,
|
||||
struct buffer_head *bh);
|
||||
|
||||
static inline int
|
||||
__ext3_journal_dirty_metadata(const char *where,
|
||||
handle_t *handle, struct buffer_head *bh)
|
||||
{
|
||||
int err = journal_dirty_metadata(handle, bh);
|
||||
if (err)
|
||||
ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err);
|
||||
return err;
|
||||
}
|
||||
int __ext3_journal_forget(const char *where, handle_t *handle,
|
||||
struct buffer_head *bh);
|
||||
|
||||
int __ext3_journal_revoke(const char *where, handle_t *handle,
|
||||
unsigned long blocknr, struct buffer_head *bh);
|
||||
|
||||
int __ext3_journal_get_create_access(const char *where,
|
||||
handle_t *handle, struct buffer_head *bh);
|
||||
|
||||
int __ext3_journal_dirty_metadata(const char *where,
|
||||
handle_t *handle, struct buffer_head *bh);
|
||||
|
||||
#define ext3_journal_get_undo_access(handle, bh) \
|
||||
__ext3_journal_get_undo_access(__FUNCTION__, (handle), (bh))
|
||||
|
||||
+18
-60
@@ -114,74 +114,32 @@ int ext4_mark_inode_dirty(handle_t *handle, struct inode *inode);
|
||||
* been done yet.
|
||||
*/
|
||||
|
||||
void ext4_journal_abort_handle(const char *caller, const char *err_fn,
|
||||
struct buffer_head *bh, handle_t *handle, int err);
|
||||
|
||||
static inline int
|
||||
__ext4_journal_get_undo_access(const char *where, handle_t *handle,
|
||||
struct buffer_head *bh)
|
||||
{
|
||||
int err = jbd2_journal_get_undo_access(handle, bh);
|
||||
if (err)
|
||||
ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err);
|
||||
return err;
|
||||
}
|
||||
|
||||
static inline int
|
||||
__ext4_journal_get_write_access(const char *where, handle_t *handle,
|
||||
struct buffer_head *bh)
|
||||
{
|
||||
int err = jbd2_journal_get_write_access(handle, bh);
|
||||
if (err)
|
||||
ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err);
|
||||
return err;
|
||||
}
|
||||
|
||||
static inline void
|
||||
ext4_journal_release_buffer(handle_t *handle, struct buffer_head *bh)
|
||||
static inline void ext4_journal_release_buffer(handle_t *handle,
|
||||
struct buffer_head *bh)
|
||||
{
|
||||
jbd2_journal_release_buffer(handle, bh);
|
||||
}
|
||||
|
||||
static inline int
|
||||
__ext4_journal_forget(const char *where, handle_t *handle, struct buffer_head *bh)
|
||||
{
|
||||
int err = jbd2_journal_forget(handle, bh);
|
||||
if (err)
|
||||
ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err);
|
||||
return err;
|
||||
}
|
||||
void ext4_journal_abort_handle(const char *caller, const char *err_fn,
|
||||
struct buffer_head *bh, handle_t *handle, int err);
|
||||
|
||||
static inline int
|
||||
__ext4_journal_revoke(const char *where, handle_t *handle,
|
||||
ext4_fsblk_t blocknr, struct buffer_head *bh)
|
||||
{
|
||||
int err = jbd2_journal_revoke(handle, blocknr, bh);
|
||||
if (err)
|
||||
ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err);
|
||||
return err;
|
||||
}
|
||||
int __ext4_journal_get_undo_access(const char *where, handle_t *handle,
|
||||
struct buffer_head *bh);
|
||||
|
||||
static inline int
|
||||
__ext4_journal_get_create_access(const char *where,
|
||||
handle_t *handle, struct buffer_head *bh)
|
||||
{
|
||||
int err = jbd2_journal_get_create_access(handle, bh);
|
||||
if (err)
|
||||
ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err);
|
||||
return err;
|
||||
}
|
||||
int __ext4_journal_get_write_access(const char *where, handle_t *handle,
|
||||
struct buffer_head *bh);
|
||||
|
||||
static inline int
|
||||
__ext4_journal_dirty_metadata(const char *where,
|
||||
handle_t *handle, struct buffer_head *bh)
|
||||
{
|
||||
int err = jbd2_journal_dirty_metadata(handle, bh);
|
||||
if (err)
|
||||
ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err);
|
||||
return err;
|
||||
}
|
||||
int __ext4_journal_forget(const char *where, handle_t *handle,
|
||||
struct buffer_head *bh);
|
||||
|
||||
int __ext4_journal_revoke(const char *where, handle_t *handle,
|
||||
ext4_fsblk_t blocknr, struct buffer_head *bh);
|
||||
|
||||
int __ext4_journal_get_create_access(const char *where,
|
||||
handle_t *handle, struct buffer_head *bh);
|
||||
|
||||
int __ext4_journal_dirty_metadata(const char *where,
|
||||
handle_t *handle, struct buffer_head *bh);
|
||||
|
||||
#define ext4_journal_get_undo_access(handle, bh) \
|
||||
__ext4_journal_get_undo_access(__FUNCTION__, (handle), (bh))
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
#ifndef _LINUX_FAULT_INJECT_H
|
||||
#define _LINUX_FAULT_INJECT_H
|
||||
|
||||
#ifdef CONFIG_FAULT_INJECTION
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
/*
|
||||
* For explanation of the elements of this struct, see
|
||||
* Documentation/fault-injection/fault-injection.txt
|
||||
*/
|
||||
struct fault_attr {
|
||||
unsigned long probability;
|
||||
unsigned long interval;
|
||||
atomic_t times;
|
||||
atomic_t space;
|
||||
unsigned long verbose;
|
||||
u32 task_filter;
|
||||
unsigned long stacktrace_depth;
|
||||
unsigned long require_start;
|
||||
unsigned long require_end;
|
||||
unsigned long reject_start;
|
||||
unsigned long reject_end;
|
||||
|
||||
unsigned long count;
|
||||
|
||||
#ifdef CONFIG_FAULT_INJECTION_DEBUG_FS
|
||||
|
||||
struct {
|
||||
struct dentry *dir;
|
||||
|
||||
struct dentry *probability_file;
|
||||
struct dentry *interval_file;
|
||||
struct dentry *times_file;
|
||||
struct dentry *space_file;
|
||||
struct dentry *verbose_file;
|
||||
struct dentry *task_filter_file;
|
||||
struct dentry *stacktrace_depth_file;
|
||||
struct dentry *require_start_file;
|
||||
struct dentry *require_end_file;
|
||||
struct dentry *reject_start_file;
|
||||
struct dentry *reject_end_file;
|
||||
} dentries;
|
||||
|
||||
#endif
|
||||
};
|
||||
|
||||
#define FAULT_ATTR_INITIALIZER { \
|
||||
.interval = 1, \
|
||||
.times = ATOMIC_INIT(1), \
|
||||
.require_end = ULONG_MAX, \
|
||||
.stacktrace_depth = 32, \
|
||||
.verbose = 2, \
|
||||
}
|
||||
|
||||
#define DECLARE_FAULT_ATTR(name) struct fault_attr name = FAULT_ATTR_INITIALIZER
|
||||
int setup_fault_attr(struct fault_attr *attr, char *str);
|
||||
void should_fail_srandom(unsigned long entropy);
|
||||
bool should_fail(struct fault_attr *attr, ssize_t size);
|
||||
|
||||
#ifdef CONFIG_FAULT_INJECTION_DEBUG_FS
|
||||
|
||||
int init_fault_attr_dentries(struct fault_attr *attr, const char *name);
|
||||
void cleanup_fault_attr_dentries(struct fault_attr *attr);
|
||||
|
||||
#else /* CONFIG_FAULT_INJECTION_DEBUG_FS */
|
||||
|
||||
static inline int init_fault_attr_dentries(struct fault_attr *attr,
|
||||
const char *name)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline void cleanup_fault_attr_dentries(struct fault_attr *attr)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */
|
||||
|
||||
#endif /* CONFIG_FAULT_INJECTION */
|
||||
|
||||
#endif /* _LINUX_FAULT_INJECT_H */
|
||||
+7
-7
@@ -774,8 +774,8 @@ struct fb_info {
|
||||
#endif
|
||||
|
||||
struct fb_ops *fbops;
|
||||
struct device *device;
|
||||
struct class_device *class_device; /* sysfs per device attrs */
|
||||
struct device *device; /* This is the parent */
|
||||
struct device *dev; /* This is this fb device */
|
||||
int class_flag; /* private sysfs flags */
|
||||
#ifdef CONFIG_FB_TILEBLITTING
|
||||
struct fb_tile_ops *tileops; /* Tile Blitting */
|
||||
@@ -910,8 +910,8 @@ static inline void __fb_pad_aligned_buffer(u8 *dst, u32 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);
|
||||
extern int fb_init_class_device(struct fb_info *fb_info);
|
||||
extern void fb_cleanup_class_device(struct fb_info *head);
|
||||
extern int fb_init_device(struct fb_info *fb_info);
|
||||
extern void fb_cleanup_device(struct fb_info *head);
|
||||
extern void fb_bl_default_curve(struct fb_info *fb_info, u8 off, u8 min, u8 max);
|
||||
|
||||
/* drivers/video/fbmon.c */
|
||||
@@ -970,11 +970,11 @@ extern struct fb_videomode *fb_find_best_display(struct fb_monspecs *specs,
|
||||
/* drivers/video/fbcmap.c */
|
||||
extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp);
|
||||
extern void fb_dealloc_cmap(struct fb_cmap *cmap);
|
||||
extern int fb_copy_cmap(struct fb_cmap *from, struct fb_cmap *to);
|
||||
extern int fb_cmap_to_user(struct fb_cmap *from, struct fb_cmap_user *to);
|
||||
extern int fb_copy_cmap(const struct fb_cmap *from, struct fb_cmap *to);
|
||||
extern int fb_cmap_to_user(const struct fb_cmap *from, struct fb_cmap_user *to);
|
||||
extern int fb_set_cmap(struct fb_cmap *cmap, struct fb_info *fb_info);
|
||||
extern int fb_set_user_cmap(struct fb_cmap_user *cmap, struct fb_info *fb_info);
|
||||
extern struct fb_cmap *fb_default_cmap(int len);
|
||||
extern const struct fb_cmap *fb_default_cmap(int len);
|
||||
extern void fb_invert_cmaps(void);
|
||||
|
||||
struct fb_videomode {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
/* rule is permanent, and cannot be deleted */
|
||||
#define FIB_RULE_PERMANENT 1
|
||||
#define FIB_RULE_INVERT 2
|
||||
|
||||
struct fib_rule_hdr
|
||||
{
|
||||
@@ -34,7 +35,7 @@ enum
|
||||
FRA_UNUSED3,
|
||||
FRA_UNUSED4,
|
||||
FRA_UNUSED5,
|
||||
FRA_FWMARK, /* netfilter mark */
|
||||
FRA_FWMARK, /* mark */
|
||||
FRA_FLOW, /* flow/class id */
|
||||
FRA_UNUSED6,
|
||||
FRA_UNUSED7,
|
||||
|
||||
+5
-14
@@ -26,19 +26,12 @@ struct embedded_fd_set {
|
||||
unsigned long fds_bits[1];
|
||||
};
|
||||
|
||||
/*
|
||||
* More than this number of fds: we use a separately allocated fd_set
|
||||
*/
|
||||
#define EMBEDDED_FD_SET_SIZE (BITS_PER_BYTE * sizeof(struct embedded_fd_set))
|
||||
|
||||
struct fdtable {
|
||||
unsigned int max_fds;
|
||||
int max_fdset;
|
||||
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;
|
||||
};
|
||||
|
||||
@@ -64,6 +57,8 @@ struct files_struct {
|
||||
|
||||
#define files_fdtable(files) (rcu_dereference((files)->fdt))
|
||||
|
||||
extern struct kmem_cache *filp_cachep;
|
||||
|
||||
extern void FASTCALL(__fput(struct file *));
|
||||
extern void FASTCALL(fput(struct file *));
|
||||
|
||||
@@ -81,14 +76,8 @@ extern int get_unused_fd(void);
|
||||
extern void FASTCALL(put_unused_fd(unsigned int fd));
|
||||
struct kmem_cache;
|
||||
|
||||
extern struct file ** alloc_fd_array(int);
|
||||
extern void free_fd_array(struct file **, int);
|
||||
|
||||
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 free_fdtable_rcu(struct rcu_head *rcu);
|
||||
extern void __init files_defer_init(void);
|
||||
|
||||
static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd)
|
||||
@@ -114,4 +103,6 @@ struct files_struct *get_files_struct(struct task_struct *);
|
||||
void FASTCALL(put_files_struct(struct files_struct *fs));
|
||||
void reset_files_struct(struct task_struct *, struct files_struct *);
|
||||
|
||||
extern struct kmem_cache *files_cachep;
|
||||
|
||||
#endif /* __LINUX_FILE_H */
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
/* Freezer declarations */
|
||||
|
||||
#include <linux/sched.h>
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
/*
|
||||
* Check if a process has been frozen
|
||||
*/
|
||||
static inline int frozen(struct task_struct *p)
|
||||
{
|
||||
return p->flags & PF_FROZEN;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if there is a request to freeze a process
|
||||
*/
|
||||
static inline int freezing(struct task_struct *p)
|
||||
{
|
||||
return p->flags & PF_FREEZE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Request that a process be frozen
|
||||
* FIXME: SMP problem. We may not modify other process' flags!
|
||||
*/
|
||||
static inline void freeze(struct task_struct *p)
|
||||
{
|
||||
p->flags |= PF_FREEZE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Sometimes we may need to cancel the previous 'freeze' request
|
||||
*/
|
||||
static inline void do_not_freeze(struct task_struct *p)
|
||||
{
|
||||
p->flags &= ~PF_FREEZE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Wake up a frozen process
|
||||
*/
|
||||
static inline int thaw_process(struct task_struct *p)
|
||||
{
|
||||
if (frozen(p)) {
|
||||
p->flags &= ~PF_FROZEN;
|
||||
wake_up_process(p);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* freezing is complete, mark process as frozen
|
||||
*/
|
||||
static inline void frozen_process(struct task_struct *p)
|
||||
{
|
||||
p->flags = (p->flags & ~PF_FREEZE) | PF_FROZEN;
|
||||
}
|
||||
|
||||
extern void refrigerator(void);
|
||||
extern int freeze_processes(void);
|
||||
extern void thaw_processes(void);
|
||||
|
||||
static inline int try_to_freeze(void)
|
||||
{
|
||||
if (freezing(current)) {
|
||||
refrigerator();
|
||||
return 1;
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern void thaw_some_processes(int all);
|
||||
|
||||
#else
|
||||
static inline int frozen(struct task_struct *p) { return 0; }
|
||||
static inline int freezing(struct task_struct *p) { return 0; }
|
||||
static inline void freeze(struct task_struct *p) { BUG(); }
|
||||
static inline int thaw_process(struct task_struct *p) { return 1; }
|
||||
static inline void frozen_process(struct task_struct *p) { BUG(); }
|
||||
|
||||
static inline void refrigerator(void) {}
|
||||
static inline int freeze_processes(void) { BUG(); return 0; }
|
||||
static inline void thaw_processes(void) {}
|
||||
|
||||
static inline int try_to_freeze(void) { return 0; }
|
||||
|
||||
|
||||
#endif
|
||||
+36
-61
@@ -269,6 +269,7 @@ extern int dir_notify_enable;
|
||||
#include <linux/types.h>
|
||||
#include <linux/kdev_t.h>
|
||||
#include <linux/dcache.h>
|
||||
#include <linux/namei.h>
|
||||
#include <linux/stat.h>
|
||||
#include <linux/cache.h>
|
||||
#include <linux/kobject.h>
|
||||
@@ -276,7 +277,7 @@ extern int dir_notify_enable;
|
||||
#include <linux/radix-tree.h>
|
||||
#include <linux/prio_tree.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/pid.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
@@ -481,21 +482,6 @@ struct block_device {
|
||||
unsigned long bd_private;
|
||||
};
|
||||
|
||||
/*
|
||||
* bdev->bd_mutex nesting subclasses for the lock validator:
|
||||
*
|
||||
* 0: normal
|
||||
* 1: 'whole'
|
||||
* 2: 'partition'
|
||||
*/
|
||||
enum bdev_bd_mutex_lock_class
|
||||
{
|
||||
BD_MUTEX_NORMAL,
|
||||
BD_MUTEX_WHOLE,
|
||||
BD_MUTEX_PARTITION
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Radix-tree tags, for tagging dirty and writeback pages within the pagecache
|
||||
* radix trees
|
||||
@@ -543,19 +529,22 @@ struct inode {
|
||||
struct list_head i_dentry;
|
||||
unsigned long i_ino;
|
||||
atomic_t i_count;
|
||||
umode_t i_mode;
|
||||
unsigned int i_nlink;
|
||||
uid_t i_uid;
|
||||
gid_t i_gid;
|
||||
dev_t i_rdev;
|
||||
unsigned long i_version;
|
||||
loff_t i_size;
|
||||
#ifdef __NEED_I_SIZE_ORDERED
|
||||
seqcount_t i_size_seqcount;
|
||||
#endif
|
||||
struct timespec i_atime;
|
||||
struct timespec i_mtime;
|
||||
struct timespec i_ctime;
|
||||
unsigned int i_blkbits;
|
||||
unsigned long i_version;
|
||||
blkcnt_t i_blocks;
|
||||
unsigned short i_bytes;
|
||||
umode_t i_mode;
|
||||
spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */
|
||||
struct mutex i_mutex;
|
||||
struct rw_semaphore i_alloc_sem;
|
||||
@@ -598,9 +587,6 @@ struct inode {
|
||||
void *i_security;
|
||||
#endif
|
||||
void *i_private; /* fs or device private pointer */
|
||||
#ifdef __NEED_I_SIZE_ORDERED
|
||||
seqcount_t i_size_seqcount;
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -623,6 +609,9 @@ enum inode_i_mutex_lock_class
|
||||
I_MUTEX_QUOTA
|
||||
};
|
||||
|
||||
extern void inode_double_lock(struct inode *inode1, struct inode *inode2);
|
||||
extern void inode_double_unlock(struct inode *inode1, struct inode *inode2);
|
||||
|
||||
/*
|
||||
* NOTE: in a 32bit arch with a preemptable kernel and
|
||||
* an UP compile the i_size_read/write must be atomic
|
||||
@@ -633,7 +622,7 @@ enum inode_i_mutex_lock_class
|
||||
* cmpxchg8b without the need of the lock prefix). For SMP compiles
|
||||
* and 64bit archs it makes no difference if preempt is enabled or not.
|
||||
*/
|
||||
static inline loff_t i_size_read(struct inode *inode)
|
||||
static inline loff_t i_size_read(const struct inode *inode)
|
||||
{
|
||||
#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
|
||||
loff_t i_size;
|
||||
@@ -656,7 +645,11 @@ static inline loff_t i_size_read(struct inode *inode)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* NOTE: unlike i_size_read(), i_size_write() does need locking around it
|
||||
* (normally i_mutex), otherwise on 32bit/SMP an update of i_size_seqcount
|
||||
* can be lost, resulting in subsequent i_size_read() calls spinning forever.
|
||||
*/
|
||||
static inline void i_size_write(struct inode *inode, loff_t i_size)
|
||||
{
|
||||
#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
|
||||
@@ -672,12 +665,12 @@ static inline void i_size_write(struct inode *inode, loff_t i_size)
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline unsigned iminor(struct inode *inode)
|
||||
static inline unsigned iminor(const struct inode *inode)
|
||||
{
|
||||
return MINOR(inode->i_rdev);
|
||||
}
|
||||
|
||||
static inline unsigned imajor(struct inode *inode)
|
||||
static inline unsigned imajor(const struct inode *inode)
|
||||
{
|
||||
return MAJOR(inode->i_rdev);
|
||||
}
|
||||
@@ -719,8 +712,9 @@ struct file {
|
||||
struct list_head fu_list;
|
||||
struct rcu_head fu_rcuhead;
|
||||
} f_u;
|
||||
struct dentry *f_dentry;
|
||||
struct vfsmount *f_vfsmnt;
|
||||
struct path f_path;
|
||||
#define f_dentry f_path.dentry
|
||||
#define f_vfsmnt f_path.mnt
|
||||
const struct file_operations *f_op;
|
||||
atomic_t f_count;
|
||||
unsigned int f_flags;
|
||||
@@ -970,36 +964,13 @@ enum {
|
||||
#define vfs_check_frozen(sb, level) \
|
||||
wait_event((sb)->s_wait_unfrozen, ((sb)->s_frozen < (level)))
|
||||
|
||||
static inline void get_fs_excl(void)
|
||||
{
|
||||
atomic_inc(¤t->fs_excl);
|
||||
}
|
||||
#define get_fs_excl() atomic_inc(¤t->fs_excl)
|
||||
#define put_fs_excl() atomic_dec(¤t->fs_excl)
|
||||
#define has_fs_excl() atomic_read(¤t->fs_excl)
|
||||
|
||||
static inline void put_fs_excl(void)
|
||||
{
|
||||
atomic_dec(¤t->fs_excl);
|
||||
}
|
||||
|
||||
static inline int has_fs_excl(void)
|
||||
{
|
||||
return atomic_read(¤t->fs_excl);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Superblock locking.
|
||||
*/
|
||||
static inline void lock_super(struct super_block * sb)
|
||||
{
|
||||
get_fs_excl();
|
||||
mutex_lock(&sb->s_lock);
|
||||
}
|
||||
|
||||
static inline void unlock_super(struct super_block * sb)
|
||||
{
|
||||
put_fs_excl();
|
||||
mutex_unlock(&sb->s_lock);
|
||||
}
|
||||
/* not quite ready to be deprecated, but... */
|
||||
extern void lock_super(struct super_block *);
|
||||
extern void unlock_super(struct super_block *);
|
||||
|
||||
/*
|
||||
* VFS helper functions..
|
||||
@@ -1255,7 +1226,7 @@ extern void touch_atime(struct vfsmount *mnt, struct dentry *dentry);
|
||||
static inline void file_accessed(struct file *file)
|
||||
{
|
||||
if (!(file->f_flags & O_NOATIME))
|
||||
touch_atime(file->f_vfsmnt, file->f_dentry);
|
||||
touch_atime(file->f_path.mnt, file->f_path.dentry);
|
||||
}
|
||||
|
||||
int sync_inode(struct inode *inode, struct writeback_control *wbc);
|
||||
@@ -1497,7 +1468,9 @@ extern char * getname(const char __user *);
|
||||
extern void __init vfs_caches_init_early(void);
|
||||
extern void __init vfs_caches_init(unsigned long);
|
||||
|
||||
#define __getname() kmem_cache_alloc(names_cachep, SLAB_KERNEL)
|
||||
extern struct kmem_cache *names_cachep;
|
||||
|
||||
#define __getname() kmem_cache_alloc(names_cachep, GFP_KERNEL)
|
||||
#define __putname(name) kmem_cache_free(names_cachep, (void *)(name))
|
||||
#ifndef CONFIG_AUDITSYSCALL
|
||||
#define putname(name) __putname(name)
|
||||
@@ -1513,7 +1486,6 @@ extern void bd_set_size(struct block_device *, loff_t size);
|
||||
extern void bd_forget(struct inode *inode);
|
||||
extern void bdput(struct block_device *);
|
||||
extern struct block_device *open_by_devnum(dev_t, unsigned);
|
||||
extern struct block_device *open_partition_by_devnum(dev_t, unsigned);
|
||||
extern const struct address_space_operations def_blk_aops;
|
||||
#else
|
||||
static inline void bd_forget(struct inode *inode) {}
|
||||
@@ -1531,7 +1503,6 @@ extern int blkdev_driver_ioctl(struct inode *inode, struct file *file,
|
||||
extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long);
|
||||
extern int blkdev_get(struct block_device *, mode_t, unsigned);
|
||||
extern int blkdev_put(struct block_device *);
|
||||
extern int blkdev_put_partition(struct block_device *);
|
||||
extern int bd_claim(struct block_device *, void *);
|
||||
extern void bd_release(struct block_device *);
|
||||
#ifdef CONFIG_SYSFS
|
||||
@@ -1646,7 +1617,7 @@ static inline void put_write_access(struct inode * inode)
|
||||
static inline void allow_write_access(struct file *file)
|
||||
{
|
||||
if (file)
|
||||
atomic_inc(&file->f_dentry->d_inode->i_writecount);
|
||||
atomic_inc(&file->f_path.dentry->d_inode->i_writecount);
|
||||
}
|
||||
extern int do_pipe(int *);
|
||||
extern struct file *create_read_pipe(struct file *f);
|
||||
@@ -1705,6 +1676,8 @@ extern void __iget(struct inode * inode);
|
||||
extern void clear_inode(struct inode *);
|
||||
extern void destroy_inode(struct inode *);
|
||||
extern struct inode *new_inode(struct super_block *);
|
||||
extern int __remove_suid(struct dentry *, int);
|
||||
extern int should_remove_suid(struct dentry *);
|
||||
extern int remove_suid(struct dentry *);
|
||||
extern void remove_dquot_ref(struct super_block *, int, struct list_head *);
|
||||
|
||||
@@ -1751,6 +1724,8 @@ extern ssize_t generic_file_splice_read(struct file *, loff_t *,
|
||||
struct pipe_inode_info *, size_t, unsigned int);
|
||||
extern ssize_t generic_file_splice_write(struct pipe_inode_info *,
|
||||
struct file *, loff_t *, size_t, unsigned int);
|
||||
extern ssize_t generic_file_splice_write_nolock(struct pipe_inode_info *,
|
||||
struct file *, loff_t *, size_t, unsigned int);
|
||||
extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe,
|
||||
struct file *out, loff_t *, size_t len, unsigned int flags);
|
||||
extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
#ifndef _LINUX_FS_STACK_H
|
||||
#define _LINUX_FS_STACK_H
|
||||
|
||||
/* This file defines generic functions used primarily by stackable
|
||||
* filesystems; none of these functions require i_mutex to be held.
|
||||
*/
|
||||
|
||||
#include <linux/fs.h>
|
||||
|
||||
/* externs for fs/stack.c */
|
||||
extern void fsstack_copy_attr_all(struct inode *dest, const struct inode *src,
|
||||
int (*get_nlinks)(struct inode *));
|
||||
|
||||
extern void fsstack_copy_inode_size(struct inode *dst, const struct inode *src);
|
||||
|
||||
/* inlines */
|
||||
static inline void fsstack_copy_attr_atime(struct inode *dest,
|
||||
const struct inode *src)
|
||||
{
|
||||
dest->i_atime = src->i_atime;
|
||||
}
|
||||
|
||||
static inline void fsstack_copy_attr_times(struct inode *dest,
|
||||
const struct inode *src)
|
||||
{
|
||||
dest->i_atime = src->i_atime;
|
||||
dest->i_mtime = src->i_mtime;
|
||||
dest->i_ctime = src->i_ctime;
|
||||
}
|
||||
|
||||
#endif /* _LINUX_FS_STACK_H */
|
||||
@@ -18,6 +18,8 @@ struct fs_struct {
|
||||
.umask = 0022, \
|
||||
}
|
||||
|
||||
extern struct kmem_cache *fs_cachep;
|
||||
|
||||
extern void exit_fs(struct task_struct *);
|
||||
extern void set_fs_altroot(void);
|
||||
extern void set_fs_root(struct fs_struct *, struct vfsmount *, struct dentry *);
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#define _FSL_DEVICE_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/phy.h>
|
||||
|
||||
/*
|
||||
* Some conventions on how we handle peripherals on Freescale chips
|
||||
|
||||
@@ -164,7 +164,7 @@ static inline void fsnotify_open(struct dentry *dentry)
|
||||
*/
|
||||
static inline void fsnotify_close(struct file *file)
|
||||
{
|
||||
struct dentry *dentry = file->f_dentry;
|
||||
struct dentry *dentry = file->f_path.dentry;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
const char *name = dentry->d_name.name;
|
||||
mode_t mode = file->f_mode;
|
||||
|
||||
@@ -1,122 +0,0 @@
|
||||
#ifndef _FTAPE_HEADER_SEGMENT_H
|
||||
#define _FTAPE_HEADER_SEGMENT_H
|
||||
|
||||
/*
|
||||
* Copyright (C) 1996-1997 Claus-Justus Heine.
|
||||
|
||||
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, 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; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*
|
||||
* $Source: /homes/cvs/ftape-stacked/include/linux/ftape-header-segment.h,v $
|
||||
* $Revision: 1.2 $
|
||||
* $Date: 1997/10/05 19:19:28 $
|
||||
*
|
||||
* This file defines some offsets into the header segment of a
|
||||
* floppy tape cartridge. For use with the QIC-40/80/3010/3020
|
||||
* floppy-tape driver "ftape" for Linux.
|
||||
*/
|
||||
|
||||
#define FT_SIGNATURE 0 /* must be 0xaa55aa55 */
|
||||
#define FT_FMT_CODE 4
|
||||
#define FT_REV_LEVEL 5 /* only for QIC-80 since. Rev. L (== 0x0c) */
|
||||
#define FT_HSEG_1 6 /* first header segment, except for format code 6 */
|
||||
#define FT_HSEG_2 8 /* second header segment, except for format code 6 */
|
||||
#define FT_FRST_SEG 10 /* first data segment, except for format code 6 */
|
||||
#define FT_LAST_SEG 12 /* last data segment, except for format code 6 */
|
||||
#define FT_FMT_DATE 14 /* date and time of most recent format, see below */
|
||||
#define FT_WR_DATE 18 /* date and time of most recent write or format */
|
||||
#define FT_SPT 24 /* segments per track */
|
||||
#define FT_TPC 26 /* tracks per cartridge */
|
||||
#define FT_FHM 27 /* floppy drive head (maximum of it) */
|
||||
#define FT_FTM 28 /* floppy track max. */
|
||||
#define FT_FSM 29 /* floppy sector max. (128) */
|
||||
#define FT_LABEL 30 /* floppy tape label */
|
||||
#define FT_LABEL_DATE 74 /* date and time the tape label was written */
|
||||
#define FT_LABEL_SZ (FT_LABEL_DATE - FT_LABEL)
|
||||
#define FT_CMAP_START 78 /* starting segment of compression map */
|
||||
#define FT_FMT_ERROR 128 /* must be set to 0xff if remainder gets lost during
|
||||
* tape format
|
||||
*/
|
||||
#define FT_SEG_CNT 130 /* number of seg. written, formatted or verified
|
||||
* through lifetime of tape (why not read?)
|
||||
*/
|
||||
#define FT_INIT_DATE 138 /* date and time of initial tape format */
|
||||
#define FT_FMT_CNT 142 /* number of times tape has been formatted */
|
||||
#define FT_FSL_CNT 144 /* number of segments in failed sector log */
|
||||
#define FT_MK_CODE 146 /* id string of tape manufacturer */
|
||||
#define FT_LOT_CODE 190 /* tape manufacturer lot code */
|
||||
#define FT_6_HSEG_1 234 /* first header segment for format code 6 */
|
||||
#define FT_6_HSEG_2 238 /* second header segment for format code 6 */
|
||||
#define FT_6_FRST_SEG 242 /* first data segment for format code 6 */
|
||||
#define FT_6_LAST_SEG 246 /* last data segment for format code 6 */
|
||||
|
||||
#define FT_FSL 256
|
||||
#define FT_HEADER_END 256 /* space beyond this point:
|
||||
* format codes 2, 3 and 5:
|
||||
* - failed sector log until byte 2047
|
||||
* - bad sector map in the reamining part of segment
|
||||
* format codes 4 and 6:
|
||||
* - bad sector map starts hear
|
||||
*/
|
||||
|
||||
|
||||
/* value to be stored at the FT_SIGNATURE offset
|
||||
*/
|
||||
#define FT_HSEG_MAGIC 0xaa55aa55
|
||||
#define FT_D2G_MAGIC 0x82288228 /* Ditto 2GB */
|
||||
|
||||
/* data and time encoding: */
|
||||
#define FT_YEAR_SHIFT 25
|
||||
#define FT_YEAR_MASK 0xfe000000
|
||||
#define FT_YEAR_0 1970
|
||||
#define FT_YEAR_MAX 127
|
||||
#define FT_YEAR(year) ((((year)-FT_YEAR_0)<<FT_YEAR_SHIFT)&FT_YEAR_MASK)
|
||||
|
||||
#define FT_TIME_SHIFT 0
|
||||
#define FT_TIME_MASK 0x01FFFFFF
|
||||
#define FT_TIME_MAX 0x01ea6dff /* last second of a year */
|
||||
#define FT_TIME(mo,d,h,m,s) \
|
||||
((((s)+60*((m)+60*((h)+24*((d)+31*(mo))))) & FT_TIME_MASK))
|
||||
|
||||
#define FT_TIME_STAMP(y,mo,d,h,m,s) (FT_YEAR(y) | FT_TIME(mo,d,h,m,s))
|
||||
|
||||
/* values for the format code field */
|
||||
typedef enum {
|
||||
fmt_normal = 2, /* QIC-80 post Rev. B 205Ft or 307Ft tape */
|
||||
fmt_1100ft = 3, /* QIC-80 post Rev. B 1100Ft tape */
|
||||
fmt_var = 4, /* QIC-80 post Rev. B variabel length format */
|
||||
fmt_425ft = 5, /* QIC-80 post Rev. B 425Ft tape */
|
||||
fmt_big = 6 /* QIC-3010/3020 variable length tape with more
|
||||
* than 2^16 segments per tape
|
||||
*/
|
||||
} ft_format_type;
|
||||
|
||||
/* definitions for the failed sector log */
|
||||
#define FT_FSL_SIZE (2 * FT_SECTOR_SIZE - FT_HEADER_END)
|
||||
#define FT_FSL_MAX_ENTRIES (FT_FSL_SIZE/sizeof(__u32))
|
||||
|
||||
typedef struct ft_fsl_entry {
|
||||
__u16 segment;
|
||||
__u16 date;
|
||||
} __attribute__ ((packed)) ft_fsl_entry;
|
||||
|
||||
|
||||
/* date encoding for the failed sector log
|
||||
* month: 1..12, day: 1..31, year: 1970..2097
|
||||
*/
|
||||
#define FT_FSL_TIME_STAMP(y,m,d) \
|
||||
(((((y) - FT_YEAR_0)<<9)&0xfe00) | (((m)<<5)&0x01e0) | ((d)&0x001f))
|
||||
|
||||
#endif /* _FTAPE_HEADER_SEGMENT_H */
|
||||
@@ -1,137 +0,0 @@
|
||||
#ifndef _FTAPE_VENDORS_H
|
||||
#define _FTAPE_VENDORS_H
|
||||
|
||||
/*
|
||||
* Copyright (C) 1993-1996 Bas Laarhoven,
|
||||
* (C) 1996-1997 Claus-Justus Heine.
|
||||
|
||||
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, 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; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*
|
||||
* $Source: /homes/cvs/ftape-stacked/include/linux/ftape-vendors.h,v $
|
||||
* $Revision: 1.6 $
|
||||
* $Date: 1997/10/09 15:38:11 $
|
||||
*
|
||||
* This file contains the supported drive types with their
|
||||
* QIC-117 spec. vendor code and drive dependent configuration
|
||||
* information.
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
unknown_wake_up = 0,
|
||||
no_wake_up,
|
||||
wake_up_colorado,
|
||||
wake_up_mountain,
|
||||
wake_up_insight,
|
||||
} wake_up_types;
|
||||
|
||||
typedef struct {
|
||||
wake_up_types wake_up; /* see wake_up_types */
|
||||
char *name; /* Text describing the drive */
|
||||
} wakeup_method;
|
||||
|
||||
/* Note: order of entries in WAKEUP_METHODS must be so that a variable
|
||||
* of type wake_up_types can be used as an index in the array.
|
||||
*/
|
||||
#define WAKEUP_METHODS { \
|
||||
{ unknown_wake_up, "Unknown" }, \
|
||||
{ no_wake_up, "None" }, \
|
||||
{ wake_up_colorado, "Colorado" }, \
|
||||
{ wake_up_mountain, "Mountain" }, \
|
||||
{ wake_up_insight, "Motor-on" }, \
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
unsigned int vendor_id; /* vendor id from drive */
|
||||
int speed; /* maximum tape transport speed (ips) */
|
||||
wake_up_types wake_up; /* see wake_up_types */
|
||||
char *name; /* Text describing the drive */
|
||||
} vendor_struct;
|
||||
|
||||
#define UNKNOWN_VENDOR (-1)
|
||||
|
||||
#define QIC117_VENDORS { \
|
||||
/* see _vendor_struct */ \
|
||||
{ 0x00000, 82, wake_up_colorado, "Colorado DJ-10 (old)" }, \
|
||||
{ 0x00047, 90, wake_up_colorado, "Colorado DJ-10/DJ-20" }, \
|
||||
{ 0x011c2, 84, wake_up_colorado, "Colorado 700" }, \
|
||||
{ 0x011c3, 90, wake_up_colorado, "Colorado 1400" }, \
|
||||
{ 0x011c4, 84, wake_up_colorado, "Colorado DJ-10/DJ-20 (new)" }, \
|
||||
{ 0x011c5, 84, wake_up_colorado, "HP Colorado T1000" }, \
|
||||
{ 0x011c6, 90, wake_up_colorado, "HP Colorado T3000" }, \
|
||||
{ 0x00005, 45, wake_up_mountain, "Archive 5580i" }, \
|
||||
{ 0x10005, 50, wake_up_insight, "Insight 80Mb, Irwin 80SX" }, \
|
||||
{ 0x00140, 74, wake_up_mountain, "Archive S.Hornet [Identity/Escom]" }, \
|
||||
{ 0x00146, 72, wake_up_mountain, "Archive 31250Q [Escom]" }, \
|
||||
{ 0x0014a, 100, wake_up_mountain, "Archive XL9250i [Conner/Escom]" }, \
|
||||
{ 0x0014c, 98, wake_up_mountain, "Conner C250MQT" }, \
|
||||
{ 0x0014e, 80, wake_up_mountain, "Conner C250MQ" }, \
|
||||
{ 0x00150, 80, wake_up_mountain, "Conner TSM420R/TST800R" }, \
|
||||
{ 0x00152, 80, wake_up_mountain, "Conner TSM850R" }, \
|
||||
{ 0x00156, 80, wake_up_mountain, "Conner TSM850R/1700R/TST3200R" }, \
|
||||
{ 0x00180, 0, wake_up_mountain, "Summit SE 150" }, \
|
||||
{ 0x00181, 85, wake_up_mountain, "Summit SE 250, Mountain FS8000" }, \
|
||||
{ 0x001c1, 82, no_wake_up, "Wangtek 3040F" }, \
|
||||
{ 0x001c8, 64, no_wake_up, "Wangtek 3080F" }, \
|
||||
{ 0x001c8, 64, wake_up_colorado, "Wangtek 3080F" }, \
|
||||
{ 0x001ca, 67, no_wake_up, "Wangtek 3080F (new)" }, \
|
||||
{ 0x001cc, 77, wake_up_colorado, "Wangtek 3200 / Teac 700" }, \
|
||||
{ 0x001cd, 75, wake_up_colorado, "Reveal TB1400" }, \
|
||||
{ 0x00380, 85, wake_up_colorado, "Exabyte Eagle-96" }, \
|
||||
{ 0x00381, 85, wake_up_colorado, "Exabyte Eagle TR-3" }, \
|
||||
{ 0x00382, 85, wake_up_colorado, "Exabyte Eagle TR-3" }, \
|
||||
{ 0x003ce, 77, wake_up_colorado, "Teac 800" }, \
|
||||
{ 0x003cf, 0, wake_up_colorado, "Teac FT3010TR" }, \
|
||||
{ 0x08880, 64, no_wake_up, "Iomega 250, Ditto 800" }, \
|
||||
{ 0x08880, 64, wake_up_colorado, "Iomega 250, Ditto 800" }, \
|
||||
{ 0x08880, 64, wake_up_insight, "Iomega 250, Ditto 800" }, \
|
||||
{ 0x08881, 80, wake_up_colorado, "Iomega 700" }, \
|
||||
{ 0x08882, 80, wake_up_colorado, "Iomega 3200" }, \
|
||||
{ 0x08883, 80, wake_up_colorado, "Iomega DITTO 2GB" }, \
|
||||
{ 0x00021, 70, no_wake_up, "AIWA CT-803" }, \
|
||||
{ 0x004c0, 80, no_wake_up, "AIWA TD-S1600" }, \
|
||||
{ 0x00021, 0, wake_up_mountain, "COREtape QIC80" }, \
|
||||
{ 0x00441, 0, wake_up_mountain, "ComByte DoublePlay" }, \
|
||||
{ 0x00481, 127, wake_up_mountain, "PERTEC MyTape 800" }, \
|
||||
{ 0x00483, 130, wake_up_mountain, "PERTEC MyTape 3200" }, \
|
||||
{ UNKNOWN_VENDOR, 0, no_wake_up, "unknown" } \
|
||||
}
|
||||
|
||||
#define QIC117_MAKE_CODES { \
|
||||
{ 0, "Unassigned" }, \
|
||||
{ 1, "Alloy Computer Products" }, \
|
||||
{ 2, "3M" }, \
|
||||
{ 3, "Tandberg Data" }, \
|
||||
{ 4, "Colorado" }, \
|
||||
{ 5, "Archive/Conner" }, \
|
||||
{ 6, "Mountain/Summit Memory Systems" }, \
|
||||
{ 7, "Wangtek/Rexon/Tecmar" }, \
|
||||
{ 8, "Sony" }, \
|
||||
{ 9, "Cipher Data Products" }, \
|
||||
{ 10, "Irwin Magnetic Systems" }, \
|
||||
{ 11, "Braemar" }, \
|
||||
{ 12, "Verbatim" }, \
|
||||
{ 13, "Core International" }, \
|
||||
{ 14, "Exabyte" }, \
|
||||
{ 15, "Teac" }, \
|
||||
{ 16, "Gigatek" }, \
|
||||
{ 17, "ComByte" }, \
|
||||
{ 18, "PERTEC Memories" }, \
|
||||
{ 19, "Aiwa" }, \
|
||||
{ 71, "Colorado" }, \
|
||||
{ 546, "Iomega Inc" }, \
|
||||
}
|
||||
|
||||
#endif /* _FTAPE_VENDORS_H */
|
||||
@@ -1,201 +0,0 @@
|
||||
#ifndef _FTAPE_H
|
||||
#define _FTAPE_H
|
||||
|
||||
/*
|
||||
* Copyright (C) 1994-1996 Bas Laarhoven,
|
||||
* (C) 1996-1997 Claus-Justus Heine.
|
||||
|
||||
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, 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; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*
|
||||
* $Source: /homes/cvs/ftape-stacked/include/linux/ftape.h,v $
|
||||
* $Revision: 1.17.6.4 $
|
||||
* $Date: 1997/11/25 01:52:54 $
|
||||
*
|
||||
* This file contains global definitions, typedefs and macro's
|
||||
* for the QIC-40/80/3010/3020 floppy-tape driver for Linux.
|
||||
*/
|
||||
|
||||
#define FTAPE_VERSION "ftape v3.04d 25/11/97"
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/mm.h>
|
||||
#endif
|
||||
#include <linux/types.h>
|
||||
#include <linux/mtio.h>
|
||||
|
||||
#define FT_SECTOR(x) (x+1) /* sector offset into real sector */
|
||||
#define FT_SECTOR_SIZE 1024
|
||||
#define FT_SECTORS_PER_SEGMENT 32
|
||||
#define FT_ECC_SECTORS 3
|
||||
#define FT_SEGMENT_SIZE ((FT_SECTORS_PER_SEGMENT - FT_ECC_SECTORS) * FT_SECTOR_SIZE)
|
||||
#define FT_BUFF_SIZE (FT_SECTORS_PER_SEGMENT * FT_SECTOR_SIZE)
|
||||
|
||||
/*
|
||||
* bits of the minor device number that define drive selection
|
||||
* methods. Could be used one day to access multiple tape
|
||||
* drives on the same controller.
|
||||
*/
|
||||
#define FTAPE_SEL_A 0
|
||||
#define FTAPE_SEL_B 1
|
||||
#define FTAPE_SEL_C 2
|
||||
#define FTAPE_SEL_D 3
|
||||
#define FTAPE_SEL_MASK 3
|
||||
#define FTAPE_SEL(unit) ((unit) & FTAPE_SEL_MASK)
|
||||
#define FTAPE_NO_REWIND 4 /* mask for minor nr */
|
||||
|
||||
/* the following two may be reported when MTIOCGET is requested ... */
|
||||
typedef union {
|
||||
struct {
|
||||
__u8 error;
|
||||
__u8 command;
|
||||
} error;
|
||||
long space;
|
||||
} ft_drive_error;
|
||||
typedef union {
|
||||
struct {
|
||||
__u8 drive_status;
|
||||
__u8 drive_config;
|
||||
__u8 tape_status;
|
||||
} status;
|
||||
long space;
|
||||
} ft_drive_status;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define FT_RQM_DELAY 12
|
||||
#define FT_MILLISECOND 1
|
||||
#define FT_SECOND 1000
|
||||
#define FT_FOREVER -1
|
||||
#ifndef HZ
|
||||
#error "HZ undefined."
|
||||
#endif
|
||||
#define FT_USPT (1000000/HZ) /* microseconds per tick */
|
||||
|
||||
/* This defines the number of retries that the driver will allow
|
||||
* before giving up (and letting a higher level handle the error).
|
||||
*/
|
||||
#ifdef TESTING
|
||||
#define FT_SOFT_RETRIES 1 /* number of low level retries */
|
||||
#define FT_RETRIES_ON_ECC_ERROR 3 /* ecc error when correcting segment */
|
||||
#else
|
||||
#define FT_SOFT_RETRIES 6 /* number of low level retries (triple) */
|
||||
#define FT_RETRIES_ON_ECC_ERROR 3 /* ecc error when correcting segment */
|
||||
#endif
|
||||
|
||||
#ifndef THE_FTAPE_MAINTAINER
|
||||
#define THE_FTAPE_MAINTAINER "the ftape maintainer"
|
||||
#endif
|
||||
|
||||
/* Initialize missing configuration parameters.
|
||||
*/
|
||||
#ifndef CONFIG_FT_NR_BUFFERS
|
||||
# define CONFIG_FT_NR_BUFFERS 3
|
||||
#endif
|
||||
#ifndef CONFIG_FT_FDC_THR
|
||||
# define CONFIG_FT_FDC_THR 8
|
||||
#endif
|
||||
#ifndef CONFIG_FT_FDC_MAX_RATE
|
||||
# define CONFIG_FT_FDC_MAX_RATE 2000
|
||||
#endif
|
||||
#ifndef CONFIG_FT_FDC_BASE
|
||||
# define CONFIG_FT_FDC_BASE 0
|
||||
#endif
|
||||
#ifndef CONFIG_FT_FDC_IRQ
|
||||
# define CONFIG_FT_FDC_IRQ 0
|
||||
#endif
|
||||
#ifndef CONFIG_FT_FDC_DMA
|
||||
# define CONFIG_FT_FDC_DMA 0
|
||||
#endif
|
||||
|
||||
/* Turn some booleans into numbers.
|
||||
*/
|
||||
#ifdef CONFIG_FT_PROBE_FC10
|
||||
# undef CONFIG_FT_PROBE_FC10
|
||||
# define CONFIG_FT_PROBE_FC10 1
|
||||
#else
|
||||
# define CONFIG_FT_PROBE_FC10 0
|
||||
#endif
|
||||
#ifdef CONFIG_FT_MACH2
|
||||
# undef CONFIG_FT_MACH2
|
||||
# define CONFIG_FT_MACH2 1
|
||||
#else
|
||||
# define CONFIG_FT_MACH2 0
|
||||
#endif
|
||||
|
||||
/* Insert default settings
|
||||
*/
|
||||
#if CONFIG_FT_PROBE_FC10 == 1
|
||||
# if CONFIG_FT_FDC_BASE == 0
|
||||
# undef CONFIG_FT_FDC_BASE
|
||||
# define CONFIG_FT_FDC_BASE 0x180
|
||||
# endif
|
||||
# if CONFIG_FT_FDC_IRQ == 0
|
||||
# undef CONFIG_FT_FDC_IRQ
|
||||
# define CONFIG_FT_FDC_IRQ 9
|
||||
# endif
|
||||
# if CONFIG_FT_FDC_DMA == 0
|
||||
# undef CONFIG_FT_FDC_DMA
|
||||
# define CONFIG_FT_FDC_DMA 3
|
||||
# endif
|
||||
#elif CONFIG_FT_MACH2 == 1 /* CONFIG_FT_PROBE_FC10 == 1 */
|
||||
# if CONFIG_FT_FDC_BASE == 0
|
||||
# undef CONFIG_FT_FDC_BASE
|
||||
# define CONFIG_FT_FDC_BASE 0x1E0
|
||||
# endif
|
||||
# if CONFIG_FT_FDC_IRQ == 0
|
||||
# undef CONFIG_FT_FDC_IRQ
|
||||
# define CONFIG_FT_FDC_IRQ 6
|
||||
# endif
|
||||
# if CONFIG_FT_FDC_DMA == 0
|
||||
# undef CONFIG_FT_FDC_DMA
|
||||
# define CONFIG_FT_FDC_DMA 2
|
||||
# endif
|
||||
#elif defined(CONFIG_FT_ALT_FDC) /* CONFIG_FT_MACH2 */
|
||||
# if CONFIG_FT_FDC_BASE == 0
|
||||
# undef CONFIG_FT_FDC_BASE
|
||||
# define CONFIG_FT_FDC_BASE 0x370
|
||||
# endif
|
||||
# if CONFIG_FT_FDC_IRQ == 0
|
||||
# undef CONFIG_FT_FDC_IRQ
|
||||
# define CONFIG_FT_FDC_IRQ 6
|
||||
# endif
|
||||
# if CONFIG_FT_FDC_DMA == 0
|
||||
# undef CONFIG_FT_FDC_DMA
|
||||
# define CONFIG_FT_FDC_DMA 2
|
||||
# endif
|
||||
#else /* CONFIG_FT_ALT_FDC */
|
||||
# if CONFIG_FT_FDC_BASE == 0
|
||||
# undef CONFIG_FT_FDC_BASE
|
||||
# define CONFIG_FT_FDC_BASE 0x3f0
|
||||
# endif
|
||||
# if CONFIG_FT_FDC_IRQ == 0
|
||||
# undef CONFIG_FT_FDC_IRQ
|
||||
# define CONFIG_FT_FDC_IRQ 6
|
||||
# endif
|
||||
# if CONFIG_FT_FDC_DMA == 0
|
||||
# undef CONFIG_FT_FDC_DMA
|
||||
# define CONFIG_FT_FDC_DMA 2
|
||||
# endif
|
||||
#endif /* standard FDC */
|
||||
|
||||
/* some useful macro's
|
||||
*/
|
||||
#define NR_ITEMS(x) (int)(sizeof(x)/ sizeof(*x))
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif
|
||||
+21
-3
@@ -15,7 +15,7 @@
|
||||
#define FUSE_KERNEL_VERSION 7
|
||||
|
||||
/** Minor version number of this interface */
|
||||
#define FUSE_KERNEL_MINOR_VERSION 7
|
||||
#define FUSE_KERNEL_MINOR_VERSION 8
|
||||
|
||||
/** The node ID of the root inode */
|
||||
#define FUSE_ROOT_ID 1
|
||||
@@ -92,6 +92,11 @@ struct fuse_file_lock {
|
||||
#define FUSE_ASYNC_READ (1 << 0)
|
||||
#define FUSE_POSIX_LOCKS (1 << 1)
|
||||
|
||||
/**
|
||||
* Release flags
|
||||
*/
|
||||
#define FUSE_RELEASE_FLUSH (1 << 0)
|
||||
|
||||
enum fuse_opcode {
|
||||
FUSE_LOOKUP = 1,
|
||||
FUSE_FORGET = 2, /* no reply */
|
||||
@@ -127,6 +132,8 @@ enum fuse_opcode {
|
||||
FUSE_ACCESS = 34,
|
||||
FUSE_CREATE = 35,
|
||||
FUSE_INTERRUPT = 36,
|
||||
FUSE_BMAP = 37,
|
||||
FUSE_DESTROY = 38,
|
||||
};
|
||||
|
||||
/* The read buffer is required to be at least 8k, but may be much larger */
|
||||
@@ -205,12 +212,13 @@ struct fuse_open_out {
|
||||
struct fuse_release_in {
|
||||
__u64 fh;
|
||||
__u32 flags;
|
||||
__u32 padding;
|
||||
__u32 release_flags;
|
||||
__u64 lock_owner;
|
||||
};
|
||||
|
||||
struct fuse_flush_in {
|
||||
__u64 fh;
|
||||
__u32 flush_flags;
|
||||
__u32 unused;
|
||||
__u32 padding;
|
||||
__u64 lock_owner;
|
||||
};
|
||||
@@ -296,6 +304,16 @@ struct fuse_interrupt_in {
|
||||
__u64 unique;
|
||||
};
|
||||
|
||||
struct fuse_bmap_in {
|
||||
__u64 block;
|
||||
__u32 blocksize;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_bmap_out {
|
||||
__u64 block;
|
||||
};
|
||||
|
||||
struct fuse_in_header {
|
||||
__u32 len;
|
||||
__u32 opcode;
|
||||
|
||||
@@ -93,6 +93,7 @@ struct robust_list_head {
|
||||
*/
|
||||
#define ROBUST_LIST_LIMIT 2048
|
||||
|
||||
#ifdef __KERNEL__
|
||||
long do_futex(u32 __user *uaddr, int op, u32 val, unsigned long timeout,
|
||||
u32 __user *uaddr2, u32 val2, u32 val3);
|
||||
|
||||
@@ -110,6 +111,7 @@ static inline void exit_pi_state_list(struct task_struct *curr)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#define FUTEX_OP_SET 0 /* *(int *)UADDR2 = OPARG; */
|
||||
#define FUTEX_OP_ADD 1 /* *(int *)UADDR2 += OPARG; */
|
||||
|
||||
@@ -91,7 +91,7 @@ void gs_hangup(struct tty_struct *tty);
|
||||
int gs_block_til_ready(void *port, struct file *filp);
|
||||
void gs_close(struct tty_struct *tty, struct file *filp);
|
||||
void gs_set_termios (struct tty_struct * tty,
|
||||
struct termios * old_termios);
|
||||
struct ktermios * old_termios);
|
||||
int gs_init_port(struct gs_port *port);
|
||||
int gs_setserial(struct gs_port *port, struct serial_struct __user *sp);
|
||||
int gs_getserial(struct gs_port *port, struct serial_struct __user *sp);
|
||||
|
||||
@@ -17,6 +17,9 @@ struct genlmsghdr {
|
||||
#define GENL_HDRLEN NLMSG_ALIGN(sizeof(struct genlmsghdr))
|
||||
|
||||
#define GENL_ADMIN_PERM 0x01
|
||||
#define GENL_CMD_CAP_DO 0x02
|
||||
#define GENL_CMD_CAP_DUMP 0x04
|
||||
#define GENL_CMD_CAP_HASPOL 0x08
|
||||
|
||||
/*
|
||||
* List of reserved static generic netlink identifiers:
|
||||
@@ -58,9 +61,6 @@ enum {
|
||||
CTRL_ATTR_OP_UNSPEC,
|
||||
CTRL_ATTR_OP_ID,
|
||||
CTRL_ATTR_OP_FLAGS,
|
||||
CTRL_ATTR_OP_POLICY,
|
||||
CTRL_ATTR_OP_DOIT,
|
||||
CTRL_ATTR_OP_DUMPIT,
|
||||
__CTRL_ATTR_OP_MAX,
|
||||
};
|
||||
|
||||
|
||||
@@ -83,6 +83,9 @@ struct hd_struct {
|
||||
struct kobject *holder_dir;
|
||||
unsigned ios[2], sectors[2]; /* READs and WRITEs */
|
||||
int policy, partno;
|
||||
#ifdef CONFIG_FAIL_MAKE_REQUEST
|
||||
int make_it_fail;
|
||||
#endif
|
||||
};
|
||||
|
||||
#define GENHD_FL_REMOVABLE 1
|
||||
@@ -90,6 +93,7 @@ struct hd_struct {
|
||||
#define GENHD_FL_CD 8
|
||||
#define GENHD_FL_UP 16
|
||||
#define GENHD_FL_SUPPRESS_PARTITION_INFO 32
|
||||
#define GENHD_FL_FAIL 64
|
||||
|
||||
struct disk_stats {
|
||||
unsigned long sectors[2]; /* READs and WRITEs */
|
||||
|
||||
@@ -116,6 +116,9 @@ static inline enum zone_type gfp_zone(gfp_t flags)
|
||||
#ifndef HAVE_ARCH_FREE_PAGE
|
||||
static inline void arch_free_page(struct page *page, int order) { }
|
||||
#endif
|
||||
#ifndef HAVE_ARCH_ALLOC_PAGE
|
||||
static inline void arch_alloc_page(struct page *page, int order) { }
|
||||
#endif
|
||||
|
||||
extern struct page *
|
||||
FASTCALL(__alloc_pages(gfp_t, unsigned int, struct zonelist *));
|
||||
|
||||
+117
-21
@@ -54,8 +54,13 @@ struct gfs2_inum {
|
||||
__be64 no_addr;
|
||||
};
|
||||
|
||||
static inline int gfs2_inum_equal(const struct gfs2_inum *ino1,
|
||||
const struct gfs2_inum *ino2)
|
||||
struct gfs2_inum_host {
|
||||
__u64 no_formal_ino;
|
||||
__u64 no_addr;
|
||||
};
|
||||
|
||||
static inline int gfs2_inum_equal(const struct gfs2_inum_host *ino1,
|
||||
const struct gfs2_inum_host *ino2)
|
||||
{
|
||||
return ino1->no_formal_ino == ino2->no_formal_ino &&
|
||||
ino1->no_addr == ino2->no_addr;
|
||||
@@ -89,6 +94,12 @@ struct gfs2_meta_header {
|
||||
__be32 __pad1; /* Was incarnation number in gfs1 */
|
||||
};
|
||||
|
||||
struct gfs2_meta_header_host {
|
||||
__u32 mh_magic;
|
||||
__u32 mh_type;
|
||||
__u32 mh_format;
|
||||
};
|
||||
|
||||
/*
|
||||
* super-block structure
|
||||
*
|
||||
@@ -128,6 +139,23 @@ struct gfs2_sb {
|
||||
/* In gfs1, quota and license dinodes followed */
|
||||
};
|
||||
|
||||
struct gfs2_sb_host {
|
||||
struct gfs2_meta_header_host sb_header;
|
||||
|
||||
__u32 sb_fs_format;
|
||||
__u32 sb_multihost_format;
|
||||
|
||||
__u32 sb_bsize;
|
||||
__u32 sb_bsize_shift;
|
||||
|
||||
struct gfs2_inum_host sb_master_dir; /* Was jindex dinode in gfs1 */
|
||||
struct gfs2_inum_host sb_root_dir;
|
||||
|
||||
char sb_lockproto[GFS2_LOCKNAME_LEN];
|
||||
char sb_locktable[GFS2_LOCKNAME_LEN];
|
||||
/* In gfs1, quota and license dinodes followed */
|
||||
};
|
||||
|
||||
/*
|
||||
* resource index structure
|
||||
*/
|
||||
@@ -145,6 +173,14 @@ struct gfs2_rindex {
|
||||
__u8 ri_reserved[64];
|
||||
};
|
||||
|
||||
struct gfs2_rindex_host {
|
||||
__u64 ri_addr; /* grp block disk address */
|
||||
__u64 ri_data0; /* first data location */
|
||||
__u32 ri_length; /* length of rgrp header in fs blocks */
|
||||
__u32 ri_data; /* num of data blocks in rgrp */
|
||||
__u32 ri_bitbytes; /* number of bytes in data bitmaps */
|
||||
};
|
||||
|
||||
/*
|
||||
* resource group header structure
|
||||
*/
|
||||
@@ -176,6 +212,13 @@ struct gfs2_rgrp {
|
||||
__u8 rg_reserved[80]; /* Several fields from gfs1 now reserved */
|
||||
};
|
||||
|
||||
struct gfs2_rgrp_host {
|
||||
__u32 rg_flags;
|
||||
__u32 rg_free;
|
||||
__u32 rg_dinodes;
|
||||
__u64 rg_igeneration;
|
||||
};
|
||||
|
||||
/*
|
||||
* quota structure
|
||||
*/
|
||||
@@ -187,6 +230,12 @@ struct gfs2_quota {
|
||||
__u8 qu_reserved[64];
|
||||
};
|
||||
|
||||
struct gfs2_quota_host {
|
||||
__u64 qu_limit;
|
||||
__u64 qu_warn;
|
||||
__u64 qu_value;
|
||||
};
|
||||
|
||||
/*
|
||||
* dinode structure
|
||||
*/
|
||||
@@ -270,6 +319,27 @@ struct gfs2_dinode {
|
||||
__u8 di_reserved[56];
|
||||
};
|
||||
|
||||
struct gfs2_dinode_host {
|
||||
__u64 di_size; /* number of bytes in file */
|
||||
__u64 di_blocks; /* number of blocks in file */
|
||||
|
||||
/* This section varies from gfs1. Padding added to align with
|
||||
* remainder of dinode
|
||||
*/
|
||||
__u64 di_goal_meta; /* rgrp to alloc from next */
|
||||
__u64 di_goal_data; /* data block goal */
|
||||
__u64 di_generation; /* generation number for NFS */
|
||||
|
||||
__u32 di_flags; /* GFS2_DIF_... */
|
||||
__u16 di_height; /* height of metadata */
|
||||
|
||||
/* These only apply to directories */
|
||||
__u16 di_depth; /* Number of bits in the table */
|
||||
__u32 di_entries; /* The number of entries in the directory */
|
||||
|
||||
__u64 di_eattr; /* extended attribute block number */
|
||||
};
|
||||
|
||||
/*
|
||||
* directory structure - many of these per directory file
|
||||
*/
|
||||
@@ -344,6 +414,16 @@ struct gfs2_log_header {
|
||||
__be32 lh_hash;
|
||||
};
|
||||
|
||||
struct gfs2_log_header_host {
|
||||
struct gfs2_meta_header_host lh_header;
|
||||
|
||||
__u64 lh_sequence; /* Sequence number of this transaction */
|
||||
__u32 lh_flags; /* GFS2_LOG_HEAD_... */
|
||||
__u32 lh_tail; /* Block number of log tail */
|
||||
__u32 lh_blkno;
|
||||
__u32 lh_hash;
|
||||
};
|
||||
|
||||
/*
|
||||
* Log type descriptor
|
||||
*/
|
||||
@@ -384,6 +464,11 @@ struct gfs2_inum_range {
|
||||
__be64 ir_length;
|
||||
};
|
||||
|
||||
struct gfs2_inum_range_host {
|
||||
__u64 ir_start;
|
||||
__u64 ir_length;
|
||||
};
|
||||
|
||||
/*
|
||||
* Statfs change
|
||||
* Describes an change to the pool of free and allocated
|
||||
@@ -396,6 +481,12 @@ struct gfs2_statfs_change {
|
||||
__be64 sc_dinodes;
|
||||
};
|
||||
|
||||
struct gfs2_statfs_change_host {
|
||||
__u64 sc_total;
|
||||
__u64 sc_free;
|
||||
__u64 sc_dinodes;
|
||||
};
|
||||
|
||||
/*
|
||||
* Quota change
|
||||
* Describes an allocation change for a particular
|
||||
@@ -410,33 +501,38 @@ struct gfs2_quota_change {
|
||||
__be32 qc_id;
|
||||
};
|
||||
|
||||
struct gfs2_quota_change_host {
|
||||
__u64 qc_change;
|
||||
__u32 qc_flags; /* GFS2_QCF_... */
|
||||
__u32 qc_id;
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
/* Translation functions */
|
||||
|
||||
extern void gfs2_inum_in(struct gfs2_inum *no, const void *buf);
|
||||
extern void gfs2_inum_out(const struct gfs2_inum *no, void *buf);
|
||||
extern void gfs2_sb_in(struct gfs2_sb *sb, const void *buf);
|
||||
extern void gfs2_rindex_in(struct gfs2_rindex *ri, const void *buf);
|
||||
extern void gfs2_rindex_out(const struct gfs2_rindex *ri, void *buf);
|
||||
extern void gfs2_rgrp_in(struct gfs2_rgrp *rg, const void *buf);
|
||||
extern void gfs2_rgrp_out(const struct gfs2_rgrp *rg, void *buf);
|
||||
extern void gfs2_quota_in(struct gfs2_quota *qu, const void *buf);
|
||||
extern void gfs2_quota_out(const struct gfs2_quota *qu, void *buf);
|
||||
extern void gfs2_dinode_in(struct gfs2_dinode *di, const void *buf);
|
||||
extern void gfs2_dinode_out(const struct gfs2_dinode *di, void *buf);
|
||||
extern void gfs2_inum_in(struct gfs2_inum_host *no, const void *buf);
|
||||
extern void gfs2_inum_out(const struct gfs2_inum_host *no, void *buf);
|
||||
extern void gfs2_sb_in(struct gfs2_sb_host *sb, const void *buf);
|
||||
extern void gfs2_rindex_in(struct gfs2_rindex_host *ri, const void *buf);
|
||||
extern void gfs2_rindex_out(const struct gfs2_rindex_host *ri, void *buf);
|
||||
extern void gfs2_rgrp_in(struct gfs2_rgrp_host *rg, const void *buf);
|
||||
extern void gfs2_rgrp_out(const struct gfs2_rgrp_host *rg, void *buf);
|
||||
extern void gfs2_quota_in(struct gfs2_quota_host *qu, const void *buf);
|
||||
struct gfs2_inode;
|
||||
extern void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf);
|
||||
extern void gfs2_ea_header_in(struct gfs2_ea_header *ea, const void *buf);
|
||||
extern void gfs2_ea_header_out(const struct gfs2_ea_header *ea, void *buf);
|
||||
extern void gfs2_log_header_in(struct gfs2_log_header *lh, const void *buf);
|
||||
extern void gfs2_inum_range_in(struct gfs2_inum_range *ir, const void *buf);
|
||||
extern void gfs2_inum_range_out(const struct gfs2_inum_range *ir, void *buf);
|
||||
extern void gfs2_statfs_change_in(struct gfs2_statfs_change *sc, const void *buf);
|
||||
extern void gfs2_statfs_change_out(const struct gfs2_statfs_change *sc, void *buf);
|
||||
extern void gfs2_quota_change_in(struct gfs2_quota_change *qc, const void *buf);
|
||||
extern void gfs2_log_header_in(struct gfs2_log_header_host *lh, const void *buf);
|
||||
extern void gfs2_inum_range_in(struct gfs2_inum_range_host *ir, const void *buf);
|
||||
extern void gfs2_inum_range_out(const struct gfs2_inum_range_host *ir, void *buf);
|
||||
extern void gfs2_statfs_change_in(struct gfs2_statfs_change_host *sc, const void *buf);
|
||||
extern void gfs2_statfs_change_out(const struct gfs2_statfs_change_host *sc, void *buf);
|
||||
extern void gfs2_quota_change_in(struct gfs2_quota_change_host *qc, const void *buf);
|
||||
|
||||
/* Printing functions */
|
||||
|
||||
extern void gfs2_rindex_print(const struct gfs2_rindex *ri);
|
||||
extern void gfs2_dinode_print(const struct gfs2_dinode *di);
|
||||
extern void gfs2_rindex_print(const struct gfs2_rindex_host *ri);
|
||||
extern void gfs2_dinode_print(const struct gfs2_inode *ip);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
||||
@@ -0,0 +1,757 @@
|
||||
/*
|
||||
* $Id: hid-debug.h,v 1.8 2001/09/25 09:37:57 vojtech Exp $
|
||||
*
|
||||
* (c) 1999 Andreas Gal <gal@cs.uni-magdeburg.de>
|
||||
* (c) 2000-2001 Vojtech Pavlik <vojtech@ucw.cz>
|
||||
*
|
||||
* Some debug stuff for the HID parser.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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
|
||||
*
|
||||
* Should you need to contact me, the author, you can do so either by
|
||||
* e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail:
|
||||
* Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
|
||||
*/
|
||||
|
||||
#include <linux/input.h>
|
||||
|
||||
struct hid_usage_entry {
|
||||
unsigned page;
|
||||
unsigned usage;
|
||||
char *description;
|
||||
};
|
||||
|
||||
static const struct hid_usage_entry hid_usage_table[] = {
|
||||
{ 0, 0, "Undefined" },
|
||||
{ 1, 0, "GenericDesktop" },
|
||||
{0, 0x01, "Pointer"},
|
||||
{0, 0x02, "Mouse"},
|
||||
{0, 0x04, "Joystick"},
|
||||
{0, 0x05, "GamePad"},
|
||||
{0, 0x06, "Keyboard"},
|
||||
{0, 0x07, "Keypad"},
|
||||
{0, 0x08, "MultiAxis"},
|
||||
{0, 0x30, "X"},
|
||||
{0, 0x31, "Y"},
|
||||
{0, 0x32, "Z"},
|
||||
{0, 0x33, "Rx"},
|
||||
{0, 0x34, "Ry"},
|
||||
{0, 0x35, "Rz"},
|
||||
{0, 0x36, "Slider"},
|
||||
{0, 0x37, "Dial"},
|
||||
{0, 0x38, "Wheel"},
|
||||
{0, 0x39, "HatSwitch"},
|
||||
{0, 0x3a, "CountedBuffer"},
|
||||
{0, 0x3b, "ByteCount"},
|
||||
{0, 0x3c, "MotionWakeup"},
|
||||
{0, 0x3d, "Start"},
|
||||
{0, 0x3e, "Select"},
|
||||
{0, 0x40, "Vx"},
|
||||
{0, 0x41, "Vy"},
|
||||
{0, 0x42, "Vz"},
|
||||
{0, 0x43, "Vbrx"},
|
||||
{0, 0x44, "Vbry"},
|
||||
{0, 0x45, "Vbrz"},
|
||||
{0, 0x46, "Vno"},
|
||||
{0, 0x80, "SystemControl"},
|
||||
{0, 0x81, "SystemPowerDown"},
|
||||
{0, 0x82, "SystemSleep"},
|
||||
{0, 0x83, "SystemWakeUp"},
|
||||
{0, 0x84, "SystemContextMenu"},
|
||||
{0, 0x85, "SystemMainMenu"},
|
||||
{0, 0x86, "SystemAppMenu"},
|
||||
{0, 0x87, "SystemMenuHelp"},
|
||||
{0, 0x88, "SystemMenuExit"},
|
||||
{0, 0x89, "SystemMenuSelect"},
|
||||
{0, 0x8a, "SystemMenuRight"},
|
||||
{0, 0x8b, "SystemMenuLeft"},
|
||||
{0, 0x8c, "SystemMenuUp"},
|
||||
{0, 0x8d, "SystemMenuDown"},
|
||||
{0, 0x90, "D-PadUp"},
|
||||
{0, 0x91, "D-PadDown"},
|
||||
{0, 0x92, "D-PadRight"},
|
||||
{0, 0x93, "D-PadLeft"},
|
||||
{ 2, 0, "Simulation" },
|
||||
{0, 0xb0, "Aileron"},
|
||||
{0, 0xb1, "AileronTrim"},
|
||||
{0, 0xb2, "Anti-Torque"},
|
||||
{0, 0xb3, "Autopilot"},
|
||||
{0, 0xb4, "Chaff"},
|
||||
{0, 0xb5, "Collective"},
|
||||
{0, 0xb6, "DiveBrake"},
|
||||
{0, 0xb7, "ElectronicCountermeasures"},
|
||||
{0, 0xb8, "Elevator"},
|
||||
{0, 0xb9, "ElevatorTrim"},
|
||||
{0, 0xba, "Rudder"},
|
||||
{0, 0xbb, "Throttle"},
|
||||
{0, 0xbc, "FlightCommunications"},
|
||||
{0, 0xbd, "FlareRelease"},
|
||||
{0, 0xbe, "LandingGear"},
|
||||
{0, 0xbf, "ToeBrake"},
|
||||
{ 7, 0, "Keyboard" },
|
||||
{ 8, 0, "LED" },
|
||||
{0, 0x01, "NumLock"},
|
||||
{0, 0x02, "CapsLock"},
|
||||
{0, 0x03, "ScrollLock"},
|
||||
{0, 0x04, "Compose"},
|
||||
{0, 0x05, "Kana"},
|
||||
{0, 0x4b, "GenericIndicator"},
|
||||
{ 9, 0, "Button" },
|
||||
{ 10, 0, "Ordinal" },
|
||||
{ 12, 0, "Consumer" },
|
||||
{0, 0x238, "HorizontalWheel"},
|
||||
{ 13, 0, "Digitizers" },
|
||||
{0, 0x01, "Digitizer"},
|
||||
{0, 0x02, "Pen"},
|
||||
{0, 0x03, "LightPen"},
|
||||
{0, 0x04, "TouchScreen"},
|
||||
{0, 0x05, "TouchPad"},
|
||||
{0, 0x20, "Stylus"},
|
||||
{0, 0x21, "Puck"},
|
||||
{0, 0x22, "Finger"},
|
||||
{0, 0x30, "TipPressure"},
|
||||
{0, 0x31, "BarrelPressure"},
|
||||
{0, 0x32, "InRange"},
|
||||
{0, 0x33, "Touch"},
|
||||
{0, 0x34, "UnTouch"},
|
||||
{0, 0x35, "Tap"},
|
||||
{0, 0x39, "TabletFunctionKey"},
|
||||
{0, 0x3a, "ProgramChangeKey"},
|
||||
{0, 0x3c, "Invert"},
|
||||
{0, 0x42, "TipSwitch"},
|
||||
{0, 0x43, "SecondaryTipSwitch"},
|
||||
{0, 0x44, "BarrelSwitch"},
|
||||
{0, 0x45, "Eraser"},
|
||||
{0, 0x46, "TabletPick"},
|
||||
{ 15, 0, "PhysicalInterfaceDevice" },
|
||||
{0, 0x00, "Undefined"},
|
||||
{0, 0x01, "Physical_Interface_Device"},
|
||||
{0, 0x20, "Normal"},
|
||||
{0, 0x21, "Set_Effect_Report"},
|
||||
{0, 0x22, "Effect_Block_Index"},
|
||||
{0, 0x23, "Parameter_Block_Offset"},
|
||||
{0, 0x24, "ROM_Flag"},
|
||||
{0, 0x25, "Effect_Type"},
|
||||
{0, 0x26, "ET_Constant_Force"},
|
||||
{0, 0x27, "ET_Ramp"},
|
||||
{0, 0x28, "ET_Custom_Force_Data"},
|
||||
{0, 0x30, "ET_Square"},
|
||||
{0, 0x31, "ET_Sine"},
|
||||
{0, 0x32, "ET_Triangle"},
|
||||
{0, 0x33, "ET_Sawtooth_Up"},
|
||||
{0, 0x34, "ET_Sawtooth_Down"},
|
||||
{0, 0x40, "ET_Spring"},
|
||||
{0, 0x41, "ET_Damper"},
|
||||
{0, 0x42, "ET_Inertia"},
|
||||
{0, 0x43, "ET_Friction"},
|
||||
{0, 0x50, "Duration"},
|
||||
{0, 0x51, "Sample_Period"},
|
||||
{0, 0x52, "Gain"},
|
||||
{0, 0x53, "Trigger_Button"},
|
||||
{0, 0x54, "Trigger_Repeat_Interval"},
|
||||
{0, 0x55, "Axes_Enable"},
|
||||
{0, 0x56, "Direction_Enable"},
|
||||
{0, 0x57, "Direction"},
|
||||
{0, 0x58, "Type_Specific_Block_Offset"},
|
||||
{0, 0x59, "Block_Type"},
|
||||
{0, 0x5A, "Set_Envelope_Report"},
|
||||
{0, 0x5B, "Attack_Level"},
|
||||
{0, 0x5C, "Attack_Time"},
|
||||
{0, 0x5D, "Fade_Level"},
|
||||
{0, 0x5E, "Fade_Time"},
|
||||
{0, 0x5F, "Set_Condition_Report"},
|
||||
{0, 0x60, "CP_Offset"},
|
||||
{0, 0x61, "Positive_Coefficient"},
|
||||
{0, 0x62, "Negative_Coefficient"},
|
||||
{0, 0x63, "Positive_Saturation"},
|
||||
{0, 0x64, "Negative_Saturation"},
|
||||
{0, 0x65, "Dead_Band"},
|
||||
{0, 0x66, "Download_Force_Sample"},
|
||||
{0, 0x67, "Isoch_Custom_Force_Enable"},
|
||||
{0, 0x68, "Custom_Force_Data_Report"},
|
||||
{0, 0x69, "Custom_Force_Data"},
|
||||
{0, 0x6A, "Custom_Force_Vendor_Defined_Data"},
|
||||
{0, 0x6B, "Set_Custom_Force_Report"},
|
||||
{0, 0x6C, "Custom_Force_Data_Offset"},
|
||||
{0, 0x6D, "Sample_Count"},
|
||||
{0, 0x6E, "Set_Periodic_Report"},
|
||||
{0, 0x6F, "Offset"},
|
||||
{0, 0x70, "Magnitude"},
|
||||
{0, 0x71, "Phase"},
|
||||
{0, 0x72, "Period"},
|
||||
{0, 0x73, "Set_Constant_Force_Report"},
|
||||
{0, 0x74, "Set_Ramp_Force_Report"},
|
||||
{0, 0x75, "Ramp_Start"},
|
||||
{0, 0x76, "Ramp_End"},
|
||||
{0, 0x77, "Effect_Operation_Report"},
|
||||
{0, 0x78, "Effect_Operation"},
|
||||
{0, 0x79, "Op_Effect_Start"},
|
||||
{0, 0x7A, "Op_Effect_Start_Solo"},
|
||||
{0, 0x7B, "Op_Effect_Stop"},
|
||||
{0, 0x7C, "Loop_Count"},
|
||||
{0, 0x7D, "Device_Gain_Report"},
|
||||
{0, 0x7E, "Device_Gain"},
|
||||
{0, 0x7F, "PID_Pool_Report"},
|
||||
{0, 0x80, "RAM_Pool_Size"},
|
||||
{0, 0x81, "ROM_Pool_Size"},
|
||||
{0, 0x82, "ROM_Effect_Block_Count"},
|
||||
{0, 0x83, "Simultaneous_Effects_Max"},
|
||||
{0, 0x84, "Pool_Alignment"},
|
||||
{0, 0x85, "PID_Pool_Move_Report"},
|
||||
{0, 0x86, "Move_Source"},
|
||||
{0, 0x87, "Move_Destination"},
|
||||
{0, 0x88, "Move_Length"},
|
||||
{0, 0x89, "PID_Block_Load_Report"},
|
||||
{0, 0x8B, "Block_Load_Status"},
|
||||
{0, 0x8C, "Block_Load_Success"},
|
||||
{0, 0x8D, "Block_Load_Full"},
|
||||
{0, 0x8E, "Block_Load_Error"},
|
||||
{0, 0x8F, "Block_Handle"},
|
||||
{0, 0x90, "PID_Block_Free_Report"},
|
||||
{0, 0x91, "Type_Specific_Block_Handle"},
|
||||
{0, 0x92, "PID_State_Report"},
|
||||
{0, 0x94, "Effect_Playing"},
|
||||
{0, 0x95, "PID_Device_Control_Report"},
|
||||
{0, 0x96, "PID_Device_Control"},
|
||||
{0, 0x97, "DC_Enable_Actuators"},
|
||||
{0, 0x98, "DC_Disable_Actuators"},
|
||||
{0, 0x99, "DC_Stop_All_Effects"},
|
||||
{0, 0x9A, "DC_Device_Reset"},
|
||||
{0, 0x9B, "DC_Device_Pause"},
|
||||
{0, 0x9C, "DC_Device_Continue"},
|
||||
{0, 0x9F, "Device_Paused"},
|
||||
{0, 0xA0, "Actuators_Enabled"},
|
||||
{0, 0xA4, "Safety_Switch"},
|
||||
{0, 0xA5, "Actuator_Override_Switch"},
|
||||
{0, 0xA6, "Actuator_Power"},
|
||||
{0, 0xA7, "Start_Delay"},
|
||||
{0, 0xA8, "Parameter_Block_Size"},
|
||||
{0, 0xA9, "Device_Managed_Pool"},
|
||||
{0, 0xAA, "Shared_Parameter_Blocks"},
|
||||
{0, 0xAB, "Create_New_Effect_Report"},
|
||||
{0, 0xAC, "RAM_Pool_Available"},
|
||||
{ 0x84, 0, "Power Device" },
|
||||
{ 0x84, 0x02, "PresentStatus" },
|
||||
{ 0x84, 0x03, "ChangeStatus" },
|
||||
{ 0x84, 0x04, "UPS" },
|
||||
{ 0x84, 0x05, "PowerSupply" },
|
||||
{ 0x84, 0x10, "BatterySystem" },
|
||||
{ 0x84, 0x11, "BatterySystemID" },
|
||||
{ 0x84, 0x12, "Battery" },
|
||||
{ 0x84, 0x13, "BatteryID" },
|
||||
{ 0x84, 0x14, "Charger" },
|
||||
{ 0x84, 0x15, "ChargerID" },
|
||||
{ 0x84, 0x16, "PowerConverter" },
|
||||
{ 0x84, 0x17, "PowerConverterID" },
|
||||
{ 0x84, 0x18, "OutletSystem" },
|
||||
{ 0x84, 0x19, "OutletSystemID" },
|
||||
{ 0x84, 0x1a, "Input" },
|
||||
{ 0x84, 0x1b, "InputID" },
|
||||
{ 0x84, 0x1c, "Output" },
|
||||
{ 0x84, 0x1d, "OutputID" },
|
||||
{ 0x84, 0x1e, "Flow" },
|
||||
{ 0x84, 0x1f, "FlowID" },
|
||||
{ 0x84, 0x20, "Outlet" },
|
||||
{ 0x84, 0x21, "OutletID" },
|
||||
{ 0x84, 0x22, "Gang" },
|
||||
{ 0x84, 0x24, "PowerSummary" },
|
||||
{ 0x84, 0x25, "PowerSummaryID" },
|
||||
{ 0x84, 0x30, "Voltage" },
|
||||
{ 0x84, 0x31, "Current" },
|
||||
{ 0x84, 0x32, "Frequency" },
|
||||
{ 0x84, 0x33, "ApparentPower" },
|
||||
{ 0x84, 0x35, "PercentLoad" },
|
||||
{ 0x84, 0x40, "ConfigVoltage" },
|
||||
{ 0x84, 0x41, "ConfigCurrent" },
|
||||
{ 0x84, 0x43, "ConfigApparentPower" },
|
||||
{ 0x84, 0x53, "LowVoltageTransfer" },
|
||||
{ 0x84, 0x54, "HighVoltageTransfer" },
|
||||
{ 0x84, 0x56, "DelayBeforeStartup" },
|
||||
{ 0x84, 0x57, "DelayBeforeShutdown" },
|
||||
{ 0x84, 0x58, "Test" },
|
||||
{ 0x84, 0x5a, "AudibleAlarmControl" },
|
||||
{ 0x84, 0x60, "Present" },
|
||||
{ 0x84, 0x61, "Good" },
|
||||
{ 0x84, 0x62, "InternalFailure" },
|
||||
{ 0x84, 0x65, "Overload" },
|
||||
{ 0x84, 0x66, "OverCharged" },
|
||||
{ 0x84, 0x67, "OverTemperature" },
|
||||
{ 0x84, 0x68, "ShutdownRequested" },
|
||||
{ 0x84, 0x69, "ShutdownImminent" },
|
||||
{ 0x84, 0x6b, "SwitchOn/Off" },
|
||||
{ 0x84, 0x6c, "Switchable" },
|
||||
{ 0x84, 0x6d, "Used" },
|
||||
{ 0x84, 0x6e, "Boost" },
|
||||
{ 0x84, 0x73, "CommunicationLost" },
|
||||
{ 0x84, 0xfd, "iManufacturer" },
|
||||
{ 0x84, 0xfe, "iProduct" },
|
||||
{ 0x84, 0xff, "iSerialNumber" },
|
||||
{ 0x85, 0, "Battery System" },
|
||||
{ 0x85, 0x01, "SMBBatteryMode" },
|
||||
{ 0x85, 0x02, "SMBBatteryStatus" },
|
||||
{ 0x85, 0x03, "SMBAlarmWarning" },
|
||||
{ 0x85, 0x04, "SMBChargerMode" },
|
||||
{ 0x85, 0x05, "SMBChargerStatus" },
|
||||
{ 0x85, 0x06, "SMBChargerSpecInfo" },
|
||||
{ 0x85, 0x07, "SMBSelectorState" },
|
||||
{ 0x85, 0x08, "SMBSelectorPresets" },
|
||||
{ 0x85, 0x09, "SMBSelectorInfo" },
|
||||
{ 0x85, 0x29, "RemainingCapacityLimit" },
|
||||
{ 0x85, 0x2c, "CapacityMode" },
|
||||
{ 0x85, 0x42, "BelowRemainingCapacityLimit" },
|
||||
{ 0x85, 0x44, "Charging" },
|
||||
{ 0x85, 0x45, "Discharging" },
|
||||
{ 0x85, 0x4b, "NeedReplacement" },
|
||||
{ 0x85, 0x66, "RemainingCapacity" },
|
||||
{ 0x85, 0x68, "RunTimeToEmpty" },
|
||||
{ 0x85, 0x6a, "AverageTimeToFull" },
|
||||
{ 0x85, 0x83, "DesignCapacity" },
|
||||
{ 0x85, 0x85, "ManufacturerDate" },
|
||||
{ 0x85, 0x89, "iDeviceChemistry" },
|
||||
{ 0x85, 0x8b, "Rechargable" },
|
||||
{ 0x85, 0x8f, "iOEMInformation" },
|
||||
{ 0x85, 0x8d, "CapacityGranularity1" },
|
||||
{ 0x85, 0xd0, "ACPresent" },
|
||||
/* pages 0xff00 to 0xffff are vendor-specific */
|
||||
{ 0xffff, 0, "Vendor-specific-FF" },
|
||||
{ 0, 0, NULL }
|
||||
};
|
||||
|
||||
static void resolv_usage_page(unsigned page) {
|
||||
const struct hid_usage_entry *p;
|
||||
|
||||
for (p = hid_usage_table; p->description; p++)
|
||||
if (p->page == page) {
|
||||
printk("%s", p->description);
|
||||
return;
|
||||
}
|
||||
printk("%04x", page);
|
||||
}
|
||||
|
||||
static void resolv_usage(unsigned usage) {
|
||||
const struct hid_usage_entry *p;
|
||||
|
||||
resolv_usage_page(usage >> 16);
|
||||
printk(".");
|
||||
for (p = hid_usage_table; p->description; p++)
|
||||
if (p->page == (usage >> 16)) {
|
||||
for(++p; p->description && p->usage != 0; p++)
|
||||
if (p->usage == (usage & 0xffff)) {
|
||||
printk("%s", p->description);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
printk("%04x", usage & 0xffff);
|
||||
}
|
||||
|
||||
__inline__ static void tab(int n) {
|
||||
while (n--) printk(" ");
|
||||
}
|
||||
|
||||
static void hid_dump_field(struct hid_field *field, int n) {
|
||||
int j;
|
||||
|
||||
if (field->physical) {
|
||||
tab(n);
|
||||
printk("Physical(");
|
||||
resolv_usage(field->physical); printk(")\n");
|
||||
}
|
||||
if (field->logical) {
|
||||
tab(n);
|
||||
printk("Logical(");
|
||||
resolv_usage(field->logical); printk(")\n");
|
||||
}
|
||||
tab(n); printk("Usage(%d)\n", field->maxusage);
|
||||
for (j = 0; j < field->maxusage; j++) {
|
||||
tab(n+2);resolv_usage(field->usage[j].hid); printk("\n");
|
||||
}
|
||||
if (field->logical_minimum != field->logical_maximum) {
|
||||
tab(n); printk("Logical Minimum(%d)\n", field->logical_minimum);
|
||||
tab(n); printk("Logical Maximum(%d)\n", field->logical_maximum);
|
||||
}
|
||||
if (field->physical_minimum != field->physical_maximum) {
|
||||
tab(n); printk("Physical Minimum(%d)\n", field->physical_minimum);
|
||||
tab(n); printk("Physical Maximum(%d)\n", field->physical_maximum);
|
||||
}
|
||||
if (field->unit_exponent) {
|
||||
tab(n); printk("Unit Exponent(%d)\n", field->unit_exponent);
|
||||
}
|
||||
if (field->unit) {
|
||||
char *systems[5] = { "None", "SI Linear", "SI Rotation", "English Linear", "English Rotation" };
|
||||
char *units[5][8] = {
|
||||
{ "None", "None", "None", "None", "None", "None", "None", "None" },
|
||||
{ "None", "Centimeter", "Gram", "Seconds", "Kelvin", "Ampere", "Candela", "None" },
|
||||
{ "None", "Radians", "Gram", "Seconds", "Kelvin", "Ampere", "Candela", "None" },
|
||||
{ "None", "Inch", "Slug", "Seconds", "Fahrenheit", "Ampere", "Candela", "None" },
|
||||
{ "None", "Degrees", "Slug", "Seconds", "Fahrenheit", "Ampere", "Candela", "None" }
|
||||
};
|
||||
|
||||
int i;
|
||||
int sys;
|
||||
__u32 data = field->unit;
|
||||
|
||||
/* First nibble tells us which system we're in. */
|
||||
sys = data & 0xf;
|
||||
data >>= 4;
|
||||
|
||||
if(sys > 4) {
|
||||
tab(n); printk("Unit(Invalid)\n");
|
||||
}
|
||||
else {
|
||||
int earlier_unit = 0;
|
||||
|
||||
tab(n); printk("Unit(%s : ", systems[sys]);
|
||||
|
||||
for (i=1 ; i<sizeof(__u32)*2 ; i++) {
|
||||
char nibble = data & 0xf;
|
||||
data >>= 4;
|
||||
if (nibble != 0) {
|
||||
if(earlier_unit++ > 0)
|
||||
printk("*");
|
||||
printk("%s", units[sys][i]);
|
||||
if(nibble != 1) {
|
||||
/* This is a _signed_ nibble(!) */
|
||||
|
||||
int val = nibble & 0x7;
|
||||
if(nibble & 0x08)
|
||||
val = -((0x7 & ~val) +1);
|
||||
printk("^%d", val);
|
||||
}
|
||||
}
|
||||
}
|
||||
printk(")\n");
|
||||
}
|
||||
}
|
||||
tab(n); printk("Report Size(%u)\n", field->report_size);
|
||||
tab(n); printk("Report Count(%u)\n", field->report_count);
|
||||
tab(n); printk("Report Offset(%u)\n", field->report_offset);
|
||||
|
||||
tab(n); printk("Flags( ");
|
||||
j = field->flags;
|
||||
printk("%s", HID_MAIN_ITEM_CONSTANT & j ? "Constant " : "");
|
||||
printk("%s", HID_MAIN_ITEM_VARIABLE & j ? "Variable " : "Array ");
|
||||
printk("%s", HID_MAIN_ITEM_RELATIVE & j ? "Relative " : "Absolute ");
|
||||
printk("%s", HID_MAIN_ITEM_WRAP & j ? "Wrap " : "");
|
||||
printk("%s", HID_MAIN_ITEM_NONLINEAR & j ? "NonLinear " : "");
|
||||
printk("%s", HID_MAIN_ITEM_NO_PREFERRED & j ? "NoPrefferedState " : "");
|
||||
printk("%s", HID_MAIN_ITEM_NULL_STATE & j ? "NullState " : "");
|
||||
printk("%s", HID_MAIN_ITEM_VOLATILE & j ? "Volatile " : "");
|
||||
printk("%s", HID_MAIN_ITEM_BUFFERED_BYTE & j ? "BufferedByte " : "");
|
||||
printk(")\n");
|
||||
}
|
||||
|
||||
static void __attribute__((unused)) hid_dump_device(struct hid_device *device) {
|
||||
struct hid_report_enum *report_enum;
|
||||
struct hid_report *report;
|
||||
struct list_head *list;
|
||||
unsigned i,k;
|
||||
static char *table[] = {"INPUT", "OUTPUT", "FEATURE"};
|
||||
|
||||
for (i = 0; i < HID_REPORT_TYPES; i++) {
|
||||
report_enum = device->report_enum + i;
|
||||
list = report_enum->report_list.next;
|
||||
while (list != &report_enum->report_list) {
|
||||
report = (struct hid_report *) list;
|
||||
tab(2);
|
||||
printk("%s", table[i]);
|
||||
if (report->id)
|
||||
printk("(%d)", report->id);
|
||||
printk("[%s]", table[report->type]);
|
||||
printk("\n");
|
||||
for (k = 0; k < report->maxfield; k++) {
|
||||
tab(4);
|
||||
printk("Field(%d)\n", k);
|
||||
hid_dump_field(report->field[k], 6);
|
||||
}
|
||||
list = list->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void __attribute__((unused)) hid_dump_input(struct hid_usage *usage, __s32 value) {
|
||||
printk("hid-debug: input ");
|
||||
resolv_usage(usage->hid);
|
||||
printk(" = %d\n", value);
|
||||
}
|
||||
|
||||
|
||||
static char *events[EV_MAX + 1] = {
|
||||
[EV_SYN] = "Sync", [EV_KEY] = "Key",
|
||||
[EV_REL] = "Relative", [EV_ABS] = "Absolute",
|
||||
[EV_MSC] = "Misc", [EV_LED] = "LED",
|
||||
[EV_SND] = "Sound", [EV_REP] = "Repeat",
|
||||
[EV_FF] = "ForceFeedback", [EV_PWR] = "Power",
|
||||
[EV_FF_STATUS] = "ForceFeedbackStatus",
|
||||
};
|
||||
|
||||
static char *syncs[2] = {
|
||||
[SYN_REPORT] = "Report", [SYN_CONFIG] = "Config",
|
||||
};
|
||||
static char *keys[KEY_MAX + 1] = {
|
||||
[KEY_RESERVED] = "Reserved", [KEY_ESC] = "Esc",
|
||||
[KEY_1] = "1", [KEY_2] = "2",
|
||||
[KEY_3] = "3", [KEY_4] = "4",
|
||||
[KEY_5] = "5", [KEY_6] = "6",
|
||||
[KEY_7] = "7", [KEY_8] = "8",
|
||||
[KEY_9] = "9", [KEY_0] = "0",
|
||||
[KEY_MINUS] = "Minus", [KEY_EQUAL] = "Equal",
|
||||
[KEY_BACKSPACE] = "Backspace", [KEY_TAB] = "Tab",
|
||||
[KEY_Q] = "Q", [KEY_W] = "W",
|
||||
[KEY_E] = "E", [KEY_R] = "R",
|
||||
[KEY_T] = "T", [KEY_Y] = "Y",
|
||||
[KEY_U] = "U", [KEY_I] = "I",
|
||||
[KEY_O] = "O", [KEY_P] = "P",
|
||||
[KEY_LEFTBRACE] = "LeftBrace", [KEY_RIGHTBRACE] = "RightBrace",
|
||||
[KEY_ENTER] = "Enter", [KEY_LEFTCTRL] = "LeftControl",
|
||||
[KEY_A] = "A", [KEY_S] = "S",
|
||||
[KEY_D] = "D", [KEY_F] = "F",
|
||||
[KEY_G] = "G", [KEY_H] = "H",
|
||||
[KEY_J] = "J", [KEY_K] = "K",
|
||||
[KEY_L] = "L", [KEY_SEMICOLON] = "Semicolon",
|
||||
[KEY_APOSTROPHE] = "Apostrophe", [KEY_GRAVE] = "Grave",
|
||||
[KEY_LEFTSHIFT] = "LeftShift", [KEY_BACKSLASH] = "BackSlash",
|
||||
[KEY_Z] = "Z", [KEY_X] = "X",
|
||||
[KEY_C] = "C", [KEY_V] = "V",
|
||||
[KEY_B] = "B", [KEY_N] = "N",
|
||||
[KEY_M] = "M", [KEY_COMMA] = "Comma",
|
||||
[KEY_DOT] = "Dot", [KEY_SLASH] = "Slash",
|
||||
[KEY_RIGHTSHIFT] = "RightShift", [KEY_KPASTERISK] = "KPAsterisk",
|
||||
[KEY_LEFTALT] = "LeftAlt", [KEY_SPACE] = "Space",
|
||||
[KEY_CAPSLOCK] = "CapsLock", [KEY_F1] = "F1",
|
||||
[KEY_F2] = "F2", [KEY_F3] = "F3",
|
||||
[KEY_F4] = "F4", [KEY_F5] = "F5",
|
||||
[KEY_F6] = "F6", [KEY_F7] = "F7",
|
||||
[KEY_F8] = "F8", [KEY_F9] = "F9",
|
||||
[KEY_F10] = "F10", [KEY_NUMLOCK] = "NumLock",
|
||||
[KEY_SCROLLLOCK] = "ScrollLock", [KEY_KP7] = "KP7",
|
||||
[KEY_KP8] = "KP8", [KEY_KP9] = "KP9",
|
||||
[KEY_KPMINUS] = "KPMinus", [KEY_KP4] = "KP4",
|
||||
[KEY_KP5] = "KP5", [KEY_KP6] = "KP6",
|
||||
[KEY_KPPLUS] = "KPPlus", [KEY_KP1] = "KP1",
|
||||
[KEY_KP2] = "KP2", [KEY_KP3] = "KP3",
|
||||
[KEY_KP0] = "KP0", [KEY_KPDOT] = "KPDot",
|
||||
[KEY_ZENKAKUHANKAKU] = "Zenkaku/Hankaku", [KEY_102ND] = "102nd",
|
||||
[KEY_F11] = "F11", [KEY_F12] = "F12",
|
||||
[KEY_RO] = "RO", [KEY_KATAKANA] = "Katakana",
|
||||
[KEY_HIRAGANA] = "HIRAGANA", [KEY_HENKAN] = "Henkan",
|
||||
[KEY_KATAKANAHIRAGANA] = "Katakana/Hiragana", [KEY_MUHENKAN] = "Muhenkan",
|
||||
[KEY_KPJPCOMMA] = "KPJpComma", [KEY_KPENTER] = "KPEnter",
|
||||
[KEY_RIGHTCTRL] = "RightCtrl", [KEY_KPSLASH] = "KPSlash",
|
||||
[KEY_SYSRQ] = "SysRq", [KEY_RIGHTALT] = "RightAlt",
|
||||
[KEY_LINEFEED] = "LineFeed", [KEY_HOME] = "Home",
|
||||
[KEY_UP] = "Up", [KEY_PAGEUP] = "PageUp",
|
||||
[KEY_LEFT] = "Left", [KEY_RIGHT] = "Right",
|
||||
[KEY_END] = "End", [KEY_DOWN] = "Down",
|
||||
[KEY_PAGEDOWN] = "PageDown", [KEY_INSERT] = "Insert",
|
||||
[KEY_DELETE] = "Delete", [KEY_MACRO] = "Macro",
|
||||
[KEY_MUTE] = "Mute", [KEY_VOLUMEDOWN] = "VolumeDown",
|
||||
[KEY_VOLUMEUP] = "VolumeUp", [KEY_POWER] = "Power",
|
||||
[KEY_KPEQUAL] = "KPEqual", [KEY_KPPLUSMINUS] = "KPPlusMinus",
|
||||
[KEY_PAUSE] = "Pause", [KEY_KPCOMMA] = "KPComma",
|
||||
[KEY_HANGUEL] = "Hangeul", [KEY_HANJA] = "Hanja",
|
||||
[KEY_YEN] = "Yen", [KEY_LEFTMETA] = "LeftMeta",
|
||||
[KEY_RIGHTMETA] = "RightMeta", [KEY_COMPOSE] = "Compose",
|
||||
[KEY_STOP] = "Stop", [KEY_AGAIN] = "Again",
|
||||
[KEY_PROPS] = "Props", [KEY_UNDO] = "Undo",
|
||||
[KEY_FRONT] = "Front", [KEY_COPY] = "Copy",
|
||||
[KEY_OPEN] = "Open", [KEY_PASTE] = "Paste",
|
||||
[KEY_FIND] = "Find", [KEY_CUT] = "Cut",
|
||||
[KEY_HELP] = "Help", [KEY_MENU] = "Menu",
|
||||
[KEY_CALC] = "Calc", [KEY_SETUP] = "Setup",
|
||||
[KEY_SLEEP] = "Sleep", [KEY_WAKEUP] = "WakeUp",
|
||||
[KEY_FILE] = "File", [KEY_SENDFILE] = "SendFile",
|
||||
[KEY_DELETEFILE] = "DeleteFile", [KEY_XFER] = "X-fer",
|
||||
[KEY_PROG1] = "Prog1", [KEY_PROG2] = "Prog2",
|
||||
[KEY_WWW] = "WWW", [KEY_MSDOS] = "MSDOS",
|
||||
[KEY_COFFEE] = "Coffee", [KEY_DIRECTION] = "Direction",
|
||||
[KEY_CYCLEWINDOWS] = "CycleWindows", [KEY_MAIL] = "Mail",
|
||||
[KEY_BOOKMARKS] = "Bookmarks", [KEY_COMPUTER] = "Computer",
|
||||
[KEY_BACK] = "Back", [KEY_FORWARD] = "Forward",
|
||||
[KEY_CLOSECD] = "CloseCD", [KEY_EJECTCD] = "EjectCD",
|
||||
[KEY_EJECTCLOSECD] = "EjectCloseCD", [KEY_NEXTSONG] = "NextSong",
|
||||
[KEY_PLAYPAUSE] = "PlayPause", [KEY_PREVIOUSSONG] = "PreviousSong",
|
||||
[KEY_STOPCD] = "StopCD", [KEY_RECORD] = "Record",
|
||||
[KEY_REWIND] = "Rewind", [KEY_PHONE] = "Phone",
|
||||
[KEY_ISO] = "ISOKey", [KEY_CONFIG] = "Config",
|
||||
[KEY_HOMEPAGE] = "HomePage", [KEY_REFRESH] = "Refresh",
|
||||
[KEY_EXIT] = "Exit", [KEY_MOVE] = "Move",
|
||||
[KEY_EDIT] = "Edit", [KEY_SCROLLUP] = "ScrollUp",
|
||||
[KEY_SCROLLDOWN] = "ScrollDown", [KEY_KPLEFTPAREN] = "KPLeftParenthesis",
|
||||
[KEY_KPRIGHTPAREN] = "KPRightParenthesis", [KEY_NEW] = "New",
|
||||
[KEY_REDO] = "Redo", [KEY_F13] = "F13",
|
||||
[KEY_F14] = "F14", [KEY_F15] = "F15",
|
||||
[KEY_F16] = "F16", [KEY_F17] = "F17",
|
||||
[KEY_F18] = "F18", [KEY_F19] = "F19",
|
||||
[KEY_F20] = "F20", [KEY_F21] = "F21",
|
||||
[KEY_F22] = "F22", [KEY_F23] = "F23",
|
||||
[KEY_F24] = "F24", [KEY_PLAYCD] = "PlayCD",
|
||||
[KEY_PAUSECD] = "PauseCD", [KEY_PROG3] = "Prog3",
|
||||
[KEY_PROG4] = "Prog4", [KEY_SUSPEND] = "Suspend",
|
||||
[KEY_CLOSE] = "Close", [KEY_PLAY] = "Play",
|
||||
[KEY_FASTFORWARD] = "FastForward", [KEY_BASSBOOST] = "BassBoost",
|
||||
[KEY_PRINT] = "Print", [KEY_HP] = "HP",
|
||||
[KEY_CAMERA] = "Camera", [KEY_SOUND] = "Sound",
|
||||
[KEY_QUESTION] = "Question", [KEY_EMAIL] = "Email",
|
||||
[KEY_CHAT] = "Chat", [KEY_SEARCH] = "Search",
|
||||
[KEY_CONNECT] = "Connect", [KEY_FINANCE] = "Finance",
|
||||
[KEY_SPORT] = "Sport", [KEY_SHOP] = "Shop",
|
||||
[KEY_ALTERASE] = "AlternateErase", [KEY_CANCEL] = "Cancel",
|
||||
[KEY_BRIGHTNESSDOWN] = "BrightnessDown", [KEY_BRIGHTNESSUP] = "BrightnessUp",
|
||||
[KEY_MEDIA] = "Media", [KEY_UNKNOWN] = "Unknown",
|
||||
[BTN_0] = "Btn0", [BTN_1] = "Btn1",
|
||||
[BTN_2] = "Btn2", [BTN_3] = "Btn3",
|
||||
[BTN_4] = "Btn4", [BTN_5] = "Btn5",
|
||||
[BTN_6] = "Btn6", [BTN_7] = "Btn7",
|
||||
[BTN_8] = "Btn8", [BTN_9] = "Btn9",
|
||||
[BTN_LEFT] = "LeftBtn", [BTN_RIGHT] = "RightBtn",
|
||||
[BTN_MIDDLE] = "MiddleBtn", [BTN_SIDE] = "SideBtn",
|
||||
[BTN_EXTRA] = "ExtraBtn", [BTN_FORWARD] = "ForwardBtn",
|
||||
[BTN_BACK] = "BackBtn", [BTN_TASK] = "TaskBtn",
|
||||
[BTN_TRIGGER] = "Trigger", [BTN_THUMB] = "ThumbBtn",
|
||||
[BTN_THUMB2] = "ThumbBtn2", [BTN_TOP] = "TopBtn",
|
||||
[BTN_TOP2] = "TopBtn2", [BTN_PINKIE] = "PinkieBtn",
|
||||
[BTN_BASE] = "BaseBtn", [BTN_BASE2] = "BaseBtn2",
|
||||
[BTN_BASE3] = "BaseBtn3", [BTN_BASE4] = "BaseBtn4",
|
||||
[BTN_BASE5] = "BaseBtn5", [BTN_BASE6] = "BaseBtn6",
|
||||
[BTN_DEAD] = "BtnDead", [BTN_A] = "BtnA",
|
||||
[BTN_B] = "BtnB", [BTN_C] = "BtnC",
|
||||
[BTN_X] = "BtnX", [BTN_Y] = "BtnY",
|
||||
[BTN_Z] = "BtnZ", [BTN_TL] = "BtnTL",
|
||||
[BTN_TR] = "BtnTR", [BTN_TL2] = "BtnTL2",
|
||||
[BTN_TR2] = "BtnTR2", [BTN_SELECT] = "BtnSelect",
|
||||
[BTN_START] = "BtnStart", [BTN_MODE] = "BtnMode",
|
||||
[BTN_THUMBL] = "BtnThumbL", [BTN_THUMBR] = "BtnThumbR",
|
||||
[BTN_TOOL_PEN] = "ToolPen", [BTN_TOOL_RUBBER] = "ToolRubber",
|
||||
[BTN_TOOL_BRUSH] = "ToolBrush", [BTN_TOOL_PENCIL] = "ToolPencil",
|
||||
[BTN_TOOL_AIRBRUSH] = "ToolAirbrush", [BTN_TOOL_FINGER] = "ToolFinger",
|
||||
[BTN_TOOL_MOUSE] = "ToolMouse", [BTN_TOOL_LENS] = "ToolLens",
|
||||
[BTN_TOUCH] = "Touch", [BTN_STYLUS] = "Stylus",
|
||||
[BTN_STYLUS2] = "Stylus2", [BTN_TOOL_DOUBLETAP] = "ToolDoubleTap",
|
||||
[BTN_TOOL_TRIPLETAP] = "ToolTripleTap", [BTN_GEAR_DOWN] = "WheelBtn",
|
||||
[BTN_GEAR_UP] = "Gear up", [KEY_OK] = "Ok",
|
||||
[KEY_SELECT] = "Select", [KEY_GOTO] = "Goto",
|
||||
[KEY_CLEAR] = "Clear", [KEY_POWER2] = "Power2",
|
||||
[KEY_OPTION] = "Option", [KEY_INFO] = "Info",
|
||||
[KEY_TIME] = "Time", [KEY_VENDOR] = "Vendor",
|
||||
[KEY_ARCHIVE] = "Archive", [KEY_PROGRAM] = "Program",
|
||||
[KEY_CHANNEL] = "Channel", [KEY_FAVORITES] = "Favorites",
|
||||
[KEY_EPG] = "EPG", [KEY_PVR] = "PVR",
|
||||
[KEY_MHP] = "MHP", [KEY_LANGUAGE] = "Language",
|
||||
[KEY_TITLE] = "Title", [KEY_SUBTITLE] = "Subtitle",
|
||||
[KEY_ANGLE] = "Angle", [KEY_ZOOM] = "Zoom",
|
||||
[KEY_MODE] = "Mode", [KEY_KEYBOARD] = "Keyboard",
|
||||
[KEY_SCREEN] = "Screen", [KEY_PC] = "PC",
|
||||
[KEY_TV] = "TV", [KEY_TV2] = "TV2",
|
||||
[KEY_VCR] = "VCR", [KEY_VCR2] = "VCR2",
|
||||
[KEY_SAT] = "Sat", [KEY_SAT2] = "Sat2",
|
||||
[KEY_CD] = "CD", [KEY_TAPE] = "Tape",
|
||||
[KEY_RADIO] = "Radio", [KEY_TUNER] = "Tuner",
|
||||
[KEY_PLAYER] = "Player", [KEY_TEXT] = "Text",
|
||||
[KEY_DVD] = "DVD", [KEY_AUX] = "Aux",
|
||||
[KEY_MP3] = "MP3", [KEY_AUDIO] = "Audio",
|
||||
[KEY_VIDEO] = "Video", [KEY_DIRECTORY] = "Directory",
|
||||
[KEY_LIST] = "List", [KEY_MEMO] = "Memo",
|
||||
[KEY_CALENDAR] = "Calendar", [KEY_RED] = "Red",
|
||||
[KEY_GREEN] = "Green", [KEY_YELLOW] = "Yellow",
|
||||
[KEY_BLUE] = "Blue", [KEY_CHANNELUP] = "ChannelUp",
|
||||
[KEY_CHANNELDOWN] = "ChannelDown", [KEY_FIRST] = "First",
|
||||
[KEY_LAST] = "Last", [KEY_AB] = "AB",
|
||||
[KEY_NEXT] = "Next", [KEY_RESTART] = "Restart",
|
||||
[KEY_SLOW] = "Slow", [KEY_SHUFFLE] = "Shuffle",
|
||||
[KEY_BREAK] = "Break", [KEY_PREVIOUS] = "Previous",
|
||||
[KEY_DIGITS] = "Digits", [KEY_TEEN] = "TEEN",
|
||||
[KEY_TWEN] = "TWEN", [KEY_DEL_EOL] = "DeleteEOL",
|
||||
[KEY_DEL_EOS] = "DeleteEOS", [KEY_INS_LINE] = "InsertLine",
|
||||
[KEY_DEL_LINE] = "DeleteLine",
|
||||
[KEY_SEND] = "Send", [KEY_REPLY] = "Reply",
|
||||
[KEY_FORWARDMAIL] = "ForwardMail", [KEY_SAVE] = "Save",
|
||||
[KEY_DOCUMENTS] = "Documents",
|
||||
[KEY_FN] = "Fn", [KEY_FN_ESC] = "Fn+ESC",
|
||||
[KEY_FN_1] = "Fn+1", [KEY_FN_2] = "Fn+2",
|
||||
[KEY_FN_B] = "Fn+B", [KEY_FN_D] = "Fn+D",
|
||||
[KEY_FN_E] = "Fn+E", [KEY_FN_F] = "Fn+F",
|
||||
[KEY_FN_S] = "Fn+S",
|
||||
[KEY_FN_F1] = "Fn+F1", [KEY_FN_F2] = "Fn+F2",
|
||||
[KEY_FN_F3] = "Fn+F3", [KEY_FN_F4] = "Fn+F4",
|
||||
[KEY_FN_F5] = "Fn+F5", [KEY_FN_F6] = "Fn+F6",
|
||||
[KEY_FN_F7] = "Fn+F7", [KEY_FN_F8] = "Fn+F8",
|
||||
[KEY_FN_F9] = "Fn+F9", [KEY_FN_F10] = "Fn+F10",
|
||||
[KEY_FN_F11] = "Fn+F11", [KEY_FN_F12] = "Fn+F12",
|
||||
[KEY_KBDILLUMTOGGLE] = "KbdIlluminationToggle",
|
||||
[KEY_KBDILLUMDOWN] = "KbdIlluminationDown",
|
||||
[KEY_KBDILLUMUP] = "KbdIlluminationUp",
|
||||
[KEY_SWITCHVIDEOMODE] = "SwitchVideoMode",
|
||||
};
|
||||
|
||||
static char *relatives[REL_MAX + 1] = {
|
||||
[REL_X] = "X", [REL_Y] = "Y",
|
||||
[REL_Z] = "Z", [REL_HWHEEL] = "HWheel",
|
||||
[REL_DIAL] = "Dial", [REL_WHEEL] = "Wheel",
|
||||
[REL_MISC] = "Misc",
|
||||
};
|
||||
|
||||
static char *absolutes[ABS_MAX + 1] = {
|
||||
[ABS_X] = "X", [ABS_Y] = "Y",
|
||||
[ABS_Z] = "Z", [ABS_RX] = "Rx",
|
||||
[ABS_RY] = "Ry", [ABS_RZ] = "Rz",
|
||||
[ABS_THROTTLE] = "Throttle", [ABS_RUDDER] = "Rudder",
|
||||
[ABS_WHEEL] = "Wheel", [ABS_GAS] = "Gas",
|
||||
[ABS_BRAKE] = "Brake", [ABS_HAT0X] = "Hat0X",
|
||||
[ABS_HAT0Y] = "Hat0Y", [ABS_HAT1X] = "Hat1X",
|
||||
[ABS_HAT1Y] = "Hat1Y", [ABS_HAT2X] = "Hat2X",
|
||||
[ABS_HAT2Y] = "Hat2Y", [ABS_HAT3X] = "Hat3X",
|
||||
[ABS_HAT3Y] = "Hat 3Y", [ABS_PRESSURE] = "Pressure",
|
||||
[ABS_DISTANCE] = "Distance", [ABS_TILT_X] = "XTilt",
|
||||
[ABS_TILT_Y] = "YTilt", [ABS_TOOL_WIDTH] = "Tool Width",
|
||||
[ABS_VOLUME] = "Volume", [ABS_MISC] = "Misc",
|
||||
};
|
||||
|
||||
static char *misc[MSC_MAX + 1] = {
|
||||
[MSC_SERIAL] = "Serial", [MSC_PULSELED] = "Pulseled",
|
||||
[MSC_GESTURE] = "Gesture", [MSC_RAW] = "RawData"
|
||||
};
|
||||
|
||||
static char *leds[LED_MAX + 1] = {
|
||||
[LED_NUML] = "NumLock", [LED_CAPSL] = "CapsLock",
|
||||
[LED_SCROLLL] = "ScrollLock", [LED_COMPOSE] = "Compose",
|
||||
[LED_KANA] = "Kana", [LED_SLEEP] = "Sleep",
|
||||
[LED_SUSPEND] = "Suspend", [LED_MUTE] = "Mute",
|
||||
[LED_MISC] = "Misc",
|
||||
};
|
||||
|
||||
static char *repeats[REP_MAX + 1] = {
|
||||
[REP_DELAY] = "Delay", [REP_PERIOD] = "Period"
|
||||
};
|
||||
|
||||
static char *sounds[SND_MAX + 1] = {
|
||||
[SND_CLICK] = "Click", [SND_BELL] = "Bell",
|
||||
[SND_TONE] = "Tone"
|
||||
};
|
||||
|
||||
static char **names[EV_MAX + 1] = {
|
||||
[EV_SYN] = syncs, [EV_KEY] = keys,
|
||||
[EV_REL] = relatives, [EV_ABS] = absolutes,
|
||||
[EV_MSC] = misc, [EV_LED] = leds,
|
||||
[EV_SND] = sounds, [EV_REP] = repeats,
|
||||
};
|
||||
|
||||
static void __attribute__((unused)) resolv_event(__u8 type, __u16 code) {
|
||||
|
||||
printk("%s.%s", events[type] ? events[type] : "?",
|
||||
names[type] ? (names[type][code] ? names[type][code] : "?") : "?");
|
||||
}
|
||||
@@ -0,0 +1,528 @@
|
||||
#ifndef __HID_H
|
||||
#define __HID_H
|
||||
|
||||
/*
|
||||
* $Id: hid.h,v 1.24 2001/12/27 10:37:41 vojtech Exp $
|
||||
*
|
||||
* Copyright (c) 1999 Andreas Gal
|
||||
* Copyright (c) 2000-2001 Vojtech Pavlik
|
||||
* Copyright (c) 2006 Jiri Kosina
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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
|
||||
*
|
||||
* Should you need to contact me, the author, you can do so either by
|
||||
* e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail:
|
||||
* Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/input.h>
|
||||
|
||||
/*
|
||||
* USB HID (Human Interface Device) interface class code
|
||||
*/
|
||||
|
||||
#define USB_INTERFACE_CLASS_HID 3
|
||||
|
||||
/*
|
||||
* USB HID interface subclass and protocol codes
|
||||
*/
|
||||
|
||||
#define USB_INTERFACE_SUBCLASS_BOOT 1
|
||||
#define USB_INTERFACE_PROTOCOL_KEYBOARD 1
|
||||
#define USB_INTERFACE_PROTOCOL_MOUSE 2
|
||||
|
||||
/*
|
||||
* HID class requests
|
||||
*/
|
||||
|
||||
#define HID_REQ_GET_REPORT 0x01
|
||||
#define HID_REQ_GET_IDLE 0x02
|
||||
#define HID_REQ_GET_PROTOCOL 0x03
|
||||
#define HID_REQ_SET_REPORT 0x09
|
||||
#define HID_REQ_SET_IDLE 0x0A
|
||||
#define HID_REQ_SET_PROTOCOL 0x0B
|
||||
|
||||
/*
|
||||
* HID class descriptor types
|
||||
*/
|
||||
|
||||
#define HID_DT_HID (USB_TYPE_CLASS | 0x01)
|
||||
#define HID_DT_REPORT (USB_TYPE_CLASS | 0x02)
|
||||
#define HID_DT_PHYSICAL (USB_TYPE_CLASS | 0x03)
|
||||
|
||||
/*
|
||||
* We parse each description item into this structure. Short items data
|
||||
* values are expanded to 32-bit signed int, long items contain a pointer
|
||||
* into the data area.
|
||||
*/
|
||||
|
||||
struct hid_item {
|
||||
unsigned format;
|
||||
__u8 size;
|
||||
__u8 type;
|
||||
__u8 tag;
|
||||
union {
|
||||
__u8 u8;
|
||||
__s8 s8;
|
||||
__u16 u16;
|
||||
__s16 s16;
|
||||
__u32 u32;
|
||||
__s32 s32;
|
||||
__u8 *longdata;
|
||||
} data;
|
||||
};
|
||||
|
||||
/*
|
||||
* HID report item format
|
||||
*/
|
||||
|
||||
#define HID_ITEM_FORMAT_SHORT 0
|
||||
#define HID_ITEM_FORMAT_LONG 1
|
||||
|
||||
/*
|
||||
* Special tag indicating long items
|
||||
*/
|
||||
|
||||
#define HID_ITEM_TAG_LONG 15
|
||||
|
||||
/*
|
||||
* HID report descriptor item type (prefix bit 2,3)
|
||||
*/
|
||||
|
||||
#define HID_ITEM_TYPE_MAIN 0
|
||||
#define HID_ITEM_TYPE_GLOBAL 1
|
||||
#define HID_ITEM_TYPE_LOCAL 2
|
||||
#define HID_ITEM_TYPE_RESERVED 3
|
||||
|
||||
/*
|
||||
* HID report descriptor main item tags
|
||||
*/
|
||||
|
||||
#define HID_MAIN_ITEM_TAG_INPUT 8
|
||||
#define HID_MAIN_ITEM_TAG_OUTPUT 9
|
||||
#define HID_MAIN_ITEM_TAG_FEATURE 11
|
||||
#define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION 10
|
||||
#define HID_MAIN_ITEM_TAG_END_COLLECTION 12
|
||||
|
||||
/*
|
||||
* HID report descriptor main item contents
|
||||
*/
|
||||
|
||||
#define HID_MAIN_ITEM_CONSTANT 0x001
|
||||
#define HID_MAIN_ITEM_VARIABLE 0x002
|
||||
#define HID_MAIN_ITEM_RELATIVE 0x004
|
||||
#define HID_MAIN_ITEM_WRAP 0x008
|
||||
#define HID_MAIN_ITEM_NONLINEAR 0x010
|
||||
#define HID_MAIN_ITEM_NO_PREFERRED 0x020
|
||||
#define HID_MAIN_ITEM_NULL_STATE 0x040
|
||||
#define HID_MAIN_ITEM_VOLATILE 0x080
|
||||
#define HID_MAIN_ITEM_BUFFERED_BYTE 0x100
|
||||
|
||||
/*
|
||||
* HID report descriptor collection item types
|
||||
*/
|
||||
|
||||
#define HID_COLLECTION_PHYSICAL 0
|
||||
#define HID_COLLECTION_APPLICATION 1
|
||||
#define HID_COLLECTION_LOGICAL 2
|
||||
|
||||
/*
|
||||
* HID report descriptor global item tags
|
||||
*/
|
||||
|
||||
#define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0
|
||||
#define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM 1
|
||||
#define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM 2
|
||||
#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM 3
|
||||
#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM 4
|
||||
#define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 5
|
||||
#define HID_GLOBAL_ITEM_TAG_UNIT 6
|
||||
#define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 7
|
||||
#define HID_GLOBAL_ITEM_TAG_REPORT_ID 8
|
||||
#define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 9
|
||||
#define HID_GLOBAL_ITEM_TAG_PUSH 10
|
||||
#define HID_GLOBAL_ITEM_TAG_POP 11
|
||||
|
||||
/*
|
||||
* HID report descriptor local item tags
|
||||
*/
|
||||
|
||||
#define HID_LOCAL_ITEM_TAG_USAGE 0
|
||||
#define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM 1
|
||||
#define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM 2
|
||||
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 3
|
||||
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM 4
|
||||
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM 5
|
||||
#define HID_LOCAL_ITEM_TAG_STRING_INDEX 7
|
||||
#define HID_LOCAL_ITEM_TAG_STRING_MINIMUM 8
|
||||
#define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM 9
|
||||
#define HID_LOCAL_ITEM_TAG_DELIMITER 10
|
||||
|
||||
/*
|
||||
* HID usage tables
|
||||
*/
|
||||
|
||||
#define HID_USAGE_PAGE 0xffff0000
|
||||
|
||||
#define HID_UP_UNDEFINED 0x00000000
|
||||
#define HID_UP_GENDESK 0x00010000
|
||||
#define HID_UP_SIMULATION 0x00020000
|
||||
#define HID_UP_KEYBOARD 0x00070000
|
||||
#define HID_UP_LED 0x00080000
|
||||
#define HID_UP_BUTTON 0x00090000
|
||||
#define HID_UP_ORDINAL 0x000a0000
|
||||
#define HID_UP_CONSUMER 0x000c0000
|
||||
#define HID_UP_DIGITIZER 0x000d0000
|
||||
#define HID_UP_PID 0x000f0000
|
||||
#define HID_UP_HPVENDOR 0xff7f0000
|
||||
#define HID_UP_MSVENDOR 0xff000000
|
||||
#define HID_UP_CUSTOM 0x00ff0000
|
||||
#define HID_UP_LOGIVENDOR 0xffbc0000
|
||||
|
||||
#define HID_USAGE 0x0000ffff
|
||||
|
||||
#define HID_GD_POINTER 0x00010001
|
||||
#define HID_GD_MOUSE 0x00010002
|
||||
#define HID_GD_JOYSTICK 0x00010004
|
||||
#define HID_GD_GAMEPAD 0x00010005
|
||||
#define HID_GD_KEYBOARD 0x00010006
|
||||
#define HID_GD_KEYPAD 0x00010007
|
||||
#define HID_GD_MULTIAXIS 0x00010008
|
||||
#define HID_GD_X 0x00010030
|
||||
#define HID_GD_Y 0x00010031
|
||||
#define HID_GD_Z 0x00010032
|
||||
#define HID_GD_RX 0x00010033
|
||||
#define HID_GD_RY 0x00010034
|
||||
#define HID_GD_RZ 0x00010035
|
||||
#define HID_GD_SLIDER 0x00010036
|
||||
#define HID_GD_DIAL 0x00010037
|
||||
#define HID_GD_WHEEL 0x00010038
|
||||
#define HID_GD_HATSWITCH 0x00010039
|
||||
#define HID_GD_BUFFER 0x0001003a
|
||||
#define HID_GD_BYTECOUNT 0x0001003b
|
||||
#define HID_GD_MOTION 0x0001003c
|
||||
#define HID_GD_START 0x0001003d
|
||||
#define HID_GD_SELECT 0x0001003e
|
||||
#define HID_GD_VX 0x00010040
|
||||
#define HID_GD_VY 0x00010041
|
||||
#define HID_GD_VZ 0x00010042
|
||||
#define HID_GD_VBRX 0x00010043
|
||||
#define HID_GD_VBRY 0x00010044
|
||||
#define HID_GD_VBRZ 0x00010045
|
||||
#define HID_GD_VNO 0x00010046
|
||||
#define HID_GD_FEATURE 0x00010047
|
||||
#define HID_GD_UP 0x00010090
|
||||
#define HID_GD_DOWN 0x00010091
|
||||
#define HID_GD_RIGHT 0x00010092
|
||||
#define HID_GD_LEFT 0x00010093
|
||||
|
||||
/*
|
||||
* HID report types --- Ouch! HID spec says 1 2 3!
|
||||
*/
|
||||
|
||||
#define HID_INPUT_REPORT 0
|
||||
#define HID_OUTPUT_REPORT 1
|
||||
#define HID_FEATURE_REPORT 2
|
||||
|
||||
/*
|
||||
* HID device quirks.
|
||||
*/
|
||||
|
||||
#define HID_QUIRK_INVERT 0x00000001
|
||||
#define HID_QUIRK_NOTOUCH 0x00000002
|
||||
#define HID_QUIRK_IGNORE 0x00000004
|
||||
#define HID_QUIRK_NOGET 0x00000008
|
||||
#define HID_QUIRK_HIDDEV 0x00000010
|
||||
#define HID_QUIRK_BADPAD 0x00000020
|
||||
#define HID_QUIRK_MULTI_INPUT 0x00000040
|
||||
#define HID_QUIRK_2WHEEL_MOUSE_HACK_7 0x00000080
|
||||
#define HID_QUIRK_2WHEEL_MOUSE_HACK_5 0x00000100
|
||||
#define HID_QUIRK_2WHEEL_MOUSE_HACK_ON 0x00000200
|
||||
#define HID_QUIRK_MIGHTYMOUSE 0x00000400
|
||||
#define HID_QUIRK_CYMOTION 0x00000800
|
||||
#define HID_QUIRK_POWERBOOK_HAS_FN 0x00001000
|
||||
#define HID_QUIRK_POWERBOOK_FN_ON 0x00002000
|
||||
#define HID_QUIRK_INVERT_HWHEEL 0x00004000
|
||||
#define HID_QUIRK_POWERBOOK_ISO_KEYBOARD 0x00008000
|
||||
#define HID_QUIRK_BAD_RELATIVE_KEYS 0x00010000
|
||||
|
||||
/*
|
||||
* This is the global environment of the parser. This information is
|
||||
* persistent for main-items. The global environment can be saved and
|
||||
* restored with PUSH/POP statements.
|
||||
*/
|
||||
|
||||
struct hid_global {
|
||||
unsigned usage_page;
|
||||
__s32 logical_minimum;
|
||||
__s32 logical_maximum;
|
||||
__s32 physical_minimum;
|
||||
__s32 physical_maximum;
|
||||
__s32 unit_exponent;
|
||||
unsigned unit;
|
||||
unsigned report_id;
|
||||
unsigned report_size;
|
||||
unsigned report_count;
|
||||
};
|
||||
|
||||
/*
|
||||
* This is the local environment. It is persistent up the next main-item.
|
||||
*/
|
||||
|
||||
#define HID_MAX_DESCRIPTOR_SIZE 4096
|
||||
#define HID_MAX_USAGES 1024
|
||||
#define HID_DEFAULT_NUM_COLLECTIONS 16
|
||||
|
||||
struct hid_local {
|
||||
unsigned usage[HID_MAX_USAGES]; /* usage array */
|
||||
unsigned collection_index[HID_MAX_USAGES]; /* collection index array */
|
||||
unsigned usage_index;
|
||||
unsigned usage_minimum;
|
||||
unsigned delimiter_depth;
|
||||
unsigned delimiter_branch;
|
||||
};
|
||||
|
||||
/*
|
||||
* This is the collection stack. We climb up the stack to determine
|
||||
* application and function of each field.
|
||||
*/
|
||||
|
||||
struct hid_collection {
|
||||
unsigned type;
|
||||
unsigned usage;
|
||||
unsigned level;
|
||||
};
|
||||
|
||||
struct hid_usage {
|
||||
unsigned hid; /* hid usage code */
|
||||
unsigned collection_index; /* index into collection array */
|
||||
/* hidinput data */
|
||||
__u16 code; /* input driver code */
|
||||
__u8 type; /* input driver type */
|
||||
__s8 hat_min; /* hat switch fun */
|
||||
__s8 hat_max; /* ditto */
|
||||
__s8 hat_dir; /* ditto */
|
||||
};
|
||||
|
||||
struct hid_input;
|
||||
|
||||
struct hid_field {
|
||||
unsigned physical; /* physical usage for this field */
|
||||
unsigned logical; /* logical usage for this field */
|
||||
unsigned application; /* application usage for this field */
|
||||
struct hid_usage *usage; /* usage table for this function */
|
||||
unsigned maxusage; /* maximum usage index */
|
||||
unsigned flags; /* main-item flags (i.e. volatile,array,constant) */
|
||||
unsigned report_offset; /* bit offset in the report */
|
||||
unsigned report_size; /* size of this field in the report */
|
||||
unsigned report_count; /* number of this field in the report */
|
||||
unsigned report_type; /* (input,output,feature) */
|
||||
__s32 *value; /* last known value(s) */
|
||||
__s32 logical_minimum;
|
||||
__s32 logical_maximum;
|
||||
__s32 physical_minimum;
|
||||
__s32 physical_maximum;
|
||||
__s32 unit_exponent;
|
||||
unsigned unit;
|
||||
struct hid_report *report; /* associated report */
|
||||
unsigned index; /* index into report->field[] */
|
||||
/* hidinput data */
|
||||
struct hid_input *hidinput; /* associated input structure */
|
||||
__u16 dpad; /* dpad input code */
|
||||
};
|
||||
|
||||
#define HID_MAX_FIELDS 64
|
||||
|
||||
struct hid_report {
|
||||
struct list_head list;
|
||||
unsigned id; /* id of this report */
|
||||
unsigned type; /* report type */
|
||||
struct hid_field *field[HID_MAX_FIELDS]; /* fields of the report */
|
||||
unsigned maxfield; /* maximum valid field index */
|
||||
unsigned size; /* size of the report (bits) */
|
||||
struct hid_device *device; /* associated device */
|
||||
};
|
||||
|
||||
struct hid_report_enum {
|
||||
unsigned numbered;
|
||||
struct list_head report_list;
|
||||
struct hid_report *report_id_hash[256];
|
||||
};
|
||||
|
||||
#define HID_REPORT_TYPES 3
|
||||
|
||||
#define HID_MIN_BUFFER_SIZE 64 /* make sure there is at least a packet size of space */
|
||||
#define HID_MAX_BUFFER_SIZE 4096 /* 4kb */
|
||||
#define HID_CONTROL_FIFO_SIZE 256 /* to init devices with >100 reports */
|
||||
#define HID_OUTPUT_FIFO_SIZE 64
|
||||
|
||||
struct hid_control_fifo {
|
||||
unsigned char dir;
|
||||
struct hid_report *report;
|
||||
};
|
||||
|
||||
#define HID_CLAIMED_INPUT 1
|
||||
#define HID_CLAIMED_HIDDEV 2
|
||||
|
||||
#define HID_CTRL_RUNNING 1
|
||||
#define HID_OUT_RUNNING 2
|
||||
#define HID_IN_RUNNING 3
|
||||
#define HID_RESET_PENDING 4
|
||||
#define HID_SUSPENDED 5
|
||||
#define HID_CLEAR_HALT 6
|
||||
|
||||
struct hid_input {
|
||||
struct list_head list;
|
||||
struct hid_report *report;
|
||||
struct input_dev *input;
|
||||
};
|
||||
|
||||
struct hid_device { /* device report descriptor */
|
||||
__u8 *rdesc;
|
||||
unsigned rsize;
|
||||
struct hid_collection *collection; /* List of HID collections */
|
||||
unsigned collection_size; /* Number of allocated hid_collections */
|
||||
unsigned maxcollection; /* Number of parsed collections */
|
||||
unsigned maxapplication; /* Number of applications */
|
||||
unsigned short bus; /* BUS ID */
|
||||
unsigned short vendor; /* Vendor ID */
|
||||
unsigned short product; /* Product ID */
|
||||
unsigned version; /* HID version */
|
||||
unsigned country; /* HID country */
|
||||
struct hid_report_enum report_enum[HID_REPORT_TYPES];
|
||||
|
||||
struct device *dev; /* device */
|
||||
|
||||
unsigned claimed; /* Claimed by hidinput, hiddev? */
|
||||
unsigned quirks; /* Various quirks the device can pull on us */
|
||||
|
||||
struct list_head inputs; /* The list of inputs */
|
||||
void *hiddev; /* The hiddev structure */
|
||||
int minor; /* Hiddev minor number */
|
||||
|
||||
wait_queue_head_t wait; /* For sleeping */
|
||||
|
||||
int open; /* is the device open by anyone? */
|
||||
char name[128]; /* Device name */
|
||||
char phys[64]; /* Device physical location */
|
||||
char uniq[64]; /* Device unique identifier (serial #) */
|
||||
|
||||
void *driver_data;
|
||||
|
||||
/* device-specific function pointers */
|
||||
int (*hidinput_input_event) (struct input_dev *, unsigned int, unsigned int, int);
|
||||
int (*hidinput_open) (struct input_dev *);
|
||||
void (*hidinput_close) (struct input_dev *);
|
||||
|
||||
/* hiddev event handler */
|
||||
void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field,
|
||||
struct hid_usage *, __s32);
|
||||
void (*hiddev_report_event) (struct hid_device *, struct hid_report *);
|
||||
#ifdef CONFIG_USB_HIDINPUT_POWERBOOK
|
||||
unsigned int pb_fnmode;
|
||||
unsigned long pb_pressed_fn[NBITS(KEY_MAX)];
|
||||
unsigned long pb_pressed_numlock[NBITS(KEY_MAX)];
|
||||
#endif
|
||||
};
|
||||
|
||||
#define HID_GLOBAL_STACK_SIZE 4
|
||||
#define HID_COLLECTION_STACK_SIZE 4
|
||||
|
||||
struct hid_parser {
|
||||
struct hid_global global;
|
||||
struct hid_global global_stack[HID_GLOBAL_STACK_SIZE];
|
||||
unsigned global_stack_ptr;
|
||||
struct hid_local local;
|
||||
unsigned collection_stack[HID_COLLECTION_STACK_SIZE];
|
||||
unsigned collection_stack_ptr;
|
||||
struct hid_device *device;
|
||||
};
|
||||
|
||||
struct hid_class_descriptor {
|
||||
__u8 bDescriptorType;
|
||||
__u16 wDescriptorLength;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct hid_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
__u16 bcdHID;
|
||||
__u8 bCountryCode;
|
||||
__u8 bNumDescriptors;
|
||||
|
||||
struct hid_class_descriptor desc[1];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#ifdef DEBUG
|
||||
#include "hid-debug.h"
|
||||
#else
|
||||
#define hid_dump_input(a,b) do { } while (0)
|
||||
#define hid_dump_device(c) do { } while (0)
|
||||
#define hid_dump_field(a,b) do { } while (0)
|
||||
#define resolv_usage(a) do { } while (0)
|
||||
#define resolv_event(a,b) do { } while (0)
|
||||
#endif
|
||||
|
||||
/* Applications from HID Usage Tables 4/8/99 Version 1.1 */
|
||||
/* We ignore a few input applications that are not widely used */
|
||||
#define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001))
|
||||
|
||||
/* HID core API */
|
||||
extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
|
||||
extern void hidinput_report_event(struct hid_device *hid, struct hid_report *report);
|
||||
extern int hidinput_connect(struct hid_device *);
|
||||
extern void hidinput_disconnect(struct hid_device *);
|
||||
|
||||
int hid_set_field(struct hid_field *, unsigned, __s32);
|
||||
int hid_input_report(struct hid_device *, int type, u8 *, int, int);
|
||||
int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field);
|
||||
void hid_input_field(struct hid_device *hid, struct hid_field *field, __u8 *data, int interrupt);
|
||||
void hid_output_report(struct hid_report *report, __u8 *data);
|
||||
void hid_free_device(struct hid_device *device);
|
||||
struct hid_device *hid_parse_report(__u8 *start, unsigned size);
|
||||
|
||||
#ifdef CONFIG_HID_FF
|
||||
int hid_ff_init(struct hid_device *hid);
|
||||
|
||||
int hid_lgff_init(struct hid_device *hid);
|
||||
int hid_tmff_init(struct hid_device *hid);
|
||||
int hid_zpff_init(struct hid_device *hid);
|
||||
#ifdef CONFIG_HID_PID
|
||||
int hid_pidff_init(struct hid_device *hid);
|
||||
#else
|
||||
static inline int hid_pidff_init(struct hid_device *hid) { return -ENODEV; }
|
||||
#endif
|
||||
|
||||
#else
|
||||
static inline int hid_ff_init(struct hid_device *hid) { return -1; }
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
#define dbg(format, arg...) printk(KERN_DEBUG "%s: " format "\n" , \
|
||||
__FILE__ , ## arg)
|
||||
#else
|
||||
#define dbg(format, arg...) do {} while (0)
|
||||
#endif
|
||||
|
||||
#define err(format, arg...) printk(KERN_ERR "%s: " format "\n" , \
|
||||
__FILE__ , ## arg)
|
||||
#endif
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <linux/fs.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
|
||||
@@ -41,9 +42,10 @@ static inline void *kmap(struct page *page)
|
||||
|
||||
#define kunmap(page) do { (void) (page); } while (0)
|
||||
|
||||
#define kmap_atomic(page, idx) page_address(page)
|
||||
#define kunmap_atomic(addr, idx) do { } while (0)
|
||||
#define kmap_atomic_pfn(pfn, idx) page_address(pfn_to_page(pfn))
|
||||
#define kmap_atomic(page, idx) \
|
||||
({ pagefault_disable(); page_address(page); })
|
||||
#define kunmap_atomic(addr, idx) do { pagefault_enable(); } while (0)
|
||||
#define kmap_atomic_pfn(pfn, idx) kmap_atomic(pfn_to_page(pfn), (idx))
|
||||
#define kmap_atomic_to_page(ptr) virt_to_page(ptr)
|
||||
#endif
|
||||
|
||||
|
||||
+12
-4
@@ -1,15 +1,23 @@
|
||||
#ifndef LINUX_HTIRQ_H
|
||||
#define LINUX_HTIRQ_H
|
||||
|
||||
struct ht_irq_msg {
|
||||
u32 address_lo; /* low 32 bits of the ht irq message */
|
||||
u32 address_hi; /* high 32 bits of the it irq message */
|
||||
};
|
||||
|
||||
/* Helper functions.. */
|
||||
void write_ht_irq_low(unsigned int irq, u32 data);
|
||||
void write_ht_irq_high(unsigned int irq, u32 data);
|
||||
u32 read_ht_irq_low(unsigned int irq);
|
||||
u32 read_ht_irq_high(unsigned int irq);
|
||||
void fetch_ht_irq_msg(unsigned int irq, struct ht_irq_msg *msg);
|
||||
void write_ht_irq_msg(unsigned int irq, struct ht_irq_msg *msg);
|
||||
void mask_ht_irq(unsigned int irq);
|
||||
void unmask_ht_irq(unsigned int irq);
|
||||
|
||||
/* The arch hook for getting things started */
|
||||
int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev);
|
||||
|
||||
/* For drivers of buggy hardware */
|
||||
typedef void (ht_irq_update_t)(struct pci_dev *dev, int irq,
|
||||
struct ht_irq_msg *msg);
|
||||
int __ht_create_irq(struct pci_dev *dev, int idx, ht_irq_update_t *update);
|
||||
|
||||
#endif /* LINUX_HTIRQ_H */
|
||||
|
||||
@@ -35,6 +35,7 @@ extern int sysctl_hugetlb_shm_group;
|
||||
|
||||
pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr);
|
||||
pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr);
|
||||
int huge_pmd_unshare(struct mm_struct *mm, unsigned long *addr, pte_t *ptep);
|
||||
struct page *follow_huge_addr(struct mm_struct *mm, unsigned long address,
|
||||
int write);
|
||||
struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
|
||||
@@ -60,8 +61,11 @@ void hugetlb_free_pgd_range(struct mmu_gather **tlb, unsigned long addr,
|
||||
* If the arch doesn't supply something else, assume that hugepage
|
||||
* size aligned regions are ok without further preparation.
|
||||
*/
|
||||
static inline int prepare_hugepage_range(unsigned long addr, unsigned long len)
|
||||
static inline int prepare_hugepage_range(unsigned long addr, unsigned long len,
|
||||
pgoff_t pgoff)
|
||||
{
|
||||
if (pgoff & (~HPAGE_MASK >> PAGE_SHIFT))
|
||||
return -EINVAL;
|
||||
if (len & ~HPAGE_MASK)
|
||||
return -EINVAL;
|
||||
if (addr & ~HPAGE_MASK)
|
||||
@@ -69,7 +73,8 @@ static inline int prepare_hugepage_range(unsigned long addr, unsigned long len)
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
int prepare_hugepage_range(unsigned long addr, unsigned long len);
|
||||
int prepare_hugepage_range(unsigned long addr, unsigned long len,
|
||||
pgoff_t pgoff);
|
||||
#endif
|
||||
|
||||
#ifndef ARCH_HAS_SETCLEAR_HUGE_PTE
|
||||
@@ -107,7 +112,7 @@ static inline unsigned long hugetlb_total_pages(void)
|
||||
#define hugetlb_report_meminfo(buf) 0
|
||||
#define hugetlb_report_node_meminfo(n, buf) 0
|
||||
#define follow_huge_pmd(mm, addr, pmd, write) NULL
|
||||
#define prepare_hugepage_range(addr, len) (-EINVAL)
|
||||
#define prepare_hugepage_range(addr,len,pgoff) (-EINVAL)
|
||||
#define pmd_huge(x) 0
|
||||
#define is_hugepage_only_range(mm, addr, len) 0
|
||||
#define hugetlb_free_pgd_range(tlb, addr, end, floor, ceiling) ({BUG(); 0; })
|
||||
|
||||
@@ -26,9 +26,9 @@
|
||||
|
||||
/* --- Defines for bit-adapters --------------------------------------- */
|
||||
/*
|
||||
* This struct contains the hw-dependent functions of bit-style adapters to
|
||||
* This struct contains the hw-dependent functions of bit-style adapters to
|
||||
* manipulate the line states, and to init any hw-specific features. This is
|
||||
* only used if you have more than one hw-type of adapter running.
|
||||
* only used if you have more than one hw-type of adapter running.
|
||||
*/
|
||||
struct i2c_algo_bit_data {
|
||||
void *data; /* private data for lowlevel routines */
|
||||
@@ -44,6 +44,5 @@ struct i2c_algo_bit_data {
|
||||
};
|
||||
|
||||
int i2c_bit_add_bus(struct i2c_adapter *);
|
||||
int i2c_bit_del_bus(struct i2c_adapter *);
|
||||
|
||||
#endif /* _LINUX_I2C_ALGO_BIT_H */
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* i2c-algo-ite.h i2c driver algorithms for ITE IIC adapters */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Copyright (C) 1995-97 Simon G. Vogl
|
||||
1998-99 Hans Berglund
|
||||
|
||||
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. */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even
|
||||
Frodo Looijaard <frodol@dds.nl> */
|
||||
|
||||
/* Modifications by MontaVista Software, 2001
|
||||
Changes made to support the ITE IIC peripheral */
|
||||
|
||||
|
||||
#ifndef I2C_ALGO_ITE_H
|
||||
#define I2C_ALGO_ITE_H 1
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* Example of a sequential read request:
|
||||
struct i2c_iic_msg s_msg;
|
||||
|
||||
s_msg.addr=device_address;
|
||||
s_msg.len=length;
|
||||
s_msg.buf=buffer;
|
||||
s_msg.waddr=word_address;
|
||||
ioctl(file,I2C_SREAD, &s_msg);
|
||||
*/
|
||||
#define I2C_SREAD 0x780 /* SREAD ioctl command */
|
||||
|
||||
struct i2c_iic_msg {
|
||||
__u16 addr; /* device address */
|
||||
__u16 waddr; /* word address */
|
||||
short len; /* msg length */
|
||||
char *buf; /* pointer to msg data */
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct i2c_adapter;
|
||||
|
||||
struct i2c_algo_iic_data {
|
||||
void *data; /* private data for lolevel routines */
|
||||
void (*setiic) (void *data, int ctl, int val);
|
||||
int (*getiic) (void *data, int ctl);
|
||||
int (*getown) (void *data);
|
||||
int (*getclock) (void *data);
|
||||
void (*waitforpin) (void);
|
||||
|
||||
/* local settings */
|
||||
int udelay;
|
||||
int mdelay;
|
||||
int timeout;
|
||||
};
|
||||
|
||||
int i2c_iic_add_bus(struct i2c_adapter *);
|
||||
int i2c_iic_del_bus(struct i2c_adapter *);
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* I2C_ALGO_ITE_H */
|
||||
@@ -10,6 +10,5 @@ struct i2c_algo_pca_data {
|
||||
};
|
||||
|
||||
int i2c_pca_add_bus(struct i2c_adapter *);
|
||||
int i2c_pca_del_bus(struct i2c_adapter *);
|
||||
|
||||
#endif /* _LINUX_I2C_ALGO_PCA_H */
|
||||
|
||||
@@ -31,7 +31,7 @@ struct i2c_algo_pcf_data {
|
||||
int (*getpcf) (void *data, int ctl);
|
||||
int (*getown) (void *data);
|
||||
int (*getclock) (void *data);
|
||||
void (*waitforpin) (void);
|
||||
void (*waitforpin) (void);
|
||||
|
||||
/* local settings */
|
||||
int udelay;
|
||||
@@ -39,6 +39,5 @@ struct i2c_algo_pcf_data {
|
||||
};
|
||||
|
||||
int i2c_pcf_add_bus(struct i2c_adapter *);
|
||||
int i2c_pcf_del_bus(struct i2c_adapter *);
|
||||
|
||||
#endif /* _LINUX_I2C_ALGO_PCF_H */
|
||||
|
||||
@@ -22,6 +22,5 @@ struct i2c_algo_sgi_data {
|
||||
};
|
||||
|
||||
int i2c_sgi_add_bus(struct i2c_adapter *);
|
||||
int i2c_sgi_del_bus(struct i2c_adapter *);
|
||||
|
||||
#endif /* I2C_ALGO_SGI_H */
|
||||
|
||||
+8
-11
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* */
|
||||
/* */
|
||||
/* i2c-id.h - identifier values for i2c drivers and adapters */
|
||||
/* */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Copyright (C) 1995-1999 Simon G. Vogl
|
||||
|
||||
@@ -40,10 +40,10 @@
|
||||
#define I2C_DRIVERID_SAA7120 11 /* video encoder */
|
||||
#define I2C_DRIVERID_SAA7121 12 /* video encoder */
|
||||
#define I2C_DRIVERID_SAA7185B 13 /* video encoder */
|
||||
#define I2C_DRIVERID_CH7003 14 /* digital pc to tv encoder */
|
||||
#define I2C_DRIVERID_CH7003 14 /* digital pc to tv encoder */
|
||||
#define I2C_DRIVERID_PCF8574A 15 /* i2c expander - 8 bit in/out */
|
||||
#define I2C_DRIVERID_PCF8582C 16 /* eeprom */
|
||||
#define I2C_DRIVERID_AT24Cxx 17 /* eeprom 1/2/4/8/16 K */
|
||||
#define I2C_DRIVERID_AT24Cxx 17 /* eeprom 1/2/4/8/16 K */
|
||||
#define I2C_DRIVERID_TEA6300 18 /* audio mixer */
|
||||
#define I2C_DRIVERID_BT829 19 /* pc to tv encoder */
|
||||
#define I2C_DRIVERID_TDA9850 20 /* audio mixer */
|
||||
@@ -82,9 +82,8 @@
|
||||
#define I2C_DRIVERID_STM41T00 52 /* real time clock */
|
||||
#define I2C_DRIVERID_UDA1342 53 /* UDA1342 audio codec */
|
||||
#define I2C_DRIVERID_ADV7170 54 /* video encoder */
|
||||
#define I2C_DRIVERID_RADEON 55 /* I2C bus on Radeon boards */
|
||||
#define I2C_DRIVERID_MAX1617 56 /* temp sensor */
|
||||
#define I2C_DRIVERID_SAA7191 57 /* video encoder */
|
||||
#define I2C_DRIVERID_SAA7191 57 /* video decoder */
|
||||
#define I2C_DRIVERID_INDYCAM 58 /* SGI IndyCam */
|
||||
#define I2C_DRIVERID_BT832 59 /* CMOS camera video processor */
|
||||
#define I2C_DRIVERID_TDA9887 60 /* TDA988x IF-PLL demodulator */
|
||||
@@ -132,7 +131,6 @@
|
||||
#define I2C_DRIVERID_ADM1021 1008
|
||||
#define I2C_DRIVERID_ADM9240 1009
|
||||
#define I2C_DRIVERID_LTC1710 1010
|
||||
#define I2C_DRIVERID_ICSPLL 1012
|
||||
#define I2C_DRIVERID_BT869 1013
|
||||
#define I2C_DRIVERID_MAXILIFE 1014
|
||||
#define I2C_DRIVERID_MATORB 1015
|
||||
@@ -159,12 +157,13 @@
|
||||
#define I2C_DRIVERID_ASB100 1043
|
||||
#define I2C_DRIVERID_FSCHER 1046
|
||||
#define I2C_DRIVERID_W83L785TS 1047
|
||||
#define I2C_DRIVERID_OV7670 1048 /* Omnivision 7670 camera */
|
||||
|
||||
/*
|
||||
* ---- Adapter types ----------------------------------------------------
|
||||
*/
|
||||
|
||||
/* --- Bit algorithm adapters */
|
||||
/* --- Bit algorithm adapters */
|
||||
#define I2C_HW_B_LP 0x010000 /* Parallel port Philips style */
|
||||
#define I2C_HW_B_SER 0x010002 /* Serial line interface */
|
||||
#define I2C_HW_B_BT848 0x010005 /* BT848 video boards */
|
||||
@@ -212,9 +211,6 @@
|
||||
/* --- MPC8xx PowerPC adapters */
|
||||
#define I2C_HW_MPC8XX_EPON 0x110000 /* Eponymous MPC8xx I2C adapter */
|
||||
|
||||
/* --- ITE based algorithms */
|
||||
#define I2C_HW_I_IIC 0x080000 /* controller on the ITE */
|
||||
|
||||
/* --- PowerPC on-chip adapters */
|
||||
#define I2C_HW_OCP 0x120000 /* IBM on-chip I2C adapter */
|
||||
|
||||
@@ -250,6 +246,7 @@
|
||||
#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 */
|
||||
#define I2C_HW_SMBUS_CAFE 0x040012 /* Marvell 88ALP01 "CAFE" cam */
|
||||
|
||||
/* --- ISA pseudo-adapter */
|
||||
#define I2C_HW_ISA 0x050000
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Header file for I2C support on PNX010x/4008.
|
||||
*
|
||||
* Author: Dennis Kovalev <dkovalev@ru.mvista.com>
|
||||
*
|
||||
* 2004-2006 (c) MontaVista Software, Inc. This file is licensed under
|
||||
* the terms of the GNU General Public License version 2. This program
|
||||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*/
|
||||
|
||||
#ifndef __I2C_PNX_H__
|
||||
#define __I2C_PNX_H__
|
||||
|
||||
#include <asm/arch/i2c.h>
|
||||
|
||||
struct i2c_pnx_mif {
|
||||
int ret; /* Return value */
|
||||
int mode; /* Interface mode */
|
||||
struct completion complete; /* I/O completion */
|
||||
struct timer_list timer; /* Timeout */
|
||||
char * buf; /* Data buffer */
|
||||
int len; /* Length of data buffer */
|
||||
};
|
||||
|
||||
struct i2c_pnx_algo_data {
|
||||
u32 base;
|
||||
u32 ioaddr;
|
||||
int irq;
|
||||
struct i2c_pnx_mif mif;
|
||||
int last;
|
||||
};
|
||||
|
||||
struct i2c_pnx_data {
|
||||
int (*suspend) (struct platform_device *pdev, pm_message_t state);
|
||||
int (*resume) (struct platform_device *pdev);
|
||||
u32 (*calculate_input_freq) (struct platform_device *pdev);
|
||||
int (*set_clock_run) (struct platform_device *pdev);
|
||||
int (*set_clock_stop) (struct platform_device *pdev);
|
||||
struct i2c_adapter *adapter;
|
||||
};
|
||||
|
||||
#endif /* __I2C_PNX_H__ */
|
||||
@@ -1,29 +1,6 @@
|
||||
#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,
|
||||
@@ -37,12 +14,4 @@ struct i2c_slave_client {
|
||||
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 */
|
||||
|
||||
+38
-37
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* */
|
||||
/* */
|
||||
/* i2c.h - definitions for the i2c-bus interface */
|
||||
/* */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Copyright (C) 1995-2000 Simon G. Vogl
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
#define _LINUX_I2C_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#ifdef __KERNEL__
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/module.h>
|
||||
#include <linux/i2c-id.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
@@ -53,8 +53,8 @@ union i2c_smbus_data;
|
||||
|
||||
/*
|
||||
* The master routines are the ones normally used to transmit data to devices
|
||||
* on a bus (or read from them). Apart from two basic transfer functions to
|
||||
* transmit one message at a time, a more complex version can be used to
|
||||
* on a bus (or read from them). Apart from two basic transfer functions to
|
||||
* transmit one message at a time, a more complex version can be used to
|
||||
* transmit an arbitrary number of messages without interruption.
|
||||
*/
|
||||
extern int i2c_master_send(struct i2c_client *,const char* ,int);
|
||||
@@ -67,10 +67,10 @@ extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
|
||||
|
||||
/* This is the very generalized SMBus access routine. You probably do not
|
||||
want to use this, though; one of the functions below may be much easier,
|
||||
and probably just as fast.
|
||||
and probably just as fast.
|
||||
Note that we use i2c_adapter here, because you do not need a specific
|
||||
smbus adapter to call this function. */
|
||||
extern s32 i2c_smbus_xfer (struct i2c_adapter * adapter, u16 addr,
|
||||
extern s32 i2c_smbus_xfer (struct i2c_adapter * adapter, u16 addr,
|
||||
unsigned short flags,
|
||||
char read_write, u8 command, int size,
|
||||
union i2c_smbus_data * data);
|
||||
@@ -112,14 +112,14 @@ struct i2c_driver {
|
||||
|
||||
/* Notifies the driver that a new bus has appeared. This routine
|
||||
* can be used by the driver to test if the bus meets its conditions
|
||||
* & seek for the presence of the chip(s) it supports. If found, it
|
||||
* & seek for the presence of the chip(s) it supports. If found, it
|
||||
* registers the client(s) that are on the bus to the i2c admin. via
|
||||
* i2c_attach_client.
|
||||
*/
|
||||
int (*attach_adapter)(struct i2c_adapter *);
|
||||
int (*detach_adapter)(struct i2c_adapter *);
|
||||
|
||||
/* tells the driver that a client is about to be deleted & gives it
|
||||
/* tells the driver that a client is about to be deleted & gives it
|
||||
* the chance to remove its private data. Also, if the client struct
|
||||
* has been dynamically allocated by the driver in the function above,
|
||||
* it must be freed here.
|
||||
@@ -139,13 +139,13 @@ struct i2c_driver {
|
||||
#define I2C_NAME_SIZE 50
|
||||
|
||||
/*
|
||||
* i2c_client identifies a single device (i.e. chip) that is connected to an
|
||||
* i2c_client identifies a single device (i.e. chip) that is connected to an
|
||||
* i2c bus. The behaviour is defined by the routines of the driver. This
|
||||
* function is mainly used for lookup & other admin. functions.
|
||||
*/
|
||||
struct i2c_client {
|
||||
unsigned int flags; /* div., see below */
|
||||
unsigned short addr; /* chip address - NOTE: 7bit */
|
||||
unsigned short addr; /* chip address - NOTE: 7bit */
|
||||
/* addresses are stored in the */
|
||||
/* _LOWER_ 7 bits */
|
||||
struct i2c_adapter *adapter; /* the adapter we sit on */
|
||||
@@ -182,14 +182,14 @@ static inline void i2c_set_clientdata (struct i2c_client *dev, void *data)
|
||||
*/
|
||||
struct i2c_algorithm {
|
||||
/* If an adapter algorithm can't do I2C-level access, set master_xfer
|
||||
to NULL. If an adapter algorithm can do SMBus access, set
|
||||
to NULL. If an adapter algorithm can do SMBus access, set
|
||||
smbus_xfer. If set to NULL, the SMBus protocol is simulated
|
||||
using common I2C messages */
|
||||
/* master_xfer should return the number of messages successfully
|
||||
processed, or a negative value on error */
|
||||
int (*master_xfer)(struct i2c_adapter *adap,struct i2c_msg *msgs,
|
||||
int (*master_xfer)(struct i2c_adapter *adap,struct i2c_msg *msgs,
|
||||
int num);
|
||||
int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,
|
||||
int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,
|
||||
unsigned short flags, char read_write,
|
||||
u8 command, int size, union i2c_smbus_data * data);
|
||||
|
||||
@@ -216,6 +216,7 @@ struct i2c_adapter {
|
||||
int (*client_unregister)(struct i2c_client *);
|
||||
|
||||
/* data fields that are valid for all devices */
|
||||
u8 level; /* nesting level for lockdep */
|
||||
struct mutex bus_lock;
|
||||
struct mutex clist_lock;
|
||||
|
||||
@@ -316,7 +317,7 @@ extern int i2c_check_addr (struct i2c_adapter *adapter, int addr);
|
||||
* It will only call found_proc if some client is connected at the
|
||||
* specific address (unless a 'force' matched);
|
||||
*/
|
||||
extern int i2c_probe(struct i2c_adapter *adapter,
|
||||
extern int i2c_probe(struct i2c_adapter *adapter,
|
||||
struct i2c_client_address_data *address_data,
|
||||
int (*found_proc) (struct i2c_adapter *, int, int));
|
||||
|
||||
@@ -352,15 +353,15 @@ static inline int i2c_adapter_id(struct i2c_adapter *adap)
|
||||
*/
|
||||
struct i2c_msg {
|
||||
__u16 addr; /* slave address */
|
||||
__u16 flags;
|
||||
__u16 flags;
|
||||
#define I2C_M_TEN 0x10 /* we have a ten bit chip address */
|
||||
#define I2C_M_RD 0x01
|
||||
#define I2C_M_NOSTART 0x4000
|
||||
#define I2C_M_REV_DIR_ADDR 0x2000
|
||||
#define I2C_M_IGNORE_NAK 0x1000
|
||||
#define I2C_M_NO_RD_ACK 0x0800
|
||||
__u16 len; /* msg length */
|
||||
__u8 *buf; /* pointer to msg data */
|
||||
__u16 len; /* msg length */
|
||||
__u8 *buf; /* pointer to msg data */
|
||||
};
|
||||
|
||||
/* To determine what functionality is present */
|
||||
@@ -370,16 +371,16 @@ struct i2c_msg {
|
||||
#define I2C_FUNC_PROTOCOL_MANGLING 0x00000004 /* I2C_M_{REV_DIR_ADDR,NOSTART,..} */
|
||||
#define I2C_FUNC_SMBUS_HWPEC_CALC 0x00000008 /* SMBus 2.0 */
|
||||
#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 /* SMBus 2.0 */
|
||||
#define I2C_FUNC_SMBUS_QUICK 0x00010000
|
||||
#define I2C_FUNC_SMBUS_READ_BYTE 0x00020000
|
||||
#define I2C_FUNC_SMBUS_WRITE_BYTE 0x00040000
|
||||
#define I2C_FUNC_SMBUS_READ_BYTE_DATA 0x00080000
|
||||
#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA 0x00100000
|
||||
#define I2C_FUNC_SMBUS_READ_WORD_DATA 0x00200000
|
||||
#define I2C_FUNC_SMBUS_WRITE_WORD_DATA 0x00400000
|
||||
#define I2C_FUNC_SMBUS_PROC_CALL 0x00800000
|
||||
#define I2C_FUNC_SMBUS_READ_BLOCK_DATA 0x01000000
|
||||
#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000
|
||||
#define I2C_FUNC_SMBUS_QUICK 0x00010000
|
||||
#define I2C_FUNC_SMBUS_READ_BYTE 0x00020000
|
||||
#define I2C_FUNC_SMBUS_WRITE_BYTE 0x00040000
|
||||
#define I2C_FUNC_SMBUS_READ_BYTE_DATA 0x00080000
|
||||
#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA 0x00100000
|
||||
#define I2C_FUNC_SMBUS_READ_WORD_DATA 0x00200000
|
||||
#define I2C_FUNC_SMBUS_WRITE_WORD_DATA 0x00400000
|
||||
#define I2C_FUNC_SMBUS_PROC_CALL 0x00800000
|
||||
#define I2C_FUNC_SMBUS_READ_BLOCK_DATA 0x01000000
|
||||
#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000
|
||||
#define I2C_FUNC_SMBUS_READ_I2C_BLOCK 0x04000000 /* I2C-like block xfer */
|
||||
#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 /* w/ 1-byte reg. addr. */
|
||||
#define I2C_FUNC_SMBUS_READ_I2C_BLOCK_2 0x10000000 /* I2C-like block xfer */
|
||||
@@ -406,10 +407,10 @@ struct i2c_msg {
|
||||
I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \
|
||||
I2C_FUNC_SMBUS_I2C_BLOCK)
|
||||
|
||||
/*
|
||||
* Data for SMBus Messages
|
||||
/*
|
||||
* Data for SMBus Messages
|
||||
*/
|
||||
#define I2C_SMBUS_BLOCK_MAX 32 /* As specified in SMBus standard */
|
||||
#define I2C_SMBUS_BLOCK_MAX 32 /* As specified in SMBus standard */
|
||||
union i2c_smbus_data {
|
||||
__u8 byte;
|
||||
__u16 word;
|
||||
@@ -421,11 +422,11 @@ union i2c_smbus_data {
|
||||
#define I2C_SMBUS_READ 1
|
||||
#define I2C_SMBUS_WRITE 0
|
||||
|
||||
/* SMBus transaction types (size parameter in the above functions)
|
||||
/* SMBus transaction types (size parameter in the above functions)
|
||||
Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */
|
||||
#define I2C_SMBUS_QUICK 0
|
||||
#define I2C_SMBUS_BYTE 1
|
||||
#define I2C_SMBUS_BYTE_DATA 2
|
||||
#define I2C_SMBUS_BYTE_DATA 2
|
||||
#define I2C_SMBUS_WORD_DATA 3
|
||||
#define I2C_SMBUS_PROC_CALL 4
|
||||
#define I2C_SMBUS_BLOCK_DATA 5
|
||||
@@ -434,15 +435,15 @@ union i2c_smbus_data {
|
||||
|
||||
|
||||
/* ----- commands for the ioctl like i2c_command call:
|
||||
* note that additional calls are defined in the algorithm and hw
|
||||
* dependent layers - these can be listed here, or see the
|
||||
* note that additional calls are defined in the algorithm and hw
|
||||
* dependent layers - these can be listed here, or see the
|
||||
* corresponding header files.
|
||||
*/
|
||||
/* -> bit-adapter specific ioctls */
|
||||
#define I2C_RETRIES 0x0701 /* number of times a device address */
|
||||
/* should be polled when not */
|
||||
/* acknowledging */
|
||||
#define I2C_TIMEOUT 0x0702 /* set timeout - call with int */
|
||||
/* acknowledging */
|
||||
#define I2C_TIMEOUT 0x0702 /* set timeout - call with int */
|
||||
|
||||
|
||||
/* this is for i2c-dev.c */
|
||||
|
||||
+13
-9
@@ -461,7 +461,7 @@ struct i2o_driver {
|
||||
int (*reply) (struct i2o_controller *, u32, struct i2o_message *);
|
||||
|
||||
/* Event handler */
|
||||
void (*event) (struct i2o_event *);
|
||||
work_func_t event;
|
||||
|
||||
struct workqueue_struct *event_queue; /* Event queue */
|
||||
|
||||
@@ -490,7 +490,7 @@ struct i2o_dma {
|
||||
*/
|
||||
struct i2o_pool {
|
||||
char *name;
|
||||
kmem_cache_t *slab;
|
||||
struct kmem_cache *slab;
|
||||
mempool_t *mempool;
|
||||
};
|
||||
|
||||
@@ -986,7 +986,8 @@ extern void i2o_driver_unregister(struct i2o_driver *);
|
||||
|
||||
/**
|
||||
* i2o_driver_notify_controller_add - Send notification of added controller
|
||||
* to a single I2O driver
|
||||
* @drv: I2O driver
|
||||
* @c: I2O controller
|
||||
*
|
||||
* Send notification of added controller to a single registered driver.
|
||||
*/
|
||||
@@ -998,8 +999,9 @@ static inline void i2o_driver_notify_controller_add(struct i2o_driver *drv,
|
||||
};
|
||||
|
||||
/**
|
||||
* i2o_driver_notify_controller_remove - Send notification of removed
|
||||
* controller to a single I2O driver
|
||||
* i2o_driver_notify_controller_remove - Send notification of removed controller
|
||||
* @drv: I2O driver
|
||||
* @c: I2O controller
|
||||
*
|
||||
* Send notification of removed controller to a single registered driver.
|
||||
*/
|
||||
@@ -1011,8 +1013,9 @@ static inline void i2o_driver_notify_controller_remove(struct i2o_driver *drv,
|
||||
};
|
||||
|
||||
/**
|
||||
* i2o_driver_notify_device_add - Send notification of added device to a
|
||||
* single I2O driver
|
||||
* i2o_driver_notify_device_add - Send notification of added device
|
||||
* @drv: I2O driver
|
||||
* @i2o_dev: the added i2o_device
|
||||
*
|
||||
* Send notification of added device to a single registered driver.
|
||||
*/
|
||||
@@ -1025,7 +1028,8 @@ static inline void i2o_driver_notify_device_add(struct i2o_driver *drv,
|
||||
|
||||
/**
|
||||
* i2o_driver_notify_device_remove - Send notification of removed device
|
||||
* to a single I2O driver
|
||||
* @drv: I2O driver
|
||||
* @i2o_dev: the added i2o_device
|
||||
*
|
||||
* Send notification of removed device to a single registered driver.
|
||||
*/
|
||||
@@ -1148,7 +1152,7 @@ static inline void i2o_msg_post(struct i2o_controller *c,
|
||||
/**
|
||||
* i2o_msg_post_wait - Post and wait a message and wait until return
|
||||
* @c: controller
|
||||
* @m: message to post
|
||||
* @msg: message to post
|
||||
* @timeout: time in seconds to wait
|
||||
*
|
||||
* This API allows an OSM to post a message and then be told whether or
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
struct icmphdr {
|
||||
__u8 type;
|
||||
__u8 code;
|
||||
__be16 checksum;
|
||||
__sum16 checksum;
|
||||
union {
|
||||
struct {
|
||||
__be16 id;
|
||||
|
||||
@@ -7,17 +7,17 @@ struct icmp6hdr {
|
||||
|
||||
__u8 icmp6_type;
|
||||
__u8 icmp6_code;
|
||||
__u16 icmp6_cksum;
|
||||
__sum16 icmp6_cksum;
|
||||
|
||||
|
||||
union {
|
||||
__u32 un_data32[1];
|
||||
__u16 un_data16[2];
|
||||
__be32 un_data32[1];
|
||||
__be16 un_data16[2];
|
||||
__u8 un_data8[4];
|
||||
|
||||
struct icmpv6_echo {
|
||||
__u16 identifier;
|
||||
__u16 sequence;
|
||||
__be16 identifier;
|
||||
__be16 sequence;
|
||||
} u_echo;
|
||||
|
||||
struct icmpv6_nd_advt {
|
||||
@@ -53,7 +53,7 @@ struct icmp6hdr {
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
__u16 rt_lifetime;
|
||||
__be16 rt_lifetime;
|
||||
} u_nd_ra;
|
||||
|
||||
} icmp6_dataun;
|
||||
|
||||
+1
-2
@@ -796,6 +796,7 @@ typedef struct hwif_s {
|
||||
unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */
|
||||
unsigned no_io_32bit : 1; /* 1 = can not do 32-bit IO ops */
|
||||
unsigned err_stops_fifo : 1; /* 1=data FIFO is cleared by an error */
|
||||
unsigned atapi_irq_bogon : 1; /* Generates spurious DMA interrupts in PIO mode */
|
||||
|
||||
struct device gendev;
|
||||
struct completion gendev_rel_comp; /* To deal with device release() */
|
||||
@@ -803,8 +804,6 @@ typedef struct hwif_s {
|
||||
void *hwif_data; /* extra hwif data */
|
||||
|
||||
unsigned dma;
|
||||
|
||||
void (*led_act)(void *data, int rw);
|
||||
} ____cacheline_internodealigned_in_smp ide_hwif_t;
|
||||
|
||||
/*
|
||||
|
||||
@@ -52,4 +52,10 @@ struct ifa_cacheinfo
|
||||
__u32 tstamp; /* updated timestamp, hundredths of seconds */
|
||||
};
|
||||
|
||||
/* backwards compatibility for userspace */
|
||||
#ifndef __KERNEL__
|
||||
#define IFA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
|
||||
#define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg))
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -82,6 +82,12 @@ enum
|
||||
|
||||
#define IFLA_MAX (__IFLA_MAX - 1)
|
||||
|
||||
/* backwards compatibility for userspace */
|
||||
#ifndef __KERNEL__
|
||||
#define IFLA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
|
||||
#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
|
||||
#endif
|
||||
|
||||
/* ifi_flags.
|
||||
|
||||
IFF_* flags.
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
#ifndef __LINUX_IF_PACKET_H
|
||||
#define __LINUX_IF_PACKET_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct sockaddr_pkt
|
||||
{
|
||||
unsigned short spkt_family;
|
||||
unsigned char spkt_device[14];
|
||||
unsigned short spkt_protocol;
|
||||
__be16 spkt_protocol;
|
||||
};
|
||||
|
||||
struct sockaddr_ll
|
||||
{
|
||||
unsigned short sll_family;
|
||||
unsigned short sll_protocol;
|
||||
__be16 sll_protocol;
|
||||
int sll_ifindex;
|
||||
unsigned short sll_hatype;
|
||||
unsigned char sll_pkttype;
|
||||
|
||||
@@ -19,10 +19,10 @@ struct ip_tunnel_parm
|
||||
{
|
||||
char name[IFNAMSIZ];
|
||||
int link;
|
||||
__u16 i_flags;
|
||||
__u16 o_flags;
|
||||
__u32 i_key;
|
||||
__u32 o_key;
|
||||
__be16 i_flags;
|
||||
__be16 o_flags;
|
||||
__be32 i_key;
|
||||
__be32 o_key;
|
||||
struct iphdr iph;
|
||||
};
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ struct igmphdr
|
||||
{
|
||||
__u8 type;
|
||||
__u8 code; /* For newer IGMP */
|
||||
__be16 csum;
|
||||
__sum16 csum;
|
||||
__be32 group;
|
||||
};
|
||||
|
||||
@@ -127,6 +127,7 @@ struct igmpv3_query {
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/in.h>
|
||||
|
||||
extern int sysctl_igmp_max_memberships;
|
||||
@@ -191,7 +192,7 @@ struct ip_mc_list
|
||||
#define IGMPV3_MASK(value, nb) ((nb)>=32 ? (value) : ((1<<(nb))-1) & (value))
|
||||
#define IGMPV3_EXP(thresh, nbmant, nbexp, value) \
|
||||
((value) < (thresh) ? (value) : \
|
||||
((IGMPV3_MASK(value, nbmant) | (1<<(nbmant+nbexp))) << \
|
||||
((IGMPV3_MASK(value, nbmant) | (1<<(nbmant))) << \
|
||||
(IGMPV3_MASK((value) >> (nbmant), nbexp) + (nbexp))))
|
||||
|
||||
#define IGMPV3_QQIC(value) IGMPV3_EXP(0x80, 4, 3, value)
|
||||
|
||||
@@ -45,6 +45,7 @@ enum {
|
||||
|
||||
IPPROTO_COMP = 108, /* Compression Header protocol */
|
||||
IPPROTO_SCTP = 132, /* Stream Control Transport Protocol */
|
||||
IPPROTO_UDPLITE = 136, /* UDP-Lite (RFC 3828) */
|
||||
|
||||
IPPROTO_RAW = 255, /* Raw IP packets */
|
||||
IPPROTO_MAX
|
||||
|
||||
+13
-3
@@ -54,7 +54,7 @@ extern const struct in6_addr in6addr_loopback;
|
||||
struct sockaddr_in6 {
|
||||
unsigned short int sin6_family; /* AF_INET6 */
|
||||
__be16 sin6_port; /* Transport layer port # */
|
||||
__u32 sin6_flowinfo; /* IPv6 flow information */
|
||||
__be32 sin6_flowinfo; /* IPv6 flow information */
|
||||
struct in6_addr sin6_addr; /* IPv6 address */
|
||||
__u32 sin6_scope_id; /* scope id (new in RFC2553) */
|
||||
};
|
||||
@@ -72,7 +72,7 @@ struct ipv6_mreq {
|
||||
struct in6_flowlabel_req
|
||||
{
|
||||
struct in6_addr flr_dst;
|
||||
__u32 flr_label;
|
||||
__be32 flr_label;
|
||||
__u8 flr_action;
|
||||
__u8 flr_share;
|
||||
__u16 flr_flags;
|
||||
@@ -225,7 +225,7 @@ struct in6_flowlabel_req
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Netfilter
|
||||
* Netfilter (1)
|
||||
*
|
||||
* Following socket options are used in ip6_tables;
|
||||
* see include/linux/netfilter_ipv6/ip6_tables.h.
|
||||
@@ -240,4 +240,14 @@ struct in6_flowlabel_req
|
||||
#define IPV6_RECVTCLASS 66
|
||||
#define IPV6_TCLASS 67
|
||||
|
||||
/*
|
||||
* Netfilter (2)
|
||||
*
|
||||
* Following socket options are used in ip6_tables;
|
||||
* see include/linux/netfilter_ipv6/ip6_tables.h.
|
||||
*
|
||||
* IP6T_SO_GET_REVISION_MATCH 68
|
||||
* IP6T_SO_GET_REVISION_TARGET 69
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
#include <linux/types.h>
|
||||
|
||||
extern __be32 in_aton(const char *str);
|
||||
extern int in4_pton(const char *src, int srclen, u8 *dst, char delim, const char **end);
|
||||
extern int in6_pton(const char *src, int srclen, u8 *dst, char delim, const char **end);
|
||||
extern int in4_pton(const char *src, int srclen, u8 *dst, int delim, const char **end);
|
||||
extern int in6_pton(const char *src, int srclen, u8 *dst, int delim, const char **end);
|
||||
#endif
|
||||
#endif /* _LINUX_INET_H */
|
||||
|
||||
@@ -124,12 +124,13 @@ static __inline__ int inet_ifa_match(__be32 addr, struct in_ifaddr *ifa)
|
||||
* Check if a mask is acceptable.
|
||||
*/
|
||||
|
||||
static __inline__ int bad_mask(u32 mask, u32 addr)
|
||||
static __inline__ int bad_mask(__be32 mask, __be32 addr)
|
||||
{
|
||||
__u32 hmask;
|
||||
if (addr & (mask = ~mask))
|
||||
return 1;
|
||||
mask = ntohl(mask);
|
||||
if (mask & (mask+1))
|
||||
hmask = ntohl(mask);
|
||||
if (hmask & (hmask+1))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
@@ -190,11 +191,12 @@ static __inline__ __be32 inet_make_mask(int logmask)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static __inline__ int inet_mask_len(__u32 mask)
|
||||
static __inline__ int inet_mask_len(__be32 mask)
|
||||
{
|
||||
if (!(mask = ntohl(mask)))
|
||||
__u32 hmask = ntohl(mask);
|
||||
if (!hmask)
|
||||
return 0;
|
||||
return 32 - ffz(~mask);
|
||||
return 32 - ffz(~hmask);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+28
-9
@@ -84,19 +84,38 @@ extern void setup_arch(char **);
|
||||
* by link order.
|
||||
* For backwards compatibility, initcall() puts the call in
|
||||
* the device init subsection.
|
||||
*
|
||||
* The `id' arg to __define_initcall() is needed so that multiple initcalls
|
||||
* can point at the same handler without causing duplicate-symbol build errors.
|
||||
*/
|
||||
|
||||
#define __define_initcall(level,fn) \
|
||||
static initcall_t __initcall_##fn __attribute_used__ \
|
||||
#define __define_initcall(level,fn,id) \
|
||||
static initcall_t __initcall_##fn##id __attribute_used__ \
|
||||
__attribute__((__section__(".initcall" level ".init"))) = fn
|
||||
|
||||
#define core_initcall(fn) __define_initcall("1",fn)
|
||||
#define postcore_initcall(fn) __define_initcall("2",fn)
|
||||
#define arch_initcall(fn) __define_initcall("3",fn)
|
||||
#define subsys_initcall(fn) __define_initcall("4",fn)
|
||||
#define fs_initcall(fn) __define_initcall("5",fn)
|
||||
#define device_initcall(fn) __define_initcall("6",fn)
|
||||
#define late_initcall(fn) __define_initcall("7",fn)
|
||||
/*
|
||||
* A "pure" initcall has no dependencies on anything else, and purely
|
||||
* initializes variables that couldn't be statically initialized.
|
||||
*
|
||||
* This only exists for built-in code, not for modules.
|
||||
*/
|
||||
#define pure_initcall(fn) __define_initcall("0",fn,1)
|
||||
|
||||
#define core_initcall(fn) __define_initcall("1",fn,1)
|
||||
#define core_initcall_sync(fn) __define_initcall("1s",fn,1s)
|
||||
#define postcore_initcall(fn) __define_initcall("2",fn,2)
|
||||
#define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s)
|
||||
#define arch_initcall(fn) __define_initcall("3",fn,3)
|
||||
#define arch_initcall_sync(fn) __define_initcall("3s",fn,3s)
|
||||
#define subsys_initcall(fn) __define_initcall("4",fn,4)
|
||||
#define subsys_initcall_sync(fn) __define_initcall("4s",fn,4s)
|
||||
#define fs_initcall(fn) __define_initcall("5",fn,5)
|
||||
#define fs_initcall_sync(fn) __define_initcall("5s",fn,5s)
|
||||
#define rootfs_initcall(fn) __define_initcall("rootfs",fn,rootfs)
|
||||
#define device_initcall(fn) __define_initcall("6",fn,6)
|
||||
#define device_initcall_sync(fn) __define_initcall("6s",fn,6s)
|
||||
#define late_initcall(fn) __define_initcall("7",fn,7)
|
||||
#define late_initcall_sync(fn) __define_initcall("7s",fn,7s)
|
||||
|
||||
#define __initcall(fn) device_initcall(fn)
|
||||
|
||||
|
||||
@@ -7,16 +7,15 @@
|
||||
#include <linux/utsname.h>
|
||||
#include <linux/lockdep.h>
|
||||
#include <linux/ipc.h>
|
||||
#include <linux/pid_namespace.h>
|
||||
|
||||
#define INIT_FDTABLE \
|
||||
{ \
|
||||
.max_fds = NR_OPEN_DEFAULT, \
|
||||
.max_fdset = EMBEDDED_FD_SET_SIZE, \
|
||||
.fd = &init_files.fd_array[0], \
|
||||
.close_on_exec = (fd_set *)&init_files.close_on_exec_init, \
|
||||
.open_fds = (fd_set *)&init_files.open_fds_init, \
|
||||
.rcu = RCU_HEAD_INIT, \
|
||||
.free_files = NULL, \
|
||||
.next = NULL, \
|
||||
}
|
||||
|
||||
@@ -57,25 +56,28 @@
|
||||
.cpu_vm_mask = CPU_MASK_ALL, \
|
||||
}
|
||||
|
||||
#define INIT_SIGNALS(sig) { \
|
||||
.count = ATOMIC_INIT(1), \
|
||||
#define INIT_SIGNALS(sig) { \
|
||||
.count = ATOMIC_INIT(1), \
|
||||
.wait_chldexit = __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),\
|
||||
.shared_pending = { \
|
||||
.shared_pending = { \
|
||||
.list = LIST_HEAD_INIT(sig.shared_pending.list), \
|
||||
.signal = {{0}}}, \
|
||||
.signal = {{0}}}, \
|
||||
.posix_timers = LIST_HEAD_INIT(sig.posix_timers), \
|
||||
.cpu_timers = INIT_CPU_TIMERS(sig.cpu_timers), \
|
||||
.rlim = INIT_RLIMITS, \
|
||||
.pgrp = 1, \
|
||||
.session = 1, \
|
||||
.tty_old_pgrp = 0, \
|
||||
{ .__session = 1}, \
|
||||
}
|
||||
|
||||
extern struct nsproxy init_nsproxy;
|
||||
#define INIT_NSPROXY(nsproxy) { \
|
||||
.pid_ns = &init_pid_ns, \
|
||||
.count = ATOMIC_INIT(1), \
|
||||
.nslock = SPIN_LOCK_UNLOCKED, \
|
||||
.nslock = __SPIN_LOCK_UNLOCKED(nsproxy.nslock), \
|
||||
.id = 0, \
|
||||
.uts_ns = &init_uts_ns, \
|
||||
.namespace = NULL, \
|
||||
.mnt_ns = NULL, \
|
||||
INIT_IPC_NS(ipc_ns) \
|
||||
}
|
||||
|
||||
|
||||
@@ -663,7 +663,7 @@ struct input_absinfo {
|
||||
#define BUS_GSC 0x1A
|
||||
|
||||
/*
|
||||
* Values describing the status of an effect
|
||||
* Values describing the status of a force-feedback effect
|
||||
*/
|
||||
#define FF_STATUS_STOPPED 0x00
|
||||
#define FF_STATUS_PLAYING 0x01
|
||||
@@ -680,7 +680,7 @@ struct input_absinfo {
|
||||
*/
|
||||
|
||||
/**
|
||||
* struct ff_replay - defines scheduling of the effect
|
||||
* struct ff_replay - defines scheduling of the force-feedback effect
|
||||
* @length: duration of the effect
|
||||
* @delay: delay before effect should start playing
|
||||
*/
|
||||
@@ -690,7 +690,7 @@ struct ff_replay {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ff_trigger - defines what triggers the effect
|
||||
* struct ff_trigger - defines what triggers the force-feedback effect
|
||||
* @button: number of the button triggering the effect
|
||||
* @interval: controls how soon the effect can be re-triggered
|
||||
*/
|
||||
@@ -700,7 +700,7 @@ struct ff_trigger {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ff_envelope - generic effect envelope
|
||||
* struct ff_envelope - generic force-feedback effect envelope
|
||||
* @attack_length: duration of the attack (ms)
|
||||
* @attack_level: level at the beginning of the attack
|
||||
* @fade_length: duration of fade (ms)
|
||||
@@ -719,7 +719,7 @@ struct ff_envelope {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ff_constant_effect - defines parameters of a constant effect
|
||||
* struct ff_constant_effect - defines parameters of a constant force-feedback effect
|
||||
* @level: strength of the effect; may be negative
|
||||
* @envelope: envelope data
|
||||
*/
|
||||
@@ -729,7 +729,7 @@ struct ff_constant_effect {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ff_ramp_effect - defines parameters of a ramp effect
|
||||
* struct ff_ramp_effect - defines parameters of a ramp force-feedback effect
|
||||
* @start_level: beginning strength of the effect; may be negative
|
||||
* @end_level: final strength of the effect; may be negative
|
||||
* @envelope: envelope data
|
||||
@@ -741,7 +741,7 @@ struct ff_ramp_effect {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ff_condition_effect - defines a spring or friction effect
|
||||
* struct ff_condition_effect - defines a spring or friction force-feedback effect
|
||||
* @right_saturation: maximum level when joystick moved all way to the right
|
||||
* @left_saturation: same for the left side
|
||||
* @right_coeff: controls how fast the force grows when the joystick moves
|
||||
@@ -762,7 +762,7 @@ struct ff_condition_effect {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ff_periodic_effect - defines parameters of a periodic effect
|
||||
* struct ff_periodic_effect - defines parameters of a periodic force-feedback effect
|
||||
* @waveform: kind of the effect (wave)
|
||||
* @period: period of the wave (ms)
|
||||
* @magnitude: peak value
|
||||
@@ -793,7 +793,7 @@ struct ff_periodic_effect {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ff_rumble_effect - defines parameters of a periodic effect
|
||||
* struct ff_rumble_effect - defines parameters of a periodic force-feedback effect
|
||||
* @strong_magnitude: magnitude of the heavy motor
|
||||
* @weak_magnitude: magnitude of the light one
|
||||
*
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <linux/hardirq.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/irqflags.h>
|
||||
#include <linux/bottom_half.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/system.h>
|
||||
@@ -217,12 +218,6 @@ static inline void __deprecated save_and_cli(unsigned long *x)
|
||||
#define save_and_cli(x) save_and_cli(&x)
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
extern void local_bh_disable(void);
|
||||
extern void __local_bh_enable(void);
|
||||
extern void _local_bh_enable(void);
|
||||
extern void local_bh_enable(void);
|
||||
extern void local_bh_enable_ip(unsigned long ip);
|
||||
|
||||
/* PLEASE, avoid to allocate new softirqs, if you need not _really_ high
|
||||
frequency threaded job scheduling. For almost all the purposes
|
||||
tasklets are more than enough. F.e. all serial device BHs et
|
||||
@@ -236,7 +231,8 @@ enum
|
||||
NET_TX_SOFTIRQ,
|
||||
NET_RX_SOFTIRQ,
|
||||
BLOCK_SOFTIRQ,
|
||||
TASKLET_SOFTIRQ
|
||||
TASKLET_SOFTIRQ,
|
||||
SCHED_SOFTIRQ,
|
||||
};
|
||||
|
||||
/* softirq mask and active fields moved to irq_cpustat_t in
|
||||
|
||||
@@ -89,6 +89,7 @@ struct resource_list {
|
||||
#define IORESOURCE_ROM_ENABLE (1<<0) /* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */
|
||||
#define IORESOURCE_ROM_SHADOW (1<<1) /* ROM is copy at C000:0 */
|
||||
#define IORESOURCE_ROM_COPY (1<<2) /* ROM is alloc'd copy, resource field overlaid */
|
||||
#define IORESOURCE_ROM_BIOS_COPY (1<<3) /* ROM is BIOS copy, resource field overlaid */
|
||||
|
||||
/* PC/ISA/whatever - the normal PC address spaces: IO and memory */
|
||||
extern struct resource ioport_resource;
|
||||
|
||||
+1
-1
@@ -98,7 +98,7 @@ struct iphdr {
|
||||
__be16 frag_off;
|
||||
__u8 ttl;
|
||||
__u8 protocol;
|
||||
__be16 check;
|
||||
__sum16 check;
|
||||
__be32 saddr;
|
||||
__be32 daddr;
|
||||
/*The options start here. */
|
||||
|
||||
@@ -25,7 +25,7 @@ struct ip6_tnl_parm {
|
||||
__u8 proto; /* tunnel protocol */
|
||||
__u8 encap_limit; /* encapsulation limit for tunnel */
|
||||
__u8 hop_limit; /* hop limit for tunnel */
|
||||
__u32 flowinfo; /* traffic class and flowlabel for tunnel */
|
||||
__be32 flowinfo; /* traffic class and flowlabel for tunnel */
|
||||
__u32 flags; /* tunnel flags */
|
||||
struct in6_addr laddr; /* local tunnel end-point address */
|
||||
struct in6_addr raddr; /* remote tunnel end-point address */
|
||||
|
||||
@@ -208,6 +208,15 @@ struct kernel_ipmi_msg
|
||||
code as the first byte of the incoming data, unlike a response. */
|
||||
|
||||
|
||||
/*
|
||||
* Modes for ipmi_set_maint_mode() and the userland IOCTL. The AUTO
|
||||
* setting is the default and means it will be set on certain
|
||||
* commands. Hard setting it on and off will override automatic
|
||||
* operation.
|
||||
*/
|
||||
#define IPMI_MAINTENANCE_MODE_AUTO 0
|
||||
#define IPMI_MAINTENANCE_MODE_OFF 1
|
||||
#define IPMI_MAINTENANCE_MODE_ON 2
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
@@ -373,6 +382,35 @@ int ipmi_unregister_for_cmd(ipmi_user_t user,
|
||||
unsigned char cmd,
|
||||
unsigned int chans);
|
||||
|
||||
/*
|
||||
* Go into a mode where the driver will not autonomously attempt to do
|
||||
* things with the interface. It will still respond to attentions and
|
||||
* interrupts, and it will expect that commands will complete. It
|
||||
* will not automatcially check for flags, events, or things of that
|
||||
* nature.
|
||||
*
|
||||
* This is primarily used for firmware upgrades. The idea is that
|
||||
* when you go into firmware upgrade mode, you do this operation
|
||||
* and the driver will not attempt to do anything but what you tell
|
||||
* it or what the BMC asks for.
|
||||
*
|
||||
* Note that if you send a command that resets the BMC, the driver
|
||||
* will still expect a response from that command. So the BMC should
|
||||
* reset itself *after* the response is sent. Resetting before the
|
||||
* response is just silly.
|
||||
*
|
||||
* If in auto maintenance mode, the driver will automatically go into
|
||||
* maintenance mode for 30 seconds if it sees a cold reset, a warm
|
||||
* reset, or a firmware NetFN. This means that code that uses only
|
||||
* firmware NetFN commands to do upgrades will work automatically
|
||||
* without change, assuming it sends a message every 30 seconds or
|
||||
* less.
|
||||
*
|
||||
* See the IPMI_MAINTENANCE_MODE_xxx defines for what the mode means.
|
||||
*/
|
||||
int ipmi_get_maintenance_mode(ipmi_user_t user);
|
||||
int ipmi_set_maintenance_mode(ipmi_user_t user, int mode);
|
||||
|
||||
/*
|
||||
* Allow run-to-completion mode to be set for the interface of
|
||||
* a specific user.
|
||||
@@ -656,4 +694,11 @@ struct ipmi_timing_parms
|
||||
#define IPMICTL_GET_TIMING_PARMS_CMD _IOR(IPMI_IOC_MAGIC, 23, \
|
||||
struct ipmi_timing_parms)
|
||||
|
||||
/*
|
||||
* Set the maintenance mode. See ipmi_set_maintenance_mode() above
|
||||
* for a description of what this does.
|
||||
*/
|
||||
#define IPMICTL_GET_MAINTENANCE_MODE_CMD _IOR(IPMI_IOC_MAGIC, 30, int)
|
||||
#define IPMICTL_SET_MAINTENANCE_MODE_CMD _IOW(IPMI_IOC_MAGIC, 31, int)
|
||||
|
||||
#endif /* __LINUX_IPMI_H */
|
||||
|
||||
@@ -46,6 +46,8 @@
|
||||
#define IPMI_NETFN_APP_REQUEST 0x06
|
||||
#define IPMI_NETFN_APP_RESPONSE 0x07
|
||||
#define IPMI_GET_DEVICE_ID_CMD 0x01
|
||||
#define IPMI_COLD_RESET_CMD 0x02
|
||||
#define IPMI_WARM_RESET_CMD 0x03
|
||||
#define IPMI_CLEAR_MSG_FLAGS_CMD 0x30
|
||||
#define IPMI_GET_DEVICE_GUID_CMD 0x08
|
||||
#define IPMI_GET_MSG_FLAGS_CMD 0x31
|
||||
@@ -60,21 +62,30 @@
|
||||
#define IPMI_NETFN_STORAGE_RESPONSE 0x0b
|
||||
#define IPMI_ADD_SEL_ENTRY_CMD 0x44
|
||||
|
||||
#define IPMI_NETFN_FIRMWARE_REQUEST 0x08
|
||||
#define IPMI_NETFN_FIRMWARE_RESPONSE 0x09
|
||||
|
||||
/* The default slave address */
|
||||
#define IPMI_BMC_SLAVE_ADDR 0x20
|
||||
|
||||
/* The BT interface on high-end HP systems supports up to 255 bytes in
|
||||
* one transfer. Its "virtual" BMC supports some commands that are longer
|
||||
* than 128 bytes. Use the full 256, plus NetFn/LUN, Cmd, cCode, plus
|
||||
* some overhead. It would be nice to base this on the "BT Capabilities"
|
||||
* but that's too hard to propagate to the rest of the driver. */
|
||||
* some overhead; it's not worth the effort to dynamically size this based
|
||||
* on the results of the "Get BT Capabilities" command. */
|
||||
#define IPMI_MAX_MSG_LENGTH 272 /* multiple of 16 */
|
||||
|
||||
#define IPMI_CC_NO_ERROR 0x00
|
||||
#define IPMI_NODE_BUSY_ERR 0xc0
|
||||
#define IPMI_INVALID_COMMAND_ERR 0xc1
|
||||
#define IPMI_TIMEOUT_ERR 0xc3
|
||||
#define IPMI_ERR_MSG_TRUNCATED 0xc6
|
||||
#define IPMI_REQ_LEN_INVALID_ERR 0xc7
|
||||
#define IPMI_REQ_LEN_EXCEEDED_ERR 0xc8
|
||||
#define IPMI_NOT_IN_MY_STATE_ERR 0xd5 /* IPMI 2.0 */
|
||||
#define IPMI_LOST_ARBITRATION_ERR 0x81
|
||||
#define IPMI_BUS_ERR 0x82
|
||||
#define IPMI_NAK_ON_WRITE_ERR 0x83
|
||||
#define IPMI_ERR_UNSPECIFIED 0xff
|
||||
|
||||
#define IPMI_CHANNEL_PROTOCOL_IPMB 1
|
||||
|
||||
@@ -115,6 +115,13 @@ struct ipmi_smi_handlers
|
||||
poll for operations during things like crash dumps. */
|
||||
void (*poll)(void *send_info);
|
||||
|
||||
/* Enable/disable firmware maintenance mode. Note that this
|
||||
is *not* the modes defined, this is simply an on/off
|
||||
setting. The message handler does the mode handling. Note
|
||||
that this is called from interupt context, so it cannot
|
||||
block. */
|
||||
void (*set_maintenance_mode)(void *send_info, int enable);
|
||||
|
||||
/* Tell the handler that we are using it/not using it. The
|
||||
message handler get the modules that this handler belongs
|
||||
to; this function lets the SMI claim any modules that it
|
||||
@@ -173,6 +180,7 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers,
|
||||
void *send_info,
|
||||
struct ipmi_device_id *device_id,
|
||||
struct device *dev,
|
||||
const char *sysfs_name,
|
||||
unsigned char slave_addr);
|
||||
|
||||
/*
|
||||
|
||||
@@ -274,7 +274,7 @@ struct ipv6_pinfo {
|
||||
struct in6_addr *saddr_cache;
|
||||
#endif
|
||||
|
||||
__u32 flow_label;
|
||||
__be32 flow_label;
|
||||
__u32 frag_size;
|
||||
__s16 hop_limit;
|
||||
__s16 mcast_hops;
|
||||
|
||||
+7
-7
@@ -7,8 +7,8 @@
|
||||
|
||||
struct sockaddr_ipx {
|
||||
sa_family_t sipx_family;
|
||||
__u16 sipx_port;
|
||||
__u32 sipx_network;
|
||||
__be16 sipx_port;
|
||||
__be32 sipx_network;
|
||||
unsigned char sipx_node[IPX_NODE_LEN];
|
||||
__u8 sipx_type;
|
||||
unsigned char sipx_zero; /* 16 byte fill */
|
||||
@@ -23,13 +23,13 @@ struct sockaddr_ipx {
|
||||
#define IPX_CRTITF 1
|
||||
|
||||
struct ipx_route_definition {
|
||||
__u32 ipx_network;
|
||||
__u32 ipx_router_network;
|
||||
__be32 ipx_network;
|
||||
__be32 ipx_router_network;
|
||||
unsigned char ipx_router_node[IPX_NODE_LEN];
|
||||
};
|
||||
|
||||
struct ipx_interface_definition {
|
||||
__u32 ipx_network;
|
||||
__be32 ipx_network;
|
||||
unsigned char ipx_device[16];
|
||||
unsigned char ipx_dlink_type;
|
||||
#define IPX_FRAME_NONE 0
|
||||
@@ -55,8 +55,8 @@ struct ipx_config_data {
|
||||
*/
|
||||
|
||||
struct ipx_route_def {
|
||||
__u32 ipx_network;
|
||||
__u32 ipx_router_network;
|
||||
__be32 ipx_network;
|
||||
__be32 ipx_router_network;
|
||||
#define IPX_ROUTE_NO_ROUTER 0
|
||||
unsigned char ipx_router_node[IPX_NODE_LEN];
|
||||
unsigned char ipx_device[16];
|
||||
|
||||
+11
-10
@@ -141,6 +141,7 @@ struct irq_chip {
|
||||
* @pending_mask: pending rebalanced interrupts
|
||||
* @dir: /proc/irq/ procfs entry
|
||||
* @affinity_entry: /proc/irq/smp_affinity procfs entry on SMP
|
||||
* @name: flow handler name for /proc/interrupts output
|
||||
*
|
||||
* Pad this out to 32 bytes for cache and indexing reasons.
|
||||
*/
|
||||
@@ -165,8 +166,9 @@ struct irq_desc {
|
||||
cpumask_t pending_mask;
|
||||
#endif
|
||||
#ifdef CONFIG_PROC_FS
|
||||
struct proc_dir_entry *dir;
|
||||
struct proc_dir_entry *dir;
|
||||
#endif
|
||||
const char *name;
|
||||
} ____cacheline_aligned;
|
||||
|
||||
extern struct irq_desc irq_desc[NR_IRQS];
|
||||
@@ -271,12 +273,6 @@ extern void fastcall handle_simple_irq(unsigned int irq, struct irq_desc *desc);
|
||||
extern void fastcall handle_percpu_irq(unsigned int irq, struct irq_desc *desc);
|
||||
extern void fastcall handle_bad_irq(unsigned int irq, struct irq_desc *desc);
|
||||
|
||||
/*
|
||||
* Get a descriptive string for the highlevel handler, for
|
||||
* /proc/interrupts output:
|
||||
*/
|
||||
extern const char *handle_irq_name(irq_flow_handler_t handle);
|
||||
|
||||
/*
|
||||
* Monolithic do_IRQ implementation.
|
||||
* (is an explicit fastcall, because i386 4KSTACKS calls it from assembly)
|
||||
@@ -329,7 +325,12 @@ extern void
|
||||
set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip,
|
||||
irq_flow_handler_t handle);
|
||||
extern void
|
||||
__set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained);
|
||||
set_irq_chip_and_handler_name(unsigned int irq, struct irq_chip *chip,
|
||||
irq_flow_handler_t handle, const char *name);
|
||||
|
||||
extern void
|
||||
__set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
|
||||
const char *name);
|
||||
|
||||
/*
|
||||
* Set a highlevel flow handler for a given IRQ:
|
||||
@@ -337,7 +338,7 @@ __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained);
|
||||
static inline void
|
||||
set_irq_handler(unsigned int irq, irq_flow_handler_t handle)
|
||||
{
|
||||
__set_irq_handler(irq, handle, 0);
|
||||
__set_irq_handler(irq, handle, 0, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -349,7 +350,7 @@ static inline void
|
||||
set_irq_chained_handler(unsigned int irq,
|
||||
irq_flow_handler_t handle)
|
||||
{
|
||||
__set_irq_handler(irq, handle, 1);
|
||||
__set_irq_handler(irq, handle, 1, NULL);
|
||||
}
|
||||
|
||||
/* Handle dynamic irq creation and destruction */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user