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