OpenCores
URL https://opencores.org/ocsvn/funbase_ip_library/funbase_ip_library/trunk

Subversion Repositories funbase_ip_library

[/] [funbase_ip_library/] [trunk/] [TUT/] [ip.hwp.communication/] [n2h2/] [1.0/] [tb/] [system/] [src_cpu1/] [n2h_isr_fifo.c] - Blame information for rev 145

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 145 lanttu
/*
2
 *
3
 *   Fifo for saving interrupt information, implementation
4
 *
5
 *   Lasse Lehtonen
6
 *
7
 */
8
 
9
 
10
 
11
#include "n2h_isr_fifo.h"
12
 
13
#include <sys/alt_irq.h>
14
#include <stdlib.h>
15
 
16
 
17
// Store item to last place, called only from ISR
18
void n2h_isr_fifo_push(N2H_isr_fifo* fifo, N2H_isr_info* item)
19
{
20
  N2H_isr_info* temp = fifo->root;
21
 
22
  item->next = NULL;
23
 
24
  while(temp != NULL && temp->next != NULL)
25
    {
26
      temp = temp->next;
27
    }
28
 
29
  if(fifo->size < 1)
30
    {
31
      fifo->root = item;
32
    }
33
  else
34
    {
35
      temp->next = item;
36
    }
37
 
38
  fifo->size++;
39
}
40
 
41
// Returns the first item, remember to free its memory!
42
N2H_isr_info* n2h_isr_fifo_pop (N2H_isr_fifo* fifo)
43
{
44
  N2H_isr_info* temp;
45
 
46
  if(fifo->size < 1)
47
    {
48
      return NULL;
49
    }
50
 
51
  // Prevent ISR from messing with fifo
52
  alt_irq_context cntx = alt_irq_disable_all();
53
  {
54
    temp = fifo->root;
55
    fifo->root = temp->next;
56
    fifo->size--;
57
  }
58
  alt_irq_enable_all(cntx);
59
 
60
  temp->next = NULL;
61
  return temp;
62
}
63
 
64
int n2h_isr_fifo_size(N2H_isr_fifo* fifo)
65
{
66
  return fifo->size;
67
}
68
 
69
N2H_isr_fifo* n2h_isr_fifo_create()
70
{
71
  //Allocate space for new and initialize data
72
  N2H_isr_fifo* fifo = (N2H_isr_fifo*) malloc(sizeof(N2H_isr_fifo));
73
  fifo->root = NULL;
74
  fifo->size = 0;
75
  return fifo;
76
}
77
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.