Lines Matching refs:instance

461 static void ticker_by_next_slot_get(struct ticker_instance *instance,  argument
474 node = instance->nodes;
479 (*ticks_current != instance->ticks_current)) {
481 _ticker_id_head = instance->ticker_id_head;
482 *ticks_current = instance->ticks_current;
575 static uint8_t ticker_enqueue(struct ticker_instance *instance, uint8_t id)
585 node = &instance->nodes[0];
588 current = instance->ticker_id_head;
620 instance->ticker_id_head = id;
648 static uint8_t ticker_enqueue(struct ticker_instance *instance, uint8_t id)
661 node = &instance->nodes[0];
666 current = instance->ticker_id_head;
668 ticks_slot_previous = instance->ticks_slot_previous;
707 instance->ticker_id_head = id;
744 static uint32_t ticker_dequeue(struct ticker_instance *instance, uint8_t id)
756 node = &instance->nodes[0];
757 previous = instance->ticker_id_head;
780 instance->ticker_id_head = ticker_current->next;
1050 static void ticker_get_expire_info(struct ticker_instance *instance, uint8_t to_ticker_id,
1062 current_ticker_id = instance->ticker_id_head;
1063 current_node = &instance->nodes[instance->ticker_id_head];
1077 current_node = &instance->nodes[current_ticker_id];
1081 struct ticker_node *to_ticker = &instance->nodes[to_ticker_id];
1128 static uint32_t ticker_alloc_expire_info(struct ticker_instance *instance, uint8_t ticker_id)
1134 if (instance->expire_infos[i].ticker_id == TICKER_NULL) {
1135 struct ticker_node *ticker = &instance->nodes[ticker_id];
1137 instance->expire_infos[i].ticker_id = ticker_id;
1138 instance->expire_infos[i].outdated = true;
1139 instance->expire_infos[i].last = is_last;
1140 ticker->ext_data->other_expire_info = &instance->expire_infos[i];
1141 instance->expire_infos_outdated = true;
1144 } else if (instance->expire_infos[i].last && i < TICKER_EXPIRE_INFO_MAX - 1) {
1145 instance->expire_infos[i].last = 0;
1161 static void ticker_free_expire_info(struct ticker_instance *instance, uint8_t ticker_id)
1167 if (instance->expire_infos[index].ticker_id == ticker_id) {
1168 instance->expire_infos[index].ticker_id = TICKER_NULL;
1169 is_last = instance->expire_infos[index].last;
1170 instance->expire_infos[index].last = 0;
1178 if (instance->expire_infos[index].ticker_id != TICKER_NULL || index == 0) {
1179 instance->expire_infos[index].last = 1;
1199 static void ticker_mark_expire_info_outdated(struct ticker_instance *instance, uint8_t ticker_id)
1202 if (instance->expire_infos[i].ticker_id != TICKER_NULL) {
1203 uint8_t current_id = instance->expire_infos[i].ticker_id;
1204 struct ticker_node *ticker = &instance->nodes[current_id];
1208 instance->expire_infos[i].outdated = true;
1209 instance->expire_infos_outdated = true;
1212 if (instance->expire_infos[i].last) {
1229 static void ticker_job_update_expire_infos(struct ticker_instance *instance)
1232 struct ticker_expire_info_internal *info = &instance->expire_infos[i];
1235 struct ticker_node *ticker = &instance->nodes[info->ticker_id];
1237 ticker_get_expire_info(instance, ticker->ext_data->expire_info_id,
1247 instance->expire_infos_outdated = false;
1267 struct ticker_instance *instance = param;
1275 instance->worker_trigger = 1U;
1276 if (instance->job_guard) {
1281 if (instance->ticker_id_head == TICKER_NULL) {
1282 instance->worker_trigger = 0U;
1290 instance->ticks_current);
1296 ticker_id_head = instance->ticker_id_head;
1305 if (instance->ticks_slot_previous > ticks_elapsed) {
1314 node = &instance->nodes[0];
1359 (instance->ticks_slot_previous > ticks_expired) ||
1430 ticks_at_expire = (instance->ticks_current +
1510 if (instance->ticks_elapsed_first == instance->ticks_elapsed_last) {
1511 ticker_next_elapsed(&instance->ticks_elapsed_last);
1513 instance->ticks_elapsed[instance->ticks_elapsed_last] = ticks_expired;
1515 instance->worker_trigger = 0U;
1518 instance->sched_cb(TICKER_CALL_ID_WORKER, TICKER_CALL_ID_JOB, 1,
1519 instance);
1693 static inline uint32_t ticker_job_node_update(struct ticker_instance *instance,
1792 status = ticker_alloc_expire_info(instance, user_op->id);
1798 ticker_free_expire_info(instance, user_op->id);
1804 ticker_mark_expire_info_outdated(instance, user_op->id);
1808 ARG_UNUSED(instance);
1832 static inline void ticker_job_node_manage(struct ticker_instance *instance,
1843 ticker->ticks_to_expire = ticker_dequeue(instance, user_op->id);
1846 ticker_job_node_update(instance, ticker, user_op, ticks_now,
1847 instance->ticks_current, ticks_elapsed,
1851 ticker_mark_expire_info_outdated(instance, user_op->id);
1862 ticker->ticks_to_expire = ticker_dequeue(instance,
1867 ticker_free_expire_info(instance, user_op->id);
1871 ticker_mark_expire_info_outdated(instance, user_op->id);
1880 if (instance->ticker_id_slot_previous == user_op->id) {
1886 instance->ticker_id_slot_previous = TICKER_NULL;
1897 ticks_current = instance->ticks_current;
1915 if (instance->ticks_slot_previous > ticks_used) {
1916 instance->ticks_slot_previous = ticks_used;
1944 static inline uint8_t ticker_job_list_manage(struct ticker_instance *instance,
1955 node = &instance->nodes[0];
1956 users = &instance->users[0];
1957 count_user = instance->count_user;
2036 ticker_job_node_manage(instance, ticker,
2046 instance->sched_cb(TICKER_CALL_ID_JOB,
2048 instance);
2077 static inline void ticker_job_worker_bh(struct ticker_instance *instance,
2089 node = &instance->nodes[0];
2091 while (instance->ticker_id_head != TICKER_NULL) {
2099 id_expired = instance->ticker_id_head;
2126 if (instance->ticks_slot_previous > ticks_to_expire) {
2127 instance->ticks_slot_previous -= ticks_to_expire;
2129 instance->ticker_id_slot_previous = TICKER_NULL;
2130 instance->ticks_slot_previous = 0U;
2146 instance->ticker_id_slot_previous = id_expired;
2147 instance->ticks_slot_previous = ticker_ticks_slot;
2155 ticker_mark_expire_info_outdated(instance, instance->ticker_id_head);
2159 instance->ticker_id_head = ticker->next;
2242 ticks_to_expire_prep(ticker, instance->ticks_current,
2277 ticks_to_expire_prep(ticker, instance->ticks_current,
2321 static inline uint32_t ticker_job_op_start(struct ticker_instance *instance,
2350 status = ticker_alloc_expire_info(instance, user_op->id);
2357 ticker_mark_expire_info_outdated(instance, user_op->id);
2359 ARG_UNUSED(instance);
2362 ARG_UNUSED(instance);
2412 static inline uint8_t ticker_job_insert(struct ticker_instance *instance,
2423 (void)ticker_enqueue(instance, id_insert);
2448 static uint8_t ticker_job_reschedule_in_window(struct ticker_instance *instance)
2454 nodes = &instance->nodes[0];
2477 ticker_id_resched = instance->ticker_id_head;
2509 window_start_ticks = instance->ticks_slot_previous +
2709 instance->ticker_id_head = ticker_resched->next;
2725 ticker_mark_expire_info_outdated(instance, ticker_id_resched);
2753 static inline uint8_t ticker_job_insert(struct ticker_instance *instance,
2758 struct ticker_node *node = &instance->nodes[0];
2775 (id_collide = ticker_enqueue(instance, id_insert))) {
2800 ticker_dequeue(instance, id_collide);
2865 static inline void ticker_job_list_insert(struct ticker_instance *instance,
2872 node = &instance->nodes[0];
2873 users = &instance->users[0];
2874 count_user = instance->count_user;
2936 status = ticker_job_op_start(instance, ticker, user_op,
2937 instance->ticks_current);
2942 status = ticker_job_insert(instance, id_insert, ticker,
2983 static inline void ticker_job_op_inquire(struct ticker_instance *instance,
2992 ticker_by_next_slot_get(instance,
3029 if (uop->id < instance->count_node) {
3030 struct ticker_node *node = instance->nodes;
3069 static inline void ticker_job_list_inquire(struct ticker_instance *instance)
3074 users = &instance->users[0];
3075 count_user = instance->count_user;
3086 ticker_job_op_inquire(instance, &user_op[user->first]);
3115 ticker_job_compare_update(struct ticker_instance *instance,
3125 if (instance->ticker_id_head == TICKER_NULL) {
3128 instance->ticks_slot_previous = 0U;
3135 instance->ticks_current = cntr_cnt_get();
3159 instance->ticks_current = ticks_current;
3164 ticker = &instance->nodes[instance->ticker_id_head];
3187 cc = instance->ticks_current;
3197 instance->trigger_set_cb(cc);
3224 struct ticker_instance *instance = param;
3238 if (instance->worker_trigger) {
3244 if (instance->job_guard) {
3245 instance->sched_cb(TICKER_CALL_ID_JOB, TICKER_CALL_ID_JOB, 1,
3246 instance);
3249 instance->job_guard = 1U;
3252 ticks_previous = instance->ticks_current;
3255 if (instance->ticks_elapsed_first != instance->ticks_elapsed_last) {
3256 ticker_next_elapsed(&instance->ticks_elapsed_first);
3259 instance->ticks_elapsed[instance->ticks_elapsed_first];
3261 instance->ticks_current += ticks_elapsed;
3262 instance->ticks_current &= HAL_TICKER_CNTR_MASK;
3280 ticker_id_old_head = instance->ticker_id_head;
3299 instance->ticks_current = ticks_now;
3305 pending = ticker_job_list_manage(instance, ticks_now, ticks_elapsed,
3309 if (instance->ticker_id_head != ticker_id_old_head) {
3315 ticker_job_worker_bh(instance, ticks_now, ticks_previous,
3319 if (instance->ticker_id_head != ticker_id_old_head) {
3324 ticker_job_list_insert(instance, insert_head);
3329 if (ticker_job_reschedule_in_window(instance)) {
3335 ticker_job_list_insert(instance, insert_head);
3339 if (instance->ticker_id_head != ticker_id_old_head) {
3349 ticker_job_list_inquire(instance);
3362 if (instance->expire_infos_outdated) {
3363 ticker_job_update_expire_infos(instance);
3369 compare_trigger = ticker_job_compare_update(instance,
3376 instance->job_guard = 0U;
3380 if (instance->worker_trigger || compare_trigger) {
3381 instance->sched_cb(TICKER_CALL_ID_JOB, TICKER_CALL_ID_WORKER, 1,
3382 instance);
3420 struct ticker_instance *instance = &_instance[instance_index];
3428 instance->count_node = count_node;
3429 instance->nodes = node;
3435 instance->nodes[count_node].priority = 0;
3442 instance->count_user = count_user;
3443 instance->users = user;
3447 users = &instance->users[0];
3458 instance->caller_id_get_cb = caller_id_get_cb;
3459 instance->sched_cb = sched_cb;
3460 instance->trigger_set_cb = trigger_set_cb;
3462 instance->ticker_id_head = TICKER_NULL;
3465 instance->ticks_current = 0U;
3468 instance->ticks_current = cntr_cnt_get();
3470 instance->ticks_elapsed_first = 0U;
3471 instance->ticks_elapsed_last = 0U;
3474 instance->ticker_id_slot_previous = TICKER_NULL;
3475 instance->ticks_slot_previous = 0U;
3480 instance->expire_infos[i].ticker_id = TICKER_NULL;
3481 instance->expire_infos[i].last = 1;
3495 struct ticker_instance *instance;
3501 instance = &_instance[instance_index];
3503 if (instance->ticker_id_head != TICKER_NULL) {
3507 instance->count_node = 0U;
3534 struct ticker_instance *instance;
3538 instance = &_instance[instance_index];
3539 if (instance->sched_cb) {
3540 instance->sched_cb(TICKER_CALL_ID_TRIGGER,
3541 TICKER_CALL_ID_WORKER, 1, instance);
3672 struct ticker_instance *instance = &_instance[instance_index];
3677 user = &instance->users[user_id];
3722 instance->sched_cb(instance->caller_id_get_cb(user_id),
3723 TICKER_CALL_ID_JOB, 0, instance);
3801 struct ticker_instance *instance = &_instance[instance_index];
3806 user = &instance->users[user_id];
3844 instance->sched_cb(instance->caller_id_get_cb(user_id),
3845 TICKER_CALL_ID_JOB, 0, instance);
3874 struct ticker_instance *instance = &_instance[instance_index];
3879 user = &instance->users[user_id];
3902 instance->sched_cb(instance->caller_id_get_cb(user_id),
3903 TICKER_CALL_ID_JOB, 0, instance);
3929 struct ticker_instance *instance = &_instance[instance_index];
3934 user = &instance->users[user_id];
3956 instance->sched_cb(instance->caller_id_get_cb(user_id),
3957 TICKER_CALL_ID_JOB, 0, instance);
3985 struct ticker_instance *instance = &_instance[instance_index];
3990 user = &instance->users[user_id];
4013 instance->sched_cb(instance->caller_id_get_cb(user_id),
4014 TICKER_CALL_ID_JOB, 0, instance);
4069 struct ticker_instance *instance = &_instance[instance_index];
4074 user = &instance->users[user_id];
4109 instance->sched_cb(instance->caller_id_get_cb(user_id),
4110 TICKER_CALL_ID_JOB, 0, instance);
4138 struct ticker_instance *instance = &_instance[instance_index];
4143 user = &instance->users[user_id];
4165 instance->sched_cb(instance->caller_id_get_cb(user_id),
4166 TICKER_CALL_ID_JOB, 0, instance);
4200 struct ticker_instance *instance = &_instance[instance_index];
4205 user = &instance->users[user_id];
4228 instance->sched_cb(instance->caller_id_get_cb(user_id),
4229 TICKER_CALL_ID_JOB, 0, instance);
4246 struct ticker_instance *instance = &_instance[instance_index];
4248 instance->sched_cb(instance->caller_id_get_cb(user_id),
4249 TICKER_CALL_ID_JOB, 0, instance);