/* * 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-*- * * * * 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 */