diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi/base.c')
| -rw-r--r-- | drivers/net/wireless/rtlwifi/base.c | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c index 0b598db38da9..098fc557a88d 100644 --- a/drivers/net/wireless/rtlwifi/base.c +++ b/drivers/net/wireless/rtlwifi/base.c | |||
| @@ -664,6 +664,167 @@ static u8 _rtl_get_highest_n_rate(struct ieee80211_hw *hw) | |||
| 664 | return hw_rate; | 664 | return hw_rate; |
| 665 | } | 665 | } |
| 666 | 666 | ||
| 667 | /* mac80211's rate_idx is like this: | ||
| 668 | * | ||
| 669 | * 2.4G band:rx_status->band == IEEE80211_BAND_2GHZ | ||
| 670 | * | ||
| 671 | * B/G rate: | ||
| 672 | * (rx_status->flag & RX_FLAG_HT) = 0, | ||
| 673 | * DESC92_RATE1M-->DESC92_RATE54M ==> idx is 0-->11, | ||
| 674 | * | ||
| 675 | * N rate: | ||
| 676 | * (rx_status->flag & RX_FLAG_HT) = 1, | ||
| 677 | * DESC92_RATEMCS0-->DESC92_RATEMCS15 ==> idx is 0-->15 | ||
| 678 | * | ||
| 679 | * 5G band:rx_status->band == IEEE80211_BAND_5GHZ | ||
| 680 | * A rate: | ||
| 681 | * (rx_status->flag & RX_FLAG_HT) = 0, | ||
| 682 | * DESC92_RATE6M-->DESC92_RATE54M ==> idx is 0-->7, | ||
| 683 | * | ||
| 684 | * N rate: | ||
| 685 | * (rx_status->flag & RX_FLAG_HT) = 1, | ||
| 686 | * DESC92_RATEMCS0-->DESC92_RATEMCS15 ==> idx is 0-->15 | ||
| 687 | */ | ||
| 688 | int rtlwifi_rate_mapping(struct ieee80211_hw *hw, | ||
| 689 | bool isht, u8 desc_rate, bool first_ampdu) | ||
| 690 | { | ||
| 691 | int rate_idx; | ||
| 692 | |||
| 693 | if (false == isht) { | ||
| 694 | if (IEEE80211_BAND_2GHZ == hw->conf.channel->band) { | ||
| 695 | switch (desc_rate) { | ||
| 696 | case DESC92_RATE1M: | ||
| 697 | rate_idx = 0; | ||
| 698 | break; | ||
| 699 | case DESC92_RATE2M: | ||
| 700 | rate_idx = 1; | ||
| 701 | break; | ||
| 702 | case DESC92_RATE5_5M: | ||
| 703 | rate_idx = 2; | ||
| 704 | break; | ||
| 705 | case DESC92_RATE11M: | ||
| 706 | rate_idx = 3; | ||
| 707 | break; | ||
| 708 | case DESC92_RATE6M: | ||
| 709 | rate_idx = 4; | ||
| 710 | break; | ||
| 711 | case DESC92_RATE9M: | ||
| 712 | rate_idx = 5; | ||
| 713 | break; | ||
| 714 | case DESC92_RATE12M: | ||
| 715 | rate_idx = 6; | ||
| 716 | break; | ||
| 717 | case DESC92_RATE18M: | ||
| 718 | rate_idx = 7; | ||
| 719 | break; | ||
| 720 | case DESC92_RATE24M: | ||
| 721 | rate_idx = 8; | ||
| 722 | break; | ||
| 723 | case DESC92_RATE36M: | ||
| 724 | rate_idx = 9; | ||
| 725 | break; | ||
| 726 | case DESC92_RATE48M: | ||
| 727 | rate_idx = 10; | ||
| 728 | break; | ||
| 729 | case DESC92_RATE54M: | ||
| 730 | rate_idx = 11; | ||
| 731 | break; | ||
| 732 | default: | ||
| 733 | rate_idx = 0; | ||
| 734 | break; | ||
| 735 | } | ||
| 736 | } else { | ||
| 737 | switch (desc_rate) { | ||
| 738 | case DESC92_RATE6M: | ||
| 739 | rate_idx = 0; | ||
| 740 | break; | ||
| 741 | case DESC92_RATE9M: | ||
| 742 | rate_idx = 1; | ||
| 743 | break; | ||
| 744 | case DESC92_RATE12M: | ||
| 745 | rate_idx = 2; | ||
| 746 | break; | ||
| 747 | case DESC92_RATE18M: | ||
| 748 | rate_idx = 3; | ||
| 749 | break; | ||
| 750 | case DESC92_RATE24M: | ||
| 751 | rate_idx = 4; | ||
| 752 | break; | ||
| 753 | case DESC92_RATE36M: | ||
| 754 | rate_idx = 5; | ||
| 755 | break; | ||
| 756 | case DESC92_RATE48M: | ||
| 757 | rate_idx = 6; | ||
| 758 | break; | ||
| 759 | case DESC92_RATE54M: | ||
| 760 | rate_idx = 7; | ||
| 761 | break; | ||
| 762 | default: | ||
| 763 | rate_idx = 0; | ||
| 764 | break; | ||
| 765 | } | ||
| 766 | } | ||
| 767 | |||
| 768 | } else { | ||
| 769 | |||
| 770 | switch (desc_rate) { | ||
| 771 | case DESC92_RATEMCS0: | ||
| 772 | rate_idx = 0; | ||
| 773 | break; | ||
| 774 | case DESC92_RATEMCS1: | ||
| 775 | rate_idx = 1; | ||
| 776 | break; | ||
| 777 | case DESC92_RATEMCS2: | ||
| 778 | rate_idx = 2; | ||
| 779 | break; | ||
| 780 | case DESC92_RATEMCS3: | ||
| 781 | rate_idx = 3; | ||
| 782 | break; | ||
| 783 | case DESC92_RATEMCS4: | ||
| 784 | rate_idx = 4; | ||
| 785 | break; | ||
| 786 | case DESC92_RATEMCS5: | ||
| 787 | rate_idx = 5; | ||
| 788 | break; | ||
| 789 | case DESC92_RATEMCS6: | ||
| 790 | rate_idx = 6; | ||
| 791 | break; | ||
| 792 | case DESC92_RATEMCS7: | ||
| 793 | rate_idx = 7; | ||
| 794 | break; | ||
| 795 | case DESC92_RATEMCS8: | ||
| 796 | rate_idx = 8; | ||
| 797 | break; | ||
| 798 | case DESC92_RATEMCS9: | ||
| 799 | rate_idx = 9; | ||
| 800 | break; | ||
| 801 | case DESC92_RATEMCS10: | ||
| 802 | rate_idx = 10; | ||
| 803 | break; | ||
| 804 | case DESC92_RATEMCS11: | ||
| 805 | rate_idx = 11; | ||
| 806 | break; | ||
| 807 | case DESC92_RATEMCS12: | ||
| 808 | rate_idx = 12; | ||
| 809 | break; | ||
| 810 | case DESC92_RATEMCS13: | ||
| 811 | rate_idx = 13; | ||
| 812 | break; | ||
| 813 | case DESC92_RATEMCS14: | ||
| 814 | rate_idx = 14; | ||
| 815 | break; | ||
| 816 | case DESC92_RATEMCS15: | ||
| 817 | rate_idx = 15; | ||
| 818 | break; | ||
| 819 | default: | ||
| 820 | rate_idx = 0; | ||
| 821 | break; | ||
| 822 | } | ||
| 823 | } | ||
| 824 | return rate_idx; | ||
| 825 | } | ||
| 826 | EXPORT_SYMBOL(rtlwifi_rate_mapping); | ||
| 827 | |||
| 667 | void rtl_get_tcb_desc(struct ieee80211_hw *hw, | 828 | void rtl_get_tcb_desc(struct ieee80211_hw *hw, |
| 668 | struct ieee80211_tx_info *info, | 829 | struct ieee80211_tx_info *info, |
| 669 | struct ieee80211_sta *sta, | 830 | struct ieee80211_sta *sta, |
