68 lines
1.8 KiB
C
68 lines
1.8 KiB
C
/******************************************************************************
|
|
* 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;
|
|
}
|
|
|