diff --git a/headers/private/kernel/arch/m68k/arch_platform.h b/headers/private/kernel/arch/m68k/arch_platform.h index d55fce00e4..fbcac6a7e1 100644 --- a/headers/private/kernel/arch/m68k/arch_platform.h +++ b/headers/private/kernel/arch/m68k/arch_platform.h @@ -9,12 +9,12 @@ struct real_time_data; -enum m68k_platform_type { +typedef enum m68k_platform_types { M68K_PLATFORM_AMIGA = 0, M68K_PLATFORM_ATARI, /* TT, Falcon, Hades, Milan... */ M68K_PLATFORM_MAC, M68K_PLATFORM_NEXT -}; +} m68k_platform_type; namespace BPrivate { @@ -22,12 +22,13 @@ namespace BPrivate { class M68KPlatform { public: - M68KPlatform(m68k_platform_type platformType); + M68KPlatform(platform_type platformType, m68k_platform_type m68kPlatformType); virtual ~M68KPlatform(); 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 InitSerialDebug(struct kernel_args *kernelArgs) = 0; @@ -49,50 +50,19 @@ public: virtual void ShutDown(bool reboot) = 0; 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 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 diff --git a/src/system/kernel/arch/m68k/arch_platform.cpp b/src/system/kernel/arch/m68k/arch_platform.cpp index 34c625f5fe..f526c20256 100644 --- a/src/system/kernel/arch/m68k/arch_platform.cpp +++ b/src/system/kernel/arch/m68k/arch_platform.cpp @@ -17,11 +17,6 @@ #include #include -using BPrivate::M68KAtari; -//using BPrivate::M68KAmiga; -//using BPrivate::M68KMac; -//using BPrivate::M68KNext; - static M68KPlatform *sM68KPlatform; @@ -48,29 +43,25 @@ M68KPlatform::Default() // # pragma mark - -// static buffer for constructing the actual M68KPlatform -static char *sM68KPlatformBuffer[sizeof(M68KAtari)]; - status_t arch_platform_init(struct kernel_args *kernelArgs) { -#warning M68K: switch platform from kernel args // only Atari supported for now switch (kernelArgs->arch_args.platform) { #if 0 case M68K_PLATFORM_AMIGA: - sM68KPlatform = new(sM68KPlatformBuffer) M68KAmiga; + sM68KPlatform = instanciate_m68k_platform_amiga(); break; #endif case M68K_PLATFORM_ATARI: - sM68KPlatform = new(sM68KPlatformBuffer) M68KAtari; + sM68KPlatform = instanciate_m68k_platform_atari(); break; #if 0 case M68K_PLATFORM_MAC: - sM68KPlatform = new(sM68KPlatformBuffer) M68KApple; + sM68KPlatform = instanciate_m68k_platform_mac(); break; case M68K_PLATFORM_NEXT: - sM68KPlatform = new(sM68KPlatformBuffer) M68KNext; + sM68KPlatform = instanciate_m68k_platform_next(); break; #endif default: diff --git a/src/system/kernel/arch/m68k/arch_system_info.c b/src/system/kernel/arch/m68k/arch_system_info.cpp similarity index 87% rename from src/system/kernel/arch/m68k/arch_system_info.c rename to src/system/kernel/arch/m68k/arch_system_info.cpp index adf55869a3..e6615c0bed 100644 --- a/src/system/kernel/arch/m68k/arch_system_info.c +++ b/src/system/kernel/arch/m68k/arch_system_info.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include @@ -30,7 +31,7 @@ arch_get_system_info(system_info *info, size_t size) info->cpu_clock_speed = sCPUClockFrequency; info->bus_clock_speed = sBusClockFrequency; - info->platform_type = B_MAC_PLATFORM;//XXX + info->platform_type = M68KPlatform::Default()->PlatformType(); return B_OK; } @@ -44,7 +45,7 @@ arch_system_info_init(struct kernel_args *args) sCPUClockFrequency = args->arch_args.cpu_frequency; sBusClockFrequency = args->arch_args.bus_frequency; - sCPURevision = 0x68030; //XXX + sCPURevision = args->arch_args.cpu_type; //XXX sCPUType = B_CPU_M68K; return B_OK; diff --git a/src/system/kernel/platform/atari_m68k/platform.cpp b/src/system/kernel/platform/atari_m68k/platform.cpp index 1703ee7d55..82a614a4f7 100644 --- a/src/system/kernel/platform/atari_m68k/platform.cpp +++ b/src/system/kernel/platform/atari_m68k/platform.cpp @@ -13,12 +13,50 @@ #include #include + +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; // constructor M68KAtari::M68KAtari() - : M68KPlatform(M68K_PLATFORM_ATARI), + : M68KPlatform(B_ATARI_PLATFORM, M68K_PLATFORM_ATARI), fRTC(-1) { } @@ -133,3 +171,13 @@ M68KAtari::ShutDown(bool reboot) { 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; +}