diff options
| author | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 20:13:37 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 20:13:37 -0800 |
| commit | 1c3cefa582a6b598d204bad02676df300e457efa (patch) | |
| tree | c56196ce6e35589c43b227887932a5caf1bbe576 /include | |
| parent | 991b3ae8019276269816512425f102c4687f2291 (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')
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. |
