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 *  Filename:      bte_main.c
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Description:   Contains BTE core stack initialization and shutdown code
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <fcntl.h>
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdlib.h>
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <assert.h>
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h"
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h"
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h"
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bte.h"
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h"
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_hci_lib.h"
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Constants & Macros
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Run-time configuration file */
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTE_STACK_CONF_FILE
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTE_STACK_CONF_FILE "/etc/bluetooth/bt_stack.conf"
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* if not specified in .txt file then use this as default  */
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef HCI_LOGGING_FILENAME
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define HCI_LOGGING_FILENAME  "/data/misc/bluedroid/btsnoop_hci.log"
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Local type definitions
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Variables
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN hci_logging_enabled = FALSE;    /* by default, turn hci log off */
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectchar hci_logfile[256] = HCI_LOGGING_FILENAME;
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Static variables
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_hc_interface_t *bt_hc_if=NULL;
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const bt_hc_callbacks_t hc_callbacks;
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN lpm_enabled = FALSE;
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Static functions
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bte_main_in_hw_init(void);
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Externs
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBTU_API extern UINT32 btu_task (UINT32 param);
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBTU_API extern void BTE_Init (void);
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBT_API extern void BTE_LoadStack(void);
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBT_API void BTE_UnloadStack(void);
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void scru_flip_bda (BD_ADDR dst, const BD_ADDR src);
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bte_load_conf(const char *p_path);
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                        System Task Configuration
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* bluetooth protocol stack (BTU) task */
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTE_BTU_STACK_SIZE
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTE_BTU_STACK_SIZE       0//0x2000         /* In bytes */
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTE_BTU_TASK_STR        ((INT8 *) "BTU")
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT32 bte_btu_stack[(BTE_BTU_STACK_SIZE + 3) / 4];
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bte_main_in_hw_init
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Internal helper function for chip hardware init
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_in_hw_init(void)
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( (bt_hc_if = (bt_hc_interface_t *) bt_hc_get_interface()) \
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         == NULL)
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_ERROR0("!!! Failed to get BtHostControllerInterface !!!");
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bte_main_boot_entry
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      BTE MAIN API - Entry point for BTE chip/stack initialization
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_boot_entry(void)
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* initialize OS */
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_init();
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bte_main_in_hw_init();
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bte_load_conf(BTE_STACK_CONF_FILE);
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTTRC_INCLUDED == TRUE)
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Initialize trace feature */
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTTRC_TraceInit(MAX_TRACE_RAM_SIZE, &BTE_TraceLogBuf[0], BTTRC_METHOD_RAM);
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bte_main_shutdown
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      BTE MAIN API - Shutdown code for BTE chip/stack
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_shutdown()
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_shutdown();
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bte_main_enable
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      BTE MAIN API - Creates all the BTE tasks. Should be called
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  part of the Bluetooth stack enable sequence
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_enable(uint8_t *local_addr)
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_DEBUG1("%s", __FUNCTION__);
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Initialize BTE control block */
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTE_Init();
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    lpm_enabled = FALSE;
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bt_hc_if)
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        int result = bt_hc_if->init(&hc_callbacks, local_addr);
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_EVENT1("libbt-hci init returns %d", result);
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        assert(result == BT_HC_STATUS_SUCCESS);
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (hci_logging_enabled == TRUE)
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bt_hc_if->logging(BT_HC_LOGGING_ON, hci_logfile);
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BT_CLEAN_TURN_ON_DISABLED) && BT_CLEAN_TURN_ON_DISABLED == TRUE)
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_DEBUG1("%s  Not Turninig Off the BT before Turninig ON", __FUNCTION__);
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Do not power off the chip before powering on  if BT_CLEAN_TURN_ON_DISABLED flag
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         is defined and set to TRUE to avoid below mentioned issue.
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         Wingray kernel driver maintains a combined  counter to keep track of
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         BT-Wifi state. Invoking  set_power(BT_HC_CHIP_PWR_OFF) when the BT is already
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         in OFF state causes this counter to be incorrectly decremented and results in undesired
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         behavior of the chip.
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         This is only a workaround and when the issue is fixed in the kernel this work around
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         should be removed. */
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* toggle chip power to ensure we will reset chip in case
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           a previous stack shutdown wasn't completed gracefully */
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bt_hc_if->set_power(BT_HC_CHIP_PWR_OFF);
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bt_hc_if->set_power(BT_HC_CHIP_PWR_ON);
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bt_hc_if->preload(NULL);
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_create_task((TASKPTR)btu_task, BTU_TASK, BTE_BTU_TASK_STR,
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    (UINT16 *) ((UINT8 *)bte_btu_stack + BTE_BTU_STACK_SIZE),
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    sizeof(bte_btu_stack));
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_run(0);
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bte_main_disable
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      BTE MAIN API - Destroys all the BTE tasks. Should be called
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  part of the Bluetooth stack disable sequence
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_disable(void)
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_DEBUG1("%s", __FUNCTION__);
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bt_hc_if)
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bt_hc_if->cleanup();
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bt_hc_if->set_power(BT_HC_CHIP_PWR_OFF);
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_destroy_task(BTU_TASK);
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_freeze();
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bte_main_postload_cfg
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      BTE MAIN API - Stack postload configuration
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_postload_cfg(void)
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bt_hc_if)
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bt_hc_if->postload(NULL);
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE)
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bte_main_enable_lpm
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      BTE MAIN API - Enable/Disable low power mode operation
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_enable_lpm(BOOLEAN enable)
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int result = -1;
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bt_hc_if)
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result = bt_hc_if->lpm( \
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (enable == TRUE) ? BT_HC_LPM_ENABLE : BT_HC_LPM_DISABLE \
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        );
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_EVENT2("HC lib lpm enable=%d return %d", enable, result);
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bte_main_lpm_allow_bt_device_sleep
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      BTE MAIN API - Allow BT controller goest to sleep
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_lpm_allow_bt_device_sleep()
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int result = -1;
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((bt_hc_if) && (lpm_enabled == TRUE))
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result = bt_hc_if->lpm(BT_HC_LPM_WAKE_DEASSERT);
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_DEBUG1("HC lib lpm deassertion return %d", result);
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bte_main_lpm_wake_bt_device
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      BTE MAIN API - Wake BT controller up if it is in sleep mode
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_lpm_wake_bt_device()
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int result = -1;
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((bt_hc_if) && (lpm_enabled == TRUE))
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result = bt_hc_if->lpm(BT_HC_LPM_WAKE_ASSERT);
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_DEBUG1("HC lib lpm assertion return %d", result);
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif  // HCILP_INCLUDED
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bte_main_hci_send
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      BTE MAIN API - This function is called by the upper stack to
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  send an HCI message. The function displays a protocol trace
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  message (if enabled), and then calls the 'transmit' function
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  associated with the currently selected HCI transport
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_hci_send (BT_HDR *p_msg, UINT16 event)
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 sub_event = event & BT_SUB_EVT_MASK;  /* local controller ID */
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_msg->event = event;
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if((sub_event == LOCAL_BR_EDR_CONTROLLER_ID) || \
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project       (sub_event == LOCAL_BLE_CONTROLLER_ID))
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (bt_hc_if)
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bt_hc_if->transmit_buf((TRANSAC)p_msg, \
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       (char *) (p_msg + 1), \
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_msg->len);
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            GKI_freebuf(p_msg);
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_ERROR0("Invalid Controller ID. Discarding message.");
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        GKI_freebuf(p_msg);
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bte_main_post_reset_init
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      BTE MAIN API - This function is mapped to BTM_APP_DEV_INIT
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  and shall be automatically called from BTE after HCI_Reset
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_post_reset_init()
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_ContinueReset();
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**   libbt-hci Callback Functions
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         preload_cb
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HOST/CONTROLLER LIB CALLBACK API - This function is called
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  when the libbt-hci completed stack preload process
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void preload_cb(TRANSAC transac, bt_hc_preload_result_t result)
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_EVENT1("HC preload_cb %d [0:SUCCESS 1:FAIL]", result);
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* notify BTU task that libbt-hci is ready */
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* even if PRELOAD process failed */
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_send_event(BTU_TASK, TASK_MBOX_0_EVT_MASK);
3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         postload_cb
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HOST/CONTROLLER LIB CALLBACK API - This function is called
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  when the libbt-hci lib completed stack postload process
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void postload_cb(TRANSAC transac, bt_hc_postload_result_t result)
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_EVENT1("HC postload_cb %d", result);
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         lpm_cb
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HOST/CONTROLLER LIB CALLBACK API - This function is called
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  back from the libbt-hci to indicate the current LPM state
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void lpm_cb(bt_hc_lpm_request_result_t result)
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_EVENT1("HC lpm_result_cb %d", result);
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    lpm_enabled = (result == BT_HC_LPM_ENABLED) ? TRUE : FALSE;
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         hostwake_ind
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HOST/CONTROLLER LIB CALLOUT API - This function is called
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  from the libbt-hci to indicate the HostWake event
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void hostwake_ind(bt_hc_low_power_event_t event)
4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_EVENT1("HC hostwake_ind %d", event);
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         alloc
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HOST/CONTROLLER LIB CALLOUT API - This function is called
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  from the libbt-hci to request for data buffer allocation
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          NULL / pointer to allocated buffer
4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *alloc(int size)
4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p_hdr = NULL;
4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /*
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_DEBUG1("HC alloc size=%d", size);
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    */
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_hdr = (BT_HDR *) GKI_getbuf ((UINT16) size);
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_hdr == NULL)
4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_WARNING0("alloc returns NO BUFFER!");
4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return ((char *) p_hdr);
4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         dealloc
4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HOST/CONTROLLER LIB CALLOUT API - This function is called
4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  from the libbt-hci to release the data buffer allocated
4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  through the alloc call earlier
4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  Bluedroid libbt-hci library uses 'transac' parameter to
4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  pass data-path buffer/packet across bt_hci_lib interface
4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  boundary. The 'p_buf' is not intended to be used here
4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  but might point to data portion of data-path buffer.
4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          bt_hc_status_t
4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int dealloc(TRANSAC transac, char *p_buf)
4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_freebuf(transac);
4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return BT_HC_STATUS_SUCCESS;
4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         data_ind
4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HOST/CONTROLLER LIB CALLOUT API - This function is called
4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  from the libbt-hci to pass in the received HCI packets
4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  The core stack is responsible for releasing the data buffer
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  passed in from the libbt-hci once the core stack has done
4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  with it.
4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  Bluedroid libbt-hci library uses 'transac' parameter to
4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  pass data-path buffer/packet across bt_hci_lib interface
4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  boundary. The 'p_buf' and 'len' parameters are not intended
4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  to be used here but might point to data portion in data-
4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  path buffer and length of valid data respectively.
5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          bt_hc_status_t
5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int data_ind(TRANSAC transac, char *p_buf, int len)
5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR *p_msg = (BT_HDR *) transac;
5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /*
5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_DEBUG2("HC data_ind event=0x%04X (len=%d)", p_msg->event, len);
5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    */
5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_send_msg (BTU_TASK, BTU_HCI_RCV_MBOX, transac);
5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return BT_HC_STATUS_SUCCESS;
5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         tx_result
5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      HOST/CONTROLLER LIB CALLBACK API - This function is called
5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  from the libbt-hci once it has processed/sent the prior data
5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  buffer which core stack passed to it through transmit_buf
5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  call earlier.
5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  The core stack is responsible for releasing the data buffer
5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  if it has been completedly processed.
5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  Bluedroid libbt-hci library uses 'transac' parameter to
5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  pass data-path buffer/packet across bt_hci_lib interface
5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  boundary. The 'p_buf' is not intended to be used here
5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  but might point to data portion in data-path buffer.
5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          bt_hc_status_t
5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project******************************************************************************/
5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int tx_result(TRANSAC transac, char *p_buf, \
5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bt_hc_transmit_result_t result)
5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /*
5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_DEBUG2("HC tx_result %d (event=%04X)", result, \
5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      ((BT_HDR *)transac)->event);
5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    */
5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (result == BT_HC_TX_FRAGMENT)
5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        GKI_send_msg (BTU_TASK, BTU_HCI_RCV_MBOX, transac);
5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        GKI_freebuf(transac);
5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return BT_HC_STATUS_SUCCESS;
5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**   The libbt-hci Callback Functions Table
5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const bt_hc_callbacks_t hc_callbacks = {
5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    sizeof(bt_hc_callbacks_t),
5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    preload_cb,
5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    postload_cb,
5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    lpm_cb,
5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    hostwake_ind,
5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    alloc,
5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    dealloc,
5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    data_ind,
5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tx_result
5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
571