diff options
Diffstat (limited to 'include/net/bluetooth/hci_core.h')
| -rw-r--r-- | include/net/bluetooth/hci_core.h | 37 | 
1 files changed, 29 insertions, 8 deletions
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 9fc7728f94e4..475b8c04ba52 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -25,7 +25,6 @@  #ifndef __HCI_CORE_H  #define __HCI_CORE_H -#include <linux/interrupt.h>  #include <net/bluetooth/hci.h>  /* HCI priority */ @@ -65,7 +64,7 @@ struct discovery_state {  		DISCOVERY_RESOLVING,  		DISCOVERY_STOPPING,  	} state; -	struct list_head	all;		/* All devices found during inquiry */ +	struct list_head	all;	/* All devices found during inquiry */  	struct list_head	unknown;	/* Name state not known */  	struct list_head	resolve;	/* Name needs to be resolved */  	__u32			timestamp; @@ -105,7 +104,7 @@ struct link_key {  	struct list_head list;  	bdaddr_t bdaddr;  	u8 type; -	u8 val[16]; +	u8 val[HCI_LINK_KEY_SIZE];  	u8 pin_len;  }; @@ -333,6 +332,7 @@ struct hci_conn {  	void		*l2cap_data;  	void		*sco_data;  	void		*smp_conn; +	struct amp_mgr	*amp_mgr;  	struct hci_conn	*link; @@ -360,7 +360,8 @@ extern int l2cap_connect_cfm(struct hci_conn *hcon, u8 status);  extern int l2cap_disconn_ind(struct hci_conn *hcon);  extern int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason);  extern int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt); -extern int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags); +extern int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, +			      u16 flags);  extern int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr);  extern int sco_connect_cfm(struct hci_conn *hcon, __u8 status); @@ -429,8 +430,8 @@ enum {  static inline bool hci_conn_ssp_enabled(struct hci_conn *conn)  {  	struct hci_dev *hdev = conn->hdev; -	return (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) && -				test_bit(HCI_CONN_SSP_ENABLED, &conn->flags)); +	return test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) && +	       test_bit(HCI_CONN_SSP_ENABLED, &conn->flags);  }  static inline void hci_conn_hash_init(struct hci_dev *hdev) @@ -586,18 +587,24 @@ void hci_conn_put_device(struct hci_conn *conn);  static inline void hci_conn_hold(struct hci_conn *conn)  { +	BT_DBG("hcon %p refcnt %d -> %d", conn, atomic_read(&conn->refcnt), +	       atomic_read(&conn->refcnt) + 1); +  	atomic_inc(&conn->refcnt);  	cancel_delayed_work(&conn->disc_work);  }  static inline void hci_conn_put(struct hci_conn *conn)  { +	BT_DBG("hcon %p refcnt %d -> %d", conn, atomic_read(&conn->refcnt), +	       atomic_read(&conn->refcnt) - 1); +  	if (atomic_dec_and_test(&conn->refcnt)) {  		unsigned long timeo;  		if (conn->type == ACL_LINK || conn->type == LE_LINK) {  			del_timer(&conn->idle_timer);  			if (conn->state == BT_CONNECTED) { -				timeo = msecs_to_jiffies(conn->disc_timeout); +				timeo = conn->disc_timeout;  				if (!conn->out)  					timeo *= 2;  			} else { @@ -640,6 +647,19 @@ static inline void hci_set_drvdata(struct hci_dev *hdev, void *data)  	dev_set_drvdata(&hdev->dev, data);  } +/* hci_dev_list shall be locked */ +static inline uint8_t __hci_num_ctrl(void) +{ +	uint8_t count = 0; +	struct list_head *p; + +	list_for_each(p, &hci_dev_list) { +		count++; +	} + +	return count; +} +  struct hci_dev *hci_dev_get(int index);  struct hci_dev *hci_get_route(bdaddr_t *src, bdaddr_t *dst); @@ -661,7 +681,8 @@ int hci_get_conn_info(struct hci_dev *hdev, void __user *arg);  int hci_get_auth_info(struct hci_dev *hdev, void __user *arg);  int hci_inquiry(void __user *arg); -struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr); +struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev, +					 bdaddr_t *bdaddr);  int hci_blacklist_clear(struct hci_dev *hdev);  int hci_blacklist_add(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);  int hci_blacklist_del(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);  | 
