home *** CD-ROM | disk | FTP | other *** search
- #define BAT_DEBUG
-
- /*
- kernel_main.c
- the main C-based entry point for PowerOS
- copyright 1996-1997 by Ben Martz
- all rights reserved world wide
-
- ANY AND ALL MODIFICATIONS TO THIS SOURCE MUST CREDIT THE ORIGINAL
- AUTHOR, BEN MARTZ (benmartz@ic.net), AND MUST BE GIVEN TO THE AUTHOR
- FOR INTEGRATION INTO THE MAIN PowerOS SOURCE TREE. THANK YOU FOR YOUR
- COOPERATION!
- */
-
- #include "poweros_types.h"
- #include "boot.h"
- #include "debug_video.h"
- #include "debug_console.h"
- #include "dprintf.h"
- #include "misc.h"
- #include "bat.h"
- #include "memory.h"
- #include "stdhdr.s"
-
- void kernel_main(KernelBootData *boot, int chip) {
- unsigned long i = 0;
- char *testptr;
- long *x;
-
- #ifndef BAT_DEBUG
- /* map the first 1MB 1:1 */
- switch(chip) {
- case k601: {
- BATU_601 batu;
- BATL_601 batl;
-
- batu.blpi = 0; /* virtual address 0 */
- batu.rsvd1 = 0; /* zero */
- batu.wim = 0; /* nothing special */
- batu.ks = 1; /* supervisor enabled */
- batu.ku = 0; /* no user */
- batu.pp = 2; /* read and write */
-
- batl.pbn = 0; /* physical address 0 */
- batl.rsvd1 = 0; /* zero */
- batl.v = 1; /* valid */
- batl.bsm = BAT_BL_8M; /* eight megabytes */
-
- __asm__ volatile("sync");
- __asm__ volatile("mtdbatu 0, 0");
- __asm__ volatile("mtdbatl 0, %0" : : "r" (batl));
- __asm__ volatile("mtdbatu 0, %0" : : "r" (batu));
- __asm__ volatile("sync");
-
- break; }
- case k603:
- case k604: {
- BATU_60x batu;
- BATL_60x batl;
-
- batu.bepi = 0; /* virtual address 0 */
- batu.rsvd1 = 0; /* zero */
- batu.bl = BAT_BL_256M; /* 256 megabytes */
- batu.vs = 1; /* supervisor access enabled */
- batu.vp = 0; /* no user access */
-
- batl.brpn = 0; /* physical address 0 */
- batl.rsvd1 = 0; /* zero */
- batl.wimg = 0; /* nothing special */
- batl.rsvd2 = 0; /* zero */
- batl.pp = 2; /* read/write */
-
- __asm__ volatile("sync");
- __asm__ volatile("mtdbatu 0, 0");
- __asm__ volatile("mtdbatl 0, %0" : : "r" (batl));
- __asm__ volatile("mtdbatu 0, %0" : : "r" (batu));
- __asm__ volatile("mtibatu 0, 0");
- __asm__ volatile("mtibatl 0, %0" : : "r" (batl));
- __asm__ volatile("mtibatu 0, %0" : : "r" (batu));
- __asm__ volatile("sync");
-
- break; }
- }
-
- /* disable the other 3 BATs */
- __asm__ volatile("sync");
- __asm__ volatile("mtdbatu 1, 0");
- __asm__ volatile("mtdbatu 2, 0");
- __asm__ volatile("mtdbatu 3, 0");
- __asm__ volatile("sync");
-
- if((chip == k603) || (chip == k603)) {
- __asm__ volatile("sync");
- __asm__ volatile("mtibatu 1, 0");
- __asm__ volatile("mtibatu 2, 0");
- __asm__ volatile("mtibatu 3, 0");
- __asm__ volatile("sync");
- }
- #endif /* BAT_DEBUG */
-
- /* just a place where we could handle different booter versions later */
- if(boot->version != BOOTVERSION);
-
- /* initialize the video and console functions */
- vinit(boot->v_baseaddr,boot->v_rowbytes,boot->v_depth,
- boot->v_width,boot->v_height);
- cinit();
-
- /* say hi! */
- dprintf("PowerOS Kernel - compiled %s %s with gcc %d.%d\n",__DATE__,__TIME__,__GNUC__,__GNUC_MINOR__);
- dprintf("copyright (C)1996-1997 Ben Martz\n");
- dprintf("all rights reserved world wide\n\n");
-
- dprintf("ppc chip = 60%d\n",chip);
- dprintf("kernel size = %ld bytes\n",_kernel_size());
- dprintf("memory size = %d MB\n",boot->m_bytes/1024/1024);
-
- /* never let go! */
- while(1) {
- i++;
- cgotoxy(1,25);
- dprintf("%d",i);
- if(i == 10000) {
- _sc(0x1234);
- }
- if(i == 20000) {
- /* heh...this won't work until the mmu is set up properly! */
- /*mem_init(_kernel_size(),boot->m_bytes - _kernel_size()); */
- dprintf("\nlet's try something now...\n");
- for(x = (long *) _kernel_size()+1024; x < (long *) 0xffffffff; x++) {
- *x = 0xdeadbeef;
- }
- }
- }
-
- /* ouch */
- dprintf("Umm...ouch?");
- }
-