1 #ifndef CYGONCE_KERNEL_EXCEPT_HXX
2 #define CYGONCE_KERNEL_EXCEPT_HXX
4 //==========================================================================
8 // Exception handling declarations
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.
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.
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
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.
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.
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.
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####
47 // Contributors: nickg, jlarmour
49 // Purpose: Define exception interfaces
50 // Description: The classes defined here collectively implement the
51 // internal API used to register, manage and deliver
53 // Usage: #include <cyg/kernel/thread.hxx>
55 //####DESCRIPTIONEND####
57 //==========================================================================
59 #include <cyg/kernel/ktypes.h>
60 #include <cyg/infra/cyg_ass.h> // assertion macros
61 #include <cyg/hal/hal_intr.h> // exception defines
63 // -------------------------------------------------------------------------
64 // Exception handler function prototype
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
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.
76 externC void cyg_hal_deliver_exception( CYG_WORD code, CYG_ADDRWORD data );
78 // -------------------------------------------------------------------------
79 // Exception control class. Depending on the configuration there is either
80 // one of these per thread, or one for the entire system.
82 #ifdef CYGPKG_KERNEL_EXCEPTIONS
84 class Cyg_Exception_Control
87 #ifdef CYGSEM_KERNEL_EXCEPTIONS_DECODE
88 cyg_exception_handler *exception_handler[CYGNUM_HAL_EXCEPTION_COUNT];
90 CYG_ADDRWORD exception_data[CYGNUM_HAL_EXCEPTION_COUNT];
92 cyg_exception_handler *exception_handler; // Handler function
94 CYG_ADDRWORD exception_data; // Handler data
99 Cyg_Exception_Control();
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
111 // Remove an exception handler.
112 void deregister_exception(
113 cyg_code exception_number // exception number
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
126 // -------------------------------------------------------------------------
127 #endif // ifndef CYGONCE_KERNEL_EXCEPT_HXX