EVE 1.0
uip_backlog.c
1 #include <app_util_platform.h>
2 #include <nrf_nvic.h>
3 #include "lib/dlist.h"
4 #include "net/uip.h"
5 #include "net/uip_backlog.h"
6 
7 extern void arch_uip_backlog_cleanup(struct dlist_t *backlog);
8 extern void arch_uip_backlog_release(struct dlist_t *link);
9 extern void arch_uip_backlog_rexmit(struct dlist_t *link);
10 extern uint32_t arch_uip_backlog_seq(struct dlist_t *link);
11 
12 void uip_backlog_cleanup(struct dlist_t *backlog)
13 {
14  CRITICAL_REGION_ENTER();
15  while (!dlist_is_empty(backlog)) {
16  arch_uip_backlog_release(dlist_del(backlog->next));
17  }
18  arch_uip_backlog_cleanup(backlog);
19  CRITICAL_REGION_EXIT();
20 }
21 
22 void uip_backlog_release(struct dlist_t *backlog, uint32_t seq)
23 {
24  CRITICAL_REGION_ENTER();
25  while (!dlist_is_empty(backlog)) {
26  int diff = arch_uip_backlog_seq(backlog->next) - seq;
27  if (diff > 0)
28  break;
29  arch_uip_backlog_release(dlist_del(backlog->next));
30  }
31  CRITICAL_REGION_EXIT();
32 }
33 
34 void uip_backlog_rexmit(struct dlist_t *backlog)
35 {
36  CRITICAL_REGION_ENTER();
37  while (!dlist_is_empty(backlog)) {
38  arch_uip_backlog_rexmit(dlist_del(backlog->next));
39  }
40  CRITICAL_REGION_EXIT();
41 }
The code implements Dummy Headed Doubly Linked Circularlist (DHDLC) primitive.
static int dlist_is_empty(struct dlist_t *list)
Definition: dlist.h:125
struct dlist_t * backlog
Definition: usbnet.h:139
struct dlist_t * next
Definition: dlist.h:68
uint32_t seq
Definition: usbnet.h:140
Definition: dlist.h:66
static struct dlist_t * dlist_del(struct dlist_t *list)
Definition: dlist.h:100