rs.c (110b32f065f3c66a7a1626ca57b64641ed6a578e) | rs.c (f6f046f0c0b74bb45ba990a632033f77c1202a82) |
---|---|
1/****************************************************************************** 2 * 3 * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. 4 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH 5 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH 6 * 7 * This program is free software; you can redistribute it and/or modify it 8 * under the terms of version 2 of the GNU General Public License as --- 3565 unchanged lines hidden (view full) --- 3574 struct iwl_op_mode *op_mode __maybe_unused = mvm_r; 3575 struct iwl_mvm *mvm __maybe_unused = IWL_OP_MODE_GET_MVM(op_mode); 3576 3577 IWL_DEBUG_RATE(mvm, "enter\n"); 3578 IWL_DEBUG_RATE(mvm, "leave\n"); 3579} 3580 3581#ifdef CONFIG_MAC80211_DEBUGFS | 1/****************************************************************************** 2 * 3 * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. 4 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH 5 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH 6 * 7 * This program is free software; you can redistribute it and/or modify it 8 * under the terms of version 2 of the GNU General Public License as --- 3565 unchanged lines hidden (view full) --- 3574 struct iwl_op_mode *op_mode __maybe_unused = mvm_r; 3575 struct iwl_mvm *mvm __maybe_unused = IWL_OP_MODE_GET_MVM(op_mode); 3576 3577 IWL_DEBUG_RATE(mvm, "enter\n"); 3578 IWL_DEBUG_RATE(mvm, "leave\n"); 3579} 3580 3581#ifdef CONFIG_MAC80211_DEBUGFS |
3582int rs_pretty_print_rate(char *buf, const u32 rate) | 3582int rs_pretty_print_rate(char *buf, int bufsz, const u32 rate) |
3583{ 3584 3585 char *type, *bw; 3586 u8 mcs = 0, nss = 0; 3587 u8 ant = (rate & RATE_MCS_ANT_ABC_MSK) >> RATE_MCS_ANT_POS; 3588 3589 if (!(rate & RATE_MCS_HT_MSK) && 3590 !(rate & RATE_MCS_VHT_MSK)) { 3591 int index = iwl_hwrate_to_plcp_idx(rate); 3592 | 3583{ 3584 3585 char *type, *bw; 3586 u8 mcs = 0, nss = 0; 3587 u8 ant = (rate & RATE_MCS_ANT_ABC_MSK) >> RATE_MCS_ANT_POS; 3588 3589 if (!(rate & RATE_MCS_HT_MSK) && 3590 !(rate & RATE_MCS_VHT_MSK)) { 3591 int index = iwl_hwrate_to_plcp_idx(rate); 3592 |
3593 return sprintf(buf, "Legacy | ANT: %s Rate: %s Mbps\n", 3594 rs_pretty_ant(ant), 3595 index == IWL_RATE_INVALID ? "BAD" : 3596 iwl_rate_mcs[index].mbps); | 3593 return scnprintf(buf, bufsz, "Legacy | ANT: %s Rate: %s Mbps\n", 3594 rs_pretty_ant(ant), 3595 index == IWL_RATE_INVALID ? "BAD" : 3596 iwl_rate_mcs[index].mbps); |
3597 } 3598 3599 if (rate & RATE_MCS_VHT_MSK) { 3600 type = "VHT"; 3601 mcs = rate & RATE_VHT_MCS_RATE_CODE_MSK; 3602 nss = ((rate & RATE_VHT_MCS_NSS_MSK) 3603 >> RATE_VHT_MCS_NSS_POS) + 1; 3604 } else if (rate & RATE_MCS_HT_MSK) { --- 17 unchanged lines hidden (view full) --- 3622 break; 3623 case RATE_MCS_CHAN_WIDTH_160: 3624 bw = "160Mhz"; 3625 break; 3626 default: 3627 bw = "BAD BW"; 3628 } 3629 | 3597 } 3598 3599 if (rate & RATE_MCS_VHT_MSK) { 3600 type = "VHT"; 3601 mcs = rate & RATE_VHT_MCS_RATE_CODE_MSK; 3602 nss = ((rate & RATE_VHT_MCS_NSS_MSK) 3603 >> RATE_VHT_MCS_NSS_POS) + 1; 3604 } else if (rate & RATE_MCS_HT_MSK) { --- 17 unchanged lines hidden (view full) --- 3622 break; 3623 case RATE_MCS_CHAN_WIDTH_160: 3624 bw = "160Mhz"; 3625 break; 3626 default: 3627 bw = "BAD BW"; 3628 } 3629 |
3630 return sprintf(buf, "%s | ANT: %s BW: %s MCS: %d NSS: %d %s%s%s%s\n", 3631 type, rs_pretty_ant(ant), bw, mcs, nss, 3632 (rate & RATE_MCS_SGI_MSK) ? "SGI " : "NGI ", 3633 (rate & RATE_MCS_STBC_MSK) ? "STBC " : "", 3634 (rate & RATE_MCS_LDPC_MSK) ? "LDPC " : "", 3635 (rate & RATE_MCS_BF_MSK) ? "BF " : ""); | 3630 return scnprintf(buf, bufsz, 3631 "%s | ANT: %s BW: %s MCS: %d NSS: %d %s%s%s%s\n", 3632 type, rs_pretty_ant(ant), bw, mcs, nss, 3633 (rate & RATE_MCS_SGI_MSK) ? "SGI " : "NGI ", 3634 (rate & RATE_MCS_STBC_MSK) ? "STBC " : "", 3635 (rate & RATE_MCS_LDPC_MSK) ? "LDPC " : "", 3636 (rate & RATE_MCS_BF_MSK) ? "BF " : ""); |
3636} 3637 3638/** 3639 * Program the device to use fixed rate for frame transmit 3640 * This is for debugging/testing only 3641 * once the device start use fixed rate, we need to reload the module 3642 * to being back the normal operation. 3643 */ --- 40 unchanged lines hidden (view full) --- 3684 3685static ssize_t rs_sta_dbgfs_scale_table_read(struct file *file, 3686 char __user *user_buf, size_t count, loff_t *ppos) 3687{ 3688 char *buff; 3689 int desc = 0; 3690 int i = 0; 3691 ssize_t ret; | 3637} 3638 3639/** 3640 * Program the device to use fixed rate for frame transmit 3641 * This is for debugging/testing only 3642 * once the device start use fixed rate, we need to reload the module 3643 * to being back the normal operation. 3644 */ --- 40 unchanged lines hidden (view full) --- 3685 3686static ssize_t rs_sta_dbgfs_scale_table_read(struct file *file, 3687 char __user *user_buf, size_t count, loff_t *ppos) 3688{ 3689 char *buff; 3690 int desc = 0; 3691 int i = 0; 3692 ssize_t ret; |
3693 static const size_t bufsz = 2048; |
|
3692 3693 struct iwl_lq_sta *lq_sta = file->private_data; 3694 struct iwl_mvm_sta *mvmsta = 3695 container_of(lq_sta, struct iwl_mvm_sta, lq_sta.rs_drv); 3696 struct iwl_mvm *mvm; 3697 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); 3698 struct rs_rate *rate = &tbl->rate; 3699 u32 ss_params; 3700 3701 mvm = lq_sta->pers.drv; | 3694 3695 struct iwl_lq_sta *lq_sta = file->private_data; 3696 struct iwl_mvm_sta *mvmsta = 3697 container_of(lq_sta, struct iwl_mvm_sta, lq_sta.rs_drv); 3698 struct iwl_mvm *mvm; 3699 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); 3700 struct rs_rate *rate = &tbl->rate; 3701 u32 ss_params; 3702 3703 mvm = lq_sta->pers.drv; |
3702 buff = kmalloc(2048, GFP_KERNEL); | 3704 buff = kmalloc(bufsz, GFP_KERNEL); |
3703 if (!buff) 3704 return -ENOMEM; 3705 | 3705 if (!buff) 3706 return -ENOMEM; 3707 |
3706 desc += sprintf(buff+desc, "sta_id %d\n", lq_sta->lq.sta_id); 3707 desc += sprintf(buff+desc, "failed=%d success=%d rate=0%lX\n", 3708 lq_sta->total_failed, lq_sta->total_success, 3709 lq_sta->active_legacy_rate); 3710 desc += sprintf(buff+desc, "fixed rate 0x%X\n", 3711 lq_sta->pers.dbg_fixed_rate); 3712 desc += sprintf(buff+desc, "valid_tx_ant %s%s%s\n", | 3708 desc += scnprintf(buff + desc, bufsz - desc, 3709 "sta_id %d\n", lq_sta->lq.sta_id); 3710 desc += scnprintf(buff + desc, bufsz - desc, 3711 "failed=%d success=%d rate=0%lX\n", 3712 lq_sta->total_failed, lq_sta->total_success, 3713 lq_sta->active_legacy_rate); 3714 desc += scnprintf(buff + desc, bufsz - desc, "fixed rate 0x%X\n", 3715 lq_sta->pers.dbg_fixed_rate); 3716 desc += scnprintf(buff + desc, bufsz - desc, "valid_tx_ant %s%s%s\n", |
3713 (iwl_mvm_get_valid_tx_ant(mvm) & ANT_A) ? "ANT_A," : "", 3714 (iwl_mvm_get_valid_tx_ant(mvm) & ANT_B) ? "ANT_B," : "", 3715 (iwl_mvm_get_valid_tx_ant(mvm) & ANT_C) ? "ANT_C" : ""); | 3717 (iwl_mvm_get_valid_tx_ant(mvm) & ANT_A) ? "ANT_A," : "", 3718 (iwl_mvm_get_valid_tx_ant(mvm) & ANT_B) ? "ANT_B," : "", 3719 (iwl_mvm_get_valid_tx_ant(mvm) & ANT_C) ? "ANT_C" : ""); |
3716 desc += sprintf(buff+desc, "lq type %s\n", 3717 (is_legacy(rate)) ? "legacy" : 3718 is_vht(rate) ? "VHT" : "HT"); | 3720 desc += scnprintf(buff + desc, bufsz - desc, "lq type %s\n", 3721 (is_legacy(rate)) ? "legacy" : 3722 is_vht(rate) ? "VHT" : "HT"); |
3719 if (!is_legacy(rate)) { | 3723 if (!is_legacy(rate)) { |
3720 desc += sprintf(buff + desc, " %s", | 3724 desc += scnprintf(buff + desc, bufsz - desc, " %s", |
3721 (is_siso(rate)) ? "SISO" : "MIMO2"); | 3725 (is_siso(rate)) ? "SISO" : "MIMO2"); |
3722 desc += sprintf(buff + desc, " %s", | 3726 desc += scnprintf(buff + desc, bufsz - desc, " %s", |
3723 (is_ht20(rate)) ? "20MHz" : 3724 (is_ht40(rate)) ? "40MHz" : 3725 (is_ht80(rate)) ? "80MHz" : 3726 (is_ht160(rate)) ? "160MHz" : "BAD BW"); | 3727 (is_ht20(rate)) ? "20MHz" : 3728 (is_ht40(rate)) ? "40MHz" : 3729 (is_ht80(rate)) ? "80MHz" : 3730 (is_ht160(rate)) ? "160MHz" : "BAD BW"); |
3727 desc += sprintf(buff + desc, " %s %s %s %s\n", | 3731 desc += scnprintf(buff + desc, bufsz - desc, " %s %s %s %s\n", |
3728 (rate->sgi) ? "SGI" : "NGI", 3729 (rate->ldpc) ? "LDPC" : "BCC", 3730 (lq_sta->is_agg) ? "AGG on" : "", 3731 (mvmsta->tlc_amsdu) ? "AMSDU on" : ""); 3732 } | 3732 (rate->sgi) ? "SGI" : "NGI", 3733 (rate->ldpc) ? "LDPC" : "BCC", 3734 (lq_sta->is_agg) ? "AGG on" : "", 3735 (mvmsta->tlc_amsdu) ? "AMSDU on" : ""); 3736 } |
3733 desc += sprintf(buff+desc, "last tx rate=0x%X\n", | 3737 desc += scnprintf(buff + desc, bufsz - desc, "last tx rate=0x%X\n", |
3734 lq_sta->last_rate_n_flags); | 3738 lq_sta->last_rate_n_flags); |
3735 desc += sprintf(buff+desc, | 3739 desc += scnprintf(buff + desc, bufsz - desc, |
3736 "general: flags=0x%X mimo-d=%d s-ant=0x%x d-ant=0x%x\n", 3737 lq_sta->lq.flags, 3738 lq_sta->lq.mimo_delim, 3739 lq_sta->lq.single_stream_ant_msk, 3740 lq_sta->lq.dual_stream_ant_msk); 3741 | 3740 "general: flags=0x%X mimo-d=%d s-ant=0x%x d-ant=0x%x\n", 3741 lq_sta->lq.flags, 3742 lq_sta->lq.mimo_delim, 3743 lq_sta->lq.single_stream_ant_msk, 3744 lq_sta->lq.dual_stream_ant_msk); 3745 |
3742 desc += sprintf(buff+desc, | 3746 desc += scnprintf(buff + desc, bufsz - desc, |
3743 "agg: time_limit=%d dist_start_th=%d frame_cnt_limit=%d\n", 3744 le16_to_cpu(lq_sta->lq.agg_time_limit), 3745 lq_sta->lq.agg_disable_start_th, 3746 lq_sta->lq.agg_frame_cnt_limit); 3747 | 3747 "agg: time_limit=%d dist_start_th=%d frame_cnt_limit=%d\n", 3748 le16_to_cpu(lq_sta->lq.agg_time_limit), 3749 lq_sta->lq.agg_disable_start_th, 3750 lq_sta->lq.agg_frame_cnt_limit); 3751 |
3748 desc += sprintf(buff+desc, "reduced tpc=%d\n", lq_sta->lq.reduced_tpc); | 3752 desc += scnprintf(buff + desc, bufsz - desc, "reduced tpc=%d\n", 3753 lq_sta->lq.reduced_tpc); |
3749 ss_params = le32_to_cpu(lq_sta->lq.ss_params); | 3754 ss_params = le32_to_cpu(lq_sta->lq.ss_params); |
3750 desc += sprintf(buff+desc, "single stream params: %s%s%s%s\n", | 3755 desc += scnprintf(buff + desc, bufsz - desc, 3756 "single stream params: %s%s%s%s\n", |
3751 (ss_params & LQ_SS_PARAMS_VALID) ? 3752 "VALID" : "INVALID", 3753 (ss_params & LQ_SS_BFER_ALLOWED) ? 3754 ", BFER" : "", 3755 (ss_params & LQ_SS_STBC_1SS_ALLOWED) ? 3756 ", STBC" : "", 3757 (ss_params & LQ_SS_FORCE) ? 3758 ", FORCE" : ""); | 3757 (ss_params & LQ_SS_PARAMS_VALID) ? 3758 "VALID" : "INVALID", 3759 (ss_params & LQ_SS_BFER_ALLOWED) ? 3760 ", BFER" : "", 3761 (ss_params & LQ_SS_STBC_1SS_ALLOWED) ? 3762 ", STBC" : "", 3763 (ss_params & LQ_SS_FORCE) ? 3764 ", FORCE" : ""); |
3759 desc += sprintf(buff+desc, | 3765 desc += scnprintf(buff + desc, bufsz - desc, |
3760 "Start idx [0]=0x%x [1]=0x%x [2]=0x%x [3]=0x%x\n", 3761 lq_sta->lq.initial_rate_index[0], 3762 lq_sta->lq.initial_rate_index[1], 3763 lq_sta->lq.initial_rate_index[2], 3764 lq_sta->lq.initial_rate_index[3]); 3765 3766 for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++) { 3767 u32 r = le32_to_cpu(lq_sta->lq.rs_table[i]); 3768 | 3766 "Start idx [0]=0x%x [1]=0x%x [2]=0x%x [3]=0x%x\n", 3767 lq_sta->lq.initial_rate_index[0], 3768 lq_sta->lq.initial_rate_index[1], 3769 lq_sta->lq.initial_rate_index[2], 3770 lq_sta->lq.initial_rate_index[3]); 3771 3772 for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++) { 3773 u32 r = le32_to_cpu(lq_sta->lq.rs_table[i]); 3774 |
3769 desc += sprintf(buff+desc, " rate[%d] 0x%X ", i, r); 3770 desc += rs_pretty_print_rate(buff+desc, r); | 3775 desc += scnprintf(buff + desc, bufsz - desc, 3776 " rate[%d] 0x%X ", i, r); 3777 desc += rs_pretty_print_rate(buff + desc, bufsz - desc, r); |
3771 } 3772 3773 ret = simple_read_from_buffer(user_buf, count, ppos, buff, desc); 3774 kfree(buff); 3775 return ret; 3776} 3777 3778static const struct file_operations rs_sta_dbgfs_scale_table_ops = { --- 318 unchanged lines hidden --- | 3778 } 3779 3780 ret = simple_read_from_buffer(user_buf, count, ppos, buff, desc); 3781 kfree(buff); 3782 return ret; 3783} 3784 3785static const struct file_operations rs_sta_dbgfs_scale_table_ops = { --- 318 unchanged lines hidden --- |