blob: 1376b6474bac62422818aea3d6b0fe89979b4a2f [file] [log] [blame]
/******************************************************************************
* 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. resposible 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;
}