1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2000 by Sun Microsystems, Inc.
* All rights reserved.
*/
#ifndef _FCODE_PRIVATE_H
#define _FCODE_PRIVATE_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef DEBUG
#include <fcode/debug.h>
#ifdef __cplusplus
extern "C" {
#endif
long get_interpreter_debug_level(void);
void set_interpreter_debug_level(long lvl);
#define DPRINTF(x, y) if (get_interpreter_debug_level() & (DEBUG_##x))\
printf y
#define DEBUGF(x, y) if (get_interpreter_debug_level() & (DEBUG_##x))\
{ y; }
#else
#ifdef __cplusplus
extern "C" {
#endif
#define DPRINTF(x, y)
#define DEBUGF(x, y)
#endif
#define PUSH(sp, n) *(++sp) = (n)
#define POP(sp) *(sp--)
#define ERROR(x) printf x
#define MALLOC(x) safe_malloc((x), __FILE__, __LINE__)
#define REALLOC(x, n) safe_realloc((x), (n), __FILE__, __LINE__)
#define STRDUP(x) safe_strdup((x), __FILE__, __LINE__)
#define FREE(x) safe_free((x), __FILE__, __LINE__)
#include <fcode/engine.h>
extern fcode_env_t *initial_env;
extern int fcode_impl_count;
#define SET_TOKEN(t, f, n, a) \
env->table[t].flags = f; \
env->table[t].name = n; \
env->table[t].apf = a;
#define FCODE(token, fl, nm, fnc) \
fcode_impl_count++; \
env->table[token].flags = fl; \
do_code(env, token, nm, fnc);
#define ANSI(tk, t, nm, fnc) FCODE(tk, (ANSI_WORD|P1275_WORD|t), nm, fnc)
#define P1275(tk, t, nm, fnc) FCODE(tk, (P1275_WORD|t), nm, fnc)
#ifdef DEBUG
#define ASSERT(x) if (!(x)) printf("%s:%d: ASSERT FAILED!!\n",\
__FILE__, __LINE__);
#ifdef NOTICE
#undef NOTICE
#define NOTICE printf("%s:%d: _init called\n", __FILE__, __LINE__)
#else
#define NOTICE
#endif
#else
#define ASSERT(x)
#define NOTICE
#endif
void fc_abort(fcode_env_t *, char *type);
#define TODO fc_abort(env, "TODO")
#define FATAL ERROR(("%s:%d: MANGLED FCODE!! Fatal Error\n",\
__FILE__, __LINE__)))
#ifndef USE_INTERRUPTS
#define CHECK_INTERRUPT
#define COMPLETE_INTERRUPT
#else
#define CHECK_INTERRUPT check_interrupt()
#define COMPLETE_INTERRUPT complete_interrupt()
#endif
/* dforth_t manimpulations */
#define MAKE_DFORTH(hi, lo) ((((u_dforth_t)(hi) << 32)) | \
(((u_dforth_t)(lo)) & 0xffffffff))
#define DFORTH_LO(df) (((u_dforth_t)(df)) & 0xffffffff)
#define DFORTH_HI(df) ((((u_dforth_t)(df)) >> 32) & 0xffffffff)
#define TRUE (-1)
#define FALSE (0)
instance_t *open_instance_chain(fcode_env_t *, device_t *, int);
void close_instance_chain(fcode_env_t *, instance_t *, int);
void activate_device(fcode_env_t *, device_t *);
void deactivate_device(fcode_env_t *, device_t *);
void install_handlers(fcode_env_t *);
void set_defer_actions(fcode_env_t *, int);
void throw_from_fclib(fcode_env_t *, fstack_t, char *, ...);
int get_default_intprop(fcode_env_t *, char *, device_t *, int);
uint_t get_number_of_parent_address_cells(fcode_env_t *);
char *get_package_name(fcode_env_t *, device_t *);
token_t *get_instance_address(fcode_env_t *);
fc_resource_t *find_resource(fc_resource_t **, void *,
int (c)(void *, void *));
void *add_resource(fc_resource_t **, void *, int (c)(void *, void *));
void free_resource(fc_resource_t **, void *, int (c)(void *, void *));
void set_temporary_compile(fcode_env_t *);
void temporary_execute(fcode_env_t *);
prop_t *lookup_package_property(fcode_env_t *, char *, device_t *);
#ifdef __cplusplus
}
#endif
#endif /* _FCODE_PRIVATE_H */
|