1173426Srpaulo/* $NetBSD: cfe_api.h,v 1.3 2003/02/07 17:38:48 cgd Exp $ */ 2177972Srpaulo/* from: SiByte Id: cfe_api.h,v 1.29 2002/07/09 23:29:11 cgd Exp $ */ 3173426Srpaulo 4173426Srpaulo/*- 5173426Srpaulo * Copyright 2000, 2001, 2002 6173426Srpaulo * Broadcom Corporation. All rights reserved. 7173426Srpaulo * 8173426Srpaulo * This software is furnished under license and may be used and copied only 9173426Srpaulo * in accordance with the following terms and conditions. Subject to these 10173426Srpaulo * conditions, you may download, copy, install, use, modify and distribute 11173426Srpaulo * modified or unmodified copies of this software in source and/or binary 12173426Srpaulo * form. No title or ownership is transferred hereby. 13173426Srpaulo * 14173426Srpaulo * 1) Any source code used, modified or distributed must reproduce and 15173426Srpaulo * retain this copyright notice and list of conditions as they appear in 16173426Srpaulo * the source file. 17173426Srpaulo * 18173426Srpaulo * 2) No right is granted to use any trade name, trademark, or logo of 19173426Srpaulo * Broadcom Corporation. The "Broadcom Corporation" name may not be 20173426Srpaulo * used to endorse or promote products derived from this software 21173426Srpaulo * without the prior written permission of Broadcom Corporation. 22173426Srpaulo * 23173426Srpaulo * 3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR IMPLIED 24173426Srpaulo * WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF 25173426Srpaulo * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR 26173426Srpaulo * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL BROADCOM BE LIABLE 27173426Srpaulo * FOR ANY DAMAGES WHATSOEVER, AND IN PARTICULAR, BROADCOM SHALL NOT BE 28173426Srpaulo * LIABLE FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 29173426Srpaulo * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 30173426Srpaulo * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 31173426Srpaulo * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 32173426Srpaulo * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 33173426Srpaulo * OR OTHERWISE), EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34173426Srpaulo * 35173426Srpaulo * $FreeBSD$ 36173426Srpaulo */ 37173426Srpaulo 38173426Srpaulo/* ********************************************************************* 39173426Srpaulo * 40173426Srpaulo * Broadcom Common Firmware Environment (CFE) 41173426Srpaulo * 42173426Srpaulo * Device function prototypes File: cfe_api.h 43173426Srpaulo * 44173426Srpaulo * This file contains declarations for doing callbacks to 45173426Srpaulo * cfe from an application. It should be the only header 46173426Srpaulo * needed by the application to use this library 47173426Srpaulo * 48173426Srpaulo * Authors: Mitch Lichtenberg, Chris Demetriou 49173426Srpaulo * 50178118Srpaulo ********************************************************************* */ 51173426Srpaulo 52193530Sjkim#ifndef CFE_API_H 53193530Sjkim#define CFE_API_H 54193530Sjkim 55177972Srpaulo/* 56173426Srpaulo * Apply customizations here for different OSes. These need to: 57173426Srpaulo * * typedef uint64_t, int64_t, intptr_t, uintptr_t. 58178118Srpaulo * * define cfe_strlen() if use of an existing function is desired. 59178118Srpaulo * * define CFE_API_IMPL_NAMESPACE if API functions are to use 60173426Srpaulo * names in the implementation namespace. 61173426Srpaulo * Also, optionally, if the build environment does not do so automatically, 62173426Srpaulo * CFE_API_* can be defined here as desired. 63173426Srpaulo */ 64173426Srpaulo/* Begin customization. */ 65173426Srpaulo#include <sys/stdint.h> /* All of the typedefs. */ 66298937Sadrian#include <sys/systm.h> /* strlen() prototype. */ 67173426Srpaulo 68173426Srpaulo#define CFE_API_ALL 69173426Srpaulo#define cfe_strlen(x) strlen(x) 70173426Srpaulo/* End customization. */ 71173426Srpaulo 72195046Srpaulo 73173426Srpaulo/* ********************************************************************* 74195046Srpaulo * Constants 75173426Srpaulo ********************************************************************* */ 76173426Srpaulo 77173426Srpaulo/* Seal indicating CFE's presence, passed to user program. */ 78173426Srpaulo#define CFE_EPTSEAL 0x43464531 79173426Srpaulo 80173426Srpaulo#define CFE_MI_RESERVED 0 /* memory is reserved, do not use */ 81271975Srpaulo#define CFE_MI_AVAILABLE 1 /* memory is available */ 82173426Srpaulo 83173426Srpaulo#define CFE_FLG_WARMSTART 0x00000001 84173426Srpaulo#define CFE_FLG_FULL_ARENA 0x00000001 85173426Srpaulo#define CFE_FLG_ENV_PERMANENT 0x00000001 86173426Srpaulo 87173426Srpaulo#define CFE_CPU_CMD_START 1 88173426Srpaulo#define CFE_CPU_CMD_STOP 0 89173426Srpaulo 90173426Srpaulo#define CFE_STDHANDLE_CONSOLE 0 91197190Srpaulo 92197190Srpaulo#define CFE_DEV_NETWORK 1 93197190Srpaulo#define CFE_DEV_DISK 2 94197190Srpaulo#define CFE_DEV_FLASH 3 95173426Srpaulo#define CFE_DEV_SERIAL 4 96173426Srpaulo#define CFE_DEV_CPU 5 97173426Srpaulo#define CFE_DEV_NVRAM 6 98173426Srpaulo#define CFE_DEV_CLOCK 7 99271975Srpaulo#define CFE_DEV_OTHER 8 100173426Srpaulo#define CFE_DEV_MASK 0x0F 101173426Srpaulo 102173426Srpaulo#define CFE_CACHE_FLUSH_D 1 103173426Srpaulo#define CFE_CACHE_INVAL_I 2 104173426Srpaulo#define CFE_CACHE_INVAL_D 4 105173426Srpaulo#define CFE_CACHE_INVAL_L2 8 106173426Srpaulo 107173426Srpaulo#define CFE_FWI_64BIT 0x00000001 108173426Srpaulo#define CFE_FWI_32BIT 0x00000002 109173426Srpaulo#define CFE_FWI_RELOC 0x00000004 110173426Srpaulo#define CFE_FWI_UNCACHED 0x00000008 111195046Srpaulo#define CFE_FWI_MULTICPU 0x00000010 112173426Srpaulo#define CFE_FWI_FUNCSIM 0x00000020 113173426Srpaulo#define CFE_FWI_RTLSIM 0x00000040 114173426Srpaulo 115173426Srpaulotypedef struct { 116173426Srpaulo int64_t fwi_version; /* major, minor, eco version */ 117173426Srpaulo int64_t fwi_totalmem; /* total installed mem */ 118173426Srpaulo int64_t fwi_flags; /* various flags */ 119173426Srpaulo int64_t fwi_boardid; /* board ID */ 120173426Srpaulo int64_t fwi_bootarea_va; /* VA of boot area */ 121271975Srpaulo int64_t fwi_bootarea_pa; /* PA of boot area */ 122173426Srpaulo int64_t fwi_bootarea_size; /* size of boot area */ 123173426Srpaulo} cfe_fwinfo_t; 124173426Srpaulo 125173426Srpaulo 126173426Srpaulo/* 127173426Srpaulo * cfe_strlen is handled specially: If already defined, it has been 128173426Srpaulo * overridden in this environment with a standard strlen-like function. 129195046Srpaulo */ 130173426Srpaulo#ifdef cfe_strlen 131178145Srpaulo# define CFE_API_STRLEN_CUSTOM 132178145Srpaulo#else 133178145Srpaulo# ifdef CFE_API_IMPL_NAMESPACE 134173426Srpaulo# define cfe_strlen(a) __cfe_strlen(a) 135173426Srpaulo# endif 136173426Srpauloint cfe_strlen(char *name); 137173426Srpaulo#endif 138173426Srpaulo 139173426Srpaulo/* 140173426Srpaulo * Defines and prototypes for functions which take no arguments. 141298937Sadrian */ 142298937Sadrian#ifdef CFE_API_IMPL_NAMESPACE 143271975Srpauloint64_t __cfe_getticks(void); 144173426Srpaulo#define cfe_getticks() __cfe_getticks() 145173426Srpaulo#else 146173426Srpauloint64_t cfe_getticks(void); 147298937Sadrian#endif 148298937Sadrian 149298937Sadrian/* 150298937Sadrian * Defines and prototypes for the rest of the functions. 151298937Sadrian */ 152298937Sadrian#ifdef CFE_API_IMPL_NAMESPACE 153173426Srpaulo#define cfe_close(a) __cfe_close(a) 154195046Srpaulo#define cfe_cpu_start(a,b,c,d,e) __cfe_cpu_start(a,b,c,d,e) 155195046Srpaulo#define cfe_cpu_stop(a) __cfe_cpu_stop(a) 156173426Srpaulo#define cfe_enumenv(a,b,d,e,f) __cfe_enumenv(a,b,d,e,f) 157343151Sdab#define cfe_enummem(a,b,c,d,e) __cfe_enummem(a,b,c,d,e) 158343151Sdab#define cfe_exit(a,b) __cfe_exit(a,b) 159173426Srpaulo#define cfe_flushcache(a) __cfe_cacheflush(a) 160330467Seadler#define cfe_getdevinfo(a) __cfe_getdevinfo(a) 161173426Srpaulo#define cfe_getenv(a,b,c) __cfe_getenv(a,b,c) 162195046Srpaulo#define cfe_getfwinfo(a) __cfe_getfwinfo(a) 163173426Srpaulo#define cfe_getstdhandle(a) __cfe_getstdhandle(a) 164173426Srpaulo#define cfe_init(a,b) __cfe_init(a,b) 165173426Srpaulo#define cfe_inpstat(a) __cfe_inpstat(a) 166330467Seadler#define cfe_ioctl(a,b,c,d,e,f) __cfe_ioctl(a,b,c,d,e,f) 167173426Srpaulo#define cfe_open(a) __cfe_open(a) 168195046Srpaulo#define cfe_read(a,b,c) __cfe_read(a,b,c) 169173426Srpaulo#define cfe_readblk(a,b,c,d) __cfe_readblk(a,b,c,d) 170173426Srpaulo#define cfe_setenv(a,b) __cfe_setenv(a,b) 171173426Srpaulo#define cfe_write(a,b,c) __cfe_write(a,b,c) 172298937Sadrian#define cfe_writeblk(a,b,c,d) __cfe_writeblk(a,b,c,d) 173298937Sadrian#endif /* CFE_API_IMPL_NAMESPACE */ 174298937Sadrian 175298937Sadrianint cfe_close(int handle); 176298937Sadrianint cfe_cpu_start(int cpu, void (*fn)(void), long sp, long gp, long a1); 177298937Sadrianint cfe_cpu_stop(int cpu); 178330467Seadlerint cfe_enumenv(int idx, char *name, int namelen, char *val, int vallen); 179173426Srpauloint cfe_enummem(int idx, int flags, uint64_t *start, uint64_t *length, 180173426Srpaulo uint64_t *type); 181173426Srpauloint cfe_exit(int warm,int status); 182173426Srpauloint cfe_flushcache(int flg); 183173426Srpauloint cfe_getdevinfo(char *name); 184330467Seadlerint cfe_getenv(char *name, char *dest, int destlen); 185173426Srpauloint cfe_getfwinfo(cfe_fwinfo_t *info); 186173426Srpauloint cfe_getstdhandle(int flg); 187173426Srpauloint cfe_init(uint64_t handle,uint64_t ept); 188173426Srpauloint cfe_inpstat(int handle); 189173426Srpauloint cfe_ioctl(int handle, unsigned int ioctlnum, unsigned char *buffer, 190330467Seadler int length, int *retlen, uint64_t offset); 191173426Srpauloint cfe_open(char *name); 192173426Srpauloint cfe_read(int handle, unsigned char *buffer, int length); 193173426Srpauloint cfe_readblk(int handle, int64_t offset, unsigned char *buffer, int length); 194173426Srpauloint cfe_setenv(char *name, char *val); 195173426Srpauloint cfe_write(int handle, unsigned char *buffer, int length); 196330467Seadlerint cfe_writeblk(int handle, int64_t offset, unsigned char *buffer, 197173426Srpaulo int length); 198173426Srpaulo 199173426Srpaulo#endif /* CFE_API_H */ 200173426Srpaulo