patch-2.4.10 linux/include/net/bluetooth/hci.h

Next file: linux/include/net/bluetooth/hci_core.h
Previous file: linux/include/net/bluetooth/bluez.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.9/linux/include/net/bluetooth/hci.h linux/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 @@
 
 /* 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 @@
 	__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 @@
 	__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 @@
 	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 @@
 #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 @@
 	__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 */

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)