mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-28 22:49:43 +02:00
190 lines
5.8 KiB
C
190 lines
5.8 KiB
C
|
/*
|
||
|
* Broadcom Common Firmware Environment (CFE) support
|
||
|
*
|
||
|
* Copyright 2000, 2001, 2002
|
||
|
* Broadcom Corporation. All rights reserved.
|
||
|
*
|
||
|
* Copyright (C) 2006 Michael Buesch
|
||
|
*
|
||
|
* Original Authors: Mitch Lichtenberg, Chris Demetriou
|
||
|
*
|
||
|
* 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,
|
||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||
|
* OR OTHERWISE), EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
*/
|
||
|
|
||
|
#ifndef LINUX_CFE_API_H_
|
||
|
#define LINUX_CFE_API_H_
|
||
|
|
||
|
#include <linux/types.h>
|
||
|
|
||
|
|
||
|
#define CFE_MI_RESERVED 0 /* memory is reserved, do not use */
|
||
|
#define CFE_MI_AVAILABLE 1 /* memory is available */
|
||
|
|
||
|
#define CFE_FLG_WARMSTART 0x00000001
|
||
|
#define CFE_FLG_FULL_ARENA 0x00000001
|
||
|
#define CFE_FLG_ENV_PERMANENT 0x00000001
|
||
|
|
||
|
#define CFE_CPU_CMD_START 1
|
||
|
#define CFE_CPU_CMD_STOP 0
|
||
|
|
||
|
#define CFE_STDHANDLE_CONSOLE 0
|
||
|
|
||
|
#define CFE_DEV_NETWORK 1
|
||
|
#define CFE_DEV_DISK 2
|
||
|
#define CFE_DEV_FLASH 3
|
||
|
#define CFE_DEV_SERIAL 4
|
||
|
#define CFE_DEV_CPU 5
|
||
|
#define CFE_DEV_NVRAM 6
|
||
|
#define CFE_DEV_CLOCK 7
|
||
|
#define CFE_DEV_OTHER 8
|
||
|
#define CFE_DEV_MASK 0x0F
|
||
|
|
||
|
#define CFE_CACHE_FLUSH_D 1
|
||
|
#define CFE_CACHE_INVAL_I 2
|
||
|
#define CFE_CACHE_INVAL_D 4
|
||
|
#define CFE_CACHE_INVAL_L2 8
|
||
|
|
||
|
#define CFE_FWI_64BIT 0x00000001
|
||
|
#define CFE_FWI_32BIT 0x00000002
|
||
|
#define CFE_FWI_RELOC 0x00000004
|
||
|
#define CFE_FWI_UNCACHED 0x00000008
|
||
|
#define CFE_FWI_MULTICPU 0x00000010
|
||
|
#define CFE_FWI_FUNCSIM 0x00000020
|
||
|
#define CFE_FWI_RTLSIM 0x00000040
|
||
|
|
||
|
struct cfe_fwinfo {
|
||
|
s64 version; /* major, minor, eco version */
|
||
|
s64 totalmem; /* total installed mem */
|
||
|
s64 flags; /* various flags */
|
||
|
s64 boardid; /* board ID */
|
||
|
s64 bootarea_va; /* VA of boot area */
|
||
|
s64 bootarea_pa; /* PA of boot area */
|
||
|
s64 bootarea_size; /* size of boot area */
|
||
|
};
|
||
|
|
||
|
|
||
|
/* The public CFE API */
|
||
|
|
||
|
int cfe_present(void); /* Check if we booted from CFE. Returns bool */
|
||
|
|
||
|
int cfe_getticks(s64 *ticks);
|
||
|
int cfe_close(int handle);
|
||
|
int cfe_cpu_start(int cpu, void (*fn)(void), long sp, long gp, long a1);
|
||
|
int cfe_cpu_stop(int cpu);
|
||
|
int cfe_enumenv(int idx, char *name, int namelen, char *val, int vallen);
|
||
|
int cfe_enumdev(int idx, char *name, int namelen);
|
||
|
int cfe_enummem(int idx, int flags, u64 *start, u64 *length,
|
||
|
u64 *type);
|
||
|
int cfe_exit(int warm, int status);
|
||
|
int cfe_flushcache(int flags);
|
||
|
int cfe_getdevinfo(char *name);
|
||
|
int cfe_getenv(char *name, char *dest, int destlen);
|
||
|
int cfe_getfwinfo(struct cfe_fwinfo *info);
|
||
|
int cfe_getstdhandle(int handletype);
|
||
|
int cfe_inpstat(int handle);
|
||
|
int cfe_ioctl(int handle, unsigned int ioctlnum, unsigned char *buffer,
|
||
|
int length, int *retlen, u64 offset);
|
||
|
int cfe_open(char *name);
|
||
|
int cfe_read(int handle, unsigned char *buffer, int length);
|
||
|
int cfe_readblk(int handle, s64 offset, unsigned char *buffer, int length);
|
||
|
int cfe_setenv(char *name, char *val);
|
||
|
int cfe_write(int handle, unsigned char *buffer, int length);
|
||
|
int cfe_writeblk(int handle, s64 offset, unsigned char *buffer,
|
||
|
int length);
|
||
|
|
||
|
|
||
|
/* High level API */
|
||
|
|
||
|
/* Print some information to CFE's console (most likely serial line) */
|
||
|
int cfe_printk(const char *fmt, ...) __attribute__((format(printf, 1, 2)));
|
||
|
int cfe_vprintk(const char *fmt, va_list args);
|
||
|
|
||
|
|
||
|
|
||
|
/* Error codes returned by the low API functions */
|
||
|
|
||
|
#define CFE_ISERR(errcode) (errcode < 0)
|
||
|
|
||
|
#define CFE_OK 0
|
||
|
#define CFE_ERR -1 /* generic error */
|
||
|
#define CFE_ERR_INV_COMMAND -2
|
||
|
#define CFE_ERR_EOF -3
|
||
|
#define CFE_ERR_IOERR -4
|
||
|
#define CFE_ERR_NOMEM -5
|
||
|
#define CFE_ERR_DEVNOTFOUND -6
|
||
|
#define CFE_ERR_DEVOPEN -7
|
||
|
#define CFE_ERR_INV_PARAM -8
|
||
|
#define CFE_ERR_ENVNOTFOUND -9
|
||
|
#define CFE_ERR_ENVREADONLY -10
|
||
|
|
||
|
#define CFE_ERR_NOTELF -11
|
||
|
#define CFE_ERR_NOT32BIT -12
|
||
|
#define CFE_ERR_WRONGENDIAN -13
|
||
|
#define CFE_ERR_BADELFVERS -14
|
||
|
#define CFE_ERR_NOTMIPS -15
|
||
|
#define CFE_ERR_BADELFFMT -16
|
||
|
#define CFE_ERR_BADADDR -17
|
||
|
|
||
|
#define CFE_ERR_FILENOTFOUND -18
|
||
|
#define CFE_ERR_UNSUPPORTED -19
|
||
|
|
||
|
#define CFE_ERR_HOSTUNKNOWN -20
|
||
|
|
||
|
#define CFE_ERR_TIMEOUT -21
|
||
|
|
||
|
#define CFE_ERR_PROTOCOLERR -22
|
||
|
|
||
|
#define CFE_ERR_NETDOWN -23
|
||
|
#define CFE_ERR_NONAMESERVER -24
|
||
|
|
||
|
#define CFE_ERR_NOHANDLES -25
|
||
|
#define CFE_ERR_ALREADYBOUND -26
|
||
|
|
||
|
#define CFE_ERR_CANNOTSET -27
|
||
|
#define CFE_ERR_NOMORE -28
|
||
|
#define CFE_ERR_BADFILESYS -29
|
||
|
#define CFE_ERR_FSNOTAVAIL -30
|
||
|
|
||
|
#define CFE_ERR_INVBOOTBLOCK -31
|
||
|
#define CFE_ERR_WRONGDEVTYPE -32
|
||
|
#define CFE_ERR_BBCHECKSUM -33
|
||
|
#define CFE_ERR_BOOTPROGCHKSUM -34
|
||
|
|
||
|
#define CFE_ERR_LDRNOTAVAIL -35
|
||
|
|
||
|
#define CFE_ERR_NOTREADY -36
|
||
|
|
||
|
#define CFE_ERR_GETMEM -37
|
||
|
#define CFE_ERR_SETMEM -38
|
||
|
|
||
|
#define CFE_ERR_NOTCONN -39
|
||
|
#define CFE_ERR_ADDRINUSE -40
|
||
|
|
||
|
|
||
|
#endif /* LINUX_CFE_API_H_ */
|