1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu * Copyright (C) 2010-2014 Broadcom Corporation 4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * you may not use this file except in compliance with the License. 7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * You may obtain a copy of the License at: 8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * See the License for the specific language governing permissions and 15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * limitations under the License. 16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * This file contains the utility functions for the NFA HCI. 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h> 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "trace_api.h" 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h" 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys_int.h" 305c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#include "nfa_dm_int.h" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_hci_api.h" 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_hci_int.h" 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_nv_co.h" 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_mem_co.h" 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_hci_defs.h" 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void handle_debug_loopback (BT_HDR *p_buf, UINT8 pipe, UINT8 type, UINT8 instruction); 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN HCI_LOOPBACK_DEBUG = FALSE; 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_find_pipe_by_pid 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description look for the pipe control block based on pipe id 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to the pipe control block, or NULL if not found 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_PIPE *nfa_hciu_find_pipe_by_pid (UINT8 pipe_id) 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *pp = nfa_hci_cb.cfg.dyn_pipes; 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx = 0; 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Loop through looking for a match */ 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for ( ; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++) 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pp->pipe_id == pipe_id) 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (pp); 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If here, not found */ 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NULL); 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_find_gate_by_gid 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Find the gate control block for the given gate id 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to the gate control block, or NULL if not found 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_GATE *nfa_hciu_find_gate_by_gid (UINT8 gate_id) 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *pg = nfa_hci_cb.cfg.dyn_gates; 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx = 0; 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for ( ; xx < NFA_HCI_MAX_GATE_CB; xx++, pg++) 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pg->gate_id == gate_id) 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (pg); 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NULL); 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_find_gate_by_owner 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Find the the first gate control block for the given owner 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to the gate control block, or NULL if not found 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_GATE *nfa_hciu_find_gate_by_owner (tNFA_HANDLE app_handle) 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *pg = nfa_hci_cb.cfg.dyn_gates; 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx = 0; 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for ( ; xx < NFA_HCI_MAX_GATE_CB; xx++, pg++) 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pg->gate_owner == app_handle) 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (pg); 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NULL); 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_find_gate_with_nopipes_by_owner 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Find the the first gate control block with no pipes 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** for the given owner 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to the gate control block, or NULL if not found 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_GATE *nfa_hciu_find_gate_with_nopipes_by_owner (tNFA_HANDLE app_handle) 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *pg = nfa_hci_cb.cfg.dyn_gates; 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx = 0; 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for ( ; xx < NFA_HCI_MAX_GATE_CB; xx++, pg++) 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (pg->gate_owner == app_handle) 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(pg->pipe_inx_mask == 0) ) 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (pg); 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NULL); 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_count_pipes_on_gate 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Count the number of pipes on the given gate 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns the number of pipes on the gate 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nfa_hciu_count_pipes_on_gate (tNFA_HCI_DYN_GATE *p_gate) 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx = 0; 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 mask = 1; 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 count = 0; 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for ( ; xx < NFA_HCI_MAX_PIPE_CB; xx++) 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( p_gate->pipe_inx_mask & mask ) 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project count++; 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mask = mask << 1; 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (count); 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_count_open_pipes_on_gate 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Count the number of opened pipes on the given gate 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns the number of pipes in OPENED state on the gate 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nfa_hciu_count_open_pipes_on_gate (tNFA_HCI_DYN_GATE *p_gate) 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *pp = nfa_hci_cb.cfg.dyn_pipes; 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx = 0; 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 mask = 1; 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 count = 0; 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for ( ; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++) 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* For each pipe on this gate, check if it is open */ 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_gate->pipe_inx_mask & mask) && (pp->pipe_state == NFA_HCI_PIPE_OPENED)) 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project count++; 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mask = mask << 1; 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (count); 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_get_gate_owner 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Find the application that owns a gate 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns application handle 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HANDLE nfa_hciu_get_gate_owner (UINT8 gate_id) 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *pg; 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((pg = nfa_hciu_find_gate_by_gid (gate_id)) == NULL) 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_HANDLE_INVALID); 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (pg->gate_owner); 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_get_pipe_owner 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Find the application that owns a pipe 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns application handle 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HANDLE nfa_hciu_get_pipe_owner (UINT8 pipe_id) 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *pp; 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *pg; 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((pp = nfa_hciu_find_pipe_by_pid (pipe_id)) == NULL) 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_HANDLE_INVALID); 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((pg = nfa_hciu_find_gate_by_gid (pp->local_gate)) == NULL) 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_HANDLE_INVALID); 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (pg->gate_owner); 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_alloc_gate 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Allocate an gate control block 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to the allocated gate, or NULL if cannot allocate 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_GATE *nfa_hciu_alloc_gate (UINT8 gate_id, tNFA_HANDLE app_handle) 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *pg; 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 app_inx = app_handle & NFA_HANDLE_MASK; 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* First, check if the application handle is valid */ 250a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if ( (gate_id != NFA_HCI_CONNECTIVITY_GATE) 251a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu &&(gate_id < NFA_HCI_FIRST_PROP_GATE) 252a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu &&(( (app_handle & NFA_HANDLE_GROUP_MASK) != NFA_HANDLE_GROUP_HCI) 253a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ||(app_inx >= NFA_HCI_MAX_APP_CB) 254a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ||(nfa_hci_cb.p_app_cback[app_inx] == NULL)) ) 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NULL); 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (gate_id != 0) 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((pg = nfa_hciu_find_gate_by_gid (gate_id)) != NULL) 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (pg); 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If gate_id is 0, we need to assign a free one */ 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Loop through all possible gate IDs checking if they are already used */ 268a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu for (gate_id = NFA_HCI_FIRST_HOST_SPECIFIC_GENERIC_GATE; gate_id <= NFA_HCI_LAST_PROP_GATE; gate_id++) 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Skip connectivity gate */ 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (gate_id == NFA_HCI_CONNECTIVITY_GATE) gate_id++; 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Check if the gate is already allocated */ 274a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (nfa_hciu_find_gate_by_gid (gate_id) == NULL) 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 277a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (gate_id > NFA_HCI_LAST_PROP_GATE) 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR2 ("nfa_hci_alloc_gate - no free Gate ID: %u App Handle: 0x%04x", gate_id, app_handle); 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NULL); 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Now look for a free control block */ 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0, pg = nfa_hci_cb.cfg.dyn_gates; xx < NFA_HCI_MAX_GATE_CB; xx++, pg++) 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pg->gate_id == 0) 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Found a free gate control block */ 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pg->gate_id = gate_id; 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pg->gate_owner = app_handle; 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pg->pipe_inx_mask = 0; 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG2 ("nfa_hciu_alloc_gate id:%d app_handle: 0x%04x", gate_id, app_handle); 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.nv_write_needed = TRUE; 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (pg); 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If here, no free gate control block */ 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR2 ("nfa_hci_alloc_gate - no CB Gate ID: %u App Handle: 0x%04x", gate_id, app_handle); 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NULL); 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_send_msg 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function will fragment the given packet, if necessary 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** and send it on the given pipe. 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_msg (UINT8 pipe_id, UINT8 type, UINT8 instruction, UINT16 msg_len, UINT8 *p_msg) 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p_buf; 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_data; 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN first_pkt = TRUE; 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 data_len; 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_STATUS status = NFA_STATUS_OK; 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 max_seg_hcp_pkt_size = nfa_hci_cb.buff_size - NCI_DATA_HDR_SIZE; 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 326df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu char buff[100]; 327df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG3 ("nfa_hciu_send_msg pipe_id:%d %s len:%d", 329df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu pipe_id, nfa_hciu_get_type_inst_names (pipe_id, type, instruction, buff), msg_len); 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG4 ("nfa_hciu_send_msg pipe_id:%d Type: %u Inst: %u len: %d", 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pipe_id, type, instruction, msg_len); 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (instruction == NFA_HCI_ANY_GET_PARAMETER) 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.param_in_use = *p_msg; 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project while ((first_pkt == TRUE) || (msg_len != 0)) 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_buf = (BT_HDR *) GKI_getpoolbuf (NFC_RW_POOL_ID)) != NULL) 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_buf->offset = NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE; 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* First packet has a 2-byte header, subsequent fragments have a 1-byte header */ 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project data_len = first_pkt ? (max_seg_hcp_pkt_size - 2) : (max_seg_hcp_pkt_size - 1); 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_data = (UINT8 *) (p_buf + 1) + p_buf->offset; 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Last or only segment has "no fragmentation" bit set */ 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (msg_len > data_len) 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *p_data++ = (NFA_HCI_MESSAGE_FRAGMENTATION << 7) | (pipe_id & 0x7F); 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project data_len = msg_len; 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *p_data++ = (NFA_HCI_NO_MESSAGE_FRAGMENTATION << 7) | (pipe_id & 0x7F); 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_buf->len = 1; 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Message header only goes in the first segment */ 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (first_pkt) 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project first_pkt = FALSE; 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *p_data++ = (type << 6) | instruction; 367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_buf->len++; 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (data_len != 0) 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_data, p_msg, data_len); 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_buf->len += data_len; 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project msg_len -= data_len; 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (msg_len > 0) 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg += data_len; 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_PROTOCOL == TRUE) 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project DispHcp (((UINT8 *) (p_buf + 1) + p_buf->offset), p_buf->len, FALSE, (BOOLEAN) ((p_buf->len - data_len) == 2)); 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (HCI_LOOPBACK_DEBUG) 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project handle_debug_loopback (p_buf, pipe_id, type, instruction); 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = NFC_SendData (nfa_hci_cb.conn_id, p_buf); 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_ERROR0 ("nfa_hciu_send_data_packet no buffers"); 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = NFA_STATUS_NO_BUFFERS; 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Start timer if response to wait for a particular time for the response */ 398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (type == NFA_HCI_COMMAND_TYPE) 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.cmd_sent = instruction; 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_hci_cb.hci_state == NFA_HCI_STATE_IDLE) 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_RSP; 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hcp_response_timeout); 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return status; 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_get_allocated_gate_list 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description fills in a list of allocated gates 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns the number of gates 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nfa_hciu_get_allocated_gate_list (UINT8 *p_gate_list) 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *p_cb; 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 count = 0; 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4265c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen for (xx = 0, p_cb = nfa_hci_cb.cfg.dyn_gates; xx < NFA_HCI_MAX_GATE_CB; xx++, p_cb++) 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cb->gate_id != 0) 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *p_gate_list++ = p_cb->gate_id; 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project count++; 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_hciu_get_allocated_gate_list () returns: %u", count); 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (count); 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_alloc_pipe 443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Allocate a pipe control block 445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to the pipe control block, or NULL if 447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** cannot allocate 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_PIPE *nfa_hciu_alloc_pipe (UINT8 pipe_id) 451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 xx; 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *pp; 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If we already have a pipe of the same ID, release it first it */ 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((pp = nfa_hciu_find_pipe_by_pid (pipe_id)) != NULL) 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pipe_id > NFA_HCI_LAST_DYNAMIC_PIPE) 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return pp; 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hciu_release_pipe (pipe_id); 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Look for a free pipe control block */ 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes ; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++) 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pp->pipe_id == 0) 467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG2 ("nfa_hciu_alloc_pipe:%d, index:%d", pipe_id, xx); 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp->pipe_id = pipe_id; 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.nv_write_needed = TRUE; 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (pp); 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_hciu_alloc_pipe:%d, NO free entries !!", pipe_id); 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NULL); 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_release_gate 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Remove a generic gate from gate list 485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns none 487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_hciu_release_gate (UINT8 gate_id) 490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *p_gate = nfa_hciu_find_gate_by_gid (gate_id); 492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_gate != NULL) 494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG3 ("nfa_hciu_release_gate () ID: %d owner: 0x%04x pipe_inx_mask: 0x%04x", 496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gate_id, p_gate->gate_owner, p_gate->pipe_inx_mask); 497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_gate->gate_id = 0; 499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_gate->gate_owner = 0; 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_gate->pipe_inx_mask = 0; 501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.nv_write_needed = TRUE; 503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_WARNING1 ("nfa_hciu_release_gate () ID: %d NOT FOUND", gate_id); 507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_add_pipe_to_gate 513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Add pipe to generic gate 515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK, if successfully add the pipe on to the gate 517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_HCI_ADM_E_NO_PIPES_AVAILABLE, otherwise 518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_RESPONSE nfa_hciu_add_pipe_to_gate (UINT8 pipe_id, UINT8 local_gate, 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 dest_host, UINT8 dest_gate) 522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *p_gate; 524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *p_pipe; 525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 pipe_index; 526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_gate = nfa_hciu_find_gate_by_gid (local_gate); 528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_gate != NULL) 530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Allocate a pipe control block */ 532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_pipe = nfa_hciu_alloc_pipe (pipe_id)) != NULL) 533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_pipe->pipe_id = pipe_id; 535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_pipe->pipe_state = NFA_HCI_PIPE_CLOSED; 536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_pipe->dest_host = dest_host; 537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_pipe->dest_gate = dest_gate; 538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_pipe->local_gate = local_gate; 539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Save the pipe in the gate that it belongs to */ 541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pipe_index = (UINT8) (p_pipe - nfa_hci_cb.cfg.dyn_pipes); 542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_gate->pipe_inx_mask |= (UINT32) (1 << pipe_index); 543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG4 ("nfa_hciu_add_pipe_to_gate Gate ID: 0x%02x Pipe ID: 0x%02x pipe_index: %u App Handle: 0x%08x", 545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project local_gate, pipe_id, pipe_index, p_gate->gate_owner); 546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_HCI_ANY_OK); 547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_hciu_add_pipe_to_gate: 0x%02x NOT FOUND", local_gate); 551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_HCI_ADM_E_NO_PIPES_AVAILABLE); 553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_add_pipe_to_static_gate 558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Add pipe to identity management gate 560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_HCI_ANY_OK, if successfully add the pipe on to the gate 562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_HCI_ADM_E_NO_PIPES_AVAILABLE, otherwise 563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_RESPONSE nfa_hciu_add_pipe_to_static_gate (UINT8 local_gate, UINT8 pipe_id, UINT8 dest_host, UINT8 dest_gate) 566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *p_pipe; 568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 pipe_index; 569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_EVENT4 ("nfa_hciu_add_pipe_to_static_gate (%u) Pipe: 0x%02x Dest Host: 0x%02x Dest Gate: 0x%02x)", 571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project local_gate, pipe_id, dest_host, dest_gate); 572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Allocate a pipe control block */ 574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_pipe = nfa_hciu_alloc_pipe (pipe_id)) != NULL) 575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_pipe->pipe_id = pipe_id; 577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_pipe->pipe_state = NFA_HCI_PIPE_CLOSED; 578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_pipe->dest_host = dest_host; 579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_pipe->dest_gate = dest_gate; 580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_pipe->local_gate = local_gate; 581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If this is the ID gate, save the pipe index in the ID gate info */ 583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* block. Note that for loopback, it is enough to just create the pipe */ 584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (local_gate == NFA_HCI_IDENTITY_MANAGEMENT_GATE) 585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pipe_index = (UINT8) (p_pipe - nfa_hci_cb.cfg.dyn_pipes); 587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.cfg.id_mgmt_gate.pipe_inx_mask |= (UINT32) (1 << pipe_index); 588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NFA_HCI_ANY_OK; 590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NFA_HCI_ADM_E_NO_PIPES_AVAILABLE; 593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_find_active_pipe_by_owner 598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Find the first pipe associated with the given app 600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to pipe, or NULL if none found 602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_PIPE *nfa_hciu_find_active_pipe_by_owner (tNFA_HANDLE app_handle) 605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *pg; 607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *pp; 608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_hciu_find_pipe_by_owner () app_handle:0x%x", app_handle); 611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Loop through all pipes looking for the owner */ 613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++) 614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (pp->pipe_id != 0) 616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(pp->pipe_id >= NFA_HCI_FIRST_DYNAMIC_PIPE) 617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(pp->pipe_id <= NFA_HCI_LAST_DYNAMIC_PIPE) 618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_hciu_is_active_host (pp->dest_host)) ) 619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( ((pg = nfa_hciu_find_gate_by_gid (pp->local_gate)) != NULL) 621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(pg->gate_owner == app_handle) ) 622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (pp); 623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If here, not found */ 627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NULL); 628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 632a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Function nfa_hciu_check_pipe_between_gates 633a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** 634a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Description Check if there is a pipe between specified Terminal host 635a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** gate and and the specified UICC gate 636a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** 637a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Returns TRUE, if there exists a pipe between the two specified gated 638a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** FALSE, otherwise 639a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** 640a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu*******************************************************************************/ 641a24be4f06674b2707b57904deaa0dff5a95823bdEvan ChuBOOLEAN nfa_hciu_check_pipe_between_gates (UINT8 local_gate, UINT8 dest_host, UINT8 dest_gate) 642a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 643a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu tNFA_HCI_DYN_PIPE *pp; 644a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu int xx; 645a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 646a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu NFA_TRACE_DEBUG3 ("nfa_hciu_check_pipe_between_gates () Local gate: 0x%02X, Host[0x%02X] gate: 0x%02X", local_gate, dest_host, dest_gate); 647a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 648a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu /* Loop through all pipes looking for the owner */ 649a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++) 650a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 651a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if ( (pp->pipe_id != 0) 652a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu &&(pp->pipe_id >= NFA_HCI_FIRST_DYNAMIC_PIPE) 653a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu &&(pp->pipe_id <= NFA_HCI_LAST_DYNAMIC_PIPE) 654a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu &&(pp->local_gate == local_gate) 655a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu &&(pp->dest_host == dest_host) 656a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu &&(pp->dest_gate == dest_gate) ) 657a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 658a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu return (TRUE); 659a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 660a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 661a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 662a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu /* If here, not found */ 663a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu return (FALSE); 664a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 665a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 666a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu/******************************************************************************* 667a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** 668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_find_pipe_by_owner 669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Find the first pipe associated with the given app 671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to pipe, or NULL if none found 673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_PIPE *nfa_hciu_find_pipe_by_owner (tNFA_HANDLE app_handle) 676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *pg; 678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *pp; 679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_hciu_find_pipe_by_owner () app_handle:0x%x", app_handle); 682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Loop through all pipes looking for the owner */ 684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++) 685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pp->pipe_id != 0) 687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( ((pg = nfa_hciu_find_gate_by_gid (pp->local_gate)) != NULL) 689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(pg->gate_owner == app_handle) ) 690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (pp); 691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If here, not found */ 695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NULL); 696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_find_pipe_on_gate 701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Find the first pipe associated with the given gate 703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to pipe, or NULL if none found 705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_PIPE *nfa_hciu_find_pipe_on_gate (UINT8 gate_id) 708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *pg; 710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *pp; 711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_hciu_find_pipe_on_gate () Gate:0x%x", gate_id); 714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Loop through all pipes looking for the owner */ 716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++) 717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pp->pipe_id != 0) 719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( ((pg = nfa_hciu_find_gate_by_gid (pp->local_gate)) != NULL) 721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(pg->gate_id == gate_id) ) 722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (pp); 723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If here, not found */ 727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NULL); 728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_is_active_host 733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Check if the host is currently active 735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE, if the host is active in the host network 737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** FALSE, if the host is not active in the host network 738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_hciu_is_active_host (UINT8 host_id) 741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 xx; 743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_HCI_MAX_HOST_IN_NETWORK; xx++) 745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_hci_cb.inactive_host[xx] == host_id) 747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return FALSE; 748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return TRUE; 751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_is_host_reseting 756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Check if the host is currently reseting 758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE, if the host is reseting 760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** FALSE, if the host is not reseting 761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 762e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 763e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_hciu_is_host_reseting (UINT8 host_id) 764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 xx; 766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_HCI_MAX_HOST_IN_NETWORK; xx++) 768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_hci_cb.reset_host[xx] == host_id) 770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return TRUE; 771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return FALSE; 774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_is_no_host_resetting 779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Check if no host is reseting 781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE, if no host is resetting at this time 783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** FALSE, if one or more host is resetting 784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_hciu_is_no_host_resetting (void) 787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 xx; 789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < NFA_HCI_MAX_HOST_IN_NETWORK; xx++) 791e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_hci_cb.reset_host[xx] != 0) 793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return FALSE; 794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return TRUE; 797e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 798e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 799e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 800e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 801e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_find_active_pipe_on_gate 802e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 803e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Find the first active pipe associated with the given gate 804e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 805e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to pipe, or NULL if none found 806e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 807e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 808e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_PIPE *nfa_hciu_find_active_pipe_on_gate (UINT8 gate_id) 809e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 810e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *pg; 811e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *pp; 812e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 813e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 814e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_hciu_find_active_pipe_on_gate () Gate:0x%x", gate_id); 815e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 816e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Loop through all pipes looking for the owner */ 817e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++) 818e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 819e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (pp->pipe_id != 0) 820e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(pp->pipe_id >= NFA_HCI_FIRST_DYNAMIC_PIPE) 821e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(pp->pipe_id <= NFA_HCI_LAST_DYNAMIC_PIPE) 822e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_hciu_is_active_host (pp->dest_host)) ) 823e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 824e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( ((pg = nfa_hciu_find_gate_by_gid (pp->local_gate)) != NULL) 825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(pg->gate_id == gate_id) ) 826e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (pp); 827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* If here, not found */ 831e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NULL); 832e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 834e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 835e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 836e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_release_pipe 837e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 838e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description remove the specified pipe 839e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 840e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_HCI_ANY_OK, if removed 841e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_HCI_ANY_E_NOK, if otherwise 842e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 843e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 844e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_RESPONSE nfa_hciu_release_pipe (UINT8 pipe_id) 845e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 846e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *p_gate; 847e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *p_pipe; 848e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 pipe_index; 849e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 850e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_EVENT1 ("nfa_hciu_release_pipe: %u", pipe_id); 851e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 852e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_pipe = nfa_hciu_find_pipe_by_pid (pipe_id)) == NULL) 853e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_HCI_ANY_E_NOK); 854e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 855e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pipe_id > NFA_HCI_LAST_DYNAMIC_PIPE) 856e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 857e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("ignore pipe: %d", pipe_id); 858e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_HCI_ANY_E_NOK); 859e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 860e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 861e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pipe_index = (UINT8) (p_pipe - nfa_hci_cb.cfg.dyn_pipes); 862e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 863e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_pipe->local_gate == NFA_HCI_IDENTITY_MANAGEMENT_GATE) 864e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 865e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Remove pipe from ID management gate */ 866e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.cfg.id_mgmt_gate.pipe_inx_mask &= ~ (UINT32) (1 << pipe_index); 867e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 868e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 869e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 870e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_gate = nfa_hciu_find_gate_by_gid (p_pipe->local_gate)) == NULL) 871e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 872e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Mark the pipe control block as free */ 873e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_pipe->pipe_id = 0; 874e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_HCI_ANY_E_NOK); 875e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 876e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 877e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Remove pipe from gate */ 878e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_gate->pipe_inx_mask &= ~ (UINT32) (1 << pipe_index); 879e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 880e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 881e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Reset pipe control block */ 882e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memset (p_pipe,0,sizeof (tNFA_HCI_DYN_PIPE)); 883e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.nv_write_needed = TRUE; 884e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NFA_HCI_ANY_OK; 885e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 886e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 887e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 888e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 889e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_remove_all_pipes_from_host 890e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 891e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description remove all the pipes that are connected to a specific host 892e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 893e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 894e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 895e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 896e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_hciu_remove_all_pipes_from_host (UINT8 host) 897e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 898e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_GATE *pg; 899e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *pp; 900e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 901e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_EVT_DATA evt_data; 902e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 903e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_EVENT1 ("nfa_hciu_remove_all_pipes_from_host (0x%02x)", host); 904e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 905e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Remove all pipes from the specified host connected to all generic gates */ 906e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++) 907e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 908e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (pp->pipe_id == 0) 909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project || 910e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ( (host != 0) 911e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((pp->dest_host != host) || (pp->pipe_id > NFA_HCI_LAST_DYNAMIC_PIPE))) ) 912e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project continue; 913e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 914e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((pg = nfa_hciu_find_gate_by_gid (pp->local_gate)) != NULL) 915e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 916e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.deleted.status = NFA_STATUS_OK; 917e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project evt_data.deleted.pipe = pp->pipe_id; 918e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 919e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hciu_send_to_app (NFA_HCI_DELETE_PIPE_EVT, &evt_data, pg->gate_owner); 920e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 921e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hciu_release_pipe (pp->pipe_id); 922e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 923e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 924e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 925e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 926e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 927e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_send_create_pipe_cmd 928e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 929e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Create dynamic pipe between the specified gates 930e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 931e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 932e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 933e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 934e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_create_pipe_cmd (UINT8 source_gate, UINT8 dest_host, UINT8 dest_gate) 935e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 936e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_STATUS status; 937e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 data[3]; 938e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 939e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project data[0] = source_gate; 940e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project data[1] = dest_host; 941e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project data[2] = dest_gate; 942e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 943e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG3 ("nfa_hciu_send_create_pipe_cmd source_gate:%d, dest_host:%d, dest_gate:%d", source_gate, dest_host, dest_gate); 944e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 945e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = nfa_hciu_send_msg (NFA_HCI_ADMIN_PIPE, NFA_HCI_COMMAND_TYPE, NFA_HCI_ADM_CREATE_PIPE, 3, data); 946e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 947e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return status; 948e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 949e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 950e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 951e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 952e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_send_delete_pipe_cmd 953e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 954e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Delete the dynamic pipe 955e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 956e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 957e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 958e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 959e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_delete_pipe_cmd (UINT8 pipe) 960e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 961e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_STATUS status; 962e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 963e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("nfa_hciu_send_delete_pipe_cmd: %d", pipe); 964e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 965e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pipe > NFA_HCI_LAST_DYNAMIC_PIPE) 966e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 967e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG1 ("ignore pipe: %d", pipe); 968e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_HCI_ANY_E_NOK); 969e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.pipe_in_use = pipe; 971e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = nfa_hciu_send_msg (NFA_HCI_ADMIN_PIPE, NFA_HCI_COMMAND_TYPE, NFA_HCI_ADM_DELETE_PIPE, 1, &pipe); 973e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return status; 975e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 976e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 977e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 978e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 979e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 980e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_send_clear_all_pipe_cmd 981e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 982e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description delete all the dynamic pipe connected to device host, 983e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to close all static pipes connected to device host, 984e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** and to set registry values related to static pipes to 985e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** theri default values. 986e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 987e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 988e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 989e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 990e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_clear_all_pipe_cmd (void) 991e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 992e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_STATUS status; 993e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 id_ref_data = 0x0102; 994e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 995e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_DEBUG0 ("nfa_hciu_send_clear_all_pipe_cmd"); 996e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 997e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = nfa_hciu_send_msg (NFA_HCI_ADMIN_PIPE, NFA_HCI_COMMAND_TYPE, NFA_HCI_ADM_CLEAR_ALL_PIPE, 2, (UINT8 *) &id_ref_data); 998e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 999e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return status; 1000e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1001e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1002e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1003e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1004e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_send_open_pipe_cmd 1005e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1006e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Open a closed pipe 1007e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1008e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 1009e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1010e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1011e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_open_pipe_cmd (UINT8 pipe) 1012e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1013e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_STATUS status; 1014e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1015e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.pipe_in_use = pipe; 1016e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1017e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = nfa_hciu_send_msg (pipe, NFA_HCI_COMMAND_TYPE, NFA_HCI_ANY_OPEN_PIPE, 0, NULL); 1018e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1019e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return status; 1020e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1021e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1022e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1023e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1024e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_send_close_pipe_cmd 1025e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1026e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Close an opened pipe 1027e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1028e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 1029e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1030e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1031e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_close_pipe_cmd (UINT8 pipe) 1032e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1033e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_STATUS status; 1034e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1035e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.pipe_in_use = pipe; 1036e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1037e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = nfa_hciu_send_msg (pipe, NFA_HCI_COMMAND_TYPE, NFA_HCI_ANY_CLOSE_PIPE, 0, NULL); 1038e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1039e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return status; 1040e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1041e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1042e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1043e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1044e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_send_get_param_cmd 1045e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1046e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Read a parameter value from gate registry 1047e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1048e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 1049e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1050e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1051e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_get_param_cmd (UINT8 pipe, UINT8 index) 1052e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1053e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_STATUS status; 1054e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1055e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((status = nfa_hciu_send_msg (pipe, NFA_HCI_COMMAND_TYPE, NFA_HCI_ANY_GET_PARAMETER, 1, &index)) == NFC_STATUS_OK) 1056e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.param_in_use = index; 1057e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1058e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return status; 1059e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1060e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1061e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1062e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1063e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_send_set_param_cmd 1064e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1065e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Set a parameter value in a gate registry 1066e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1067e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns None 1068e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1069e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1070e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_set_param_cmd (UINT8 pipe, UINT8 index, UINT8 length, UINT8 *p_data) 1071e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1072e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_STATUS status; 1073e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 data[255]; 1074e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1075e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project data[0] = index; 1076e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1077e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (&data[1], p_data, length); 1078e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1079e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((status = nfa_hciu_send_msg (pipe, NFA_HCI_COMMAND_TYPE, NFA_HCI_ANY_SET_PARAMETER, (UINT16) (length + 1), data)) == NFC_STATUS_OK) 1080e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.param_in_use = index; 1081e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1082e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return status; 1083e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1084e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1085e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1086e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1087e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1088e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_send_to_app 1089e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1090e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Send an event back to an application 1091e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1092e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns none 1093e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1094e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1095e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_hciu_send_to_app (tNFA_HCI_EVT event, tNFA_HCI_EVT_DATA *p_evt, tNFA_HANDLE app_handle) 1096e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1097e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 app_inx = app_handle & NFA_HANDLE_MASK; 1098e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1099e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* First, check if the application handle is valid */ 1100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( ((app_handle & NFA_HANDLE_GROUP_MASK) == NFA_HANDLE_GROUP_HCI) 1101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(app_inx < NFA_HCI_MAX_APP_CB) ) 1102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_hci_cb.p_app_cback[app_inx] != NULL) 1104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.p_app_cback[app_inx] (event, p_evt); 1106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 1107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (app_handle != NFA_HANDLE_INVALID) 1111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_WARNING2 ("nfa_hciu_send_to_app no callback, event: 0x%04x app_handle: 0x%04x", 1113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project event, app_handle); 1114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_send_to_all_apps 1120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Send an event back to all applications 1122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns none 1124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_hciu_send_to_all_apps (tNFA_HCI_EVT event, tNFA_HCI_EVT_DATA *p_evt) 1127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 app_inx; 1129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (app_inx = 0; app_inx < NFA_HCI_MAX_APP_CB; app_inx++) 1131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_hci_cb.p_app_cback[app_inx] != NULL) 1133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.p_app_cback[app_inx] (event, p_evt); 1134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_send_to_apps_handling_connectivity_evts 1141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Send a connectivity event to all the application interested 1143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** in connectivity events 1144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns none 1146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_hciu_send_to_apps_handling_connectivity_evts (tNFA_HCI_EVT event, tNFA_HCI_EVT_DATA *p_evt) 1149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 app_inx; 1151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (app_inx = 0; app_inx < NFA_HCI_MAX_APP_CB; app_inx++) 1153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_hci_cb.p_app_cback[app_inx] != NULL) 1155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(nfa_hci_cb.cfg.b_send_conn_evts[app_inx])) 1156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_hci_cb.p_app_cback[app_inx] (event, p_evt); 1158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 1163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_get_response_name 1166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function returns the error code name. 1168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NOTE conditionally compiled to save memory. 1170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to the name 1172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar *nfa_hciu_get_response_name (UINT8 rsp_code) 1175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (rsp_code) 1177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_OK: 1179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_OK"); 1180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_E_NOT_CONNECTED: 1181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_E_NOT_CONNECTED"); 1182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_E_CMD_PAR_UNKNOWN: 1183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_E_CMD_PAR_UNKNOWN"); 1184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_E_NOK: 1185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_E_NOK"); 1186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ADM_E_NO_PIPES_AVAILABLE: 1187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ADM_E_NO_PIPES_AVAILABLE"); 1188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_E_REG_PAR_UNKNOWN: 1189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_E_REG_PAR_UNKNOWN"); 1190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_E_PIPE_NOT_OPENED: 1191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_E_PIPE_NOT_OPENED"); 1192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_E_CMD_NOT_SUPPORTED: 1193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_E_CMD_NOT_SUPPORTED"); 1194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_E_INHIBITED: 1195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_E_INHIBITED"); 1196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_E_TIMEOUT: 1197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_E_TIMEOUT"); 1198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_E_REG_ACCESS_DENIED: 1199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_E_REG_ACCESS_DENIED"); 1200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_E_PIPE_ACCESS_DENIED: 1201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_E_PIPE_ACCESS_DENIED"); 1202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 1203df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu return ("UNKNOWN"); 1204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_type_2_str 1210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function returns the type name. 1212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to the name 1214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar *nfa_hciu_type_2_str(UINT8 type) 1217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (type) 1219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_COMMAND_TYPE: 1221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("COMMAND"); 1222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_EVENT_TYPE: 1223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("EVENT"); 1224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_RESPONSE_TYPE: 1225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("RESPONSE"); 1226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 1227df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu return ("UNKNOWN"); 1228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_instr_2_str 1234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function returns the instruction name. 1236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to the name 1238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar *nfa_hciu_instr_2_str (UINT8 instruction) 1241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (instruction) 1243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_SET_PARAMETER: 1245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_SET_PARAMETER"); 1246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_GET_PARAMETER: 1247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_GET_PARAMETER"); 1248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_OPEN_PIPE: 1249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_OPEN_PIPE"); 1250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_CLOSE_PIPE: 1251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ANY_CLOSE_PIPE"); 1252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ADM_CREATE_PIPE: 1253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ADM_CREATE_PIPE"); 1254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ADM_DELETE_PIPE: 1255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ADM_DELETE_PIPE"); 1256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ADM_NOTIFY_PIPE_CREATED: 1257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ADM_NOTIFY_PIPE_CREATED"); 1258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ADM_NOTIFY_PIPE_DELETED: 1259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ADM_NOTIFY_PIPE_DELETED"); 1260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ADM_CLEAR_ALL_PIPE: 1261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ADM_CLEAR_ALL_PIPE"); 1262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED: 1263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("ADM_NOTIFY_ALL_PIPE_CLEARED"); 1264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 1265df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu return ("UNKNOWN"); 1266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_get_event_name 1273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function returns the event code name. 1275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to the name 1277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar *nfa_hciu_get_event_name (UINT16 event) 1280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 1282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_REGISTER_APP_EVT: return ("API_REGISTER"); 1284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_DEREGISTER_APP_EVT: return ("API_DEREGISTER"); 1285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_GET_APP_GATE_PIPE_EVT: return ("API_GET_GATE_LIST"); 1286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_ALLOC_GATE_EVT: return ("API_ALLOC_GATE"); 1287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_DEALLOC_GATE_EVT: return ("API_DEALLOC_GATE"); 1288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_GET_HOST_LIST_EVT: return ("API_GET_HOST_LIST"); 1289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_GET_REGISTRY_EVT: return ("API_GET_REG_VALUE"); 1290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_SET_REGISTRY_EVT: return ("API_SET_REG_VALUE"); 1291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_CREATE_PIPE_EVT: return ("API_CREATE_PIPE"); 1292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_OPEN_PIPE_EVT: return ("API_OPEN_PIPE"); 1293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_CLOSE_PIPE_EVT: return ("API_CLOSE_PIPE"); 1294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_DELETE_PIPE_EVT: return ("API_DELETE_PIPE"); 1295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_SEND_CMD_EVT: return ("API_SEND_COMMAND_EVT"); 1296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_SEND_RSP_EVT: return ("API_SEND_RESPONSE_EVT"); 1297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_API_SEND_EVENT_EVT: return ("API_SEND_EVENT_EVT"); 1298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_RSP_NV_READ_EVT: return ("NV_READ_EVT"); 1299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_RSP_NV_WRITE_EVT: return ("NV_WRITE_EVT"); 1300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_RSP_TIMEOUT_EVT: return ("RESPONSE_TIMEOUT_EVT"); 1301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_CHECK_QUEUE_EVT: return ("CHECK_QUEUE"); 1302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 1304df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu return ("UNKNOWN"); 1305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_get_state_name 1311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function returns the state name. 1313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to the name 1315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar *nfa_hciu_get_state_name (UINT8 state) 1318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (state) 1320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 13215c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case NFA_HCI_STATE_DISABLED: return ("DISABLED"); 13225c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case NFA_HCI_STATE_STARTUP: return ("STARTUP"); 13235c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case NFA_HCI_STATE_WAIT_NETWK_ENABLE: return ("WAIT_NETWK_ENABLE"); 13245c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case NFA_HCI_STATE_IDLE: return ("IDLE"); 13255c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case NFA_HCI_STATE_WAIT_RSP: return ("WAIT_RSP"); 13265c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case NFA_HCI_STATE_REMOVE_GATE: return ("REMOVE_GATE"); 13275c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case NFA_HCI_STATE_APP_DEREGISTER: return ("APP_DEREGISTER"); 13285c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case NFA_HCI_STATE_RESTORE: return ("RESTORE"); 13295c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case NFA_HCI_STATE_RESTORE_NETWK_ENABLE: return ("WAIT_NETWK_ENABLE_AFTER_RESTORE"); 1330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 1332df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu return ("UNKNOWN"); 1333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nfa_hciu_get_type_inst_names 1339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function returns command/response/event name. 1341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1342df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu** Returns none 1343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1345df5080d7feca9827fd0306471c54f52ecf185c22Evan Chuchar *nfa_hciu_get_type_inst_names (UINT8 pipe, UINT8 type, UINT8 inst, char *p_buff) 1346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 1348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1349df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu xx = sprintf (p_buff, "Type: %s [0x%02x] ", nfa_hciu_type_2_str (type), type); 1350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (type) 1352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_COMMAND_TYPE: 1354df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu sprintf (&p_buff[xx], "Inst: %s [0x%02x] ", nfa_hciu_instr_2_str (inst), inst); 1355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_EVENT_TYPE: 1357df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu sprintf (&p_buff[xx], "Evt: %s [0x%02x] ", nfa_hciu_evt_2_str (pipe, inst), inst); 1358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_RESPONSE_TYPE: 1360df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu sprintf (&p_buff[xx], "Resp: %s [0x%02x] ", nfa_hciu_get_response_name (inst), inst); 1361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 1363df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu sprintf (&p_buff[xx], "Inst: %u ", inst); 1364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1366df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu return (p_buff); 1367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1371df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu** Function nfa_hciu_evt_2_str 1372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1373df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu** Description This function returns the event name. 1374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns pointer to the name 1376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar *nfa_hciu_evt_2_str (UINT8 pipe_id, UINT8 evt) 1379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_HCI_DYN_PIPE *p_pipe; 1381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (pipe_id != NFA_HCI_ADMIN_PIPE) 1383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&(pipe_id != NFA_HCI_LINK_MANAGEMENT_PIPE) 1384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project &&((p_pipe = nfa_hciu_find_pipe_by_pid (pipe_id)) != NULL) ) 1385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_pipe->local_gate == NFA_HCI_CONNECTIVITY_GATE) 1387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (evt) 1389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_EVT_CONNECTIVITY: 1391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("EVT_CONNECTIVITY"); 1392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_EVT_TRANSACTION: 1393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("EVT_TRANSACTION"); 1394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_EVT_OPERATION_ENDED: 1395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("EVT_OPERATION_ENDED"); 1396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 1397df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu return ("UNKNOWN"); 1398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (evt) 1403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_EVT_HCI_END_OF_OPERATION: 1405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("EVT_END_OF_OPERATION"); 1406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_EVT_POST_DATA: 1407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("EVT_POST_DATA"); 1408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_EVT_HOT_PLUG: 1409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return ("EVT_HOT_PLUG"); 1410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 1411df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu return ("UNKNOWN"); 1412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 1415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void handle_debug_loopback (BT_HDR *p_buf, UINT8 pipe, UINT8 type, UINT8 instruction) 1418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p = (UINT8 *) (p_buf + 1) + p_buf->offset; 1420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project static UINT8 next_pipe = 0x10; 1421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (type == NFA_HCI_COMMAND_TYPE) 1423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (instruction) 1425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ADM_CREATE_PIPE: 1427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p[6] = next_pipe++; 1428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p[5] = p[4]; 1429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p[4] = p[3]; 1430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p[3] = p[2]; 1431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p[2] = 3; 1432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p[1] = (NFA_HCI_RESPONSE_TYPE << 6) | NFA_HCI_ANY_OK; 1433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_buf->len = p_buf->offset + 7; 1434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFA_HCI_ANY_GET_PARAMETER: 1437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p[1] = (NFA_HCI_RESPONSE_TYPE << 6) | NFA_HCI_ANY_OK; 1438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (&p[2], (UINT8 *) nfa_hci_cb.cfg.admin_gate.session_id, NFA_HCI_SESSION_ID_LEN); 1439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_buf->len = p_buf->offset + 2 + NFA_HCI_SESSION_ID_LEN; 1440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 1443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p[1] = (NFA_HCI_RESPONSE_TYPE << 6) | NFA_HCI_ANY_OK; 1444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_buf->len = p_buf->offset + 2; 1445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 1446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (type == NFA_HCI_RESPONSE_TYPE) 1449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_freebuf (p_buf); 1451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 1452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_buf->event = NFA_HCI_CHECK_QUEUE_EVT; 1455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_buf); 1456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1458