blob: 5b0757bc92d7a27af0160a4649d264ee355474a3 [file] [log] [blame]
/*
* Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved.
*
* This software may be freely used, copied, modified, and distributed
* provided that the above copyright notice is preserved in all copies of the
* software.
*/
/* -*-C-*-
*
* $Revision$
* $Date$
*
*
* Project: ANGEL
*
* Title: Parameter negotiation structures and utilities
*/
#ifndef angel_params_h
#define angel_params_h
#include "angel.h"
#include "adp.h"
#ifndef TARGET
# include "host.h"
#endif
/* A single parameter, with tag */
typedef struct Parameter {
ADP_Parameter type;
unsigned int value;
} Parameter;
/* A list of parameter values, with tag */
typedef struct ParameterList {
ADP_Parameter type;
unsigned int num_options;
unsigned int *option; /* points to array of values */
} ParameterList;
/* A configuration of one or more parameters */
typedef struct ParameterConfig {
unsigned int num_parameters;
Parameter *param; /* pointer to array of Parameters */
} ParameterConfig;
/* A set of parameter options */
typedef struct ParameterOptions {
unsigned int num_param_lists;
ParameterList *param_list; /* pointer to array of ParamLists */
} ParameterOptions;
/*
* Function: Angel_MatchParams
* Purpose: find a configuration from the requested options which is
* the best match from the supported options.
*
* Params:
* Input: requested The offered set of parameters.
* supported The supported set of parameters.
*
* Returns: ptr to config A match has been made, ptr to result
* will remain valid until next call to
* this function.
* NULL Match not possible
*/
const ParameterConfig *Angel_MatchParams( const ParameterOptions *requested,
const ParameterOptions *supported );
/*
* Function: Angel_FindParam
* Purpose: find the value of a given parameter from a config.
*
* Params:
* Input: type parameter type to find
* config config to search
* Output: value parameter value if found
*
* Returns: TRUE parameter found
* FALSE parameter not found
*/
bool Angel_FindParam( ADP_Parameter type,
const ParameterConfig *config,
unsigned int *value );
/*
* Function: Angel_StoreParam
* Purpose: store the value of a given parameter in a config.
*
* Params:
* In/Out: config config to store in
* Input: type parameter type to store
* value parameter value if found
*
* Returns: TRUE parameter found and new value stored
* FALSE parameter not found
*/
bool Angel_StoreParam( ParameterConfig *config,
ADP_Parameter type,
unsigned int value );
/*
* Function: Angel_FindParamList
* Purpose: find the parameter list of a given parameter from an options.
*
* Params:
* Input: type parameter type to find
* options options block to search
*
* Returns: pointer to list
* NULL parameter not found
*/
ParameterList *Angel_FindParamList( const ParameterOptions *options,
ADP_Parameter type );
/*
* Function: Angel_BuildParamConfigMessage
* Purpose: write a parameter config to a buffer in ADP format.
*
* Params:
* Input: buffer where to write to
* config the parameter config to write
*
* Returns: number of characters written to buffer
*/
unsigned int Angel_BuildParamConfigMessage( unsigned char *buffer,
const ParameterConfig *config );
/*
* Function: Angel_BuildParamOptionsMessage
* Purpose: write a parameter Options to a buffer in ADP format.
*
* Params:
* Input: buffer where to write to
* options the options block to write
*
* Returns: number of characters written to buffer
*/
unsigned int Angel_BuildParamOptionsMessage( unsigned char *buffer,
const ParameterOptions *options );
/*
* Function: Angel_ReadParamConfigMessage
* Purpose: read a parameter config from a buffer where it is in ADP format.
*
* Params:
* Input: buffer where to read from
* In/Out: config the parameter config to read to, which must
* be set up on entry with a valid array, and
* the size of the array in num_parameters.
*
* Returns: TRUE okay
* FALSE not enough space in config
*/
bool Angel_ReadParamConfigMessage( const unsigned char *buffer,
ParameterConfig *config );
/*
* Function: Angel_ReadParamOptionsMessage
* Purpose: read a parameter options from a buffer
* where it is in ADP format.
*
* Params:
* Input: buffer where to read from
* In/Out: options the parameter options block to read to,
* which must be set up on entry with a valid
* array, and the size of the array in
* num_parameters. Each param_list must
* also be set up in the same way.
*
* Returns: TRUE okay
* FALSE not enough space in options
*/
bool Angel_ReadParamOptionsMessage( const unsigned char *buffer,
ParameterOptions *options );
#endif /* ndef angel_params_h */
/* EOF params.h */