don't print SYSTEM stacktrace on exceptions as it's not scheduled any more.
[minix.git] / lib / libsys / sef_init.c
blob1c7904a7d125c6d16cb95796db6b1114c76530e5
1 #include "syslib.h"
2 #include <assert.h>
3 #include <minix/sysutil.h>
5 /* SEF Init callbacks. */
6 PRIVATE struct sef_cbs {
7 sef_cb_init_t sef_cb_init_fresh;
8 sef_cb_init_t sef_cb_init_lu;
9 sef_cb_init_t sef_cb_init_restart;
10 } sef_cbs = {
11 SEF_CB_INIT_FRESH_DEFAULT,
12 SEF_CB_INIT_LU_DEFAULT,
13 SEF_CB_INIT_RESTART_DEFAULT
16 /* SEF Init prototypes for sef_startup(). */
17 PUBLIC _PROTOTYPE( int do_sef_rs_init, (void) );
18 PUBLIC _PROTOTYPE( int do_sef_init_request, (message *m_ptr) );
20 /* Debug. */
21 EXTERN _PROTOTYPE( char* sef_debug_header, (void) );
23 /*===========================================================================*
24 * do_sef_rs_init *
25 *===========================================================================*/
26 PUBLIC int do_sef_rs_init()
28 /* Special SEF Init for RS. */
29 return sef_cbs.sef_cb_init_fresh(SEF_INIT_FRESH, NULL);
32 /*===========================================================================*
33 * do_sef_init_request *
34 *===========================================================================*/
35 PUBLIC int do_sef_init_request(message *m_ptr)
37 /* Handle a SEF Init request. */
38 int r;
39 int type;
40 sef_init_info_t info;
42 /* Debug. */
43 #if SEF_INIT_DEBUG
44 sef_init_debug_begin();
45 sef_init_dprint("%s. Got a SEF Init request of type: %d. About to init.\n",
46 sef_debug_header(), m_ptr->RS_INIT_TYPE);
47 sef_init_debug_end();
48 #endif
50 /* Let the callback code handle the request. */
51 type = m_ptr->RS_INIT_TYPE;
52 info.rproctab_gid = m_ptr->RS_INIT_RPROCTAB_GID;
53 switch(type) {
54 case SEF_INIT_FRESH:
55 r = sef_cbs.sef_cb_init_fresh(type, &info);
56 break;
57 case SEF_INIT_LU:
58 r = sef_cbs.sef_cb_init_lu(type, &info);
59 break;
60 case SEF_INIT_RESTART:
61 r = sef_cbs.sef_cb_init_restart(type, &info);
62 break;
64 default:
65 /* Not a valid SEF init type. */
66 r = EINVAL;
67 break;
70 /* Report back to RS. */
71 m_ptr->RS_INIT_RESULT = r;
72 r = sendrec(RS_PROC_NR, m_ptr);
74 return r;
77 /*===========================================================================*
78 * sef_setcb_init_fresh *
79 *===========================================================================*/
80 PUBLIC void sef_setcb_init_fresh(sef_cb_init_t cb)
82 assert(cb != NULL);
83 sef_cbs.sef_cb_init_fresh = cb;
86 /*===========================================================================*
87 * sef_setcb_init_lu *
88 *===========================================================================*/
89 PUBLIC void sef_setcb_init_lu(sef_cb_init_t cb)
91 assert(cb != NULL);
92 sef_cbs.sef_cb_init_lu = cb;
95 /*===========================================================================*
96 * sef_setcb_init_restart *
97 *===========================================================================*/
98 PUBLIC void sef_setcb_init_restart(sef_cb_init_t cb)
100 assert(cb != NULL);
101 sef_cbs.sef_cb_init_restart = cb;
104 /*===========================================================================*
105 * sef_cb_init_null *
106 *===========================================================================*/
107 PUBLIC int sef_cb_init_null(int UNUSED(type),
108 sef_init_info_t *UNUSED(info))
110 return OK;
113 /*===========================================================================*
114 * sef_cb_init_fail *
115 *===========================================================================*/
116 PUBLIC int sef_cb_init_fail(int UNUSED(type), sef_init_info_t *UNUSED(info))
118 return ENOSYS;
121 /*===========================================================================*
122 * sef_cb_init_crash *
123 *===========================================================================*/
124 PUBLIC int sef_cb_init_crash(int UNUSED(type), sef_init_info_t *UNUSED(info))
126 panic("Simulating a crash at initialization time...");
128 return OK;