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