/trunk/boot/arch/ppc64/loader/debug.inc |
---|
File deleted |
/trunk/boot/arch/ppc64/loader/main.c |
---|
31,7 → 31,6 |
#include "asm.h" |
#include "_components.h" |
#include <ofw.h> |
#include <align.h> |
#define HEAP_GAP 1024000 |
102,14 → 101,8 |
halt(); |
} |
if (!ofw_keyboard(&bootinfo.keyboard)) { |
printf("Error: unable to get keyboard properties, halting.\n"); |
halt(); |
} |
printf("\nDevice statistics\n"); |
printf(" screen at %L, resolution %dx%d, %d bpp (scanline %d bytes)\n", bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height, bootinfo.screen.bpp, bootinfo.screen.scanline); |
printf(" keyboard at %L (size %d bytes)\n", bootinfo.keyboard.addr, bootinfo.keyboard.size); |
void *real_mode_pa = ofw_translate(&real_mode); |
void *trans_pa = ofw_translate(&trans); |
158,5 → 151,5 |
fix_overlap(&bootinfo, &bootinfo_pa, "boot info", &top); |
printf("\nBooting the kernel...\n"); |
jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, pages << PAGE_WIDTH, real_mode_pa, (void *) bootinfo.screen.addr, bootinfo.screen.scanline); |
jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, pages << PAGE_WIDTH, real_mode_pa); |
} |
/trunk/boot/arch/ppc64/loader/main.h |
---|
29,7 → 29,7 |
#ifndef BOOT_ppc64_MAIN_H_ |
#define BOOT_ppc64_MAIN_H_ |
#include "ofw.h" |
#include <ofw.h> |
#define TASKMAP_MAX_RECORDS 32 |
39,15 → 39,14 |
} task_t; |
typedef struct { |
unsigned long count; |
unsigned int count; |
task_t tasks[TASKMAP_MAX_RECORDS]; |
} taskmap_t; |
typedef struct { |
taskmap_t taskmap; |
memmap_t memmap; |
taskmap_t taskmap; |
screen_t screen; |
keyboard_t keyboard; |
} bootinfo_t; |
extern void start(void); |
/trunk/boot/arch/ppc64/loader/ofwarch.c |
---|
56,7 → 56,7 |
pci_reg_t macio; |
if (ofw_get_property(device, "assigned-addresses", &macio, sizeof(macio)) <= 0) |
return false; |
keyboard->addr = (void *) (((unsigned long) macio.addr.addr_lo) | (((unsigned long) macio.addr.addr_hi) << 32)); |
keyboard->addr = (void *) macio.addr.addr_lo; |
keyboard->size = macio.size_lo; |
return true; |
/trunk/boot/arch/ppc64/loader/Makefile |
---|
61,12 → 61,7 |
$(KERNELDIR)/kernel.bin \ |
$(USPACEDIR)/ns/ns \ |
$(USPACEDIR)/init/init \ |
$(USPACEDIR)/fb/fb \ |
$(USPACEDIR)/kbd/kbd \ |
$(USPACEDIR)/console/console \ |
$(USPACEDIR)/tetris/tetris \ |
$(USPACEDIR)/ipcc/ipcc \ |
$(USPACEDIR)/klog/klog |
$(USPACEDIR)/fb/fb |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |
COMPONENT_OBJECTS := $(addsuffix .o,$(basename $(notdir $(COMPONENTS)))) |
/trunk/boot/arch/ppc64/loader/asm.S |
---|
28,7 → 28,6 |
#include "asm.h" |
#include "regname.h" |
#include "debug.inc" |
.text |
109,8 → 108,6 |
# r5 = trans (pa) |
# r6 = bytes to copy |
# r7 = real_mode (pa) |
# r8 = framebuffer (pa) |
# r9 = scanline |
# disable interrupts |
140,15 → 137,10 |
real_mode: |
DEBUG_INIT |
DEBUG_real_mode |
# copy kernel to proper location |
# |
# r5 = trans (pa) |
# r6 = bytes to copy |
# r8 = framebuffer (pa) |
# r9 = scanline |
li r31, PAGE_SIZE >> 2 |
li r30, 0 |
163,9 → 155,6 |
mtctr r31 |
lwz r29, 0(r5) |
DEBUG_INIT |
DEBUG_copy_loop |
copy_loop: |
lwz r28, 0(r29) |
179,8 → 168,6 |
beq copy_end |
bdnz copy_loop |
DEBUG_end_copy_loop |
addi r5, r5, 4 |
b page_copy |
187,90 → 174,27 |
copy_end: |
DEBUG_segments |
# initially fill segment registers |
li r31, 16 |
mtctr r31 |
li r31, 0 |
li r29, 8 |
mtctr r29 |
li r30, 0 # ASID 0 (VSIDs 0 .. 7) |
li r30, 0x2000 |
seg_fill_uspace: |
seg_fill: |
mtsrin r30, r31 |
addi r30, r30, 1 |
addi r30, r30, 0x111 |
addis r31, r31, 0x1000 # move to next SR |
bdnz seg_fill_uspace |
bdnz seg_fill |
li r29, 8 |
mtctr r29 |
lis r30, 0x4000 # priviledged access only |
ori r30, r30, 8 # ASID 0 (VSIDs 8 .. 15) |
seg_fill_kernel: |
mtsrin r30, r31 |
addi r30, r30, 1 |
addis r31, r31, 0x1000 # move to next SR |
bdnz seg_fill_kernel |
# create empty Page Hash Table |
# on top of memory, size 64 KB |
DEBUG_pht |
lwz r31, 0(r3) # r31 = memory size |
lis r30, 65536@h |
ori r30, r30, 65536@l # r30 = 65536 |
subi r29, r30, 1 # r29 = 65535 |
sub r31, r31, r30 |
andc r31, r31, r29 # pht = ALIGN_DOWN(memory_size - 65536, 65536) |
mtsdr1 r31 |
li r29, 2 |
srw r30, r30, r29 # r30 = 16384 |
li r29, 0 |
pht_clear: |
# write zeroes |
stw r29, 0(r31) |
addi r31, r31, 4 |
subi r30, r30, 4 |
cmpwi r30, 0 |
beq clear_end |
bdnz pht_clear |
DEBUG_end_pht_clear |
clear_end: |
DEBUG_tlb |
tlbia |
tlbsync |
DEBUG_prepare |
# start the kernel |
# |
# pc = KERNEL_START_ADDR |
# r3 = bootinfo (pa) |
# sprg0 = KA2PA(KERNEL_START_ADDR) |
# sprg3 = physical memory size |
# sp = 0 (pa) |
lis r31, KERNEL_START_ADDR@ha |
addi r31, r31, KERNEL_START_ADDR@l |
277,14 → 201,6 |
mtspr srr0, r31 |
subis r31, r31, 0x8000 |
mtsprg0 r31 |
lwz r31, 0(r3) |
mtsprg3 r31 |
li sp, 0 |
mfmsr r31 |
ori r31, r31, (msr_ir | msr_dr)@l |
mtspr srr1, r31 |
291,8 → 207,6 |
sync |
isync |
DEBUG_rfi |
rfid |
.align PAGE_WIDTH |
/trunk/boot/arch/ppc64/loader/asm.h |
---|
26,8 → 26,8 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef BOOT_ppc64_ASM_H_ |
#define BOOT_ppc64_ASM_H_ |
#ifndef __ASM_H__ |
#define __ASM_H__ |
#define PAGE_SIZE 4096 |
#define PAGE_WIDTH 12 |
35,7 → 35,7 |
#define TRANS_SIZE 1024 |
#define TRANS_ITEM_SIZE 8 |
#define KERNEL_START_ADDR 0x80008000 |
#define KERNEL_START_ADDR 0x80004000 |
#ifndef __ASM__ |
44,7 → 44,7 |
extern void *trans[TRANS_SIZE]; |
extern void halt(); |
extern void jump_to_kernel(void *bootinfo, unsigned long bootinfo_size, void *trans, unsigned long kernel_size, void *real_mode, void *fb, unsigned long scanline) __attribute__((noreturn)); |
extern void jump_to_kernel(void *bootinfo, unsigned long bootinfo_size, void *trans, unsigned long kernel_size, void *real_mode) __attribute__((noreturn)); |
extern void real_mode(); |
#endif |