3 * Copyright (C) 2007 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
4 * Copyright (C) 2008 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
5 * Copyright (C) 2009 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
6 * Copyright (C) 2010 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
32 #include <partition.h>
34 #include <net/socket.h>
35 #include <net/packet.h>
36 #include <sound/audio.h>
48 /* Command structure */
49 typedef unsigned int (init_handler_t
) ();
51 /* OS information stamp */
57 kprintf (" v" ZEXOS_MAJOR
"." ZEXOS_MINOR
"." ZEXOS_REVISION
" " ZEXOS_DATE
" " ZEXOS_ARCH
" " ZEXOS_COMPILER
"\n");
60 /* Bootloader command parse system */
61 void oscmd (char *cmdline
)
75 if (cmdline
[x
] == ' ') {
78 if (!cstrcmp ("nolive", cmdline
+x
)) /* Disable Live form of the OS */
79 kernel_attr
|= KERNEL_NOLIVE
;
80 if (!cstrcmp ("noata", cmdline
+x
)) /* Ignore ATA devices - cdrom, hdd */
81 kernel_attr
|= KERNEL_NOATA
;
82 if (!cstrcmp ("18hz", cmdline
+x
)) /* Ticks on 18hz only - IBM default tickrate */
83 kernel_attr
|= KERNEL_18HZ
;
84 if (!cstrcmp ("noeth", cmdline
+x
)) /* Ignore ethernet cards */
85 kernel_attr
|= KERNEL_NOETH
;
86 if (!cstrcmp ("novesa", cmdline
+x
)) /* Disable vesa support when its available */
87 kernel_attr
|= KERNEL_NOVESA
;
94 /* Eye-candy status */
95 unsigned int checkinfo (char *msg
, unsigned int ret
)
125 unsigned int _init (init_handler_t
*handler
, char *msg
)
127 return checkinfo (msg
, handler ());
130 extern void calc_freqency ();
131 extern task_t
*_curr_task
;
133 /* initialization of kernel */
134 int init (char *cmdline
)
139 _init (&init_arch
, NULL
); /* architecture dependent stuff */
141 oscmd (cmdline
); /* bootloader command parsing */
143 _init (&init_video
, NULL
); /* video initialization */
145 osinfo (); /* print OS information - kernel ver.; compiler; .. */
147 _init (&init_mm
, "Initialize mm"); /* Memory management */
148 _init (&init_smp
, "Initialize SMP"); /* Symmetric multiprocessing */
149 _init (&init_keyboard
, "Initialize keyboard"); /* Keyboard should be accessible from here */
151 _init (&init_paging
, "Initialize paging"); /* Page covering, etc */
153 _init (&init_errno
, "Initialize errno"); /* Errno global variable */
154 _init (&init_env
, "Initialize env vars"); /* Environment variables */
155 _init (&init_fd
, "Initialize file desc"); /* File descriptors - stdin, stdout, .. */
156 _init (&init_tasks
, "Initialize tasks"); /* Thread and scheduler stuff */
157 _init (&init_vfs
, "Initialize VFS"); /* Virtual filesystem */
158 _init (&init_fs
, "Initialize fs"); /* Device filesystem */
159 _init (&init_partition
, "Initialize parts"); /* Device partitions - hda0, hda1, .. */
160 _init (&init_its
, "Initialize ITS"); /* Interval Time Scheduler */
161 _init (&init_netif
, "Initialize net if"); /* Network interface */
162 _init (&init_dev
, "Initialize devices"); /* Devices (PCI, RS232, Ethernet, ..) */
163 _init (&init_socket
, "Initialize sockets"); /* Network socket API */
164 _init (&init_packet
, "Initialize netcore"); /* Network handler - traffic parser */
165 _init (&init_audio
, "Initialize audio"); /* Sound System */
166 _init (&init_proc
, "Initialize procs"); /* Program's (software) process */
167 _init (&init_module
, "Loading modules"); /* Kernel additional modules (device drivers) */
168 _init (&init_commands
, "Registering cmds"); /* Built-in shell command registration */
169 _init (&init_console
, "Initialize console"); /* Console (terminal) stuff */
171 calc_swtimer (); /* Calculate by software time unit */
172 calc_freqency (); /* Calculate CPU clock */
174 _init (&init_tty
, NULL
); /* Start TTY console */
175 _init (&init_user
, NULL
); /* Register default user accounts */