diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/rtlwifi/base.c | 161 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/base.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/wifi.h | 35 |
3 files changed, 198 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, |
diff --git a/drivers/net/wireless/rtlwifi/base.h b/drivers/net/wireless/rtlwifi/base.h index a91f3eee59c8..4ae905983d0d 100644 --- a/drivers/net/wireless/rtlwifi/base.h +++ b/drivers/net/wireless/rtlwifi/base.h | |||
@@ -140,4 +140,6 @@ u8 *rtl_find_ie(u8 *data, unsigned int len, u8 ie); | |||
140 | void rtl_recognize_peer(struct ieee80211_hw *hw, u8 *data, unsigned int len); | 140 | void rtl_recognize_peer(struct ieee80211_hw *hw, u8 *data, unsigned int len); |
141 | u8 rtl_tid_to_ac(struct ieee80211_hw *hw, u8 tid); | 141 | u8 rtl_tid_to_ac(struct ieee80211_hw *hw, u8 tid); |
142 | extern struct attribute_group rtl_attribute_group; | 142 | extern struct attribute_group rtl_attribute_group; |
143 | int rtlwifi_rate_mapping(struct ieee80211_hw *hw, | ||
144 | bool isht, u8 desc_rate, bool first_ampdu); | ||
143 | #endif | 145 | #endif |
diff --git a/drivers/net/wireless/rtlwifi/wifi.h b/drivers/net/wireless/rtlwifi/wifi.h index d3c3ffd38984..8a9091968f31 100644 --- a/drivers/net/wireless/rtlwifi/wifi.h +++ b/drivers/net/wireless/rtlwifi/wifi.h | |||
@@ -386,6 +386,41 @@ enum rtl_hal_state { | |||
386 | _HAL_STATE_START = 1, | 386 | _HAL_STATE_START = 1, |
387 | }; | 387 | }; |
388 | 388 | ||
389 | enum rtl_desc92_rate { | ||
390 | DESC92_RATE1M = 0x00, | ||
391 | DESC92_RATE2M = 0x01, | ||
392 | DESC92_RATE5_5M = 0x02, | ||
393 | DESC92_RATE11M = 0x03, | ||
394 | |||
395 | DESC92_RATE6M = 0x04, | ||
396 | DESC92_RATE9M = 0x05, | ||
397 | DESC92_RATE12M = 0x06, | ||
398 | DESC92_RATE18M = 0x07, | ||
399 | DESC92_RATE24M = 0x08, | ||
400 | DESC92_RATE36M = 0x09, | ||
401 | DESC92_RATE48M = 0x0a, | ||
402 | DESC92_RATE54M = 0x0b, | ||
403 | |||
404 | DESC92_RATEMCS0 = 0x0c, | ||
405 | DESC92_RATEMCS1 = 0x0d, | ||
406 | DESC92_RATEMCS2 = 0x0e, | ||
407 | DESC92_RATEMCS3 = 0x0f, | ||
408 | DESC92_RATEMCS4 = 0x10, | ||
409 | DESC92_RATEMCS5 = 0x11, | ||
410 | DESC92_RATEMCS6 = 0x12, | ||
411 | DESC92_RATEMCS7 = 0x13, | ||
412 | DESC92_RATEMCS8 = 0x14, | ||
413 | DESC92_RATEMCS9 = 0x15, | ||
414 | DESC92_RATEMCS10 = 0x16, | ||
415 | DESC92_RATEMCS11 = 0x17, | ||
416 | DESC92_RATEMCS12 = 0x18, | ||
417 | DESC92_RATEMCS13 = 0x19, | ||
418 | DESC92_RATEMCS14 = 0x1a, | ||
419 | DESC92_RATEMCS15 = 0x1b, | ||
420 | DESC92_RATEMCS15_SG = 0x1c, | ||
421 | DESC92_RATEMCS32 = 0x20, | ||
422 | }; | ||
423 | |||
389 | enum rtl_var_map { | 424 | enum rtl_var_map { |
390 | /*reg map */ | 425 | /*reg map */ |
391 | SYS_ISO_CTRL = 0, | 426 | SYS_ISO_CTRL = 0, |