root/headers/private/kernel/arch/mipsel/arch_cpu.h
/*
 * Copyright 2009 Haiku Inc.
 * All rights reserved. Distributed under the terms of the MIT License.
 */
#ifndef _KERNEL_ARCH_MIPSEL_CPU_H
#define _KERNEL_ARCH_MIPSEL_CPU_H


#warning IMPLEMENT arch_cpu.h


#include <arch/mipsel/arch_thread_types.h>
#include <kernel.h>


struct iframe {
#warning struct iframe
        uint32 r31;
        uint32 r30;
        uint32 r29;
        uint32 r28;
        uint32 r27;
        uint32 r26;
        uint32 r25;
        uint32 r24;
        uint32 r23;
        uint32 r22;
        uint32 r21;
        uint32 r20;
        uint32 r19;
        uint32 r18;
        uint32 r17;
        uint32 r16;
        uint32 r15;
        uint32 r14;
        uint32 r13;
        uint32 r12;
        uint32 r11;
        uint32 r10;
        uint32 r9;
        uint32 r8;
        uint32 r7;
        uint32 r6;
        uint32 r5;
        uint32 r4;
        uint32 r3;
        uint32 r2;
        uint32 r1;
        uint32 r0;
};

typedef struct arch_cpu_info {
        int null;
} arch_cpu_info;


#ifdef __cplusplus
extern "C" {
#endif


extern long long get_time_base(void);

void __mipsel_setup_system_time(vint32 *cvFactor);
        // defined in libroot: os/arch/system_time.c

int64 __mipsel_get_time_base(void);
        // defined in libroot: os/arch/system_time_asm.S

extern void mipsel_context_switch(void **_oldStackPointer,
        void *newStackPointer);

extern bool mipsel_set_fault_handler(addr_t *handlerLocation, addr_t handler)
        __attribute__((noinline));

#ifdef __cplusplus
}
#endif


/* TODO */
enum mipsel_processor_version {
        FAKE1           = 0x0001,
        FAKE2           = 0x0002,
        FAKE3           = 0x0003,
};


#endif  /* _KERNEL_ARCH_MIPSEL_CPU_H */