From 94b1f00114b400afb8a7dcc7414fd96aa8246013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Sun, 12 Oct 2008 23:33:11 +0000 Subject: [PATCH] - init PIC earlier - stub out RTC git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28016 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/arch/m68k/arch_int.cpp | 8 +-- .../kernel/platform/atari_m68k/platform.cpp | 50 ++++++++++++++++--- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/system/kernel/arch/m68k/arch_int.cpp b/src/system/kernel/arch/m68k/arch_int.cpp index c1d05ce919..73f7b65efd 100644 --- a/src/system/kernel/arch/m68k/arch_int.cpp +++ b/src/system/kernel/arch/m68k/arch_int.cpp @@ -334,6 +334,7 @@ arch_int_init(kernel_args *args) vbr = args->arch_args.phys_vbr; /* point VBR to the new table */ asm volatile ("movec %0,%%vbr" : : "r"(vbr):); + return B_OK; } @@ -341,7 +342,9 @@ arch_int_init(kernel_args *args) status_t arch_int_init_post_vm(kernel_args *args) { - return B_OK; + status_t err; + err = M68KPlatform::Default()->InitPIC(args); + return err; } @@ -502,9 +505,6 @@ probe_pic_device(device_node_handle node, PICModuleList &picModules) status_t arch_int_init_post_device_manager(struct kernel_args *args) { - status_t err; - err = M68KPlatform::Default()->InitPIC(args); - return err; #if 0 /* PIC modules */ // get the interrupt controller driver modules PICModuleList picModules; diff --git a/src/system/kernel/platform/atari_m68k/platform.cpp b/src/system/kernel/platform/atari_m68k/platform.cpp index d5bd0aa39b..df3b7eec4a 100644 --- a/src/system/kernel/platform/atari_m68k/platform.cpp +++ b/src/system/kernel/platform/atari_m68k/platform.cpp @@ -23,6 +23,11 @@ #define MFP0_VECTOR_BASE 64 #define MFP1_VECTOR_BASE (MFP0_VECTOR_BASE+16) + +#define RTC_BASE 0xFFFF8960 + +#define RTC_VECTOR (MFP1_VECTOR_BASE+14) + // ? #define SCC_C0_VECTOR_BASE (MFP1_VECTOR_BASE+16) // ?? @@ -89,6 +94,19 @@ public: int fVector; }; + class RTC { + public: + RTC(uint32 base, int vector); + ~RTC(); + + uint32 Base() const { return fBase; }; + int Vector() const { return fVector; }; + + private: + uint32 fBase; + int fVector; + }; + M68KAtari(); virtual ~M68KAtari(); @@ -121,10 +139,10 @@ private: MFP *MFPForIrq(int irq); static int32 MFPTimerInterrupt(void *data); - int fRTC; - MFP *fMFP[2]; + RTC *fRTC; + // native features (ARAnyM emulator) uint32 (*nfGetID)(const char *name); int32 (*nfCall)(uint32 ID, ...); @@ -203,13 +221,30 @@ M68KAtari::MFP::AcknowledgeIOInterrupt(int irq) } +// #pragma mark - M68KAtari::RTc + + +static char sRTCBuffer[sizeof(M68KAtari::RTC)]; + +// constructor +M68KAtari::RTC::RTC(uint32 base, int vector) +{ + fBase = base; + fVector = vector; +} + + +M68KAtari::RTC::~RTC() +{ +} + + // #pragma mark - M68KAtari // constructor M68KAtari::M68KAtari() - : M68KPlatform(B_ATARI_PLATFORM, M68K_PLATFORM_ATARI), - fRTC(-1) + : M68KPlatform(B_ATARI_PLATFORM, M68K_PLATFORM_ATARI) { } @@ -269,7 +304,6 @@ M68KAtari::InitPostVM(struct kernel_args *kernelArgs) status_t M68KAtari::InitPIC(struct kernel_args *kernelArgs) { - panic("WRITEME"); fMFP[0] = new(sMFP0Buffer) M68KAtari::MFP(MFP0_BASE, MFP0_VECTOR_BASE); //if (kernelArgs->arch_args.machine == /*TT*/) { fMFP[1] = new(sMFP1Buffer) M68KAtari::MFP(MFP1_BASE, MFP1_VECTOR_BASE); @@ -282,8 +316,8 @@ status_t M68KAtari::InitRTC(struct kernel_args *kernelArgs, struct real_time_data *data) { - panic("WRITEME"); - return B_NO_INIT; + fRTC = new(sRTCBuffer) M68KAtari::RTC(RTC_BASE, RTC_VECTOR); +#warning M68K: FIXME return B_OK; } @@ -496,12 +530,14 @@ M68KAtari::AcknowledgeIOInterrupt(int irq) void M68KAtari::SetHardwareRTC(uint32 seconds) { +#warning M68K: WRITEME } uint32 M68KAtari::GetHardwareRTC() { +#warning M68K: WRITEME return 0; }