cfe_api.c revision 1.1.10.2 1 1.1.10.2 jdolecek /* $NetBSD: cfe_api.c,v 1.1.10.2 2002/06/23 17:37:59 jdolecek Exp $ */
2 1.1.10.2 jdolecek
3 1.1.10.2 jdolecek /*
4 1.1.10.2 jdolecek * Copyright 2000, 2001
5 1.1.10.2 jdolecek * Broadcom Corporation. All rights reserved.
6 1.1.10.2 jdolecek *
7 1.1.10.2 jdolecek * This software is furnished under license and may be used and copied only
8 1.1.10.2 jdolecek * in accordance with the following terms and conditions. Subject to these
9 1.1.10.2 jdolecek * conditions, you may download, copy, install, use, modify and distribute
10 1.1.10.2 jdolecek * modified or unmodified copies of this software in source and/or binary
11 1.1.10.2 jdolecek * form. No title or ownership is transferred hereby.
12 1.1.10.2 jdolecek *
13 1.1.10.2 jdolecek * 1) Any source code used, modified or distributed must reproduce and
14 1.1.10.2 jdolecek * retain this copyright notice and list of conditions as they appear in
15 1.1.10.2 jdolecek * the source file.
16 1.1.10.2 jdolecek *
17 1.1.10.2 jdolecek * 2) No right is granted to use any trade name, trademark, or logo of
18 1.1.10.2 jdolecek * Broadcom Corporation. Neither the "Broadcom Corporation" name nor any
19 1.1.10.2 jdolecek * trademark or logo of Broadcom Corporation may be used to endorse or
20 1.1.10.2 jdolecek * promote products derived from this software without the prior written
21 1.1.10.2 jdolecek * permission of Broadcom Corporation.
22 1.1.10.2 jdolecek *
23 1.1.10.2 jdolecek * 3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR IMPLIED
24 1.1.10.2 jdolecek * WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF
25 1.1.10.2 jdolecek * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
26 1.1.10.2 jdolecek * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL BROADCOM BE LIABLE
27 1.1.10.2 jdolecek * FOR ANY DAMAGES WHATSOEVER, AND IN PARTICULAR, BROADCOM SHALL NOT BE
28 1.1.10.2 jdolecek * LIABLE FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 1.1.10.2 jdolecek * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 1.1.10.2 jdolecek * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
31 1.1.10.2 jdolecek * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
32 1.1.10.2 jdolecek * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
33 1.1.10.2 jdolecek * OR OTHERWISE), EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 1.1.10.2 jdolecek */
35 1.1.10.2 jdolecek
36 1.1.10.2 jdolecek /* *********************************************************************
37 1.1.10.2 jdolecek * Broadcom Common Firmware Environment (CFE)
38 1.1.10.2 jdolecek *
39 1.1.10.2 jdolecek * Device Function stubs File: cfe_api.c
40 1.1.10.2 jdolecek *
41 1.1.10.2 jdolecek * This module contains device function stubs (small routines to
42 1.1.10.2 jdolecek * call the standard "iocb" interface entry point to CFE).
43 1.1.10.2 jdolecek * There should be one routine here per iocb function call.
44 1.1.10.2 jdolecek *
45 1.1.10.2 jdolecek * Author: Mitch Lichtenberg (mpl (at) broadcom.com)
46 1.1.10.2 jdolecek *
47 1.1.10.2 jdolecek ********************************************************************* */
48 1.1.10.2 jdolecek
49 1.1.10.2 jdolecek
50 1.1.10.2 jdolecek #include <sys/types.h>
51 1.1.10.2 jdolecek
52 1.1.10.2 jdolecek #include <mips/cfe/cfe_xiocb.h>
53 1.1.10.2 jdolecek #include <mips/cfe/cfe_api.h>
54 1.1.10.2 jdolecek
55 1.1.10.2 jdolecek typedef long intptr_t;
56 1.1.10.2 jdolecek typedef u_long uintptr_t;
57 1.1.10.2 jdolecek
58 1.1.10.2 jdolecek /*
59 1.1.10.2 jdolecek * Declare the dispatch function with args of "intptr_t".
60 1.1.10.2 jdolecek * This makes sure whatever model we're compiling in
61 1.1.10.2 jdolecek * puts the pointers in a single register. For example,
62 1.1.10.2 jdolecek * combining -mlong64 and -mips1 or -mips2 would lead to
63 1.1.10.2 jdolecek * trouble, since the handle and IOCB pointer will be
64 1.1.10.2 jdolecek * passed in two registers each, and CFE expects one.
65 1.1.10.2 jdolecek */
66 1.1.10.2 jdolecek
67 1.1.10.2 jdolecek static int (*cfe_dispfunc)(intptr_t handle,intptr_t xiocb) = 0;
68 1.1.10.2 jdolecek static cfe_xuint_t cfe_handle = 0;
69 1.1.10.2 jdolecek int cfe_iocb_dispatch(cfe_xiocb_t *xiocb);
70 1.1.10.2 jdolecek
71 1.1.10.2 jdolecek int cfe_init(cfe_xuint_t handle)
72 1.1.10.2 jdolecek {
73 1.1.10.2 jdolecek u_int *sealloc = (u_int *) (intptr_t) (int) CFE_APISEAL;
74 1.1.10.2 jdolecek if (*sealloc != CFE_EPTSEAL) return -1;
75 1.1.10.2 jdolecek cfe_dispfunc = (void *) (cfe_xptr_t) (int) CFE_APIENTRY;
76 1.1.10.2 jdolecek if (handle) cfe_handle = handle;
77 1.1.10.2 jdolecek return 0;
78 1.1.10.2 jdolecek }
79 1.1.10.2 jdolecek
80 1.1.10.2 jdolecek int cfe_iocb_dispatch(cfe_xiocb_t *xiocb)
81 1.1.10.2 jdolecek {
82 1.1.10.2 jdolecek if (!cfe_dispfunc) return -1;
83 1.1.10.2 jdolecek return (*cfe_dispfunc)((intptr_t) cfe_handle,(intptr_t) xiocb);
84 1.1.10.2 jdolecek }
85 1.1.10.2 jdolecek
86 1.1.10.2 jdolecek static int cfe_strlen(char *name)
87 1.1.10.2 jdolecek {
88 1.1.10.2 jdolecek int count = 0;
89 1.1.10.2 jdolecek
90 1.1.10.2 jdolecek while (*name) {
91 1.1.10.2 jdolecek count++;
92 1.1.10.2 jdolecek name++;
93 1.1.10.2 jdolecek }
94 1.1.10.2 jdolecek
95 1.1.10.2 jdolecek return count;
96 1.1.10.2 jdolecek }
97 1.1.10.2 jdolecek
98 1.1.10.2 jdolecek int cfe_open(char *name)
99 1.1.10.2 jdolecek {
100 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
101 1.1.10.2 jdolecek
102 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_DEV_OPEN;
103 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
104 1.1.10.2 jdolecek xiocb.xiocb_handle = 0;
105 1.1.10.2 jdolecek xiocb.xiocb_flags = 0;
106 1.1.10.2 jdolecek xiocb.xiocb_psize = sizeof(xiocb_buffer_t);
107 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_offset = 0;
108 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_ptr = (cfe_xptr_t) (intptr_t) name;
109 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_length = cfe_strlen(name);
110 1.1.10.2 jdolecek
111 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
112 1.1.10.2 jdolecek
113 1.1.10.2 jdolecek return (xiocb.xiocb_status < 0) ? xiocb.xiocb_status : xiocb.xiocb_handle;
114 1.1.10.2 jdolecek }
115 1.1.10.2 jdolecek
116 1.1.10.2 jdolecek int cfe_close(int handle)
117 1.1.10.2 jdolecek {
118 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
119 1.1.10.2 jdolecek
120 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_DEV_CLOSE;
121 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
122 1.1.10.2 jdolecek xiocb.xiocb_handle = handle;
123 1.1.10.2 jdolecek xiocb.xiocb_flags = 0;
124 1.1.10.2 jdolecek xiocb.xiocb_psize = 0;
125 1.1.10.2 jdolecek
126 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
127 1.1.10.2 jdolecek
128 1.1.10.2 jdolecek return (xiocb.xiocb_status);
129 1.1.10.2 jdolecek
130 1.1.10.2 jdolecek }
131 1.1.10.2 jdolecek
132 1.1.10.2 jdolecek int cfe_readblk(int handle,cfe_xint_t offset,u_char *buffer,int length)
133 1.1.10.2 jdolecek {
134 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
135 1.1.10.2 jdolecek
136 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_DEV_READ;
137 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
138 1.1.10.2 jdolecek xiocb.xiocb_handle = handle;
139 1.1.10.2 jdolecek xiocb.xiocb_flags = 0;
140 1.1.10.2 jdolecek xiocb.xiocb_psize = sizeof(xiocb_buffer_t);
141 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_offset = offset;
142 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_ptr = (cfe_xptr_t) (intptr_t) buffer;
143 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_length = length;
144 1.1.10.2 jdolecek
145 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
146 1.1.10.2 jdolecek
147 1.1.10.2 jdolecek return (xiocb.xiocb_status < 0) ? xiocb.xiocb_status : xiocb.plist.xiocb_buffer.buf_retlen;
148 1.1.10.2 jdolecek }
149 1.1.10.2 jdolecek
150 1.1.10.2 jdolecek int cfe_read(int handle,u_char *buffer,int length)
151 1.1.10.2 jdolecek {
152 1.1.10.2 jdolecek return cfe_readblk(handle,0,buffer,length);
153 1.1.10.2 jdolecek }
154 1.1.10.2 jdolecek
155 1.1.10.2 jdolecek
156 1.1.10.2 jdolecek int cfe_writeblk(int handle,cfe_xint_t offset,u_char *buffer,int length)
157 1.1.10.2 jdolecek {
158 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
159 1.1.10.2 jdolecek
160 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_DEV_WRITE;
161 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
162 1.1.10.2 jdolecek xiocb.xiocb_handle = handle;
163 1.1.10.2 jdolecek xiocb.xiocb_flags = 0;
164 1.1.10.2 jdolecek xiocb.xiocb_psize = sizeof(xiocb_buffer_t);
165 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_offset = offset;
166 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_ptr = (cfe_xptr_t) (intptr_t) buffer;
167 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_length = length;
168 1.1.10.2 jdolecek
169 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
170 1.1.10.2 jdolecek
171 1.1.10.2 jdolecek return (xiocb.xiocb_status < 0) ? xiocb.xiocb_status : xiocb.plist.xiocb_buffer.buf_retlen;
172 1.1.10.2 jdolecek }
173 1.1.10.2 jdolecek
174 1.1.10.2 jdolecek int cfe_write(int handle,u_char *buffer,int length)
175 1.1.10.2 jdolecek {
176 1.1.10.2 jdolecek return cfe_writeblk(handle,0,buffer,length);
177 1.1.10.2 jdolecek }
178 1.1.10.2 jdolecek
179 1.1.10.2 jdolecek
180 1.1.10.2 jdolecek int cfe_ioctl(int handle,u_int ioctlnum,u_char *buffer,int length,int *retlen)
181 1.1.10.2 jdolecek {
182 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
183 1.1.10.2 jdolecek
184 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_DEV_IOCTL;
185 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
186 1.1.10.2 jdolecek xiocb.xiocb_handle = handle;
187 1.1.10.2 jdolecek xiocb.xiocb_flags = 0;
188 1.1.10.2 jdolecek xiocb.xiocb_psize = sizeof(xiocb_buffer_t);
189 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_ioctlcmd = (cfe_xint_t) ioctlnum;
190 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_ptr = (cfe_xptr_t) (intptr_t) buffer;
191 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_length = length;
192 1.1.10.2 jdolecek
193 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
194 1.1.10.2 jdolecek
195 1.1.10.2 jdolecek if (retlen) *retlen = xiocb.plist.xiocb_buffer.buf_retlen;
196 1.1.10.2 jdolecek return xiocb.xiocb_status;
197 1.1.10.2 jdolecek }
198 1.1.10.2 jdolecek
199 1.1.10.2 jdolecek int cfe_inpstat(int handle)
200 1.1.10.2 jdolecek {
201 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
202 1.1.10.2 jdolecek
203 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_DEV_INPSTAT;
204 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
205 1.1.10.2 jdolecek xiocb.xiocb_handle = handle;
206 1.1.10.2 jdolecek xiocb.xiocb_flags = 0;
207 1.1.10.2 jdolecek xiocb.xiocb_psize = sizeof(xiocb_inpstat_t);
208 1.1.10.2 jdolecek xiocb.plist.xiocb_inpstat.inp_status = 0;
209 1.1.10.2 jdolecek
210 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
211 1.1.10.2 jdolecek
212 1.1.10.2 jdolecek if (xiocb.xiocb_status < 0) return xiocb.xiocb_status;
213 1.1.10.2 jdolecek
214 1.1.10.2 jdolecek return xiocb.plist.xiocb_inpstat.inp_status;
215 1.1.10.2 jdolecek
216 1.1.10.2 jdolecek }
217 1.1.10.2 jdolecek
218 1.1.10.2 jdolecek long long cfe_getticks(void)
219 1.1.10.2 jdolecek {
220 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
221 1.1.10.2 jdolecek
222 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_FW_GETTIME;
223 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
224 1.1.10.2 jdolecek xiocb.xiocb_handle = 0;
225 1.1.10.2 jdolecek xiocb.xiocb_flags = 0;
226 1.1.10.2 jdolecek xiocb.xiocb_psize = sizeof(xiocb_time_t);
227 1.1.10.2 jdolecek xiocb.plist.xiocb_time.ticks = 0;
228 1.1.10.2 jdolecek
229 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
230 1.1.10.2 jdolecek
231 1.1.10.2 jdolecek return xiocb.plist.xiocb_time.ticks;
232 1.1.10.2 jdolecek
233 1.1.10.2 jdolecek }
234 1.1.10.2 jdolecek
235 1.1.10.2 jdolecek int cfe_getenv(char *name,char *dest,int destlen)
236 1.1.10.2 jdolecek {
237 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
238 1.1.10.2 jdolecek
239 1.1.10.2 jdolecek *dest = 0;
240 1.1.10.2 jdolecek
241 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_ENV_GET;
242 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
243 1.1.10.2 jdolecek xiocb.xiocb_handle = 0;
244 1.1.10.2 jdolecek xiocb.xiocb_flags = 0;
245 1.1.10.2 jdolecek xiocb.xiocb_psize = sizeof(xiocb_envbuf_t);
246 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.enum_idx = 0;
247 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.name_ptr = (cfe_xptr_t) (intptr_t) name;
248 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.name_length = cfe_strlen(name);
249 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.val_ptr = (cfe_xptr_t) (intptr_t) dest;
250 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.val_length = destlen;
251 1.1.10.2 jdolecek
252 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
253 1.1.10.2 jdolecek
254 1.1.10.2 jdolecek return xiocb.xiocb_status;
255 1.1.10.2 jdolecek }
256 1.1.10.2 jdolecek
257 1.1.10.2 jdolecek int cfe_setenv(char *name,char *val)
258 1.1.10.2 jdolecek {
259 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
260 1.1.10.2 jdolecek
261 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_ENV_SET;
262 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
263 1.1.10.2 jdolecek xiocb.xiocb_handle = 0;
264 1.1.10.2 jdolecek xiocb.xiocb_flags = 0;
265 1.1.10.2 jdolecek xiocb.xiocb_psize = sizeof(xiocb_envbuf_t);
266 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.enum_idx = 0;
267 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.name_ptr = (cfe_xptr_t) (intptr_t) name;
268 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.name_length = cfe_strlen(name);
269 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.val_ptr = (cfe_xptr_t) (intptr_t) val;
270 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.val_length = cfe_strlen(val);
271 1.1.10.2 jdolecek
272 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
273 1.1.10.2 jdolecek
274 1.1.10.2 jdolecek return xiocb.xiocb_status;
275 1.1.10.2 jdolecek }
276 1.1.10.2 jdolecek
277 1.1.10.2 jdolecek int cfe_enumenv(int idx,char *name,int namelen,char *val,int vallen)
278 1.1.10.2 jdolecek {
279 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
280 1.1.10.2 jdolecek
281 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_ENV_SET;
282 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
283 1.1.10.2 jdolecek xiocb.xiocb_handle = 0;
284 1.1.10.2 jdolecek xiocb.xiocb_flags = 0;
285 1.1.10.2 jdolecek xiocb.xiocb_psize = sizeof(xiocb_envbuf_t);
286 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.enum_idx = idx;
287 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.name_ptr = (cfe_xptr_t) (intptr_t) name;
288 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.name_length = namelen;
289 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.val_ptr = (cfe_xptr_t) (intptr_t) val;
290 1.1.10.2 jdolecek xiocb.plist.xiocb_envbuf.val_length = vallen;
291 1.1.10.2 jdolecek
292 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
293 1.1.10.2 jdolecek
294 1.1.10.2 jdolecek return xiocb.xiocb_status;
295 1.1.10.2 jdolecek }
296 1.1.10.2 jdolecek
297 1.1.10.2 jdolecek int cfe_exit(int warm,int status)
298 1.1.10.2 jdolecek {
299 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
300 1.1.10.2 jdolecek
301 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_FW_RESTART;
302 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
303 1.1.10.2 jdolecek xiocb.xiocb_handle = 0;
304 1.1.10.2 jdolecek xiocb.xiocb_flags = warm ? CFE_FLG_WARMSTART : 0;
305 1.1.10.2 jdolecek xiocb.xiocb_psize = sizeof(xiocb_exitstat_t);
306 1.1.10.2 jdolecek xiocb.plist.xiocb_exitstat.status = (cfe_xint_t) status;
307 1.1.10.2 jdolecek
308 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
309 1.1.10.2 jdolecek
310 1.1.10.2 jdolecek return (xiocb.xiocb_status);
311 1.1.10.2 jdolecek
312 1.1.10.2 jdolecek }
313 1.1.10.2 jdolecek
314 1.1.10.2 jdolecek int cfe_flushcache(int flg)
315 1.1.10.2 jdolecek {
316 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
317 1.1.10.2 jdolecek
318 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_FW_FLUSHCACHE;
319 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
320 1.1.10.2 jdolecek xiocb.xiocb_handle = 0;
321 1.1.10.2 jdolecek xiocb.xiocb_flags = flg;
322 1.1.10.2 jdolecek xiocb.xiocb_psize = 0;
323 1.1.10.2 jdolecek
324 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
325 1.1.10.2 jdolecek
326 1.1.10.2 jdolecek return xiocb.xiocb_status;
327 1.1.10.2 jdolecek }
328 1.1.10.2 jdolecek
329 1.1.10.2 jdolecek int cfe_getstdhandle(int flg)
330 1.1.10.2 jdolecek {
331 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
332 1.1.10.2 jdolecek
333 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_DEV_GETHANDLE;
334 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
335 1.1.10.2 jdolecek xiocb.xiocb_handle = 0;
336 1.1.10.2 jdolecek xiocb.xiocb_flags = flg;
337 1.1.10.2 jdolecek xiocb.xiocb_psize = 0;
338 1.1.10.2 jdolecek
339 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
340 1.1.10.2 jdolecek
341 1.1.10.2 jdolecek return (xiocb.xiocb_status < 0) ? xiocb.xiocb_status : xiocb.xiocb_handle;
342 1.1.10.2 jdolecek
343 1.1.10.2 jdolecek }
344 1.1.10.2 jdolecek
345 1.1.10.2 jdolecek int cfe_getdevinfo(char *name)
346 1.1.10.2 jdolecek {
347 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
348 1.1.10.2 jdolecek
349 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_DEV_GETINFO;
350 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
351 1.1.10.2 jdolecek xiocb.xiocb_handle = 0;
352 1.1.10.2 jdolecek xiocb.xiocb_flags = 0;
353 1.1.10.2 jdolecek xiocb.xiocb_psize = sizeof(xiocb_buffer_t);
354 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_offset = 0;
355 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_ptr = (cfe_xptr_t) (intptr_t) name;
356 1.1.10.2 jdolecek xiocb.plist.xiocb_buffer.buf_length = cfe_strlen(name);
357 1.1.10.2 jdolecek
358 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
359 1.1.10.2 jdolecek
360 1.1.10.2 jdolecek return (xiocb.xiocb_status < 0) ? xiocb.xiocb_status : (int)xiocb.plist.xiocb_buffer.buf_devflags;
361 1.1.10.2 jdolecek }
362 1.1.10.2 jdolecek
363 1.1.10.2 jdolecek int cfe_getmeminfo(int idx,cfe_xuint_t *start,cfe_xuint_t *length,cfe_xuint_t *type)
364 1.1.10.2 jdolecek {
365 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
366 1.1.10.2 jdolecek
367 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_FW_MEMENUM;
368 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
369 1.1.10.2 jdolecek xiocb.xiocb_handle = 0;
370 1.1.10.2 jdolecek xiocb.xiocb_flags = 0;
371 1.1.10.2 jdolecek xiocb.xiocb_psize = sizeof(xiocb_meminfo_t);
372 1.1.10.2 jdolecek xiocb.plist.xiocb_meminfo.mi_idx = idx;
373 1.1.10.2 jdolecek
374 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
375 1.1.10.2 jdolecek
376 1.1.10.2 jdolecek if (xiocb.xiocb_status < 0) return xiocb.xiocb_status;
377 1.1.10.2 jdolecek
378 1.1.10.2 jdolecek *start = xiocb.plist.xiocb_meminfo.mi_addr;
379 1.1.10.2 jdolecek *length = xiocb.plist.xiocb_meminfo.mi_size;
380 1.1.10.2 jdolecek *type = xiocb.plist.xiocb_meminfo.mi_type;
381 1.1.10.2 jdolecek
382 1.1.10.2 jdolecek return 0;
383 1.1.10.2 jdolecek }
384 1.1.10.2 jdolecek
385 1.1.10.2 jdolecek int cfe_getfwinfo(xiocb_fwinfo_t *info)
386 1.1.10.2 jdolecek {
387 1.1.10.2 jdolecek cfe_xiocb_t xiocb;
388 1.1.10.2 jdolecek
389 1.1.10.2 jdolecek xiocb.xiocb_fcode = CFE_CMD_FW_GETINFO;
390 1.1.10.2 jdolecek xiocb.xiocb_status = 0;
391 1.1.10.2 jdolecek xiocb.xiocb_handle = 0;
392 1.1.10.2 jdolecek xiocb.xiocb_flags = 0;
393 1.1.10.2 jdolecek xiocb.xiocb_psize = sizeof(xiocb_fwinfo_t);
394 1.1.10.2 jdolecek
395 1.1.10.2 jdolecek cfe_iocb_dispatch(&xiocb);
396 1.1.10.2 jdolecek
397 1.1.10.2 jdolecek if (xiocb.xiocb_status < 0) return xiocb.xiocb_status;
398 1.1.10.2 jdolecek
399 1.1.10.2 jdolecek info->fwi_version = xiocb.plist.xiocb_fwinfo.fwi_version;
400 1.1.10.2 jdolecek info->fwi_totalmem = xiocb.plist.xiocb_fwinfo.fwi_totalmem;
401 1.1.10.2 jdolecek info->fwi_flags = xiocb.plist.xiocb_fwinfo.fwi_flags;
402 1.1.10.2 jdolecek info->fwi_boardid = xiocb.plist.xiocb_fwinfo.fwi_boardid;
403 1.1.10.2 jdolecek info->fwi_bootarea_va = xiocb.plist.xiocb_fwinfo.fwi_bootarea_va;
404 1.1.10.2 jdolecek info->fwi_bootarea_pa = xiocb.plist.xiocb_fwinfo.fwi_bootarea_pa;
405 1.1.10.2 jdolecek info->fwi_bootarea_size = xiocb.plist.xiocb_fwinfo.fwi_bootarea_size;
406 1.1.10.2 jdolecek info->fwi_reserved1 = xiocb.plist.xiocb_fwinfo.fwi_reserved1;
407 1.1.10.2 jdolecek info->fwi_reserved2 = xiocb.plist.xiocb_fwinfo.fwi_reserved2;
408 1.1.10.2 jdolecek info->fwi_reserved3 = xiocb.plist.xiocb_fwinfo.fwi_reserved3;
409 1.1.10.2 jdolecek
410 1.1.10.2 jdolecek return 0;
411 1.1.10.2 jdolecek }
412