diff options
| author | Rafal Jaworowski <raj@semihalf.com> | 2008-01-09 19:39:36 +0100 | 
|---|---|---|
| committer | Rafal Jaworowski <raj@semihalf.com> | 2008-01-09 19:39:36 +0100 | 
| commit | 500856eb1707ed17d9204baa61dd59948d3b2899 (patch) | |
| tree | e29338498cbf1b92ad496271e65934b890115545 /include/api_public.h | |
| parent | 26a41790f8eba19ad450e18ae91351daf485b3e2 (diff) | |
| download | olio-uboot-2014.01-500856eb1707ed17d9204baa61dd59948d3b2899.tar.xz olio-uboot-2014.01-500856eb1707ed17d9204baa61dd59948d3b2899.zip | |
API for external applications.
This is an API for external (standalone) applications running on top of
U-Boot, and is meant to be more extensible and robust than the existing
jumptable mechanism. It is similar to UNIX syscall approach. See api/README
for more details.
Included is the demo application using this new framework (api_examples).
Please note this is still an experimental feature, and is turned off by
default.
Signed-off-by: Rafal Jaworowski <raj@semihalf.com>
Diffstat (limited to 'include/api_public.h')
| -rw-r--r-- | include/api_public.h | 102 | 
1 files changed, 102 insertions, 0 deletions
| diff --git a/include/api_public.h b/include/api_public.h new file mode 100644 index 000000000..690975ee4 --- /dev/null +++ b/include/api_public.h @@ -0,0 +1,102 @@ +#ifndef _API_PUBLIC_H_ +#define _API_PUBLIC_H_ + +#define API_EINVAL		1	/* invalid argument(s)	*/ +#define API_ENODEV		2	/* no device		*/ +#define API_ENOMEM		3	/* no memory		*/ +#define API_EBUSY		4	/* busy, occupied etc.	*/ +#define API_EIO			5	/* I/O error		*/ + +typedef	int (*scp_t)(int, int *, ...); + +#define API_SIG_VERSION	1 +#define API_SIG_MAGIC	"UBootAPI" +#define API_SIG_MAGLEN	8 + +struct api_signature { +	char		magic[API_SIG_MAGLEN];	/* magic string */ +	uint16_t	version;		/* API version */ +	uint32_t	checksum;		/* checksum of this sig struct */ +	scp_t		syscall;		/* entry point to the API */ +}; + +enum { +	API_RSVD = 0, +	API_GETC, +	API_PUTC, +	API_TSTC, +	API_PUTS, +	API_RESET, +	API_GET_SYS_INFO, +	API_UDELAY, +	API_GET_TIMER, +	API_DEV_ENUM, +	API_DEV_OPEN, +	API_DEV_CLOSE, +	API_DEV_READ, +	API_DEV_WRITE, +	API_ENV_ENUM, +	API_ENV_GET, +	API_ENV_SET, +	API_MAXCALL +}; + +#define MR_ATTR_FLASH	0x0001 +#define MR_ATTR_DRAM	0x0002 +#define MR_ATTR_SRAM	0x0003 + +struct mem_region { +	unsigned long	start; +	unsigned long	size; +	int		flags; +}; + +struct sys_info { +	unsigned long		clk_bus; +	unsigned long		clk_cpu; +	unsigned long		bar; +	struct mem_region	*mr; +	int			mr_no;	/* number of memory regions */ +}; + +#undef CFG_64BIT_LBA +#ifdef CFG_64BIT_LBA +typedef	u_int64_t lbasize_t; +#else +typedef unsigned long lbasize_t; +#endif +typedef unsigned long lbastart_t; + +#define DEV_TYP_NONE	0x0000 +#define DEV_TYP_NET	0x0001 + +#define DEV_TYP_STOR	0x0002 +#define DT_STOR_IDE	0x0010 +#define DT_STOR_SCSI	0x0020 +#define DT_STOR_USB	0x0040 +#define DT_STOR_MMC	0x0080 + +#define DEV_STA_CLOSED	0x0000		/* invalid, closed */ +#define DEV_STA_OPEN	0x0001		/* open i.e. active */ + +struct device_info { +	int	type; +	void	*cookie; + +	union { +		struct { +			lbasize_t	block_count;	/* no of blocks */ +			unsigned long	block_size;	/* size of one block */ +		} storage; + +		struct { +			unsigned char	hwaddr[6]; +		} net; +	} info; +#define di_stor info.storage +#define di_net info.net + +	int	state; +}; + +#endif /* _API_PUBLIC_H_ */ |