functions to enter kernel with/without MMU

This commit is contained in:
Laurent Vivier 2005-10-20 22:02:25 +00:00
parent f962537ede
commit 3276cd118c
2 changed files with 105 additions and 0 deletions

70
second/enter_kernel.c Normal file
View File

@ -0,0 +1,70 @@
/*
*
* (c) 2005 Laurent Vivier <LaurentVivier@wanadoo.fr>
*
*/
#include <stdio.h>
#include "misc.h"
#include "arch.h"
#include "enter_kernel.h"
unsigned long enter_kernel;
unsigned long end_enter_kernel;
disable_cache_t disable_cache;
void enter_kernel_init(void)
{
#ifdef ARCH_M68K
if (arch_type == gestalt68k)
{
if (mmu_type == gestalt68040MMU)
{
#ifdef USE_MMU040
printf("Using 68040 MMU\n");
enter_kernel = (unsigned long)enter_kernel040;
end_enter_kernel = (unsigned long)&end_enter_kernel040;
disable_cache = MMU040_disable_cache;
#else
error("68040 MMU is not supported");
#endif
}
else if (mmu_type == gestalt68030MMU)
{
#ifdef USE_MMU030
printf("Using 68030 MMU\n");
enter_kernel = (unsigned long)enter_kernel030;
end_enter_kernel = (unsigned long)&end_enter_kernel030;
disable_cache = MMU030_disable_cache;
#else
error("68030 MMU is not supported");
#endif
}
else if (mmu_type == gestalt68851)
{
error("MMU 68851 is not supported");
}
else if (mmu_type == gestaltNoMMU)
{
printf("No MMU detected\n");
enter_kernel = (unsigned long)enter_kernelnoMMU;
end_enter_kernel = (unsigned long)&end_enter_kernelnoMMU;
disable_cache = noMMU_disable_cache;
}
else
error("Unsupported MMU");
}
#endif
#ifdef ARCH_PPC
if (arch_type == gestaltPowerPC)
{
enter_kernel = NULL;
end_enter_kernel = NULL;
disable_cache = NULL;
bootstrap_size = 0;
}
else
error("EMILE doesn't support your architecture");
#endif
}

35
second/enter_kernel.h Normal file
View File

@ -0,0 +1,35 @@
/*
*
* (c) 2005 Laurent Vivier <LaurentVivier@wanadoo.fr>
*
*/
#ifndef __ENTER_KERNEL_H__
#define __ENTER_KERNEL_H__
typedef void (*entry_t) (unsigned long , unsigned long , unsigned long, unsigned long );
typedef void (*disable_cache_t) (void);
#include "enter_kernelnoMMU.h"
#ifdef USE_MMU030
#include "enter_kernel030.h"
#include "MMU030.h"
#endif
#ifdef USE_MMU040
#include "enter_kernel040.h"
#include "MMU040.h"
#endif
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1))
#ifdef ARCH_PPC
#include "enter_kernelPPC.h"
#endif
extern void enter_kernel_init(void);
extern unsigned long enter_kernel;
extern unsigned long end_enter_kernel;
extern disable_cache_t disable_cache;
#endif