Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
d75a1aa8
Commit
d75a1aa8
authored
Mar 04, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/davem/net-2.6
into ppc970.osdl.org:/home/torvalds/v2.5/linux
parents
daf52a28
7fc97d57
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
112 additions
and
38 deletions
+112
-38
drivers/bluetooth/hci_usb.c
drivers/bluetooth/hci_usb.c
+26
-9
drivers/bluetooth/hci_usb.h
drivers/bluetooth/hci_usb.h
+2
-1
include/linux/sysctl.h
include/linux/sysctl.h
+1
-0
include/net/bluetooth/hci.h
include/net/bluetooth/hci.h
+28
-18
include/net/bluetooth/hci_core.h
include/net/bluetooth/hci_core.h
+3
-0
net/bluetooth/hci_conn.c
net/bluetooth/hci_conn.c
+6
-0
net/bluetooth/hci_core.c
net/bluetooth/hci_core.c
+4
-0
net/bluetooth/hci_event.c
net/bluetooth/hci_event.c
+6
-0
net/bluetooth/rfcomm/core.c
net/bluetooth/rfcomm/core.c
+1
-1
net/bluetooth/rfcomm/tty.c
net/bluetooth/rfcomm/tty.c
+10
-5
net/ipv4/igmp.c
net/ipv4/igmp.c
+7
-1
net/ipv4/ip_sockglue.c
net/ipv4/ip_sockglue.c
+9
-3
net/ipv4/sysctl_net_ipv4.c
net/ipv4/sysctl_net_ipv4.c
+9
-0
No files found.
drivers/bluetooth/hci_usb.c
View file @
d75a1aa8
...
...
@@ -31,7 +31,7 @@
*
* $Id: hci_usb.c,v 1.8 2002/07/18 17:23:09 maxk Exp $
*/
#define VERSION "2.
4
"
#define VERSION "2.
5
"
#include <linux/config.h>
#include <linux/module.h>
...
...
@@ -70,12 +70,6 @@
static
struct
usb_driver
hci_usb_driver
;
static
struct
usb_device_id
bluetooth_ids
[]
=
{
/* Broadcom BCM2033 without firmware */
{
USB_DEVICE
(
0x0a5c
,
0x2033
),
.
driver_info
=
HCI_IGNORE
},
/* Digianswer device */
{
USB_DEVICE
(
0x08fd
,
0x0001
),
.
driver_info
=
HCI_DIGIANSWER
},
/* Generic Bluetooth USB device */
{
USB_DEVICE_INFO
(
HCI_DEV_CLASS
,
HCI_DEV_SUBCLASS
,
HCI_DEV_PROTOCOL
)
},
...
...
@@ -93,6 +87,19 @@ static struct usb_device_id bluetooth_ids[] = {
MODULE_DEVICE_TABLE
(
usb
,
bluetooth_ids
);
static
struct
usb_device_id
blacklist_ids
[]
=
{
/* Broadcom BCM2033 without firmware */
{
USB_DEVICE
(
0x0a5c
,
0x2033
),
.
driver_info
=
HCI_IGNORE
},
/* Broadcom BCM2035 */
{
USB_DEVICE
(
0x0a5c
,
0x200a
),
.
driver_info
=
HCI_RESET
},
/* Digianswer device */
{
USB_DEVICE
(
0x08fd
,
0x0001
),
.
driver_info
=
HCI_DIGIANSWER
},
{
}
/* Terminating entry */
};
struct
_urb
*
_urb_alloc
(
int
isoc
,
int
gfp
)
{
struct
_urb
*
_urb
=
kmalloc
(
sizeof
(
struct
_urb
)
+
...
...
@@ -644,7 +651,7 @@ static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int c
#endif
}
BT_DBG
(
"new packet len %d"
,
len
);
skb
=
bt_skb_alloc
(
len
,
GFP_ATOMIC
);
if
(
!
skb
)
{
BT_ERR
(
"%s no memory for the packet"
,
husb
->
hdev
->
name
);
...
...
@@ -790,6 +797,13 @@ int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
BT_DBG
(
"udev %p ifnum %d"
,
udev
,
ifnum
);
if
(
!
id
->
driver_info
)
{
const
struct
usb_device_id
*
match
;
match
=
usb_match_id
(
intf
,
blacklist_ids
);
if
(
match
)
id
=
match
;
}
iface
=
udev
->
actconfig
->
interface
[
0
];
if
(
id
->
driver_info
&
HCI_IGNORE
)
...
...
@@ -928,6 +942,9 @@ int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
hdev
->
owner
=
THIS_MODULE
;
if
(
id
->
driver_info
&
HCI_RESET
)
set_bit
(
HCI_QUIRK_RESET_ON_INIT
,
&
hdev
->
quirks
);
if
(
hci_register_dev
(
hdev
)
<
0
)
{
BT_ERR
(
"Can't register HCI device"
);
hci_free_dev
(
hdev
);
...
...
@@ -994,6 +1011,6 @@ void hci_usb_cleanup(void)
module_init
(
hci_usb_init
);
module_exit
(
hci_usb_cleanup
);
MODULE_AUTHOR
(
"Maxim Krasnyansky <maxk@qualcomm.com>"
);
MODULE_AUTHOR
(
"Maxim Krasnyansky <maxk@qualcomm.com>
, Marcel Holtmann <marcel@holtmann.org>
"
);
MODULE_DESCRIPTION
(
"Bluetooth HCI USB driver ver "
VERSION
);
MODULE_LICENSE
(
"GPL"
);
drivers/bluetooth/hci_usb.h
View file @
d75a1aa8
...
...
@@ -38,7 +38,8 @@
#define HCI_DIGI_REQ 0x40
#define HCI_IGNORE 0x01
#define HCI_DIGIANSWER 0x02
#define HCI_RESET 0x02
#define HCI_DIGIANSWER 0x04
#define HCI_MAX_IFACE_NUM 3
...
...
include/linux/sysctl.h
View file @
d75a1aa8
...
...
@@ -321,6 +321,7 @@ enum
NET_TCP_LOW_LATENCY
=
93
,
NET_IPV4_IPFRAG_SECRET_INTERVAL
=
94
,
NET_TCP_WESTWOOD
=
95
,
NET_IPV4_IGMP_MAX_MSF
=
96
,
};
enum
{
...
...
include/net/bluetooth/hci.h
View file @
d75a1aa8
...
...
@@ -35,21 +35,31 @@
#define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4)
/* HCI dev events */
#define HCI_DEV_REG 1
#define HCI_DEV_UNREG 2
#define HCI_DEV_UP 3
#define HCI_DEV_DOWN 4
#define HCI_DEV_SUSPEND 5
#define HCI_DEV_RESUME 6
#define HCI_DEV_REG 1
#define HCI_DEV_UNREG 2
#define HCI_DEV_UP 3
#define HCI_DEV_DOWN 4
#define HCI_DEV_SUSPEND 5
#define HCI_DEV_RESUME 6
/* HCI notify events */
#define HCI_NOTIFY_CONN_ADD 1
#define HCI_NOTIFY_CONN_DEL 2
#define HCI_NOTIFY_VOICE_SETTING 3
/* HCI device types */
#define HCI_VHCI 0
#define HCI_USB 1
#define HCI_PCCARD 2
#define HCI_UART
3
#define HCI_RS232
4
#define HCI_UART 3
#define HCI_RS232 4
#define HCI_PCI 5
/* HCI device quirks */
enum
{
HCI_QUIRK_RESET_ON_INIT
};
/* HCI device flags */
enum
{
HCI_UP
,
...
...
@@ -90,24 +100,24 @@ enum {
#define HCIINQUIRY _IOR('H', 240, int)
/* HCI timeouts */
#define HCI_CONN_TIMEOUT
(HZ * 40)
#define HCI_DISCONN_TIMEOUT
(HZ * 2)
#define HCI_CONN_TIMEOUT (HZ * 40)
#define HCI_DISCONN_TIMEOUT (HZ * 2)
#define HCI_CONN_IDLE_TIMEOUT (HZ * 60)
/* HCI Packet types */
#define HCI_COMMAND_PKT 0x01
#define HCI_ACLDATA_PKT
0x02
#define HCI_SCODATA_PKT
0x03
#define HCI_ACLDATA_PKT
0x02
#define HCI_SCODATA_PKT
0x03
#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
#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 HCI_HV1 0x0020
#define HCI_HV2 0x0040
...
...
include/net/bluetooth/hci_core.h
View file @
d75a1aa8
...
...
@@ -77,6 +77,8 @@ struct hci_dev {
__u16
link_policy
;
__u16
link_mode
;
unsigned
long
quirks
;
atomic_t
cmd_cnt
;
unsigned
int
acl_cnt
;
unsigned
int
sco_cnt
;
...
...
@@ -128,6 +130,7 @@ struct hci_dev {
int
(
*
flush
)(
struct
hci_dev
*
hdev
);
int
(
*
send
)(
struct
sk_buff
*
skb
);
void
(
*
destruct
)(
struct
hci_dev
*
hdev
);
void
(
*
notify
)(
struct
hci_dev
*
hdev
,
unsigned
int
evt
);
int
(
*
ioctl
)(
struct
hci_dev
*
hdev
,
unsigned
int
cmd
,
unsigned
long
arg
);
};
...
...
net/bluetooth/hci_conn.c
View file @
d75a1aa8
...
...
@@ -170,6 +170,9 @@ struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
hci_conn_hash_add
(
hdev
,
conn
);
tasklet_enable
(
&
hdev
->
tx_task
);
if
(
hdev
->
notify
)
hdev
->
notify
(
hdev
,
HCI_NOTIFY_CONN_ADD
);
return
conn
;
}
...
...
@@ -196,6 +199,9 @@ int hci_conn_del(struct hci_conn *conn)
hdev
->
acl_cnt
+=
conn
->
sent
;
}
if
(
hdev
->
notify
)
hdev
->
notify
(
hdev
,
HCI_NOTIFY_CONN_DEL
);
tasklet_disable
(
&
hdev
->
tx_task
);
hci_conn_hash_del
(
hdev
,
conn
);
tasklet_enable
(
&
hdev
->
tx_task
);
...
...
net/bluetooth/hci_core.c
View file @
d75a1aa8
...
...
@@ -189,6 +189,10 @@ static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
/* Mandatory initialization */
/* Reset */
if
(
test_bit
(
HCI_QUIRK_RESET_ON_INIT
,
&
hdev
->
quirks
))
hci_send_cmd
(
hdev
,
OGF_HOST_CTL
,
OCF_RESET
,
0
,
NULL
);
/* Read Local Supported Features */
hci_send_cmd
(
hdev
,
OGF_INFO_PARAM
,
OCF_READ_LOCAL_FEATURES
,
0
,
NULL
);
...
...
net/bluetooth/hci_event.c
View file @
d75a1aa8
...
...
@@ -232,6 +232,9 @@ static void hci_cc_host_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb
hdev
->
voice_setting
=
setting
;
BT_DBG
(
"%s: voice setting 0x%04x"
,
hdev
->
name
,
setting
);
if
(
hdev
->
notify
)
hdev
->
notify
(
hdev
,
HCI_NOTIFY_VOICE_SETTING
);
}
break
;
...
...
@@ -247,6 +250,9 @@ static void hci_cc_host_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb
hdev
->
voice_setting
=
setting
;
BT_DBG
(
"%s: voice setting 0x%04x"
,
hdev
->
name
,
setting
);
if
(
hdev
->
notify
)
hdev
->
notify
(
hdev
,
HCI_NOTIFY_VOICE_SETTING
);
}
hci_req_complete
(
hdev
,
status
);
break
;
...
...
net/bluetooth/rfcomm/core.c
View file @
d75a1aa8
...
...
@@ -50,7 +50,7 @@
#include <net/bluetooth/l2cap.h>
#include <net/bluetooth/rfcomm.h>
#define VERSION "1.
1
"
#define VERSION "1.
2
"
#ifndef CONFIG_BT_RFCOMM_DEBUG
#undef BT_DBG
...
...
net/bluetooth/rfcomm/tty.c
View file @
d75a1aa8
...
...
@@ -50,6 +50,8 @@
#define RFCOMM_TTY_MAJOR 216
/* device node major id of the usb/bluetooth.c driver */
#define RFCOMM_TTY_MINOR 0
static
struct
tty_driver
*
rfcomm_tty_driver
;
struct
rfcomm_dev
{
struct
list_head
list
;
atomic_t
refcnt
;
...
...
@@ -98,6 +100,8 @@ static void rfcomm_dev_destruct(struct rfcomm_dev *dev)
rfcomm_dlc_put
(
dlc
);
tty_unregister_device
(
rfcomm_tty_driver
,
dev
->
id
);
/* Refcount should only hit zero when called from rfcomm_dev_del()
which will have taken us off the list. Everything else are
refcounting bugs. */
...
...
@@ -239,8 +243,11 @@ static int rfcomm_dev_add(struct rfcomm_dev_req *req, struct rfcomm_dlc *dlc)
if
(
err
)
{
kfree
(
dev
);
return
err
;
}
else
return
dev
->
id
;
}
tty_register_device
(
rfcomm_tty_driver
,
dev
->
id
,
NULL
);
return
dev
->
id
;
}
static
void
rfcomm_dev_del
(
struct
rfcomm_dev
*
dev
)
...
...
@@ -871,8 +878,6 @@ static int rfcomm_tty_tiocmset(struct tty_struct *tty, struct file *filp, unsign
/* ---- TTY structure ---- */
static
struct
tty_driver
*
rfcomm_tty_driver
;
static
struct
tty_operations
rfcomm_ops
=
{
.
open
=
rfcomm_tty_open
,
.
close
=
rfcomm_tty_close
,
...
...
@@ -906,7 +911,7 @@ int rfcomm_init_ttys(void)
rfcomm_tty_driver
->
minor_start
=
RFCOMM_TTY_MINOR
;
rfcomm_tty_driver
->
type
=
TTY_DRIVER_TYPE_SERIAL
;
rfcomm_tty_driver
->
subtype
=
SERIAL_TYPE_NORMAL
;
rfcomm_tty_driver
->
flags
=
TTY_DRIVER_REAL_RAW
;
rfcomm_tty_driver
->
flags
=
TTY_DRIVER_REAL_RAW
|
TTY_DRIVER_NO_DEVFS
;
rfcomm_tty_driver
->
init_termios
=
tty_std_termios
;
rfcomm_tty_driver
->
init_termios
.
c_cflag
=
B9600
|
CS8
|
CREAD
|
HUPCL
|
CLOCAL
;
tty_set_operations
(
rfcomm_tty_driver
,
&
rfcomm_ops
);
...
...
net/ipv4/igmp.c
View file @
d75a1aa8
...
...
@@ -105,7 +105,8 @@
#include <linux/seq_file.h>
#endif
#define IP_MAX_MEMBERSHIPS 20
#define IP_MAX_MEMBERSHIPS 20
#define IP_MAX_MSF 10
#ifdef CONFIG_IP_MULTICAST
/* Parameter names and values are taken from igmp-v2-06 draft */
...
...
@@ -1325,6 +1326,7 @@ static struct in_device * ip_mc_find_dev(struct ip_mreqn *imr)
* Join a socket to a group
*/
int
sysctl_igmp_max_memberships
=
IP_MAX_MEMBERSHIPS
;
int
sysctl_igmp_max_msf
=
IP_MAX_MSF
;
static
int
ip_mc_del1_src
(
struct
ip_mc_list
*
pmc
,
int
sfmode
,
...
...
@@ -1790,6 +1792,10 @@ int ip_mc_source(int add, int omode, struct sock *sk, struct
}
/* else, add a new source to the filter */
if
(
psl
&&
psl
->
sl_count
>=
sysctl_igmp_max_msf
)
{
err
=
-
ENOBUFS
;
goto
done
;
}
if
(
!
psl
||
psl
->
sl_count
==
psl
->
sl_max
)
{
struct
ip_sf_socklist
*
newpsl
;
int
count
=
IP_SFBLOCK
;
...
...
net/ipv4/ip_sockglue.c
View file @
d75a1aa8
...
...
@@ -618,6 +618,7 @@ int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int opt
case
IP_MSFILTER
:
{
extern
int
sysctl_optmem_max
;
extern
int
sysctl_igmp_max_msf
;
struct
ip_msfilter
*
msf
;
if
(
optlen
<
IP_MSFILTER_SIZE
(
0
))
...
...
@@ -636,9 +637,14 @@ int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int opt
kfree
(
msf
);
break
;
}
if
(
IP_MSFILTER_SIZE
(
msf
->
imsf_numsrc
)
<
IP_MSFILTER_SIZE
(
0
)
||
IP_MSFILTER_SIZE
(
msf
->
imsf_numsrc
)
>
optlen
)
{
/* numsrc >= (1G-4) overflow in 32 bits */
if
(
msf
->
imsf_numsrc
>=
0x3ffffffcU
||
msf
->
imsf_numsrc
>
sysctl_igmp_max_msf
)
{
kfree
(
msf
);
err
=
-
ENOBUFS
;
break
;
}
if
(
IP_MSFILTER_SIZE
(
msf
->
imsf_numsrc
)
>
optlen
)
{
kfree
(
msf
);
err
=
-
EINVAL
;
break
;
...
...
net/ipv4/sysctl_net_ipv4.c
View file @
d75a1aa8
...
...
@@ -39,6 +39,7 @@ extern int sysctl_icmp_ratemask;
/* From igmp.c */
extern
int
sysctl_igmp_max_memberships
;
extern
int
sysctl_igmp_max_msf
;
/* From inetpeer.c */
extern
int
inet_peer_threshold
;
...
...
@@ -411,6 +412,14 @@ ctl_table ipv4_table[] = {
},
#endif
{
.
ctl_name
=
NET_IPV4_IGMP_MAX_MSF
,
.
procname
=
"igmp_max_msf"
,
.
data
=
&
sysctl_igmp_max_msf
,
.
maxlen
=
sizeof
(
int
),
.
mode
=
0644
,
.
proc_handler
=
&
proc_dointvec
},
{
.
ctl_name
=
NET_IPV4_INET_PEER_THRESHOLD
,
.
procname
=
"inet_peer_threshold"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment