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

/*
 *  $Id$
 */

#ifndef __L2CAP_H
#define __L2CAP_H

#ifdef __cplusplus
extern "C" {
#endif

/* L2CAP defaults */
#define L2CAP_DEFAULT_MTU 	672
#define L2CAP_DEFAULT_FLUSH_TO	0xFFFF

#define L2CAP_CONN_TIMEOUT 	(HZ * 40)

/* L2CAP socket address */
struct sockaddr_l2 {
	sa_family_t	l2_family;
	unsigned short	l2_psm;
	bdaddr_t	l2_bdaddr;
};

/* Socket options */
#define L2CAP_OPTIONS	0x01
struct l2cap_options {
	uint16_t omtu;
	uint16_t imtu;
	uint16_t flush_to;
};

#define L2CAP_CONNINFO  0x02
struct l2cap_conninfo {
	uint16_t hci_handle;
};

#define L2CAP_LM	0x03
#define L2CAP_LM_MASTER		0x0001
#define L2CAP_LM_AUTH		0x0002
#define L2CAP_LM_ENCRYPT	0x0004
#define L2CAP_LM_TRUSTED	0x0008

#define L2CAP_QOS	0x04
struct l2cap_qos {
	uint16_t service_type;
	uint32_t token_rate;
	uint32_t token_bucket_size;
	uint32_t peak_bandwidth;
	uint32_t latency;
	uint32_t delay_variation;
};

#define L2CAP_SERV_NO_TRAFFIC	0x00
#define L2CAP_SERV_BEST_EFFORT	0x01
#define L2CAP_SERV_GUARANTEED	0x02

/* L2CAP command codes */
#define L2CAP_COMMAND_REJ 0x01
#define L2CAP_CONN_REQ    0x02
#define L2CAP_CONN_RSP    0x03
#define L2CAP_CONF_REQ    0x04
#define L2CAP_CONF_RSP    0x05
#define L2CAP_DISCONN_REQ 0x06
#define L2CAP_DISCONN_RSP 0x07
#define L2CAP_ECHO_REQ    0x08
#define L2CAP_ECHO_RSP    0x09
#define L2CAP_INFO_REQ    0x0a
#define L2CAP_INFO_RSP    0x0b

/* L2CAP structures */
typedef struct {
	uint16_t      len;
	uint16_t      cid;
} __attribute__ ((packed)) 	l2cap_hdr;
#define L2CAP_HDR_SIZE		4

typedef struct {
	uint8_t       code;
	uint8_t       ident;
	uint16_t      len;
} __attribute__ ((packed))	l2cap_cmd_hdr;
#define L2CAP_CMD_HDR_SIZE	4

typedef struct {
	uint16_t      reason;
} __attribute__ ((packed))	l2cap_cmd_rej;
#define L2CAP_CMD_REJ_SIZE	2

typedef struct {
	uint16_t      psm;
	uint16_t      scid;
} __attribute__ ((packed))	l2cap_conn_req;
#define L2CAP_CONN_REQ_SIZE	4

typedef struct {
	uint16_t      dcid;
	uint16_t      scid;
	uint16_t      result;
	uint16_t      status;
} __attribute__ ((packed))	l2cap_conn_rsp;
#define L2CAP_CONN_RSP_SIZE	8

/* connect result */
#define L2CAP_CR_SUCCESS    0x0000
#define L2CAP_CR_PEND       0x0001
#define L2CAP_CR_BAD_PSM    0x0002
#define L2CAP_CR_SEC_BLOCK  0x0003
#define L2CAP_CR_NO_MEM     0x0004

/* connect status */
#define L2CAP_CS_NO_INFO      0x0000
#define L2CAP_CS_AUTHEN_PEND  0x0001
#define L2CAP_CS_AUTHOR_PEND  0x0002

typedef struct {
	uint16_t      dcid;
	uint16_t      flags;
	uint8_t       data[0];
} __attribute__ ((packed))	l2cap_conf_req;
#define L2CAP_CONF_REQ_SIZE	4

typedef struct {
	uint16_t      scid;
	uint16_t      flags;
	uint16_t      result;
	uint8_t       data[0];
} __attribute__ ((packed))	l2cap_conf_rsp;
#define L2CAP_CONF_RSP_SIZE   	6

#define L2CAP_CONF_SUCCESS	0x00
#define L2CAP_CONF_UNACCEPT	0x01

typedef struct {
	uint8_t       type;
	uint8_t       len;
	uint8_t       val[0];
} __attribute__ ((packed))	l2cap_conf_opt;
#define L2CAP_CONF_OPT_SIZE	2

#define L2CAP_CONF_MTU		0x01
#define L2CAP_CONF_FLUSH_TO	0x02
#define L2CAP_CONF_QOS		0x03

#define L2CAP_CONF_MAX_SIZE	22

typedef struct {
	uint16_t      dcid;
	uint16_t      scid;
} __attribute__ ((packed)) 	l2cap_disconn_req;
#define L2CAP_DISCONN_REQ_SIZE	4

typedef struct {
	uint16_t      dcid;
	uint16_t      scid;
} __attribute__ ((packed)) 	l2cap_disconn_rsp;
#define L2CAP_DISCONN_RSP_SIZE	4

typedef struct {
	uint16_t       type;
	uint8_t        data[0];
} __attribute__ ((packed))	l2cap_info_req;
#define L2CAP_INFO_REQ_SIZE	2

typedef struct {
	uint16_t       type;
	uint16_t       result;
	uint8_t        data[0];
} __attribute__ ((packed))	l2cap_info_rsp;
#define L2CAP_INFO_RSP_SIZE	4

#ifdef __cplusplus
}
#endif

#endif /* __L2CAP_H */
