/*
 * Copyright (c) 2012 GCT Semiconductor, Inc. All rights reserved.
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 */

#ifndef _HCI_PACKET_H_
#define _HCI_PACKET_H_

#define HCI_HEADER_SIZE 4

/*
 * The NIC type definition:
 * For backward compatibility, lower 16 bits used as they were.
 * Lower 16 bit: NIC_TYPE values
 * Uppoer 16 bit: NIC_TYPE Flags
 */
#define NIC_TYPE_NIC0		0x00000010
#define NIC_TYPE_NIC1		0x00000011
#define NIC_TYPE_NIC2		0x00000012
#define NIC_TYPE_NIC3		0x00000013
#define NIC_TYPE_ARP		0x00000100
#define NIC_TYPE_ICMPV6		0x00000200
#define NIC_TYPE_MASK		0x0000FFFF
#define NIC_TYPE_F_IPV4		0x00010000
#define NIC_TYPE_F_IPV6		0x00020000
#define NIC_TYPE_F_DHCP		0x00040000
#define NIC_TYPE_F_NDP		0x00080000
#define NIC_TYPE_F_VLAN		0x00100000

struct hci_packet {
	__dev16 cmd_evt;
	__dev16 len;
	u8 data[0];
} __packed;

struct tlv {
	u8 type;
	u8 len;
	u8 *data[1];
} __packed;

struct sdu_header {
	__dev16 cmd_evt;
	__dev16 len;
	__dev32 dftEpsId;
	__dev32 bearer_ID;
	__dev32 nic_type;
} __packed;

struct sdu {
	__dev16 cmd_evt;
	__dev16 len;
	__dev32 dft_eps_ID;
	__dev32 bearer_ID;
	__dev32 nic_type;
	u8 data[0];
} __packed;

struct multi_sdu {
	__dev16 cmd_evt;
	__dev16 len;
	__dev16 num_packet;
	__dev16 reserved;
	u8 data[0];
} __packed;

struct hci_pdn_table_ind {
	__dev16 cmd_evt;
	__dev16 len;
	u8 activate;
	__dev32 dft_eps_id;
	__dev32 nic_type;
	u8 pdn_type;
	u8 ipv4_addr[4];
	u8 ipv6_intf_id[8];
} __packed;

struct hci_connect_ind {
	__dev16 cmd_evt;
	__dev16 len;
	__dev32 connect;
} __packed;

#endif /* _HCI_PACKET_H_ */
