Headers (unfinished) for an m68k port (yes I do know it's useless, it's just for the l33t factor).

Based on ppc/x86 headers from r22648.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22649 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
François Revol 2007-10-21 23:42:09 +00:00
parent fe2aaee7ec
commit 0b2adc3d8e
20 changed files with 914 additions and 0 deletions

View File

@ -0,0 +1,17 @@
/*
* Copyright 2004, Axel Dörfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License.
*/
#ifndef _KERNEL_ARCH_M68K_CONFIG_H
#define _KERNEL_ARCH_M68K_CONFIG_H
#define FUNCTION_CALL_PARAMETER_ALIGNMENT_TYPE unsigned int
#define STACK_GROWS_DOWNWARDS
//#define ATOMIC_FUNCS_ARE_SYSCALLS
#define ATOMIC64_FUNCS_ARE_SYSCALLS
#endif /* _KERNEL_ARCH_M68K_CONFIG_H */

View File

@ -0,0 +1,258 @@
/*
** Copyright 2003-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
** Distributed under the terms of the Haiku License.
*/
#ifndef _KERNEL_ARCH_M68K_CPU_H
#define _KERNEL_ARCH_M68K_CPU_H
#include <arch/m68k/arch_thread_types.h>
#include <kernel.h>
#define PAGE_SIZE 4096
struct iframe {
uint32 d7;
/* XXX: order depends on movem */
uint32 a0;
/* 030 ex frame: */
uint16 sr;
uint32 pc;
uint16 vector; /* [12:15] frame type */
/* other stuff depending on frame type... do we really need that ? */
union {
struct {
uint32 inst;
} format2 _PACKED;
struct {
uint32 inst;
uint16 intregs[4];
} format9 _PACKED;
struct {
uint16 intregs[1];
uint16 ssw;
uint16 instpipe_c;
uint16 instpipe_b;
uint32 faultaddr;
uint16 intregs2[2];
uint32 dataout;
uint16 intregs3[2];
} formata _PACKED;
struct {
uint16 intregs[1];
uint16 ssw;
uint16 instpipe_c;
uint16 instpipe_b;
uint32 faultaddr;
uint16 intregs2[2];
uint32 dataout;
uint16 intregs3[4];
uint32 stbaddr;
uint16 intregs4[2];
uint32 datain;
uint16 intregs5[3];
uint16 intinfo;
uint16 intregs6[18];
} formatb _PACKED;
};
/* uint32 vector;
uint32 srr0;
uint32 srr1;
uint32 dar;
uint32 dsisr;
uint32 lr;
uint32 cr;
uint32 xer;
uint32 ctr;
uint32 fpscr;
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;
double f31;
double f30;
double f29;
double f28;
double f27;
double f26;
double f25;
double f24;
double f23;
double f22;
double f21;
double f20;
double f19;
double f18;
double f17;
double f16;
double f15;
double f14;
double f13;
double f12;
double f11;
double f10;
double f9;
double f8;
double f7;
double f6;
double f5;
double f4;
double f3;
double f2;
double f1;
double f0;*/
} _PACKED;
enum machine_state {
MSR_EXCEPTIONS_ENABLED = 1L << 15, // EE
MSR_PRIVILEGE_LEVEL = 1L << 14, // PR
MSR_FP_AVAILABLE = 1L << 13, // FP
MSR_MACHINE_CHECK_ENABLED = 1L << 12, // ME
MSR_EXCEPTION_PREFIX = 1L << 6, // IP
MSR_INST_ADDRESS_TRANSLATION = 1L << 5, // IR
MSR_DATA_ADDRESS_TRANSLATION = 1L << 4, // DR
};
struct block_address_translation;
typedef struct arch_cpu_info {
int null;
} arch_cpu_info;
#ifdef __cplusplus
extern "C" {
#endif
extern uint32 get_sdr1(void);
extern void set_sdr1(uint32 value);
extern uint32 get_sr(void *virtualAddress);
extern void set_sr(void *virtualAddress, uint32 value);
extern uint32 get_msr(void);
extern uint32 set_msr(uint32 value);
extern uint32 get_pvr(void);
extern void set_ibat0(struct block_address_translation *bat);
extern void set_ibat1(struct block_address_translation *bat);
extern void set_ibat2(struct block_address_translation *bat);
extern void set_ibat3(struct block_address_translation *bat);
extern void set_dbat0(struct block_address_translation *bat);
extern void set_dbat1(struct block_address_translation *bat);
extern void set_dbat2(struct block_address_translation *bat);
extern void set_dbat3(struct block_address_translation *bat);
extern void get_ibat0(struct block_address_translation *bat);
extern void get_ibat1(struct block_address_translation *bat);
extern void get_ibat2(struct block_address_translation *bat);
extern void get_ibat3(struct block_address_translation *bat);
extern void get_dbat0(struct block_address_translation *bat);
extern void get_dbat1(struct block_address_translation *bat);
extern void get_dbat2(struct block_address_translation *bat);
extern void get_dbat3(struct block_address_translation *bat);
extern void reset_ibats(void);
extern void reset_dbats(void);
//extern void sethid0(unsigned int val);
//extern unsigned int getl2cr(void);
//extern void setl2cr(unsigned int val);
extern long long get_time_base(void);
void __m68k_setup_system_time(vint32 *cvFactor);
// defined in libroot: os/arch/system_time.c
int64 __m68k_get_time_base(void);
// defined in libroot: os/arch/system_time_asm.S
extern void m68k_context_switch(void **_oldStackPointer, void *newStackPointer);
extern bool m68k_set_fault_handler(addr_t *handlerLocation, addr_t handler)
__attribute__((noinline));
#ifdef __cplusplus
}
#endif
#define eieio() asm volatile("eieio")
#define isync() asm volatile("isync")
#define tlbsync() asm volatile("tlbsync")
#define ppc_sync() asm volatile("sync")
#define tlbia() asm volatile("tlbia")
#define tlbie(addr) asm volatile("tlbie %0" :: "r" (addr))
// PowerPC processor version (the upper 16 bits of the PVR).
enum m68k_processor_version {
MPC601 = 0x0001,
MPC603 = 0x0003,
MPC604 = 0x0004,
MPC602 = 0x0005,
MPC603e = 0x0006,
MPC603ev = 0x0007,
MPC750 = 0x0008,
MPC604ev = 0x0009,
MPC7400 = 0x000c,
MPC620 = 0x0014,
IBM403 = 0x0020,
IBM401A1 = 0x0021,
IBM401B2 = 0x0022,
IBM401C2 = 0x0023,
IBM401D2 = 0x0024,
IBM401E2 = 0x0025,
IBM401F2 = 0x0026,
IBM401G2 = 0x0027,
IBMPOWER3 = 0x0041,
MPC860 = 0x0050,
MPC8240 = 0x0081,
IBM405GP = 0x4011,
IBM405L = 0x4161,
IBM750FX = 0x7000,
MPC7450 = 0x8000,
MPC7455 = 0x8001,
MPC7457 = 0x8002,
MPC7447A = 0x8003,
MPC7448 = 0x8004,
MPC7410 = 0x800c,
MPC8245 = 0x8081,
};
/*
Use of (some) special purpose registers.
SPRG0: per CPU physical address pointer to an ppc_cpu_exception_context
structure
SPRG1: scratch
SPRG2: current struct thread*
SPRG3: TLS base pointer (only for userland threads)
*/
#endif /* _KERNEL_ARCH_PPC_CPU_H */

View File

@ -0,0 +1,49 @@
/*
** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
** Distributed under the terms of the OpenBeOS License.
*/
#ifndef _KERNEL_ARCH_M68K_ELF_H
#define _KERNEL_ARCH_M68K_ELF_H
/* relocation types */
#define R_PPC_NONE 0
#define R_PPC_ADDR32 1
#define R_PPC_ADDR24 2
#define R_PPC_ADDR16 3
#define R_PPC_ADDR16_LO 4
#define R_PPC_ADDR16_HI 5
#define R_PPC_ADDR16_HA 6
#define R_PPC_ADDR14 7
#define R_PPC_ADDR14_BRTAKEN 8
#define R_PPC_ADDR14_BRNTAKEN 9
#define R_PPC_REL24 10
#define R_PPC_REL14 11
#define R_PPC_REL14_BRTAKEN 12
#define R_PPC_REL14_BRNTAKEN 13
#define R_PPC_GOT16 14
#define R_PPC_GOT16_LO 15
#define R_PPC_GOT16_HI 16
#define R_PPC_GOT16_HA 17
#define R_PPC_PLTREL24 18
#define R_PPC_COPY 19
#define R_PPC_GLOB_DAT 20
#define R_PPC_JMP_SLOT 21
#define R_PPC_RELATIVE 22
#define R_PPC_LOCAL24PC 23
#define R_PPC_UADDR32 24
#define R_PPC_UADDR16 25
#define R_PPC_REL32 26
#define R_PPC_PLT32 27
#define R_PPC_PLTREL32 28
#define R_PPC_PLT16_LO 29
#define R_PPC_PLT16_HI 30
#define R_PPC_PLT16_HA 31
#define R_PPC_SDAREL16 32
#define R_PPC_SECTOFF 33
#define R_PPC_SECTOFF_LO 34
#define R_PPC_SECTOFF_HI 35
#define R_PPC_SECTOFF_HA 36
#define R_PPC_ADDR30 37
#endif /* _KERNEL_ARCH_M68K_ELF_H */

View File

@ -0,0 +1,46 @@
/*
* Copyright 2005-2006, Haiku Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Axel Dörfler <axeld@pinc-software.de>
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
*/
#ifndef _KERNEL_ARCH_M68K_INT_H
#define _KERNEL_ARCH_M68K_INT_H
#include <SupportDefs.h>
#define NUM_IO_VECTORS 256
/* The sprg0 register of each CPU points to the physical address of such
a structure. So it is at hand in the early exception handling code.
*/
struct m68k_cpu_exception_context {
void *kernel_handle_exception; // exception handler routine in the
// kernel
void *exception_context; // the virtual address of this
// structure
void *kernel_stack; // kernel stack for the current thread
uint32 scratch[8]; // scratch memory for free use in the
// early exception handling code
};
#ifdef __cplusplus
extern "C" {
#endif
struct m68k_cpu_exception_context *m68k_get_cpu_exception_context(int cpu);
void m68k_set_current_cpu_exception_context(
struct m68k_cpu_exception_context *context);
// only called once per CPU
#ifdef __cplusplus
}
#endif
#endif /* _KERNEL_ARCH_M68K_INT_H */

View File

@ -0,0 +1,30 @@
/*
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
#ifndef _KERNEL_ARCH_M68K_KERNEL_H
#define _KERNEL_ARCH_M68K_KERNEL_H
#include <arch/cpu.h>
// memory layout
#define KERNEL_BASE 0x80000000
#define KERNEL_SIZE 0x80000000
#define KERNEL_TOP (KERNEL_BASE + (KERNEL_SIZE - 1))
/*
** User space layout is a little special:
** The user space does not completely cover the space not covered by the kernel.
** This is accomplished by starting user space at 1Mb and running to 64kb short of kernel space.
** The lower 1Mb reserved spot makes it easy to find null pointer references and guarantees a
** region wont be placed there. The 64kb region assures a user space thread cannot pass
** a buffer into the kernel as part of a syscall that would cross into kernel space.
*/
#define USER_BASE 0x100000
#define USER_SIZE (0x80000000 - (0x10000 + 0x100000))
#define USER_TOP (USER_BASE + USER_SIZE)
#define USER_STACK_REGION 0x70000000
#define USER_STACK_REGION_SIZE (USER_BASE + (USER_SIZE - USER_STACK_REGION))
#endif /* _KERNEL_ARCH_M68K_KERNEL_H */

View File

@ -0,0 +1,34 @@
/*
** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
** Distributed under the terms of the OpenBeOS License.
*/
#ifndef KERNEL_ARCH_M68K_KERNEL_ARGS_H
#define KERNEL_ARCH_M68K_KERNEL_ARGS_H
#ifndef KERNEL_BOOT_KERNEL_ARGS_H
# error This file is included from <boot/kernel_args.h> only
#endif
#define _PACKED __attribute__((packed))
//#define MAX_VIRTUAL_RANGES_TO_KEEP 32
// kernel args
typedef struct {
// architecture specific
uint64 cpu_frequency;
uint64 bus_frequency;
uint64 time_base_frequency;
addr_range page_table; // virtual address and size of the page table
addr_range exception_handlers;
addr_range framebuffer; // maps where the framebuffer is located, in physical memory
int screen_x, screen_y, screen_depth;
// The virtual ranges we want to keep in the kernel. E.g. those belonging
// to the Open Firmware.
// uint32 num_virtual_ranges_to_keep;
// addr_range virtual_ranges_to_keep[MAX_VIRTUAL_RANGES_TO_KEEP];
} arch_kernel_args;
#endif /* KERNEL_ARCH_M68K_KERNEL_ARGS_H */

View File

@ -0,0 +1,149 @@
/*
** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
** Distributed under the terms of the OpenBeOS License.
*/
#ifndef _KERNEL_ARCH_M68K_MMU_H
#define _KERNEL_ARCH_M68K_MMU_H
#include <SupportDefs.h>
#include <string.h>
#include <arch_cpu.h>
/*** BAT - block address translation ***/
enum bat_length {
BAT_LENGTH_128kB = 0x0000,
BAT_LENGTH_256kB = 0x0001,
BAT_LENGTH_512kB = 0x0003,
BAT_LENGTH_1MB = 0x0007,
BAT_LENGTH_2MB = 0x000f,
BAT_LENGTH_4MB = 0x001f,
BAT_LENGTH_8MB = 0x003f,
BAT_LENGTH_16MB = 0x007f,
BAT_LENGTH_32MB = 0x00ff,
BAT_LENGTH_64MB = 0x01ff,
BAT_LENGTH_128MB = 0x03ff,
BAT_LENGTH_256MB = 0x07ff,
};
enum bat_protection {
BAT_READ_ONLY = 1,
BAT_READ_WRITE = 2,
};
struct block_address_translation {
// upper 32 bit
uint32 page_index : 15; // BEPI, block effective page index
uint32 _reserved0 : 4;
uint32 length : 11;
uint32 kernel_valid : 1; // Vs, Supervisor-state valid
uint32 user_valid : 1; // Vp, User-state valid
// lower 32 bit
uint32 physical_block_number : 15; // BPRN
uint32 write_through : 1; // WIMG
uint32 caching_inhibited : 1;
uint32 memory_coherent : 1;
uint32 guarded : 1;
uint32 _reserved1 : 1;
uint32 protection : 2;
block_address_translation()
{
Clear();
}
void SetVirtualAddress(void *address)
{
page_index = uint32(address) >> 17;
}
void SetPhysicalAddress(void *address)
{
physical_block_number = uint32(address) >> 17;
}
void Clear()
{
memset((void *)this, 0, sizeof(block_address_translation));
}
};
struct segment_descriptor {
uint32 type : 1; // 0 for page translation descriptors
uint32 kernel_protection_key : 1; // Ks, Supervisor-state protection key
uint32 user_protection_key : 1; // Kp, User-state protection key
uint32 no_execute_protection : 1;
uint32 _reserved : 4;
uint32 virtual_segment_id : 24;
segment_descriptor()
{
Clear();
}
segment_descriptor(uint32 value)
{
*((uint32 *)this) = value;
}
void Clear()
{
memset((void *)this, 0, sizeof(segment_descriptor));
}
};
/*** PTE - page table entry ***/
enum pte_protection {
PTE_READ_ONLY = 3,
PTE_READ_WRITE = 2,
};
struct page_table_entry {
// upper 32 bit
uint32 valid : 1;
uint32 virtual_segment_id : 24;
uint32 secondary_hash : 1;
uint32 abbr_page_index : 6;
// lower 32 bit
uint32 physical_page_number : 20;
uint32 _reserved0 : 3;
uint32 referenced : 1;
uint32 changed : 1;
uint32 write_through : 1; // WIMG
uint32 caching_inhibited : 1;
uint32 memory_coherent : 1;
uint32 guarded : 1;
uint32 _reserved1 : 1;
uint32 page_protection : 2;
static uint32 PrimaryHash(uint32 virtualSegmentID, uint32 virtualAddress);
static uint32 SecondaryHash(uint32 virtualSegmentID, uint32 virtualAddress);
static uint32 SecondaryHash(uint32 primaryHash);
};
struct page_table_entry_group {
struct page_table_entry entry[8];
};
extern void m68k_get_page_table(page_table_entry_group **_pageTable, size_t *_size);
extern void m68k_set_page_table(page_table_entry_group *pageTable, size_t size);
static inline segment_descriptor
m68k_get_segment_register(void *virtualAddress)
{
return (segment_descriptor)get_sr(virtualAddress);
}
static inline void
m68k_set_segment_register(void *virtualAddress, segment_descriptor segment)
{
set_sr(virtualAddress, *(uint32 *)&segment);
}
#endif /* _KERNEL_ARCH_M68K_MMU_H */

View File

@ -0,0 +1,52 @@
/*
* Copyright 2006, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
* All rights reserved. Distributed under the terms of the MIT License.
*/
#ifndef _KERNEL_M68K_ARCH_PLATFORM_H
#define _KERNEL_M68K_ARCH_PLATFORM_H
#include <arch/platform.h>
struct real_time_data;
enum m68k_platform_type {
M68K_PLATFORM_AMIGA = 0,
M68K_PLATFORM_APPLE,
M68K_PLATFORM_ATARI /* Falcon */
};
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 InitRTC(struct kernel_args *kernelArgs,
struct real_time_data *data) = 0;
virtual char SerialDebugGetChar() = 0;
virtual void SerialDebugPutChar(char c) = 0;
virtual void SetHardwareRTC(uint32 seconds) = 0;
virtual uint32 GetHardwareRTC() = 0;
virtual void ShutDown(bool reboot) = 0;
private:
m68k_platform_type fPlatformType;
};
} // namespace BPrivate
using BPrivate::M68KPlatform;
#endif // _KERNEL_M68K_ARCH_PLATFORM_H

View File

@ -0,0 +1,36 @@
/*
* Copyright 2006, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
* All rights reserved. Distributed under the terms of the MIT License.
*/
#ifndef _KERNEL_ARCH_REAL_TIME_DATA_H
#define _KERNEL_ARCH_REAL_TIME_DATA_H
#include <StorageDefs.h>
#include <SupportDefs.h>
struct ppc_real_time_data {
vint64 system_time_offset;
};
struct arch_real_time_data {
struct ppc_real_time_data data[2];
vint32 system_time_conversion_factor;
vint32 version;
// Since there're no cheap atomic_{set,get,add}64() on PPC 32 (i.e. one
// that doesn't involve a syscall), we can't have just a single
// system_time_offset and set/get it atomically.
// That's why have our data twice. One set is current (indexed by
// version % 2). When setting the offset, we do that with disabled
// interrupts and protected by a spinlock. We write the new values
// into the other array element and increment the version.
// A reader first reads the version, then the date of interest, and
// finally rechecks the version. If it hasn't changed in the meantime,
// the read value is fine, otherwise it runs the whole procedure again.
//
// system_time_conversion_factor is currently consider constant,
// although that is not necessarily true. We simply don't support
// changing conversion factors at the moment.
};
#endif /* _KERNEL_ARCH_REAL_TIME_DATA_H */

View File

@ -0,0 +1,12 @@
/*
* Copyright 2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _KERNEL_ARCH_M68K_SYSTEM_INFO_H
#define _KERNEL_ARCH_M68K_SYSTEM_INFO_H
/* nothing to be seen here yet */
#endif /* _KRENEL_ARCH_M68K_SYSTEM_INFO_H */

View File

@ -0,0 +1,44 @@
/*
* Copyright 2003-2006, Haiku Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Axel Dörfler <axeld@pinc-software.de>
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
*/
#ifndef _KERNEL_ARCH_M68K_THREAD_H
#define _KERNEL_ARCH_M68K_THREAD_H
#include <arch/cpu.h>
#ifdef __cplusplus
extern "C" {
#endif
void m68k_push_iframe(struct iframe_stack *stack, struct iframe *frame);
void m68k_pop_iframe(struct iframe_stack *stack);
struct iframe *m68k_get_user_iframe(void);
extern inline struct thread *
arch_thread_get_current_thread(void)
{
struct thread *t;
asm volatile("mfsprg2 %0" : "=r"(t));
return t;
}
extern inline void
arch_thread_set_current_thread(struct thread *t)
{
asm volatile("mtsprg2 %0" : : "r"(t));
}
#ifdef __cplusplus
}
#endif
#endif /* _KERNEL_ARCH_M68K_THREAD_H */

View File

@ -0,0 +1,38 @@
/*
** Copyright 2001, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
#ifndef KERNEL_ARCH_M68K_THREAD_TYPES_H
#define KERNEL_ARCH_M68K_THREAD_TYPES_H
#define IFRAME_TRACE_DEPTH 4
struct iframe_stack {
struct iframe *frames[IFRAME_TRACE_DEPTH];
int32 index;
};
// architecture specific thread info
struct arch_thread {
void *sp; // stack pointer
void *interrupt_stack;
// used to track interrupts on this thread
struct iframe_stack iframes;
};
struct arch_team {
// gcc treats empty structures as zero-length in C, but as if they contain
// a char in C++. So we have to put a dummy in to be able to use the struct
// from both in a consistent way.
char dummy;
};
struct arch_fork_arg {
// gcc treats empty structures as zero-length in C, but as if they contain
// a char in C++. So we have to put a dummy in to be able to use the struct
// from both in a consistent way.
char dummy;
};
#endif /* KERNEL_ARCH_M68K_THREAD_TYPES_H */

View File

@ -0,0 +1,17 @@
/*
* Copyright 2005, Axel Dörfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License.
*/
#ifndef _KERNEL_ARCH_M68K_USER_DEBUGGER_H
#define _KERNEL_ARCH_M68K_USER_DEBUGGER_H
struct arch_team_debug_info {
uint32 dummy;
};
struct arch_thread_debug_info {
uint32 dummy;
};
#endif // _KERNEL_ARCH_M68K_USER_DEBUGGER_H

View File

@ -0,0 +1,15 @@
/*
* Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef ARCH_M68K_VM_H
#define ARCH_M68K_VM_H
/* This many pages will be read/written on I/O if possible */
#define NUM_IO_PAGES 4
/* 16 kB */
#define PAGE_SHIFT 12
#endif /* ARCH_M68K_VM_H */

View File

@ -0,0 +1,26 @@
/*
** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
** Distributed under the terms of the OpenBeOS License.
*/
#ifndef _KERNEL_ARCH_M68K_VM_TRANSLATION_MAP_H
#define _KERNEL_ARCH_M68K_VM_TRANSLATION_MAP_H
#include <arch/vm_translation_map.h>
#ifdef __cplusplus
extern "C" {
#endif
void m68k_translation_map_change_asid(vm_translation_map *map);
status_t m68k_map_address_range(addr_t virtualAddress, addr_t physicalAddress,
size_t size);
void m68k_unmap_address_range(addr_t virtualAddress, size_t size);
status_t m68k_remap_address_range(addr_t *virtualAddress, size_t size,
bool unmap);
#ifdef __cplusplus
}
#endif
#endif /* _KERNEL_ARCH_M68K_VM_TRANSLATION_MAP_H */

View File

@ -0,0 +1,8 @@
/*
* Copyright 2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _KERNEL_ARCH_M68K_VM_TYPES_H
#define _KERNEL_ARCH_M68K_VM_TYPES_H
#endif /* _KERNEL_ARCH_M68K_VM_TYPES_H */

View File

@ -0,0 +1,11 @@
/*
** Copyright 2001, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
#ifndef _M68K_CPU_H
#define _M68K_CPU_H
#define PAGE_SIZE 4096
#endif

View File

@ -0,0 +1,11 @@
/*
** Copyright 2001, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
#ifndef _M68K_KTYPES_H
#define _M68K_KTYPES_H
typedef unsigned long addr;
#endif

View File

@ -0,0 +1,43 @@
/*
** Copyright 2001, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
#ifndef _STAGE2_PRIV_H
#define _STAGE2_PRIV_H
#define LOAD_ADDR 0x100000
#define BOOTDIR_ADDR 0x101000
int s2_text_init();
void s2_change_framebuffer_addr(unsigned int address);
void putchar(char c);
void puts(char *str);
int printf(const char *fmt, ...);
int of_init(void *of_entry);
int of_open(const char *node_name);
int of_finddevice(const char *dev);
int of_instance_to_package(int in_handle);
int of_getprop(int handle, const char *prop, void *buf, int buf_len);
int of_setprop(int handle, const char *prop, const void *buf, int buf_len);
int of_read(int handle, void *buf, int buf_len);
int of_write(int handle, void *buf, int buf_len);
int of_seek(int handle, long long pos);
int s2_mmu_init();
void mmu_map_page(unsigned int vsid, unsigned long pa, unsigned long va);;
void syncicache(void *address, int len);
void s2_faults_init(kernel_args *ka);
void getibats(int bats[8]);
void setibats(int bats[8]);
void getdbats(int bats[8]);
void setdbats(int bats[8]);
unsigned int *getsdr1();
void setsdr1(unsigned int sdr);
unsigned int getsr(int sr);
unsigned int getmsr();
void setmsr(unsigned int msr);
#endif

View File

@ -0,0 +1,18 @@
/*
** Copyright 2001, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
#ifndef _M68K_TYPES_H
#define _M68K_TYPES_H
typedef unsigned long long uint64;
typedef long long int64;
typedef unsigned int uint32;
typedef int int32;
typedef unsigned short uint16;
typedef short int16;
typedef unsigned char uint8;
typedef char int8;
#endif