int odp_pktio_init_global(void) { char name[ODP_QUEUE_NAME_LEN]; pktio_entry_t *pktio_entry; queue_entry_t *queue_entry; odp_queue_t qid; int id; odp_shm_t shm; int pktio_if; shm = odp_shm_reserve("odp_pktio_entries", sizeof(pktio_table_t), sizeof(pktio_entry_t), 0); pktio_tbl = odp_shm_addr(shm); if (pktio_tbl == NULL) return -1; memset(pktio_tbl, 0, sizeof(pktio_table_t)); odp_spinlock_init(&pktio_tbl->lock); for (id = 1; id <= ODP_CONFIG_PKTIO_ENTRIES; ++id) { pktio_entry = &pktio_tbl->entries[id - 1]; odp_spinlock_init(&pktio_entry->s.lock); odp_spinlock_init(&pktio_entry->s.cls.lock); odp_spinlock_init(&pktio_entry->s.cls.l2_cos_table.lock); odp_spinlock_init(&pktio_entry->s.cls.l3_cos_table.lock); pktio_entry_ptr[id - 1] = pktio_entry; /* Create a default output queue for each pktio resource */ snprintf(name, sizeof(name), "%i-pktio_outq_default", (int)id); name[ODP_QUEUE_NAME_LEN - 1] = '\0'; qid = odp_queue_create(name, ODP_QUEUE_TYPE_PKTOUT, NULL); if (qid == ODP_QUEUE_INVALID) return -1; pktio_entry->s.outq_default = qid; queue_entry = queue_to_qentry(qid); queue_entry->s.pktout = _odp_cast_scalar(odp_pktio_t, id); } for (pktio_if = 0; pktio_if_ops[pktio_if]; ++pktio_if) if (pktio_if_ops[pktio_if]->init) if (pktio_if_ops[pktio_if]->init()) ODP_ERR("failed to initialized pktio type %d", pktio_if); return 0; }
int odp_pktio_init_global(void) { pktio_entry_t *pktio_entry; int id, i; int dev_num = sizeof(pktio_devs)/sizeof(pktio_devs[0]); pktio_tbl = odp_shm_reserve("odp_pktio_entries", sizeof(pktio_table_t), sizeof(pktio_entry_t)); if (pktio_tbl == NULL) return -1; memset(pktio_tbl, 0, sizeof(pktio_table_t)); for (id = 1; id <= ODP_CONFIG_PKTIO_ENTRIES; ++id) { pktio_entry = get_entry(id); odp_spinlock_init(&pktio_entry->s.lock); } /* Close all used RX channels */ for (i = 0; i < dev_num; i++) ti_em_osal_cppi_rx_channel_close(Cppi_CpDma_PASS_CPDMA, pktio_devs[i].rx_channel); return 0; }
int scheduler_suite_init(void) { odp_cpumask_t mask; odp_shm_t shm; odp_pool_t pool; test_globals_t *globals; thread_args_t *args; odp_pool_param_t params; odp_pool_param_init(¶ms); params.buf.size = BUF_SIZE; params.buf.align = 0; params.buf.num = MSG_POOL_SIZE; params.type = ODP_POOL_BUFFER; pool = odp_pool_create(MSG_POOL_NAME, ¶ms); if (pool == ODP_POOL_INVALID) { printf("Pool creation failed (msg).\n"); return -1; } shm = odp_shm_reserve(GLOBALS_SHM_NAME, sizeof(test_globals_t), ODP_CACHE_LINE_SIZE, 0); globals = odp_shm_addr(shm); if (!globals) { printf("Shared memory reserve failed (globals).\n"); return -1; } memset(globals, 0, sizeof(test_globals_t)); globals->num_workers = odp_cpumask_default_worker(&mask, 0); if (globals->num_workers > MAX_WORKERS) globals->num_workers = MAX_WORKERS; shm = odp_shm_reserve(SHM_THR_ARGS_NAME, sizeof(thread_args_t), ODP_CACHE_LINE_SIZE, 0); args = odp_shm_addr(shm); if (!args) { printf("Shared memory reserve failed (args).\n"); return -1; } memset(args, 0, sizeof(thread_args_t)); /* Barrier to sync test case execution */ odp_barrier_init(&globals->barrier, globals->num_workers); odp_ticketlock_init(&globals->lock); odp_spinlock_init(&globals->atomic_lock); if (create_queues() != 0) return -1; return 0; }
void odp_hisi_timer_subsystem_init(void) { unsigned core_id; for (core_id = 0; core_id < ODP_MAX_CORE; core_id++) { odp_spinlock_init(&priv_timer[core_id].list_lock); priv_timer[core_id].prev_core = core_id; } }
int odp_timer_init_global(void) { int i; memset(&odp_timer, 0, sizeof(timer_global_t)); for (i = 0; i < MAX_TICKS; i++) odp_spinlock_init(&odp_timer.timer[0].tick[i].lock); timer_init(); return 0; }
int odp_shm_init_global(void) { void *addr; addr = mmap(NULL, sizeof(odp_shm_table_t), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); if (addr == MAP_FAILED) return -1; odp_shm_tbl = addr; memset(odp_shm_tbl, 0, sizeof(odp_shm_table_t)); odp_spinlock_init(&odp_shm_tbl->lock); return 0; }
int odp_thread_init_global(void) { odp_shm_t shm; shm = odp_shm_reserve("odp_thread_globals", sizeof(thread_globals_t), ODP_CACHE_LINE_SIZE, 0); thread_globals = odp_shm_addr(shm); if (thread_globals == NULL) return -1; memset(thread_globals, 0, sizeof(thread_globals_t)); odp_spinlock_init(&thread_globals->lock); odp_thrmask_zero(&thread_globals->all); odp_thrmask_zero(&thread_globals->worker); odp_thrmask_zero(&thread_globals->control); return 0; }
int odp_pktio_init_global(void) { char name[ODP_QUEUE_NAME_LEN]; pktio_entry_t *pktio_entry; queue_entry_t *queue_entry; odp_queue_t qid; int id; pktio_tbl = odp_shm_reserve("odp_pktio_entries", sizeof(pktio_table_t), sizeof(pktio_entry_t)); if (pktio_tbl == NULL) return -1; memset(pktio_tbl, 0, sizeof(pktio_table_t)); for (id = 1; id <= ODP_CONFIG_PKTIO_ENTRIES; ++id) { pktio_entry = get_entry(id); odp_spinlock_init(&pktio_entry->s.lock); /* Create a default output queue for each pktio resource */ snprintf(name, sizeof(name), "%i-pktio_outq_default", (int)id); name[ODP_QUEUE_NAME_LEN-1] = '\0'; qid = odp_queue_create(name, ODP_QUEUE_TYPE_PKTOUT, NULL); if (qid == ODP_QUEUE_INVALID) return -1; pktio_entry->s.outq_default = qid; queue_entry = queue_to_qentry(qid); queue_entry->s.pktout = id; } return 0; }
int ofp_timer_init_global(int resolution_us, int min_us, int max_us, int tmo_count) { odp_queue_param_t param; odp_pool_param_t pool_params; odp_timer_pool_param_t timer_params; /* For later tuning. */ (void)tmo_count; HANDLE_ERROR(ofp_timer_alloc_shared_memory()); ofp_timer_shm_init(); /* Timout pool */ memset(&pool_params, 0, sizeof(pool_params)); pool_params.tmo.num = TIMER_NUM_TIMERS; pool_params.type = ODP_POOL_TIMEOUT; shm->pool = ofp_pool_create("TimeoutPool", &pool_params); if (shm->pool == ODP_POOL_INVALID) { OFP_ERR("odp_pool_create failed"); return -1; } /* Buffer pool */ memset(&pool_params, 0, sizeof(pool_params)); pool_params.buf.size = sizeof(struct ofp_timer_internal); pool_params.buf.align = 0; pool_params.buf.num = TIMER_NUM_TIMERS; pool_params.type = ODP_POOL_BUFFER; shm->buf_pool = ofp_pool_create("TimeoutBufferPool", &pool_params); if (shm->buf_pool == ODP_POOL_INVALID) { OFP_ERR("odp_pool_create failed"); return -1; } /* Timer pool */ memset(&timer_params, 0, sizeof(timer_params)); timer_params.res_ns = resolution_us*ODP_TIME_USEC_IN_NS; timer_params.min_tmo = min_us*ODP_TIME_USEC_IN_NS; timer_params.max_tmo = max_us*ODP_TIME_USEC_IN_NS; timer_params.num_timers = TIMER_NUM_TIMERS; timer_params.priv = 0; /* Shared */ timer_params.clk_src = ODP_CLOCK_CPU; shm->socket_timer_pool = odp_timer_pool_create("TmrPool", &timer_params); if (shm->socket_timer_pool == ODP_TIMER_POOL_INVALID) { OFP_ERR("odp_timer_pool_create"); return -1; } odp_timer_pool_start(); /* * Create a queue */ odp_queue_param_init(¶m); param.type = ODP_QUEUE_TYPE_SCHED; param.sched.prio = ODP_SCHED_PRIO_DEFAULT; param.sched.sync = ODP_SCHED_SYNC_PARALLEL; param.sched.group = ODP_SCHED_GROUP_ALL; shm->queue = odp_queue_create("TimerQueue", ¶m); if (shm->queue == ODP_QUEUE_INVALID) { OFP_ERR("odp_queue_create failed"); return -1; } odp_spinlock_init(&shm->lock); /* Start one second timeouts */ shm->timer_1s = ofp_timer_start(1000000UL, one_sec, NULL, 0); return 0; }
void odp_spinlock_recursive_init(odp_spinlock_recursive_t *rlock) { odp_spinlock_init(&rlock->lock); rlock->owner = NO_OWNER; rlock->cnt = 0; }
int odp_schedule_init_global(void) { odp_shm_t shm; odp_pool_t pool; int i, j; odp_pool_param_t params; shm = odp_shm_reserve("odp_scheduler", sizeof(sched_t), ODP_CACHE_LINE_SIZE, 0); sched = odp_shm_addr(shm); if (sched == NULL) { ODP_ERR("Schedule init: Shm reserve failed.\n"); return -1; } memset(sched, 0, sizeof(sched_t)); params.buf.size = sizeof(sched_cmd_t); params.buf.align = 0; params.buf.num = NUM_SCHED_CMD; params.type = ODP_POOL_BUFFER; pool = odp_pool_create("odp_sched_pool", ¶ms); if (pool == ODP_POOL_INVALID) { ODP_ERR("Schedule init: Pool create failed.\n"); return -1; } sched->pool = pool; sched->shm = shm; odp_spinlock_init(&sched->mask_lock); for (i = 0; i < ODP_CONFIG_SCHED_PRIOS; i++) { odp_queue_t queue; char name[] = "odp_priXX_YY"; name[7] = '0' + i / 10; name[8] = '0' + i - 10*(i / 10); for (j = 0; j < QUEUES_PER_PRIO; j++) { name[10] = '0' + j / 10; name[11] = '0' + j - 10*(j / 10); queue = odp_queue_create(name, ODP_QUEUE_TYPE_POLL, NULL); if (queue == ODP_QUEUE_INVALID) { ODP_ERR("Sched init: Queue create failed.\n"); return -1; } sched->pri_queue[i][j] = queue; sched->pri_mask[i] = 0; } } return 0; }