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