15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 1999-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki_int.h"
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (GKI_DEBUG == TRUE)
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst INT8 * const OSTaskStates[] =
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    (INT8 *)"DEAD",  /* 0 */
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    (INT8 *)"REDY",  /* 1 */
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    (INT8 *)"WAIT",  /* 2 */
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    (INT8 *)"",
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    (INT8 *)"DELY",  /* 4 */
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    (INT8 *)"",
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    (INT8 *)"",
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    (INT8 *)"",
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    (INT8 *)"SUSP",  /* 8 */
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         GKI_PrintBufferUsage
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Displays Current Buffer Pool summary
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid GKI_PrintBufferUsage(UINT8 *p_num_pools, UINT16 *p_cur_used)
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int i;
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    FREE_QUEUE_T    *p;
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   num = gki_cb.com.curr_total_no_of_pools;
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16   cur[GKI_NUM_TOTAL_BUF_POOLS];
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
537c9976dc5e4d70630f8ca0f61b0bd7bdfaf0dba3Sharvil Nanavati    GKI_TRACE("");
547c9976dc5e4d70630f8ca0f61b0bd7bdfaf0dba3Sharvil Nanavati    GKI_TRACE("--- GKI Buffer Pool Summary (R - restricted, P - public) ---");
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
567c9976dc5e4d70630f8ca0f61b0bd7bdfaf0dba3Sharvil Nanavati    GKI_TRACE("POOL     SIZE  USED  MAXU  TOTAL");
577c9976dc5e4d70630f8ca0f61b0bd7bdfaf0dba3Sharvil Nanavati    GKI_TRACE("------------------------------");
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < gki_cb.com.curr_total_no_of_pools; i++)
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p = &gki_cb.com.freeq[i];
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((1 << i) & gki_cb.com.pool_access_mask)
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
637c9976dc5e4d70630f8ca0f61b0bd7bdfaf0dba3Sharvil Nanavati            GKI_TRACE("%02d: (R), %4d, %3d, %3d, %3d",
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        i, p->size, p->cur_cnt, p->max_cnt, p->total);
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
687c9976dc5e4d70630f8ca0f61b0bd7bdfaf0dba3Sharvil Nanavati            GKI_TRACE("%02d: (P), %4d, %3d, %3d, %3d",
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        i, p->size, p->cur_cnt, p->max_cnt, p->total);
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        cur[i] = p->cur_cnt;
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_num_pools)
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *p_num_pools = num;
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_cur_used)
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_cur_used, cur, num*2);
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         GKI_PrintBuffer
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Called internally by OSS to print the buffer pools
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid GKI_PrintBuffer(void)
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 i;
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for(i=0; i<GKI_NUM_TOTAL_BUF_POOLS; i++)
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	{
937c9976dc5e4d70630f8ca0f61b0bd7bdfaf0dba3Sharvil Nanavati		GKI_TRACE("pool:%4u free %4u cur %3u max %3u  total%3u", i, gki_cb.com.freeq[i].size,
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    gki_cb.com.freeq[i].cur_cnt, gki_cb.com.freeq[i].max_cnt, gki_cb.com.freeq[i].total);
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         gki_calc_stack
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function tries to calculate the amount of
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  stack used by looking non magic num. Magic num is consider
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  the first byte in the stack.
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          the number of unused byte on the stack. 4 in case of stack overrun
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT16 gki_calc_stack (UINT8 task)
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int    j, stacksize;
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32 MagicNum;
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32 *p;
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    stacksize = (int) gki_cb.com.OSStackSize[task];
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p = (UINT32 *)gki_cb.com.OSStack[task]; /* assume stack is aligned, */
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    MagicNum = *p;
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for(j = 0; j < stacksize; j++)
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(*p++ != MagicNum) break;
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (j * sizeof(UINT32));
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         GKI_print_task
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Print task stack usage.
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid GKI_print_task(void)
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef _BT_WIN32
1397c9976dc5e4d70630f8ca0f61b0bd7bdfaf0dba3Sharvil Nanavati	GKI_TRACE("Service not available under insight");
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 TaskId;
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1437c9976dc5e4d70630f8ca0f61b0bd7bdfaf0dba3Sharvil Nanavati	GKI_TRACE("TID TASKNAME STATE FREE_STACK  STACK");
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	for(TaskId=0; TaskId < GKI_MAX_TASKS; TaskId++)
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	{
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project		if (gki_cb.com.OSRdyTbl[TaskId] != TASK_DEAD)
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project		{
1487c9976dc5e4d70630f8ca0f61b0bd7bdfaf0dba3Sharvil Nanavati			GKI_TRACE("%2u   %-8s %-5s  0x%04X     0x%04X Bytes",
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project				(UINT16)TaskId,  gki_cb.com.OSTName[TaskId],
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project				OSTaskStates[gki_cb.com.OSRdyTbl[TaskId]],
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                gki_calc_stack(TaskId), gki_cb.com.OSStackSize[TaskId]);
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         gki_print_buffer_statistics
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Called internally by OSS to print the buffer pools statistics
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid gki_print_buffer_statistics(FP_PRINT print, INT16 pool)
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16           i;
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BUFFER_HDR_T    *hdr;
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16           size,act_size,maxbuffs;
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32           *magic;
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (pool > GKI_NUM_TOTAL_BUF_POOLS || pool < 0)
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        print("Not a valid Buffer pool\n");
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    size = gki_cb.com.freeq[pool].size;
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    maxbuffs = gki_cb.com.freeq[pool].total;
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    act_size = size + BUFFER_PADDING_SIZE;
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    print("Buffer Pool[%u] size=%u cur_cnt=%u max_cnt=%u  total=%u\n",
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        pool, gki_cb.com.freeq[pool].size,
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        gki_cb.com.freeq[pool].cur_cnt, gki_cb.com.freeq[pool].max_cnt, gki_cb.com.freeq[pool].total);
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    print("      Owner  State    Sanity\n");
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    print("----------------------------\n");
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    hdr = (BUFFER_HDR_T *)(gki_cb.com.pool_start[pool]);
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for(i=0; i<maxbuffs; i++)
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        magic = (UINT32 *)((UINT8 *)hdr + BUFFER_HDR_SIZE + size);
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        print("%3d: 0x%02x %4d %10s\n", i, hdr->task_id, hdr->status, (*magic == MAGIC_NO)?"OK":"CORRUPTED");
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        hdr          = (BUFFER_HDR_T *)((UINT8 *)hdr + act_size);
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         gki_print_used_bufs
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Dumps used buffers in the particular pool
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectGKI_API void gki_print_used_bufs (FP_PRINT print, UINT8 pool_id)
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8        *p_start;
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16       buf_size;
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16       num_bufs;
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BUFFER_HDR_T *p_hdr;
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16       i;
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32         *magic;
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16       *p;
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((pool_id >= GKI_NUM_TOTAL_BUF_POOLS) || (gki_cb.com.pool_start[pool_id] != 0))
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        print("Not a valid Buffer pool\n");
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_start = gki_cb.com.pool_start[pool_id];
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    buf_size = gki_cb.com.freeq[pool_id].size + BUFFER_PADDING_SIZE;
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    num_bufs = gki_cb.com.freeq[pool_id].total;
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < num_bufs; i++, p_start += buf_size)
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_hdr = (BUFFER_HDR_T *)p_start;
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        magic = (UINT32 *)((UINT8 *)p_hdr + buf_size - sizeof(UINT32));
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p     = (UINT16 *) p_hdr;
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_hdr->status != BUF_STATUS_FREE)
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            print ("%d:0x%x (Q:%d,Task:%s,Stat:%d,%s) %04x %04x %04x %04x %04x %04x %04x %04x\n",
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                i, p_hdr,
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_hdr->q_id,
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                GKI_map_taskname(p_hdr->task_id),
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_hdr->status,
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (*magic == MAGIC_NO)? "OK" : "CORRUPTED",
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         gki_print_task
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function prints the task states.
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid gki_print_task (FP_PRINT print)
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    print("TID VID TASKNAME STATE WAIT WAITFOR TIMEOUT STACK\n");
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    print("-------------------------------------------------\n");
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for(i=0; i<GKI_MAX_TASKS; i++)
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (gki_cb.com.OSRdyTbl[i] != TASK_DEAD)
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            print("%2u  %-8s %-5s %04X    %04X %7u %u/%u Bytes\n",
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (UINT16)i,  gki_cb.com.OSTName[i],
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                OSTaskStates[gki_cb.com.OSRdyTbl[i]],
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                gki_cb.com.OSWaitEvt[i], gki_cb.com.OSWaitForEvt[i],
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                gki_cb.com.OSWaitTmr[i], gki_calc_stack(i), gki_cb.com.OSStackSize[i]);
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         gki_print_exception
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function prints the exception information.
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid gki_print_exception(FP_PRINT print)
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 i;
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    EXCEPTION_T *pExp;
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    print ("GKI Exceptions:\n");
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < gki_cb.com.ExceptionCnt; i++)
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        pExp =     &gki_cb.com.Exception[i];
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        print("%d: Type=%d, Task=%d: %s\n", i,
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (INT32)pExp->type, (INT32)pExp->taskid, (INT8 *)pExp->msg);
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************/
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid gki_dump (UINT8 *s, UINT16 len, FP_PRINT print)
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 i, j;
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for(i=0, j=0; i<len; i++)
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(j == 0)
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            print("\n%lX: %02X, ", &s[i], s[i]);
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if(j == 7)
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            print("%02X,  ", s[i]);
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            print("%02X, ", s[i]);
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(++j == 16)
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            j=0;
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    print("\n");
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid gki_dump2 (UINT16 *s, UINT16 len, FP_PRINT print)
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 i, j;
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for(i=0, j=0; i<len; i++)
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(j == 0)
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            print("\n%lX: %04X, ", &s[i], s[i]);
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            print("%04X, ", s[i]);
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(++j == 8)
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            j=0;
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    print("\n");
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid gki_dump4 (UINT32 *s, UINT16 len, FP_PRINT print)
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 i, j;
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for(i=0, j=0; i<len; i++)
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(j == 0)
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            print("\n%lX: %08lX, ", &s[i], s[i]);
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            print("%08lX, ", s[i]);
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(++j == 4)
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            j=0;
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    print("\n");
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
355