/** * Get free object handlers */ int uffs_GetFreeObjectHandlers(void) { int count = 0; uffs_GlobalFsLockLock(); count = uffs_PoolGetFreeCount(&_object_pool); uffs_GlobalFsLockUnlock(); return count; }
/** st [<mount>] */ static int cmd_st(int argc, char *argv[]) { uffs_Device *dev; const char *mount = "/"; uffs_FlashStat *s; TreeNode *node; if (argc > 1) { mount = argv[1]; } dev = uffs_GetDeviceFromMountPoint(mount); if (dev == NULL) { MSGLN("Can't get device from mount point %s", mount); return -1; } s = &(dev->st); MSG("----------- basic info -----------" TENDSTR); MSG("TreeNode size: %d" TENDSTR, sizeof(TreeNode)); MSG("TagStore size: %d" TENDSTR, sizeof(struct uffs_TagStoreSt)); MSG("MaxCachedBlockInfo: %d" TENDSTR, dev->cfg.bc_caches); MSG("MaxPageBuffers: %d" TENDSTR, dev->cfg.page_buffers); MSG("MaxDirtyPagesPerBlock: %d" TENDSTR, dev->cfg.dirty_pages); MSG("MaxPathLength: %d" TENDSTR, MAX_PATH_LENGTH); MSG("MaxObjectHandles: %d" TENDSTR, MAX_OBJECT_HANDLE); MSG("FreeObjectHandles: %d" TENDSTR, uffs_GetFreeObjectHandlers()); MSG("MaxDirHandles: %d" TENDSTR, MAX_DIR_HANDLE); MSG("FreeDirHandles: %d" TENDSTR, uffs_PoolGetFreeCount(uffs_DirEntryBufGetPool())); MSG("----------- statistics for '%s' -----------" TENDSTR, mount); MSG("Device Ref: %d" TENDSTR, dev->ref_count); MSG("Block Erased: %d" TENDSTR, s->block_erase_count); MSG("Write Page: %d" TENDSTR, s->page_write_count); MSG("Write Spare: %d" TENDSTR, s->spare_write_count); MSG("Read Page: %d" TENDSTR, s->page_read_count - s->page_header_read_count); MSG("Read Header: %d" TENDSTR, s->page_header_read_count); MSG("Read Spare: %d" TENDSTR, s->spare_read_count); MSG("I/O Read: %lu" TENDSTR, s->io_read); MSG("I/O Write: %lu" TENDSTR, s->io_write); MSG("--------- partition info for '%s' ---------" TENDSTR, mount); MSG("Space total: %d" TENDSTR, uffs_GetDeviceTotal(dev)); MSG("Space used: %d" TENDSTR, uffs_GetDeviceUsed(dev)); MSG("Space free: %d" TENDSTR, uffs_GetDeviceFree(dev)); MSG("Page Size: %d" TENDSTR, dev->attr->page_data_size); MSG("Spare Size: %d" TENDSTR, dev->attr->spare_size); MSG("Pages Per Block: %d" TENDSTR, dev->attr->pages_per_block); MSG("Block size: %d" TENDSTR, dev->attr->page_data_size * dev->attr->pages_per_block); MSG("Total blocks: %d of %d" TENDSTR, (dev->par.end - dev->par.start + 1), dev->attr->total_blocks); if (dev->tree.bad) { MSG("Bad blocks: "); node = dev->tree.bad; while(node) { MSG("%d, ", node->u.list.block); node = node->u.list.next; } MSG(TENDSTR); } uffs_PutDevice(dev); return 0; }