Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #4
0
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;	
}