| /****************************************************************************** |
| * Copyright (c) 2004, 2008 IBM Corporation |
| * All rights reserved. |
| * This program and the accompanying materials |
| * are made available under the terms of the BSD License |
| * which accompanies this distribution, and is available at |
| * http://www.opensource.org/licenses/bsd-license.php |
| * |
| * Contributors: |
| * IBM Corporation - initial implementation |
| *****************************************************************************/ |
| |
| #include <stdint.h> |
| #include <string.h> |
| #include <stdlib.h> /* malloc */ |
| #include <of.h> |
| #include <pci.h> |
| #include <kernel.h> |
| #include <cpu.h> |
| #include <fileio.h> |
| |
| /* Application entry point .*/ |
| extern int _start(unsigned char *arg_string, long len); |
| extern int main(int, char**); |
| int _start_kernel(unsigned long p0, unsigned long p1); |
| void * malloc_aligned(size_t size, int align); |
| |
| unsigned long exception_stack_frame; |
| |
| snk_fileio_t fd_array[FILEIO_MAX]; |
| |
| extern uint64_t tb_freq; |
| |
| extern char __client_start; |
| extern char __client_end; |
| |
| void * malloc_aligned(size_t size, int align) |
| { |
| unsigned long p = (unsigned long) malloc(size + align - 1); |
| p = p + align - 1; |
| p = p & ~(align - 1); |
| |
| return (void *) p; |
| } |
| |
| int _start_kernel(unsigned long p0, unsigned long p1) |
| { |
| int rc; |
| unsigned int timebase; |
| |
| /* initialize all file descriptor by marking them as empty */ |
| for(rc=0; rc<FILEIO_MAX; ++rc) |
| fd_array[rc].type = FILEIO_TYPE_EMPTY; |
| |
| /* this is step is e.g. responsible to initialize file descriptor 0 and 1 for STDIO */ |
| rc = of_glue_init(&timebase, (size_t)(unsigned long)&__client_start, |
| (size_t)(unsigned long)&__client_end - (size_t)(unsigned long)&__client_start); |
| if(rc < 0) |
| return -1; |
| |
| tb_freq = (uint64_t) timebase; |
| rc = _start((unsigned char *) p0, p1); |
| |
| of_glue_release(); |
| return rc; |
| } |
| |