15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 2009-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  This file contains interfaces which are internal to MCAP.
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef MCA_INT_H
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_INT_H
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h"
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "mca_api.h"
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** constants
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* INT initiates the L2CAP channel */
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_ACP     0
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_INT     1
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Type Definitions
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Header structure for api/received request/response. */
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct {
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR          hdr;        /* layer specific information */
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           op_code;    /* the request/response opcode */
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           rsp_code;   /* valid only if op_code is a response */
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          mdl_id;     /* the MDL ID associated with this request/response */
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           param;      /* other parameter */
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           mdep_id;    /* the MDEP ID associated with this request/response */
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* tMCA_HANDLE     rcb_idx;    For internal use only */
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* tMCA_CL         ccb_idx;    For internal use only */
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_DL         dcb_idx;    /* For internal use only */
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tMCA_CCB_MSG;
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* This data structure is associated with the AVDT_OPEN_IND_EVT and AVDT_OPEN_CFM_EVT. */
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct {
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR          hdr;                /* Event header */
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          peer_mtu;           /* Transport channel L2CAP MTU of the peer */
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          lcid;               /* L2CAP LCID  */
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           param;
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tMCA_OPEN;
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct {
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          reason;     /* disconnect reason from L2CAP */
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           param;      /* MCA_INT or MCA_ACP */
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          lcid;       /* L2CAP LCID  */
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tMCA_CLOSE;
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Header structure for state machine event parameters. */
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef union {
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR          hdr;        /* layer specific information */
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_CCB_MSG    api;
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN         llcong;
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           param;
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_OPEN       open;
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_CLOSE      close;
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tMCA_CCB_EVT;
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* control channel states */
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_NULL_ST,        /* not allocated */
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_OPENING_ST,
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_OPEN_ST,        /* open */
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_CLOSING_ST,		/* disconnecting */
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_MAX_ST
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 tMCA_CCB_STATE;
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* control channel events */
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_API_CONNECT_EVT,    /* application initiates a connect request. */
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_API_DISCONNECT_EVT, /* application initiates a disconnect request. */
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_API_REQ_EVT,        /* application initiates a request. The request may be create_mdl, delete_mdl, reconnect_mdl or abort_mdl. */
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_API_RSP_EVT,        /* application initiates a create_mdl or reconnect_mdl response. */
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_MSG_REQ_EVT,        /* a create_mdl, delete_mdl, reconnect_mdl or abort_mdl request message is received from the peer. */
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_MSG_RSP_EVT,        /* Response received event.  This event is sent whenever a response message is received for an outstanding request message. */
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_DL_OPEN_EVT,        /* data channel open. */
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_LL_OPEN_EVT,        /* Lower layer open.  This event is sent when the lower layer channel is open.  */
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_LL_CLOSE_EVT,       /* Lower layer close.  This event is sent when the lower layer channel is closed. */
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_LL_CONG_EVT,        /* Lower layer congestion.  This event is sent when the lower layer is congested. */
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_RSP_TOUT_EVT        /* time out for waiting the message response on the control channel */
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Header structure for callback event parameters. */
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef union {
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_OPEN       open;
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_CLOSE      close;
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR          hdr;        /* layer specific information */
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR          *p_pkt;
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN         llcong;
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          mdl_id;     /* the MDL ID associated with this request/response */
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* tMCA_HANDLE     rcb_idx;    For internal use only */
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* tMCA_CL         ccb_idx;    For internal use only */
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* tMCA_DL         dcb_idx;    For internal use only */
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tMCA_DCB_EVT;
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* data channel states */
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_NULL_ST,        /* not allocated */
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_OPENING_ST,     /* create/reconnect sequence is successful, waiting for data channel connection */
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_OPEN_ST,        /* open */
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_CLOSING_ST,     /* disconnecting */
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_MAX_ST
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 tMCA_DCB_STATE;
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* data channel events */
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_API_CLOSE_EVT,      /* This event is sent when the application wants to disconnect the data channel.*/
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_API_WRITE_EVT,      /* This event is sent when the application wants to send a data packet to the peer.*/
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_TC_OPEN_EVT,        /* Transport Channel open.  This event is sent when the channel is open.*/
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_TC_CLOSE_EVT,       /* Transport Channel close.*/
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_TC_CONG_EVT,        /* Transport Channel congestion status.*/
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_TC_DATA_EVT         /* This event is sent when a data packet is received from the peer.*/
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* "states" used in transport channel table */
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_TC_ST_UNUSED   0       /* Unused - unallocated */
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_TC_ST_IDLE     1       /* No connection */
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_TC_ST_ACP      2       /* Waiting to accept a connection */
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_TC_ST_INT      3       /* Initiating a connection */
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_TC_ST_CONN     4       /* Waiting for connection confirm */
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_TC_ST_CFG      5       /* Waiting for configuration complete */
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_TC_ST_OPEN     6       /* Channel opened */
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_TC_ST_SEC_INT  7       /* Security process as INT */
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_TC_ST_SEC_ACP  8       /* Security process as ACP */
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Configuration flags. tMCA_TC_TBL.cfg_flags */
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_L2C_CFG_IND_DONE   (1<<0)
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_L2C_CFG_CFM_DONE   (1<<1)
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_L2C_CFG_CONN_INT   (1<<2)
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_L2C_CFG_CONN_ACP   (1<<3)
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_L2C_CFG_DISCN_INT  (1<<4)
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_L2C_CFG_DISCN_ACP  (1<<5)
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MCA_CTRL_TCID       0   /* to identify control channel by tMCA_TC_TBL.tcid */
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* transport channel table */
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct {
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  peer_mtu;       /* L2CAP mtu of the peer device */
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  my_mtu;         /* Our MTU for this channel */
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  lcid;           /* L2CAP LCID */
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   tcid;           /* transport channel id (0, for control channel. (MDEP ID + 1) for data channel) */
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_DL cb_idx;         /* 1-based index to ccb or dcb */
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   state;          /* transport channel state */
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   cfg_flags;      /* L2CAP configuration flags */
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   id;             /* L2CAP id sent by peer device (need this to handle security pending) */
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tMCA_TC_TBL;
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* transport control block */
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct {
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_TC_TBL     tc_tbl[MCA_NUM_TC_TBL];
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           lcid_tbl[MAX_L2CAP_CHANNELS];   /* map LCID to tc_tbl index */
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tMCA_TC;
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* registration control block */
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct {
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_REG        reg;                /* the parameter at register */
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_CS         dep[MCA_NUM_DEPS];  /* the registration info for each MDEP */
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_CTRL_CBACK *p_cback;           /* control callback function */
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tMCA_RCB;
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_STAT_NORM,      /* normal operation (based on ccb state) */
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_STAT_PENDING,   /* waiting for data channel  */
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_STAT_RECONN,    /* reinitiate connection after transitioning from CLOSING to IDLE state  */
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_CCB_STAT_DISC       /* MCA_DisconnectReq or MCA_Deregister is called. waiting for all associated CL and DL to detach */
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 tMCA_CCB_STAT;
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* control channel control block */
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* the ccbs association with the rcbs
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * ccb[0]              ...ccb[MCA_NUM_LINKS*1-1] -> rcb[0]
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * ccb[MCA_NUM_LINKS*1]...ccb[MCA_NUM_LINKS*2-1] -> rcb[1]
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * ccb[MCA_NUM_LINKS*2]...ccb[MCA_NUM_LINKS*3-1] -> rcb[2]
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct {
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_RCB        *p_rcb;             /* the associated registration control block */
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    TIMER_LIST_ENT  timer_entry;        /* CCB timer list entry */
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_CCB_MSG    *p_tx_req;          /* Current request being sent/awaiting response */
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_CCB_MSG    *p_rx_msg;          /* Current message received/being processed */
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BD_ADDR         peer_addr;          /* BD address of peer */
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          sec_mask;           /* Security mask for connections as initiator */
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          ctrl_vpsm;          /* The virtual PSM that peer is listening for control channel */
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          data_vpsm;          /* The virtual PSM that peer is listening for data channel. */
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          lcid;               /* L2CAP lcid for this control channel */
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           state;              /* The CCB state machine state */
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN         cong;               /* Whether control channel is congested */
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_CCB_STAT   status;             /* see tMCA_CCB_STAT */
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tMCA_CCB;
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (*tMCA_CCB_ACTION)(tMCA_CCB *p_ccb, tMCA_CCB_EVT *p_data);
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_STAT_NORM,      /* normal operation (based on dcb state) */
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_STAT_DEL,       /* MCA_Delete is called. waiting for the DL to detach */
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MCA_DCB_STAT_DISC       /* MCA_CloseReq is called. waiting for the DL to detach */
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 tMCA_DCB_STAT;
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* data channel control block */
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* the dcbs association with the ccbs
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * dcb[0]             ...dcb[MCA_NUM_MDLS*1-1] -> ccb[0]
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * dcb[MCA_NUM_MDLS*1]...dcb[MCA_NUM_MDLS*2-1] -> ccb[1]
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * dcb[MCA_NUM_MDLS*2]...dcb[MCA_NUM_MDLS*3-1] -> ccb[2]
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * the dcbs association with the rcbs
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * dcb[0]                             ...dcb[MCA_NUM_MDLS*1*MCA_NUM_LINKS*1-1] -> rcb[0]
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * dcb[MCA_NUM_MDLS*1*MCA_NUM_LINKS*1]...dcb[MCA_NUM_MDLS*2*MCA_NUM_LINKS*2-1] -> rcb[1]
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * dcb[MCA_NUM_MDLS*2*MCA_NUM_LINKS*2]...dcb[MCA_NUM_MDLS*3*MCA_NUM_LINKS*3-1] -> rcb[2]
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct {
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_CCB            *p_ccb;         /* the associated control control block */
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR              *p_data;        /* data packet held due to L2CAP channel congestion */
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_CS             *p_cs;          /* the associated MDEP info. p_cs->type is the mdep id(internal use) */
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    const tMCA_CHNL_CFG *p_chnl_cfg;    /* cfg params for L2CAP channel */
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16              mdl_id;         /* the MDL ID for this data channel */
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16              lcid;           /* L2CAP lcid */
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               state;          /* The DCB state machine state */
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN             cong;           /* Whether data channel is congested */
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_DCB_STAT       status;         /* see tMCA_DCB_STAT */
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tMCA_DCB;
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (*tMCA_DCB_ACTION)(tMCA_DCB *p_ccb, tMCA_DCB_EVT *p_data);
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Control block for MCA */
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct {
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_RCB        rcb[MCA_NUM_REGS];  /* registration control block */
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_CCB        ccb[MCA_NUM_CCBS];  /* control channel control blocks */
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_DCB        dcb[MCA_NUM_DCBS];  /* data channel control blocks */
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tMCA_TC         tc;                 /* transport control block */
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           trace_level;        /* trace level */
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tMCA_CB;
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* csm functions */
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_ccb_event(tMCA_CCB *p_ccb, UINT8 event, tMCA_CCB_EVT *p_data);
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_CCB *mca_ccb_by_bd(tMCA_HANDLE handle, BD_ADDR bd_addr);
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_CCB *mca_ccb_alloc(tMCA_HANDLE handle, BD_ADDR bd_addr);
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_ccb_rsp_tout(tMCA_CCB *p_ccb, tMCA_CCB_EVT *p_data);
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_ccb_dealloc(tMCA_CCB *p_ccb, tMCA_CCB_EVT *p_data);
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_CL mca_ccb_to_hdl(tMCA_CCB *p_ccb);
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_CCB *mca_ccb_by_hdl(tMCA_CL mcl);
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern BOOLEAN mca_ccb_uses_mdl_id(tMCA_CCB *p_ccb, UINT16 mdl_id);
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* cact functions */
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_ccb_report_event(tMCA_CCB *p_ccb, UINT8 event, tMCA_CTRL *p_data);
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_ccb_free_msg(tMCA_CCB *p_ccb, tMCA_CCB_EVT *p_data);
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_ccb_snd_req(tMCA_CCB *p_ccb, tMCA_CCB_EVT *p_data);
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_ccb_snd_rsp(tMCA_CCB *p_ccb, tMCA_CCB_EVT *p_data);
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_ccb_do_disconn (tMCA_CCB *p_ccb, tMCA_CCB_EVT *p_data);
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_ccb_cong(tMCA_CCB *p_ccb, tMCA_CCB_EVT *p_data);
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_ccb_hdl_req(tMCA_CCB *p_ccb, tMCA_CCB_EVT *p_data);
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_ccb_hdl_rsp(tMCA_CCB *p_ccb, tMCA_CCB_EVT *p_data);
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_ccb_ll_open (tMCA_CCB *p_ccb, tMCA_CCB_EVT *p_data);
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_ccb_dl_open (tMCA_CCB *p_ccb, tMCA_CCB_EVT *p_data);
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* dsm functions */
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_dcb_event(tMCA_DCB *p_dcb, UINT8 event, tMCA_DCB_EVT *p_data);
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_DCB *mca_dcb_alloc(tMCA_CCB*p_ccb, tMCA_DEP dep);
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern UINT8 mca_dep_free_mdl(tMCA_CCB*p_ccb, tMCA_DEP dep);
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_dcb_dealloc(tMCA_DCB *p_dcb, tMCA_DCB_EVT *p_data);
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_DL mca_dcb_to_hdl(tMCA_DCB *p_dcb);
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_DCB *mca_dcb_by_hdl(tMCA_DL hdl);
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_dcb_close_by_mdl_id(tMCA_CCB*p_ccb, UINT16 mdl_id);
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* dact functions */
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_dcb_tc_open (tMCA_DCB *p_dcb, tMCA_DCB_EVT *p_data);
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_dcb_cong (tMCA_DCB *p_dcb, tMCA_DCB_EVT *p_data);
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_dcb_free_data (tMCA_DCB *p_dcb, tMCA_DCB_EVT *p_data);
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_dcb_do_disconn (tMCA_DCB *p_dcb, tMCA_DCB_EVT *p_data);
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_dcb_snd_data (tMCA_DCB *p_dcb, tMCA_DCB_EVT *p_data);
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_dcb_hdl_data (tMCA_DCB *p_dcb, tMCA_DCB_EVT *p_data);
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* main/utils functions */
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_HANDLE mca_handle_by_cpsm(UINT16 psm);
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_HANDLE mca_handle_by_dpsm(UINT16 psm);
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_TC_TBL * mca_tc_tbl_calloc(tMCA_CCB *p_ccb);
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_TC_TBL * mca_tc_tbl_dalloc(tMCA_DCB *p_dcb);
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_TC_TBL * mca_tc_tbl_by_lcid(UINT16 lcid);
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_free_tc_tbl_by_lcid(UINT16 lcid);
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_set_cfg_by_tbl(tL2CAP_CFG_INFO *p_cfg, tMCA_TC_TBL *p_tbl);
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_tc_close_ind(tMCA_TC_TBL *p_tbl, UINT16 reason);
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_tc_open_ind(tMCA_TC_TBL *p_tbl);
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_tc_cong_ind(tMCA_TC_TBL *p_tbl, BOOLEAN is_congested);
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_tc_data_ind(tMCA_TC_TBL *p_tbl, BT_HDR *p_buf);
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_RCB * mca_rcb_alloc(tMCA_REG *p_reg);
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_rcb_dealloc(tMCA_HANDLE handle);
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_HANDLE mca_rcb_to_handle(tMCA_RCB *p_rcb);
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern tMCA_RCB *mca_rcb_by_handle(tMCA_HANDLE handle);
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern BOOLEAN mca_is_valid_dep_id(tMCA_RCB *p_rcb, tMCA_DEP dep);
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_free_buf(void **p_buf);
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_process_timeout(TIMER_LIST_ENT *p_tle);
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_stop_timer(tMCA_CCB *p_ccb);
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* l2c functions */
325ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern UINT16 mca_l2c_open_req(BD_ADDR bd_addr, UINT16 PSM, const tMCA_CHNL_CFG *p_chnl_cfg);
326ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
327ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/* callback function declarations */
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_l2c_cconn_ind_cback(BD_ADDR bd_addr, UINT16 lcid, UINT16 psm, UINT8 id);
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void mca_l2c_dconn_ind_cback(BD_ADDR bd_addr, UINT16 lcid, UINT16 psm, UINT8 id);
330ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern void mca_l2c_connect_cfm_cback(UINT16 lcid, UINT16 result);
331ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern void mca_l2c_config_cfm_cback(UINT16 lcid, tL2CAP_CFG_INFO *p_cfg);
332ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern void mca_l2c_config_ind_cback(UINT16 lcid, tL2CAP_CFG_INFO *p_cfg);
333ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern void mca_l2c_disconnect_ind_cback(UINT16 lcid, BOOLEAN ack_needed);
334ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern void mca_l2c_disconnect_cfm_cback(UINT16 lcid, UINT16 result);
335ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern void mca_l2c_congestion_ind_cback(UINT16 lcid, BOOLEAN is_congested);
336ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern void mca_l2c_data_ind_cback(UINT16 lcid, BT_HDR *p_buf);
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** global data
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef __cplusplus
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern "C"
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Main Control Block
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if MCA_DYNAMIC_MEMORY == FALSE
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectMCA_API extern tMCA_CB  mca_cb;
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectMCA_API extern tMCA_CB *mca_cb_ptr;
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define mca_cb (*mca_cb_ptr)
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* L2CAP callback registration structure */
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern const tL2CAP_APPL_INFO mca_l2c_int_appl;
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern const tL2CAP_FCR_OPTS mca_l2c_fcr_opts_def;
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern const UINT8 mca_std_msg_len[];
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef __cplusplus
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* MCA_INT_H */
366