Skip to content

Commit

Permalink
wl1271: Add config structure for FW init parameters
Browse files Browse the repository at this point in the history
Add a configuration structure for RX path parameters, and set default
configuration values there.

Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Juuso Oikarinen authored and John W. Linville committed Oct 27, 2009
1 parent 51f2be2 commit 47fab7d
Show file tree
Hide file tree
Showing 5 changed files with 376 additions and 127 deletions.
39 changes: 10 additions & 29 deletions drivers/net/wireless/wl12xx/wl1271_acx.c
Original file line number Diff line number Diff line change
Expand Up @@ -1014,7 +1014,7 @@ int wl1271_acx_smart_reflex(struct wl1271 *wl)
{
struct acx_smart_reflex_state *sr_state = NULL;
struct acx_smart_reflex_config_params *sr_param = NULL;
int ret;
int i, ret;

wl1271_debug(DEBUG_ACX, "acx smart reflex");

Expand All @@ -1024,33 +1024,14 @@ int wl1271_acx_smart_reflex(struct wl1271 *wl)
goto out;
}

/* set cryptic smart reflex parameters - source TI reference code */
sr_param->error_table[0].len = 0x07;
sr_param->error_table[0].upper_limit = 0x03;
sr_param->error_table[0].values[0] = 0x18;
sr_param->error_table[0].values[1] = 0x10;
sr_param->error_table[0].values[2] = 0x05;
sr_param->error_table[0].values[3] = 0xfb;
sr_param->error_table[0].values[4] = 0xf0;
sr_param->error_table[0].values[5] = 0xe8;

sr_param->error_table[1].len = 0x07;
sr_param->error_table[1].upper_limit = 0x03;
sr_param->error_table[1].values[0] = 0x18;
sr_param->error_table[1].values[1] = 0x10;
sr_param->error_table[1].values[2] = 0x05;
sr_param->error_table[1].values[3] = 0xf6;
sr_param->error_table[1].values[4] = 0xf0;
sr_param->error_table[1].values[5] = 0xe8;

sr_param->error_table[2].len = 0x07;
sr_param->error_table[2].upper_limit = 0x03;
sr_param->error_table[2].values[0] = 0x18;
sr_param->error_table[2].values[1] = 0x10;
sr_param->error_table[2].values[2] = 0x05;
sr_param->error_table[2].values[3] = 0xfb;
sr_param->error_table[2].values[4] = 0xf0;
sr_param->error_table[2].values[5] = 0xe8;
for (i = 0; i < CONF_SR_ERR_TBL_COUNT; i++) {
struct conf_mart_reflex_err_table *e =
&(wl->conf.init.sr_err_tbl[i]);

sr_param->error_table[i].len = e->len;
sr_param->error_table[i].upper_limit = e->upper_limit;
memcpy(sr_param->error_table[i].values, e->values, e->len);
}

ret = wl1271_cmd_configure(wl, ACX_SET_SMART_REFLEX_PARAMS,
sr_param, sizeof(*sr_param));
Expand All @@ -1066,7 +1047,7 @@ int wl1271_acx_smart_reflex(struct wl1271 *wl)
}

/* enable smart reflex */
sr_state->enable = 1;
sr_state->enable = wl->conf.init.sr_enable;

ret = wl1271_cmd_configure(wl, ACX_SET_SMART_REFLEX_STATE,
sr_state, sizeof(*sr_state));
Expand Down
182 changes: 182 additions & 0 deletions drivers/net/wireless/wl12xx/wl1271_conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -691,11 +691,193 @@ struct conf_conn_settings {
struct conf_sig_weights sig_weights;
};

#define CONF_SR_ERR_TBL_MAX_VALUES 14

struct conf_mart_reflex_err_table {
/*
* Length of the error table values table.
*
* Range: 0 - CONF_SR_ERR_TBL_MAX_VALUES
*/
u8 len;

/*
* Smart Reflex error table upper limit.
*
* Range: s8
*/
s8 upper_limit;

/*
* Smart Reflex error table values.
*
* Range: s8
*/
s8 values[CONF_SR_ERR_TBL_MAX_VALUES];
};

enum {
CONF_REF_CLK_19_2_E,
CONF_REF_CLK_26_E,
CONF_REF_CLK_38_4_E,
CONF_REF_CLK_52_E
};

struct conf_general_parms {
/*
* RF Reference Clock type / speed
*
* Range: CONF_REF_CLK_*
*/
u8 ref_clk;

/*
* Settling time of the reference clock after boot.
*
* Range: u8
*/
u8 settling_time;

/*
* Flag defining whether clock is valid on wakeup.
*
* Range: 0 - not valid on wakeup, 1 - valid on wakeup
*/
u8 clk_valid_on_wakeup;

/*
* DC-to-DC mode.
*
* Range: Unknown
*/
u8 dc2dcmode;

/*
* Flag defining whether used as single or dual-band.
*
* Range: Unknown
*/
u8 single_dual_band;

/*
* TX bip fem autodetect flag.
*
* Range: Unknown
*/
u8 tx_bip_fem_autodetect;

/*
* TX bip gem manufacturer.
*
* Range: Unknown
*/
u8 tx_bip_fem_manufacturer;

/*
* Settings flags.
*
* Range: Unknown
*/
u8 settings;
};

#define CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE 15
#define CONF_NUMBER_OF_SUB_BANDS_5 7
#define CONF_NUMBER_OF_RATE_GROUPS 6
#define CONF_NUMBER_OF_CHANNELS_2_4 14
#define CONF_NUMBER_OF_CHANNELS_5 35

struct conf_radio_parms {
/*
* Static radio parameters for 2.4GHz
*
* Range: unknown
*/
u8 rx_trace_loss;
u8 tx_trace_loss;
s8 rx_rssi_and_proc_compens[CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE];

/*
* Static radio parameters for 5GHz
*
* Range: unknown
*/
u8 rx_trace_loss_5[CONF_NUMBER_OF_SUB_BANDS_5];
u8 tx_trace_loss_5[CONF_NUMBER_OF_SUB_BANDS_5];
s8 rx_rssi_and_proc_compens_5[CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE];

/*
* Dynamic radio parameters for 2.4GHz
*
* Range: unknown
*/
s16 tx_ref_pd_voltage;
s8 tx_ref_power;
s8 tx_offset_db;

s8 tx_rate_limits_normal[CONF_NUMBER_OF_RATE_GROUPS];
s8 tx_rate_limits_degraded[CONF_NUMBER_OF_RATE_GROUPS];

s8 tx_channel_limits_11b[CONF_NUMBER_OF_CHANNELS_2_4];
s8 tx_channel_limits_ofdm[CONF_NUMBER_OF_CHANNELS_2_4];
s8 tx_pdv_rate_offsets[CONF_NUMBER_OF_RATE_GROUPS];

u8 tx_ibias[CONF_NUMBER_OF_RATE_GROUPS];
u8 rx_fem_insertion_loss;

/*
* Dynamic radio parameters for 5GHz
*
* Range: unknown
*/
s16 tx_ref_pd_voltage_5[CONF_NUMBER_OF_SUB_BANDS_5];
s8 tx_ref_power_5[CONF_NUMBER_OF_SUB_BANDS_5];
s8 tx_offset_db_5[CONF_NUMBER_OF_SUB_BANDS_5];

s8 tx_rate_limits_normal_5[CONF_NUMBER_OF_RATE_GROUPS];
s8 tx_rate_limits_degraded_5[CONF_NUMBER_OF_RATE_GROUPS];

s8 tx_channel_limits_ofdm_5[CONF_NUMBER_OF_CHANNELS_5];
s8 tx_pdv_rate_offsets_5[CONF_NUMBER_OF_RATE_GROUPS];

/* FIXME: this is inconsistent with the types for 2.4GHz */
s8 tx_ibias_5[CONF_NUMBER_OF_RATE_GROUPS];
s8 rx_fem_insertion_loss_5[CONF_NUMBER_OF_SUB_BANDS_5];
};

#define CONF_SR_ERR_TBL_COUNT 3

struct conf_init_settings {
/*
* Configure Smart Reflex error table values.
*/
struct conf_mart_reflex_err_table sr_err_tbl[CONF_SR_ERR_TBL_COUNT];

/*
* Smart Reflex enable flag.
*
* Range: 1 - Smart Reflex enabled, 0 - Smart Reflex disabled
*/
u8 sr_enable;

/*
* Configure general parameters.
*/
struct conf_general_parms genparam;

/*
* Configure radio parameters.
*/
struct conf_radio_parms radioparam;

};

struct conf_drv_settings {
struct conf_sg_settings sg;
struct conf_rx_settings rx;
struct conf_tx_settings tx;
struct conf_conn_settings conn;
struct conf_init_settings init;
};

#endif
Loading

0 comments on commit 47fab7d

Please sign in to comment.