source: trunk/libs/newlib/src/libgloss/mips/cfe_api.h @ 498

Last change on this file since 498 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 8.5 KB
Line 
1/* From: CFE Id: cfe_api.h,v 1.29 2002/07/09 23:29:11 cgd Exp $ */
2
3/*
4 * Copyright 2000, 2001, 2002
5 * Broadcom Corporation. All rights reserved.
6 *
7 * This software is furnished under license and may be used and copied only
8 * in accordance with the following terms and conditions.  Subject to these
9 * conditions, you may download, copy, install, use, modify and distribute
10 * modified or unmodified copies of this software in source and/or binary
11 * form. No title or ownership is transferred hereby.
12 *
13 * 1) Any source code used, modified or distributed must reproduce and
14 *    retain this copyright notice and list of conditions as they appear in
15 *    the source file.
16 *
17 * 2) No right is granted to use any trade name, trademark, or logo of
18 *    Broadcom Corporation.  The "Broadcom Corporation" name may not be
19 *    used to endorse or promote products derived from this software
20 *    without the prior written permission of Broadcom Corporation.
21 *
22 * 3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR IMPLIED
23 *    WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF
24 *    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
25 *    NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL BROADCOM BE LIABLE
26 *    FOR ANY DAMAGES WHATSOEVER, AND IN PARTICULAR, BROADCOM SHALL NOT BE
27 *    LIABLE FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 *    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29 *    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30 *    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31 *    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
32 *    OR OTHERWISE), EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 */
34
35/*  *********************************************************************
36    *
37    *  Broadcom Common Firmware Environment (CFE)
38    *
39    *  Device function prototypes               File: cfe_api.h
40    *
41    *  This file contains declarations for doing callbacks to
42    *  cfe from an application.  It should be the only header
43    *  needed by the application to use this library
44    *
45    *  Authors:  Mitch Lichtenberg, Chris Demetriou
46    *
47    ********************************************************************* */
48
49#ifndef CFE_API_H
50#define CFE_API_H
51
52/*
53 * Apply customizations here for different OSes.  These need to:
54 *      * typedef uint64_t, int64_t, intptr_t, uintptr_t.
55 *      * define cfe_strlen() if use of an existing function is desired.
56 *      * define CFE_API_IMPL_NAMESPACE if API functions are to use
57 *        names in the implementation namespace.
58 * Also, optionally, if the build environment does not do so automatically,
59 * CFE_API_* can be defined here as desired.
60 */
61/* Begin customization. */
62#include <stdint.h>
63#include <string.h>
64#define cfe_strlen(s)   strlen(s)
65
66#define CFE_API_ALL
67#define CFE_API_IMPL_NAMESPACE
68
69/* Return the stack size to be used for the program.  Normally 32KB.  The
70   normal memory allocator uses the bottom of the stack as its heap limit,
71   so if your application uses a lot of stack space define this function
72   appropriately to keep the heap from growing into the stack.  */
73unsigned long __libcfe_stack_size(void) __attribute__((__weak__));
74
75/* Return the (max address + 1) to be used by this program.  (This address
76   minus '_end' is used as the heap size, so the address should be in the
77   same address space segments as _end.  The normal memory allocator
78   queries CFE to determine the available memory.  */
79void *__libcfe_mem_limit(void) __attribute__((__weak__));
80
81/* If the configuration ability provided by __libcfe_mem_limit() and
82   __libcfe_stack_size() do not provide enough flexibility for your
83   application's memory allocation needs, you can replace the normal
84   low-level allocator by providing the functions listed below and
85   also the function:
86
87        void *sbrk(ptrdiff_t incr);
88
89   If you provide any of these functions, you should provide all three,
90   and be sure to link them into your application as a .o file (rather
91   than a .a).
92
93   __libcfe_meminit() is responsible for initializing the low-level
94   memory allocator.
95
96   __libcfe_stack_top() returns a pointer to the top (highest address;
97   the stack grows down from that address) of the stack to be used by
98   the program.  */
99void __libcfe_meminit (void);
100void *__libcfe_stack_top (void);
101
102/* End customization. */
103
104
105/*  *********************************************************************
106    *  Constants
107    ********************************************************************* */
108
109/* Seal indicating CFE's presence, passed to user program. */
110#define CFE_EPTSEAL 0x43464531
111
112#define CFE_MI_RESERVED 0               /* memory is reserved, do not use */
113#define CFE_MI_AVAILABLE 1              /* memory is available */
114
115#define CFE_FLG_WARMSTART     0x00000001
116#define CFE_FLG_FULL_ARENA    0x00000001
117#define CFE_FLG_ENV_PERMANENT 0x00000001
118
119#define CFE_CPU_CMD_START 1
120#define CFE_CPU_CMD_STOP 0
121
122#define CFE_STDHANDLE_CONSOLE   0
123
124#define CFE_DEV_NETWORK         1
125#define CFE_DEV_DISK            2
126#define CFE_DEV_FLASH           3
127#define CFE_DEV_SERIAL          4
128#define CFE_DEV_CPU             5
129#define CFE_DEV_NVRAM           6
130#define CFE_DEV_CLOCK           7
131#define CFE_DEV_OTHER           8
132#define CFE_DEV_MASK            0x0F
133
134#define CFE_CACHE_FLUSH_D       1
135#define CFE_CACHE_INVAL_I       2
136#define CFE_CACHE_INVAL_D       4
137#define CFE_CACHE_INVAL_L2      8
138
139#define CFE_FWI_64BIT           0x00000001
140#define CFE_FWI_32BIT           0x00000002
141#define CFE_FWI_RELOC           0x00000004
142#define CFE_FWI_UNCACHED        0x00000008
143#define CFE_FWI_MULTICPU        0x00000010
144#define CFE_FWI_FUNCSIM         0x00000020
145#define CFE_FWI_RTLSIM          0x00000040
146
147typedef struct {
148    int64_t fwi_version;                /* major, minor, eco version */
149    int64_t fwi_totalmem;               /* total installed mem */
150    int64_t fwi_flags;                  /* various flags */
151    int64_t fwi_boardid;                /* board ID */
152    int64_t fwi_bootarea_va;            /* VA of boot area */
153    int64_t fwi_bootarea_pa;            /* PA of boot area */
154    int64_t fwi_bootarea_size;          /* size of boot area */
155} cfe_fwinfo_t;
156
157
158/*
159 * cfe_strlen is handled specially: If already defined, it has been
160 * overridden in this environment with a standard strlen-like function.
161 */
162#ifdef cfe_strlen
163# define CFE_API_STRLEN_CUSTOM
164#else
165# ifdef CFE_API_IMPL_NAMESPACE
166#  define cfe_strlen(a)                 __cfe_strlen(a)
167# endif
168int cfe_strlen(char *name);
169#endif
170
171/*
172 * Defines and prototypes for functions which take no arguments.
173 */
174#ifdef CFE_API_IMPL_NAMESPACE
175int64_t __cfe_getticks(void);
176#define cfe_getticks()                  __cfe_getticks()
177#else
178int64_t cfe_getticks(void);
179#endif
180
181/*
182 * Defines and prototypes for the rest of the functions.
183 */
184#ifdef CFE_API_IMPL_NAMESPACE
185#define cfe_close(a)                    __cfe_close(a)
186#define cfe_cpu_start(a,b,c,d,e)        __cfe_cpu_start(a,b,c,d,e)
187#define cfe_cpu_stop(a)                 __cfe_cpu_stop(a)
188#define cfe_enumenv(a,b,d,e,f)          __cfe_enumenv(a,b,d,e,f)
189#define cfe_enummem(a,b,c,d,e)          __cfe_enummem(a,b,c,d,e)
190#define cfe_exit(a,b)                   __cfe_exit(a,b)
191#define cfe_flushcache(a)               __cfe_cacheflush(a)
192#define cfe_getdevinfo(a)               __cfe_getdevinfo(a)
193#define cfe_getenv(a,b,c)               __cfe_getenv(a,b,c)
194#define cfe_getfwinfo(a)                __cfe_getfwinfo(a)
195#define cfe_getstdhandle(a)             __cfe_getstdhandle(a)
196#define cfe_init(a,b)                   __cfe_init(a,b)
197#define cfe_inpstat(a)                  __cfe_inpstat(a)
198#define cfe_ioctl(a,b,c,d,e,f)          __cfe_ioctl(a,b,c,d,e,f)
199#define cfe_open(a)                     __cfe_open(a)
200#define cfe_read(a,b,c)                 __cfe_read(a,b,c)
201#define cfe_readblk(a,b,c,d)            __cfe_readblk(a,b,c,d)
202#define cfe_setenv(a,b)                 __cfe_setenv(a,b)
203#define cfe_write(a,b,c)                __cfe_write(a,b,c)
204#define cfe_writeblk(a,b,c,d)           __cfe_writeblk(a,b,c,d)
205#endif /* CFE_API_IMPL_NAMESPACE */
206
207int cfe_close(int handle);
208int cfe_cpu_start(int cpu, void (*fn)(void), long sp, long gp, long a1);
209int cfe_cpu_stop(int cpu);
210int cfe_enumenv(int idx, char *name, int namelen, char *val, int vallen);
211int cfe_enummem(int idx, int flags, uint64_t *start, uint64_t *length,
212                uint64_t *type);
213int cfe_exit(int warm,int status);
214int cfe_flushcache(int flg);
215int cfe_getdevinfo(char *name);
216int cfe_getenv(char *name, char *dest, int destlen);
217int cfe_getfwinfo(cfe_fwinfo_t *info);
218int cfe_getstdhandle(int flg);
219int cfe_init(uint64_t handle,uint64_t ept);
220int cfe_inpstat(int handle);
221int cfe_ioctl(int handle, unsigned int ioctlnum, unsigned char *buffer,
222              int length, int *retlen, uint64_t offset);
223int cfe_open(char *name);
224int cfe_read(int handle, unsigned char *buffer, int length);
225int cfe_readblk(int handle, int64_t offset, unsigned char *buffer, int length);
226int cfe_setenv(char *name, char *val);
227int cfe_write(int handle, unsigned char *buffer, int length);
228int cfe_writeblk(int handle, int64_t offset, unsigned char *buffer,
229                 int length);
230
231#endif /* CFE_API_H */
Note: See TracBrowser for help on using the repository browser.