/* 
   BlueZ - Bluetooth protocol stack for Linux
   Copyright (C) 2000-2001 Qualcomm Incorporated

   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License version 2 as
   published by the Free Software Foundation;

   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 
   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 
   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 
   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 
   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 
   SOFTWARE IS DISCLAIMED.
*/

#ifndef __HCI_H
#define __HCI_H

#define HCI_MAX_ACL_SIZE	1024
#define HCI_MAX_SCO_SIZE	255
#define HCI_MAX_EVENT_SIZE	260
#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

/* 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_PCI		5

/* HCI device quirks */
enum {
	HCI_QUIRK_RESET_ON_INIT,
	HCI_QUIRK_RAW_DEVICE
};

/* HCI device flags */
enum {
	HCI_UP,
	HCI_INIT,
	HCI_RUNNING,

	HCI_PSCAN,
	HCI_ISCAN,
	HCI_AUTH,
	HCI_ENCRYPT,
	HCI_INQUIRY,

	HCI_RAW,

	HCI_SECMGR
};

/* HCI ioctl defines */
#define HCIDEVUP	_IOW('H', 201, int)
#define HCIDEVDOWN	_IOW('H', 202, int)
#define HCIDEVRESET	_IOW('H', 203, int)
#define HCIDEVRESTAT	_IOW('H', 204, int)

#define HCIGETDEVLIST	_IOR('H', 210, int)
#define HCIGETDEVINFO	_IOR('H', 211, int)
#define HCIGETCONNLIST	_IOR('H', 212, int)
#define HCIGETCONNINFO	_IOR('H', 213, int)

#define HCISETRAW	_IOW('H', 220, int)
#define HCISETSCAN	_IOW('H', 221, int)
#define HCISETAUTH	_IOW('H', 222, int)
#define HCISETENCRYPT	_IOW('H', 223, int)
#define HCISETPTYPE	_IOW('H', 224, int)
#define HCISETLINKPOL	_IOW('H', 225, int)
#define HCISETLINKMODE	_IOW('H', 226, int)
#define HCISETACLMTU	_IOW('H', 227, int)
#define HCISETSCOMTU	_IOW('H', 228, int)

#define HCISETSECMGR	_IOW('H', 230, int)

#define HCIINQUIRY	_IOR('H', 240, int)

/* HCI timeouts */
#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_EVENT_PKT		0x04
#define HCI_VENDOR_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_HV1		0x0020
#define HCI_HV2		0x0040
#define HCI_HV3		0x0080

#define SCO_PTYPE_MASK	(HCI_HV1 | HCI_HV2 | HCI_HV3)
#define ACL_PTYPE_MASK	(~SCO_PTYPE_MASK)

/* ACL flags */
#define ACL_CONT		0x01
#define ACL_START		0x02
#define ACL_ACTIVE_BCAST	0x04
#define ACL_PICO_BCAST		0x08

/* 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

/* Link policies */
#define HCI_LP_RSWITCH	0x0001
#define HCI_LP_HOLD	0x0002
#define HCI_LP_SNIFF	0x0004
#define HCI_LP_PARK	0x0008

/* Link mode */
#define HCI_LM_ACCEPT	0x8000
#define HCI_LM_MASTER	0x0001
#define HCI_LM_AUTH	0x0002
#define HCI_LM_ENCRYPT	0x0004
#define HCI_LM_TRUSTED	0x0008
#define HCI_LM_RELIABLE	0x0010
#define HCI_LM_SECURE	0x0020

/* -----  HCI Commands ---- */
/* OGF & OCF values */

/* Informational Parameters */
#define OGF_INFO_PARAM	0x04

#define OCF_READ_LOCAL_VERSION	0x0001
struct hci_rp_read_loc_version {
	__u8     status;
	__u8     hci_ver;
	__u16    hci_rev;
	__u8     lmp_ver;
	__u16    manufacturer;
	__u16    lmp_subver;
} __attribute__ ((packed));

#define OCF_READ_LOCAL_FEATURES	0x0003
struct hci_rp_read_loc_features {
	__u8 status;
	__u8 features[8];
} __attribute__ ((packed));

#define OCF_READ_BUFFER_SIZE	0x0005
struct hci_rp_read_buffer_size {
	__u8     status;
	__u16    acl_mtu;
	__u8     sco_mtu;
	__u16    acl_max_pkt;
	__u16    sco_max_pkt;
} __attribute__ ((packed));

#define OCF_READ_BD_ADDR	0x0009
struct hci_rp_read_bd_addr {
	__u8     status;
	bdaddr_t bdaddr;
} __attribute__ ((packed));

/* Host Controller and Baseband */
#define OGF_HOST_CTL	0x03
#define OCF_RESET		0x0003
#define OCF_READ_AUTH_ENABLE	0x001F
#define OCF_WRITE_AUTH_ENABLE	0x0020
	#define AUTH_DISABLED		0x00
	#define AUTH_ENABLED		0x01

#define OCF_READ_ENCRYPT_MODE	0x0021
#define OCF_WRITE_ENCRYPT_MODE	0x0022
	#define ENCRYPT_DISABLED	0x00
	#define ENCRYPT_P2P		0x01
	#define ENCRYPT_BOTH		0x02

#define OCF_WRITE_CA_TIMEOUT  	0x0016	
#define OCF_WRITE_PG_TIMEOUT  	0x0018

#define OCF_WRITE_SCAN_ENABLE 	0x001A
	#define SCAN_DISABLED		0x00
	#define SCAN_INQUIRY		0x01
	#define SCAN_PAGE		0x02

#define OCF_SET_EVENT_FLT	0x0005
struct hci_cp_set_event_flt {
	__u8     flt_type;
	__u8     cond_type;
	__u8     condition[0];
} __attribute__ ((packed));

/* Filter types */
#define HCI_FLT_CLEAR_ALL	0x00
#define HCI_FLT_INQ_RESULT	0x01
#define HCI_FLT_CONN_SETUP	0x02

/* CONN_SETUP Condition types */
#define HCI_CONN_SETUP_ALLOW_ALL	0x00
#define HCI_CONN_SETUP_ALLOW_CLASS	0x01
#define HCI_CONN_SETUP_ALLOW_BDADDR	0x02

/* CONN_SETUP Conditions */
#define HCI_CONN_SETUP_AUTO_OFF	0x01
#define HCI_CONN_SETUP_AUTO_ON	0x02

#define OCF_READ_CLASS_OF_DEV	0x0023
struct hci_rp_read_dev_class {
	__u8     status;
	__u8     dev_class[3];
} __attribute__ ((packed));

#define OCF_WRITE_CLASS_OF_DEV	0x0024
struct hci_cp_write_dev_class {
	__u8     dev_class[3];
} __attribute__ ((packed));

#define OCF_READ_VOICE_SETTING	0x0025
struct hci_rp_read_voice_setting {
	__u8	status;
	__u16	voice_setting;
} __attribute__ ((packed));

#define OCF_WRITE_VOICE_SETTING	0x0026
struct hci_cp_write_voice_setting {
	__u16	voice_setting;
} __attribute__ ((packed));

#define OCF_HOST_BUFFER_SIZE	0x0033
struct hci_cp_host_buffer_size {
	__u16    acl_mtu;
	__u8     sco_mtu;
	__u16    acl_max_pkt;
	__u16    sco_max_pkt;
} __attribute__ ((packed));

/* Link Control */
#define OGF_LINK_CTL	0x01 
#define OCF_CREATE_CONN		0x0005
struct hci_cp_create_conn {
	bdaddr_t bdaddr;
	__u16    pkt_type;
	__u8     pscan_rep_mode;
	__u8     pscan_mode;
	__u16    clock_offset;
	__u8     role_switch;
} __attribute__ ((packed));

#define OCF_ACCEPT_CONN_REQ	0x0009
struct hci_cp_accept_conn_req {
	bdaddr_t bdaddr;
	__u8     role;
} __attribute__ ((packed));

#define OCF_REJECT_CONN_REQ	0x000a
struct hci_cp_reject_conn_req {
	bdaddr_t bdaddr;
	__u8     reason;
} __attribute__ ((packed));

#define OCF_DISCONNECT	0x0006
struct hci_cp_disconnect {
	__u16    handle;
	__u8     reason;
} __attribute__ ((packed));

#define OCF_ADD_SCO	0x0007
struct hci_cp_add_sco {
	__u16    handle;
	__u16    pkt_type;
} __attribute__ ((packed));

#define OCF_INQUIRY		0x0001
struct hci_cp_inquiry {
	__u8     lap[3];
	__u8     length;
	__u8     num_rsp;
} __attribute__ ((packed));

#define OCF_INQUIRY_CANCEL	0x0002

#define OCF_LINK_KEY_REPLY	0x000B
struct hci_cp_link_key_reply {
	bdaddr_t bdaddr;
	__u8     link_key[16];
} __attribute__ ((packed));

#define OCF_LINK_KEY_NEG_REPLY	0x000C
struct hci_cp_link_key_neg_reply {
	bdaddr_t bdaddr;
} __attribute__ ((packed));

#define OCF_PIN_CODE_REPLY	0x000D
struct hci_cp_pin_code_reply {
	bdaddr_t bdaddr;
	__u8     pin_len;
	__u8     pin_code[16];
} __attribute__ ((packed));

#define OCF_PIN_CODE_NEG_REPLY	0x000E
struct hci_cp_pin_code_neg_reply {
	bdaddr_t bdaddr;
} __attribute__ ((packed));

#define OCF_CHANGE_CONN_PTYPE	0x000F
struct hci_cp_change_conn_ptype {
	__u16    handle;
	__u16    pkt_type;
} __attribute__ ((packed));

#define OCF_AUTH_REQUESTED	0x0011
struct hci_cp_auth_requested {
	__u16    handle;
} __attribute__ ((packed));

#define OCF_SET_CONN_ENCRYPT	0x0013
struct hci_cp_set_conn_encrypt {
	__u16    handle;
	__u8     encrypt;
} __attribute__ ((packed));

#define OCF_CHANGE_CONN_LINK_KEY 0x0015
struct hci_cp_change_conn_link_key {
	__u16    handle;
} __attribute__ ((packed));

#define OCF_READ_REMOTE_FEATURES 0x001B
struct hci_cp_read_rmt_features {
	__u16    handle;
} __attribute__ ((packed));

#define OCF_READ_REMOTE_VERSION 0x001D
struct hci_cp_read_rmt_version {
	__u16    handle;
} __attribute__ ((packed));

/* Link Policy */
#define OGF_LINK_POLICY	 0x02   
#define OCF_ROLE_DISCOVERY	0x0009
struct hci_cp_role_discovery {
	__u16    handle;
} __attribute__ ((packed));
struct hci_rp_role_discovery {
	__u8     status;
	__u16    handle;
	__u8     role;
} __attribute__ ((packed));

#define OCF_READ_LINK_POLICY	0x000C
struct hci_cp_read_link_policy {
	__u16    handle;
} __attribute__ ((packed));
struct hci_rp_read_link_policy {
	__u8     status;
	__u16    handle;
	__u16    policy;
} __attribute__ ((packed));

#define OCF_SWITCH_ROLE	0x000B
struct hci_cp_switch_role {
	bdaddr_t bdaddr;
	__u8     role;
} __attribute__ ((packed));

#define OCF_WRITE_LINK_POLICY	0x000D
struct hci_cp_write_link_policy {
	__u16    handle;
	__u16    policy;
} __attribute__ ((packed));
struct hci_rp_write_link_policy {
	__u8     status;
	__u16    handle;
} __attribute__ ((packed));

/* Status params */
#define OGF_STATUS_PARAM	0x05

/* Testing commands */
#define OGF_TESTING_CMD		0x3E

/* Vendor specific commands */
#define OGF_VENDOR_CMD		0x3F

/* ---- HCI Events ---- */
#define HCI_EV_INQUIRY_COMPLETE	0x01

#define HCI_EV_INQUIRY_RESULT	0x02
struct inquiry_info {
	bdaddr_t bdaddr;
	__u8     pscan_rep_mode;
	__u8     pscan_period_mode;
	__u8     pscan_mode;
	__u8     dev_class[3];
	__u16    clock_offset;
} __attribute__ ((packed));

#define HCI_EV_INQUIRY_RESULT_WITH_RSSI	0x22
struct inquiry_info_with_rssi {
	bdaddr_t bdaddr;
	__u8     pscan_rep_mode;
	__u8     pscan_period_mode;
	__u8     dev_class[3];
	__u16    clock_offset;
	__s8     rssi;
} __attribute__ ((packed));
struct inquiry_info_with_rssi_and_pscan_mode {
	bdaddr_t bdaddr;
	__u8     pscan_rep_mode;
	__u8     pscan_period_mode;
	__u8     pscan_mode;
	__u8     dev_class[3];
	__u16    clock_offset;
	__s8     rssi;
} __attribute__ ((packed));

#define HCI_EV_CONN_COMPLETE 	0x03
struct hci_ev_conn_complete {
	__u8     status;
	__u16    handle;
	bdaddr_t bdaddr;
	__u8     link_type;
	__u8     encr_mode;
} __attribute__ ((packed));

#define HCI_EV_CONN_REQUEST	0x04
struct hci_ev_conn_request {
	bdaddr_t bdaddr;
	__u8     dev_class[3];
	__u8     link_type;
} __attribute__ ((packed));

#define HCI_EV_DISCONN_COMPLETE	0x05
struct hci_ev_disconn_complete {
	__u8     status;
	__u16    handle;
	__u8     reason;
} __attribute__ ((packed));

#define HCI_EV_AUTH_COMPLETE	0x06
struct hci_ev_auth_complete {
	__u8     status;
	__u16    handle;
} __attribute__ ((packed));

#define HCI_EV_ENCRYPT_CHANGE	0x08
struct hci_ev_encrypt_change {
	__u8     status;
	__u16    handle;
	__u8     encrypt;
} __attribute__ ((packed));

#define HCI_EV_CHANGE_CONN_LINK_KEY_COMPLETE	0x09
struct hci_ev_change_conn_link_key_complete {
	__u8     status;
	__u16    handle;
} __attribute__ ((packed));

#define HCI_EV_QOS_SETUP_COMPLETE	0x0D
struct hci_qos {
	__u8     service_type;
	__u32    token_rate;
	__u32    peak_bandwidth;
	__u32    latency;
	__u32    delay_variation;
} __attribute__ ((packed));
struct hci_ev_qos_setup_complete {
	__u8     status;
	__u16    handle;
	struct   hci_qos qos;
} __attribute__ ((packed));

#define HCI_EV_CMD_COMPLETE 	0x0E
struct hci_ev_cmd_complete {
	__u8     ncmd;
	__u16    opcode;
} __attribute__ ((packed));

#define HCI_EV_CMD_STATUS 	0x0F
struct hci_ev_cmd_status {
	__u8     status;
	__u8     ncmd;
	__u16    opcode;
} __attribute__ ((packed));

#define HCI_EV_NUM_COMP_PKTS	0x13
struct hci_ev_num_comp_pkts {
	__u8     num_hndl;
	/* variable length part */
} __attribute__ ((packed));

#define HCI_EV_ROLE_CHANGE	0x12
struct hci_ev_role_change {
	__u8     status;
	bdaddr_t bdaddr;
	__u8     role;
} __attribute__ ((packed));

#define HCI_EV_MODE_CHANGE	0x14
struct hci_ev_mode_change {
	__u8     status;
	__u16    handle;
	__u8     mode;
	__u16    interval;
} __attribute__ ((packed));

#define HCI_EV_PIN_CODE_REQ	0x16
struct hci_ev_pin_code_req {
	bdaddr_t bdaddr;
} __attribute__ ((packed));

#define HCI_EV_LINK_KEY_REQ	0x17
struct hci_ev_link_key_req {
	bdaddr_t bdaddr;
} __attribute__ ((packed));

#define HCI_EV_LINK_KEY_NOTIFY	0x18
struct hci_ev_link_key_notify {
	bdaddr_t bdaddr;
	__u8	 link_key[16];
	__u8	 key_type;
} __attribute__ ((packed));

#define HCI_EV_RMT_FEATURES	0x0B
struct hci_ev_rmt_features {
	__u8     status;
	__u16    handle;
	__u8     features[8];
} __attribute__ ((packed));

#define HCI_EV_RMT_VERSION	0x0C
struct hci_ev_rmt_version {
	__u8     status;
	__u16    handle;
	__u8     lmp_ver;
	__u16    manufacturer;
	__u16    lmp_subver;
} __attribute__ ((packed));

#define HCI_EV_CLOCK_OFFSET	0x01C
struct hci_ev_clock_offset {
	__u8     status;
	__u16    handle;
	__u16    clock_offset;
} __attribute__ ((packed));

#define HCI_EV_PSCAN_REP_MODE	0x20
struct hci_ev_pscan_rep_mode {
	bdaddr_t bdaddr;
	__u8     pscan_rep_mode;
} __attribute__ ((packed));

/* Internal events generated by Bluetooth stack */
#define HCI_EV_STACK_INTERNAL	0xFD
struct hci_ev_stack_internal {
	__u16    type;
	__u8     data[0];
} __attribute__ ((packed));

#define HCI_EV_SI_DEVICE  	0x01
struct hci_ev_si_device {
	__u16    event;
	__u16    dev_id;
} __attribute__ ((packed));

#define HCI_EV_SI_SECURITY	0x02
struct hci_ev_si_security {
	__u16    event;
	__u16    proto;
	__u16    subproto;
	__u8     incoming;
} __attribute__ ((packed));

/* ---- HCI Packet structures ---- */
#define HCI_COMMAND_HDR_SIZE 3
#define HCI_EVENT_HDR_SIZE   2
#define HCI_ACL_HDR_SIZE     4
#define HCI_SCO_HDR_SIZE     3

struct hci_command_hdr {
	__u16 	opcode;		/* OCF & OGF */
	__u8 	plen;
} __attribute__ ((packed));

struct hci_event_hdr {
	__u8 	evt;
	__u8 	plen;
} __attribute__ ((packed));

struct hci_acl_hdr {
	__u16 	handle;		/* Handle & Flags(PB, BC) */
	__u16 	dlen;
} __attribute__ ((packed));

struct hci_sco_hdr {
	__u16 	handle;
	__u8 	dlen;
} __attribute__ ((packed));

/* Command opcode pack/unpack */
#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(h)		(h & 0x0fff)
#define hci_flags(h)		(h >> 12)

/* ---- HCI Sockets ---- */

/* Socket options */
#define HCI_DATA_DIR	1
#define HCI_FILTER	2
#define HCI_TIME_STAMP	3

/* CMSG flags */
#define HCI_CMSG_DIR	0x0001
#define HCI_CMSG_TSTAMP	0x0002

struct sockaddr_hci {
	sa_family_t    hci_family;
	unsigned short hci_dev;
};
#define HCI_DEV_NONE	0xffff

struct hci_filter {
	unsigned long type_mask;
	unsigned long event_mask[2];
	__u16   opcode;
};

struct hci_ufilter {
	__u32   type_mask;
	__u32   event_mask[2];
	__u16   opcode;
};

#define HCI_FLT_TYPE_BITS	31
#define HCI_FLT_EVENT_BITS	63
#define HCI_FLT_OGF_BITS	63
#define HCI_FLT_OCF_BITS	127

/* ---- HCI Ioctl requests structures ---- */
struct hci_dev_stats {
	__u32 err_rx;
	__u32 err_tx;
	__u32 cmd_tx;
	__u32 evt_rx;
	__u32 acl_tx;
	__u32 acl_rx;
	__u32 sco_tx;
	__u32 sco_rx;
	__u32 byte_rx;
	__u32 byte_tx;
};

struct hci_dev_info {
	__u16 dev_id;
	char  name[8];

	bdaddr_t bdaddr;

	__u32 flags;
	__u8  type;

	__u8  features[8];

	__u32 pkt_type;
	__u32 link_policy;
	__u32 link_mode;

	__u16 acl_mtu;
	__u16 acl_pkts;
	__u16 sco_mtu;
	__u16 sco_pkts;

	struct hci_dev_stats stat;
};

struct hci_conn_info {
	__u16    handle;
	bdaddr_t bdaddr;
	__u8	 type;
	__u8	 out;
	__u16	 state;
	__u32	 link_mode;
};

struct hci_dev_req {
	__u16 dev_id;
	__u32 dev_opt;
};

struct hci_dev_list_req {
	__u16  dev_num;
	struct hci_dev_req dev_req[0];	/* hci_dev_req structures */
};

struct hci_conn_list_req {
	__u16  dev_id;
	__u16  conn_num;
	struct hci_conn_info conn_info[0];
};

struct hci_conn_info_req {
	bdaddr_t bdaddr;
	__u8     type;
	struct   hci_conn_info conn_info[0];
};

struct hci_inquiry_req {
	__u16 dev_id;
	__u16 flags;
	__u8  lap[3];
	__u8  length;
	__u8  num_rsp;
};
#define IREQ_CACHE_FLUSH 0x0001

#endif /* __HCI_H */
