diff options
Diffstat (limited to 'include/net/bluetooth/hci.h')
| -rw-r--r-- | include/net/bluetooth/hci.h | 116 | 
1 files changed, 103 insertions, 13 deletions
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h index 66a7b579e31c..ccd723e0f783 100644 --- a/include/net/bluetooth/hci.h +++ b/include/net/bluetooth/hci.h @@ -30,6 +30,9 @@  #define HCI_MAX_EVENT_SIZE	260  #define HCI_MAX_FRAME_SIZE	(HCI_MAX_ACL_SIZE + 4) +#define HCI_LINK_KEY_SIZE	16 +#define HCI_AMP_LINK_KEY_SIZE	(2 * HCI_LINK_KEY_SIZE) +  /* HCI dev events */  #define HCI_DEV_REG			1  #define HCI_DEV_UNREG			2 @@ -56,9 +59,12 @@  #define HCI_BREDR	0x00  #define HCI_AMP		0x01 +/* First BR/EDR Controller shall have ID = 0 */ +#define HCI_BREDR_ID	0 +  /* HCI device quirks */  enum { -	HCI_QUIRK_NO_RESET, +	HCI_QUIRK_RESET_ON_CLOSE,  	HCI_QUIRK_RAW_DEVICE,  	HCI_QUIRK_FIXUP_BUFFER_SIZE  }; @@ -133,13 +139,12 @@ enum {  #define HCIINQUIRY	_IOR('H', 240, int)  /* HCI timeouts */ -#define HCI_CONNECT_TIMEOUT	(40000)	/* 40 seconds */ -#define HCI_DISCONN_TIMEOUT	(2000)	/* 2 seconds */ -#define HCI_PAIRING_TIMEOUT	(60000)	/* 60 seconds */ -#define HCI_IDLE_TIMEOUT	(6000)	/* 6 seconds */ -#define HCI_INIT_TIMEOUT	(10000)	/* 10 seconds */ -#define HCI_CMD_TIMEOUT		(1000)	/* 1 seconds */ -#define HCI_ACL_TX_TIMEOUT	(45000)	/* 45 seconds */ +#define HCI_DISCONN_TIMEOUT	msecs_to_jiffies(2000)	/* 2 seconds */ +#define HCI_PAIRING_TIMEOUT	msecs_to_jiffies(60000)	/* 60 seconds */ +#define HCI_INIT_TIMEOUT	msecs_to_jiffies(10000)	/* 10 seconds */ +#define HCI_CMD_TIMEOUT		msecs_to_jiffies(1000)	/* 1 second */ +#define HCI_ACL_TX_TIMEOUT	msecs_to_jiffies(45000)	/* 45 seconds */ +#define HCI_AUTO_OFF_TIMEOUT	msecs_to_jiffies(2000)	/* 2 seconds */  /* HCI data types */  #define HCI_COMMAND_PKT		0x01 @@ -371,7 +376,7 @@ struct hci_cp_reject_conn_req {  #define HCI_OP_LINK_KEY_REPLY		0x040b  struct hci_cp_link_key_reply {  	bdaddr_t bdaddr; -	__u8     link_key[16]; +	__u8     link_key[HCI_LINK_KEY_SIZE];  } __packed;  #define HCI_OP_LINK_KEY_NEG_REPLY	0x040c @@ -523,6 +528,28 @@ struct hci_cp_io_capability_neg_reply {  	__u8     reason;  } __packed; +#define HCI_OP_CREATE_PHY_LINK		0x0435 +struct hci_cp_create_phy_link { +	__u8     phy_handle; +	__u8     key_len; +	__u8     key_type; +	__u8     key[HCI_AMP_LINK_KEY_SIZE]; +} __packed; + +#define HCI_OP_ACCEPT_PHY_LINK		0x0436 +struct hci_cp_accept_phy_link { +	__u8     phy_handle; +	__u8     key_len; +	__u8     key_type; +	__u8     key[HCI_AMP_LINK_KEY_SIZE]; +} __packed; + +#define HCI_OP_DISCONN_PHY_LINK	0x0437 +struct hci_cp_disconn_phy_link { +	__u8     phy_handle; +	__u8     reason; +} __packed; +  #define HCI_OP_SNIFF_MODE		0x0803  struct hci_cp_sniff_mode {  	__le16   handle; @@ -818,6 +845,31 @@ struct hci_rp_read_local_amp_info {  	__le32   be_flush_to;  } __packed; +#define HCI_OP_READ_LOCAL_AMP_ASSOC	0x140a +struct hci_cp_read_local_amp_assoc { +	__u8     phy_handle; +	__le16   len_so_far; +	__le16   max_len; +} __packed; +struct hci_rp_read_local_amp_assoc { +	__u8     status; +	__u8     phy_handle; +	__le16   rem_len; +	__u8     frag[0]; +} __packed; + +#define HCI_OP_WRITE_REMOTE_AMP_ASSOC	0x140b +struct hci_cp_write_remote_amp_assoc { +	__u8     phy_handle; +	__le16   len_so_far; +	__le16   rem_len; +	__u8     frag[0]; +} __packed; +struct hci_rp_write_remote_amp_assoc { +	__u8     status; +	__u8     phy_handle; +} __packed; +  #define HCI_OP_LE_SET_EVENT_MASK	0x2001  struct hci_cp_le_set_event_mask {  	__u8     mask[8]; @@ -1048,7 +1100,7 @@ struct hci_ev_link_key_req {  #define HCI_EV_LINK_KEY_NOTIFY		0x18  struct hci_ev_link_key_notify {  	bdaddr_t bdaddr; -	__u8     link_key[16]; +	__u8     link_key[HCI_LINK_KEY_SIZE];  	__u8     key_type;  } __packed; @@ -1144,6 +1196,12 @@ struct extended_inquiry_info {  	__u8     data[240];  } __packed; +#define HCI_EV_KEY_REFRESH_COMPLETE	0x30 +struct hci_ev_key_refresh_complete { +	__u8	status; +	__le16	handle; +} __packed; +  #define HCI_EV_IO_CAPA_REQUEST		0x31  struct hci_ev_io_capa_request {  	bdaddr_t bdaddr; @@ -1190,6 +1248,39 @@ struct hci_ev_le_meta {  	__u8     subevent;  } __packed; +#define HCI_EV_PHY_LINK_COMPLETE	0x40 +struct hci_ev_phy_link_complete { +	__u8     status; +	__u8     phy_handle; +} __packed; + +#define HCI_EV_CHANNEL_SELECTED		0x41 +struct hci_ev_channel_selected { +	__u8     phy_handle; +} __packed; + +#define HCI_EV_DISCONN_PHY_LINK_COMPLETE	0x42 +struct hci_ev_disconn_phy_link_complete { +	__u8     status; +	__u8     phy_handle; +	__u8     reason; +} __packed; + +#define HCI_EV_LOGICAL_LINK_COMPLETE		0x45 +struct hci_ev_logical_link_complete { +	__u8     status; +	__le16   handle; +	__u8     phy_handle; +	__u8     flow_spec_id; +} __packed; + +#define HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE	0x46 +struct hci_ev_disconn_logical_link_complete { +	__u8     status; +	__le16   handle; +	__u8     reason; +} __packed; +  #define HCI_EV_NUM_COMP_BLOCKS		0x48  struct hci_comp_blocks_info {  	__le16   handle; @@ -1290,7 +1381,6 @@ struct hci_sco_hdr {  	__u8	dlen;  } __packed; -#include <linux/skbuff.h>  static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb)  {  	return (struct hci_event_hdr *) skb->data; @@ -1307,12 +1397,12 @@ static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)  }  /* Command opcode pack/unpack */ -#define hci_opcode_pack(ogf, ocf)	(__u16) ((ocf & 0x03ff)|(ogf << 10)) +#define hci_opcode_pack(ogf, ocf)	((__u16) ((ocf & 0x03ff)|(ogf << 10)))  #define hci_opcode_ogf(op)		(op >> 10)  #define hci_opcode_ocf(op)		(op & 0x03ff)  /* ACL handle and flags pack/unpack */ -#define hci_handle_pack(h, f)	(__u16) ((h & 0x0fff)|(f << 12)) +#define hci_handle_pack(h, f)	((__u16) ((h & 0x0fff)|(f << 12)))  #define hci_handle(h)		(h & 0x0fff)  #define hci_flags(h)		(h >> 12)  | 
