ewx_hash_table_t *ewx_hash_table_init(char *name, int bucket_num, int bucket_size, int item_size, int auto_lock) { int i; bucket_size = align(bucket_size, 128); if ((bucket_size != 128) && (bucket_size != 256)) { return NULL; } ewx_hash_table_t *ptr = cvmx_bootmem_alloc_named((uint64_t)(bucket_num) * bucket_size + sizeof(ewx_hash_table_t), 128, name); if (ptr == NULL) { return NULL; } memset(ptr, 0, (uint64_t)bucket_num * bucket_size + sizeof(ewx_hash_table_t)); strcpy(ptr->name, name); ptr->bucket_num = bucket_num; ptr->bucket_size = bucket_size; ptr->item_size = item_size; ptr->item_num = (bucket_size - sizeof(ewx_bucket_hd_t))/item_size; ptr->base_ptr = (void *)ptr + sizeof(ewx_hash_table_t); if (auto_lock) { char lock_name[30]; strcpy(lock_name, name); strcat(lock_name, LOCK_SUFFIX); ptr->lock = cvmx_bootmem_alloc_named(sizeof(cvmx_spinlock_t) * (uint64_t)bucket_num, 128, lock_name); if (ptr->lock == NULL) { /*释放hash表空间,返回NULL*/ cvmx_bootmem_free_named(name); return NULL; } for (i=0; i<bucket_num; i++) { cvmx_spinlock_init(&ptr->lock[i]); } } else { ptr->lock = NULL; } return ptr; }
int oct_sched_init(void) { sched_tbl = (oct_sched_t *)cvmx_bootmem_alloc_named(sizeof(oct_sched_t) , CACHE_LINE_SIZE, OCT_SCHED_TABLE_NAME); if(NULL == sched_tbl) { printf("oct_sched_init no mem\n"); return SEC_NO; } memset((void *)sched_tbl, 0, sizeof(oct_sched_t)); return SEC_OK; }
int oct_rxtx_init(void) { int i; void *ptr = cvmx_bootmem_alloc_named(sizeof(oct_softx_stat_t) * CPU_HW_RUNNING_MAX, CACHE_LINE_SIZE, OCT_TX_DESC_NAME); if(NULL == ptr) { return SEC_NO; } memset(ptr, 0, sizeof(oct_softx_stat_t) * CPU_HW_RUNNING_MAX); for( i = 0; i < CPU_HW_RUNNING_MAX; i++ ) { oct_stx[i] = (oct_softx_stat_t *)((uint8_t *)ptr + sizeof(oct_softx_stat_t) * i); } return SEC_OK; }
int sos_mem_init(void) { void *ptr = (void *)cvmx_bootmem_alloc_named(SOS_MEM_POOL_SIZE , 128, SOS_MEM_POOL_NAME); if(NULL == ptr) return SEC_NO; memset(ptr, 0, SOS_MEM_POOL_SIZE); sos_mem_pool = (sos_mem_pool_region_t *)ptr; sos_mem_pool->start = ptr; sos_mem_pool->total_size = SOS_MEM_POOL_SIZE; sos_mem_pool->current_start = (uint8_t *)ptr + SOS_MEM_POOL_REGION_SIZE; sos_mem_pool->current_size = sos_mem_pool->total_size - SOS_MEM_POOL_REGION_SIZE; if(SEC_OK != sos_mem_block_init(sos_mem_pool)) return SEC_NO; return SEC_OK; }