- Move Atari platform class out to a platform file.

- Use the platform object to determine the platform type in system_info.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26166 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
François Revol 2008-06-29 18:22:34 +00:00
parent d9a109d8dc
commit f41c3a5bcd
4 changed files with 68 additions and 58 deletions

View File

@ -9,12 +9,12 @@
struct real_time_data; struct real_time_data;
enum m68k_platform_type { typedef enum m68k_platform_types {
M68K_PLATFORM_AMIGA = 0, M68K_PLATFORM_AMIGA = 0,
M68K_PLATFORM_ATARI, /* TT, Falcon, Hades, Milan... */ M68K_PLATFORM_ATARI, /* TT, Falcon, Hades, Milan... */
M68K_PLATFORM_MAC, M68K_PLATFORM_MAC,
M68K_PLATFORM_NEXT M68K_PLATFORM_NEXT
}; } m68k_platform_type;
namespace BPrivate { namespace BPrivate {
@ -22,12 +22,13 @@ namespace BPrivate {
class M68KPlatform { class M68KPlatform {
public: public:
M68KPlatform(m68k_platform_type platformType); M68KPlatform(platform_type platformType, m68k_platform_type m68kPlatformType);
virtual ~M68KPlatform(); virtual ~M68KPlatform();
static M68KPlatform *Default(); static M68KPlatform *Default();
inline m68k_platform_type PlatformType() const { return fPlatformType; } inline platform_type PlatformType() const { return fPlatformType; }
inline m68k_platform_type M68KPlatformType() const { return fM68KPlatformType; }
virtual status_t Init(struct kernel_args *kernelArgs) = 0; virtual status_t Init(struct kernel_args *kernelArgs) = 0;
virtual status_t InitSerialDebug(struct kernel_args *kernelArgs) = 0; virtual status_t InitSerialDebug(struct kernel_args *kernelArgs) = 0;
@ -49,50 +50,19 @@ public:
virtual void ShutDown(bool reboot) = 0; virtual void ShutDown(bool reboot) = 0;
private: private:
m68k_platform_type fPlatformType; m68k_platform_type fM68KPlatformType;
platform_type fPlatformType;
}; };
// #pragma mark - Amiga
// #pragma mark - Atari (Falcon)
// implemented in src/system/kernel/platform/atari_m68k/platform.cpp
class M68KAtari : public M68KPlatform {
public:
M68KAtari();
virtual ~M68KAtari();
virtual status_t Init(struct kernel_args *kernelArgs);
virtual status_t InitSerialDebug(struct kernel_args *kernelArgs);
virtual status_t InitPostVM(struct kernel_args *kernelArgs);
virtual status_t InitPIC(struct kernel_args *kernelArgs);
virtual status_t InitRTC(struct kernel_args *kernelArgs,
struct real_time_data *data);
virtual status_t InitTimer(struct kernel_args *kernelArgs);
virtual char SerialDebugGetChar();
virtual void SerialDebugPutChar(char c);
virtual void SetHardwareRTC(uint32 seconds);
virtual uint32 GetHardwareRTC();
virtual void SetHardwareTimer(bigtime_t timeout);
virtual void ClearHardwareTimer(void);
virtual void ShutDown(bool reboot);
private:
int fRTC;
};
// #pragma mark - Mac
} // namespace BPrivate } // namespace BPrivate
using BPrivate::M68KPlatform; using BPrivate::M68KPlatform;
//extern "C" M68KPlatform *instanciate_m68k_platform_amiga();
extern "C" M68KPlatform *instanciate_m68k_platform_atari();
//extern "C" M68KPlatform *instanciate_m68k_platform_mac();
//extern "C" M68KPlatform *instanciate_m68k_platform_next();
#endif // _KERNEL_M68K_ARCH_PLATFORM_H #endif // _KERNEL_M68K_ARCH_PLATFORM_H

View File

@ -17,11 +17,6 @@
#include <real_time_clock.h> #include <real_time_clock.h>
#include <util/kernel_cpp.h> #include <util/kernel_cpp.h>
using BPrivate::M68KAtari;
//using BPrivate::M68KAmiga;
//using BPrivate::M68KMac;
//using BPrivate::M68KNext;
static M68KPlatform *sM68KPlatform; static M68KPlatform *sM68KPlatform;
@ -48,29 +43,25 @@ M68KPlatform::Default()
// # pragma mark - // # pragma mark -
// static buffer for constructing the actual M68KPlatform
static char *sM68KPlatformBuffer[sizeof(M68KAtari)];
status_t status_t
arch_platform_init(struct kernel_args *kernelArgs) arch_platform_init(struct kernel_args *kernelArgs)
{ {
#warning M68K: switch platform from kernel args
// only Atari supported for now // only Atari supported for now
switch (kernelArgs->arch_args.platform) { switch (kernelArgs->arch_args.platform) {
#if 0 #if 0
case M68K_PLATFORM_AMIGA: case M68K_PLATFORM_AMIGA:
sM68KPlatform = new(sM68KPlatformBuffer) M68KAmiga; sM68KPlatform = instanciate_m68k_platform_amiga();
break; break;
#endif #endif
case M68K_PLATFORM_ATARI: case M68K_PLATFORM_ATARI:
sM68KPlatform = new(sM68KPlatformBuffer) M68KAtari; sM68KPlatform = instanciate_m68k_platform_atari();
break; break;
#if 0 #if 0
case M68K_PLATFORM_MAC: case M68K_PLATFORM_MAC:
sM68KPlatform = new(sM68KPlatformBuffer) M68KApple; sM68KPlatform = instanciate_m68k_platform_mac();
break; break;
case M68K_PLATFORM_NEXT: case M68K_PLATFORM_NEXT:
sM68KPlatform = new(sM68KPlatformBuffer) M68KNext; sM68KPlatform = instanciate_m68k_platform_next();
break; break;
#endif #endif
default: default:

View File

@ -12,6 +12,7 @@
#include <OS.h> #include <OS.h>
#include <arch_cpu.h> #include <arch_cpu.h>
#include <arch_platform.h>
#include <arch/system_info.h> #include <arch/system_info.h>
#include <boot/kernel_args.h> #include <boot/kernel_args.h>
@ -30,7 +31,7 @@ arch_get_system_info(system_info *info, size_t size)
info->cpu_clock_speed = sCPUClockFrequency; info->cpu_clock_speed = sCPUClockFrequency;
info->bus_clock_speed = sBusClockFrequency; info->bus_clock_speed = sBusClockFrequency;
info->platform_type = B_MAC_PLATFORM;//XXX info->platform_type = M68KPlatform::Default()->PlatformType();
return B_OK; return B_OK;
} }
@ -44,7 +45,7 @@ arch_system_info_init(struct kernel_args *args)
sCPUClockFrequency = args->arch_args.cpu_frequency; sCPUClockFrequency = args->arch_args.cpu_frequency;
sBusClockFrequency = args->arch_args.bus_frequency; sBusClockFrequency = args->arch_args.bus_frequency;
sCPURevision = 0x68030; //XXX sCPURevision = args->arch_args.cpu_type; //XXX
sCPUType = B_CPU_M68K; sCPUType = B_CPU_M68K;
return B_OK; return B_OK;

View File

@ -13,12 +13,50 @@
#include <real_time_clock.h> #include <real_time_clock.h>
#include <util/kernel_cpp.h> #include <util/kernel_cpp.h>
namespace BPrivate {
//class MfpPIC;
// #pragma mark - Atari (Falcon)
class M68KAtari : public M68KPlatform {
public:
M68KAtari();
virtual ~M68KAtari();
virtual status_t Init(struct kernel_args *kernelArgs);
virtual status_t InitSerialDebug(struct kernel_args *kernelArgs);
virtual status_t InitPostVM(struct kernel_args *kernelArgs);
virtual status_t InitPIC(struct kernel_args *kernelArgs);
virtual status_t InitRTC(struct kernel_args *kernelArgs,
struct real_time_data *data);
virtual status_t InitTimer(struct kernel_args *kernelArgs);
virtual char SerialDebugGetChar();
virtual void SerialDebugPutChar(char c);
virtual void SetHardwareRTC(uint32 seconds);
virtual uint32 GetHardwareRTC();
virtual void SetHardwareTimer(bigtime_t timeout);
virtual void ClearHardwareTimer(void);
virtual void ShutDown(bool reboot);
private:
int fRTC;
};
} // namespace BPrivate
using BPrivate::M68KAtari; using BPrivate::M68KAtari;
// constructor // constructor
M68KAtari::M68KAtari() M68KAtari::M68KAtari()
: M68KPlatform(M68K_PLATFORM_ATARI), : M68KPlatform(B_ATARI_PLATFORM, M68K_PLATFORM_ATARI),
fRTC(-1) fRTC(-1)
{ {
} }
@ -133,3 +171,13 @@ M68KAtari::ShutDown(bool reboot)
{ {
panic("WRITEME"); panic("WRITEME");
} }
// static buffer for constructing the actual M68KPlatform
static char *sM68KPlatformBuffer[sizeof(M68KAtari)];
#warning PTR HERE ???
M68KPlatform *instanciate_m68k_platform_atari()
{
return new(sM68KPlatformBuffer) M68KAtari;
}