diff options
author | Zhu Yi <yi.zhu@intel.com> | 2007-09-26 23:27:38 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:53:24 -0400 |
commit | 5ae212c9273deb417bcc458d1dfb54ef880e5516 (patch) | |
tree | 4f3a940e748b15889925c03ed5c9aeb25d0edb38 /drivers/net/wireless/iwlwifi | |
parent | 93dc646adb94127ca1c2e74275a85265ec57b9af (diff) |
[PATCH] iwlwifi: add read rate scale table debugfs function
This patch adds read rate scale table debugfs function for 4965
rate scaling module.
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-4965-rs.c | 67 |
1 files changed, 61 insertions, 6 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c index e849ab5aa80f..e3a0ccaf71fe 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c | |||
@@ -121,6 +121,9 @@ struct iwl_rate_scale_priv { | |||
121 | u16 active_rate_basic; | 121 | u16 active_rate_basic; |
122 | struct iwl_link_quality_cmd lq; | 122 | struct iwl_link_quality_cmd lq; |
123 | struct iwl_scale_tbl_info lq_info[LQ_SIZE]; | 123 | struct iwl_scale_tbl_info lq_info[LQ_SIZE]; |
124 | #ifdef CONFIG_MAC80211_DEBUGFS | ||
125 | struct dentry *rs_sta_dbgfs_scale_table_file; | ||
126 | #endif | ||
124 | }; | 127 | }; |
125 | 128 | ||
126 | static void rs_rate_scale_perform(struct iwl_priv *priv, | 129 | static void rs_rate_scale_perform(struct iwl_priv *priv, |
@@ -2000,19 +2003,71 @@ static void rs_free_sta(void *priv, void *priv_sta) | |||
2000 | 2003 | ||
2001 | 2004 | ||
2002 | #ifdef CONFIG_MAC80211_DEBUGFS | 2005 | #ifdef CONFIG_MAC80211_DEBUGFS |
2006 | static int open_file_generic(struct inode *inode, struct file *file) | ||
2007 | { | ||
2008 | file->private_data = inode->i_private; | ||
2009 | return 0; | ||
2010 | } | ||
2011 | |||
2012 | static ssize_t rs_sta_dbgfs_scale_table_read(struct file *file, | ||
2013 | char __user *user_buf, size_t count, loff_t *ppos) | ||
2014 | { | ||
2015 | char buff[1024]; | ||
2016 | int desc = 0; | ||
2017 | int i = 0; | ||
2018 | |||
2019 | struct iwl_rate_scale_priv *rs_priv = file->private_data; | ||
2020 | |||
2021 | desc += sprintf(buff+desc, "sta_id %d\n", rs_priv->lq.sta_id); | ||
2022 | desc += sprintf(buff+desc, "failed=%d success=%d rate=%X\n", | ||
2023 | rs_priv->total_failed, rs_priv->total_success, | ||
2024 | rs_priv->active_rate); | ||
2025 | desc += sprintf(buff+desc, "general:" | ||
2026 | "flags=0x%X mimo-d=%d s-ant0x%x d-ant=0x%x\n", | ||
2027 | rs_priv->lq.general_params.flags, | ||
2028 | rs_priv->lq.general_params.mimo_delimiter, | ||
2029 | rs_priv->lq.general_params.single_stream_ant_msk, | ||
2030 | rs_priv->lq.general_params.dual_stream_ant_msk); | ||
2031 | |||
2032 | desc += sprintf(buff+desc, "agg:" | ||
2033 | "time_limit=%d dist_start_th=%d frame_cnt_limit=%d\n", | ||
2034 | le16_to_cpu(rs_priv->lq.agg_params.agg_time_limit), | ||
2035 | rs_priv->lq.agg_params.agg_dis_start_th, | ||
2036 | rs_priv->lq.agg_params.agg_frame_cnt_limit); | ||
2037 | |||
2038 | desc += sprintf(buff+desc, | ||
2039 | "Start idx [0]=0x%x [1]=0x%x [2]=0x%x [3]=0x%x\n", | ||
2040 | rs_priv->lq.general_params.start_rate_index[0], | ||
2041 | rs_priv->lq.general_params.start_rate_index[1], | ||
2042 | rs_priv->lq.general_params.start_rate_index[2], | ||
2043 | rs_priv->lq.general_params.start_rate_index[3]); | ||
2044 | |||
2045 | |||
2046 | for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++) | ||
2047 | desc += sprintf(buff+desc, " rate[%d] 0x%X\n", | ||
2048 | i, le32_to_cpu(rs_priv->lq.rs_table[i].rate_n_flags)); | ||
2049 | |||
2050 | return simple_read_from_buffer(user_buf, count, ppos, buff, desc); | ||
2051 | } | ||
2052 | |||
2053 | static const struct file_operations rs_sta_dbgfs_scale_table_ops = { | ||
2054 | .read = rs_sta_dbgfs_scale_table_read, | ||
2055 | .open = open_file_generic, | ||
2056 | }; | ||
2057 | |||
2003 | static void rs_add_debugfs(void *priv, void *priv_sta, | 2058 | static void rs_add_debugfs(void *priv, void *priv_sta, |
2004 | struct dentry *dir) | 2059 | struct dentry *dir) |
2005 | { | 2060 | { |
2006 | /* struct iwl_rate_scale_priv *rs_priv = priv_sta; */ | 2061 | struct iwl_rate_scale_priv *rs_priv = priv_sta; |
2007 | IWL_DEBUG_RATE("%s enter\n", __FUNCTION__); | 2062 | rs_priv->rs_sta_dbgfs_scale_table_file = |
2008 | IWL_DEBUG_RATE("%s leave\n", __FUNCTION__); | 2063 | debugfs_create_file("rate_scale_table", 0444, dir, |
2064 | rs_priv, &rs_sta_dbgfs_scale_table_ops); | ||
2009 | } | 2065 | } |
2010 | 2066 | ||
2011 | static void rs_remove_debugfs(void *priv, void *priv_sta) | 2067 | static void rs_remove_debugfs(void *priv, void *priv_sta) |
2012 | { | 2068 | { |
2013 | /* struct iwl_rate_scale_priv *rs_priv = priv_sta; */ | 2069 | struct iwl_rate_scale_priv *rs_priv = priv_sta; |
2014 | IWL_DEBUG_RATE("%s enter\n", __FUNCTION__); | 2070 | debugfs_remove(rs_priv->rs_sta_dbgfs_scale_table_file); |
2015 | IWL_DEBUG_RATE("%s leave\n", __FUNCTION__); | ||
2016 | } | 2071 | } |
2017 | #endif | 2072 | #endif |
2018 | 2073 | ||