FPPS4/sys/sys_sysinit.pas

137 lines
2.0 KiB
Plaintext

unit sys_sysinit;
{$mode ObjFPC}{$H+}
{$CALLING SysV_ABI_CDecl}
interface
procedure sys_init;
implementation
uses
init_sysent, //compile spec
kern_rtprio, //compile spec
kern_conf, //compile spec
devfs_vnops, //compile spec
devfs_rule, //compile spec
time,
kern_time,
subr_sleepqueue,
kern_sysctl,
kern_thr,
kern_thread,
kern_proc,
kern_sig,
kern_timeout,
kern_synch,
kern_umtx,
kern_namedobj,
kern_hazard_pointer,
vmount,
vfiledesc,
vm_map,
kern_dmem,
kern_mtxpool,
vsys_generic,
vfs_subr,
vfs_lookup,
vfs_init,
kern_event,
kern_pipe,
devfs,
devfs_devs,
devfs_vfsops,
fdesc_vfsops,
null_vfsops,
ufs,
kern_descrip,
vfs_mountroot,
sys_conf,
sched_ule,
dev_null,
dev_sce_zlib,
dev_tty,
dev_dmem,
dev_dipsw,
dev_rng,
dev_random,
dev_gc,
dev_dce,
dev_hid;
var
daemon_thr:p_kthread;
//Daemon for a separate thread
procedure sys_daemon(arg:Pointer);
begin
sched_prio(curkthread,1000);
repeat
vnlru_proc;
TGuard.FLazy;
pause('sys_daemon',hz);
until false;
end;
procedure sys_daemon_init;
var
n:Integer;
begin
n:=kthread_add(@sys_daemon,nil,@daemon_thr,0,'sys_daemon');
Assert(n=0,'sys_daemon');
end;
procedure module_init;
begin
vfs_register(@devfs_vfsconf);
vfs_register(@fdescfs_vfsconf);
vfs_register(@nullfs_vfsconf);
vfs_register(@ufs_vfsconf);
vfs_mountroot.vfs_mountroot();
fildesc_drvinit;
//
null_modevent(0,MOD_LOAD);
zlib_modevent(0,MOD_LOAD);
ttyconsdev_init();
dmemdev_init();
dipsw_init();
rng_init();
random_init();
gc_initialize();
dce_initialize();
hid_init();
end;
//Manual order of lazy initialization
procedure sys_init;
begin
timeinit;
init_sleepqueues;
sysctl_register_all;
PROC_INIT;
threadinit;
siginit;
umtxq_sysinit;
kern_timeout_init;
named_table_init;
vmountinit;
fd_table_init;
vminit;
init_dmem_map;
mtx_pool_setup_dynamic;
selectinit;
vntblinit;
nameiinit;
knote_init;
vfs_event_init;
devfs_mtx_init;
devfs_devs_init;
pipeinit;
module_init;
sys_daemon_init;
end;
end.