/* cfe.c -- I/O code for the MIPS boards running CFE. */ /* * Copyright 2001, 2002, 2003 * Broadcom Corporation. All rights reserved. * * This software is furnished under license and may be used and copied only * in accordance with the following terms and conditions. Subject to these * conditions, you may download, copy, install, use, modify and distribute * modified or unmodified copies of this software in source and/or binary * form. No title or ownership is transferred hereby. * * 1) Any source code used, modified or distributed must reproduce and * retain this copyright notice and list of conditions as they appear in * the source file. * * 2) No right is granted to use any trade name, trademark, or logo of * Broadcom Corporation. The "Broadcom Corporation" name may not be * used to endorse or promote products derived from this software * without the prior written permission of Broadcom Corporation. * * 3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL BROADCOM BE LIABLE * FOR ANY DAMAGES WHATSOEVER, AND IN PARTICULAR, BROADCOM SHALL NOT BE * LIABLE FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, */ #include "cfe_api.h" void *__libcfe_init (long handle, long a1, long cfe_entrypoint, long a3); void __libcfe_exit (long status); char inbyte (void); int outbyte (char c); /* Echo input characters? */ int __libcfe_echo_input = 0; /* CFE handle used to access console device. */ static int cfe_conshandle; /* Initialize firmware callbacks. Called from crt0_cfe. Returns desired stack pointer. */ void * __libcfe_init (long handle, long a1, long entrypoint, long a3) { cfe_init (handle, entrypoint); cfe_conshandle = cfe_getstdhandle (CFE_STDHANDLE_CONSOLE); __libcfe_meminit (); return __libcfe_stack_top (); } /* Exit back to monitor, with the given status code. */ void __libcfe_exit (long status) { outbyte ('\r'); outbyte ('\n'); cfe_exit (CFE_FLG_WARMSTART, status); } char inbyte (void) { unsigned char c; int rv; while (cfe_read (cfe_conshandle, &c, 1) != 1) ; if (c == '\r') c = '\n'; if (__libcfe_echo_input) outbyte (c); return c; } int outbyte (char c) { int res; do { res = cfe_write (cfe_conshandle, &c, 1); } while (res == 0); if (c == '\n') outbyte ('\r'); return 0; } /* This is the MIPS cache flush function call. No defines are provided by libgloss for 'cache', and CFE doesn't let you flush ranges, so we just flush all I & D for every call. */ int _flush_cache (char *addr, int nbytes, int cache) { cfe_flushcache (0); return 0; }