/* Copyright (c) 2015 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

/* Definitions from Linux bluetooth directory that are useful for
 * bluetotoh audio.
 * TODO(hychao): Remove this file when there is bluetooth user
 * space header provided.
 */

#include <unistd.h>

#define HCI_VIRTUAL 0
#define HCI_USB 1
#define HCI_PCCARD 2
#define HCI_UART 3
#define HCI_RS232 4
#define HCI_PCI 5
#define HCI_SDIO 6
#define HCI_BUS_MAX 7

#define BTPROTO_HCI 1
#define BTPROTO_SCO 2

#define SCO_OPTIONS 0x01
#define SOL_SCO 17

#define HCIGETDEVINFO _IOR('H', 211, int)

typedef struct {
	uint8_t b[6];
} __attribute__((packed)) bdaddr_t;

struct hci_dev_stats {
	uint32_t err_rx;
	uint32_t err_tx;
	uint32_t cmd_tx;
	uint32_t evt_rx;
	uint32_t acl_tx;
	uint32_t acl_rx;
	uint32_t sco_tx;
	uint32_t sco_rx;
	uint32_t byte_rx;
	uint32_t byte_tx;
};

struct hci_dev_info {
	uint16_t dev_id;
	char name[8];
	bdaddr_t bdaddr;
	uint32_t flags;
	uint8_t type;
	uint8_t features[8];
	uint32_t pkt_type;
	uint32_t link_policy;
	uint32_t link_mode;
	uint16_t acl_mtu;
	uint16_t acl_pkts;
	uint16_t sco_mtu;
	uint16_t sco_pkts;
	struct hci_dev_stats stat;
};

struct sco_options {
	uint16_t mtu;
};

#define SOL_BLUETOOTH 274

#define BT_VOICE 11
struct bt_voice {
	uint16_t setting;
};

#define BT_VOICE_TRANSPARENT 0x0003

#define BT_SNDMTU 12

#define BT_RCVMTU 13

#define BT_PKT_STATUS 16

#define BT_SCM_PKT_STATUS 0x03
