1/*
2 * (C) Copyright 2007-2008 Semihalf
3 *
4 * Written by: Rafal Jaworowski <raj@semihalf.com>
5 *
6 * This file is dual licensed; you can use it under the terms of
7 * either the GPL, or the BSD license, at your option.
8 *
9 * I. GPL:
10 *
11 * This file is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License as
13 * published by the Free Software Foundation; either version 2 of
14 * the License, or (at your option) any later version.
15 *
16 * This file is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
24 * MA 02111-1307 USA
25 *
26 * Alternatively,
27 *
28 * II. BSD license:
29 *
30 * Redistribution and use in source and binary forms, with or without
31 * modification, are permitted provided that the following conditions
32 * are met:
33 * 1. Redistributions of source code must retain the above copyright
34 *    notice, this list of conditions and the following disclaimer.
35 * 2. Redistributions in binary form must reproduce the above copyright
36 *    notice, this list of conditions and the following disclaimer in the
37 *    documentation and/or other materials provided with the distribution.
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
40 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
42 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
43 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
44 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
45 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
46 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
47 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
48 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
49 * SUCH DAMAGE.
50 *
51 * $FreeBSD$
52 *
53 * This file needs to be kept in sync with U-Boot reference:
54 * http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=blob;f=include/api_public.h
55 */
56
57#ifndef _API_PUBLIC_H_
58#define	_API_PUBLIC_H_
59
60#define	API_EINVAL		1	/* invalid argument(s)	*/
61#define	API_ENODEV		2	/* no device		*/
62#define	API_ENOMEM		3	/* no memory		*/
63#define	API_EBUSY		4	/* busy, occupied etc.	*/
64#define	API_EIO			5	/* I/O error		*/
65#define	API_ESYSC		6	/* syscall error	*/
66
67typedef int (*scp_t)(int, int *, ...);
68
69#define	API_SIG_VERSION	1
70#define	API_SIG_MAGIC	"UBootAPI"
71#define	API_SIG_MAGLEN	8
72
73struct api_signature {
74	char		magic[API_SIG_MAGLEN];	/* magic string */
75	uint16_t	version;	/* API version */
76	uint32_t	checksum;	/* checksum of this sig struct */
77	scp_t		syscall;	/* entry point to the API */
78};
79
80enum {
81	API_RSVD = 0,
82	API_GETC,
83	API_PUTC,
84	API_TSTC,
85	API_PUTS,
86	API_RESET,
87	API_GET_SYS_INFO,
88	API_UDELAY,
89	API_GET_TIMER,
90	API_DEV_ENUM,
91	API_DEV_OPEN,
92	API_DEV_CLOSE,
93	API_DEV_READ,
94	API_DEV_WRITE,
95	API_ENV_ENUM,
96	API_ENV_GET,
97	API_ENV_SET,
98	API_MAXCALL
99};
100
101#define	MR_ATTR_FLASH	0x0001
102#define	MR_ATTR_DRAM	0x0002
103#define	MR_ATTR_SRAM	0x0003
104
105struct mem_region {
106	unsigned long	start;
107	unsigned long	size;
108	int		flags;
109};
110
111struct sys_info {
112	unsigned long		clk_bus;
113	unsigned long		clk_cpu;
114	unsigned long		bar;
115	struct mem_region	*mr;
116	int			mr_no;	/* number of memory regions */
117};
118
119#undef CFG_64BIT_LBA
120#ifdef CFG_64BIT_LBA
121typedef	uint64_t lbasize_t;
122#else
123typedef unsigned long lbasize_t;
124#endif
125typedef unsigned long lbastart_t;
126
127#define	DEV_TYP_NONE	0x0000
128#define	DEV_TYP_NET	0x0001
129
130#define	DEV_TYP_STOR	0x0002
131#define	DT_STOR_IDE	0x0010
132#define	DT_STOR_SCSI	0x0020
133#define	DT_STOR_USB	0x0040
134#define	DT_STOR_MMC	0x0080
135
136#define	DEV_STA_CLOSED	0x0000		/* invalid, closed */
137#define	DEV_STA_OPEN	0x0001		/* open i.e. active */
138
139struct device_info {
140	int	type;
141	void	*cookie;
142
143	union {
144		struct {
145			lbasize_t	block_count;	/* no of blocks */
146			unsigned long	block_size;	/* size of one block */
147		} storage;
148
149		struct {
150			unsigned char	hwaddr[6];
151		} net;
152	} info;
153#define	di_stor info.storage
154#define	di_net info.net
155
156	int	state;
157};
158
159#endif /* _API_PUBLIC_H_ */
160