| 10 | static pc_timer_t *timer_head = NULL; |
| 11 | |
| 12 | void timer_enable(pc_timer_t *timer) |
| 13 | { |
| 14 | pc_timer_t *timer_node = timer_head; |
| 15 | |
| 16 | // pclog("timer->enable %p %i\n", timer, timer->enabled); |
| 17 | if (timer->enabled) |
| 18 | timer_disable(timer); |
| 19 | |
| 20 | if (timer->next || timer->prev) |
| 21 | fatal("timer_enable - timer->next\n"); |
| 22 | |
| 23 | timer->enabled = 1; |
| 24 | |
| 25 | /*List currently empty - add to head*/ |
| 26 | if (!timer_head) |
| 27 | { |
| 28 | timer_head = timer; |
| 29 | timer->next = timer->prev = NULL; |
| 30 | timer_target = timer_head->ts_integer; |
| 31 | return; |
| 32 | } |
| 33 | |
| 34 | timer_node = timer_head; |
| 35 | |
| 36 | while (1) |
| 37 | { |
| 38 | /*Timer expires before timer_node. Add to list in front of timer_node*/ |
| 39 | if (TIMER_LESS_THAN(timer, timer_node)) |
| 40 | { |
| 41 | timer->next = timer_node; |
| 42 | timer->prev = timer_node->prev; |
| 43 | timer_node->prev = timer; |
| 44 | if (timer->prev) |
| 45 | timer->prev->next = timer; |
| 46 | else |
| 47 | { |
| 48 | timer_head = timer; |
| 49 | timer_target = timer_head->ts_integer; |
| 50 | } |
| 51 | return; |
| 52 | } |
| 53 | |
| 54 | /*timer_node is last in the list. Add timer to end of list*/ |
| 55 | if (!timer_node->next) |
| 56 | { |
| 57 | timer_node->next = timer; |
| 58 | timer->prev = timer_node; |
| 59 | return; |
| 60 | } |
| 61 | |
| 62 | timer_node = timer_node->next; |
| 63 | } |
| 64 | } |
| 65 | void timer_disable(pc_timer_t *timer) |
| 66 | { |
| 67 | // pclog("timer->disable %p\n", timer); |
no test coverage detected