Changeset a0c732e in mainline for arch/ppc32/boot/main.c


Ignore:
Timestamp:
2006-02-26T11:48:05Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7a255e69
Parents:
13c1a0c
Message:

PPC32 boot loader preparation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/ppc32/boot/main.c

    r13c1a0c ra0c732e  
    2626 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2727 */
    28  
    29 #include "main.h"
    3028
    31 ofw_entry ofw;
     29#include "main.h"
     30#include "printf.h"
     31#include "ofw.h"
    3232
    33 phandle ofw_chosen;
    34 ihandle ofw_stdout;
    35 
    36 void init(void)
     33static void halt(void)
    3734{
    38         ofw_chosen = ofw_find_device("/chosen");
    39         if (ofw_chosen == -1)
    40                 ofw_call("exit", 0, 0);
    41        
    42         if (ofw_get_property(ofw_chosen, "stdout",  &ofw_stdout, sizeof(ofw_stdout)) <= 0)     
    43                 ofw_stdout = 0;
    44 }
    45 
    46 int ofw_call(const char *service, const int nargs, const int nret, ...)
    47 {
    48         va_list list;
    49         ofw_args_t args;
    50         int i;
    51        
    52         args.service = service;
    53         args.nargs = nargs;
    54         args.nret = nret;
    55        
    56         va_start(list, nret);
    57         for (i = 0; i < nargs; i++)
    58                 args.args[i] = va_arg(list, ofw_arg_t);
    59         va_end(list);
    60        
    61         for (i = 0; i < nret; i++)
    62                 args.args[i + nargs] = 0;
    63        
    64         ofw(&args);
    65        
    66         return args.args[nargs];
    67 }
    68 
    69 void ofw_write(const char *str, const int len)
    70 {
    71         if (ofw_stdout == 0)
    72                 return;
    73        
    74         ofw_call("write", 3, 1, ofw_stdout, str, len);
    75 }
    76 
    77 void ofw_puts(const char *str)
    78 {
    79         int len = 0;
    80        
    81         while (str[len] != 0)
    82                 len++;
    83        
    84         ofw_write(str, len);
    85 }
    86 
    87 phandle ofw_find_device(const char *name)
    88 {
    89         return ofw_call("finddevice", 1, 1, name);
    90 }
    91 
    92 int ofw_get_property(const phandle device, const char *name, void *buf, const int buflen)
    93 {
    94         return ofw_call("getprop", 4, 1, device, name, buf, buflen);
     35        while (1);
    9536}
    9637
    9738void bootstrap(void)
    9839{
    99         ofw_puts("\nHelenOS PPC Bootloader\n");
    100 
    101         while (1);
     40        printf("\nHelenOS PPC Bootloader\nKernel size %d, load address %L\n", KERNEL_SIZE, KERNEL_LOAD_ADDRESS);
     41       
     42        void *addr = ofw_claim((void *) KERNEL_LOAD_ADDRESS, KERNEL_SIZE, 1);
     43        if (addr == NULL) {
     44                printf("Error: Unable to claim memory");
     45                halt();
     46        }
     47       
     48        halt();
    10249}
Note: See TracChangeset for help on using the changeset viewer.