Changeset a0c732e in mainline
- Timestamp:
- 2006-02-26T11:48:05Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7a255e69
- Parents:
- 13c1a0c
- Location:
- arch/ppc32/boot
- Files:
-
- 4 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ppc32/boot/Makefile
r13c1a0c ra0c732e 2 2 3 3 CFLAGS = -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -I../include 4 DEFS = -DKERNEL_LOAD_ADDRESS=0x800000 -DKERNEL_SIZE=40960 5 6 SOURCES = \ 7 main.c \ 8 ofw.c \ 9 printf.c \ 10 boot.S 11 12 OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) 4 13 5 14 build: boot.bin 6 15 cp boot.bin ../../../load.bin 7 16 8 boot.bin: boot.o main.o9 $(LD) -no-check-sections -N -T _link.ld boot.o main.o-o $@17 boot.bin: $(OBJECTS) 18 $(LD) -no-check-sections -N -T _link.ld $(OBJECTS) -o $@ 10 19 11 boot.o: boot.S12 $(CC) $( CFLAGS) -c boot.S-o $@20 %.o: %.S 21 $(CC) $(DEFS) $(CFLAGS) -D__ASM__ -c $< -o $@ 13 22 14 main.o: main.c15 $(CC) $( CFLAGS) -c main.c-o $@23 %.o: %.c 24 $(CC) $(DEFS) $(CFLAGS) -c $< -o $@ 16 25 17 26 clean: 18 -rm -f boot.o main.oboot.bin ../../../load.bin27 -rm -f $(OBJECTS) boot.bin ../../../load.bin -
arch/ppc32/boot/main.c
r13c1a0c ra0c732e 26 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 27 */ 28 29 #include "main.h"30 28 31 ofw_entry ofw; 29 #include "main.h" 30 #include "printf.h" 31 #include "ofw.h" 32 32 33 phandle ofw_chosen; 34 ihandle ofw_stdout; 35 36 void init(void) 33 static void halt(void) 37 34 { 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); 95 36 } 96 37 97 38 void bootstrap(void) 98 39 { 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(); 102 49 } -
arch/ppc32/boot/main.h
r13c1a0c ra0c732e 30 30 #define __MAIN_H__ 31 31 32 #define MAX_OFW_ARGS 1033 34 typedef __builtin_va_list va_list;35 36 #define va_start(ap, last) __builtin_va_start(ap, last)37 #define va_arg(ap, type) __builtin_va_arg(ap, type)38 #define va_end(ap) __builtin_va_end(ap)39 40 typedef unsigned int ofw_arg_t;41 typedef unsigned int ihandle;42 typedef unsigned int phandle;43 44 /** OpenFirmware command structure45 *46 */47 typedef struct {48 const char *service; /**< Command name */49 unsigned int nargs; /**< Number of in arguments */50 unsigned int nret; /**< Number of out arguments */51 ofw_arg_t args[MAX_OFW_ARGS]; /**< List of arguments */52 } ofw_args_t;53 54 typedef void (*ofw_entry)(ofw_args_t *);55 56 extern void init(void);57 extern int ofw_call(const char *service, const int nargs, const int nret, ...);58 extern void ofw_write(const char *str, const int len);59 extern void ofw_puts(const char *str);60 extern phandle ofw_find_device(const char *name);61 extern int ofw_get_property(const phandle device, const char *name, void *buf, const int buflen);62 32 extern void bootstrap(void); 63 33
Note:
See TracChangeset
for help on using the changeset viewer.