s32 bsp_mem_dump_alloc_list(u32 u32Size, u32 u32PoolType) { u32 u32Item; u32 u32MostUsedItem; void* pCurAddr; u32 u32Num = 0; MEM_ALLOC_INFO* pAllocInfo; if (u32PoolType >= MEM_POOL_MAX) { bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_MEM,"invalid pool type:%d\n", u32PoolType); return BSP_ERROR; } pAllocInfo = MEM_GET_ALLOC_INFO(u32PoolType); u32MostUsedItem = pAllocInfo->mostUsedItem; MEM_FIND_RIGHT_ITEM(u32Item, u32Size, u32MostUsedItem); if (u32Item >= MEM_ALLOC_LIST_NUM) { bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_MEM,"invalid size:%d\n", u32Size); return BSP_ERROR; } bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_MEM,"dump alloc list beg:\n"); pCurAddr = pAllocInfo->allocList[u32Item]; for (;NULL != pCurAddr; pCurAddr = (void*)MEM_ITEM_NEXT(pCurAddr)) { (void)bsp_mem_dump_block((u32)pCurAddr); u32Num++; } bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_MEM,"dump alloc list end, num:%d\n", u32Num); return BSP_OK; }
s32 bsp_mem_dump_alloc_list(u32 u32Size, u32 u32PoolType) { u32 u32Item; u32 u32MostUsedItem; void* pCurAddr; u32 u32Num = 0; MEM_ALLOC_INFO* pAllocInfo; if (u32PoolType >= MEM_POOL_MAX) { printk("invalid pool type:%d\n", u32PoolType); return ERROR; } pAllocInfo = MEM_GET_ALLOC_INFO(u32PoolType); u32MostUsedItem = pAllocInfo->mostUsedItem; MEM_FIND_RIGHT_ITEM(u32Item, u32Size, u32MostUsedItem); if (u32Item >= MEM_ALLOC_LIST_NUM) { printk("invalid size:%d\n", u32Size); return -1; } printk("dump alloc list beg:\n"); pCurAddr = (void*)PHY_TO_VIRT((unsigned int)pAllocInfo->allocList[u32Item]); for (;NULL != pCurAddr; pCurAddr = (void*)MEM_ITEM_NEXT(pCurAddr)) { (void)bsp_mem_dump_block((u32)pCurAddr); u32Num++; } printk("dump alloc list end, num:%d\n", u32Num); return 0; }
s32 bsp_mem_scan(u32 u32PoolType) { MEM_ALLOC_INFO* pAllocInfo = NULL; u32 u32CurScan; u32 u32EndAddr; u32 u32MgrSize; pAllocInfo = MEM_GET_ALLOC_INFO(u32PoolType); if (u32PoolType >= MEM_POOL_MAX) { printk("invalid pool type:%d\n", u32PoolType); return ERROR; } u32CurScan = pAllocInfo->memPoolInfo.u32BaseAddr; u32MgrSize = pAllocInfo->memPoolInfo.u32MgrSize; u32EndAddr = pAllocInfo->memPoolInfo.u32CurPosAddr; printk("Beg Scan Mem (%s):\n", g_memPoolName[u32PoolType]); printk("================================\n"); printk("mem pool info:\n"); printk("--------------------------------\n"); printk("Base Addr: 0x%x\n", pAllocInfo->memPoolInfo.u32BaseAddr); printk("Total Size: %d(0x%x)\n", pAllocInfo->memPoolInfo.u32Size, pAllocInfo->memPoolInfo.u32Size); printk("Left Size: %d(0x%x)\n", pAllocInfo->memPoolInfo.u32Left, pAllocInfo->memPoolInfo.u32Left); printk("Cur Pos Addr: 0x%x\n", pAllocInfo->memPoolInfo.u32CurPosAddr); printk("Mgr Size: %d\n", pAllocInfo->memPoolInfo.u32MgrSize); printk("Most Used Item: %d\n", pAllocInfo->mostUsedItem); printk("\n"); /* 扫描 MemPool */ while(u32CurScan < u32EndAddr) { /* 先拿到usr ptr */ u32CurScan += u32MgrSize; /* 打印当前内存块信息 */ (void)bsp_mem_dump_block(u32CurScan); /* 移动到下一个内存块 */ u32CurScan += MEM_ITEM_SIZE(u32CurScan); printk("\npress \'Enter\' to continue, press \'q\' to stop scan\n"); } return OK; }