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