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