1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
3e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Copyright (C) 1999-2012 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#include "gki_int.h"
19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_DEBUG == TRUE)
21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectconst INT8 * const OSTaskStates[] =
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    (INT8 *)"DEAD",  /* 0 */
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    (INT8 *)"REDY",  /* 1 */
26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    (INT8 *)"WAIT",  /* 2 */
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    (INT8 *)"",
28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    (INT8 *)"DELY",  /* 4 */
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    (INT8 *)"",
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    (INT8 *)"",
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    (INT8 *)"",
32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    (INT8 *)"SUSP",  /* 8 */
33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project};
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         GKI_PrintBufferUsage
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Displays Current Buffer Pool summary
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid GKI_PrintBufferUsage(UINT8 *p_num_pools, UINT16 *p_cur_used)
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    int i;
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    FREE_QUEUE_T    *p;
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8   num = gki_cb.com.curr_total_no_of_pools;
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16   cur[GKI_NUM_TOTAL_BUF_POOLS];
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_TRACE_0("");
53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_TRACE_0("--- GKI Buffer Pool Summary (R - restricted, P - public) ---");
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_TRACE_0("POOL     SIZE  USED  MAXU  TOTAL");
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_TRACE_0("------------------------------");
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (i = 0; i < gki_cb.com.curr_total_no_of_pools; i++)
58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p = &gki_cb.com.freeq[i];
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if ((1 << i) & gki_cb.com.pool_access_mask)
61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            GKI_TRACE_5("%02d: (R), %4d, %3d, %3d, %3d",
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        i, p->size, p->cur_cnt, p->max_cnt, p->total);
64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            GKI_TRACE_5("%02d: (P), %4d, %3d, %3d, %3d",
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                        i, p->size, p->cur_cnt, p->max_cnt, p->total);
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        cur[i] = p->cur_cnt;
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_num_pools)
73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        *p_num_pools = num;
74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_cur_used)
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        memcpy(p_cur_used, cur, num*2);
76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         GKI_PrintBuffer
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Called internally by OSS to print the buffer pools
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid GKI_PrintBuffer(void)
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16 i;
90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for(i=0; i<GKI_NUM_TOTAL_BUF_POOLS; i++)
91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        GKI_TRACE_5("pool:%4u free %4u cur %3u max %3u  total%3u", i, gki_cb.com.freeq[i].size,
93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                    gki_cb.com.freeq[i].cur_cnt, gki_cb.com.freeq[i].max_cnt, gki_cb.com.freeq[i].total);
94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         gki_calc_stack
100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function tries to calculate the amount of
102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  stack used by looking non magic num. Magic num is consider
103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  the first byte in the stack.
104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          the number of unused byte on the stack. 4 in case of stack overrun
106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT16 gki_calc_stack (UINT8 task)
109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    int    j, stacksize;
111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32 MagicNum;
112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32 *p;
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    stacksize = (int) gki_cb.com.OSStackSize[task];
115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    p = (UINT32 *)gki_cb.com.OSStack[task]; /* assume stack is aligned, */
116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    MagicNum = *p;
117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for(j = 0; j < stacksize; j++)
119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if(*p++ != MagicNum) break;
121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (j * sizeof(UINT32));
124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         GKI_print_task
129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Print task stack usage.
131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid GKI_print_task(void)
136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef _BT_WIN32
138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	GKI_TRACE_0("Service not available under insight");
139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8 TaskId;
141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    GKI_TRACE_0("TID TASKNAME STATE FREE_STACK  STACK");
143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for(TaskId=0; TaskId < GKI_MAX_TASKS; TaskId++)
144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (gki_cb.com.OSRdyTbl[TaskId] != TASK_DEAD)
146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            GKI_TRACE_5("%2u   %-8s %-5s  0x%04X     0x%04X Bytes",
148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                (UINT16)TaskId,  gki_cb.com.OSTName[TaskId],
149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                OSTaskStates[gki_cb.com.OSRdyTbl[TaskId]],
150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                gki_calc_stack(TaskId), gki_cb.com.OSStackSize[TaskId]);
151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         gki_print_buffer_statistics
161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Called internally by OSS to print the buffer pools statistics
163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid gki_print_buffer_statistics(FP_PRINT print, INT16 pool)
168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16           i;
170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BUFFER_HDR_T    *hdr;
171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16           size,act_size,maxbuffs;
172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32           *magic;
173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (pool > GKI_NUM_TOTAL_BUF_POOLS || pool < 0)
175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        print("Not a valid Buffer pool\n");
177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return;
178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    size = gki_cb.com.freeq[pool].size;
181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    maxbuffs = gki_cb.com.freeq[pool].total;
182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    act_size = size + BUFFER_PADDING_SIZE;
183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    print("Buffer Pool[%u] size=%u cur_cnt=%u max_cnt=%u  total=%u\n",
184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        pool, gki_cb.com.freeq[pool].size,
185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        gki_cb.com.freeq[pool].cur_cnt, gki_cb.com.freeq[pool].max_cnt, gki_cb.com.freeq[pool].total);
186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    print("      Owner  State    Sanity\n");
188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    print("----------------------------\n");
189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    hdr = (BUFFER_HDR_T *)(gki_cb.com.pool_start[pool]);
190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for(i=0; i<maxbuffs; i++)
191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        magic = (UINT32 *)((UINT8 *)hdr + BUFFER_HDR_SIZE + size);
193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        print("%3d: 0x%02x %4d %10s\n", i, hdr->task_id, hdr->status, (*magic == MAGIC_NO)?"OK":"CORRUPTED");
194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        hdr          = (BUFFER_HDR_T *)((UINT8 *)hdr + act_size);
195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return;
197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         gki_print_used_bufs
203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Dumps used buffers in the particular pool
205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectGKI_API void gki_print_used_bufs (FP_PRINT print, UINT8 pool_id)
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8        *p_start;
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16       buf_size;
211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16       num_bufs;
212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    BUFFER_HDR_T *p_hdr;
213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16       i;
214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT32         *magic;
215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16       *p;
216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (pool_id >= GKI_NUM_TOTAL_BUF_POOLS && gki_cb.com.pool_start[pool_id] != 0)
219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        print("Not a valid Buffer pool\n");
221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return;
222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    p_start = gki_cb.com.pool_start[pool_id];
225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    buf_size = gki_cb.com.freeq[pool_id].size + BUFFER_PADDING_SIZE;
226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    num_bufs = gki_cb.com.freeq[pool_id].total;
227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (i = 0; i < num_bufs; i++, p_start += buf_size)
229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_hdr = (BUFFER_HDR_T *)p_start;
231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        magic = (UINT32 *)((UINT8 *)p_hdr + buf_size - sizeof(UINT32));
232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p     = (UINT16 *) p_hdr;
233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_hdr->status != BUF_STATUS_FREE)
235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            print ("%d:0x%x (Q:%d,Task:%s,Stat:%d,%s) %04x %04x %04x %04x %04x %04x %04x %04x\n",
237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                i, p_hdr,
238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                p_hdr->q_id,
239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                GKI_map_taskname(p_hdr->task_id),
240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                p_hdr->status,
241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                (*magic == MAGIC_NO)? "OK" : "CORRUPTED",
242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         gki_print_task
251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function prints the task states.
253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid gki_print_task (FP_PRINT print)
258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT8 i;
260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    print("TID VID TASKNAME STATE WAIT WAITFOR TIMEOUT STACK\n");
262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    print("-------------------------------------------------\n");
263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for(i=0; i<GKI_MAX_TASKS; i++)
264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (gki_cb.com.OSRdyTbl[i] != TASK_DEAD)
266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            print("%2u  %-8s %-5s %04X    %04X %7u %u/%u Bytes\n",
268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                (UINT16)i,  gki_cb.com.OSTName[i],
269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                OSTaskStates[gki_cb.com.OSRdyTbl[i]],
270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                gki_cb.com.OSWaitEvt[i], gki_cb.com.OSWaitForEvt[i],
271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                gki_cb.com.OSWaitTmr[i], gki_calc_stack(i), gki_cb.com.OSStackSize[i]);
272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         gki_print_exception
280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      This function prints the exception information.
282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          void
284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid gki_print_exception(FP_PRINT print)
287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16 i;
289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    EXCEPTION_T *pExp;
290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    print ("GKI Exceptions:\n");
292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for (i = 0; i < gki_cb.com.ExceptionCnt; i++)
293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        pExp =     &gki_cb.com.Exception[i];
295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        print("%d: Type=%d, Task=%d: %s\n", i,
296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            (INT32)pExp->type, (INT32)pExp->taskid, (INT8 *)pExp->msg);
297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************/
302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid gki_dump (UINT8 *s, UINT16 len, FP_PRINT print)
303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16 i, j;
305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for(i=0, j=0; i<len; i++)
307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if(j == 0)
309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            print("\n%lX: %02X, ", &s[i], s[i]);
310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else if(j == 7)
311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            print("%02X,  ", s[i]);
312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            print("%02X, ", s[i]);
314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if(++j == 16)
315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            j=0;
316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    print("\n");
318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid gki_dump2 (UINT16 *s, UINT16 len, FP_PRINT print)
321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16 i, j;
323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for(i=0, j=0; i<len; i++)
325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if(j == 0)
327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            print("\n%lX: %04X, ", &s[i], s[i]);
328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            print("%04X, ", s[i]);
330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if(++j == 8)
331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            j=0;
332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    print("\n");
334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid gki_dump4 (UINT32 *s, UINT16 len, FP_PRINT print)
337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    UINT16 i, j;
339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    for(i=0, j=0; i<len; i++)
341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if(j == 0)
343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            print("\n%lX: %08lX, ", &s[i], s[i]);
344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        else
345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            print("%08lX, ", s[i]);
346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if(++j == 4)
347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            j=0;
348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    print("\n");
350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
354