1 /*
2  * Copyright (C) 2000, 2001, 2002 Broadcom Corporation
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
17  */
18 #ifndef CFE_API_INT_H
19 #define CFE_API_INT_H
20 
21 /*
22  * Constants.
23  */
24 #define CFE_CMD_FW_GETINFO	0
25 #define CFE_CMD_FW_RESTART	1
26 #define CFE_CMD_FW_BOOT		2
27 #define CFE_CMD_FW_CPUCTL	3
28 #define CFE_CMD_FW_GETTIME      4
29 #define CFE_CMD_FW_MEMENUM	5
30 #define CFE_CMD_FW_FLUSHCACHE	6
31 
32 #define CFE_CMD_DEV_GETHANDLE	9
33 #define CFE_CMD_DEV_ENUM	10
34 #define CFE_CMD_DEV_OPEN	11
35 #define CFE_CMD_DEV_INPSTAT	12
36 #define CFE_CMD_DEV_READ	13
37 #define CFE_CMD_DEV_WRITE	14
38 #define CFE_CMD_DEV_IOCTL	15
39 #define CFE_CMD_DEV_CLOSE	16
40 #define CFE_CMD_DEV_GETINFO	17
41 
42 #define CFE_CMD_ENV_ENUM	20
43 #define CFE_CMD_ENV_GET		22
44 #define CFE_CMD_ENV_SET		23
45 #define CFE_CMD_ENV_DEL		24
46 
47 #define CFE_CMD_MAX		32
48 
49 #define CFE_CMD_VENDOR_USE	0x8000	/* codes above this are for customer use */
50 
51 /*
52  * Structures.
53  */
54 
55 /* eeek, signed "pointers" */
56 typedef s64 cfe_xptr_t;
57 
58 struct xiocb_buffer {
59 	u64 buf_offset;		/* offset on device (bytes) */
60 	cfe_xptr_t  buf_ptr;		/* pointer to a buffer */
61 	u64 buf_length;		/* length of this buffer */
62 	u64 buf_retlen;		/* returned length (for read ops) */
63 	u64 buf_ioctlcmd;	/* IOCTL command (used only for IOCTLs) */
64 };
65 
66 struct xiocb_inpstat {
67 	u64 inp_status;		/* 1 means input available */
68 };
69 
70 struct xiocb_envbuf {
71 	s64 enum_idx;		/* 0-based enumeration index */
72 	cfe_xptr_t name_ptr;		/* name string buffer */
73 	s64 name_length;		/* size of name buffer */
74 	cfe_xptr_t val_ptr;		/* value string buffer */
75 	s64 val_length;		/* size of value string buffer */
76 };
77 
78 struct xiocb_cpuctl {
79 	u64 cpu_number;		/* cpu number to control */
80 	u64 cpu_command;	/* command to issue to CPU */
81 	u64 start_addr;		/* CPU start address */
82 	u64 gp_val;		/* starting GP value */
83 	u64 sp_val;		/* starting SP value */
84 	u64 a1_val;		/* starting A1 value */
85 };
86 
87 struct xiocb_time {
88 	s64 ticks;		/* current time in ticks */
89 };
90 
91 struct xiocb_exitstat{
92 	s64 status;
93 };
94 
95 struct xiocb_meminfo {
96 	s64 mi_idx;		/* 0-based enumeration index */
97 	s64 mi_type;		/* type of memory block */
98 	u64 mi_addr;		/* physical start address */
99 	u64 mi_size;		/* block size */
100 };
101 
102 struct xiocb_fwinfo {
103 	s64 fwi_version;		/* major, minor, eco version */
104 	s64 fwi_totalmem;	/* total installed mem */
105 	s64 fwi_flags;		/* various flags */
106 	s64 fwi_boardid;		/* board ID */
107 	s64 fwi_bootarea_va;	/* VA of boot area */
108 	s64 fwi_bootarea_pa;	/* PA of boot area */
109 	s64 fwi_bootarea_size;	/* size of boot area */
110 	s64 fwi_reserved1;
111 	s64 fwi_reserved2;
112 	s64 fwi_reserved3;
113 };
114 
115 struct cfe_xiocb {
116 	u64 xiocb_fcode;	/* IOCB function code */
117 	s64 xiocb_status;	/* return status */
118 	s64 xiocb_handle;	/* file/device handle */
119 	u64 xiocb_flags;	/* flags for this IOCB */
120 	u64 xiocb_psize;	/* size of parameter list */
121 	union {
122 		/* buffer parameters */
123 		struct xiocb_buffer xiocb_buffer;
124 
125 		/* input status parameters */
126 		struct xiocb_inpstat xiocb_inpstat;
127 
128 		/* environment function parameters */
129 		struct xiocb_envbuf xiocb_envbuf;
130 
131 		/* CPU control parameters */
132 		struct xiocb_cpuctl xiocb_cpuctl;
133 
134 		/* timer parameters */
135 		struct xiocb_time xiocb_time;
136 
137 		/* memory arena info parameters */
138 		struct xiocb_meminfo xiocb_meminfo;
139 
140 		/* firmware information */
141 		struct xiocb_fwinfo xiocb_fwinfo;
142 
143 		/* Exit Status */
144 		struct xiocb_exitstat xiocb_exitstat;
145 	} plist;
146 };
147 
148 #endif /* CFE_API_INT_H */
149