summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/core/timer.h2
-rw-r--r--src/fsm.c3
-rw-r--r--src/gb/gprs_bssgp.c3
-rw-r--r--src/gb/gprs_ns.c3
-rw-r--r--src/gsm/gsm0411_smc.c3
-rw-r--r--src/gsm/gsm0411_smr.c3
-rw-r--r--src/gsm/lapd_core.c6
-rw-r--r--src/rate_ctr.c2
-rw-r--r--src/stats.c2
-rw-r--r--src/timer.c12
-rw-r--r--tests/timer/timer_test.c9
11 files changed, 26 insertions, 22 deletions
diff --git a/include/osmocom/core/timer.h b/include/osmocom/core/timer.h
index dbda13f2..48e7d8da 100644
--- a/include/osmocom/core/timer.h
+++ b/include/osmocom/core/timer.h
@@ -65,6 +65,8 @@ struct osmo_timer_list {
* timer management
*/
+void osmo_timer_setup(struct osmo_timer_list *timer, void (*cb)(void *data), void *data);
+
void osmo_timer_add(struct osmo_timer_list *timer);
void osmo_timer_schedule(struct osmo_timer_list *timer, int seconds, int microseconds);
diff --git a/src/fsm.c b/src/fsm.c
index 9e6ef156..5e744827 100644
--- a/src/fsm.c
+++ b/src/fsm.c
@@ -206,8 +206,7 @@ struct osmo_fsm_inst *osmo_fsm_inst_alloc(struct osmo_fsm *fsm, void *ctx, void
fi->fsm = fsm;
fi->priv = priv;
fi->log_level = log_level;
- fi->timer.data = fi;
- fi->timer.cb = fsm_tmr_cb;
+ osmo_timer_setup(&fi->timer, fsm_tmr_cb, fi);
if (id)
fi->id = talloc_strdup(fi, id);
diff --git a/src/gb/gprs_bssgp.c b/src/gb/gprs_bssgp.c
index dba4d5ca..fdbf7884 100644
--- a/src/gb/gprs_bssgp.c
+++ b/src/gb/gprs_bssgp.c
@@ -640,8 +640,7 @@ static int fc_queue_timer_cfg(struct bssgp_flow_control *fc)
msecs = (fcqe->llc_pdu_len * 1000) / fc->bucket_leak_rate;
/* FIXME: add that time to fc->time_last_pdu and subtract it from
* current time */
- fc->timer.data = fc;
- fc->timer.cb = &fc_timer_cb;
+ osmo_timer_setup(&fc->timer, fc_timer_cb, fc);
osmo_timer_schedule(&fc->timer, msecs / 1000, (msecs % 1000) * 1000);
} else {
/* If the PCU is telling us to not send any more data at all,
diff --git a/src/gb/gprs_ns.c b/src/gb/gprs_ns.c
index 7b497c2e..9a2a114f 100644
--- a/src/gb/gprs_ns.c
+++ b/src/gb/gprs_ns.c
@@ -238,8 +238,7 @@ struct gprs_nsvc *gprs_nsvc_create(struct gprs_ns_inst *nsi, uint16_t nsvci)
/* before RESET procedure: BLOCKED and DEAD */
nsvc->state = NSE_S_BLOCKED;
nsvc->nsi = nsi;
- nsvc->timer.cb = gprs_ns_timer_cb;
- nsvc->timer.data = nsvc;
+ osmo_timer_setup(&nsvc->timer, gprs_ns_timer_cb, nsvc);
nsvc->ctrg = rate_ctr_group_alloc(nsvc, &nsvc_ctrg_desc, nsvci);
nsvc->statg = osmo_stat_item_group_alloc(nsvc, &nsvc_statg_desc, nsvci);
diff --git a/src/gsm/gsm0411_smc.c b/src/gsm/gsm0411_smc.c
index c44423d4..4c083659 100644
--- a/src/gsm/gsm0411_smc.c
+++ b/src/gsm/gsm0411_smc.c
@@ -184,8 +184,7 @@ static int gsm411_mmsms_send_msg(struct gsm411_smc_inst *inst)
/* 5.2.3.1.2: enter MO-wait for CP-ACK */
/* 5.2.3.2.3: enter MT-wait for CP-ACK */
new_cp_state(inst, GSM411_CPS_WAIT_CP_ACK);
- inst->cp_timer.data = inst;
- inst->cp_timer.cb = cp_timer_expired;
+ osmo_timer_setup(&inst->cp_timer, cp_timer_expired, inst);
/* 5.3.2.1: Set Timer TC1A */
osmo_timer_schedule(&inst->cp_timer, inst->cp_tc1, 0);
/* clone cp_msg */
diff --git a/src/gsm/gsm0411_smr.c b/src/gsm/gsm0411_smr.c
index a1ee9804..6d7fb8b5 100644
--- a/src/gsm/gsm0411_smr.c
+++ b/src/gsm/gsm0411_smr.c
@@ -77,8 +77,7 @@ void gsm411_smr_init(struct gsm411_smr_inst *inst, uint64_t id, int network,
inst->rp_state = GSM411_RPS_IDLE;
inst->rl_recv = rl_recv;
inst->mn_send = mn_send;
- inst->rp_timer.data = inst;
- inst->rp_timer.cb = rp_timer_expired;
+ osmo_timer_setup(&inst->rp_timer, rp_timer_expired, inst);
LOGP(DLSMS, LOGL_INFO,
SMR_LOG_STR "instance created for %s.\n",
diff --git a/src/gsm/lapd_core.c b/src/gsm/lapd_core.c
index e0bbcabf..c81b2a05 100644
--- a/src/gsm/lapd_core.c
+++ b/src/gsm/lapd_core.c
@@ -267,12 +267,10 @@ void lapd_dl_init(struct lapd_datalink *dl, uint8_t k, uint8_t v_range,
dl->n200 = 3;
dl->t200_sec = 1;
dl->t200_usec = 0;
- dl->t200.data = dl;
- dl->t200.cb = &lapd_t200_cb;
+ osmo_timer_setup(&dl->t200, lapd_t200_cb, dl);
dl->t203_sec = 10;
dl->t203_usec = 0;
- dl->t203.data = dl;
- dl->t203.cb = &lapd_t203_cb;
+ osmo_timer_setup(&dl->t203, lapd_t203_cb, dl);
dl->maxf = maxf;
if (k > v_range - 1)
k = v_range - 1;
diff --git a/src/rate_ctr.c b/src/rate_ctr.c
index f995f3fd..3ccd065f 100644
--- a/src/rate_ctr.c
+++ b/src/rate_ctr.c
@@ -147,7 +147,7 @@ static void rate_ctr_timer_cb(void *data)
int rate_ctr_init(void *tall_ctx)
{
tall_rate_ctr_ctx = tall_ctx;
- rate_ctr_timer.cb = rate_ctr_timer_cb;
+ osmo_timer_setup(&rate_ctr_timer, rate_ctr_timer_cb, NULL);
osmo_timer_schedule(&rate_ctr_timer, 1, 0);
return 0;
diff --git a/src/stats.c b/src/stats.c
index 1efc8cd8..dee5d81a 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -107,7 +107,7 @@ static int start_timer()
if (!is_initialised)
return -ESRCH;
- osmo_stats_timer.cb = osmo_stats_timer_cb;
+ osmo_timer_setup(&osmo_stats_timer, osmo_stats_timer_cb, NULL);
osmo_timer_schedule(&osmo_stats_timer, 0, 1);
return 0;
diff --git a/src/timer.c b/src/timer.c
index cc6d5ccd..47d1786b 100644
--- a/src/timer.c
+++ b/src/timer.c
@@ -65,6 +65,18 @@ static void __add_timer(struct osmo_timer_list *timer)
rb_insert_color(&timer->node, &timer_root);
}
+/*! \brief set up timer callback and data
+ * \param[in] timer the timer that should be added
+ * \param[in] callback function to be called when timer expires
+ * \param[in] pointer to data that passed to the callback function
+ */
+void osmo_timer_setup(struct osmo_timer_list *timer, void (*cb)(void *data),
+ void *data)
+{
+ timer->cb = cb;
+ timer->data = data;
+}
+
/*! \brief add a new timer to the timer management
* \param[in] timer the timer that should be added
*/
diff --git a/tests/timer/timer_test.c b/tests/timer/timer_test.c
index 066dc72d..d2b0204d 100644
--- a/tests/timer/timer_test.c
+++ b/tests/timer/timer_test.c
@@ -39,10 +39,7 @@ static void main_timer_fired(void *data);
static void secondary_timer_fired(void *data);
static unsigned int main_timer_step = 0;
-static struct osmo_timer_list main_timer = {
- .cb = main_timer_fired,
- .data = &main_timer_step,
-};
+static struct osmo_timer_list main_timer;
static LLIST_HEAD(timer_test_list);
@@ -92,8 +89,7 @@ static void main_timer_fired(void *data)
return;
}
osmo_gettimeofday(&v->start, NULL);
- v->timer.cb = secondary_timer_fired;
- v->timer.data = v;
+ osmo_timer_setup(&v->timer, secondary_timer_fired, v);
unsigned int seconds = (i & 0x7) + 1;
v->stop.tv_sec = v->start.tv_sec + seconds;
v->stop.tv_usec = v->start.tv_usec;
@@ -195,6 +191,7 @@ int main(int argc, char *argv[])
" %d steps of %d msecs each\n",
timer_nsteps, steps, TIME_BETWEEN_TIMER_CHECKS / 1000);
+ osmo_timer_setup(&main_timer, main_timer_fired, &main_timer_step);
osmo_timer_schedule(&main_timer, 1, 0);
#ifdef HAVE_SYS_SELECT_H