summaryrefslogtreecommitdiffstats
path: root/c/src/lib/librtems++/rtemsInterrupt.cc
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/librtems++/rtemsInterrupt.cc')
-rw-r--r--c/src/lib/librtems++/rtemsInterrupt.cc115
1 files changed, 0 insertions, 115 deletions
diff --git a/c/src/lib/librtems++/rtemsInterrupt.cc b/c/src/lib/librtems++/rtemsInterrupt.cc
deleted file mode 100644
index 4cd5d9afa9..0000000000
--- a/c/src/lib/librtems++/rtemsInterrupt.cc
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- ------------------------------------------------------------------------
- $Id$
- ------------------------------------------------------------------------
-
- COPYRIGHT (c) 1997
- Objective Design Systems Ltd Pty (ODS)
- All rights reserved (R) Objective Design Systems Ltd Pty
-
- The license and distribution terms for this file may be found in the
- file LICENSE in this distribution or at
- http://www.OARcorp.com/rtems/license.html.
-
- ------------------------------------------------------------------------
-
- See header file.
-
- ------------------------------------------------------------------------
-*/
-
-#include <rtems++/rtemsInterrupt.h>
-
-/* ----
- Interrupt Table
-
- This table is used to re-direct the call from RTEMS to a user
- object
-*/
-
-static rtemsInterrupt *interrupt_table[CPU_INTERRUPT_NUMBER_OF_VECTORS];
-
-// has the table been initialised
-static bool initialised = false;
-
-/* ----
- rtemsInterrupt
-*/
-
-rtemsInterrupt::rtemsInterrupt()
- : vector(0),
- caught(false),
- old_handler(0),
- old_interrupt(0)
-{
- if (!initialised)
- {
- for (rtems_vector_number vec = 0;
- vec < CPU_INTERRUPT_NUMBER_OF_VECTORS;
- vec++)
- {
- interrupt_table[vector] = 0;
- }
- initialised = true;
- }
-}
-
-rtemsInterrupt::~rtemsInterrupt()
-{
- release();
-}
-
-const rtems_status_code rtemsInterrupt::isr_catch(const rtems_vector_number vec)
-{
- if (vec >= CPU_INTERRUPT_NUMBER_OF_VECTORS)
- return set_status_code(RTEMS_INVALID_NUMBER);
-
- if (caught)
- return set_status_code(RTEMS_RESOURCE_IN_USE);
-
- old_interrupt = interrupt_table[vector];
- interrupt_table[vector] = this;
- vector = vec;
-
- set_status_code(rtems_interrupt_catch(redirector,
- vector,
- &old_handler));
-
- if (successful())
- caught = true;
- else
- {
- interrupt_table[vector] = old_interrupt;
- old_interrupt = 0;
- old_handler = 0;
- vector = 0;
- }
-
- return last_status_code();
-}
-
-const rtems_status_code rtemsInterrupt::release(void)
-{
- if (caught)
- {
- set_status_code(rtems_interrupt_catch(old_handler,
- vector,
- &old_handler));
-
- interrupt_table[vector] = old_interrupt;
- old_interrupt = 0;
- old_handler = 0;
- vector = 0;
- caught = false;
- }
- else
- set_status_code(RTEMS_SUCCESSFUL);
-
- return last_status_code();
-}
-
-void rtemsInterrupt::redirector(rtems_vector_number vector)
-{
- if (interrupt_table[vector])
- interrupt_table[vector]->handler();
-}