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/] [hibi_pe_dma/] [1.0/] [tb/] [system/] [scr_cpu0/] [hpd_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 "hpd_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 hpd_isr_fifo_push(Hpd_isr_fifo* fifo, Hpd_isr_info* item)
19
{
20
  Hpd_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
Hpd_isr_info* hpd_isr_fifo_pop (Hpd_isr_fifo* fifo)
43
{
44
  Hpd_isr_info* temp;
45
 
46
  // Prevent ISR from messing with fifo
47
  alt_irq_context cntx = alt_irq_disable_all();
48
  {
49
    if(fifo->size < 1)
50
      {
51
        return NULL;
52
      }
53
    temp = fifo->root;
54
    fifo->root = temp->next;
55
    fifo->size--;
56
    temp->next = NULL;
57
  }
58
  alt_irq_enable_all(cntx);
59
 
60
  return temp;
61
}
62
 
63
int hpd_isr_fifo_size(Hpd_isr_fifo* fifo)
64
{
65
  return fifo->size;
66
}
67
 
68
Hpd_isr_fifo* hpd_isr_fifo_create()
69
{
70
  //Allocate space for new and initialize data
71
  Hpd_isr_fifo* fifo = (Hpd_isr_fifo*) malloc(sizeof(Hpd_isr_fifo));
72
  fifo->root = NULL;
73
  fifo->size = 0;
74
  return fifo;
75
}
76
 

powered by: WebSVN 2.1.0

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