git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Usermode/AxWin3 - More WM IPC messages implemented
[tpg/acess2.git]
/
Kernel
/
arch
/
x86
/
main.c
diff --git
a/Kernel/arch/x86/main.c
b/Kernel/arch/x86/main.c
index
3ea4f3f
..
99c1020
100644
(file)
--- a/
Kernel/arch/x86/main.c
+++ b/
Kernel/arch/x86/main.c
@@
-19,20
+19,19
@@
extern void Heap_Install(void);
extern void Desctab_Install(void);
extern void MM_PreinitVirtual(void);
extern void MM_Install(tMBoot_Info *MBoot);
extern void Desctab_Install(void);
extern void MM_PreinitVirtual(void);
extern void MM_Install(tMBoot_Info *MBoot);
-extern void MM_InstallVirtual(void);
+extern void
MM_InstallVirtual(void);
extern void Threads_Init(void);
extern int Time_Setup(void);
extern void Threads_Init(void);
extern int Time_Setup(void);
-extern Uint Proc_Clone(Uint *Err, Uint Flags);
-extern void Threads_Sleep(void);
// --- Core ---
extern void System_Init(char *Commandline);
// === PROTOTYPES ===
// --- Core ---
extern void System_Init(char *Commandline);
// === PROTOTYPES ===
-
void Arch_LoadBootModules(void
);
+
int kmain(Uint MbMagic, void *MbInfoPtr
);
// === GLOBALS ===
char *gsBootCmdLine = NULL;
struct {
// === GLOBALS ===
char *gsBootCmdLine = NULL;
struct {
+ Uint32 PBase;
void *Base;
Uint Size;
char *ArgString;
void *Base;
Uint Size;
char *ArgString;
@@
-45,9
+44,11
@@
int kmain(Uint MbMagic, void *MbInfoPtr)
int i;
tMBoot_Module *mods;
tMBoot_Info *mbInfo;
int i;
tMBoot_Module *mods;
tMBoot_Info *mbInfo;
+
+ LogF("Acess2 x86_65 v"EXPAND_STR(KERNEL_VERSION)"\n");
+ LogF(" Build %i, Git Hash %s\n", BUILD_NUM, gsGitHash);
- Log("MbMagic = %08x", MbMagic);
- Log("MbInfoPtr = %p", MbInfoPtr);
+ Log("MbMagic = %08x, MbInfoPtr = %p", MbMagic, MbInfoPtr);
// Set up non-boot info dependent stuff
Desctab_Install(); // Set up GDT and IDT
// Set up non-boot info dependent stuff
Desctab_Install(); // Set up GDT and IDT
@@
-66,7
+67,7
@@
int kmain(Uint MbMagic, void *MbInfoPtr)
// Multiboot 2
case MULTIBOOT2_MAGIC:
// Multiboot 2
case MULTIBOOT2_MAGIC:
-
Warning("Multiboot 2 N
ot yet supported");
+
Panic("Multiboot 2 n
ot yet supported");
//MM_InstallMBoot2( MbInfo ); // Set up physical memory manager
return 0;
break;
//MM_InstallMBoot2( MbInfo ); // Set up physical memory manager
return 0;
break;
@@
-98,10
+99,14
@@
int kmain(Uint MbMagic, void *MbInfoPtr)
for( i = 0; i < mbInfo->ModuleCount; i ++ )
{
int ofs;
for( i = 0; i < mbInfo->ModuleCount; i ++ )
{
int ofs;
-
- // Always HW map the module data
+
+ Log_Log("Arch", "Multiboot Module at 0x%08x, 0x%08x bytes (String at 0x%08x)",
+ mods[i].Start, mods[i].End-mods[i].Start, mods[i].String);
+
+ gaArch_BootModules[i].PBase = mods[i].Start;
gaArch_BootModules[i].Size = mods[i].End - mods[i].Start;
gaArch_BootModules[i].Size = mods[i].End - mods[i].Start;
-
+
+ // Always HW map the module data
ofs = mods[i].Start&0xFFF;
gaArch_BootModules[i].Base = (void*)( MM_MapHWPages(mods[i].Start,
(gaArch_BootModules[i].Size+ofs+0xFFF) / 0x1000
ofs = mods[i].Start&0xFFF;
gaArch_BootModules[i].Base = (void*)( MM_MapHWPages(mods[i].Start,
(gaArch_BootModules[i].Size+ofs+0xFFF) / 0x1000
@@
-112,8
+117,7
@@
int kmain(Uint MbMagic, void *MbInfoPtr)
{
// Assumes the string is < 4096 bytes long)
gaArch_BootModules[i].ArgString = (void*)(
{
// Assumes the string is < 4096 bytes long)
gaArch_BootModules[i].ArgString = (void*)(
- MM_MapHWPages((tVAddr)mods[i].String, 2)
- + ((tVAddr)mods[i].String&0xFFF)
+ MM_MapHWPages(mods[i].String, 2) + (mods[i].String&0xFFF)
);
}
else
);
}
else
@@
-132,13
+136,9
@@
int kmain(Uint MbMagic, void *MbInfoPtr)
void Arch_LoadBootModules(void)
{
void Arch_LoadBootModules(void)
{
- int i;
+ int i
, j, numPages
;
for( i = 0; i < giArch_NumBootModules; i ++ )
{
for( i = 0; i < giArch_NumBootModules; i ++ )
{
- Log_Debug("Arch", "Module %i: %p - %p 0x%x",
- i, gaArch_BootModules[i].ArgString,
- gaArch_BootModules[i].Base, gaArch_BootModules[i].Size
- );
Log_Log("Arch", "Loading '%s'", gaArch_BootModules[i].ArgString);
if( !Module_LoadMem( gaArch_BootModules[i].Base, gaArch_BootModules[i].Size, gaArch_BootModules[i].ArgString ) )
Log_Log("Arch", "Loading '%s'", gaArch_BootModules[i].ArgString);
if( !Module_LoadMem( gaArch_BootModules[i].Base, gaArch_BootModules[i].Size, gaArch_BootModules[i].ArgString ) )
@@
-146,10
+146,12
@@
void Arch_LoadBootModules(void)
Log_Warning("Arch", "Unable to load module");
}
Log_Warning("Arch", "Unable to load module");
}
- MM_UnmapHWPages(
- (tVAddr)gaArch_BootModules[i].Base,
- (gaArch_BootModules[i].Size + ((Uint)gaArch_BootModules[i].Base&0xFFF) + 0xFFF) >> 12
- );
+ // Unmap and free
+ numPages = (gaArch_BootModules[i].Size + ((Uint)gaArch_BootModules[i].Base&0xFFF) + 0xFFF) >> 12;
+ MM_UnmapHWPages( (tVAddr)gaArch_BootModules[i].Base, numPages );
+
+ for( j = 0; j < numPages; j++ )
+ MM_DerefPhys( gaArch_BootModules[i].PBase + (j << 12) );
if( (tVAddr) gaArch_BootModules[i].ArgString > MAX_ARGSTR_POS )
MM_UnmapHWPages( (tVAddr)gaArch_BootModules[i].ArgString, 2 );
if( (tVAddr) gaArch_BootModules[i].ArgString > MAX_ARGSTR_POS )
MM_UnmapHWPages( (tVAddr)gaArch_BootModules[i].ArgString, 2 );
UCC
git Repository :: git.ucc.asn.au