#ifndef __L2CAP_H
#define __L2CAP_H
#include <asm/unaligned.h>
#include <linux/atomic.h>
#define L2CAP_DEFAULT_MTU …
#define L2CAP_DEFAULT_MIN_MTU …
#define L2CAP_DEFAULT_FLUSH_TO …
#define L2CAP_EFS_DEFAULT_FLUSH_TO …
#define L2CAP_DEFAULT_TX_WINDOW …
#define L2CAP_DEFAULT_EXT_WINDOW …
#define L2CAP_DEFAULT_MAX_TX …
#define L2CAP_DEFAULT_RETRANS_TO …
#define L2CAP_DEFAULT_MONITOR_TO …
#define L2CAP_DEFAULT_MAX_PDU_SIZE …
#define L2CAP_DEFAULT_ACK_TO …
#define L2CAP_DEFAULT_MAX_SDU_SIZE …
#define L2CAP_DEFAULT_SDU_ITIME …
#define L2CAP_DEFAULT_ACC_LAT …
#define L2CAP_BREDR_MAX_PAYLOAD …
#define L2CAP_LE_MIN_MTU …
#define L2CAP_ECRED_CONN_SCID_MAX …
#define L2CAP_DISC_TIMEOUT …
#define L2CAP_DISC_REJ_TIMEOUT …
#define L2CAP_ENC_TIMEOUT …
#define L2CAP_CONN_TIMEOUT …
#define L2CAP_INFO_TIMEOUT …
#define L2CAP_MOVE_TIMEOUT …
#define L2CAP_MOVE_ERTX_TIMEOUT …
#define L2CAP_WAIT_ACK_POLL_PERIOD …
#define L2CAP_WAIT_ACK_TIMEOUT …
struct sockaddr_l2 { … };
#define L2CAP_OPTIONS …
struct l2cap_options { … };
#define L2CAP_CONNINFO …
struct l2cap_conninfo { … };
#define L2CAP_LM …
#define L2CAP_LM_MASTER …
#define L2CAP_LM_AUTH …
#define L2CAP_LM_ENCRYPT …
#define L2CAP_LM_TRUSTED …
#define L2CAP_LM_RELIABLE …
#define L2CAP_LM_SECURE …
#define L2CAP_LM_FIPS …
#define L2CAP_COMMAND_REJ …
#define L2CAP_CONN_REQ …
#define L2CAP_CONN_RSP …
#define L2CAP_CONF_REQ …
#define L2CAP_CONF_RSP …
#define L2CAP_DISCONN_REQ …
#define L2CAP_DISCONN_RSP …
#define L2CAP_ECHO_REQ …
#define L2CAP_ECHO_RSP …
#define L2CAP_INFO_REQ …
#define L2CAP_INFO_RSP …
#define L2CAP_CONN_PARAM_UPDATE_REQ …
#define L2CAP_CONN_PARAM_UPDATE_RSP …
#define L2CAP_LE_CONN_REQ …
#define L2CAP_LE_CONN_RSP …
#define L2CAP_LE_CREDITS …
#define L2CAP_ECRED_CONN_REQ …
#define L2CAP_ECRED_CONN_RSP …
#define L2CAP_ECRED_RECONF_REQ …
#define L2CAP_ECRED_RECONF_RSP …
#define L2CAP_FEAT_FLOWCTL …
#define L2CAP_FEAT_RETRANS …
#define L2CAP_FEAT_BIDIR_QOS …
#define L2CAP_FEAT_ERTM …
#define L2CAP_FEAT_STREAMING …
#define L2CAP_FEAT_FCS …
#define L2CAP_FEAT_EXT_FLOW …
#define L2CAP_FEAT_FIXED_CHAN …
#define L2CAP_FEAT_EXT_WINDOW …
#define L2CAP_FEAT_UCD …
#define L2CAP_FCS_NONE …
#define L2CAP_FCS_CRC16 …
#define L2CAP_FC_SIG_BREDR …
#define L2CAP_FC_CONNLESS …
#define L2CAP_FC_ATT …
#define L2CAP_FC_SIG_LE …
#define L2CAP_FC_SMP_LE …
#define L2CAP_FC_SMP_BREDR …
#define L2CAP_CTRL_SAR …
#define L2CAP_CTRL_REQSEQ …
#define L2CAP_CTRL_TXSEQ …
#define L2CAP_CTRL_SUPERVISE …
#define L2CAP_CTRL_RETRANS …
#define L2CAP_CTRL_FINAL …
#define L2CAP_CTRL_POLL …
#define L2CAP_CTRL_FRAME_TYPE …
#define L2CAP_CTRL_TXSEQ_SHIFT …
#define L2CAP_CTRL_SUPER_SHIFT …
#define L2CAP_CTRL_POLL_SHIFT …
#define L2CAP_CTRL_FINAL_SHIFT …
#define L2CAP_CTRL_REQSEQ_SHIFT …
#define L2CAP_CTRL_SAR_SHIFT …
#define L2CAP_EXT_CTRL_TXSEQ …
#define L2CAP_EXT_CTRL_SAR …
#define L2CAP_EXT_CTRL_SUPERVISE …
#define L2CAP_EXT_CTRL_REQSEQ …
#define L2CAP_EXT_CTRL_POLL …
#define L2CAP_EXT_CTRL_FINAL …
#define L2CAP_EXT_CTRL_FRAME_TYPE …
#define L2CAP_EXT_CTRL_FINAL_SHIFT …
#define L2CAP_EXT_CTRL_REQSEQ_SHIFT …
#define L2CAP_EXT_CTRL_SAR_SHIFT …
#define L2CAP_EXT_CTRL_SUPER_SHIFT …
#define L2CAP_EXT_CTRL_POLL_SHIFT …
#define L2CAP_EXT_CTRL_TXSEQ_SHIFT …
#define L2CAP_SUPER_RR …
#define L2CAP_SUPER_REJ …
#define L2CAP_SUPER_RNR …
#define L2CAP_SUPER_SREJ …
#define L2CAP_SAR_UNSEGMENTED …
#define L2CAP_SAR_START …
#define L2CAP_SAR_END …
#define L2CAP_SAR_CONTINUE …
#define L2CAP_REJ_NOT_UNDERSTOOD …
#define L2CAP_REJ_MTU_EXCEEDED …
#define L2CAP_REJ_INVALID_CID …
struct l2cap_hdr { … } __packed;
#define L2CAP_LEN_SIZE …
#define L2CAP_HDR_SIZE …
#define L2CAP_ENH_HDR_SIZE …
#define L2CAP_EXT_HDR_SIZE …
#define L2CAP_FCS_SIZE …
#define L2CAP_SDULEN_SIZE …
#define L2CAP_PSMLEN_SIZE …
#define L2CAP_ENH_CTRL_SIZE …
#define L2CAP_EXT_CTRL_SIZE …
struct l2cap_cmd_hdr { … } __packed;
#define L2CAP_CMD_HDR_SIZE …
struct l2cap_cmd_rej_unk { … } __packed;
struct l2cap_cmd_rej_mtu { … } __packed;
struct l2cap_cmd_rej_cid { … } __packed;
struct l2cap_conn_req { … } __packed;
struct l2cap_conn_rsp { … } __packed;
#define L2CAP_PSM_SDP …
#define L2CAP_PSM_RFCOMM …
#define L2CAP_PSM_3DSP …
#define L2CAP_PSM_IPSP …
#define L2CAP_PSM_DYN_START …
#define L2CAP_PSM_DYN_END …
#define L2CAP_PSM_AUTO_END …
#define L2CAP_PSM_LE_DYN_START …
#define L2CAP_PSM_LE_DYN_END …
#define L2CAP_CID_SIGNALING …
#define L2CAP_CID_CONN_LESS …
#define L2CAP_CID_ATT …
#define L2CAP_CID_LE_SIGNALING …
#define L2CAP_CID_SMP …
#define L2CAP_CID_SMP_BREDR …
#define L2CAP_CID_DYN_START …
#define L2CAP_CID_DYN_END …
#define L2CAP_CID_LE_DYN_END …
#define L2CAP_CR_SUCCESS …
#define L2CAP_CR_PEND …
#define L2CAP_CR_BAD_PSM …
#define L2CAP_CR_SEC_BLOCK …
#define L2CAP_CR_NO_MEM …
#define L2CAP_CR_INVALID_SCID …
#define L2CAP_CR_SCID_IN_USE …
#define L2CAP_CR_LE_SUCCESS …
#define L2CAP_CR_LE_BAD_PSM …
#define L2CAP_CR_LE_NO_MEM …
#define L2CAP_CR_LE_AUTHENTICATION …
#define L2CAP_CR_LE_AUTHORIZATION …
#define L2CAP_CR_LE_BAD_KEY_SIZE …
#define L2CAP_CR_LE_ENCRYPTION …
#define L2CAP_CR_LE_INVALID_SCID …
#define L2CAP_CR_LE_SCID_IN_USE …
#define L2CAP_CR_LE_UNACCEPT_PARAMS …
#define L2CAP_CR_LE_INVALID_PARAMS …
#define L2CAP_CS_NO_INFO …
#define L2CAP_CS_AUTHEN_PEND …
#define L2CAP_CS_AUTHOR_PEND …
struct l2cap_conf_req { … } __packed;
struct l2cap_conf_rsp { … } __packed;
#define L2CAP_CONF_SUCCESS …
#define L2CAP_CONF_UNACCEPT …
#define L2CAP_CONF_REJECT …
#define L2CAP_CONF_UNKNOWN …
#define L2CAP_CONF_PENDING …
#define L2CAP_CONF_EFS_REJECT …
#define L2CAP_CONF_FLAG_CONTINUATION …
struct l2cap_conf_opt { … } __packed;
#define L2CAP_CONF_OPT_SIZE …
#define L2CAP_CONF_HINT …
#define L2CAP_CONF_MASK …
#define L2CAP_CONF_MTU …
#define L2CAP_CONF_FLUSH_TO …
#define L2CAP_CONF_QOS …
#define L2CAP_CONF_RFC …
#define L2CAP_CONF_FCS …
#define L2CAP_CONF_EFS …
#define L2CAP_CONF_EWS …
#define L2CAP_CONF_MAX_SIZE …
struct l2cap_conf_rfc { … } __packed;
#define L2CAP_MODE_BASIC …
#define L2CAP_MODE_RETRANS …
#define L2CAP_MODE_FLOWCTL …
#define L2CAP_MODE_ERTM …
#define L2CAP_MODE_STREAMING …
#define L2CAP_MODE_LE_FLOWCTL …
#define L2CAP_MODE_EXT_FLOWCTL …
struct l2cap_conf_efs { … } __packed;
#define L2CAP_SERV_NOTRAFIC …
#define L2CAP_SERV_BESTEFFORT …
#define L2CAP_SERV_GUARANTEED …
#define L2CAP_BESTEFFORT_ID …
struct l2cap_disconn_req { … } __packed;
struct l2cap_disconn_rsp { … } __packed;
struct l2cap_info_req { … } __packed;
struct l2cap_info_rsp { … } __packed;
#define L2CAP_MR_SUCCESS …
#define L2CAP_MR_PEND …
#define L2CAP_MR_BAD_ID …
#define L2CAP_MR_SAME_ID …
#define L2CAP_MR_NOT_SUPP …
#define L2CAP_MR_COLLISION …
#define L2CAP_MR_NOT_ALLOWED …
struct l2cap_move_chan_cfm { … } __packed;
#define L2CAP_MC_CONFIRMED …
#define L2CAP_MC_UNCONFIRMED …
struct l2cap_move_chan_cfm_rsp { … } __packed;
#define L2CAP_IT_CL_MTU …
#define L2CAP_IT_FEAT_MASK …
#define L2CAP_IT_FIXED_CHAN …
#define L2CAP_IR_SUCCESS …
#define L2CAP_IR_NOTSUPP …
struct l2cap_conn_param_update_req { … } __packed;
struct l2cap_conn_param_update_rsp { … } __packed;
#define L2CAP_CONN_PARAM_ACCEPTED …
#define L2CAP_CONN_PARAM_REJECTED …
struct l2cap_le_conn_req { … } __packed;
struct l2cap_le_conn_rsp { … } __packed;
struct l2cap_le_credits { … } __packed;
#define L2CAP_ECRED_MIN_MTU …
#define L2CAP_ECRED_MIN_MPS …
#define L2CAP_ECRED_MAX_CID …
struct l2cap_ecred_conn_req { … } __packed;
struct l2cap_ecred_conn_rsp { … };
struct l2cap_ecred_reconf_req { … } __packed;
#define L2CAP_RECONF_SUCCESS …
#define L2CAP_RECONF_INVALID_MTU …
#define L2CAP_RECONF_INVALID_MPS …
struct l2cap_ecred_reconf_rsp { … } __packed;
struct l2cap_seq_list { … };
#define L2CAP_SEQ_LIST_CLEAR …
#define L2CAP_SEQ_LIST_TAIL …
struct l2cap_chan { … };
struct l2cap_ops { … };
struct l2cap_conn { … };
struct l2cap_user { … };
#define L2CAP_INFO_CL_MTU_REQ_SENT …
#define L2CAP_INFO_FEAT_MASK_REQ_SENT …
#define L2CAP_INFO_FEAT_MASK_REQ_DONE …
#define L2CAP_CHAN_RAW …
#define L2CAP_CHAN_CONN_LESS …
#define L2CAP_CHAN_CONN_ORIENTED …
#define L2CAP_CHAN_FIXED …
#define l2cap_pi(sk) …
struct l2cap_rx_busy { … };
struct l2cap_pinfo { … };
enum { … };
#define L2CAP_CONF_MAX_CONF_REQ …
#define L2CAP_CONF_MAX_CONF_RSP …
enum { … };
enum { … };
enum { … };
enum { … };
enum { … };
enum { … };
enum { … };
enum { … };
enum { … };
void l2cap_chan_hold(struct l2cap_chan *c);
struct l2cap_chan *l2cap_chan_hold_unless_zero(struct l2cap_chan *c);
void l2cap_chan_put(struct l2cap_chan *c);
static inline void l2cap_chan_lock(struct l2cap_chan *chan)
{ … }
static inline void l2cap_chan_unlock(struct l2cap_chan *chan)
{ … }
static inline void l2cap_set_timer(struct l2cap_chan *chan,
struct delayed_work *work, long timeout)
{ … }
static inline bool l2cap_clear_timer(struct l2cap_chan *chan,
struct delayed_work *work)
{ … }
#define __set_chan_timer(c, t) …
#define __clear_chan_timer(c) …
#define __clear_retrans_timer(c) …
#define __clear_monitor_timer(c) …
#define __set_ack_timer(c) …
#define __clear_ack_timer(c) …
static inline int __seq_offset(struct l2cap_chan *chan, __u16 seq1, __u16 seq2)
{ … }
static inline __u16 __next_seq(struct l2cap_chan *chan, __u16 seq)
{ … }
static inline struct l2cap_chan *l2cap_chan_no_new_connection(struct l2cap_chan *chan)
{ … }
static inline int l2cap_chan_no_recv(struct l2cap_chan *chan, struct sk_buff *skb)
{ … }
static inline struct sk_buff *l2cap_chan_no_alloc_skb(struct l2cap_chan *chan,
unsigned long hdr_len,
unsigned long len, int nb)
{ … }
static inline void l2cap_chan_no_teardown(struct l2cap_chan *chan, int err)
{ … }
static inline void l2cap_chan_no_close(struct l2cap_chan *chan)
{ … }
static inline void l2cap_chan_no_ready(struct l2cap_chan *chan)
{ … }
static inline void l2cap_chan_no_state_change(struct l2cap_chan *chan,
int state, int err)
{ … }
static inline void l2cap_chan_no_defer(struct l2cap_chan *chan)
{ … }
static inline void l2cap_chan_no_suspend(struct l2cap_chan *chan)
{ … }
static inline void l2cap_chan_no_resume(struct l2cap_chan *chan)
{ … }
static inline void l2cap_chan_no_set_shutdown(struct l2cap_chan *chan)
{ … }
static inline long l2cap_chan_no_get_sndtimeo(struct l2cap_chan *chan)
{ … }
extern bool disable_ertm;
extern bool enable_ecred;
int l2cap_init_sockets(void);
void l2cap_cleanup_sockets(void);
bool l2cap_is_socket(struct socket *sock);
void __l2cap_le_connect_rsp_defer(struct l2cap_chan *chan);
void __l2cap_ecred_conn_rsp_defer(struct l2cap_chan *chan);
void __l2cap_connect_rsp_defer(struct l2cap_chan *chan);
int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm);
int l2cap_add_scid(struct l2cap_chan *chan, __u16 scid);
struct l2cap_chan *l2cap_chan_create(void);
void l2cap_chan_close(struct l2cap_chan *chan, int reason);
int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
bdaddr_t *dst, u8 dst_type, u16 timeout);
int l2cap_chan_reconfigure(struct l2cap_chan *chan, __u16 mtu);
int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
void l2cap_chan_rx_avail(struct l2cap_chan *chan, ssize_t rx_avail);
int l2cap_chan_check_security(struct l2cap_chan *chan, bool initiator);
void l2cap_chan_set_defaults(struct l2cap_chan *chan);
int l2cap_ertm_init(struct l2cap_chan *chan);
void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan);
void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan);
l2cap_chan_func_t;
void l2cap_chan_list(struct l2cap_conn *conn, l2cap_chan_func_t func,
void *data);
void l2cap_chan_del(struct l2cap_chan *chan, int err);
void l2cap_send_conn_req(struct l2cap_chan *chan);
void l2cap_move_start(struct l2cap_chan *chan);
void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
u8 status);
void __l2cap_physical_cfm(struct l2cap_chan *chan, int result);
struct l2cap_conn *l2cap_conn_get(struct l2cap_conn *conn);
void l2cap_conn_put(struct l2cap_conn *conn);
int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user);
void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user);
#endif