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