hrev52211 adds 1 changeset to branch 'master'
old head: 58a62dd65fe4ece5fc3b8ff8916f3490723cb177
new head: f2015c2f81a0db6e3063e3da760b20e967a079dd
overview:
https://git.haiku-os.org/haiku/log/?qt=range&q=f2015c2f81a0+%5E58a62dd65fe4
----------------------------------------------------------------------------
f2015c2f81a0: boot/platform/cfe: Remove, unused.
All platforms it was theoretically useful for also have U-Boot.
OK'd by mmu_man.
[ Augustin Cavalier <waddlesplash@xxxxxxxxx> ]
----------------------------------------------------------------------------
Revision: hrev52211
Commit: f2015c2f81a0db6e3063e3da760b20e967a079dd
URL: https://git.haiku-os.org/haiku/commit/?id=f2015c2f81a0
Author: Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date: Sat Aug 11 22:57:25 2018 UTC
----------------------------------------------------------------------------
25 files changed, 2057 deletions(-)
docs/develop/kernel/ports/ppc/cfe.txt | 7 -
headers/private/kernel/boot/platform/cfe/cfe.h | 54 --
.../kernel/boot/platform/cfe/platform_arch.h | 38 --
.../boot/platform/cfe/platform_kernel_args.h | 25 -
.../boot/platform/cfe/platform_stage2_args.h | 15 -
src/system/boot/platform/cfe/Handle.cpp | 86 ---
src/system/boot/platform/cfe/Handle.h | 34 --
src/system/boot/platform/cfe/Jamfile | 37 --
src/system/boot/platform/cfe/arch/Jamfile | 3 -
src/system/boot/platform/cfe/arch/ppc/Jamfile | 19 -
.../platform/cfe/arch/ppc/arch_start_kernel.S | 49 --
src/system/boot/platform/cfe/arch/ppc/cpu.cpp | 32 -
src/system/boot/platform/cfe/arch/ppc/mmu.cpp | 589 -------------------
src/system/boot/platform/cfe/cfe.cpp | 264 ---------
src/system/boot/platform/cfe/console.cpp | 170 ------
src/system/boot/platform/cfe/console.h | 21 -
src/system/boot/platform/cfe/debug.cpp | 46 --
src/system/boot/platform/cfe/devices.cpp | 138 -----
src/system/boot/platform/cfe/heap.cpp | 48 --
src/system/boot/platform/cfe/menu.cpp | 48 --
src/system/boot/platform/cfe/mmu.cpp | 36 --
src/system/boot/platform/cfe/start.cpp | 186 ------
src/system/boot/platform/cfe/support.cpp | 23 -
src/system/boot/platform/cfe/support.h | 17 -
src/system/boot/platform/cfe/video.cpp | 72 ---
----------------------------------------------------------------------------
diff --git a/docs/develop/kernel/ports/ppc/cfe.txt
b/docs/develop/kernel/ports/ppc/cfe.txt
deleted file mode 100644
index 6648cb8919..0000000000
--- a/docs/develop/kernel/ports/ppc/cfe.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-http://www.linux-mips.org/wiki/Common_Firmware_Environment
-http://www.broadcom.com/support/communications_processors/downloads.php
-http://www.broadcom.com/docs/SiByte/README-1.4.2.txt
-http://wiki.openwrt.org/doc/techref/bootloader/cfe
-http://amigaos.net/content/2/what%E2%80%99s-new
-http://lguohan.blogspot.com/2010/03/embedded-powerpc.html
-
diff --git a/headers/private/kernel/boot/platform/cfe/cfe.h
b/headers/private/kernel/boot/platform/cfe/cfe.h
deleted file mode 100644
index f81c4208b5..0000000000
--- a/headers/private/kernel/boot/platform/cfe/cfe.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2011, François Revol, revol@xxxxxxx.
- * Distributed under the terms of the MIT License.
- */
-#ifndef KERNEL_BOOT_PLATFORM_CFE_CFE_H
-#define KERNEL_BOOT_PLATFORM_CFE_CFE_H
-
-
-#include <SupportDefs.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define CFE_EPTSEAL 0x43464531 /* 'CFE1' */
-#define CFE_MAGIC CFE_EPTSEAL
-
-// cfe/include/cfe_timer.h
-#define CFE_HZ 10
-
-/* CFE sources declare this separately in cfe_api.h */
-
-/* (let's hope it's always built-in,
- unlike u-boot's API which never is... */
-
-#define CFE_FLG_COLDSTART 0x00000000
-#define CFE_FLG_WARMSTART 0x00000001
-
-#define CFE_STDHANDLE_CONSOLE 0
-
-int cfe_init(uint64 handle, uint64 entry);
-
-int cfe_exit(int32 warm, int32 status);
-uint64 cfe_getticks(void);
-
-int cfe_enumdev(int idx, char *name, int namelen);
-
-int cfe_getstdhandle(int flag);
-int cfe_open(const char *name);
-int cfe_close(int handle);
-
-int cfe_readblk(int handle, int64 offset, void *buffer, int length);
-int cfe_writeblk(int handle, int64 offset, const void *buffer, int length);
-
-#define CFE_OK 0
-#define CFE_ERR -1
-
-status_t cfe_error(int32 err);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* KERNEL_BOOT_PLATFORM_CFE_CFE_H */
diff --git a/headers/private/kernel/boot/platform/cfe/platform_arch.h
b/headers/private/kernel/boot/platform/cfe/platform_arch.h
deleted file mode 100644
index f80ec52b9f..0000000000
--- a/headers/private/kernel/boot/platform/cfe/platform_arch.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2003, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx. All rights reserved.
- * Distributed under the terms of the MIT License.
- */
-#ifndef KERNEL_BOOT_PLATFORM_CFE_ARCH_H
-#define KERNEL_BOOT_PLATFORM_CFE_ARCH_H
-
-
-#include <SupportDefs.h>
-
-struct kernel_args;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* memory management */
-
-extern status_t arch_set_callback(void);
-extern void *arch_mmu_allocate(void *address, size_t size,
- uint8 protection, bool exactAddress);
-extern status_t arch_mmu_free(void *address, size_t size);
-extern status_t arch_mmu_init(void);
-
-/* CPU */
-
-extern status_t boot_arch_cpu_init(void);
-
-/* kernel start */
-
-status_t arch_start_kernel(struct kernel_args *kernelArgs,
- addr_t kernelEntry, addr_t kernelStackTop);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* KERNEL_BOOT_PLATFORM_CFE_ARCH_H */
diff --git a/headers/private/kernel/boot/platform/cfe/platform_kernel_args.h
b/headers/private/kernel/boot/platform/cfe/platform_kernel_args.h
deleted file mode 100644
index 90cab9c2f9..0000000000
--- a/headers/private/kernel/boot/platform/cfe/platform_kernel_args.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2003, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx. All rights reserved.
- * Distributed under the terms of the MIT License.
- */
-#ifndef KERNEL_BOOT_PLATFORM_CFE_KERNEL_ARGS_H
-#define KERNEL_BOOT_PLATFORM_CFE_KERNEL_ARGS_H
-
-
-#ifndef KERNEL_BOOT_KERNEL_ARGS_H
-# error This file is included from <boot/kernel_args.h> only
-#endif
-
-#define SMP_MAX_CPUS 4
-
-#define MAX_PHYSICAL_MEMORY_RANGE 4
-#define MAX_PHYSICAL_ALLOCATED_RANGE 8
-#define MAX_VIRTUAL_ALLOCATED_RANGE 32
-
-
-typedef struct {
- uint64 cfe_entry; // pointer but always 64bit
- //XXX:char rtc_path[128];
-} platform_kernel_args;
-
-#endif /* KERNEL_BOOT_PLATFORM_CFE_KERNEL_ARGS_H */
diff --git a/headers/private/kernel/boot/platform/cfe/platform_stage2_args.h
b/headers/private/kernel/boot/platform/cfe/platform_stage2_args.h
deleted file mode 100644
index fdcb2ae405..0000000000
--- a/headers/private/kernel/boot/platform/cfe/platform_stage2_args.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright 2003, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx. All rights reserved.
- * Distributed under the terms of the MIT License.
- */
-#ifndef KERNEL_BOOT_PLATFORM_CFE_STAGE2_ARGS_H
-#define KERNEL_BOOT_PLATFORM_CFE_STAGE2_ARGS_H
-
-#ifndef KERNEL_BOOT_STAGE2_ARGS_H
-# error This file is included from <boot/stage2_args.h> only
-#endif
-
-struct platform_stage2_args {
-};
-
-#endif /* KERNEL_BOOT_PLATFORM_CFE_STAGE2_ARGS_H */
diff --git a/src/system/boot/platform/cfe/Handle.cpp
b/src/system/boot/platform/cfe/Handle.cpp
deleted file mode 100644
index b648df79f6..0000000000
--- a/src/system/boot/platform/cfe/Handle.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2003, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
- * All rights reserved. Distributed under the terms of the MIT License.
- */
-
-
-#include "Handle.h"
-
-#include <SupportDefs.h>
-
-#include <boot/platform/cfe/cfe.h>
-#include <util/kernel_cpp.h>
-
-
-Handle::Handle(int handle, bool takeOwnership)
- :
- fHandle(handle),
- fOwnHandle(takeOwnership)
-{
-}
-
-
-Handle::Handle(void)
- :
- fHandle(0)
-{
-}
-
-
-Handle::~Handle()
-{
- if (fOwnHandle)
- cfe_close(fHandle);
-}
-
-
-void
-Handle::SetHandle(int handle, bool takeOwnership)
-{
- if (fHandle && fOwnHandle)
- cfe_close(fHandle);
-
- fHandle = handle;
- fOwnHandle = takeOwnership;
-}
-
-
-ssize_t
-Handle::ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize)
-{
- int32 err;
- if (pos == -1)
- pos = 0;//XXX
- err = cfe_readblk(fHandle, pos, buffer, bufferSize);
-
- if (err < 0)
- return cfe_error(err);
-
- return err;
-}
-
-
-ssize_t
-Handle::WriteAt(void *cookie, off_t pos, const void *buffer,
- size_t bufferSize)
-{
- int32 err;
- if (pos == -1)
- pos = 0;//XXX
- err = cfe_writeblk(fHandle, pos, buffer, bufferSize);
-
- if (err < 0)
- return cfe_error(err);
-
- return err;
-}
-
-
-off_t
-Handle::Size() const
-{
- // ToDo: fix this!
- return 1024LL * 1024 * 1024 * 1024;
- // 1024 GB
-}
-
diff --git a/src/system/boot/platform/cfe/Handle.h
b/src/system/boot/platform/cfe/Handle.h
deleted file mode 100644
index 937b801bb4..0000000000
--- a/src/system/boot/platform/cfe/Handle.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2003, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx. All rights reserved.
- * Distributed under the terms of the MIT License.
- */
-#ifndef HANDLE_H
-#define HANDLE_H
-
-
-#include <boot/vfs.h>
-
-
-#ifdef __cplusplus
-
-class Handle : public ConsoleNode {
- public:
- Handle(int handle, bool takeOwnership = true);
- Handle();
- virtual ~Handle();
-
- void SetHandle(int handle, bool takeOwnership = true);
-
- virtual ssize_t ReadAt(void *cookie, off_t pos, void *buffer,
size_t bufferSize);
- virtual ssize_t WriteAt(void *cookie, off_t pos, const void
*buffer, size_t bufferSize);
-
- virtual off_t Size() const;
-
- protected:
- int fHandle;
- bool fOwnHandle;
-};
-
-#endif /* __cplusplus */
-
-#endif /* HANDLE_H */
diff --git a/src/system/boot/platform/cfe/Jamfile
b/src/system/boot/platform/cfe/Jamfile
deleted file mode 100644
index 7f54c77414..0000000000
--- a/src/system/boot/platform/cfe/Jamfile
+++ /dev/null
@@ -1,37 +0,0 @@
-SubDir HAIKU_TOP src system boot platform cfe ;
-
-SubDirC++Flags -D_BOOT_MODE -fno-rtti ;
-
-UsePrivateHeaders [ FDirName graphics common ] ;
-
-SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src add-ons accelerants common ] ;
-
-BootMergeObject boot_platform_cfe.o :
- console.cpp
- debug.cpp
- devices.cpp
- Handle.cpp
- heap.cpp
- menu.cpp
- mmu.cpp
- #network.cpp
- #real_time_clock.cpp
- start.cpp
- support.cpp
- video.cpp
-
- cfe.cpp
- #cfe_devices.cpp
-
- :
- :
- boot_platform_generic.a
- boot_platform_cfe_$(TARGET_ARCH).a
-;
-
-SEARCH on [ FGristFiles $(genericPlatformSources) ]
- = [ FDirName $(HAIKU_TOP) src system boot platform generic ] ;
-#SEARCH on [ FGristFiles cfe.cpp cfe_devices.cpp ]
-# = [ FDirName $(HAIKU_TOP) src system kernel platform cfe ] ;
-
-SubInclude HAIKU_TOP src system boot platform cfe arch ;
diff --git a/src/system/boot/platform/cfe/arch/Jamfile
b/src/system/boot/platform/cfe/arch/Jamfile
deleted file mode 100644
index 6212c17422..0000000000
--- a/src/system/boot/platform/cfe/arch/Jamfile
+++ /dev/null
@@ -1,3 +0,0 @@
-SubDir HAIKU_TOP src system boot platform cfe arch ;
-
-SubInclude HAIKU_TOP src system boot platform cfe arch $(TARGET_ARCH) ;
diff --git a/src/system/boot/platform/cfe/arch/ppc/Jamfile
b/src/system/boot/platform/cfe/arch/ppc/Jamfile
deleted file mode 100644
index 5bace2e838..0000000000
--- a/src/system/boot/platform/cfe/arch/ppc/Jamfile
+++ /dev/null
@@ -1,19 +0,0 @@
-SubDir HAIKU_TOP src system boot platform cfe arch ppc ;
-
-SubDirHdrs $(HAIKU_TOP) src system boot platform $(TARGET_BOOT_PLATFORM) ;
-UsePrivateSystemHeaders ;
-UsePrivateHeaders kernel [ FDirName kernel arch $(TARGET_KERNEL_ARCH) ]
- [ FDirName kernel boot platform $(HAIKU_BOOT_PLATFORM) ] ;
-
-SubDirC++Flags -fno-rtti ;
-
-BootStaticLibrary boot_platform_cfe_ppc :
- arch_mmu.cpp
- arch_cpu_asm.S
- arch_start_kernel.S
- cpu.cpp
- mmu.cpp
-;
-
-SEARCH on [ FGristFiles arch_cpu_asm.S arch_mmu.cpp ]
- = [ FDirName $(HAIKU_TOP) src system kernel arch $(TARGET_KERNEL_ARCH) ] ;
diff --git a/src/system/boot/platform/cfe/arch/ppc/arch_start_kernel.S
b/src/system/boot/platform/cfe/arch/ppc/arch_start_kernel.S
deleted file mode 100644
index 2156e1d7a8..0000000000
--- a/src/system/boot/platform/cfe/arch/ppc/arch_start_kernel.S
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2005, Ingo Weinhold <bonefish@xxxxxxxxxxxxxxx>.
- * All rights reserved. Distributed under the terms of the MIT License.
- */
-
-#define FUNCTION(x) .global x; .type x,@function; x
-
-/* status_t arch_start_kernel(struct kernel_args *kernelArgs,
- addr_t kernelEntry, addr_t kernelStackTop);
-
- r3 - kernelArgs
- r4 - kernelEntry
- r5 - kernelStackTop
-*/
-FUNCTION(arch_start_kernel):
- // push a stack frame
- stwu %r1, -32(%r1)
- mflr %r0
- stw %r0, 36(%r1)
-
- // save the old stack pointer in r29
- stw %r29, 20(%r1)
- mr %r29, %r1
-
- // set up the kernel stack
- subi %r1, %r5, 16
-
- // clear the pointer to the previous frame
- li %r0, 0
- stw %r0, 0(%r1)
-
- // enter the kernel
- mtlr %r4
- li %r4, 0
- blrl
-
- /* Actually we should never get here, but at least for debugging
purposes
- it's quite nice to return in an orderly manner. */
-
- // reset the boot loader stack
- mr %r1, %r29
- lwz %r29, 20(%r1)
-
- // pop the stack frame
- lwz %r0, 36(%r1)
- mtlr %r0
- addi %r1, %r1, 32
- blr
-
diff --git a/src/system/boot/platform/cfe/arch/ppc/cpu.cpp
b/src/system/boot/platform/cfe/arch/ppc/cpu.cpp
deleted file mode 100644
index 05ffdddc5b..0000000000
--- a/src/system/boot/platform/cfe/arch/ppc/cpu.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2005, Ingo Weinhold <bonefish@xxxxxxxxxxxxxxx>.
- * All rights reserved. Distributed under the terms of the MIT License.
- */
-
-#include <boot/platform/cfe/platform_arch.h>
-
-#include <stdio.h>
-
-#include <KernelExport.h>
-
-#include <boot/kernel_args.h>
-#include <boot/stage2.h>
-#include <kernel.h>
-//#include <platform/cfe/devices.h>
-#include <boot/platform/cfe/cfe.h>
-
-#define TRACE_CPU
-#ifdef TRACE_CPU
-# define TRACE(x) dprintf x
-#else
-# define TRACE(x) ;
-#endif
-
-
-status_t
-boot_arch_cpu_init(void)
-{
-#warning PPC:TODO
- return B_ERROR;
-}
-
diff --git a/src/system/boot/platform/cfe/arch/ppc/mmu.cpp
b/src/system/boot/platform/cfe/arch/ppc/mmu.cpp
deleted file mode 100644
index 68c709ee74..0000000000
--- a/src/system/boot/platform/cfe/arch/ppc/mmu.cpp
+++ /dev/null
@@ -1,589 +0,0 @@
-/*
- * Copyright 2011, François Revol, revol@xxxxxxx.
- * Copyright 2003-2009, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
- * Copyright 2010-2011, Haiku, Inc. All Rights Reserved.
- * All rights reserved. Distributed under the terms of the MIT License.
- *
- * Authors:
- * Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
- * Alexander von Gluck, kallisti5@xxxxxxxxxxx
- */
-
-
-#include <OS.h>
-
-#include <platform_arch.h>
-#include <boot/addr_range.h>
-#include <boot/kernel_args.h>
-#include <boot/platform.h>
-#include <boot/stage2.h>
-#include <boot/stdio.h>
-#include <boot/platform/cfe/cfe.h>
-#include <arch_cpu.h>
-#include <arch_mmu.h>
-#include <kernel.h>
-
-#include "support.h"
-
-
-// set protection to WIMGNPP: -----PP
-// PP: 00 - no access
-// 01 - read only
-// 10 - read/write
-// 11 - read only
-#define PAGE_READ_ONLY 0x01
-#define PAGE_READ_WRITE 0x02
-
-// NULL is actually a possible physical address...
-//#define PHYSINVAL ((void *)-1)
-#define PHYSINVAL NULL
-
-//#define TRACE_MMU
-#ifdef TRACE_MMU
-# define TRACE(x...) dprintf(x)
-#else
-# define TRACE(x...) ;
-#endif
-
-
-segment_descriptor sSegments[16];
-page_table_entry_group *sPageTable;
-uint32 sPageTableHashMask;
-
-
-// begin and end of the boot loader
-extern "C" uint8 __text_begin;
-extern "C" uint8 _end;
-
-
-static status_t
-insert_virtual_range_to_keep(void *start, uint32 size)
-{
- return
insert_address_range(gKernelArgs.arch_args.virtual_ranges_to_keep,
- &gKernelArgs.arch_args.num_virtual_ranges_to_keep,
- MAX_VIRTUAL_RANGES_TO_KEEP, (addr_t)start, size);
-}
-
-
-static status_t
-remove_virtual_range_to_keep(void *start, uint32 size)
-{
- return
remove_address_range(gKernelArgs.arch_args.virtual_ranges_to_keep,
- &gKernelArgs.arch_args.num_virtual_ranges_to_keep,
- MAX_VIRTUAL_RANGES_TO_KEEP, (addr_t)start, size);
-}
-
-
-static status_t
-find_physical_memory_ranges(size_t &total)
-{
- int memory;
- dprintf("checking for memory...\n");
-#warning PPC:TODO
-
- return B_ERROR;
-}
-
-
-static bool
-is_virtual_allocated(void *address, size_t size)
-{
- uint64 foundBase;
- return !get_free_address_range(gKernelArgs.virtual_allocated_range,
- gKernelArgs.num_virtual_allocated_ranges, (addr_t)address, size,
- &foundBase) || foundBase != (addr_t)address;
-}
-
-
-static bool
-is_physical_allocated(void *address, size_t size)
-{
- uint64 foundBase;
- return !get_free_address_range(gKernelArgs.physical_allocated_range,
- gKernelArgs.num_physical_allocated_ranges, (addr_t)address,
size,
- &foundBase) || foundBase != (addr_t)address;
-}
-
-
-static bool
-is_physical_memory(void *address, size_t size)
-{
- return is_address_range_covered(gKernelArgs.physical_memory_range,
- gKernelArgs.num_physical_memory_ranges, (addr_t)address, size);
-}
-
-
-static bool
-is_physical_memory(void *address)
-{
- return is_physical_memory(address, 1);
-}
-
-
-static void
-fill_page_table_entry(page_table_entry *entry, uint32 virtualSegmentID,
- void *virtualAddress, void *physicalAddress, uint8 mode, bool
secondaryHash)
-{
- // lower 32 bit - set at once
- ((uint32 *)entry)[1]
- = (((uint32)physicalAddress / B_PAGE_SIZE) << 12) | mode;
- /*entry->physical_page_number = (uint32)physicalAddress / B_PAGE_SIZE;
- entry->_reserved0 = 0;
- entry->referenced = false;
- entry->changed = false;
- entry->write_through = (mode >> 6) & 1;
- entry->caching_inhibited = (mode >> 5) & 1;
- entry->memory_coherent = (mode >> 4) & 1;
- entry->guarded = (mode >> 3) & 1;
- entry->_reserved1 = 0;
- entry->page_protection = mode & 0x3;*/
- eieio();
- // we need to make sure that the lower 32 bit were
- // already written when the entry becomes valid
-
- // upper 32 bit
- entry->virtual_segment_id = virtualSegmentID;
- entry->secondary_hash = secondaryHash;
- entry->abbr_page_index = ((uint32)virtualAddress >> 22) & 0x3f;
- entry->valid = true;
-}
-
-
-static void
-map_page(void *virtualAddress, void *physicalAddress, uint8 mode)
-{
- uint32 virtualSegmentID
- = sSegments[addr_t(virtualAddress) >> 28].virtual_segment_id;
-
- uint32 hash = page_table_entry::PrimaryHash(virtualSegmentID,
- (uint32)virtualAddress);
- page_table_entry_group *group = &sPageTable[hash & sPageTableHashMask];
-
- for (int32 i = 0; i < 8; i++) {
- // 8 entries in a group
- if (group->entry[i].valid)
- continue;
-
- fill_page_table_entry(&group->entry[i], virtualSegmentID,
- virtualAddress, physicalAddress, mode, false);
- //TRACE("map: va = %p -> %p, mode = %d, hash = %lu\n",
- // virtualAddress, physicalAddress, mode, hash);
- return;
- }
-
- hash = page_table_entry::SecondaryHash(hash);
- group = &sPageTable[hash & sPageTableHashMask];
-
- for (int32 i = 0; i < 8; i++) {
- if (group->entry[i].valid)
- continue;
-
- fill_page_table_entry(&group->entry[i], virtualSegmentID,
- virtualAddress, physicalAddress, mode, true);
- //TRACE("map: va = %p -> %p, mode = %d, second hash = %lu\n",
- // virtualAddress, physicalAddress, mode, hash);
- return;
- }
-
- panic("%s: out of page table entries!\n", __func__);
-}
-
-
-static void
-map_range(void *virtualAddress, void *physicalAddress, size_t size, uint8 mode)
-{
- for (uint32 offset = 0; offset < size; offset += B_PAGE_SIZE) {
- map_page((void *)(uint32(virtualAddress) + offset),
- (void *)(uint32(physicalAddress) + offset), mode);
- }
-}
-
-
-static status_t
-find_allocated_ranges(void *oldPageTable, void *pageTable,
- page_table_entry_group **_physicalPageTable, void **_exceptionHandlers)
-{
- // we have to preserve the OpenFirmware established mappings
- // if we want to continue to use its service after we've
- // taken over (we will probably need less translations once
- // we have proper driver support for the target hardware).
- int mmu;
-#warning PPC:TODO
- return B_ERROR;
-}
-
-
-/*! Computes the recommended minimal page table size as
- described in table 7-22 of the PowerPC "Programming
- Environment for 32-Bit Microprocessors".
- The page table size ranges from 64 kB (for 8 MB RAM)
- to 32 MB (for 4 GB RAM).
-*/
-static size_t
-suggested_page_table_size(size_t total)
-{
- uint32 max = 23;
- // 2^23 == 8 MB
-
- while (max < 32) {
- if (total <= (1UL << max))
- break;
-
- max++;
- }
-
- return 1UL << (max - 7);
- // 2^(23 - 7) == 64 kB
-}
-
-
-static void *
-find_physical_memory_range(size_t size)
-{
- for (uint32 i = 0; i < gKernelArgs.num_physical_memory_ranges; i++) {
- if (gKernelArgs.physical_memory_range[i].size > size)
- return (void
*)(addr_t)gKernelArgs.physical_memory_range[i].start;
- }
- return PHYSINVAL;
-}
-
-
-static void *
-find_free_physical_range(size_t size)
-{
- // just do a simple linear search at the end of the allocated
- // ranges (dumb memory allocation)
- if (gKernelArgs.num_physical_allocated_ranges == 0) {
- if (gKernelArgs.num_physical_memory_ranges == 0)
- return PHYSINVAL;
-
- return find_physical_memory_range(size);
- }
-
- for (uint32 i = 0; i < gKernelArgs.num_physical_allocated_ranges; i++) {
- void *address
- = (void
*)(addr_t)(gKernelArgs.physical_allocated_range[i].start
- + gKernelArgs.physical_allocated_range[i].size);
- if (!is_physical_allocated(address, size)
- && is_physical_memory(address, size))
- return address;
- }
- return PHYSINVAL;
-}
-
-
-static void *
-find_free_virtual_range(void *base, size_t size)
-{
- if (base && !is_virtual_allocated(base, size))
- return base;
-
- void *firstFound = NULL;
- void *firstBaseFound = NULL;
- for (uint32 i = 0; i < gKernelArgs.num_virtual_allocated_ranges; i++) {
- void *address
- = (void
*)(addr_t)(gKernelArgs.virtual_allocated_range[i].start
- + gKernelArgs.virtual_allocated_range[i].size);
- if (!is_virtual_allocated(address, size)) {
- if (!base)
- return address;
-
- if (firstFound == NULL)
- firstFound = address;
- if (address >= base
- && (firstBaseFound == NULL || address <
firstBaseFound)) {
- firstBaseFound = address;
- }
- }
- }
- return (firstBaseFound ? firstBaseFound : firstFound);
-}
-
-
-extern "C" void *
-arch_mmu_allocate(void *_virtualAddress, size_t size, uint8 _protection,
- bool exactAddress)
-{
- // we only know page sizes
- size = ROUNDUP(size, B_PAGE_SIZE);
-
- uint8 protection = 0;
- if (_protection & B_WRITE_AREA)
- protection = PAGE_READ_WRITE;
- else
- protection = PAGE_READ_ONLY;
-
- // If no address is given, use the KERNEL_BASE as base address, since
- // that avoids trouble in the kernel, when we decide to keep the region.
- void *virtualAddress = _virtualAddress;
- if (!virtualAddress)
- virtualAddress = (void*)KERNEL_BASE;
-
- // find free address large enough to hold "size"
- virtualAddress = find_free_virtual_range(virtualAddress, size);
- if (virtualAddress == NULL)
- return NULL;
-
- // fail if the exact address was requested, but is not free
- if (exactAddress && _virtualAddress && virtualAddress !=
_virtualAddress) {
- dprintf("arch_mmu_allocate(): exact address requested, but
virtual "
- "range (base: %p, size: %" B_PRIuSIZE ") is not
free.\n",
- _virtualAddress, size);
- return NULL;
- }
-
- // we have a free virtual range for the allocation, now
- // have a look for free physical memory as well (we assume
- // that a) there is enough memory, and b) failing is fatal
- // so that we don't have to optimize for these cases :)
-
- void *physicalAddress = find_free_physical_range(size);
- if (physicalAddress == PHYSINVAL) {
- dprintf("arch_mmu_allocate(base: %p, size: %" B_PRIuSIZE ") "
- "no free physical address\n", virtualAddress, size);
- return NULL;
- }
-
- // everything went fine, so lets mark the space as used.
-
- dprintf("mmu_alloc: va %p, pa %p, size %" B_PRIuSIZE "\n",
virtualAddress,
- physicalAddress, size);
- insert_virtual_allocated_range((addr_t)virtualAddress, size);
- insert_physical_allocated_range((addr_t)physicalAddress, size);
-
- map_range(virtualAddress, physicalAddress, size, protection);
-
- return virtualAddress;
-}
-
-
-extern "C" status_t
-arch_mmu_free(void *address, size_t size)
-{
- // TODO: implement freeing a region!
- return B_ERROR;
-}
-
-
-static inline void
-invalidate_tlb(void)
-{
- //asm volatile("tlbia");
- // "tlbia" is obviously not available on every CPU...
-
- // Note: this flushes the whole 4 GB address space - it
- // would probably be a good idea to do less here
-
- addr_t address = 0;
- for (uint32 i = 0; i < 0x100000; i++) {
- asm volatile("tlbie %0" : : "r" (address));
- address += B_PAGE_SIZE;
- }
- tlbsync();
-}
-
-
-extern "C" status_t
-arch_set_callback(void)
-{
- // XXX:do we need this for CFE?
- return B_ERROR;
-}
-
-
-extern "C" status_t
-arch_mmu_init(void)
-{
- // get map of physical memory (fill in kernel_args structure)
-
- size_t total;
- if (find_physical_memory_ranges(total) != B_OK) {
- dprintf("Error: could not find physical memory ranges!\n");
- return B_ERROR;
- }
- dprintf("total physical memory = %" B_PRId32 "MB\n", total / (1024 *
1024));
-
- // get OpenFirmware's current page table
-
- page_table_entry_group *oldTable;
- page_table_entry_group *table;
- size_t tableSize;
- ppc_get_page_table(&table, &tableSize);
-
- oldTable = table;
-
- bool realMode = false;
-
- // TODO: read these values out of the OF settings
- // NOTE: I've only ever seen -1 (0xffffffff) for these values in
- // OpenFirmware.. even after loading the bootloader -- Alex
- addr_t realBase = 0;
- addr_t realSize = 0x400000;
-
- // can we just keep the page table?
- size_t suggestedTableSize = suggested_page_table_size(total);
- dprintf("suggested page table size = %" B_PRIuSIZE "\n",
- suggestedTableSize);
- if (tableSize < suggestedTableSize) {
- // nah, we need a new one!
- dprintf("need new page table, size = %" B_PRIuSIZE "!\n",
- suggestedTableSize);
-#if 0//OF
- table = (page_table_entry_group *)of_claim(NULL,
suggestedTableSize,
- suggestedTableSize);
- // KERNEL_BASE would be better as virtual address, but
- // at least with Apple's OpenFirmware, it makes no
- // difference - we will have to remap it later
- if (table == (void *)OF_FAILED) {
- panic("Could not allocate new page table "
- "(size = %" B_PRIuSIZE ")!!\n",
suggestedTableSize);
- return B_NO_MEMORY;
- }
-#endif
- if (table == NULL) {
- // work-around for the broken Pegasos OpenFirmware
- dprintf("broken OpenFirmware detected (claim doesn't
work)\n");
- realMode = true;
-
- addr_t tableBase = 0;
- for (int32 i = 0; tableBase < realBase + realSize * 3;
i++) {
- tableBase = suggestedTableSize * i;
- }
-
- table = (page_table_entry_group *)tableBase;
- }
-
- dprintf("new table at: %p\n", table);
- sPageTable = table;
- tableSize = suggestedTableSize;
- } else {
- // ToDo: we could check if the page table is much too large
- // and create a smaller one in this case (in order to save
- // memory).
- sPageTable = table;
- }
-
- sPageTableHashMask = tableSize / sizeof(page_table_entry_group) - 1;
- if (sPageTable != oldTable)
- memset(sPageTable, 0, tableSize);
-
- // turn off address translation via the page table/segment mechanism,
- // identity map the first 256 MB (where our code/data reside)
-
- dprintf("MSR: %p\n", (void *)get_msr());
-
- #if 0
- block_address_translation bat;
-
- bat.length = BAT_LENGTH_256MB;
- bat.kernel_valid = true;
- bat.memory_coherent = true;
- bat.protection = BAT_READ_WRITE;
-
- set_ibat0(&bat);
- set_dbat0(&bat);
- isync();
- #endif
-
- // initialize segment descriptors, but don't set the registers
- // until we're about to take over the page table - we're mapping
- // pages into our table using these values
-
- for (int32 i = 0; i < 16; i++)
- sSegments[i].virtual_segment_id = i;
-
- // find already allocated ranges of physical memory
- // and the virtual address space
-
- page_table_entry_group *physicalTable = NULL;
- void *exceptionHandlers = (void *)-1;
- if (find_allocated_ranges(oldTable, table, &physicalTable,
- &exceptionHandlers) != B_OK) {
- dprintf("Error: find_allocated_ranges() failed\n");
- return B_ERROR;
- }
-
-#if 0
- block_address_translation bats[8];
- getibats(bats);
- for (int32 i = 0; i < 8; i++) {
- printf("page index %u, length %u, ppn %u\n", bats[i].page_index,
- bats[i].length, bats[i].physical_block_number);
- }
-#endif
-
- if (physicalTable == NULL) {
- dprintf("%s: Didn't find physical address of page table\n",
__func__);
- if (!realMode)
- return B_ERROR;
-
- // Pegasos work-around
- #if 0
- map_range((void *)realBase, (void *)realBase,
- realSize * 2, PAGE_READ_WRITE);
- map_range((void *)(total - realSize), (void *)(total -
realSize),
- realSize, PAGE_READ_WRITE);
- map_range((void *)table, (void *)table, tableSize,
PAGE_READ_WRITE);
- #endif
- insert_physical_allocated_range(realBase, realSize * 2);
- insert_virtual_allocated_range(realBase, realSize * 2);
- insert_physical_allocated_range(total - realSize, realSize);
- insert_virtual_allocated_range(total - realSize, realSize);
- insert_physical_allocated_range((addr_t)table, tableSize);
- insert_virtual_allocated_range((addr_t)table, tableSize);
-
- // QEMU OpenHackware work-around
- insert_physical_allocated_range(0x05800000, 0x06000000 -
0x05800000);
- insert_virtual_allocated_range(0x05800000, 0x06000000 -
0x05800000);
-
- physicalTable = table;
- }
-
- if (exceptionHandlers == (void *)-1) {
- // TODO: create mapping for the exception handlers
- dprintf("Error: no mapping for the exception handlers!\n");
- }
-
- // Set the Open Firmware memory callback. From now on the Open Firmware
- // will ask us for memory.
- arch_set_callback();
-
- // set up new page table and turn on translation again
-
- for (int32 i = 0; i < 16; i++) {
- ppc_set_segment_register((void *)(i * 0x10000000),
sSegments[i]);
- // one segment describes 256 MB of memory
- }
-
- ppc_set_page_table(physicalTable, tableSize);
- invalidate_tlb();
-
- if (!realMode) {
- // clear BATs
- reset_ibats();
- reset_dbats();
- ppc_sync();
- isync();
- }
-
- set_msr(MSR_MACHINE_CHECK_ENABLED | MSR_FP_AVAILABLE
- | MSR_INST_ADDRESS_TRANSLATION | MSR_DATA_ADDRESS_TRANSLATION);
-
- // set kernel args
-
- dprintf("virt_allocated: %" B_PRIu32 "\n",
- gKernelArgs.num_virtual_allocated_ranges);
- dprintf("phys_allocated: %" B_PRIu32 "\n",
- gKernelArgs.num_physical_allocated_ranges);
- dprintf("phys_memory: %" B_PRIu32 "\n",
- gKernelArgs.num_physical_memory_ranges);
-
- gKernelArgs.arch_args.page_table.start = (addr_t)sPageTable;
- gKernelArgs.arch_args.page_table.size = tableSize;
-
- gKernelArgs.arch_args.exception_handlers.start =
(addr_t)exceptionHandlers;
- gKernelArgs.arch_args.exception_handlers.size = B_PAGE_SIZE;
-
- return B_OK;
-}
-
diff --git a/src/system/boot/platform/cfe/cfe.cpp
b/src/system/boot/platform/cfe/cfe.cpp
deleted file mode 100644
index d73ee837c9..0000000000
--- a/src/system/boot/platform/cfe/cfe.cpp
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright 2011, François Revol, revol@xxxxxxx.
- * Distributed under the terms of the MIT License.
- */
-
-
-#include <string.h>
-#include <stdarg.h>
-
-#include <OS.h>
-
-#include <boot/platform.h>
-#include <boot/stage2.h>
-#include <boot/heap.h>
-#include <boot/platform/cfe/cfe.h>
-#include <platform_arch.h>
-
-typedef uint64 ptr64; // for clarity
-
-status_t cfe_error(int32 err)
-{
- // not an error
- if (err > 0)
- return err;
-
- switch (err) {
- case CFE_OK:
- return B_OK;
- case CFE_ERR:
- return B_ERROR;
- //TODO:add cases
- default:
- return B_ERROR;
- }
-}
-
-#define CFE_CMD_FW_GETINFO 0
-#define CFE_CMD_FW_RESTART 1
-#define CFE_CMD_FW_BOOT 2
-#define CFE_CMD_FW_CPUCTL 3
-#define CFE_CMD_FW_GETTIME 4
-#define CFE_CMD_FW_MEMENUM 5
-#define CFE_CMD_FW_FLUSHCACHE 6
-
-#define CFE_CMD_DEV_GETHANDLE 9
-#define CFE_CMD_DEV_ENUM 10
-#define CFE_CMD_DEV_OPEN 11
-#define CFE_CMD_DEV_READ 13
-#define CFE_CMD_DEV_WRITE 14
-#define CFE_CMD_DEV_CLOSE 16
-
-
-struct cfe_xiocb_s {
- cfe_xiocb_s(uint64 fcode, int64 handle = 0, uint64 flags = 0);
-
- uint64 xiocb_fcode;
- int64 xiocb_status;
- int64 xiocb_handle;
- uint64 xiocb_flags;
- uint64 xiocb_psize;
- union {
- struct {
- uint64 buf_offset;
- ptr64 buf_ptr;
- uint64 buf_length;
- uint64 buf_retlen;
- uint64 buf_ioctlcmd;
- } xiocb_buffer;
-/*
- struct {
- } xiocb_inpstat;
-*/
- struct {
- int64 enum_idx;
- ptr64 name_ptr;
- int64 name_length;
- ptr64 val_ptr;
- int64 val_length;
- } xiocb_envbuf;
-/*
- struct {
- } xiocb_cpuctl;
-*/
- struct {
- int64 ticks;
- } xiocb_time;
-/*
- struct {
- } xiocb_meminfo;
- struct {
- } xiocb_fwinfo;
-*/
- struct {
- int64 status;
- } xiocb_exitstat;
- } plist;
-};
-
-typedef struct cfe_xiocb_s cfe_xiocb_t;
-
-cfe_xiocb_s::cfe_xiocb_s(uint64 fcode, int64 handle, uint64 flags)
- : xiocb_fcode(fcode),
- xiocb_status(0),
- xiocb_handle(handle),
- xiocb_flags(flags),
- xiocb_psize(0)
-{
- switch (fcode) {
- case CFE_CMD_FW_GETINFO:
- case CFE_CMD_DEV_READ:
- case CFE_CMD_DEV_WRITE:
- case CFE_CMD_DEV_OPEN:
- xiocb_psize = sizeof(plist.xiocb_buffer);
- break;
- case CFE_CMD_FW_RESTART:
- xiocb_psize = sizeof(plist.xiocb_exitstat);
- break;
- case CFE_CMD_FW_GETTIME:
- xiocb_psize = sizeof(plist.xiocb_time);
- break;
- case CFE_CMD_DEV_ENUM:
- xiocb_psize = sizeof(plist.xiocb_envbuf);
- break;
- //XXX: some more...
- default:
- break;
- }
- memset(&plist, 0, sizeof(plist));
-};
-
-
-// CFE handle
-static uint64 sCFEHandle;
-// CFE entry point
-static uint64 sCFEEntry;
-
-static int cfe_iocb_dispatch(cfe_xiocb_t *xiocb)
-{
- static int (*dispfunc)(intptr_t handle, intptr_t xiocb);
- dispfunc = (int(*)(intptr_t, intptr_t))(void *)sCFEEntry;
- if (dispfunc == NULL)
- return CFE_ERR;
- return (*dispfunc)((intptr_t)sCFEHandle, (intptr_t)xiocb);
-}
-
-int
-cfe_init(uint64 handle, uint64 entry)
-{
- sCFEHandle = handle;
- sCFEEntry = entry;
-
- return CFE_OK;
-}
-
-int
-cfe_exit(int32 warm, int32 status)
-{
- cfe_xiocb_t xiocb(CFE_CMD_FW_RESTART, 0,
- warm ? CFE_FLG_WARMSTART : CFE_FLG_COLDSTART);
- xiocb.plist.xiocb_exitstat.status = status;
-
- cfe_iocb_dispatch(&xiocb);
-
- return xiocb.xiocb_status;
-}
-
-
-int cfe_enumdev(int idx, char *name, int namelen)
-{
- cfe_xiocb_t xiocb(CFE_CMD_DEV_ENUM);
- xiocb.plist.xiocb_envbuf.enum_idx = idx;
- xiocb.plist.xiocb_envbuf.name_ptr = (uint64)name;
- xiocb.plist.xiocb_envbuf.name_length = namelen;
-
- cfe_iocb_dispatch(&xiocb);
-
- return xiocb.xiocb_status;
-}
-
-
-int
-cfe_getstdhandle(int flag)
-{
- cfe_xiocb_t xiocb(CFE_CMD_DEV_GETHANDLE, 0, flag);
-
- cfe_iocb_dispatch(&xiocb);
-
- if (xiocb.xiocb_status < 0);
- return xiocb.xiocb_status;
- return xiocb.xiocb_handle;
-}
-
-
-int
-cfe_open(const char *name)
-{
- cfe_xiocb_t xiocb(CFE_CMD_DEV_OPEN);
- xiocb.plist.xiocb_buffer.buf_offset = 0;
- xiocb.plist.xiocb_buffer.buf_ptr = (uint64)name;
- xiocb.plist.xiocb_buffer.buf_length = strlen(name);
-
- cfe_iocb_dispatch(&xiocb);
-
- if (xiocb.xiocb_status < 0);
- return xiocb.xiocb_status;
- return xiocb.xiocb_handle;
-}
-
-
-int
-cfe_close(int handle)
-{
- cfe_xiocb_t xiocb(CFE_CMD_DEV_CLOSE, handle);
-
- cfe_iocb_dispatch(&xiocb);
-
- return xiocb.xiocb_status;
-}
-
-
-uint64
-cfe_getticks(void)
-{
- cfe_xiocb_t xiocb(CFE_CMD_FW_GETTIME);
-
- cfe_iocb_dispatch(&xiocb);
-
- return xiocb.plist.xiocb_time.ticks;
-}
-
-
-int
-cfe_readblk(int handle, int64 offset, void *buffer, int length)
-{
- cfe_xiocb_t xiocb(CFE_CMD_DEV_READ, handle);
- xiocb.plist.xiocb_buffer.buf_offset = offset;
- xiocb.plist.xiocb_buffer.buf_ptr = (uint64)buffer;
- xiocb.plist.xiocb_buffer.buf_length = length;
-
- cfe_iocb_dispatch(&xiocb);
-
- if (xiocb.xiocb_status < 0);
- return xiocb.xiocb_status;
- return xiocb.plist.xiocb_buffer.buf_retlen;
-}
-
-
-
-int
-cfe_writeblk(int handle, int64 offset, const void *buffer, int length)
-{
- cfe_xiocb_t xiocb(CFE_CMD_DEV_WRITE, handle);
- xiocb.plist.xiocb_buffer.buf_offset = offset;
- xiocb.plist.xiocb_buffer.buf_ptr = (uint64)buffer;
- xiocb.plist.xiocb_buffer.buf_length = length;
-
- cfe_iocb_dispatch(&xiocb);
-
- if (xiocb.xiocb_status < 0);
- return xiocb.xiocb_status;
- return xiocb.plist.xiocb_buffer.buf_retlen;
-}
-
-
diff --git a/src/system/boot/platform/cfe/console.cpp
b/src/system/boot/platform/cfe/console.cpp
deleted file mode 100644
index 28902d0245..0000000000
--- a/src/system/boot/platform/cfe/console.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright 2011, François Revol, revol@xxxxxxx.
- * Copyright 2004-2005, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx. All rights
reserved.
- * Distributed under the terms of the MIT License.
- */
-
-
-#include "Handle.h"
-#include "console.h"
-
-#include <SupportDefs.h>
-#include <boot/platform/cfe/cfe.h>
-#include <boot/stage2.h>
-#include <util/kernel_cpp.h>
-
-#include <string.h>
-
-
-class Console : public Handle {
- public:
- Console();
-};
-
-class VTConsole : public Console {
- public:
- VTConsole();
- void ClearScreen();
- void SetCursor(int32 x, int32 y);
- void SetColor(int32 foreground, int32 background);
-};
-
-static VTConsole sInput, sOutput;
-FILE *stdin, *stdout, *stderr;
-
-
-// #pragma mark -
-
-
-Console::Console()
- : Handle()
-{
-}
-
-
-// #pragma mark -
-
-
-VTConsole::VTConsole()
- : Console()
-{
-}
-
-void
-VTConsole::ClearScreen()
-{
- WriteAt(NULL, 0LL, "\033E", 2);
-}
-
-
-void
-VTConsole::SetCursor(int32 x, int32 y)
-{
- char buff[] = "\033Y ";
- x = MIN(79,MAX(0,x));
- y = MIN(24,MAX(0,y));
- buff[3] += (char)x;
- buff[2] += (char)y;
- WriteAt(NULL, 0LL, buff, 4);
-}
-
-
-void
-VTConsole::SetColor(int32 foreground, int32 background)
-{
- static const char cmap[] = {
- 15, 4, 2, 6, 1, 5, 3, 7,
- 8, 12, 10, 14, 9, 13, 11, 0 };
- char buff[] = "\033b \033c ";
-
- if (foreground < 0 || foreground >= 16)
- return;
- if (background < 0 || background >= 16)
- return;
-
- buff[2] += cmap[foreground];
- buff[5] += cmap[background];
- WriteAt(NULL, 0LL, buff, 6);
-}
-
-
-// #pragma mark -
-
-
-void
-console_clear_screen(void)
-{
- sOutput.ClearScreen();
-}
-
-
-int32
-console_width(void)
-{
- return 80;
-}
-
-
-int32
-console_height(void)
-{
- return 25;
-}
-
-
-void
-console_set_cursor(int32 x, int32 y)
-{
- sOutput.SetCursor(x, y);
-}
-
-
-void
-console_show_cursor(void)
-{
-}
-
-
-void
-console_hide_cursor(void)
-{
-}
-
-
-void
-console_set_color(int32 foreground, int32 background)
-{
- sOutput.SetColor(foreground, background);
-}
-
-
-int
-console_wait_for_key(void)
-{
- return 0;
-}
-
-
-int
-console_check_for_key(void)
-{
- return 0;
-}
-
-
-status_t
-console_init(void)
-{
- stdin = (FILE *)&sInput;
- stdout = stderr = (FILE *)&sOutput;
-
- int handle = cfe_getstdhandle(CFE_STDHANDLE_CONSOLE);
- if (handle < 0)
- return cfe_error(handle);
-
- sInput.SetHandle(handle);
- sOutput.SetHandle(handle);
-
- return B_OK;
-}
-
diff --git a/src/system/boot/platform/cfe/console.h
b/src/system/boot/platform/cfe/console.h
deleted file mode 100644
index eef30f73e5..0000000000
--- a/src/system/boot/platform/cfe/console.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2004, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx. All rights reserved.
- * Distributed under the terms of the Haiku License.
- */
-#ifndef CONSOLE_H
-#define CONSOLE_H
-
-#include <boot/platform/generic/text_console.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern status_t console_init(void);
-extern int console_check_for_key(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* CONSOLE_H */
diff --git a/src/system/boot/platform/cfe/debug.cpp
b/src/system/boot/platform/cfe/debug.cpp
deleted file mode 100644
index 84bd5db546..0000000000
--- a/src/system/boot/platform/cfe/debug.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2011, François Revol, revol@xxxxxxx.
- * Copyright 2003-2010, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
- * Distributed under the terms of the MIT License.
- */
-
-
-#include <stdarg.h>
-
-#include <boot/platform.h>
-#include <boot/stdio.h>
-#include <boot/platform/cfe/cfe.h>
-
-
-extern "C" void
-panic(const char* format, ...)
-{
- // TODO: this works only after console_init() was called.
- va_list list;
-
- puts("*** PANIC ***");
-
- va_start(list, format);
- vprintf(format, list);
- va_end(list);
-
- cfe_exit(CFE_FLG_WARMSTART, 2);
-}
-
-
-extern "C" void
-dprintf(const char* format, ...)
-{
- va_list list;
-
- va_start(list, format);
- vprintf(format, list);
- va_end(list);
-}
-
-
-char*
-platform_debug_get_log_buffer(size_t* _size)
-{
- return NULL;
-}
diff --git a/src/system/boot/platform/cfe/devices.cpp
b/src/system/boot/platform/cfe/devices.cpp
deleted file mode 100644
index 36cf258012..0000000000
--- a/src/system/boot/platform/cfe/devices.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright 2003-2006, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
- * Copyright 2010, Andreas Färber <andreas.faerber@xxxxxx>
- * All rights reserved. Distributed under the terms of the MIT License.
- */
-
-
-#include <string.h>
-
-#include <boot/platform.h>
-#include <boot/vfs.h>
-#include <boot/stdio.h>
-#include <boot/stage2.h>
-#include <boot/net/IP.h>
-#include <boot/net/iSCSITarget.h>
-#include <boot/net/NetStack.h>
-#include <boot/net/RemoteDisk.h>
-//#include <platform/cfe/devices.h>
-#include <boot/platform/cfe/cfe.h>
-#include <util/kernel_cpp.h>
-
-#include "Handle.h"
-
-
-char sBootPath[192];
-
-
-status_t
-platform_add_boot_device(struct stage2_args *args, NodeList *devicesList)
-{
-#warning PPC:TODO
- return B_ERROR;
-}
-
-
-status_t
-platform_get_boot_partitions(struct stage2_args *args, Node *device,
- NodeList *list, NodeList *partitionList)
-{
- NodeIterator iterator = list->GetIterator();
- boot::Partition *partition = NULL;
- while ((partition = (boot::Partition *)iterator.Next()) != NULL) {
- // ToDo: just take the first partition for now
- partitionList->Insert(partition);
- return B_OK;
- }
-
- return B_ENTRY_NOT_FOUND;
-}
-
-
-#define DUMPED_BLOCK_SIZE 16
-
-void
-dumpBlock(const char *buffer, int size, const char *prefix)
-{
- int i;
-
- for (i = 0; i < size;) {
- int start = i;
-
- printf(prefix);
- for (; i < start+DUMPED_BLOCK_SIZE; i++) {
- if (!(i % 4))
- printf(" ");
-
- if (i >= size)
- printf(" ");
- else
- printf("%02x", *(unsigned char *)(buffer + i));
- }
- printf(" ");
-
- for (i = start; i < start + DUMPED_BLOCK_SIZE; i++) {
- if (i < size) {
- char c = buffer[i];
-
- if (c < 30)
- printf(".");
- else
- printf("%c", c);
- } else
- break;
- }
- printf("\n");
- }
-}
-
-
-status_t
-platform_add_block_devices(stage2_args *args, NodeList *devicesList)
-{
- // add all block devices to the list of possible boot devices
-
- int cookie = 0;
- char path[256];
- int status;
- for (; (status = cfe_enumdev(cookie, path, sizeof(path))) == B_OK;
cookie++) {
- if (!strcmp(path, sBootPath)) {
- // don't add the boot device twice
- continue;
- }
-
- printf("\t%s\n", path);
-
- int handle = cfe_open(path);
- if (handle < CFE_OK) {
- puts("\t\t(failed)");
- continue;
- }
-
- Handle *device = new(nothrow) Handle(handle);
- printf("\t\t(could open device, handle = %d, node = %p)\n",
- handle, device);
-
- devicesList->Add(device);
- }
- printf("\t(loop ended with %ld)\n", status);
-
- return B_OK;
-}
-
-
-status_t
-platform_register_boot_device(Node *device)
-{
- disk_identifier disk;
-
- disk.bus_type = UNKNOWN_BUS;
- disk.device_type = UNKNOWN_DEVICE;
- disk.device.unknown.size = device->Size();
-
- gBootVolume.SetData(BOOT_VOLUME_DISK_IDENTIFIER, B_RAW_TYPE, &disk,
- sizeof(disk_identifier));
-
- return B_OK;
-}
-
diff --git a/src/system/boot/platform/cfe/heap.cpp
b/src/system/boot/platform/cfe/heap.cpp
deleted file mode 100644
index 1dff002d0c..0000000000
--- a/src/system/boot/platform/cfe/heap.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2003, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
- * All rights reserved. Distributed under the terms of the MIT License.
- */
-
-
-#include <OS.h>
-
-#include <boot/platform.h>
-#include <boot/heap.h>
-#include <boot/stdio.h>
-#include <boot/platform/cfe/cfe.h>
-
-
-#define TRACE_HEAP 1
-#if TRACE_HEAP
-# define TRACE(x) printf x
-#else
-# define TRACE(x) ;
-#endif
-
-
-status_t
-platform_init_heap(stage2_args *args, void **_base, void **_top)
-{
- TRACE(("platform_init_heap()\n"));
-
- *_base = NULL;
- status_t error = platform_allocate_region(_base, args->heap_size,
- B_READ_AREA | B_WRITE_AREA, false);
- if (error != B_OK)
- return error;
-
- printf("heap base = %p\n", *_base);
- *_top = (void *)((int8 *)*_base + args->heap_size);
- printf("heap top = %p\n", *_top);
-
- return B_OK;
-}
-
-
-void
-platform_release_heap(stage2_args *args, void *base)
-{
- if (base != NULL)
- platform_free_region(base, args->heap_size);
-}
-
diff --git a/src/system/boot/platform/cfe/menu.cpp
b/src/system/boot/platform/cfe/menu.cpp
deleted file mode 100644
index 47f9c6ff48..0000000000
--- a/src/system/boot/platform/cfe/menu.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2004, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
- * All rights reserved. Distributed under the terms of the MIT License.
- */
-
-
-#include <boot/platform.h>
-#include <boot/menu.h>
-#include <boot/platform/generic/text_menu.h>
-
-
-void
-platform_add_menus(Menu *menu)
-{
- // ToDo: implement me!
-
- switch (menu->Type()) {
- case MAIN_MENU:
- break;
- case SAFE_MODE_MENU:
- break;
- default:
- break;
- }
-}
-
-
-void
-platform_update_menu_item(Menu *menu, MenuItem *item)
-{
- platform_generic_update_text_menu_item(menu, item);
-}
-
-
-void
-platform_run_menu(Menu *menu)
-{
- platform_generic_run_text_menu(menu);
-}
-
-
-size_t
-platform_get_user_input_text(Menu *menu, MenuItem *item, char *buffer,
- size_t bufferSize)
-{
- return platform_generic_get_user_input_text(menu, item, buffer,
- bufferSize);
-}
diff --git a/src/system/boot/platform/cfe/mmu.cpp
b/src/system/boot/platform/cfe/mmu.cpp
deleted file mode 100644
index b9f3143c6f..0000000000
--- a/src/system/boot/platform/cfe/mmu.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2003, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
- * All rights reserved. Distributed under the terms of the MIT License.
- */
-
-
-#include <platform_arch.h>
-#include <boot/platform.h>
-#include <boot/stdio.h>
-#include <boot/platform/cfe/cfe.h>
-#include <stdarg.h>
-
-
-status_t
-platform_allocate_region(void **_address, size_t size, uint8 protection,
- bool exactAddress)
-{
- if (size == 0)
- return B_BAD_VALUE;
-
- void *address = arch_mmu_allocate(*_address, size, protection,
- exactAddress);
- if (address == NULL)
- return B_NO_MEMORY;
-
- *_address = address;
- return B_OK;
-}
-
-
-status_t
-platform_free_region(void *address, size_t size)
-{
- return arch_mmu_free(address, size);
-}
-
diff --git a/src/system/boot/platform/cfe/start.cpp
b/src/system/boot/platform/cfe/start.cpp
deleted file mode 100644
index feb79b38b1..0000000000
--- a/src/system/boot/platform/cfe/start.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright 2011, François Revol, revol@xxxxxxx.
- * Copyright 2003-2010, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
- * Copyright 2011, Alexander von Gluck, kallisti5@xxxxxxxxxxx
- * Distributed under the terms of the MIT License.
- */
-
-
-#include <string.h>
-
-#include <OS.h>
-
-#include <boot/platform.h>
-#include <boot/stage2.h>
-#include <boot/heap.h>
-#include <boot/platform/cfe/cfe.h>
-#include <platform_arch.h>
-
-#include "console.h"
-#include "real_time_clock.h"
-
-
-#define HEAP_SIZE 65536
-
-
-extern "C" uint32 _start(uint64 handle, uint64 entry, uint32 _unused,
- uint32 signature);
-extern "C" void start(uint64 cfeHandle, uint64 cfeEntry);
-
-// GCC defined globals
-extern void (*__ctor_list)(void);
-extern void (*__ctor_end)(void);
-extern uint8 __bss_start;
-extern uint8 _end;
-
-#if 0//OF
-uint32 gMachine;
-#endif
-static uint32 sBootOptions;
-
-
-static void
-call_ctors(void)
-{
- void (**f)(void);
-
- for (f = &__ctor_list; f < &__ctor_end; f++) {
- (**f)();
- }
-}
-
-
-static void
-clear_bss(void)
-{
- memset(&__bss_start, 0, &_end - &__bss_start);
-}
-
-
-extern "C" void
-platform_start_kernel(void)
-{
- preloaded_elf32_image* image = static_cast<preloaded_elf32_image*>(
- gKernelArgs.kernel_image.Pointer());
-
- addr_t kernelEntry = image->elf_header.e_entry;
- addr_t stackTop = gKernelArgs.cpu_kstack[0].start
- + gKernelArgs.cpu_kstack[0].size;
-
- printf("kernel entry at %p\n", (void*)kernelEntry);
- printf("kernel stack top: %p\n", (void*)stackTop);
-
- /* TODO: ?
- mmu_init_for_kernel();
- smp_boot_other_cpus();
- */
-
- status_t error = arch_start_kernel(&gKernelArgs, kernelEntry, stackTop);
-
- panic("Kernel returned! Return value: %ld\n", error);
-}
-
-
-extern "C" void
-platform_exit(void)
-{
- cfe_exit(CFE_FLG_WARMSTART, 0);
- panic("cfe_exit() failed.");
-}
-
-
-extern "C" uint32
-platform_boot_options(void)
-{
- return sBootOptions;
-}
-
-
-extern "C" uint32
-_start(uint64 handle, uint64 entry, uint32 _unused, uint32 signature)
-{
-
- if (signature != CFE_EPTSEAL)
- return 123;//XXX:something?
-
- clear_bss();
- call_ctors();
- // call C++ constructors before doing anything else
- //return 456;
-
- start(handle, entry);
-}
-
-
-extern "C" void
-start(uint64 cfeHandle, uint64 cfeEntry)
-{
- char bootargs[512];
-
- // stage2 args - might be set via the command line one day
- stage2_args args;
- args.heap_size = HEAP_SIZE;
- args.arguments = NULL;
-
- cfe_init(cfeHandle, cfeEntry);
-
- // check for arguments
-#if 0//OF
- if (of_getprop(gChosen, "bootargs", bootargs, sizeof(bootargs))
- != OF_FAILED) {
- static const char *sArgs[] = { NULL, NULL };
- sArgs[0] = (const char *)bootargs;
- args.arguments = sArgs;
- args.arguments_count = 1;
- }
-#endif
-
-#if 0//OF
- determine_machine();
-#endif
- console_init();
-
- // XXX:FIXME: doesn't even land here.
- dprintf("testing...\n");
- while (true);
-
-#if 0//OF
- if ((gMachine & MACHINE_QEMU) != 0)
- dprintf("OpenBIOS (QEMU?) OpenFirmware machine detected\n");
- else if ((gMachine & MACHINE_PEGASOS) != 0)
- dprintf("Pegasos PowerPC machine detected\n");
- else
- dprintf("Apple PowerPC machine assumed\n");
-#endif
-
- // Initialize and take over MMU and set the OpenFirmware callbacks - it
- // will ask us for memory after that instead of maintaining it itself
- // (the kernel will need to adjust the callback later on as well)
- arch_mmu_init();
-
- if (boot_arch_cpu_init() != B_OK)
- cfe_exit(CFE_FLG_WARMSTART, 1);
-
-#if 0//OF FIXME
- if (init_real_time_clock() != B_OK)
- cfe_exit(CFE_FLG_WARMSTART, 1);
-#endif
-
- // check for key presses once
- sBootOptions = 0;
- int key = console_check_for_key();
- if (key == 32) {
- // space bar: option menu
- sBootOptions |= BOOT_OPTION_MENU;
- } else if (key == 27) {
- // ESC: debug output
- sBootOptions |= BOOT_OPTION_DEBUG_OUTPUT;
- }
-
- gKernelArgs.platform_args.cfe_entry = cfeEntry;
-
- main(&args);
- // if everything goes fine, main() never returns
-
- cfe_exit(CFE_FLG_WARMSTART, 1);
-}
diff --git a/src/system/boot/platform/cfe/support.cpp
b/src/system/boot/platform/cfe/support.cpp
deleted file mode 100644
index 93bf0e5ee2..0000000000
--- a/src/system/boot/platform/cfe/support.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2011, François Revol, revol@xxxxxxx.
- * Copyright 2005, Ingo Weinhold <bonefish@xxxxxxxxxxxxxxx>.
- * Copyright 2006-2011, Haiku, Inc. All Rights Reserved.
- * All rights reserved. Distributed under the terms of the MIT License.
- *
- * Authors:
- * Ingo Weinhold, bonefish@xxxxxxxxxxxxxxx
- * Alexander von Gluck, kallisti5@xxxxxxxxxxx
- */
-
-
-#include "support.h"
-#include <boot/platform/cfe/cfe.h>
-
-
-bigtime_t
-system_time(void)
-{
- bigtime_t result = cfe_getticks() * 1000000LL / CFE_HZ ;
- return result;
-}
-
diff --git a/src/system/boot/platform/cfe/support.h
b/src/system/boot/platform/cfe/support.h
deleted file mode 100644
index f231ab4ed1..0000000000
--- a/src/system/boot/platform/cfe/support.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2006-2011, Haiku, Inc. All Rights Reserved.
- * Distributed under the terms of the MIT License.
- *
- * Authors:
- * Alexander von Gluck, kallisti5@xxxxxxxxxxx
- */
-#ifndef SUPPORT_H
-#define SUPPORT_H
-
-
-#include <OS.h>
-
-
-bigtime_t system_time(void);
-
-#endif
diff --git a/src/system/boot/platform/cfe/video.cpp
b/src/system/boot/platform/cfe/video.cpp
deleted file mode 100644
index affd6dfebe..0000000000
--- a/src/system/boot/platform/cfe/video.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2004, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
- * Copyright 2010 Andreas Färber <andreas.faerber@xxxxxx>
- * All rights reserved. Distributed under the terms of the MIT License.
- */
-
-
-#include <boot/platform.h>
-#include <boot/stage2.h>
-#include <boot/platform/generic/video.h>
-#include <edid.h>
-#include <boot/platform/cfe/cfe.h>
-
-
-//#define TRACE_VIDEO
-
-
-static int sScreen;
-
-
-void
-platform_blit4(addr_t frameBuffer, const uint8 *data,
- uint16 width, uint16 height, uint16 imageWidth, uint16 left, uint16 top)
-{
- panic("platform_blit4(): not implemented\n");
-}
-
-
-extern "C" void
-platform_set_palette(const uint8 *palette)
-{
- switch (gKernelArgs.frame_buffer.depth) {
- case 8:
- break;
- default:
- break;
- }
-}
-
-
-extern "C" void
-platform_switch_to_logo(void)
-{
- // in debug mode, we'll never show the logo
- if ((platform_boot_options() & BOOT_OPTION_DEBUG_OUTPUT) != 0)
- return;
-
- return;
-}
-
-
-extern "C" void
-platform_switch_to_text_mode(void)
-{
- // nothing to do if we're in text mode
- if (!gKernelArgs.frame_buffer.enabled)
- return;
-
- // ToDo: implement me
-
- gKernelArgs.frame_buffer.enabled = false;
-}
-
-
-extern "C" status_t
-platform_init_video(void)
-{
- gKernelArgs.frame_buffer.enabled = false;
-
- return B_NO_INIT;
-}
-