summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@athlon.transmeta.com>2002-02-04 20:13:37 -0800
committerLinus Torvalds <torvalds@athlon.transmeta.com>2002-02-04 20:13:37 -0800
commit1c3cefa582a6b598d204bad02676df300e457efa (patch)
treec56196ce6e35589c43b227887932a5caf1bbe576 /include
parent991b3ae8019276269816512425f102c4687f2291 (diff)
v2.4.9.4 -> v2.4.9.5
- Merge with Alan - Trond Myklebust: NFS fixes - kmap and root inode special case - Al Viro: more superblock cleanups, inode leak in rd.c, minix directories in page cache - Paul Mackerras: clean up rubbish from sl82c105.c - Neil Brown: md/raid cleanups, NFS filehandles - Johannes Erdfelt: USB update (usb-2.0 support, visor fix, Clie fix, pl2303 driver update) - David Miller: sparc and net update - Eric Biederman: simplify and correct bootdata allocation - don't overwrite ramdisks - Tim Waugh: support multiple SuperIO devices, parport doc updates
Diffstat (limited to 'include')
-rw-r--r--include/asm-sparc64/elf.h4
-rw-r--r--include/asm-sparc64/pgtable.h27
-rw-r--r--include/asm-sparc64/system.h4
-rw-r--r--include/linux/ac97_codec.h5
-rw-r--r--include/linux/fs.h2
-rw-r--r--include/linux/generic_serial.h1
-rw-r--r--include/linux/i2c-id.h4
-rw-r--r--include/linux/ide.h2
-rw-r--r--include/linux/lockd/xdr.h1
-rw-r--r--include/linux/minix_fs.h26
-rw-r--r--include/linux/mmzone.h4
-rw-r--r--include/linux/module.h28
-rw-r--r--include/linux/prefetch.h60
-rw-r--r--include/linux/sunrpc/xdr.h40
-rw-r--r--include/linux/telephony.h45
-rw-r--r--include/linux/usb.h24
-rw-r--r--include/net/bluetooth/bluetooth.h49
-rw-r--r--include/net/bluetooth/bluez.h74
-rw-r--r--include/net/bluetooth/hci.h316
-rw-r--r--include/net/bluetooth/hci_core.h169
-rw-r--r--include/net/bluetooth/hci_uart.h6
-rw-r--r--include/net/bluetooth/hci_usb.h4
-rw-r--r--include/net/bluetooth/hci_vhci.h (renamed from include/net/bluetooth/hci_emu.h)22
-rw-r--r--include/net/bluetooth/l2cap.h19
-rw-r--r--include/net/bluetooth/l2cap_core.h18
-rw-r--r--include/scsi/sg.h9
26 files changed, 576 insertions, 387 deletions
diff --git a/include/asm-sparc64/elf.h b/include/asm-sparc64/elf.h
index f5122e386816..d9a5a903a8dd 100644
--- a/include/asm-sparc64/elf.h
+++ b/include/asm-sparc64/elf.h
@@ -1,4 +1,4 @@
-/* $Id: elf.h,v 1.29 2001/03/30 07:10:48 davem Exp $ */
+/* $Id: elf.h,v 1.30 2001/08/30 23:35:38 kanoj Exp $ */
#ifndef __ASM_SPARC64_ELF_H
#define __ASM_SPARC64_ELF_H
@@ -40,7 +40,7 @@ typedef struct {
#endif
#define USE_ELF_CORE_DUMP
-#define ELF_EXEC_PAGESIZE 8192
+#define ELF_EXEC_PAGESIZE PAGE_SIZE
/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
use of this is to invoke "./ld.so someprog" to test out a new version of
diff --git a/include/asm-sparc64/pgtable.h b/include/asm-sparc64/pgtable.h
index acd9ad6494d9..d2f008d7fd81 100644
--- a/include/asm-sparc64/pgtable.h
+++ b/include/asm-sparc64/pgtable.h
@@ -1,4 +1,4 @@
-/* $Id: pgtable.h,v 1.143 2001/08/22 22:16:56 kanoj Exp $
+/* $Id: pgtable.h,v 1.145 2001/08/30 03:22:00 kanoj Exp $
* pgtable.h: SpitFire page table operations.
*
* Copyright 1996,1997 David S. Miller (davem@caip.rutgers.edu)
@@ -112,6 +112,18 @@
#define _PAGE_WRITE 0x0000000000000100 /* Writable SW Bit */
#define _PAGE_PRESENT 0x0000000000000080 /* Present Page (ie. not swapped out) */
+#if PAGE_SHIFT == 13
+#define _PAGE_SZBITS _PAGE_SZ8K
+#elif PAGE_SHIFT == 16
+#define _PAGE_SZBITS _PAGE_SZ64K
+#elif PAGE_SHIFT == 19
+#define _PAGE_SZBITS _PAGE_SZ512K
+#elif PAGE_SHIFT == 22
+#define _PAGE_SZBITS _PAGE_SZ4M
+#else
+#error Wrong PAGE_SHIFT specified
+#endif
+
#define _PAGE_CACHE (_PAGE_CP | _PAGE_CV)
#define __DIRTY_BITS (_PAGE_MODIFIED | _PAGE_WRITE | _PAGE_W)
@@ -137,7 +149,7 @@
#define _PFN_MASK _PAGE_PADDR
-#define _PAGE_CHG_MASK (_PFN_MASK | _PAGE_MODIFIED | _PAGE_ACCESSED | _PAGE_PRESENT)
+#define _PAGE_CHG_MASK (_PFN_MASK | _PAGE_MODIFIED | _PAGE_ACCESSED | _PAGE_PRESENT | _PAGE_SZBITS)
#define pg_iobits (_PAGE_VALID | _PAGE_PRESENT | __DIRTY_BITS | __ACCESS_BITS | _PAGE_E)
@@ -161,21 +173,18 @@
#ifndef __ASSEMBLY__
-extern pte_t __bad_page(void);
-
-#define BAD_PAGE __bad_page()
-
extern unsigned long phys_base;
-#define ZERO_PAGE(vaddr) (mem_map)
+extern struct page *mem_map_zero;
+#define ZERO_PAGE(vaddr) (mem_map_zero)
/* Warning: These take pointers to page structs now... */
#define mk_pte(page, pgprot) \
- __pte((((page - mem_map) << PAGE_SHIFT)+phys_base) | pgprot_val(pgprot))
+ __pte((((page - mem_map) << PAGE_SHIFT)+phys_base) | pgprot_val(pgprot) | _PAGE_SZBITS)
#define page_pte_prot(page, prot) mk_pte(page, prot)
#define page_pte(page) page_pte_prot(page, __pgprot(0))
-#define mk_pte_phys(physpage, pgprot) (__pte((physpage) | pgprot_val(pgprot)))
+#define mk_pte_phys(physpage, pgprot) (__pte((physpage) | pgprot_val(pgprot) | _PAGE_SZBITS))
extern inline pte_t pte_modify(pte_t orig_pte, pgprot_t new_prot)
{
diff --git a/include/asm-sparc64/system.h b/include/asm-sparc64/system.h
index 25c60fe7d466..46dea88f62ae 100644
--- a/include/asm-sparc64/system.h
+++ b/include/asm-sparc64/system.h
@@ -1,4 +1,4 @@
-/* $Id: system.h,v 1.63 2001/04/24 01:09:12 davem Exp $ */
+/* $Id: system.h,v 1.64 2001/08/30 03:22:00 kanoj Exp $ */
#ifndef __SPARC64_SYSTEM_H
#define __SPARC64_SYSTEM_H
@@ -29,8 +29,6 @@ enum sparc_cpu {
#define ARCH_SUN4C_SUN4 0
#define ARCH_SUN4 0
-extern unsigned long empty_bad_page;
-extern unsigned long empty_zero_page;
#endif
#define setipl(__new_ipl) \
diff --git a/include/linux/ac97_codec.h b/include/linux/ac97_codec.h
index 986599666c2b..e2afb261601a 100644
--- a/include/linux/ac97_codec.h
+++ b/include/linux/ac97_codec.h
@@ -32,7 +32,7 @@
#define AC97_PCM_FRONT_DAC_RATE 0x002C /* PCM Front DAC Rate */
#define AC97_PCM_SURR_DAC_RATE 0x002E /* PCM Surround DAC Rate */
#define AC97_PCM_LFE_DAC_RATE 0x0030 /* PCM LFE DAC Rate */
-#define AC97_PCM_LR_DAC_RATE 0x0032 /* PCM LR DAC Rate */
+#define AC97_PCM_LR_ADC_RATE 0x0032 /* PCM LR DAC Rate */
#define AC97_PCM_MIC_ADC_RATE 0x0034 /* PCM MIC ADC Rate */
#define AC97_CENTER_LFE_MASTER 0x0036 /* Center + LFE Master Volume */
#define AC97_SURROUND_MASTER 0x0038 /* Surround (Rear) Master Volume */
@@ -200,5 +200,8 @@ struct ac97_ops
extern int ac97_read_proc (char *page_out, char **start, off_t off,
int count, int *eof, void *data);
extern int ac97_probe_codec(struct ac97_codec *);
+extern unsigned int ac97_set_adc_rate(struct ac97_codec *codec, unsigned int rate);
+extern unsigned int ac97_set_dac_rate(struct ac97_codec *codec, unsigned int rate);
+
#endif /* _AC97_CODEC_H_ */
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 1a8efa4044ea..953d87b4e165 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -108,6 +108,7 @@ extern int leases_enable, dir_notify_enable, lease_break_time;
#define MS_NOATIME 1024 /* Do not update access times. */
#define MS_NODIRATIME 2048 /* Do not update directory access times */
#define MS_BIND 4096
+#define MS_NOUSER (1<<31)
/*
* Flags that can be altered by MS_REMOUNT
@@ -1297,7 +1298,6 @@ extern void insert_inode_hash(struct inode *);
extern void remove_inode_hash(struct inode *);
extern struct file * get_empty_filp(void);
extern void file_move(struct file *f, struct list_head *list);
-extern void file_moveto(struct file *new, struct file *old);
extern struct buffer_head * get_hash_table(kdev_t, int, int);
extern struct buffer_head * getblk(kdev_t, int, int);
extern void ll_rw_block(int, int, struct buffer_head * bh[]);
diff --git a/include/linux/generic_serial.h b/include/linux/generic_serial.h
index cc89518003c5..1d8b041bfaae 100644
--- a/include/linux/generic_serial.h
+++ b/include/linux/generic_serial.h
@@ -99,6 +99,7 @@ void gs_set_termios (struct tty_struct * tty,
int gs_init_port(struct gs_port *port);
int gs_setserial(struct gs_port *port, struct serial_struct *sp);
void gs_getserial(struct gs_port *port, struct serial_struct *sp);
+void gs_got_break(struct gs_port *port);
extern int gs_debug;
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h
index b5793e818105..b0f62dd14386 100644
--- a/include/linux/i2c-id.h
+++ b/include/linux/i2c-id.h
@@ -109,6 +109,7 @@
#define I2C_ALGO_ISA 0x050000 /* lm_sensors ISA pseudo-adapter */
#define I2C_ALGO_SAA7146 0x060000 /* SAA 7146 video decoder bus */
#define I2C_ALGO_ACB 0x070000 /* ACCESS.bus algorithm */
+#define I2C_ALGO_IIC 0x080000 /* ITE IIC bus */
#define I2C_ALGO_EC 0x100000 /* ACPI embedded controller */
@@ -153,6 +154,9 @@
/* --- MPC8xx PowerPC adapters */
#define I2C_HW_MPC8XX_EPON 0x00 /* Eponymous MPC8xx I2C adapter */
+/* --- ITE based algorithms */
+#define I2C_HW_I_IIC 0x00 /* controller on the ITE */
+
/* --- SMBus only adapters */
#define I2C_HW_SMBUS_PIIX4 0x00
#define I2C_HW_SMBUS_ALI15X3 0x01
diff --git a/include/linux/ide.h b/include/linux/ide.h
index 5db43159a3be..97e3831a455f 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -446,7 +446,7 @@ typedef int (ide_busproc_t) (struct hwif_s *, int);
*/
typedef enum { ide_unknown, ide_generic, ide_pci,
ide_cmd640, ide_dtc2278, ide_ali14xx,
- ide_qd6580, ide_umc8672, ide_ht6560b,
+ ide_qd65xx, ide_umc8672, ide_ht6560b,
ide_pdc4030, ide_rz1000, ide_trm290,
ide_cmd646, ide_cy82c693, ide_4drives,
ide_pmac, ide_etrax100
diff --git a/include/linux/lockd/xdr.h b/include/linux/lockd/xdr.h
index 72752441ef8c..9354683a720f 100644
--- a/include/linux/lockd/xdr.h
+++ b/include/linux/lockd/xdr.h
@@ -82,7 +82,6 @@ struct nlm_reboot {
*/
#define NLMSVC_XDRSIZE sizeof(struct nlm_args)
-void nlmxdr_init(void);
int nlmsvc_decode_testargs(struct svc_rqst *, u32 *, struct nlm_args *);
int nlmsvc_encode_testres(struct svc_rqst *, u32 *, struct nlm_res *);
int nlmsvc_decode_lockargs(struct svc_rqst *, u32 *, struct nlm_args *);
diff --git a/include/linux/minix_fs.h b/include/linux/minix_fs.h
index b90790341ee4..cfa7eab9c322 100644
--- a/include/linux/minix_fs.h
+++ b/include/linux/minix_fs.h
@@ -89,6 +89,14 @@ struct minix_dir_entry {
#ifdef __KERNEL__
+/*
+ * change the define below to 0 if you want names > info->s_namelen chars to be
+ * truncated. Else they will be disallowed (ENAMETOOLONG).
+ */
+#define NO_TRUNCATE 1
+
+extern struct minix_inode * minix_V1_raw_inode(struct super_block *, ino_t, struct buffer_head **);
+extern struct minix2_inode * minix_V2_raw_inode(struct super_block *, ino_t, struct buffer_head **);
extern struct inode * minix_new_inode(const struct inode * dir, int * error);
extern void minix_free_inode(struct inode * inode);
extern unsigned long minix_count_free_inodes(struct super_block *sb);
@@ -96,19 +104,25 @@ extern int minix_new_block(struct inode * inode);
extern void minix_free_block(struct inode * inode, int block);
extern unsigned long minix_count_free_blocks(struct super_block *sb);
-extern struct buffer_head * minix_getblk(struct inode *, int, int);
-extern struct buffer_head * minix_bread(struct inode *, int, int);
-
extern void V1_minix_truncate(struct inode *);
extern void V2_minix_truncate(struct inode *);
extern void minix_truncate(struct inode *);
extern int minix_sync_inode(struct inode *);
-extern int V1_minix_sync_file(struct inode *);
-extern int V2_minix_sync_file(struct inode *);
+extern void minix_set_inode(struct inode *, dev_t);
extern int V1_minix_get_block(struct inode *, long, struct buffer_head *, int);
extern int V2_minix_get_block(struct inode *, long, struct buffer_head *, int);
-extern struct address_space_operations minix_aops;
+extern struct minix_dir_entry *minix_find_entry(struct dentry*, struct page**);
+extern int minix_add_link(struct dentry*, struct inode*);
+extern int minix_delete_entry(struct minix_dir_entry*, struct page*);
+extern int minix_make_empty(struct inode*, struct inode*);
+extern int minix_empty_dir(struct inode*);
+extern void minix_set_link(struct minix_dir_entry*, struct page*, struct inode*);
+extern struct minix_dir_entry *minix_dotdot(struct inode*, struct page**);
+extern ino_t minix_inode_by_name(struct dentry*);
+
+extern int minix_sync_file(struct file *, struct dentry *, int);
+
extern struct inode_operations minix_file_inode_operations;
extern struct inode_operations minix_dir_inode_operations;
extern struct file_operations minix_file_operations;
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 97e91217ad23..ab122514d508 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -12,7 +12,11 @@
* Free memory management - zoned buddy allocator.
*/
+#ifndef CONFIG_FORCE_MAX_ZONEORDER
#define MAX_ORDER 10
+#else
+#define MAX_ORDER CONFIG_FORCE_MAX_ZONEORDER
+#endif
typedef struct free_area_struct {
struct list_head free_list;
diff --git a/include/linux/module.h b/include/linux/module.h
index afa2e66f0139..fda319cd35f9 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -250,6 +250,33 @@ static const struct gtype##_id * __module_##gtype##_table \
#define MODULE_DEVICE_TABLE(type,name) \
MODULE_GENERIC_TABLE(type##_device,name)
+/*
+ * The following license idents are currently accepted as indicating free
+ * software modules
+ *
+ * "GPL" [GNU Public License v2 or later]
+ * "GPL and additional rights" [GNU Public License v2 rights and more]
+ * "Dual BSD/GPL" [GNU Public License v2 or BSD license choice]
+ *
+ * The following other idents are available
+ *
+ * "Proprietary" [Non free products]
+ *
+ * There are dual licensed components, but when running with Linux it is the
+ * GPL that is relevant so this is a non issue. Similarly LGPL linked with GPL
+ * is a GPL combined work.
+ *
+ * This exists for several reasons
+ * 1. So modinfo can show license info for users wanting to vet their setup
+ * is free
+ * 2. So the community can ignore bug reports including proprietary modules
+ * 3. So vendors can do likewise based on their own policies
+ */
+
+#define MODULE_LICENSE(license) \
+static const char __module_license[] __attribute__((section(".modinfo"))) = \
+"license=" license
+
/* Define the module variable, and usage macros. */
extern struct module __this_module;
@@ -269,6 +296,7 @@ static const char __module_using_checksums[] __attribute__((section(".modinfo"))
#else /* MODULE */
#define MODULE_AUTHOR(name)
+#define MODULE_LICENSE(license)
#define MODULE_DESCRIPTION(desc)
#define MODULE_SUPPORTED_DEVICE(name)
#define MODULE_PARM(var,type)
diff --git a/include/linux/prefetch.h b/include/linux/prefetch.h
new file mode 100644
index 000000000000..0aaed1fd99db
--- /dev/null
+++ b/include/linux/prefetch.h
@@ -0,0 +1,60 @@
+/*
+ * Generic cache management functions. Everything is arch-specific,
+ * but this header exists to make sure the defines/functions can be
+ * used in a generic way.
+ *
+ * 2000-11-13 Arjan van de Ven <arjan@fenrus.demon.nl>
+ *
+ */
+
+#ifndef _LINUX_PREFETCH_H
+#define _LINUX_PREFETCH_H
+
+#include <asm/processor.h>
+#include <asm/cache.h>
+
+/*
+ prefetch(x) attempts to pre-emptively get the memory pointed to
+ by address "x" into the CPU L1 cache.
+ prefetch(x) should not cause any kind of exception, prefetch(0) is
+ specifically ok.
+
+ prefetch() should be defined by the architecture, if not, the
+ #define below provides a no-op define.
+
+ There are 3 prefetch() macros:
+
+ prefetch(x) - prefetches the cacheline at "x" for read
+ prefetchw(x) - prefetches the cacheline at "x" for write
+ spin_lock_prefetch(x) - prefectches the spinlock *x for taking
+
+ there is also PREFETCH_STRIDE which is the architecure-prefered
+ "lookahead" size for prefetching streamed operations.
+
+*/
+
+/*
+ * These cannot be do{}while(0) macros. See the mental gymnastics in
+ * the loop macro.
+ */
+
+#ifndef ARCH_HAS_PREFETCH
+#define ARCH_HAS_PREFETCH
+static inline void prefetch(const void *x) {;}
+#endif
+
+#ifndef ARCH_HAS_PREFETCHW
+#define ARCH_HAS_PREFETCHW
+static inline void prefetchw(const void *x) {;}
+#endif
+
+#ifndef ARCH_HAS_SPINLOCK_PREFETCH
+#define ARCH_HAS_SPINLOCK_PREFETCH
+#define spin_lock_prefetch(x) prefetchw(x)
+#endif
+
+#ifndef PREFETCH_STRIDE
+#define PREFETCH_STRIDE (4*L1_CACHE_BYTE)
+#endif
+
+#endif
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h
index 98bf0ec20499..f0ec6e7b2e72 100644
--- a/include/linux/sunrpc/xdr.h
+++ b/include/linux/sunrpc/xdr.h
@@ -34,27 +34,27 @@ struct xdr_netobj {
typedef int (*kxdrproc_t)(void *rqstp, u32 *data, void *obj);
/*
- * These variables contain pre-xdr'ed values for faster operation.
- * FIXME: should be replaced by macros for big-endian machines.
+ * pre-xdr'ed macros.
*/
-extern u32 xdr_zero, xdr_one, xdr_two;
-
-extern u32 rpc_success,
- rpc_prog_unavail,
- rpc_prog_mismatch,
- rpc_proc_unavail,
- rpc_garbage_args,
- rpc_system_err;
-
-extern u32 rpc_auth_ok,
- rpc_autherr_badcred,
- rpc_autherr_rejectedcred,
- rpc_autherr_badverf,
- rpc_autherr_rejectedverf,
- rpc_autherr_tooweak,
- rpc_autherr_dropit;
-
-void xdr_init(void);
+
+#define xdr_zero __constant_htonl(0)
+#define xdr_one __constant_htonl(1)
+#define xdr_two __constant_htonl(2)
+
+#define rpc_success __constant_htonl(RPC_SUCCESS)
+#define rpc_prog_unavail __constant_htonl(RPC_PROG_UNAVAIL)
+#define rpc_prog_mismatch __constant_htonl(RPC_PROG_MISMATCH)
+#define rpc_proc_unavail __constant_htonl(RPC_PROC_UNAVAIL)
+#define rpc_garbage_args __constant_htonl(RPC_GARBAGE_ARGS)
+#define rpc_system_err __constant_htonl(RPC_SYSTEM_ERR)
+
+#define rpc_auth_ok __constant_htonl(RPC_AUTH_OK)
+#define rpc_autherr_badcred __constant_htonl(RPC_AUTH_BADCRED)
+#define rpc_autherr_rejectedcred __constant_htonl(RPC_AUTH_REJECTEDCRED)
+#define rpc_autherr_badverf __constant_htonl(RPC_AUTH_BADVERF)
+#define rpc_autherr_rejectedverf __constant_htonl(RPC_AUTH_REJECTEDVERF)
+#define rpc_autherr_tooweak __constant_htonl(RPC_AUTH_TOOWEAK)
+
/*
* Miscellaneous XDR helper functions
diff --git a/include/linux/telephony.h b/include/linux/telephony.h
index 01a87694cf8d..32f3b852a1f8 100644
--- a/include/linux/telephony.h
+++ b/include/linux/telephony.h
@@ -4,7 +4,7 @@
*
* Basic Linux Telephony Interface
*
- * (c) Copyright 1999 Quicknet Technologies, Inc.
+ * (c) Copyright 1999-2001 Quicknet Technologies, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -17,15 +17,28 @@
* Contributors: Alan Cox, <alan@redhat.com>
* David W. Erhart, <derhart@quicknet.net>
*
- * Version: 0.1.0 - December 19, 1999
+ * IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
+ * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF QUICKNET
+ * TECHNOLOGIES, INC. HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * QUICKNET TECHNOLOGIES, INC. SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND QUICKNET TECHNOLOGIES, INC. HAS NO OBLIGATION
+ * TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Version: $Revision: 4.2 $
+ *
+ * $Id: telephony.h,v 4.2 2001/08/06 07:09:43 craigs Exp $
*
- * Fixes:
- *
*****************************************************************************/
#ifndef TELEPHONY_H
#define TELEPHONY_H
+#define TELEPHONY_VERSION 3013
+
#define PHONE_VENDOR_IXJ 1
#define PHONE_VENDOR_QUICKNET PHONE_VENDOR_IXJ
#define PHONE_VENDOR_VOICETRONIX 2
@@ -101,7 +114,7 @@ typedef struct {
#define PHONE_HOOKSTATE _IO ('q', 0x84)
#define PHONE_MAXRINGS _IOW ('q', 0x85, char)
#define PHONE_RING_CADENCE _IOW ('q', 0x86, short)
-#define OLD_PHONE_RING_START _IO ('q', 0x87)
+#define OLD_PHONE_RING_START _IO ('q', 0x87)
#define PHONE_RING_START _IOW ('q', 0x87, PHONE_CID *)
#define PHONE_RING_STOP _IO ('q', 0x88)
@@ -113,6 +126,7 @@ typedef struct {
#define PHONE_REC_DEPTH _IOW ('q', 0x8C, int)
#define PHONE_FRAME _IOW ('q', 0x8D, int)
#define PHONE_REC_VOLUME _IOW ('q', 0x8E, int)
+#define PHONE_REC_VOLUME_LINEAR _IOW ('q', 0xDB, int)
#define PHONE_REC_LEVEL _IO ('q', 0x8F)
#define PHONE_PLAY_CODEC _IOW ('q', 0x90, int)
@@ -120,6 +134,7 @@ typedef struct {
#define PHONE_PLAY_STOP _IO ('q', 0x92)
#define PHONE_PLAY_DEPTH _IOW ('q', 0x93, int)
#define PHONE_PLAY_VOLUME _IOW ('q', 0x94, int)
+#define PHONE_PLAY_VOLUME_LINEAR _IOW ('q', 0xDC, int)
#define PHONE_PLAY_LEVEL _IO ('q', 0x95)
#define PHONE_DTMF_READY _IOR ('q', 0x96, int)
#define PHONE_GET_DTMF _IOR ('q', 0x97, int)
@@ -153,7 +168,7 @@ typedef struct {
*
******************************************************************************/
#define PHONE_WINK_DURATION _IOW ('q', 0xA6, int)
-
+#define PHONE_WINK _IOW ('q', 0xAA, int)
/******************************************************************************
*
@@ -172,17 +187,18 @@ typedef enum {
ALAW = 9,
LINEAR16 = 10,
LINEAR8 = 11,
- WSS = 12
+ WSS = 12,
+ G729B = 13
} phone_codec;
struct phone_codec_data
{
- phone_codec type;
- unsigned short buf_min, buf_opt, buf_max;
+ phone_codec type;
+ unsigned short buf_min, buf_opt, buf_max;
};
-#define PHONE_QUERY_CODEC _IOWR ('q', 0xA7, struct phone_codec_data *)
-#define PHONE_PSTN_LINETEST _IO ('q', 0xA8)
+#define PHONE_QUERY_CODEC _IOWR ('q', 0xA7, struct phone_codec_data *)
+#define PHONE_PSTN_LINETEST _IO ('q', 0xA8)
/******************************************************************************
*
@@ -212,8 +228,8 @@ struct phone_codec_data
* indicate the current state of the hookswitch. The pstn_ring bit
* indicates that the DAA on a LineJACK card has detected ring voltage on
* the PSTN port. The caller_id bit indicates that caller_id data has been
-* received and is available. The pstn_wink bit indicates that the DAA on
-* the LineJACK has received a wink from the telco switch. The f0, f1, f2
+* recieved and is available. The pstn_wink bit indicates that the DAA on
+* the LineJACK has recieved a wink from the telco switch. The f0, f1, f2
* and f3 bits indicate that the filter has been triggered by detecting the
* frequency programmed into that filter.
*
@@ -246,4 +262,5 @@ union telephony_exception {
};
-#endif /* TELEPHONY_H */
+#endif /* TELEPHONY_H */
+
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 9fc2074b2d78..542156a0b262 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -589,11 +589,23 @@ struct usb_bus {
atomic_t refcnt;
};
-#define USB_MAXCHILDREN (16) /* This is arbitrary */
+/* This is arbitrary.
+ * From USB 2.0 spec Table 11-13, offset 7, a hub can
+ * have up to 255 ports. The most yet reported is 10.
+ */
+#define USB_MAXCHILDREN (16)
struct usb_device {
int devnum; /* Device number on USB bus */
- int slow; /* Slow device? */
+
+ enum {
+ USB_SPEED_UNKNOWN = 0, /* enumerating */
+ USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */
+ USB_SPEED_HIGH /* usb 2.0 */
+ } speed;
+
+ struct usb_device *tt; /* usb1.1 device on usb2.0 bus */
+ int ttport; /* device/hub port on that tt */
atomic_t refcnt; /* Reference count */
struct semaphore serialize;
@@ -704,6 +716,9 @@ int usb_get_current_frame_number (struct usb_device *usb_dev);
* up to us. This one happens to share a lot of bit positions with the UHCI
* specification, so that much of the uhci driver can just mask the bits
* appropriately.
+ *
+ * NOTE: there's no encoding (yet?) for a "high speed" endpoint; treat them
+ * like full speed devices.
*/
#define PIPE_ISOCHRONOUS 0
@@ -744,12 +759,13 @@ int usb_get_current_frame_number (struct usb_device *usb_dev);
static inline unsigned int __create_pipe(struct usb_device *dev, unsigned int endpoint)
{
- return (dev->devnum << 8) | (endpoint << 15) | (dev->slow << 26);
+ return (dev->devnum << 8) | (endpoint << 15) |
+ ((dev->speed == USB_SPEED_LOW) << 26);
}
static inline unsigned int __default_pipe(struct usb_device *dev)
{
- return (dev->slow << 26);
+ return ((dev->speed == USB_SPEED_LOW) << 26);
}
/* Create various pipes... */
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
index 8ab79794a92b..f46a969947de 100644
--- a/include/net/bluetooth/bluetooth.h
+++ b/include/net/bluetooth/bluetooth.h
@@ -23,27 +23,26 @@
*/
/*
- * $Id: bluetooth.h,v 1.1 2001/06/01 08:12:11 davem Exp $
+ * $Id: bluetooth.h,v 1.6 2001/08/03 04:19:49 maxk Exp $
*/
-#ifndef __IF_BLUETOOTH_H
-#define __IF_BLUETOOTH_H
+#ifndef __BLUETOOTH_H
+#define __BLUETOOTH_H
#include <asm/types.h>
#include <asm/byteorder.h>
+#ifndef AF_BLUETOOTH
+#define AF_BLUETOOTH 31
+#define PF_BLUETOOTH AF_BLUETOOTH
+#endif
+
#define BTPROTO_L2CAP 0
#define BTPROTO_HCI 1
#define SOL_HCI 0
#define SOL_L2CAP 6
-typedef struct {
- __u8 b0, b1, b2, b3, b4, b5;
-} bdaddr_t;
-
-#define BDADDR_ANY ((bdaddr_t *)"\000\000\000\000\000")
-
/* Connection and socket states */
enum {
BT_CONNECTED = 1, /* Equal to TCP_ESTABLISHED to make net code happy */
@@ -56,27 +55,33 @@ enum {
BT_CLOSED
};
+/* Endianness conversions */
+#define htobs(a) __cpu_to_le16(a)
+#define htobl(a) __cpu_to_le32(a)
+#define btohs(a) __le16_to_cpu(a)
+#define btohl(a) __le32_to_cpu(a)
+
+/* BD Address */
+typedef struct {
+ __u8 b[6];
+} __attribute__((packed)) bdaddr_t;
+
+#define BDADDR_ANY ((bdaddr_t *)"\000\000\000\000\000")
+
/* Copy, swap, convert BD Address */
-static __inline__ int bacmp(bdaddr_t *ba1, bdaddr_t *ba2)
+static inline int bacmp(bdaddr_t *ba1, bdaddr_t *ba2)
{
return memcmp(ba1, ba2, sizeof(bdaddr_t));
}
-static __inline__ void bacpy(bdaddr_t *dst, bdaddr_t *src)
+static inline void bacpy(bdaddr_t *dst, bdaddr_t *src)
{
memcpy(dst, src, sizeof(bdaddr_t));
}
-extern void baswap(bdaddr_t *dst, bdaddr_t *src);
-
-extern char *batostr(bdaddr_t *ba);
-extern bdaddr_t *strtoba(char *str);
-
-/* Endianness conversions */
-#define htobs(a) __cpu_to_le16(a)
-#define htobl(a) __cpu_to_le32(a)
-#define btohs(a) __le16_to_cpu(a)
-#define btohl(a) __le32_to_cpu(a)
+void baswap(bdaddr_t *dst, bdaddr_t *src);
+char *batostr(bdaddr_t *ba);
+bdaddr_t *strtoba(char *str);
int bterr(__u16 code);
-#endif /* __IF_BLUETOOTH_H */
+#endif /* __BLUETOOTH_H */
diff --git a/include/net/bluetooth/bluez.h b/include/net/bluetooth/bluez.h
index c738d308d34a..a1852c8712f0 100644
--- a/include/net/bluetooth/bluez.h
+++ b/include/net/bluetooth/bluez.h
@@ -23,7 +23,7 @@
*/
/*
- * $Id: bluez.h,v 1.1 2001/06/01 08:12:11 davem Exp $
+ * $Id: bluez.h,v 1.4 2001/08/03 04:19:49 maxk Exp $
*/
#ifndef __IF_BLUEZ_H
@@ -31,8 +31,6 @@
#include <net/sock.h>
-#define BLUEZ_VER "1.0"
-
#define BLUEZ_MAX_PROTO 2
/* Reserv for core and drivers use */
@@ -81,91 +79,41 @@ extern void bluez_sock_unlink(struct bluez_sock_list *l, struct sock *s);
/* ----- SKB helpers ----- */
struct bluez_skb_cb {
- int incomming, fragmented;
- struct sk_buff_head frags;
+ int incomming;
};
#define bluez_cb(skb) ((struct bluez_skb_cb *)(skb->cb))
-static __inline__ struct sk_buff *bluez_skb_alloc(unsigned int len, int how)
+static inline struct sk_buff *bluez_skb_alloc(unsigned int len, int how)
{
struct sk_buff *skb;
if ((skb = alloc_skb(len + BLUEZ_SKB_RESERVE, how))) {
- bluez_cb(skb)->incomming = 0;
- bluez_cb(skb)->fragmented = 0;
skb_reserve(skb, BLUEZ_SKB_RESERVE);
+ bluez_cb(skb)->incomming = 0;
}
return skb;
}
-static __inline__ struct sk_buff *bluez_skb_clone(struct sk_buff *skb, int how)
-{
- struct sk_buff *new;
-
- if ((new = skb_clone(skb, how)))
- bluez_cb(new)->fragmented = 0;
- return new;
-}
-
-static __inline__ struct sk_buff *bluez_skb_send_alloc(struct sock *sk, unsigned long len,
+static inline struct sk_buff *bluez_skb_send_alloc(struct sock *sk, unsigned long len,
int nb, int *err)
{
struct sk_buff *skb;
if ((skb = sock_alloc_send_skb(sk, len + BLUEZ_SKB_RESERVE, nb, err))) {
- bluez_cb(skb)->incomming = 0;
- bluez_cb(skb)->fragmented = 0;
skb_reserve(skb, BLUEZ_SKB_RESERVE);
+ bluez_cb(skb)->incomming = 0;
}
return skb;
}
-static __inline__ int bluez_skb_frags(struct sk_buff *skb)
-{
- if (bluez_cb(skb)->fragmented)
- return skb_queue_len(&bluez_cb(skb)->frags);
- return 0;
-}
-
-static __inline__ void bluez_skb_add_frag(struct sk_buff *skb, struct sk_buff *frag)
-{
- if (!bluez_cb(skb)->fragmented) {
- skb_queue_head_init(&bluez_cb(skb)->frags);
- bluez_cb(skb)->fragmented = 1;
- }
- __skb_queue_tail(&bluez_cb(skb)->frags, frag);
-}
-
-static __inline__ struct sk_buff *bluez_skb_next_frag(struct sk_buff *skb)
+static inline int skb_frags_no(struct sk_buff *skb)
{
- if (bluez_cb(skb)->fragmented)
- return skb_peek(&bluez_cb(skb)->frags);
- if (skb->next == (void *) skb->list)
- return NULL;
- return skb->next;
-}
-
-static __inline__ struct sk_buff *bluez_skb_get_frag(struct sk_buff *skb)
-{
- if (bluez_cb(skb)->fragmented)
- return __skb_dequeue(&bluez_cb(skb)->frags);
- return NULL;
-}
-
-static __inline__ void bluez_skb_free(struct sk_buff *skb)
-{
- if (bluez_cb(skb)->fragmented)
- __skb_queue_purge(&bluez_cb(skb)->frags);
- kfree_skb(skb);
-}
-
-static __inline__ void bluez_skb_queue_purge(struct sk_buff_head *q)
-{
- struct sk_buff *skb;
+ register struct sk_buff *frag = skb_shinfo(skb)->frag_list;
+ register int n = 1;
- while((skb = skb_dequeue(q)))
- bluez_skb_free(skb);
+ for (; frag; frag=frag->next, n++);
+ return n;
}
extern int hci_core_init(void);
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 3a017b9f878f..35320cc535ae 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -23,14 +23,60 @@
*/
/*
- * $Id: hci.h,v 1.1 2001/06/01 08:12:11 davem Exp $
+ * $Id: hci.h,v 1.15 2001/08/05 06:02:15 maxk Exp $
*/
-#ifndef __IF_HCI_H
-#define __IF_HCI_H
+#ifndef __HCI_H
+#define __HCI_H
#include <asm/byteorder.h>
+#define HCI_MAX_DEV 8
+#define HCI_MAX_FRAME_SIZE 2048
+
+/* HCI dev events */
+#define HCI_DEV_REG 1
+#define HCI_DEV_UNREG 2
+#define HCI_DEV_UP 3
+#define HCI_DEV_DOWN 4
+
+/* HCI device types */
+#define HCI_UART 0
+#define HCI_USB 1
+#define HCI_VHCI 2
+
+/* HCI device modes */
+#define HCI_NORMAL 0x0001
+#define HCI_RAW 0x0002
+#define HCI_MODE_MASK (HCI_NORMAL | HCI_RAW)
+#define HCI_SOCK 0x1000
+
+/* HCI device states */
+#define HCI_INIT 0x0010
+#define HCI_UP 0x0020
+#define HCI_RUNNING 0x0040
+
+/* HCI device flags */
+#define HCI_PSCAN 0x0100
+#define HCI_ISCAN 0x0200
+#define HCI_AUTH 0x0400
+
+/* HCI Ioctl defines */
+#define HCIDEVUP _IOW('H', 201, int)
+#define HCIDEVDOWN _IOW('H', 202, int)
+#define HCIDEVRESET _IOW('H', 203, int)
+#define HCIRESETSTAT _IOW('H', 204, int)
+#define HCIGETINFO _IOR('H', 205, int)
+#define HCIGETDEVLIST _IOR('H', 206, int)
+#define HCISETRAW _IOW('H', 207, int)
+#define HCISETSCAN _IOW('H', 208, int)
+#define HCISETAUTH _IOW('H', 209, int)
+#define HCIINQUIRY _IOR('H', 210, int)
+#define HCISETPTYPE _IOW('H', 211, int)
+#define HCIGETCONNLIST _IOR('H', 212, int)
+
+#ifndef __NO_HCI_DEFS
+
/* HCI Packet types */
#define HCI_COMMAND_PKT 0x01
#define HCI_ACLDATA_PKT 0x02
@@ -38,51 +84,107 @@
#define HCI_EVENT_PKT 0x04
#define HCI_UNKNOWN_PKT 0xff
+/* HCI Packet types */
+#define HCI_DM1 0x0008
+#define HCI_DM3 0x0400
+#define HCI_DM5 0x4000
+#define HCI_DH1 0x0010
+#define HCI_DH3 0x0800
+#define HCI_DH5 0x8000
+
+/* ACL flags */
+#define ACL_CONT 0x0001
+#define ACL_START 0x0002
+#define ACL_ACTIVE_BCAST 0x0010
+#define ACL_PICO_BCAST 0x0020
+
+/* Baseband links */
+#define SCO_LINK 0x00
+#define ACL_LINK 0x01
+
+/* LMP features */
+#define LMP_3SLOT 0x01
+#define LMP_5SLOT 0x02
+#define LMP_ENCRYPT 0x04
+#define LMP_SOFFSET 0x08
+#define LMP_TACCURACY 0x10
+#define LMP_RSWITCH 0x20
+#define LMP_HOLD 0x40
+#define LMP_SNIF 0x80
+
+#define LMP_PARK 0x01
+#define LMP_RSSI 0x02
+#define LMP_QUALITY 0x04
+#define LMP_SCO 0x08
+#define LMP_HV2 0x10
+#define LMP_HV3 0x20
+#define LMP_ULAW 0x40
+#define LMP_ALAW 0x80
+
+#define LMP_CVSD 0x01
+#define LMP_PSCHEME 0x02
+#define LMP_PCONTROL 0x04
+
/* ----- HCI Commands ----- */
/* OGF & OCF values */
/* Informational Parameters */
#define OGF_INFO_PARAM 0x04
-#define OCF_NOP 0x0000
-#define OCF_READ_BUFFER_SIZE 0x0005
+#define OCF_READ_LOCAL_VERSION 0x0001
+typedef struct {
+ __u8 status;
+ __u8 hci_ver;
+ __u16 hci_rev;
+ __u8 lmp_ver;
+ __u16 man_name;
+ __u16 lmp_sub;
+} __attribute__ ((packed)) read_local_version_rp;
+
+#define OCF_READ_LOCAL_FEATURES 0x0003
+typedef struct {
+ __u8 status;
+ __u8 features[8];
+} __attribute__ ((packed)) read_local_features_rp;
+
+#define OCF_READ_BUFFER_SIZE 0x0005
typedef struct {
__u8 status;
__u16 acl_mtu;
__u8 sco_mtu;
__u16 acl_max_pkt;
__u16 sco_max_pkt;
-} __attribute__ ((packed)) read_buffer_size_rp;
+} __attribute__ ((packed)) read_buffer_size_rp;
-#define OCF_READ_BD_ADDR 0x0009
+#define OCF_READ_BD_ADDR 0x0009
typedef struct {
__u8 status;
bdaddr_t bdaddr;
-} __attribute__ ((packed)) read_bd_addr_rp;
+} __attribute__ ((packed)) read_bd_addr_rp;
/* Host Controller and Baseband */
-#define OGF_HOST_CTL 0x03
-#define OCF_RESET 0x0003
+#define OGF_HOST_CTL 0x03
+#define OCF_RESET 0x0003
#define OCF_WRITE_AUTH_ENABLE 0x0020
#define AUTH_DISABLED 0x00
#define AUTH_ENABLED 0x01
-#define OCF_WRITE_CA_TIMEOUT 0x0016 /* Write_Connection_Accept_Timeout */
-#define OCF_WRITE_PG_TIMEOUT 0x0018 /* Write_Page_Timeout */
+#define OCF_WRITE_CA_TIMEOUT 0x0016
+#define OCF_WRITE_PG_TIMEOUT 0x0018
#define OCF_WRITE_SCAN_ENABLE 0x001A
#define SCANS_DISABLED 0x00
- #define IS_ENA_PS_DIS 0x01 /* Inquiry scan enabled Page Scan disabled */
- #define IS_DIS_PS_ENA 0x02 /* Inquiry scan disabled Page Scan enabled */
- #define IS_ENA_PS_ENA 0x03 /* Inquiry scan enabled Page Scan enabled */
+ #define IS_ENA_PS_DIS 0x01
+ #define IS_DIS_PS_ENA 0x02
+ #define IS_ENA_PS_ENA 0x03
#define OCF_SET_EVENT_FLT 0x0005
typedef struct {
__u8 flt_type;
__u8 cond_type;
- __u8 condition;
-} __attribute__ ((packed)) set_event_flt_cp;
-#define SET_EVENT_FLT_CP_SIZE 3
+ __u8 condition[0];
+} __attribute__ ((packed)) set_event_flt_cp;
+#define SET_EVENT_FLT_CP_SIZE 2
/* Filter types */
#define FLT_CLEAR_ALL 0x00
@@ -96,7 +198,33 @@ typedef struct {
/* CONN_SETUP Conditions */
#define CONN_SETUP_AUTO_OFF 0x01
-#define CONN_SETUP_AUTO_ON 0x02
+#define CONN_SETUP_AUTO_ON 0x02
+
+#define OCF_CHANGE_LOCAL_NAME 0x0013
+typedef struct {
+ __u8 name[248];
+} __attribute__ ((packed)) change_local_name_cp;
+#define CHANGE_LOCAL_NAME_CP_SIZE 248
+
+#define OCF_READ_LOCAL_NAME 0x0014
+typedef struct {
+ __u8 status;
+ __u8 name[248];
+} __attribute__ ((packed)) read_local_name_rp;
+#define READ_LOCAL_NAME_RP_SIZE 249
+
+#define OCF_READ_CLASS_OF_DEV 0x0023
+typedef struct {
+ __u8 status;
+ __u8 dev_class[3];
+} __attribute__ ((packed)) read_class_of_dev_rp;
+#define READ_CLASS_OF_DEV_RP_SIZE 4
+
+#define OCF_WRITE_CLASS_OF_DEV 0x0024
+typedef struct {
+ __u8 dev_class[3];
+} __attribute__ ((packed)) write_class_of_dev_cp;
+#define WRITE_CLASS_OF_DEV_CP_SIZE 3
/* Link Control */
#define OGF_LINK_CTL 0x01
@@ -108,30 +236,30 @@ typedef struct {
__u8 pscan_mode;
__u16 clock_offset;
__u8 role_switch;
-} __attribute__ ((packed)) create_conn_cp;
-#define CREATE_CONN_CP_SIZE 13
+} __attribute__ ((packed)) create_conn_cp;
+#define CREATE_CONN_CP_SIZE 13
#define OCF_ACCEPT_CONN_REQ 0x0009
typedef struct {
bdaddr_t bdaddr;
__u8 role;
-} __attribute__ ((packed)) accept_conn_req_cp;
-#define ACCEPT_CONN_REQ_CP_SIZE 7
+} __attribute__ ((packed)) accept_conn_req_cp;
+#define ACCEPT_CONN_REQ_CP_SIZE 7
#define OCF_DISCONNECT 0x0006
typedef struct {
__u16 handle;
__u8 reason;
-} __attribute__ ((packed)) disconnect_cp;
-#define DISCONNECT_CP_SIZE 3
+} __attribute__ ((packed)) disconnect_cp;
+#define DISCONNECT_CP_SIZE 3
#define OCF_INQUIRY 0x0001
typedef struct {
__u8 lap[3];
__u8 lenght;
__u8 num_rsp;
-} __attribute__ ((packed)) inquiry_cp;
-#define INQUIRY_CP_SIZE 5
+} __attribute__ ((packed)) inquiry_cp;
+#define INQUIRY_CP_SIZE 5
#define OGF_LINK_POLICY 0x02 /* Link Policy */
@@ -146,8 +274,8 @@ typedef struct {
__u8 pscan_mode;
__u8 class[3];
__u16 clock_offset;
-} __attribute__ ((packed)) inquiry_info;
-#define INQUIRY_INFO_SIZE 14
+} __attribute__ ((packed)) inquiry_info;
+#define INQUIRY_INFO_SIZE 14
#define EVT_CONN_COMPLETE 0x03
typedef struct {
@@ -156,58 +284,53 @@ typedef struct {
bdaddr_t bdaddr;
__u8 link_type;
__u8 encr_mode;
-} __attribute__ ((packed)) evt_conn_complete;
-#define EVT_CONN_COMPLETE_SIZE 13
+} __attribute__ ((packed)) evt_conn_complete;
+#define EVT_CONN_COMPLETE_SIZE 13
#define EVT_CONN_REQUEST 0x04
typedef struct {
bdaddr_t bdaddr;
-#if defined (__LITTLE_ENDIAN_BITFIELD)
- __u32 class :24;
- __u32 type :8;
-#else /* (__BIG_ENDIAN_BITFIELD) */
- __u32 type :8;
- __u32 class :24;
-#endif
-} __attribute__ ((packed)) evt_conn_request;
-#define EVT_CONN_REQUEST_SIZE 10
+ __u8 dev_class[3];
+ __u8 link_type;
+} __attribute__ ((packed)) evt_conn_request;
+#define EVT_CONN_REQUEST_SIZE 10
#define EVT_DISCONN_COMPLETE 0x05
typedef struct {
__u8 status;
__u16 handle;
__u8 reason;
-} __attribute__ ((packed)) evt_disconn_complete;
-#define EVT_DISCONN_COMPLETE_SIZE 4
+} __attribute__ ((packed)) evt_disconn_complete;
+#define EVT_DISCONN_COMPLETE_SIZE 4
#define EVT_CMD_COMPLETE 0x0e
typedef struct {
__u8 ncmd;
__u16 opcode;
-} __attribute__ ((packed)) evt_cmd_complete;
-#define EVT_CMD_COMPLETE_SIZE 3
+} __attribute__ ((packed)) evt_cmd_complete;
+#define EVT_CMD_COMPLETE_SIZE 3
#define EVT_CMD_STATUS 0x0f
typedef struct {
__u8 status;
__u8 ncmd;
__u16 opcode;
-} __attribute__ ((packed)) evt_cmd_status;
-#define EVT_CMD_STATUS_SIZE 4
+} __attribute__ ((packed)) evt_cmd_status;
+#define EVT_CMD_STATUS_SIZE 4
#define EVT_NUM_COMP_PKTS 0x13
typedef struct {
__u8 num_hndl;
/* variable lenght part */
-} __attribute__ ((packed)) evt_num_comp_pkts;
-#define EVT_NUM_COMP_PKTS_SIZE 1
+} __attribute__ ((packed)) evt_num_comp_pkts;
+#define EVT_NUM_COMP_PKTS_SIZE 1
#define EVT_HCI_DEV_EVENT 0xfd
typedef struct {
__u16 event;
__u16 param;
-} __attribute__ ((packed)) evt_hci_dev_event;
-#define EVT_HCI_DEV_EVENT_SIZE 4
+} __attribute__ ((packed)) evt_hci_dev_event;
+#define EVT_HCI_DEV_EVENT_SIZE 4
/* -------- HCI Packet structures -------- */
#define HCI_TYPE_LEN 1
@@ -237,78 +360,35 @@ typedef struct {
#define HCI_SCO_HDR_SIZE 3
/* Command opcode pack/unpack */
-#define cmd_opcode_pack(ocf, ogf) (__u16)((ocf & 0x03ff)|(ogf << 10))
+#define cmd_opcode_pack(ogf, ocf) (__u16)((ocf & 0x03ff)|(ogf << 10))
#define cmd_opcode_ogf(op) (op >> 10)
#define cmd_opcode_ocf(op) (op & 0x03ff)
/* ACL handle and flags pack/unpack */
#define acl_handle_pack(h, f) (__u16)((h & 0x0fff)|(f << 12))
-#define acl_handle(h) (h & 0x0fff)
-#define acl_flags(h) (h >> 12)
-
-/* ACL flags */
-#define ACL_CONT 0x0001
-#define ACL_START 0x0002
-#define ACL_ACTIVE_BCAST 0x0010
-#define ACL_PICO_BCAST 0x0020
-
-/* Max frame size */
-#define HCI_MAX_FRAME 4096
-
-/* HCI device types */
-#define HCI_UART 0
-#define HCI_USB 1
-#define HCI_EMU 2
-
-/* HCI device modes */
-#define HCI_NORMAL 0x0001
-#define HCI_RAW 0x0002
-#define HCI_MODE_MASK (HCI_NORMAL | HCI_RAW)
-#define HCI_SOCK 0x1000
-
-/* HCI device states */
-#define HCI_INIT 0x0010
-#define HCI_UP 0x0020
-#define HCI_RUNNING 0x0040
-
-/* HCI device flags */
-#define HCI_PSCAN 0x0100
-#define HCI_ISCAN 0x0200
-#define HCI_AUTH 0x0400
-
-/* HCI Packet types */
-#define HCI_DM1 0x0008
-#define HCI_DM3 0x0400
-#define HCI_DM5 0x4000
-#define HCI_DH1 0x0010
-#define HCI_DH3 0x0800
-#define HCI_DH5 0x8000
+#define acl_handle(h) (h & 0x0fff)
+#define acl_flags(h) (h >> 12)
-/* HCI Ioctl defines */
-#define HCIDEVUP _IOW('H', 201, int)
-#define HCIDEVDOWN _IOW('H', 202, int)
-#define HCIDEVRESET _IOW('H', 203, int)
-#define HCIRESETSTAT _IOW('H', 204, int)
-#define HCIGETINFO _IOR('H', 205, int)
-#define HCIGETDEVLIST _IOR('H', 206, int)
-#define HCISETRAW _IOW('H', 207, int)
-#define HCISETSCAN _IOW('H', 208, int)
-#define HCISETAUTH _IOW('H', 209, int)
-#define HCIINQUIRY _IOWR('H', 210, int)
+#endif /* _NO_HCI_DEFS */
/* HCI Socket options */
#define HCI_DATA_DIR 0x0001
#define HCI_FILTER 0x0002
-/* HCI CMSG types */
+/* HCI CMSG flags */
#define HCI_CMSG_DIR 0x0001
struct sockaddr_hci {
- sa_family_t hci_family;
- unsigned short hci_dev;
+ sa_family_t hci_family;
+ unsigned short hci_dev;
};
#define HCI_DEV_NONE 0xffff
+struct hci_filter {
+ __u32 type_mask;
+ __u32 event_mask[2];
+};
+
struct hci_dev_req {
__u16 dev_id;
__u32 dev_opt;
@@ -345,26 +425,32 @@ struct hci_dev_info {
__u16 dev_id;
char name[8];
+ bdaddr_t bdaddr;
+
__u32 flags;
__u8 type;
+ __u8 features[8];
+
+ __u32 pkt_type;
+
__u16 acl_mtu;
__u16 acl_max;
__u16 sco_mtu;
__u16 sco_max;
- bdaddr_t bdaddr;
-
struct hci_dev_stats stat;
};
-/* Number of devices */
-#define HCI_MAX_DEV 8
+struct hci_conn_info {
+ __u16 handle;
+ bdaddr_t bdaddr;
+};
-/* HCI dev events */
-#define HCI_DEV_REG 1
-#define HCI_DEV_UNREG 2
-#define HCI_DEV_UP 3
-#define HCI_DEV_DOWN 4
+struct hci_conn_list_req {
+ __u16 dev_id;
+ __u16 conn_num;
+ struct hci_conn_info conn_info[0];
+};
-#endif /* __IF_HCI_H */
+#endif /* __HCI_H */
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 01fb3a98b32a..1c60de44dea7 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -23,13 +23,13 @@
*/
/*
- * $Id: hci_core.h,v 1.1 2001/06/01 08:12:11 davem Exp $
+ * $Id: hci_core.h,v 1.11 2001/08/05 06:02:15 maxk Exp $
*/
-#ifndef __IF_HCI_CORE_H
-#define __IF_HCI_CORE_H
+#ifndef __HCI_CORE_H
+#define __HCI_CORE_H
-#include "hci.h"
+#include <net/bluetooth/hci.h>
/* HCI upper protocols */
#define HCI_MAX_PROTO 1
@@ -53,155 +53,132 @@ struct inquiry_cache {
struct inquiry_entry *list;
};
-static __inline__ void inquiry_cache_init(struct inquiry_cache *cache)
+static inline void inquiry_cache_init(struct inquiry_cache *cache)
{
spin_lock_init(&cache->lock);
cache->list = NULL;
}
-static __inline__ void inquiry_cache_lock(struct inquiry_cache *cache)
+static inline void inquiry_cache_lock(struct inquiry_cache *cache)
{
spin_lock(&cache->lock);
}
-static __inline__ void inquiry_cache_unlock(struct inquiry_cache *cache)
+static inline void inquiry_cache_unlock(struct inquiry_cache *cache)
{
spin_unlock(&cache->lock);
}
-static __inline__ void inquiry_cache_lock_bh(struct inquiry_cache *cache)
+static inline void inquiry_cache_lock_bh(struct inquiry_cache *cache)
{
spin_lock_bh(&cache->lock);
}
-static __inline__ void inquiry_cache_unlock_bh(struct inquiry_cache *cache)
+static inline void inquiry_cache_unlock_bh(struct inquiry_cache *cache)
{
spin_unlock_bh(&cache->lock);
}
-static __inline__ long inquiry_cache_age(struct inquiry_cache *cache)
+static inline long inquiry_cache_age(struct inquiry_cache *cache)
{
return jiffies - cache->timestamp;
}
-static __inline__ long inquiry_entry_age(struct inquiry_entry *e)
+static inline long inquiry_entry_age(struct inquiry_entry *e)
{
return jiffies - e->timestamp;
}
extern void inquiry_cache_flush(struct inquiry_cache *cache);
-/* ----- Connection hash ----- */
-#define HCI_MAX_CONN 10
+struct hci_dev;
+
+/* ----- HCI Connections ----- */
+struct hci_conn {
+ struct list_head list;
+ bdaddr_t dst;
+ __u16 handle;
+ __u8 type;
+ unsigned int sent;
+
+ struct hci_dev *hdev;
+ void *l2cap_data;
+ void *priv;
+
+ struct sk_buff_head data_q;
+};
-/* FIXME:
- * We assume that handle is a number - 0 ... HCI_MAX_CONN.
- */
struct conn_hash {
- spinlock_t lock;
- unsigned int num;
- void *conn[HCI_MAX_CONN];
+ struct list_head list;
+ spinlock_t lock;
+ unsigned int num;
};
-static __inline__ void conn_hash_init(struct conn_hash *h)
+static inline void conn_hash_init(struct conn_hash *h)
{
- memset(h, 0, sizeof(struct conn_hash));
+ INIT_LIST_HEAD(&h->list);
spin_lock_init(&h->lock);
+ h->num = 0;
}
-static __inline__ void conn_hash_lock(struct conn_hash *h)
+static inline void conn_hash_lock(struct conn_hash *h)
{
spin_lock(&h->lock);
}
-static __inline__ void conn_hash_unlock(struct conn_hash *h)
+static inline void conn_hash_unlock(struct conn_hash *h)
{
spin_unlock(&h->lock);
}
-static __inline__ void *__conn_hash_add(struct conn_hash *h, __u16 handle, void *conn)
+static inline void __conn_hash_add(struct conn_hash *h, __u16 handle, struct hci_conn *c)
{
- if (!h->conn[handle]) {
- h->conn[handle] = conn;
- h->num++;
- return conn;
- } else
- return NULL;
+ list_add(&c->list, &h->list);
+ h->num++;
}
-static __inline__ void *conn_hash_add(struct conn_hash *h, __u16 handle, void *conn)
+static inline void conn_hash_add(struct conn_hash *h, __u16 handle, struct hci_conn *c)
{
- if (handle >= HCI_MAX_CONN)
- return NULL;
-
conn_hash_lock(h);
- conn = __conn_hash_add(h, handle, conn);
+ __conn_hash_add(h, handle, c);
conn_hash_unlock(h);
-
- return conn;
}
-static __inline__ void *__conn_hash_del(struct conn_hash *h, __u16 handle)
+static inline void __conn_hash_del(struct conn_hash *h, struct hci_conn *c)
{
- void *conn = h->conn[handle];
-
- if (conn) {
- h->conn[handle] = NULL;
- h->num--;
- return conn;
- } else
- return NULL;
+ list_del(&c->list);
+ h->num--;
}
-static __inline__ void *conn_hash_del(struct conn_hash *h, __u16 handle)
+static inline void conn_hash_del(struct conn_hash *h, struct hci_conn *c)
{
- void *conn;
-
- if (handle >= HCI_MAX_CONN)
- return NULL;
conn_hash_lock(h);
- conn = __conn_hash_del(h, handle);
+ __conn_hash_del(h, c);
conn_hash_unlock(h);
-
- return conn;
}
-static __inline__ void *__conn_hash_lookup(struct conn_hash *h, __u16 handle)
+static inline struct hci_conn *__conn_hash_lookup(struct conn_hash *h, __u16 handle)
{
- return h->conn[handle];
+ register struct list_head *p;
+ register struct hci_conn *c;
+
+ list_for_each(p, &h->list) {
+ c = list_entry(p, struct hci_conn, list);
+ if (c->handle == handle)
+ return c;
+ }
+ return NULL;
}
-static __inline__ void *conn_hash_lookup(struct conn_hash *h, __u16 handle)
+static inline struct hci_conn *conn_hash_lookup(struct conn_hash *h, __u16 handle)
{
- void *conn;
-
- if (handle >= HCI_MAX_CONN)
- return NULL;
+ struct hci_conn *conn;
conn_hash_lock(h);
conn = __conn_hash_lookup(h, handle);
conn_hash_unlock(h);
-
return conn;
}
-struct hci_dev;
-
-/* ----- HCI Connections ----- */
-struct hci_conn {
- bdaddr_t dst;
- __u16 handle;
-
- unsigned int acl_sent;
- unsigned int sco_sent;
-
- struct hci_dev *hdev;
- void *l2cap_data;
- void *priv;
-
- struct sk_buff_head acl_q;
- struct sk_buff_head sco_q;
-};
-
/* ----- HCI Devices ----- */
struct hci_dev {
atomic_t refcnt;
@@ -211,6 +188,9 @@ struct hci_dev {
__u16 id;
__u8 type;
bdaddr_t bdaddr;
+ __u8 features[8];
+
+ __u16 pkt_type;
atomic_t cmd_cnt;
unsigned int acl_cnt;
@@ -232,7 +212,8 @@ struct hci_dev {
struct sk_buff_head rx_q;
struct sk_buff_head raw_q;
struct sk_buff_head cmd_q;
- struct sk_buff *cmd_sent;
+
+ struct sk_buff *sent_cmd;
struct semaphore req_lock;
wait_queue_head_t req_wait_q;
@@ -251,20 +232,17 @@ struct hci_dev {
int (*send)(struct sk_buff *skb);
};
-static __inline__ void hci_dev_hold(struct hci_dev *hdev)
+static inline void hci_dev_hold(struct hci_dev *hdev)
{
atomic_inc(&hdev->refcnt);
}
-static __inline__ void hci_dev_put(struct hci_dev *hdev)
+static inline void hci_dev_put(struct hci_dev *hdev)
{
atomic_dec(&hdev->refcnt);
}
extern struct hci_dev *hci_dev_get(int index);
-
-#define SENT_CMD_PARAM(X) (((X->cmd_sent->data) + HCI_COMMAND_HDR_SIZE))
-
extern int hci_register_dev(struct hci_dev *hdev);
extern int hci_unregister_dev(struct hci_dev *hdev);
extern int hci_dev_open(__u16 dev);
@@ -275,6 +253,8 @@ extern int hci_dev_info(unsigned long arg);
extern int hci_dev_list(unsigned long arg);
extern int hci_dev_setscan(unsigned long arg);
extern int hci_dev_setauth(unsigned long arg);
+extern int hci_dev_setptype(unsigned long arg);
+extern int hci_conn_list(unsigned long arg);
extern int hci_inquiry(unsigned long arg);
extern __u32 hci_dev_setmode(struct hci_dev *hdev, __u32 mode);
@@ -282,18 +262,21 @@ extern __u32 hci_dev_getmode(struct hci_dev *hdev);
extern int hci_recv_frame(struct sk_buff *skb);
+/* ----- LMP capabilities ----- */
+#define lmp_rswitch_capable(dev) (dev->features[0] & LMP_RSWITCH)
+
/* ----- HCI tasks ----- */
-static __inline__ void hci_sched_cmd(struct hci_dev *hdev)
+static inline void hci_sched_cmd(struct hci_dev *hdev)
{
tasklet_schedule(&hdev->cmd_task);
}
-static __inline__ void hci_sched_rx(struct hci_dev *hdev)
+static inline void hci_sched_rx(struct hci_dev *hdev)
{
tasklet_schedule(&hdev->rx_task);
}
-static __inline__ void hci_sched_tx(struct hci_dev *hdev)
+static inline void hci_sched_tx(struct hci_dev *hdev)
{
tasklet_schedule(&hdev->tx_task);
}
@@ -330,9 +313,9 @@ extern void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
/* HCI info for socket */
#define hci_pi(sk) ((struct hci_pinfo *) &sk->protinfo)
struct hci_pinfo {
- struct hci_dev *hdev;
- __u32 cmsg_flags;
- __u32 mask;
+ struct hci_dev *hdev;
+ struct hci_filter filter;
+ __u32 cmsg_mask;
};
/* ----- HCI requests ----- */
@@ -340,4 +323,4 @@ struct hci_pinfo {
#define HCI_REQ_PEND 1
#define HCI_REQ_CANCELED 2
-#endif /* __IF_HCI_CORE_H */
+#endif /* __HCI_CORE_H */
diff --git a/include/net/bluetooth/hci_uart.h b/include/net/bluetooth/hci_uart.h
index f9d6c4f8e712..8d1ca8118d31 100644
--- a/include/net/bluetooth/hci_uart.h
+++ b/include/net/bluetooth/hci_uart.h
@@ -23,10 +23,12 @@
*/
/*
- * $Id: hci_uart.h,v 1.1 2001/06/01 08:12:11 davem Exp $
+ * $Id: hci_uart.h,v 1.2 2001/06/02 01:40:08 maxk Exp $
*/
-#define HCI_MAX_READ 2048
+#ifndef N_HCI
+#define N_HCI 15
+#endif
#ifdef __KERNEL__
diff --git a/include/net/bluetooth/hci_usb.h b/include/net/bluetooth/hci_usb.h
index e5dcfb1933e9..348b4d49ea7d 100644
--- a/include/net/bluetooth/hci_usb.h
+++ b/include/net/bluetooth/hci_usb.h
@@ -23,13 +23,11 @@
*/
/*
- * $Id: hci_usb.h,v 1.1 2001/06/01 08:12:11 davem Exp $
+ * $Id: hci_usb.h,v 1.3 2001/06/02 01:40:08 maxk Exp $
*/
#ifdef __KERNEL__
-#define HCI_USB_MAX_READ 2048
-
/* Class, SubClass, and Protocol codes that describe a Bluetooth device */
#define HCI_DEV_CLASS 0xe0 /* Wireless class */
#define HCI_DEV_SUBCLASS 0x01 /* RF subclass */
diff --git a/include/net/bluetooth/hci_emu.h b/include/net/bluetooth/hci_vhci.h
index d349ba85621f..e448c3a79e5f 100644
--- a/include/net/bluetooth/hci_emu.h
+++ b/include/net/bluetooth/hci_vhci.h
@@ -23,15 +23,15 @@
*/
/*
- * $Id: hci_emu.h,v 1.1 2001/06/01 08:12:11 davem Exp $
+ * $Id: hci_vhci.h,v 1.2 2001/08/01 01:02:20 maxk Exp $
*/
-#ifndef __IF_HCI_EMU_H
-#define __IF_HCI_EMU_H
+#ifndef __HCI_VHCI_H
+#define __HCI_VHCI_H
#ifdef __KERNEL__
-struct hci_emu_struct {
+struct hci_vhci_struct {
struct hci_dev hdev;
__u32 flags;
wait_queue_head_t read_wait;
@@ -39,14 +39,12 @@ struct hci_emu_struct {
struct fasync_struct *fasync;
};
-#endif /* __KERNEL__ */
-
-#define HCI_EMU_MINOR 250
+/* VHCI device flags */
+#define VHCI_FASYNC 0x0010
-/* Max frame size */
-#define HCI_EMU_MAX_FRAME 4096
+#endif /* __KERNEL__ */
-/* HCI_EMU device flags */
-#define HCI_EMU_FASYNC 0x0010
+#define VHCI_DEV "/dev/vhci"
+#define VHCI_MINOR 250
-#endif /* __IF_HCI_EMU_H */
+#endif /* __HCI_VHCI_H */
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index a9d7db05d83c..b3535653e4e6 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -23,7 +23,7 @@
*/
/*
- * $Id: l2cap.h,v 1.1 2001/06/01 08:12:11 davem Exp $
+ * $Id: l2cap.h,v 1.5 2001/06/14 21:28:26 maxk Exp $
*/
#ifndef __L2CAP_H
@@ -32,6 +32,14 @@
#include <asm/types.h>
#include <asm/byteorder.h>
+/* L2CAP defaults */
+#define L2CAP_DEFAULT_MTU 672
+#define L2CAP_DEFAULT_FLUSH_TO 0xFFFF
+
+#define L2CAP_CONN_TIMEOUT (HZ * 40)
+#define L2CAP_DISCONN_TIMEOUT (HZ * 2)
+#define L2CAP_CONN_IDLE_TIMEOUT (HZ * 60)
+
/* L2CAP socket address */
struct sockaddr_l2 {
sa_family_t l2_family;
@@ -52,11 +60,10 @@ struct l2cap_options {
__u32 delay_var;
};
-/* L2CAP defaults */
-#define L2CAP_DEFAULT_MTU 672
-#define L2CAP_DEFAULT_FLUSH_TO 0xFFFF
-
-#define L2CAP_CONN_TIMEOUT (HZ * 40)
+#define L2CAP_CONNINFO 0x02
+struct l2cap_conninfo {
+ __u16 hci_handle;
+};
/* L2CAP command codes */
#define L2CAP_COMMAND_REJ 0x01
diff --git a/include/net/bluetooth/l2cap_core.h b/include/net/bluetooth/l2cap_core.h
index f4efcd94a41f..61da5097f118 100644
--- a/include/net/bluetooth/l2cap_core.h
+++ b/include/net/bluetooth/l2cap_core.h
@@ -23,7 +23,7 @@
*/
/*
- * $Id: l2cap_core.h,v 1.1 2001/06/01 08:12:11 davem Exp $
+ * $Id: l2cap_core.h,v 1.6 2001/08/03 04:19:49 maxk Exp $
*/
#ifndef __L2CAP_CORE_H
@@ -41,12 +41,12 @@ struct l2cap_iff {
struct list_head conn_list;
};
-static __inline__ void l2cap_iff_lock(struct l2cap_iff *iff)
+static inline void l2cap_iff_lock(struct l2cap_iff *iff)
{
spin_lock(&iff->lock);
}
-static __inline__ void l2cap_iff_unlock(struct l2cap_iff *iff)
+static inline void l2cap_iff_unlock(struct l2cap_iff *iff)
{
spin_unlock(&iff->lock);
}
@@ -78,14 +78,16 @@ struct l2cap_conn {
__u8 tx_ident;
struct l2cap_chan_list chan_list;
+
+ struct timer_list timer;
};
-static __inline__ void __l2cap_conn_link(struct l2cap_iff *iff, struct l2cap_conn *c)
+static inline void __l2cap_conn_link(struct l2cap_iff *iff, struct l2cap_conn *c)
{
list_add(&c->list, &iff->conn_list);
}
-static __inline__ void __l2cap_conn_unlink(struct l2cap_iff *iff, struct l2cap_conn *c)
+static inline void __l2cap_conn_unlink(struct l2cap_iff *iff, struct l2cap_conn *c)
{
list_del(&c->list);
}
@@ -126,9 +128,9 @@ struct l2cap_pinfo {
struct l2cap_accept_q accept_q;
};
-#define CONF_INPUT 0x01
-#define CONF_OUTPUT 0x02
-#define CONF_DONE (CONF_INPUT | CONF_OUTPUT)
+#define CONF_REQ_SENT 0x01
+#define CONF_INPUT_DONE 0x02
+#define CONF_OUTPUT_DONE 0x04
extern struct bluez_sock_list l2cap_sk_list;
extern struct list_head l2cap_iff_list;
diff --git a/include/scsi/sg.h b/include/scsi/sg.h
index eb118a2dcce8..26ee7fea25d2 100644
--- a/include/scsi/sg.h
+++ b/include/scsi/sg.h
@@ -11,9 +11,13 @@ Original driver (sg.h):
Version 2 and 3 extensions to driver:
* Copyright (C) 1998 - 2001 Douglas Gilbert
- Version: 3.1.19 (20010623)
+ Version: 3.1.20 (20010814)
This version is for 2.4 series kernels.
+ Changes since 3.1.19 (20010623)
+ - add SG_GET_ACCESS_COUNT ioctl
+ - make open() increment and close() decrement access_count
+ - only register first 256 devices, reject subsequent devices
Changes since 3.1.18 (20010505)
- fix bug that caused long wait when large buffer requested
- fix leak in error case of sg_new_read() [report: Eric Barton]
@@ -221,6 +225,9 @@ typedef struct sg_req_info { /* used by SG_GET_REQUEST_TABLE ioctl() */
#define SG_SET_KEEP_ORPHAN 0x2287 /* 1 -> hold for read(), 0 -> drop (def) */
#define SG_GET_KEEP_ORPHAN 0x2288
+/* yields scsi midlevel's access_count for this SCSI device */
+#define SG_GET_ACCESS_COUNT 0x2289
+
#define SG_SCATTER_SZ (8 * 4096) /* PAGE_SIZE not available to user */
/* Largest size (in bytes) a single scatter-gather list element can have.