]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/kernel/v2_0/include/except.hxx
TX51 pre-release
[karo-tx-redboot.git] / packages / kernel / v2_0 / include / except.hxx
1 #ifndef CYGONCE_KERNEL_EXCEPT_HXX
2 #define CYGONCE_KERNEL_EXCEPT_HXX
3
4 //==========================================================================
5 //
6 //      except.hxx
7 //
8 //      Exception handling declarations
9 //
10 //==========================================================================
11 //####ECOSGPLCOPYRIGHTBEGIN####
12 // -------------------------------------------
13 // This file is part of eCos, the Embedded Configurable Operating System.
14 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
15 //
16 // eCos is free software; you can redistribute it and/or modify it under
17 // the terms of the GNU General Public License as published by the Free
18 // Software Foundation; either version 2 or (at your option) any later version.
19 //
20 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
21 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
22 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
23 // for more details.
24 //
25 // You should have received a copy of the GNU General Public License along
26 // with eCos; if not, write to the Free Software Foundation, Inc.,
27 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
28 //
29 // As a special exception, if other files instantiate templates or use macros
30 // or inline functions from this file, or you compile this file and link it
31 // with other works to produce a work based on this file, this file does not
32 // by itself cause the resulting work to be covered by the GNU General Public
33 // License. However the source code for this file must still be made available
34 // in accordance with section (3) of the GNU General Public License.
35 //
36 // This exception does not invalidate any other reasons why a work based on
37 // this file might be covered by the GNU General Public License.
38 //
39 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
40 // at http://sources.redhat.com/ecos/ecos-license/
41 // -------------------------------------------
42 //####ECOSGPLCOPYRIGHTEND####
43 //==========================================================================
44 //#####DESCRIPTIONBEGIN####
45 //
46 // Author(s):    nickg
47 // Contributors: nickg, jlarmour
48 // Date:         1999-02-16
49 // Purpose:      Define exception interfaces
50 // Description:  The classes defined here collectively implement the
51 //               internal API used to register, manage and deliver
52 //               exceptions.
53 // Usage:        #include <cyg/kernel/thread.hxx>
54 //
55 //####DESCRIPTIONEND####
56 //
57 //==========================================================================
58
59 #include <cyg/kernel/ktypes.h>
60 #include <cyg/infra/cyg_ass.h>          // assertion macros
61 #include <cyg/hal/hal_intr.h>           // exception defines
62
63 // -------------------------------------------------------------------------
64 // Exception handler function prototype
65
66 typedef void cyg_exception_handler(
67     CYG_ADDRWORD        data,                   // user supplied data
68     cyg_code            exception_number,       // exception being raised
69     CYG_ADDRWORD        exception_info          // any exception specific info
70     );
71
72 // -------------------------------------------------------------------------
73 // Exception delivery interface. This function is exported to the HAL which
74 // invokes it for all exceptions that it is not able to handle itself.
75
76 externC void cyg_hal_deliver_exception( CYG_WORD code, CYG_ADDRWORD data );
77
78 // -------------------------------------------------------------------------
79 // Exception control class. Depending on the configuration there is either
80 // one of these per thread, or one for the entire system.
81
82 #ifdef CYGPKG_KERNEL_EXCEPTIONS
83
84 class Cyg_Exception_Control
85 {
86
87 #ifdef CYGSEM_KERNEL_EXCEPTIONS_DECODE
88     cyg_exception_handler   *exception_handler[CYGNUM_HAL_EXCEPTION_COUNT];
89     
90     CYG_ADDRWORD            exception_data[CYGNUM_HAL_EXCEPTION_COUNT];
91 #else
92     cyg_exception_handler   *exception_handler; // Handler function
93     
94     CYG_ADDRWORD            exception_data;     // Handler data
95 #endif
96
97 public:
98
99     Cyg_Exception_Control();
100
101     // Register an exception handler for either the specific exception
102     // or for all exceptions.
103     void register_exception(
104         cyg_code                exception_number,       // exception number
105         cyg_exception_handler   handler,                // handler function
106         CYG_ADDRWORD            data,                   // data argument
107         cyg_exception_handler   **old_handler,          // handler function
108         CYG_ADDRWORD            *old_data               // data argument
109         );
110
111     // Remove an exception handler.
112     void deregister_exception(
113         cyg_code                exception_number        // exception number
114         );
115
116     // Deliver the given exception now by invoking the appropriate
117     // exception handler.
118     void deliver_exception(
119         cyg_code            exception_number,       // exception being raised
120         CYG_ADDRWORD        exception_info          // exception specific info
121         );
122 };
123
124 #endif
125
126 // -------------------------------------------------------------------------
127 #endif // ifndef CYGONCE_KERNEL_EXCEPT_HXX
128 // EOF except.hxx