summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/dmv177/css_iface/css_iface.c
blob: f46782f2b0987c52ac1885a8cb34251c83eb4c96 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <Css.h>

rtems_unsigned32 Css_Id(
  rtems_vector_number vector        /* vector number      */
)
{
  rtems_unsigned32 id;

  switch ( vector ) {
    case DMV170_DUART_IRQ:
    case DMV170_ETHERNET_IRQ:
    case DMV170_SCSI_IRQ:
    case DMV170_SCC_IRQ:
      id = CSS_DARF_INT;
      break;

    case DMV170_MEZZANINE_IRQ:
      id = CSS_MAXPACK_INT;
      break;

    case DMV170_TICK_IRQ:
      id = CSS_TICK_INT;
      break;

    case DMV170_LOCATION_MON_IRQ:
      id = CSS_LM_INT;
      break;

    case DMV170_SCV64_IRQ:
      id = CSS_SCV_VME_INT;
      break;

    case DMV170_RTC_IRQ:
      id = CSS_RTC_INT;
      break;
  }

  return id;
}

rtems_vector_number Vector_id(
  rtems_unsigned32 id
)
{
  rtems_vector_number vector;

  switch ( id ) {
    case CSS_ACFAIL_INT:
      vector = DMV170_ACFAIL_IRQ;
      break;
    case CSS_SYSFAIL_INT:
      vector = DMV170_SYSFAIL_IRQ;
      break;
    case CSS_WATCHDOG_INT:
      vector = DMV170_WATCHDOG_IRQ;
      break;
    case CSS_BI_INT:
      vector = DMV170_BI_IRQ;
      break;
    case CSS_LM_INT:
      vector = DMV170_LOCATION_MON_IRQ;
      break;
    case CSS_TICK_INT:
      vector = DMV170_TICK_IRQ;
      break;
    case CSS_DARF_INT:
      vector = DMV170_DUART_IRQ;
      break;
    case CSS_RAM_PARITY_INT:
      vector = DMV170_RAM_PARITY_IRQ;
      break;
    case CSS_DARF_BUS_ERROR:
      vector = DMV170_DARF_BUS_ERROR_IRQ;
      break;
    case CSS_PERIPHERAL_INT:
      vector = DMV170_PERIPHERAL_IRQ;
      break;
    case CSS_MAXPACK_INT:
      vector = DMV170_MEZZANINE_IRQ_0;assert(0);
      break;
    case CSS_SCV_VME_INT:
      vector = DMV170_MEZZANINE_IRQ_1;assert(0);
      break;
    case CSS_RTC_INT:
      vector = DMV170_RTC_IRQ;
      break;
  }

  return vector;
}

void enable_card_interrupt( 
  rtems_vector_number vector        /* vector number      */
)
{
  rtems_unsigned32 Id;
  Id = Css_Id(vector);

  Enable_int(Id);
}

rtems_vector_number Get_interrupt()
{
  rtems_vector_number vector;
  rtems_unsigned32    id;

  if ( Get_int_status(CSS_ACFAIL_INT) )
    vector = DMV170_ACFAIL_IRQ;
  else if ( Get_int_status( CSS_SYSFAIL_INT) )
    vector = DMV170_SYSFAIL_IRQ;
  else if ( Get_int_status( CSS_WATCHDOG_INT) )
    vector = DMV170_WATCHDOG_IRQ;
  else if ( Get_int_status( CSS_BI_INT) )
    vector = DMV170_BI_IRQ;
  else if ( Get_int_status( CSS_LM_INT) )
    vector = DMV170_LOCATION_MON_IRQ;
  else if ( Get_int_status( CSS_TICK_INT) )
    vector = DMV170_TICK_IRQ;
  else if ( Get_int_status( CSS_DARF_INT) )
    vector = DMV170_DUART_IRQ;
  else if ( Get_int_status( CSS_RAM_PARITY_INT) )
    vector = DMV170_RAM_PARITY_IRQ;
  else if ( Get_int_status( CSS_DARF_BUS_ERROR) )
    vector = DMV170_DARF_BUS_ERROR_IRQ;
  else if ( Get_int_status( CSS_PERIPHERAL_INT) )
    vector = DMV170_PERIPHERAL_IRQ;
  else if ( Get_int_status( CSS_MAXPACK_INT) ) {
    vector = DMV170_MEZZANINE_IRQ_0;
    assert(0);
  }
  else if ( Get_int_status( CSS_SCV_VME_INT) ) {
    vector = DMV170_MEZZANINE_IRQ_1;
    assert(0);
  }
  else if ( Get_int_status( CSS_RTC_INT) )
    vector = DMV170_RTC_IRQ;

  return vector;
}

void Clear_interrupt( 
  rtems_vector_number vector
)
{
 rtems_unsigned32 Id;
  Id = Css_Id(vector);

  Clear_int(Id);
}