nfa_hci_utils.c revision e9629bad30a9f478b336ab46b8e6e02f7f87af46
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 */
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((gate_id != NFA_HCI_CONNECTIVITY_GATE)
251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    &&
252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        (  ((app_handle & NFA_HANDLE_GROUP_MASK) != NFA_HANDLE_GROUP_HCI)
253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         ||(app_inx >= NFA_HCI_MAX_APP_CB)
254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         ||(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 */
268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        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 */
274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            for (xx = 0, pg = nfa_hci_cb.cfg.dyn_gates; xx < NFA_HCI_MAX_GATE_CB; xx++, pg++)
275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                if (pg->gate_id == gate_id)
276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    break;
277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* If the gate is not allocated, use the gate */
278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (xx == NFA_HCI_MAX_GATE_CB)
279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                break;
280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (gate_id == NFA_HCI_LAST_PROP_GATE)
282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            NFA_TRACE_ERROR2 ("nfa_hci_alloc_gate - no free Gate ID: %u  App Handle: 0x%04x", gate_id, app_handle);
284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return (NULL);
285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Now look for a free control block */
289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0, pg = nfa_hci_cb.cfg.dyn_gates; xx < NFA_HCI_MAX_GATE_CB; xx++, pg++)
290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (pg->gate_id == 0)
292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* Found a free gate control block */
294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            pg->gate_id       = gate_id;
295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            pg->gate_owner    = app_handle;
296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            pg->pipe_inx_mask = 0;
297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            NFA_TRACE_DEBUG2 ("nfa_hciu_alloc_gate id:%d  app_handle: 0x%04x", gate_id, app_handle);
299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_hci_cb.nv_write_needed = TRUE;
301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return (pg);
302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* If here, no free gate control block */
306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_ERROR2 ("nfa_hci_alloc_gate - no CB  Gate ID: %u  App Handle: 0x%04x", gate_id, app_handle);
307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NULL);
308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_send_msg
313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function will fragment the given packet, if necessary
315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  and send it on the given pipe.
316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          status
318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_msg (UINT8 pipe_id, UINT8 type, UINT8 instruction, UINT16 msg_len, UINT8 *p_msg)
321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BT_HDR          *p_buf;
323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8           *p_data;
324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BOOLEAN          first_pkt = TRUE;
325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16          data_len;
326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS     status = NFA_STATUS_OK;
327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16          max_seg_hcp_pkt_size = nfa_hci_cb.buff_size - NCI_DATA_HDR_SIZE;
328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE)
330df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu    char    buff[100];
331df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu
332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG3 ("nfa_hciu_send_msg pipe_id:%d   %s  len:%d",
333df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu                      pipe_id, nfa_hciu_get_type_inst_names (pipe_id, type, instruction, buff), msg_len);
334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG4 ("nfa_hciu_send_msg pipe_id:%d   Type: %u  Inst: %u  len: %d",
336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                      pipe_id, type, instruction, msg_len);
337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (instruction == NFA_HCI_ANY_GET_PARAMETER)
340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_hci_cb.param_in_use = *p_msg;
341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    while ((first_pkt == TRUE) || (msg_len != 0))
343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if ((p_buf = (BT_HDR *) GKI_getpoolbuf (NFC_RW_POOL_ID)) != NULL)
345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_buf->offset = NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE;
347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* First packet has a 2-byte header, subsequent fragments have a 1-byte header */
349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            data_len = first_pkt ? (max_seg_hcp_pkt_size - 2) : (max_seg_hcp_pkt_size - 1);
350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_data = (UINT8 *) (p_buf + 1) + p_buf->offset;
352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* Last or only segment has "no fragmentation" bit set */
354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (msg_len > data_len)
355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                *p_data++ = (NFA_HCI_MESSAGE_FRAGMENTATION << 7) | (pipe_id & 0x7F);
357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else
359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                data_len = msg_len;
361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                *p_data++ = (NFA_HCI_NO_MESSAGE_FRAGMENTATION << 7) | (pipe_id & 0x7F);
362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_buf->len = 1;
365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* Message header only goes in the first segment */
367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (first_pkt)
368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                first_pkt = FALSE;
370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                *p_data++ = (type << 6) | instruction;
371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                p_buf->len++;
372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (data_len != 0)
375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                memcpy (p_data, p_msg, data_len);
377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                p_buf->len += data_len;
379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                msg_len    -= data_len;
380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                if (msg_len > 0)
381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    p_msg      += data_len;
382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_PROTOCOL == TRUE)
385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            DispHcp (((UINT8 *) (p_buf + 1) + p_buf->offset), p_buf->len, FALSE, (BOOLEAN) ((p_buf->len - data_len) == 2));
386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (HCI_LOOPBACK_DEBUG)
389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                handle_debug_loopback (p_buf, pipe_id, type, instruction);
390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            else
391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                status = NFC_SendData (nfa_hci_cb.conn_id, p_buf);
392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            NFA_TRACE_ERROR0 ("nfa_hciu_send_data_packet no buffers");
396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            status = NFA_STATUS_NO_BUFFERS;
397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Start timer if response to wait for a particular time for the response  */
402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (type == NFA_HCI_COMMAND_TYPE)
403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_hci_cb.cmd_sent = instruction;
405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfa_hci_cb.hci_state == NFA_HCI_STATE_IDLE)
407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_RSP;
408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4095c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen        nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hcp_response_timeout);
410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_get_allocated_gate_list
418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      fills in a list of allocated gates
420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          the number of gates
422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nfa_hciu_get_allocated_gate_list (UINT8 *p_gate_list)
425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_GATE   *p_cb;
427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    int                 xx;
428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8               count = 0;
429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4305c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    for (xx = 0, p_cb = nfa_hci_cb.cfg.dyn_gates; xx < NFA_HCI_MAX_GATE_CB; xx++, p_cb++)
431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_cb->gate_id != 0)
433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            *p_gate_list++ = p_cb->gate_id;
435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            count++;
436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG1 ("nfa_hciu_get_allocated_gate_list () returns: %u", count);
440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (count);
442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_alloc_pipe
447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Allocate a pipe control block
449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          pointer to the pipe control block, or NULL if
451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  cannot allocate
452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_PIPE *nfa_hciu_alloc_pipe (UINT8 pipe_id)
455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8               xx;
457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_PIPE   *pp;
458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* If we already have a pipe of the same ID, release it first it */
460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((pp = nfa_hciu_find_pipe_by_pid (pipe_id)) != NULL)
461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (pipe_id > NFA_HCI_LAST_DYNAMIC_PIPE)
463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return pp;
464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_hciu_release_pipe (pipe_id);
465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Look for a free pipe control block */
468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes ; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++)
469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (pp->pipe_id == 0)
471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            NFA_TRACE_DEBUG2 ("nfa_hciu_alloc_pipe:%d, index:%d", pipe_id, xx);
473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            pp->pipe_id = pipe_id;
474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_hci_cb.nv_write_needed = TRUE;
476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return (pp);
477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG1 ("nfa_hciu_alloc_pipe:%d, NO free entries !!", pipe_id);
481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NULL);
482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_release_gate
487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Remove a generic gate from gate list
489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          none
491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_hciu_release_gate (UINT8 gate_id)
494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_GATE   *p_gate = nfa_hciu_find_gate_by_gid (gate_id);
496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_gate != NULL)
498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFA_TRACE_DEBUG3 ("nfa_hciu_release_gate () ID: %d  owner: 0x%04x  pipe_inx_mask: 0x%04x",
500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                          gate_id, p_gate->gate_owner, p_gate->pipe_inx_mask);
501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_gate->gate_id       = 0;
503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_gate->gate_owner    = 0;
504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_gate->pipe_inx_mask = 0;
505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_hci_cb.nv_write_needed = TRUE;
507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFA_TRACE_WARNING1 ("nfa_hciu_release_gate () ID: %d  NOT FOUND", gate_id);
511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_add_pipe_to_gate
517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Add pipe to generic gate
519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK, if successfully add the pipe on to the gate
521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_HCI_ADM_E_NO_PIPES_AVAILABLE, otherwise
522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_RESPONSE nfa_hciu_add_pipe_to_gate (UINT8 pipe_id,   UINT8 local_gate,
525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                             UINT8 dest_host, UINT8 dest_gate)
526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_GATE   *p_gate;
528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_PIPE   *p_pipe;
529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8               pipe_index;
530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    p_gate = nfa_hciu_find_gate_by_gid (local_gate);
532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_gate != NULL)
534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* Allocate a pipe control block */
536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if ((p_pipe = nfa_hciu_alloc_pipe (pipe_id)) != NULL)
537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_pipe->pipe_id     = pipe_id;
539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_pipe->pipe_state  = NFA_HCI_PIPE_CLOSED;
540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_pipe->dest_host   = dest_host;
541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_pipe->dest_gate   = dest_gate;
542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_pipe->local_gate  = local_gate;
543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* Save the pipe in the gate that it belongs to */
545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            pipe_index = (UINT8) (p_pipe - nfa_hci_cb.cfg.dyn_pipes);
546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_gate->pipe_inx_mask |= (UINT32) (1 << pipe_index);
547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
548e9df6ba5a8fcccf306a80b1670b423be8fe7746The 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",
549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                              local_gate, pipe_id, pipe_index, p_gate->gate_owner);
550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return (NFA_HCI_ANY_OK);
551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG1 ("nfa_hciu_add_pipe_to_gate: 0x%02x  NOT FOUND", local_gate);
555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_HCI_ADM_E_NO_PIPES_AVAILABLE);
557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_add_pipe_to_static_gate
562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Add pipe to identity management gate
564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_HCI_ANY_OK, if successfully add the pipe on to the gate
566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_HCI_ADM_E_NO_PIPES_AVAILABLE, otherwise
567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
569e9df6ba5a8fcccf306a80b1670b423be8fe7746The 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)
570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_PIPE   *p_pipe;
572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8               pipe_index;
573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
574e9df6ba5a8fcccf306a80b1670b423be8fe7746The 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)",
575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                      local_gate, pipe_id, dest_host, dest_gate);
576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Allocate a pipe control block */
578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_pipe = nfa_hciu_alloc_pipe (pipe_id)) != NULL)
579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_pipe->pipe_id     = pipe_id;
581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_pipe->pipe_state  = NFA_HCI_PIPE_CLOSED;
582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_pipe->dest_host   = dest_host;
583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_pipe->dest_gate   = dest_gate;
584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_pipe->local_gate  = local_gate;
585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* If this is the ID gate, save the pipe index in the ID gate info     */
587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* block. Note that for loopback, it is enough to just create the pipe */
588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (local_gate == NFA_HCI_IDENTITY_MANAGEMENT_GATE)
589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            pipe_index = (UINT8) (p_pipe - nfa_hci_cb.cfg.dyn_pipes);
591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_hci_cb.cfg.id_mgmt_gate.pipe_inx_mask  |= (UINT32) (1 << pipe_index);
592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return NFA_HCI_ANY_OK;
594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return NFA_HCI_ADM_E_NO_PIPES_AVAILABLE;
597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_find_active_pipe_by_owner
602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Find the first pipe associated with the given app
604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          pointer to pipe, or NULL if none found
606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_PIPE *nfa_hciu_find_active_pipe_by_owner (tNFA_HANDLE app_handle)
609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_GATE   *pg;
611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_PIPE   *pp;
612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    int                 xx;
613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG1 ("nfa_hciu_find_pipe_by_owner () app_handle:0x%x", app_handle);
615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Loop through all pipes looking for the owner */
617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++)
618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (  (pp->pipe_id != 0)
620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            &&(pp->pipe_id >= NFA_HCI_FIRST_DYNAMIC_PIPE)
621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            &&(pp->pipe_id <= NFA_HCI_LAST_DYNAMIC_PIPE)
622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            &&(nfa_hciu_is_active_host (pp->dest_host))  )
623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (  ((pg = nfa_hciu_find_gate_by_gid (pp->local_gate)) != NULL)
625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                &&(pg->gate_owner == app_handle) )
626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                return (pp);
627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* If here, not found */
631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NULL);
632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_find_pipe_by_owner
637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Find the first pipe associated with the given app
639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          pointer to pipe, or NULL if none found
641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_PIPE *nfa_hciu_find_pipe_by_owner (tNFA_HANDLE app_handle)
644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_GATE   *pg;
646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_PIPE   *pp;
647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    int                 xx;
648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG1 ("nfa_hciu_find_pipe_by_owner () app_handle:0x%x", app_handle);
650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Loop through all pipes looking for the owner */
652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++)
653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (pp->pipe_id != 0)
655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (  ((pg = nfa_hciu_find_gate_by_gid (pp->local_gate)) != NULL)
657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                &&(pg->gate_owner == app_handle) )
658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                return (pp);
659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* If here, not found */
663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NULL);
664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_find_pipe_on_gate
669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Find the first pipe associated with the given gate
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_on_gate (UINT8 gate_id)
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_on_gate () Gate:0x%x", gate_id);
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_id == gate_id) )
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_is_active_host
701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Check if the host is currently active
703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE, if the host is active in the host network
705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  FALSE, if the host is not active in the host network
706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_hciu_is_active_host (UINT8 host_id)
709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   xx;
711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < NFA_HCI_MAX_HOST_IN_NETWORK; xx++)
713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfa_hci_cb.inactive_host[xx] == host_id)
715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return FALSE;
716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_is_host_reseting
724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Check if the host is currently reseting
726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE, if the host is reseting
728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  FALSE, if the host is not reseting
729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_hciu_is_host_reseting (UINT8 host_id)
732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   xx;
734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < NFA_HCI_MAX_HOST_IN_NETWORK; xx++)
736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfa_hci_cb.reset_host[xx] == host_id)
738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return TRUE;
739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return FALSE;
742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_is_no_host_resetting
747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Check if no host is reseting
749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          TRUE, if no host is resetting at this time
751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  FALSE, if one or more host is resetting
752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nfa_hciu_is_no_host_resetting (void)
755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   xx;
757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0; xx < NFA_HCI_MAX_HOST_IN_NETWORK; xx++)
759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfa_hci_cb.reset_host[xx] != 0)
761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return FALSE;
762e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
763e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return TRUE;
765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_find_active_pipe_on_gate
770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Find the first active pipe associated with the given gate
772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          pointer to pipe, or NULL if none found
774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_DYN_PIPE *nfa_hciu_find_active_pipe_on_gate (UINT8 gate_id)
777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_GATE   *pg;
779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_PIPE   *pp;
780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    int                 xx;
781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG1 ("nfa_hciu_find_active_pipe_on_gate () Gate:0x%x", gate_id);
783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Loop through all pipes looking for the owner */
785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++)
786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (  (pp->pipe_id != 0)
788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            &&(pp->pipe_id >= NFA_HCI_FIRST_DYNAMIC_PIPE)
789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            &&(pp->pipe_id <= NFA_HCI_LAST_DYNAMIC_PIPE)
790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            &&(nfa_hciu_is_active_host (pp->dest_host))  )
791e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            if (  ((pg = nfa_hciu_find_gate_by_gid (pp->local_gate)) != NULL)
793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                &&(pg->gate_id == gate_id) )
794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                return (pp);
795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
797e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
798e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* If here, not found */
799e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NULL);
800e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
801e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
802e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
803e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
804e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_release_pipe
805e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
806e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      remove the specified pipe
807e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
808e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_HCI_ANY_OK, if removed
809e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_HCI_ANY_E_NOK, if otherwise
810e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
811e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
812e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_HCI_RESPONSE nfa_hciu_release_pipe (UINT8 pipe_id)
813e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
814e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_GATE   *p_gate;
815e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_PIPE   *p_pipe;
816e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8               pipe_index;
817e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
818e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_EVENT1 ("nfa_hciu_release_pipe: %u", pipe_id);
819e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
820e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_pipe = nfa_hciu_find_pipe_by_pid (pipe_id)) == NULL)
821e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_HCI_ANY_E_NOK);
822e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
823e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (pipe_id > NFA_HCI_LAST_DYNAMIC_PIPE)
824e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFA_TRACE_DEBUG1 ("ignore pipe: %d", pipe_id);
826e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_HCI_ANY_E_NOK);
827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    pipe_index = (UINT8) (p_pipe - nfa_hci_cb.cfg.dyn_pipes);
830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
831e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_pipe->local_gate == NFA_HCI_IDENTITY_MANAGEMENT_GATE)
832e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* Remove pipe from ID management gate */
834e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_hci_cb.cfg.id_mgmt_gate.pipe_inx_mask &= ~ (UINT32) (1 << pipe_index);
835e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
836e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
837e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
838e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if ((p_gate = nfa_hciu_find_gate_by_gid (p_pipe->local_gate)) == NULL)
839e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
840e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            /* Mark the pipe control block as free */
841e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_pipe->pipe_id = 0;
842e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return (NFA_HCI_ANY_E_NOK);
843e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
844e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
845e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* Remove pipe from gate */
846e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_gate->pipe_inx_mask &= ~ (UINT32) (1 << pipe_index);
847e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
848e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
849e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Reset pipe control block */
850e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    memset (p_pipe,0,sizeof (tNFA_HCI_DYN_PIPE));
851e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_hci_cb.nv_write_needed = TRUE;
852e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return NFA_HCI_ANY_OK;
853e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
854e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
855e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
856e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
857e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_remove_all_pipes_from_host
858e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
859e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      remove all the pipes that are connected to a specific host
860e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
861e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
862e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
863e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
864e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_hciu_remove_all_pipes_from_host (UINT8 host)
865e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
866e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_GATE   *pg;
867e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_PIPE   *pp;
868e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    int                 xx;
869e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_EVT_DATA   evt_data;
870e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
871e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_EVENT1 ("nfa_hciu_remove_all_pipes_from_host (0x%02x)", host);
872e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
873e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Remove all pipes from the specified host connected to all generic gates */
874e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++)
875e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
876e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (  (pp->pipe_id == 0)
877e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    ||
878e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project              (  (host != 0)
879e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project               &&((pp->dest_host != host) || (pp->pipe_id > NFA_HCI_LAST_DYNAMIC_PIPE)))  )
880e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            continue;
881e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
882e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if ((pg = nfa_hciu_find_gate_by_gid (pp->local_gate)) != NULL)
883e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
884e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.deleted.status = NFA_STATUS_OK;
885e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            evt_data.deleted.pipe   = pp->pipe_id;
886e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
887e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_hciu_send_to_app (NFA_HCI_DELETE_PIPE_EVT, &evt_data, pg->gate_owner);
888e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
889e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_hciu_release_pipe (pp->pipe_id);
890e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
891e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
892e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
893e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
894e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
895e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_send_create_pipe_cmd
896e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
897e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Create dynamic pipe between the specified gates
898e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
899e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          status
900e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
901e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
902e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_create_pipe_cmd (UINT8 source_gate, UINT8 dest_host, UINT8 dest_gate)
903e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
904e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS         status;
905e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8               data[3];
906e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
907e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    data[0] = source_gate;
908e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    data[1] = dest_host;
909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    data[2] = dest_gate;
910e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
911e9df6ba5a8fcccf306a80b1670b423be8fe7746The 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);
912e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
913e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    status = nfa_hciu_send_msg (NFA_HCI_ADMIN_PIPE, NFA_HCI_COMMAND_TYPE, NFA_HCI_ADM_CREATE_PIPE, 3, data);
914e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
915e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
916e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
917e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
918e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
919e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
920e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_send_delete_pipe_cmd
921e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
922e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Delete the dynamic pipe
923e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
924e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
925e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
926e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
927e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_delete_pipe_cmd (UINT8 pipe)
928e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
929e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS status;
930e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
931e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG1 ("nfa_hciu_send_delete_pipe_cmd: %d", pipe);
932e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
933e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (pipe > NFA_HCI_LAST_DYNAMIC_PIPE)
934e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
935e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFA_TRACE_DEBUG1 ("ignore pipe: %d", pipe);
936e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_HCI_ANY_E_NOK);
937e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
938e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_hci_cb.pipe_in_use = pipe;
939e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
940e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    status = nfa_hciu_send_msg (NFA_HCI_ADMIN_PIPE, NFA_HCI_COMMAND_TYPE, NFA_HCI_ADM_DELETE_PIPE, 1, &pipe);
941e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
942e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
943e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
944e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
945e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
946e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
947e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
948e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_send_clear_all_pipe_cmd
949e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
950e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      delete all the dynamic pipe connected to device host,
951e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  to close all static pipes connected to device host,
952e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  and to set registry values related to static pipes to
953e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  theri default values.
954e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
955e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
956e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
957e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
958e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_clear_all_pipe_cmd (void)
959e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
960e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS status;
961e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16      id_ref_data = 0x0102;
962e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
963e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_DEBUG0 ("nfa_hciu_send_clear_all_pipe_cmd");
964e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
965e9df6ba5a8fcccf306a80b1670b423be8fe7746The 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);
966e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
967e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
968e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
969e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
971e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_send_open_pipe_cmd
973e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Open a closed pipe
975e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
976e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          status
977e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
978e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
979e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_open_pipe_cmd (UINT8 pipe)
980e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
981e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS status;
982e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
983e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_hci_cb.pipe_in_use = pipe;
984e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
985e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    status = nfa_hciu_send_msg (pipe, NFA_HCI_COMMAND_TYPE, NFA_HCI_ANY_OPEN_PIPE, 0, NULL);
986e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
987e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
988e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
989e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
990e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
991e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
992e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_send_close_pipe_cmd
993e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
994e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Close an opened pipe
995e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
996e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          status
997e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
998e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
999e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_close_pipe_cmd (UINT8 pipe)
1000e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1001e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS status;
1002e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1003e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_hci_cb.pipe_in_use = pipe;
1004e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1005e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    status = nfa_hciu_send_msg (pipe, NFA_HCI_COMMAND_TYPE, NFA_HCI_ANY_CLOSE_PIPE, 0, NULL);
1006e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1007e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
1008e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1009e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1010e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1011e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1012e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_send_get_param_cmd
1013e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1014e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Read a parameter value from gate registry
1015e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1016e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
1017e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1018e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1019e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_get_param_cmd (UINT8 pipe, UINT8 index)
1020e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1021e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS status;
1022e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1023e9df6ba5a8fcccf306a80b1670b423be8fe7746The 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)
1024e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_hci_cb.param_in_use = index;
1025e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1026e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
1027e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1028e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1029e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1030e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1031e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_send_set_param_cmd
1032e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1033e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Set a parameter value in a gate registry
1034e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1035e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          None
1036e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1037e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1038e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_hciu_send_set_param_cmd (UINT8 pipe, UINT8 index, UINT8 length, UINT8 *p_data)
1039e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1040e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_STATUS status;
1041e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8       data[255];
1042e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1043e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    data[0] = index;
1044e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1045e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    memcpy (&data[1], p_data, length);
1046e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1047e9df6ba5a8fcccf306a80b1670b423be8fe7746The 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)
1048e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_hci_cb.param_in_use = index;
1049e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1050e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return status;
1051e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1052e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1053e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1054e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1055e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1056e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_send_to_app
1057e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1058e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Send an event back to an application
1059e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1060e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          none
1061e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1062e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1063e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_hciu_send_to_app (tNFA_HCI_EVT event, tNFA_HCI_EVT_DATA *p_evt, tNFA_HANDLE app_handle)
1064e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1065e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   app_inx = app_handle & NFA_HANDLE_MASK;
1066e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1067e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* First, check if the application handle is valid */
1068e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  ((app_handle & NFA_HANDLE_GROUP_MASK) == NFA_HANDLE_GROUP_HCI)
1069e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        &&(app_inx < NFA_HCI_MAX_APP_CB) )
1070e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1071e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfa_hci_cb.p_app_cback[app_inx] != NULL)
1072e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
1073e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_hci_cb.p_app_cback[app_inx] (event, p_evt);
1074e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return;
1075e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
1076e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1077e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1078e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (app_handle != NFA_HANDLE_INVALID)
1079e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1080e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFA_TRACE_WARNING2 ("nfa_hciu_send_to_app no callback,  event: 0x%04x  app_handle: 0x%04x",
1081e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            event, app_handle);
1082e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
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** Function         nfa_hciu_send_to_all_apps
1088e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1089e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Send an event back to all applications
1090e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1091e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          none
1092e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1093e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1094e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_hciu_send_to_all_apps (tNFA_HCI_EVT event, tNFA_HCI_EVT_DATA *p_evt)
1095e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1096e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   app_inx;
1097e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1098e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (app_inx = 0; app_inx < NFA_HCI_MAX_APP_CB; app_inx++)
1099e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (nfa_hci_cb.p_app_cback[app_inx] != NULL)
1101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_hci_cb.p_app_cback[app_inx] (event, p_evt);
1102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_send_to_apps_handling_connectivity_evts
1109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Send a connectivity event to all the application interested
1111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  in connectivity events
1112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          none
1114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nfa_hciu_send_to_apps_handling_connectivity_evts (tNFA_HCI_EVT event, tNFA_HCI_EVT_DATA *p_evt)
1117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   app_inx;
1119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (app_inx = 0; app_inx < NFA_HCI_MAX_APP_CB; app_inx++)
1121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (  (nfa_hci_cb.p_app_cback[app_inx] != NULL)
1123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            &&(nfa_hci_cb.cfg.b_send_conn_evts[app_inx]))
1124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            nfa_hci_cb.p_app_cback[app_inx] (event, p_evt);
1126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE)
1131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_get_response_name
1134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function returns the error code name.
1136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NOTE             conditionally compiled to save memory.
1138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          pointer to the name
1140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar *nfa_hciu_get_response_name (UINT8 rsp_code)
1143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (rsp_code)
1145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_OK:
1147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_OK");
1148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_E_NOT_CONNECTED:
1149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_E_NOT_CONNECTED");
1150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_E_CMD_PAR_UNKNOWN:
1151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_E_CMD_PAR_UNKNOWN");
1152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_E_NOK:
1153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_E_NOK");
1154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ADM_E_NO_PIPES_AVAILABLE:
1155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ADM_E_NO_PIPES_AVAILABLE");
1156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_E_REG_PAR_UNKNOWN:
1157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_E_REG_PAR_UNKNOWN");
1158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_E_PIPE_NOT_OPENED:
1159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_E_PIPE_NOT_OPENED");
1160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_E_CMD_NOT_SUPPORTED:
1161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_E_CMD_NOT_SUPPORTED");
1162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_E_INHIBITED:
1163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_E_INHIBITED");
1164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_E_TIMEOUT:
1165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_E_TIMEOUT");
1166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_E_REG_ACCESS_DENIED:
1167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_E_REG_ACCESS_DENIED");
1168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_E_PIPE_ACCESS_DENIED:
1169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_E_PIPE_ACCESS_DENIED");
1170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
1171df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu        return ("UNKNOWN");
1172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_type_2_str
1178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function returns the type name.
1180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          pointer to the name
1182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar *nfa_hciu_type_2_str(UINT8 type)
1185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (type)
1187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_COMMAND_TYPE:
1189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("COMMAND");
1190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_EVENT_TYPE:
1191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("EVENT");
1192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_RESPONSE_TYPE:
1193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("RESPONSE");
1194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
1195df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu        return ("UNKNOWN");
1196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_instr_2_str
1202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function returns the instruction name.
1204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          pointer to the name
1206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar *nfa_hciu_instr_2_str (UINT8 instruction)
1209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (instruction)
1211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_SET_PARAMETER:
1213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_SET_PARAMETER");
1214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_GET_PARAMETER:
1215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_GET_PARAMETER");
1216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_OPEN_PIPE:
1217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_OPEN_PIPE");
1218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ANY_CLOSE_PIPE:
1219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ANY_CLOSE_PIPE");
1220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ADM_CREATE_PIPE:
1221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ADM_CREATE_PIPE");
1222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ADM_DELETE_PIPE:
1223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ADM_DELETE_PIPE");
1224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ADM_NOTIFY_PIPE_CREATED:
1225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ADM_NOTIFY_PIPE_CREATED");
1226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ADM_NOTIFY_PIPE_DELETED:
1227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ADM_NOTIFY_PIPE_DELETED");
1228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ADM_CLEAR_ALL_PIPE:
1229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ADM_CLEAR_ALL_PIPE");
1230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED:
1231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("ADM_NOTIFY_ALL_PIPE_CLEARED");
1232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
1233df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu        return ("UNKNOWN");
1234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_get_event_name
1241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function returns the event code name.
1243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          pointer to the name
1245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar *nfa_hciu_get_event_name (UINT16 event)
1248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (event)
1250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_REGISTER_APP_EVT:        return ("API_REGISTER");
1252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_DEREGISTER_APP_EVT:      return ("API_DEREGISTER");
1253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_GET_APP_GATE_PIPE_EVT:   return ("API_GET_GATE_LIST");
1254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_ALLOC_GATE_EVT:          return ("API_ALLOC_GATE");
1255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_DEALLOC_GATE_EVT:        return ("API_DEALLOC_GATE");
1256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_GET_HOST_LIST_EVT:       return ("API_GET_HOST_LIST");
1257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_GET_REGISTRY_EVT:        return ("API_GET_REG_VALUE");
1258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_SET_REGISTRY_EVT:        return ("API_SET_REG_VALUE");
1259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_CREATE_PIPE_EVT:         return ("API_CREATE_PIPE");
1260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_OPEN_PIPE_EVT:           return ("API_OPEN_PIPE");
1261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_CLOSE_PIPE_EVT:          return ("API_CLOSE_PIPE");
1262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_DELETE_PIPE_EVT:         return ("API_DELETE_PIPE");
1263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_SEND_CMD_EVT:            return ("API_SEND_COMMAND_EVT");
1264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_SEND_RSP_EVT:            return ("API_SEND_RESPONSE_EVT");
1265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_API_SEND_EVENT_EVT:          return ("API_SEND_EVENT_EVT");
1266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_RSP_NV_READ_EVT:             return ("NV_READ_EVT");
1267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_RSP_NV_WRITE_EVT:            return ("NV_WRITE_EVT");
1268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_RSP_TIMEOUT_EVT:             return ("RESPONSE_TIMEOUT_EVT");
1269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_CHECK_QUEUE_EVT:             return ("CHECK_QUEUE");
1270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
1272df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu        return ("UNKNOWN");
1273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_get_state_name
1279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function returns the state name.
1281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          pointer to the name
1283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar *nfa_hciu_get_state_name (UINT8 state)
1286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (state)
1288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
12895c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    case NFA_HCI_STATE_DISABLED:             return ("DISABLED");
12905c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    case NFA_HCI_STATE_STARTUP:              return ("STARTUP");
12915c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    case NFA_HCI_STATE_WAIT_NETWK_ENABLE:    return ("WAIT_NETWK_ENABLE");
12925c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    case NFA_HCI_STATE_IDLE:                 return ("IDLE");
12935c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    case NFA_HCI_STATE_WAIT_RSP:             return ("WAIT_RSP");
12945c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    case NFA_HCI_STATE_REMOVE_GATE:          return ("REMOVE_GATE");
12955c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    case NFA_HCI_STATE_APP_DEREGISTER:       return ("APP_DEREGISTER");
12965c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    case NFA_HCI_STATE_RESTORE:              return ("RESTORE");
12975c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen    case NFA_HCI_STATE_RESTORE_NETWK_ENABLE: return ("WAIT_NETWK_ENABLE_AFTER_RESTORE");
1298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
1300df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu        return ("UNKNOWN");
1301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_hciu_get_type_inst_names
1307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function returns command/response/event name.
1309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1310df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu** Returns          none
1311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1313df5080d7feca9827fd0306471c54f52ecf185c22Evan Chuchar *nfa_hciu_get_type_inst_names (UINT8 pipe, UINT8 type, UINT8 inst, char *p_buff)
1314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    int   xx;
1316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1317df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu    xx = sprintf (p_buff, "Type: %s [0x%02x] ", nfa_hciu_type_2_str (type), type);
1318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (type)
1320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_COMMAND_TYPE:
1322df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu        sprintf (&p_buff[xx], "Inst: %s [0x%02x] ", nfa_hciu_instr_2_str (inst), inst);
1323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
1324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_EVENT_TYPE:
1325df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu        sprintf (&p_buff[xx], "Evt: %s [0x%02x] ", nfa_hciu_evt_2_str (pipe, inst), inst);
1326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
1327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_RESPONSE_TYPE:
1328df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu        sprintf (&p_buff[xx], "Resp: %s [0x%02x] ", nfa_hciu_get_response_name (inst), inst);
1329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
1330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
1331df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu        sprintf (&p_buff[xx], "Inst: %u ", inst);
1332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        break;
1333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1334df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu    return (p_buff);
1335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
1338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1339df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu** Function         nfa_hciu_evt_2_str
1340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1341df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu** Description      This function returns the event name.
1342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          pointer to the name
1344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
1345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
1346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar *nfa_hciu_evt_2_str (UINT8 pipe_id, UINT8 evt)
1347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_HCI_DYN_PIPE   *p_pipe;
1349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (pipe_id != NFA_HCI_ADMIN_PIPE)
1351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        &&(pipe_id != NFA_HCI_LINK_MANAGEMENT_PIPE)
1352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        &&((p_pipe = nfa_hciu_find_pipe_by_pid (pipe_id)) != NULL)  )
1353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_pipe->local_gate == NFA_HCI_CONNECTIVITY_GATE)
1355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
1356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            switch (evt)
1357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            {
1358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            case NFA_HCI_EVT_CONNECTIVITY:
1359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                return ("EVT_CONNECTIVITY");
1360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            case NFA_HCI_EVT_TRANSACTION:
1361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                return ("EVT_TRANSACTION");
1362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            case NFA_HCI_EVT_OPERATION_ENDED:
1363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                return ("EVT_OPERATION_ENDED");
1364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            default:
1365df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu                return ("UNKNOWN");
1366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            }
1367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
1368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    switch (evt)
1371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_EVT_HCI_END_OF_OPERATION:
1373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("EVT_END_OF_OPERATION");
1374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_EVT_POST_DATA:
1375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("EVT_POST_DATA");
1376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    case NFA_HCI_EVT_HOT_PLUG:
1377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return ("EVT_HOT_PLUG");
1378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    default:
1379df5080d7feca9827fd0306471c54f52ecf185c22Evan Chu        return ("UNKNOWN");
1380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
1383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void handle_debug_loopback (BT_HDR *p_buf, UINT8 pipe, UINT8 type, UINT8 instruction)
1386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
1387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8 *p = (UINT8 *) (p_buf + 1) + p_buf->offset;
1388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    static UINT8  next_pipe = 0x10;
1389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (type == NFA_HCI_COMMAND_TYPE)
1391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        switch (instruction)
1393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
1394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFA_HCI_ADM_CREATE_PIPE:
1395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p[6] = next_pipe++;
1396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p[5] = p[4];
1397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p[4] = p[3];
1398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p[3] = p[2];
1399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p[2] = 3;
1400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p[1] = (NFA_HCI_RESPONSE_TYPE << 6) | NFA_HCI_ANY_OK;
1401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_buf->len = p_buf->offset + 7;
1402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
1403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        case NFA_HCI_ANY_GET_PARAMETER:
1405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p[1] = (NFA_HCI_RESPONSE_TYPE << 6) | NFA_HCI_ANY_OK;
1406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            memcpy (&p[2], (UINT8 *) nfa_hci_cb.cfg.admin_gate.session_id, NFA_HCI_SESSION_ID_LEN);
1407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_buf->len = p_buf->offset + 2 + NFA_HCI_SESSION_ID_LEN;
1408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
1409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        default:
1411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p[1] = (NFA_HCI_RESPONSE_TYPE << 6) | NFA_HCI_ANY_OK;
1412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            p_buf->len = p_buf->offset + 2;
1413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            break;
1414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
1415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else if (type == NFA_HCI_RESPONSE_TYPE)
1417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
1418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_freebuf (p_buf);
1419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return;
1420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
1421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    p_buf->event = NFA_HCI_CHECK_QUEUE_EVT;
1423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    nfa_sys_sendmsg (p_buf);
1424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
1425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1426