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
;
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
) );
21 EXTERN
_PROTOTYPE( char* sef_debug_header
, (void) );
23 /*===========================================================================*
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. */
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
);
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
;
55 r
= sef_cbs
.sef_cb_init_fresh(type
, &info
);
58 r
= sef_cbs
.sef_cb_init_lu(type
, &info
);
60 case SEF_INIT_RESTART
:
61 r
= sef_cbs
.sef_cb_init_restart(type
, &info
);
65 /* Not a valid SEF init type. */
70 /* Report back to RS. */
71 m_ptr
->RS_INIT_RESULT
= r
;
72 r
= sendrec(RS_PROC_NR
, m_ptr
);
77 /*===========================================================================*
78 * sef_setcb_init_fresh *
79 *===========================================================================*/
80 PUBLIC
void sef_setcb_init_fresh(sef_cb_init_t cb
)
83 sef_cbs
.sef_cb_init_fresh
= cb
;
86 /*===========================================================================*
88 *===========================================================================*/
89 PUBLIC
void sef_setcb_init_lu(sef_cb_init_t cb
)
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
)
101 sef_cbs
.sef_cb_init_restart
= cb
;
104 /*===========================================================================*
106 *===========================================================================*/
107 PUBLIC
int sef_cb_init_null(int UNUSED(type
),
108 sef_init_info_t
*UNUSED(info
))
113 /*===========================================================================*
115 *===========================================================================*/
116 PUBLIC
int sef_cb_init_fail(int UNUSED(type
), sef_init_info_t
*UNUSED(info
))
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...");