1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2000-2003 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef	_FCODE_PROTO_H
28 #define	_FCODE_PROTO_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #ifdef	__cplusplus
33 extern "C" {
34 #endif
35 
36 #define	FNPROTO(x)	void x(fcode_env_t *)
37 
38 FNPROTO(bdo);
39 FNPROTO(bqdo);
40 
41 FNPROTO(literal);
42 void branch_common(fcode_env_t *, short, fstack_t, int);
43 FNPROTO(zero);
44 FNPROTO(bloop);
45 FNPROTO(bplusloop);
46 FNPROTO(loop_i);
47 FNPROTO(loop_j);
48 FNPROTO(bleave);
49 FNPROTO(execute);
50 FNPROTO(add);
51 FNPROTO(subtract);
52 FNPROTO(multiply);
53 FNPROTO(slash_mod);
54 FNPROTO(uslash_mod);
55 FNPROTO(divide);
56 FNPROTO(mod);
57 FNPROTO(and);
58 FNPROTO(or);
59 FNPROTO(xor);
60 FNPROTO(invert);
61 FNPROTO(lshift);
62 FNPROTO(rshift);
63 FNPROTO(rshifta);
64 FNPROTO(negate);
65 FNPROTO(f_abs);
66 FNPROTO(f_min);
67 FNPROTO(f_max);
68 FNPROTO(to_r);
69 FNPROTO(from_r);
70 FNPROTO(rfetch);
71 FNPROTO(f_exit);
72 FNPROTO(zero_equals);
73 FNPROTO(zero_not_equals);
74 FNPROTO(zero_less);
75 FNPROTO(zero_less_equals);
76 FNPROTO(zero_greater);
77 FNPROTO(zero_greater_equals);
78 FNPROTO(less);
79 FNPROTO(greater);
80 FNPROTO(equals);
81 FNPROTO(not_equals);
82 FNPROTO(unsign_greater);
83 FNPROTO(unsign_less_equals);
84 FNPROTO(unsign_less);
85 FNPROTO(unsign_greater_equals);
86 FNPROTO(greater_equals);
87 FNPROTO(less_equals);
88 FNPROTO(between);
89 FNPROTO(within);
90 FNPROTO(drop);
91 FNPROTO(f_dup);
92 FNPROTO(over);
93 FNPROTO(swap);
94 FNPROTO(rot);
95 FNPROTO(minus_rot);
96 FNPROTO(tuck);
97 FNPROTO(nip);
98 FNPROTO(pick);
99 FNPROTO(roll);
100 FNPROTO(qdup);
101 FNPROTO(depth);
102 FNPROTO(two_drop);
103 FNPROTO(two_dup);
104 FNPROTO(two_over);
105 FNPROTO(two_swap);
106 FNPROTO(two_rot);
107 FNPROTO(two_slash);
108 FNPROTO(utwo_slash);
109 FNPROTO(two_times);
110 FNPROTO(slash_c);
111 FNPROTO(slash_w);
112 FNPROTO(slash_l);
113 FNPROTO(slash_n);
114 FNPROTO(ca_plus);
115 FNPROTO(wa_plus);
116 FNPROTO(la_plus);
117 FNPROTO(na_plus);
118 FNPROTO(c1_plus);
119 FNPROTO(w1_plus);
120 FNPROTO(l1_plus);
121 FNPROTO(cell_plus);
122 FNPROTO(do_chars);
123 FNPROTO(slash_w_times);
124 FNPROTO(slash_l_times);
125 FNPROTO(cells);
126 FNPROTO(do_off);
127 FNPROTO(do_on);
128 FNPROTO(fetch);
129 FNPROTO(lfetch);
130 FNPROTO(wfetch);
131 FNPROTO(swfetch);
132 FNPROTO(cfetch);
133 FNPROTO(store);
134 FNPROTO(lstore);
135 FNPROTO(wstore);
136 FNPROTO(cstore);
137 
138 FNPROTO(noop);
139 FNPROTO(lwsplit);
140 FNPROTO(wljoin);
141 FNPROTO(lbsplit);
142 FNPROTO(bljoin);
143 FNPROTO(wbflip);
144 FNPROTO(upper_case);
145 FNPROTO(lower_case);
146 FNPROTO(pack_str);
147 FNPROTO(count_str);
148 FNPROTO(to_body);
149 FNPROTO(to_acf);
150 FNPROTO(bcase);
151 FNPROTO(bendcase);
152 
153 FNPROTO(span);
154 
155 FNPROTO(expect);
156 
157 FNPROTO(emit);
158 FNPROTO(type);
159 
160 FNPROTO(fc_crlf);
161 
162 FNPROTO(base);
163 FNPROTO(dollar_number);
164 FNPROTO(digit);
165 
166 FNPROTO(do_constant);
167 FNPROTO(do_defer);
168 FNPROTO(do_crash);
169 FNPROTO(do_field);
170 FNPROTO(idefer_exec);
171 
172 FNPROTO(set_args);
173 
174 void make_common_access(fcode_env_t *, char *, int, int, int,
175     void (*acf_i)(fcode_env_t *), void (*acf_s)(fcode_env_t *),
176     void (*set_a)(fcode_env_t *, int));
177 
178 FNPROTO(do_create);
179 
180 FNPROTO(instance);
181 FNPROTO(semi);
182 
183 FNPROTO(dollar_find);
184 acf_t voc_find(fcode_env_t *env);
185 
186 FNPROTO(evaluate);
187 
188 FNPROTO(ccomma);
189 FNPROTO(wcomma);
190 FNPROTO(lcomma);
191 FNPROTO(comma);
192 FNPROTO(state);
193 FNPROTO(compile_comma);
194 
195 FNPROTO(here);
196 FNPROTO(aligned);
197 FNPROTO(wbsplit);
198 FNPROTO(bwjoin);
199 FNPROTO(bmark);
200 FNPROTO(bresolve);
201 
202 FNPROTO(f_error);
203 FNPROTO(fc_unimplemented);
204 FNPROTO(fc_obsolete);
205 FNPROTO(fc_historical);
206 
207 FNPROTO(myspace);
208 FNPROTO(property);
209 FNPROTO(encode_int);
210 FNPROTO(encode_plus);
211 FNPROTO(encode_phys);
212 FNPROTO(encode_string);
213 FNPROTO(encode_bytes);
214 FNPROTO(model_prop);
215 FNPROTO(device_type);
216 FNPROTO(new_device);
217 
218 FNPROTO(finish_device);
219 
220 FNPROTO(device_name);
221 
222 FNPROTO(lwflip);
223 FNPROTO(lbflip);
224 
225 FNPROTO(child_node);
226 FNPROTO(peer_node);
227 
228 FNPROTO(byte_load);
229 
230 uchar_t  next_bytecode(fcode_env_t *);
231 ushort_t get_short(fcode_env_t *);
232 uint_t   get_int(fcode_env_t *);
233 
234 char *get_name(long *);
235 FNPROTO(words);
236 void header(fcode_env_t *, char *, int, flag_t);
237 void do_code(fcode_env_t *, int, char *, FNPROTO((*)));
238 void push_string(fcode_env_t *, char *, int);
239 
240 FNPROTO(verify_usage);
241 FNPROTO(dump_dictionary);
242 void print_stack_element(fcode_env_t *, fstack_t);
243 void dump_data_stack(fcode_env_t *, int);
244 void dump_return_stack(fcode_env_t *, int);
245 char *acf_lookup(fcode_env_t *, acf_t);
246 char *acf_to_name(fcode_env_t *, acf_t);
247 int within_dictionary(fcode_env_t *, void *);
248 char *acf_backup_search(fcode_env_t *, acf_t);
249 void dump_forth_environment(fcode_env_t *);
250 void forth_abort(fcode_env_t *, char *, ...);
251 void forth_perror(fcode_env_t *, char *, ...);
252 void return_to_interact(fcode_env_t *);
253 char *get_path(fcode_env_t *, device_t *);
254 char *search_for_fcode_file(fcode_env_t *, char *);
255 int current_debug_state(fcode_env_t *);
256 int debug_flags_to_mask(char *);
257 int do_exec_debug(fcode_env_t *, void *);
258 int name_is_debugged(fcode_env_t *, char *);
259 prop_t *find_property(device_t *, char *);
260 void buffer_init(fcode_env_t *env);
261 void check_for_debug_entry(fcode_env_t *);
262 void check_for_debug_exit(fcode_env_t *);
263 void check_semi_debug_exit(fcode_env_t *);
264 void check_vitals(fcode_env_t *);
265 void clear_debug_state(fcode_env_t *, int);
266 void debug_set_level(fcode_env_t *, int);
267 void define_actions(fcode_env_t *env, int n, token_t *array);
268 void do_alias(fcode_env_t *);
269 void do_bbranch(fcode_env_t *env);
270 void do_bdo(fcode_env_t *);
271 void do_bleave(fcode_env_t *env);
272 void do_bloop(fcode_env_t *env);
273 void do_bofbranch(fcode_env_t *env);
274 void do_bploop(fcode_env_t *env);
275 void do_bqbranch(fcode_env_t *env);
276 void do_bqdo(fcode_env_t *env);
277 void do_creator(fcode_env_t *env);
278 void do_default_action(fcode_env_t *env);
279 void do_emit(fcode_env_t *, uchar_t);
280 void do_literal(fcode_env_t *);
281 void dump_comma(fcode_env_t *, char *);
282 void dump_words(fcode_env_t *);
283 void fevaluate(fcode_env_t *);
284 void ibuffer_init(fcode_env_t *env);
285 void install_builtin_nodes(fcode_env_t *);
286 void install_does(fcode_env_t *);
287 void install_openprom_nodes(fcode_env_t *);
288 void install_package_nodes(fcode_env_t *);
289 void internal_env_addr(fcode_env_t *env);
290 void internal_env_fetch(fcode_env_t *env);
291 void internal_env_store(fcode_env_t *env);
292 void key(fcode_env_t *);
293 void keyquestion(fcode_env_t *);
294 void make_a_node(fcode_env_t *, char *, int);
295 void output_data_stack(fcode_env_t *, int);
296 void output_return_stack(fcode_env_t *, int, int);
297 void output_step_message(fcode_env_t *);
298 void output_vitals(fcode_env_t *);
299 void print_property(fcode_env_t *, prop_t *, char *);
300 void read_line(fcode_env_t *);
301 void run_daemon(fcode_env_t *);
302 void run_fcode_from_file(fcode_env_t *, char *, int);
303 void tick_literal(fcode_env_t *);
304 void unbug(fcode_env_t *);
305 void xbflip(fcode_env_t *);
306 void xfetch(fcode_env_t *);
307 void xlflip(fcode_env_t *);
308 void xstore(fcode_env_t *);
309 void expose_acf(fcode_env_t *, char *);
310 
311 FNPROTO(do_semi);
312 FNPROTO(do_colon);
313 FNPROTO(do_next);
314 void do_run(fcode_env_t *, int);
315 
316 void *safe_malloc(size_t, char *, int);
317 void *safe_realloc(void *, size_t, char *, int);
318 char *safe_strdup(char *, char *, int);
319 void safe_free(void *, char *, int);
320 
321 FNPROTO(do_forth);
322 FNPROTO(do_current);
323 FNPROTO(do_context);
324 FNPROTO(do_definitions);
325 FNPROTO(do_interact);
326 FNPROTO(do_resume);
327 FNPROTO(do_vocab);
328 FNPROTO(create);
329 FNPROTO(colon);
330 FNPROTO(does);
331 FNPROTO(recursive);
332 FNPROTO(do_if);
333 FNPROTO(do_else);
334 FNPROTO(do_then);
335 FNPROTO(parse_word);
336 FNPROTO(do_quote);
337 FNPROTO(run_quote);
338 
339 FNPROTO(do_order);
340 FNPROTO(do_also);
341 FNPROTO(do_previous);
342 
343 FNPROTO(find_package);
344 FNPROTO(open_package);
345 FNPROTO(close_package);
346 FNPROTO(find_method);
347 FNPROTO(dollar_call_parent);
348 FNPROTO(my_parent);
349 FNPROTO(my_unit);
350 FNPROTO(ihandle_to_phandle);
351 FNPROTO(dollar_call_method);
352 FNPROTO(dollar_open_package);
353 
354 FNPROTO(call_environment_method);
355 
356 FNPROTO(f_abort);
357 FNPROTO(catch);
358 FNPROTO(throw);
359 
360 FNPROTO(get_my_property);
361 FNPROTO(decode_int);
362 FNPROTO(decode_string);
363 FNPROTO(get_inherited_prop);
364 FNPROTO(delete_property);
365 FNPROTO(get_package_property);
366 void get_environment_property(fcode_env_t *env, int);
367 
368 FNPROTO(root_node);
369 FNPROTO(current_device);
370 FNPROTO(dot_properties);
371 FNPROTO(pwd);
372 FNPROTO(do_ls);
373 FNPROTO(do_cd);
374 FNPROTO(do_select_dev);
375 FNPROTO(do_unselect_dev);
376 FNPROTO(device_end);
377 FNPROTO(value);
378 FNPROTO(buffer_colon);
379 FNPROTO(variable);
380 FNPROTO(constant);
381 FNPROTO(actions);
382 FNPROTO(use_actions);
383 FNPROTO(action_colon);
384 FNPROTO(perform_action);
385 FNPROTO(do_tick);
386 FNPROTO(bracket_tick);
387 FNPROTO(defer);
388 FNPROTO(bye);
389 FNPROTO(dump_device);
390 FNPROTO(dump_instance);
391 FNPROTO(compile_string);
392 FNPROTO(parse_two_int);
393 
394 token_t *alloc_instance_data(fcode_env_t *, int, int, int *);
395 FNPROTO(fetch_instance_data);
396 FNPROTO(set_instance_data);
397 FNPROTO(address_instance_data);
398 FNPROTO(instance_variable);
399 FNPROTO(decode_phys);
400 
401 void install_actions(fcode_env_t *env, token_t *table);
402 void set_value_actions(fcode_env_t *env, int);
403 void set_internal_value_actions(fcode_env_t *env);
404 void set_buffer_actions(fcode_env_t *env, int);
405 
406 void system_message(fcode_env_t *env, char *msg);
407 
408 void check_interrupt(void);
409 void complete_interrupt(void);
410 
411 FNPROTO(do_set_action);
412 void push_a_string(fcode_env_t *, char *);
413 char *pop_a_string(fcode_env_t *, int *);
414 char *pop_a_duped_string(fcode_env_t *, int *);
415 char *parse_a_string(fcode_env_t *, int *);
416 void push_double(fcode_env_t *, dforth_t);
417 dforth_t pop_double(fcode_env_t *);
418 dforth_t peek_double(fcode_env_t *);
419 void push_xforth(fcode_env_t *, xforth_t);
420 xforth_t pop_xforth(fcode_env_t *);
421 xforth_t peek_xforth(fcode_env_t *);
422 void create_prop(fcode_env_t *, char *);
423 void create_int_prop(fcode_env_t *, char *, int);
424 void create_string_prop(fcode_env_t *, char *, char *);
425 void make_builtin_hooks(fcode_env_t *, char *);
426 fstack_t mapping_to_mcookie(uint64_t, size_t, uint64_t, size_t);
427 void delete_mapping(fstack_t);
428 int is_mcookie(fstack_t);
429 uint64_t mcookie_to_addr(fstack_t);
430 fstack_t mcookie_to_rlen(fstack_t);
431 fstack_t mcookie_to_rvirt(fstack_t);
432 void set_here(fcode_env_t *, uchar_t *, char *);
433 int call_my_parent(fcode_env_t *, char *);
434 FILE *get_dump_fd(fcode_env_t *);
435 
436 void load_file(fcode_env_t *);
437 void token_roundup(fcode_env_t *, char *);
438 
439 #ifdef DEBUG
440 void do_fclib_trace(fcode_env_t *, void *);
441 int do_fclib_step(fcode_env_t *);
442 #endif
443 
444 #ifdef	__cplusplus
445 }
446 #endif
447 
448 #endif /* _FCODE_PROTO_H */
449