Cleanup in elf.c with .bss section clean; adm command mounts cdrom instead of floppy...
[ZeXOS.git] / kernel / core / init.c
blob8594291382729b67423a69b895bc808efa68d67c
1 /*
2 * ZeX/OS
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/>.
22 #include <system.h>
23 #include <string.h>
24 #include <arch/io.h>
25 #include <config.h>
26 #include <env.h>
27 #include <dev.h>
28 #include <vfs.h>
29 #include <user.h>
30 #include <tty.h>
31 #include <proc.h>
32 #include <partition.h>
33 #include <net/if.h>
34 #include <net/socket.h>
35 #include <net/packet.h>
36 #include <sound/audio.h>
37 #include <module.h>
38 #include <commands.h>
39 #include <console.h>
40 #include <paging.h>
41 #include <errno.h>
42 #include <smp.h>
43 #include <build.h>
44 #include <its.h>
45 #include <fs.h>
46 #include <fd.h>
48 /* Command structure */
49 typedef unsigned int (init_handler_t) ();
51 /* OS information stamp */
52 void osinfo ()
54 video_color (14, 0);
55 kprintf ("ZeX/OS");
56 video_color (7, 0);
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)
63 kernel_attr = 0;
65 char cmd[80];
67 int x = 0, y, l;
69 l = strlen (cmdline);
71 if (l >= 80)
72 l = 79;
74 while (x < l) {
75 if (cmdline[x] == ' ') {
76 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;
90 x ++;
94 /* Eye-candy status */
95 unsigned int checkinfo (char *msg, int ret)
97 if (msg == NULL)
98 return 2;
100 video_color (14, 0);
101 kprintf (" * ");
102 video_color (7, 0);
103 kprintf (msg);
104 video_color (1, 0);
105 kprintf ("\t\t[ ");
106 video_color (14, 0);
108 if (ret) {
109 video_color (14, 0);
110 kprintf ("OK");
111 } else {
112 video_color (4, 0);
113 kprintf ("Fail");
116 video_color (1, 0);
117 kprintf (" ]\n");
119 video_color (15, 0);
121 return ret;
124 /* Handler-caller */
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)
136 debug = 0;
137 _curr_task = 0;
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 */
150 #ifdef ARCH_i386
151 _init (&init_paging, "Initialize paging"); /* Page covering, etc */
152 #endif
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 */
177 return 1;