#ifndef _KERNEL_M68K_ARCH_PLATFORM_H
#define _KERNEL_M68K_ARCH_PLATFORM_H
#include <OS.h>
#include <arch/platform.h>
struct real_time_data;
typedef enum m68k_platform_types {
M68K_PLATFORM_AMIGA = 0,
M68K_PLATFORM_ATARI,
M68K_PLATFORM_MAC,
M68K_PLATFORM_NEXT
} m68k_platform_type;
namespace BPrivate {
class M68KPlatform {
public:
M68KPlatform(m68k_platform_type platformType);
virtual ~M68KPlatform();
static M68KPlatform *Default();
inline m68k_platform_type PlatformType() const { return fPlatformType; }
virtual status_t Init(struct kernel_args *kernelArgs) = 0;
virtual status_t InitSerialDebug(struct kernel_args *kernelArgs) = 0;
virtual status_t InitPostVM(struct kernel_args *kernelArgs) = 0;
virtual status_t InitPIC(struct kernel_args *kernelArgs) = 0;
virtual status_t InitRTC(struct kernel_args *kernelArgs,
struct real_time_data *data) = 0;
virtual status_t InitTimer(struct kernel_args *kernelArgs) = 0;
virtual char BlueScreenGetChar() = 0;
virtual char SerialDebugGetChar() = 0;
virtual void SerialDebugPutChar(char c) = 0;
virtual void EnableIOInterrupt(int irq) = 0;
virtual void DisableIOInterrupt(int irq) = 0;
virtual bool AcknowledgeIOInterrupt(int irq) = 0;
virtual uint8 ReadRTCReg(uint8 reg) = 0;
virtual void WriteRTCReg(uint8 reg, uint8 val) = 0;
virtual void SetHardwareRTC(uint64 seconds) = 0;
virtual uint32 GetHardwareRTC() = 0;
virtual void SetHardwareTimer(bigtime_t timeout) = 0;
virtual void ClearHardwareTimer(void) = 0;
virtual void ShutDown(bool reboot) = 0;
private:
m68k_platform_type fPlatformType;
};
}
using BPrivate::M68KPlatform;
extern "C" M68KPlatform *instanciate_m68k_platform_atari();
#endif