xref: /openbsd-src/gnu/usr.bin/binutils/gdb/rdi-share/params.h (revision 63addd46c1e40ca0f49488ddcdc4ab598023b0c1)
1b725ae77Skettenis /*
2b725ae77Skettenis  * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved.
3b725ae77Skettenis  *
4b725ae77Skettenis  * This software may be freely used, copied, modified, and distributed
5b725ae77Skettenis  * provided that the above copyright notice is preserved in all copies of the
6b725ae77Skettenis  * software.
7b725ae77Skettenis  */
8b725ae77Skettenis 
9b725ae77Skettenis /* -*-C-*-
10b725ae77Skettenis  *
11*63addd46Skettenis  * $Revision: 1.3 $
12*63addd46Skettenis  *     $Date: 2004/12/27 14:00:54 $
13b725ae77Skettenis  *
14b725ae77Skettenis  *
15b725ae77Skettenis  *   Project: ANGEL
16b725ae77Skettenis  *
17b725ae77Skettenis  *     Title: Parameter negotiation structures and utilities
18b725ae77Skettenis  */
19b725ae77Skettenis 
20b725ae77Skettenis #ifndef angel_params_h
21b725ae77Skettenis #define angel_params_h
22b725ae77Skettenis 
23b725ae77Skettenis #include "angel.h"
24b725ae77Skettenis #include "adp.h"
25b725ae77Skettenis 
26b725ae77Skettenis #ifndef TARGET
27b725ae77Skettenis # include "host.h"
28b725ae77Skettenis #endif
29b725ae77Skettenis 
30b725ae77Skettenis /* A single parameter, with tag */
31b725ae77Skettenis typedef struct Parameter {
32b725ae77Skettenis       ADP_Parameter     type;
33b725ae77Skettenis       unsigned int      value;
34b725ae77Skettenis } Parameter;
35b725ae77Skettenis 
36b725ae77Skettenis /* A list of parameter values, with tag */
37b725ae77Skettenis typedef struct ParameterList {
38b725ae77Skettenis       ADP_Parameter     type;
39b725ae77Skettenis       unsigned int      num_options;
40b725ae77Skettenis       unsigned int     *option; /* points to array of values */
41b725ae77Skettenis } ParameterList;
42b725ae77Skettenis 
43b725ae77Skettenis /* A configuration of one or more parameters */
44b725ae77Skettenis typedef struct ParameterConfig {
45b725ae77Skettenis       unsigned int      num_parameters;
46b725ae77Skettenis       Parameter        *param;  /* pointer to array of Parameters */
47b725ae77Skettenis } ParameterConfig;
48b725ae77Skettenis 
49b725ae77Skettenis /* A set of parameter options */
50b725ae77Skettenis typedef struct ParameterOptions {
51b725ae77Skettenis       unsigned int      num_param_lists;
52b725ae77Skettenis       ParameterList    *param_list; /* pointer to array of ParamLists */
53b725ae77Skettenis } ParameterOptions;
54b725ae77Skettenis 
55b725ae77Skettenis /*
56b725ae77Skettenis  * Function: Angel_MatchParams
57b725ae77Skettenis  *  Purpose: find a configuration from the requested options which is
58b725ae77Skettenis  *           the best match from the supported options.
59b725ae77Skettenis  *
60b725ae77Skettenis  *   Params:
61b725ae77Skettenis  *              Input: requested      The offered set of parameters.
62b725ae77Skettenis  *                     supported      The supported set of parameters.
63b725ae77Skettenis  *
64b725ae77Skettenis  *            Returns: ptr to config  A match has been made, ptr to result
65b725ae77Skettenis  *                                      will remain valid until next call to
66b725ae77Skettenis  *                                      this function.
67b725ae77Skettenis  *                     NULL           Match not possible
68b725ae77Skettenis  */
69b725ae77Skettenis const ParameterConfig *Angel_MatchParams( const ParameterOptions *requested,
70b725ae77Skettenis                                           const ParameterOptions *supported );
71b725ae77Skettenis 
72b725ae77Skettenis /*
73b725ae77Skettenis  * Function: Angel_FindParam
74b725ae77Skettenis  *  Purpose: find the value of a given parameter from a config.
75b725ae77Skettenis  *
76b725ae77Skettenis  *   Params:
77b725ae77Skettenis  *              Input: type     parameter type to find
78b725ae77Skettenis  *                     config   config to search
79b725ae77Skettenis  *             Output: value    parameter value if found
80b725ae77Skettenis  *
81b725ae77Skettenis  *            Returns: TRUE     parameter found
82b725ae77Skettenis  *                     FALSE    parameter not found
83b725ae77Skettenis  */
84b725ae77Skettenis bool Angel_FindParam( ADP_Parameter          type,
85b725ae77Skettenis                       const ParameterConfig *config,
86b725ae77Skettenis                       unsigned int          *value );
87b725ae77Skettenis 
88b725ae77Skettenis /*
89b725ae77Skettenis  * Function: Angel_StoreParam
90b725ae77Skettenis  *  Purpose: store the value of a given parameter in a config.
91b725ae77Skettenis  *
92b725ae77Skettenis  *   Params:
93b725ae77Skettenis  *             In/Out: config   config to store in
94b725ae77Skettenis  *              Input: type     parameter type to store
95b725ae77Skettenis  *                     value    parameter value if found
96b725ae77Skettenis  *
97b725ae77Skettenis  *            Returns: TRUE     parameter found and new value stored
98b725ae77Skettenis  *                     FALSE    parameter not found
99b725ae77Skettenis  */
100b725ae77Skettenis bool Angel_StoreParam( ParameterConfig *config,
101b725ae77Skettenis                        ADP_Parameter    type,
102b725ae77Skettenis                        unsigned int     value );
103b725ae77Skettenis 
104b725ae77Skettenis /*
105b725ae77Skettenis  * Function: Angel_FindParamList
106b725ae77Skettenis  *  Purpose: find the parameter list of a given parameter from an options.
107b725ae77Skettenis  *
108b725ae77Skettenis  *   Params:
109b725ae77Skettenis  *              Input: type     parameter type to find
110b725ae77Skettenis  *                     options  options block to search
111b725ae77Skettenis  *
112b725ae77Skettenis  *            Returns: pointer to list
113b725ae77Skettenis  *                     NULL     parameter not found
114b725ae77Skettenis  */
115b725ae77Skettenis ParameterList *Angel_FindParamList( const ParameterOptions *options,
116b725ae77Skettenis                                     ADP_Parameter           type );
117b725ae77Skettenis 
118b725ae77Skettenis /*
119b725ae77Skettenis  * Function: Angel_BuildParamConfigMessage
120b725ae77Skettenis  *  Purpose: write a parameter config to a buffer in ADP format.
121b725ae77Skettenis  *
122b725ae77Skettenis  *   Params:
123b725ae77Skettenis  *              Input: buffer   where to write to
124b725ae77Skettenis  *                     config   the parameter config to write
125b725ae77Skettenis  *
126b725ae77Skettenis  *            Returns: number of characters written to buffer
127b725ae77Skettenis  */
128b725ae77Skettenis unsigned int Angel_BuildParamConfigMessage( unsigned char         *buffer,
129b725ae77Skettenis                                             const ParameterConfig *config );
130b725ae77Skettenis 
131b725ae77Skettenis /*
132b725ae77Skettenis  * Function: Angel_BuildParamOptionsMessage
133b725ae77Skettenis  *  Purpose: write a parameter Options to a buffer in ADP format.
134b725ae77Skettenis  *
135b725ae77Skettenis  *   Params:
136b725ae77Skettenis  *              Input: buffer   where to write to
137b725ae77Skettenis  *                     options  the options block to write
138b725ae77Skettenis  *
139b725ae77Skettenis  *            Returns: number of characters written to buffer
140b725ae77Skettenis  */
141b725ae77Skettenis unsigned int Angel_BuildParamOptionsMessage( unsigned char          *buffer,
142b725ae77Skettenis                                              const ParameterOptions *options );
143b725ae77Skettenis 
144b725ae77Skettenis /*
145b725ae77Skettenis  * Function: Angel_ReadParamConfigMessage
146b725ae77Skettenis  *  Purpose: read a parameter config from a buffer where it is in ADP format.
147b725ae77Skettenis  *
148b725ae77Skettenis  *   Params:
149b725ae77Skettenis  *              Input: buffer   where to read from
150b725ae77Skettenis  *             In/Out: config   the parameter config to read to, which must
151b725ae77Skettenis  *                              be set up on entry with a valid array, and
152b725ae77Skettenis  *                              the size of the array in num_parameters.
153b725ae77Skettenis  *
154b725ae77Skettenis  *            Returns: TRUE     okay
155b725ae77Skettenis  *                     FALSE    not enough space in config
156b725ae77Skettenis  */
157b725ae77Skettenis bool Angel_ReadParamConfigMessage( const unsigned char *buffer,
158b725ae77Skettenis                                    ParameterConfig     *config );
159b725ae77Skettenis 
160b725ae77Skettenis /*
161b725ae77Skettenis  * Function: Angel_ReadParamOptionsMessage
162b725ae77Skettenis  *  Purpose: read a parameter options from a buffer
163b725ae77Skettenis  *             where it is in ADP format.
164b725ae77Skettenis  *
165b725ae77Skettenis  *   Params:
166b725ae77Skettenis  *              Input: buffer   where to read from
167b725ae77Skettenis  *             In/Out: options  the parameter options block to read to,
168b725ae77Skettenis  *                                which must be set up on entry with a valid
169b725ae77Skettenis  *                                array, and the size of the array in
170b725ae77Skettenis  *                                num_parameters.  Each param_list must
171b725ae77Skettenis  *                                also be set up in the same way.
172b725ae77Skettenis  *
173b725ae77Skettenis  *            Returns: TRUE     okay
174b725ae77Skettenis  *                     FALSE    not enough space in options
175b725ae77Skettenis  */
176b725ae77Skettenis bool Angel_ReadParamOptionsMessage( const unsigned char *buffer,
177b725ae77Skettenis                                     ParameterOptions    *options );
178b725ae77Skettenis 
179b725ae77Skettenis #endif /* ndef angel_params_h */
180b725ae77Skettenis 
181b725ae77Skettenis /* EOF params.h */
182