#ifndef _AVM_HW_CONFIG_H_ #define _AVM_HW_CONFIG_H_ #define AVM_HW_CONFIG_VERSION 1 #include #include enum _avm_hw_param { avm_hw_param_no_param = AVM_DEF_HW_PARAM_NO_PARAM, avm_hw_param_gpio_out_active_low = AVM_DEF_HW_PARAM_GPIO_OUT_ACTIVE_LOW, avm_hw_param_gpio_out_active_high = AVM_DEF_HW_PARAM_GPIO_OUT_ACTIVE_HIGH, avm_hw_param_gpio_in_active_low = AVM_DEF_HW_PARAM_GPIO_IN_ACTIVE_LOW, avm_hw_param_gpio_in_active_high = AVM_DEF_HW_PARAM_GPIO_IN_ACTIVE_HIGH, avm_hw_param_s17_out_active_low = AVM_DEF_HW_PARAM_S17_OUT_ACTIVE_LOW, avm_hw_param_s17_out_active_high = AVM_DEF_HW_PARAM_S17_OUT_ACTIVE_HIGH, avm_hw_param_last_param }; struct _avm_hw_config { char *name; int value; enum _avm_hw_param param; union _manufactor_hw_config { struct _manufactor_lantiq_gpio_config { int module_id; /* input, module ID */ unsigned int config; /* input, config flags */ } manufactor_lantiq_gpio_config; struct _manufactor_ikanos_gpio_config { uint32_t dir; uint32_t mode; uint32_t func_sel; uint32_t func_val; } manufactor_ikanos_gpio_config; } manufactor_hw_config; }; struct _avm_hw_config_table { unsigned int hwrev; unsigned int hwsubrev; struct _avm_hw_config *table; }; extern struct _avm_hw_config_table avm_hw_config_tables[]; extern struct _avm_hw_config *avm_current_hw_config; struct _avm_hw_config *avm_get_hw_config_table(void); /* Returns -ENOENT, if @name has not been found; * -EFAULT, if version != AVM_HW_CONFIG_VERSION; * 0, on success * * On error, p_value and p_param are invalid. */ extern int avm_get_hw_config(unsigned int version, const char *name, int *p_value, enum _avm_hw_param *p_param); #endif