2 meinOS - A unix-like x86 microkernel operating system
3 Copyright (C) 2008 Janosch Gräf <janosch.graef@gmx.net>
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
19 #include <sys/types.h>
22 #include <memkernel.h>
28 #include <interrupt.h>
33 * @return 0=Success; -1=Failure
36 if ((cpus
= llist_create())==NULL
) return -1;
37 cpu_t
*cpu
= malloc(sizeof(cpu_t
));
38 if (cpu
==NULL
) return -1;
40 cpu_stack_create(cpu
,PAGE_SIZE
);
46 * @param cpu CPU to create stack for
47 * @param size Stack size
48 * @return 0=Success; -1=Failure
50 int cpu_stack_create(cpu_t
*cpu
,size_t size
) {
51 if ((cpu
->stack
= memkernel_alloc((size_t)PAGEUP(size
)))==NULL
) return -1;
52 cpu
->stacksize
= size
;
56 void cpu_id(uint32_t seax
,uint32_t *deax
,uint32_t *debx
,uint32_t *decx
,uint32_t *dedx
) {
57 uint32_t eax
,ebx
,ecx
,edx
;
58 asm("cpuid":"=a"(eax
),"=b"(ebx
),"=c"(ecx
),"=d"(edx
):"a"(seax
));
59 if (deax
!=NULL
) *deax
= eax
;
60 if (debx
!=NULL
) *debx
= ebx
;
61 if (decx
!=NULL
) *decx
= ecx
;
62 if (dedx
!=NULL
) *dedx
= edx
;
70 kprintf("Please turn off the computer\n");
83 asm("lidt (%0)"::"r"(&idtsel
));