17,37 → 17,6 |
*/ |
|
/* |
------------ |
CVS : $Id: initfile.c,v 1.1 2003-03-13 13:14:03 giacomo Exp $ |
|
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2003-03-13 13:14:03 $ |
------------ |
|
System initialization file |
|
This file contains the 2 functions needed to initialize the system. |
|
These functions register the following levels: |
|
an EDF (Earliest Deadline First) level |
a RR (Round Robin) level |
a CBS (Costant Bandwidth Server) level |
a Dummy level |
|
It can accept these task models: |
|
HARD_TASK_MODEL (wcet+mit) at level 0 |
SOFT_TASK_MODEL (met, period) at level 1 |
NRT_TASK_MODEL at level 2 |
|
This file is similar to the configuration of kernel/init/hartik3.c |
|
TICK is set to 0 (one-shot timer is used) |
*/ |
|
/* |
* Copyright (C) 2000 Paolo Gai |
* |
* This program is free software; you can redistribute it and/or modify |
66,32 → 35,114 |
* |
*/ |
|
/* |
* CVS : $Id: initfile.c,v 1.2 2003-03-20 13:34:37 giacomo Exp $ |
* |
* File: $File$ |
* Revision: $Revision: 1.2 $ |
* Last update: $Date: 2003-03-20 13:34:37 $ |
*/ |
|
#include "kernel/kern.h" |
#include "modules/edf.h" |
#include "modules/rr.h" |
#include "modules/cbs.h" |
#include "modules/rr.h" |
#include "modules/dummy.h" |
|
#include "modules/sem.h" |
#include "modules/hartport.h" |
#include "modules/cabs.h" |
#include "modules/pi.h" |
#include "modules/pc.h" |
#include "modules/srp.h" |
#include "modules/npp.h" |
#include "modules/nop.h" |
#include "modules/nopm.h" |
|
#include "fs/bdevinit.h" |
#include "fs/fsinit.h" |
#include "fs/bdev.h" |
|
#include "drivers/keyb.h" |
|
|
/*+ sysyem tick in us +*/ |
#define TICK 0 |
#define TICK 1000 |
|
/*+ RR tick in us +*/ |
#define RRTICK 10000 |
|
dev_t root_device=-1; |
dev_t temp_device=-1; |
|
int __register_sub_init(void) |
{ |
#if defined(EDFSCHED) |
extern void BD_EDF_register_module(void); |
BD_EDF_register_module(); |
#elif defined(PSCANSCHED) |
extern void BD_PSCAN_register_module(void); |
BD_PSCAN_register_module(); |
#endif |
return 0; |
} |
|
int choose_root_callback(dev_t dev,u_int8_t fs) |
{ |
if (fs==FS_MSDOS) return dev; |
return -1; |
} |
|
int choose_temp_callback(__dev_t dev,__uint8_t fs) |
{ |
static int flag=0; |
if (fs==FS_MSDOS) { |
if (flag) return dev; |
flag=1; |
} |
return -1; |
} |
|
int __bdev_sub_init(void) |
{ |
BDEV_PARMS bdev=BASE_BDEV; |
|
bdev_def_showinfo(bdev,FALSE); |
bdev_init(&bdev); |
|
root_device=bdev_scan_devices(choose_root_callback); |
if (root_device<0) { |
cprintf("can't find root device to mount on /!!!\n"); |
sys_end(); |
return -1; |
} |
|
return 0; |
|
} |
|
int __fs_sub_init(void) |
{ |
extern int libc_initialize(void); |
FILESYSTEM_PARMS fs=BASE_FILESYSTEM; |
|
filesystem_def_rootdevice(fs,root_device); |
filesystem_def_fs(fs,FS_MSDOS); |
filesystem_def_showinfo(fs,FALSE); |
filesystem_init(&fs); |
|
libc_initialize(); |
|
return 0; |
} |
|
TIME __kernel_register_levels__(void *arg) |
{ |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
extern int __register_sub_init(void); |
|
EDF_register_level(EDF_ENABLE_ALL); |
RR_register_level(RRTICK, RR_MAIN_YES, mb); |
CBS_register_level(CBS_ENABLE_ALL, 0); |
RR_register_level(RRTICK, RR_MAIN_YES, mb); |
dummy_register_level(); |
|
SEM_register_module(); |
98,6 → 149,15 |
|
CABS_register_module(); |
|
PI_register_module(); |
PC_register_module(); |
NPP_register_module(); |
SRP_register_module(); |
NOP_register_module(); |
NOPM_register_module(); |
|
__register_sub_init(); |
|
return TICK; |
} |
|
104,15 → 164,17 |
TASK __init__(void *arg) |
{ |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
|
KEYB_PARMS kparms = BASE_KEYB; |
|
KEYB_PARMS keyb = BASE_KEYB; |
extern int __bdev_sub_init(void); |
extern int __fs_sub_init(void); |
|
HARTPORT_init(); |
|
KEYB_init(&keyb); |
|
keyb_def_ctrlC(kparms, NULL); |
keyb_def_map(kparms,itaMap); |
KEYB_init(&kparms); |
|
__bdev_sub_init(); |
__fs_sub_init(); |
|
__call_main__(mb); |
|
return (void *)0; |