diff options
Diffstat (limited to 'drivers/net/wireless/ath9k/hw.h')
-rw-r--r-- | drivers/net/wireless/ath9k/hw.h | 165 |
1 files changed, 158 insertions, 7 deletions
diff --git a/drivers/net/wireless/ath9k/hw.h b/drivers/net/wireless/ath9k/hw.h index 2113818ee934..91d8f594af81 100644 --- a/drivers/net/wireless/ath9k/hw.h +++ b/drivers/net/wireless/ath9k/hw.h | |||
@@ -415,6 +415,9 @@ struct ar5416Stats { | |||
415 | #define AR5416_EEP_MINOR_VER_3 0x3 | 415 | #define AR5416_EEP_MINOR_VER_3 0x3 |
416 | #define AR5416_EEP_MINOR_VER_7 0x7 | 416 | #define AR5416_EEP_MINOR_VER_7 0x7 |
417 | #define AR5416_EEP_MINOR_VER_9 0x9 | 417 | #define AR5416_EEP_MINOR_VER_9 0x9 |
418 | #define AR5416_EEP_MINOR_VER_16 0x10 | ||
419 | #define AR5416_EEP_MINOR_VER_17 0x11 | ||
420 | #define AR5416_EEP_MINOR_VER_19 0x13 | ||
418 | 421 | ||
419 | #define AR5416_NUM_5G_CAL_PIERS 8 | 422 | #define AR5416_NUM_5G_CAL_PIERS 8 |
420 | #define AR5416_NUM_2G_CAL_PIERS 4 | 423 | #define AR5416_NUM_2G_CAL_PIERS 4 |
@@ -436,6 +439,27 @@ struct ar5416Stats { | |||
436 | #define AR5416_MAX_CHAINS 3 | 439 | #define AR5416_MAX_CHAINS 3 |
437 | #define AR5416_PWR_TABLE_OFFSET -5 | 440 | #define AR5416_PWR_TABLE_OFFSET -5 |
438 | 441 | ||
442 | /* Rx gain type values */ | ||
443 | #define AR5416_EEP_RXGAIN_23DB_BACKOFF 0 | ||
444 | #define AR5416_EEP_RXGAIN_13DB_BACKOFF 1 | ||
445 | #define AR5416_EEP_RXGAIN_ORIG 2 | ||
446 | |||
447 | /* Tx gain type values */ | ||
448 | #define AR5416_EEP_TXGAIN_ORIGINAL 0 | ||
449 | #define AR5416_EEP_TXGAIN_HIGH_POWER 1 | ||
450 | |||
451 | #define AR5416_EEP4K_START_LOC 64 | ||
452 | #define AR5416_EEP4K_NUM_2G_CAL_PIERS 3 | ||
453 | #define AR5416_EEP4K_NUM_2G_CCK_TARGET_POWERS 3 | ||
454 | #define AR5416_EEP4K_NUM_2G_20_TARGET_POWERS 3 | ||
455 | #define AR5416_EEP4K_NUM_2G_40_TARGET_POWERS 3 | ||
456 | #define AR5416_EEP4K_NUM_CTLS 12 | ||
457 | #define AR5416_EEP4K_NUM_BAND_EDGES 4 | ||
458 | #define AR5416_EEP4K_NUM_PD_GAINS 2 | ||
459 | #define AR5416_EEP4K_PD_GAINS_IN_MASK 4 | ||
460 | #define AR5416_EEP4K_PD_GAIN_ICEPTS 5 | ||
461 | #define AR5416_EEP4K_MAX_CHAINS 1 | ||
462 | |||
439 | enum eeprom_param { | 463 | enum eeprom_param { |
440 | EEP_NFTHRESH_5, | 464 | EEP_NFTHRESH_5, |
441 | EEP_NFTHRESH_2, | 465 | EEP_NFTHRESH_2, |
@@ -454,6 +478,8 @@ enum eeprom_param { | |||
454 | EEP_MINOR_REV, | 478 | EEP_MINOR_REV, |
455 | EEP_TX_MASK, | 479 | EEP_TX_MASK, |
456 | EEP_RX_MASK, | 480 | EEP_RX_MASK, |
481 | EEP_RXGAIN_TYPE, | ||
482 | EEP_TXGAIN_TYPE, | ||
457 | }; | 483 | }; |
458 | 484 | ||
459 | enum ar5416_rates { | 485 | enum ar5416_rates { |
@@ -469,6 +495,11 @@ enum ar5416_rates { | |||
469 | Ar5416RateSize | 495 | Ar5416RateSize |
470 | }; | 496 | }; |
471 | 497 | ||
498 | enum ath9k_hal_freq_band { | ||
499 | ATH9K_HAL_FREQ_BAND_5GHZ = 0, | ||
500 | ATH9K_HAL_FREQ_BAND_2GHZ = 1 | ||
501 | }; | ||
502 | |||
472 | struct base_eep_header { | 503 | struct base_eep_header { |
473 | u16 length; | 504 | u16 length; |
474 | u16 checksum; | 505 | u16 checksum; |
@@ -485,9 +516,32 @@ struct base_eep_header { | |||
485 | u32 binBuildNumber; | 516 | u32 binBuildNumber; |
486 | u8 deviceType; | 517 | u8 deviceType; |
487 | u8 pwdclkind; | 518 | u8 pwdclkind; |
488 | u8 futureBase[32]; | 519 | u8 futureBase_1[2]; |
520 | u8 rxGainType; | ||
521 | u8 futureBase_2[3]; | ||
522 | u8 txGainType; | ||
523 | u8 futureBase_3[25]; | ||
524 | } __packed; | ||
525 | |||
526 | struct base_eep_header_4k { | ||
527 | u16 length; | ||
528 | u16 checksum; | ||
529 | u16 version; | ||
530 | u8 opCapFlags; | ||
531 | u8 eepMisc; | ||
532 | u16 regDmn[2]; | ||
533 | u8 macAddr[6]; | ||
534 | u8 rxMask; | ||
535 | u8 txMask; | ||
536 | u16 rfSilent; | ||
537 | u16 blueToothOptions; | ||
538 | u16 deviceCap; | ||
539 | u32 binBuildNumber; | ||
540 | u8 deviceType; | ||
541 | u8 futureBase[1]; | ||
489 | } __packed; | 542 | } __packed; |
490 | 543 | ||
544 | |||
491 | struct spur_chan { | 545 | struct spur_chan { |
492 | u16 spurChan; | 546 | u16 spurChan; |
493 | u8 spurRangeLow; | 547 | u8 spurRangeLow; |
@@ -540,11 +594,58 @@ struct modal_eep_header { | |||
540 | struct spur_chan spurChans[AR5416_EEPROM_MODAL_SPURS]; | 594 | struct spur_chan spurChans[AR5416_EEPROM_MODAL_SPURS]; |
541 | } __packed; | 595 | } __packed; |
542 | 596 | ||
597 | struct modal_eep_4k_header { | ||
598 | u32 antCtrlChain[AR5416_EEP4K_MAX_CHAINS]; | ||
599 | u32 antCtrlCommon; | ||
600 | u8 antennaGainCh[AR5416_EEP4K_MAX_CHAINS]; | ||
601 | u8 switchSettling; | ||
602 | u8 txRxAttenCh[AR5416_EEP4K_MAX_CHAINS]; | ||
603 | u8 rxTxMarginCh[AR5416_EEP4K_MAX_CHAINS]; | ||
604 | u8 adcDesiredSize; | ||
605 | u8 pgaDesiredSize; | ||
606 | u8 xlnaGainCh[AR5416_EEP4K_MAX_CHAINS]; | ||
607 | u8 txEndToXpaOff; | ||
608 | u8 txEndToRxOn; | ||
609 | u8 txFrameToXpaOn; | ||
610 | u8 thresh62; | ||
611 | u8 noiseFloorThreshCh[AR5416_EEP4K_MAX_CHAINS]; | ||
612 | u8 xpdGain; | ||
613 | u8 xpd; | ||
614 | u8 iqCalICh[AR5416_EEP4K_MAX_CHAINS]; | ||
615 | u8 iqCalQCh[AR5416_EEP4K_MAX_CHAINS]; | ||
616 | u8 pdGainOverlap; | ||
617 | u8 ob_01; | ||
618 | u8 db1_01; | ||
619 | u8 xpaBiasLvl; | ||
620 | u8 txFrameToDataStart; | ||
621 | u8 txFrameToPaOn; | ||
622 | u8 ht40PowerIncForPdadc; | ||
623 | u8 bswAtten[AR5416_EEP4K_MAX_CHAINS]; | ||
624 | u8 bswMargin[AR5416_EEP4K_MAX_CHAINS]; | ||
625 | u8 swSettleHt40; | ||
626 | u8 xatten2Db[AR5416_EEP4K_MAX_CHAINS]; | ||
627 | u8 xatten2Margin[AR5416_EEP4K_MAX_CHAINS]; | ||
628 | u8 db2_01; | ||
629 | u8 version; | ||
630 | u16 ob_234; | ||
631 | u16 db1_234; | ||
632 | u16 db2_234; | ||
633 | u8 futureModal[4]; | ||
634 | |||
635 | struct spur_chan spurChans[AR5416_EEPROM_MODAL_SPURS]; | ||
636 | } __packed; | ||
637 | |||
638 | |||
543 | struct cal_data_per_freq { | 639 | struct cal_data_per_freq { |
544 | u8 pwrPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS]; | 640 | u8 pwrPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS]; |
545 | u8 vpdPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS]; | 641 | u8 vpdPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS]; |
546 | } __packed; | 642 | } __packed; |
547 | 643 | ||
644 | struct cal_data_per_freq_4k { | ||
645 | u8 pwrPdg[AR5416_EEP4K_NUM_PD_GAINS][AR5416_EEP4K_PD_GAIN_ICEPTS]; | ||
646 | u8 vpdPdg[AR5416_EEP4K_NUM_PD_GAINS][AR5416_EEP4K_PD_GAIN_ICEPTS]; | ||
647 | } __packed; | ||
648 | |||
548 | struct cal_target_power_leg { | 649 | struct cal_target_power_leg { |
549 | u8 bChannel; | 650 | u8 bChannel; |
550 | u8 tPow2x[4]; | 651 | u8 tPow2x[4]; |
@@ -555,6 +656,7 @@ struct cal_target_power_ht { | |||
555 | u8 tPow2x[8]; | 656 | u8 tPow2x[8]; |
556 | } __packed; | 657 | } __packed; |
557 | 658 | ||
659 | |||
558 | #ifdef __BIG_ENDIAN_BITFIELD | 660 | #ifdef __BIG_ENDIAN_BITFIELD |
559 | struct cal_ctl_edges { | 661 | struct cal_ctl_edges { |
560 | u8 bChannel; | 662 | u8 bChannel; |
@@ -569,10 +671,15 @@ struct cal_ctl_edges { | |||
569 | 671 | ||
570 | struct cal_ctl_data { | 672 | struct cal_ctl_data { |
571 | struct cal_ctl_edges | 673 | struct cal_ctl_edges |
572 | ctlEdges[AR5416_MAX_CHAINS][AR5416_NUM_BAND_EDGES]; | 674 | ctlEdges[AR5416_MAX_CHAINS][AR5416_NUM_BAND_EDGES]; |
573 | } __packed; | 675 | } __packed; |
574 | 676 | ||
575 | struct ar5416_eeprom { | 677 | struct cal_ctl_data_4k { |
678 | struct cal_ctl_edges | ||
679 | ctlEdges[AR5416_EEP4K_MAX_CHAINS][AR5416_EEP4K_NUM_BAND_EDGES]; | ||
680 | } __packed; | ||
681 | |||
682 | struct ar5416_eeprom_def { | ||
576 | struct base_eep_header baseEepHeader; | 683 | struct base_eep_header baseEepHeader; |
577 | u8 custData[64]; | 684 | u8 custData[64]; |
578 | struct modal_eep_header modalHeader[2]; | 685 | struct modal_eep_header modalHeader[2]; |
@@ -601,6 +708,26 @@ struct ar5416_eeprom { | |||
601 | u8 padding; | 708 | u8 padding; |
602 | } __packed; | 709 | } __packed; |
603 | 710 | ||
711 | struct ar5416_eeprom_4k { | ||
712 | struct base_eep_header_4k baseEepHeader; | ||
713 | u8 custData[20]; | ||
714 | struct modal_eep_4k_header modalHeader; | ||
715 | u8 calFreqPier2G[AR5416_EEP4K_NUM_2G_CAL_PIERS]; | ||
716 | struct cal_data_per_freq_4k | ||
717 | calPierData2G[AR5416_EEP4K_MAX_CHAINS][AR5416_EEP4K_NUM_2G_CAL_PIERS]; | ||
718 | struct cal_target_power_leg | ||
719 | calTargetPowerCck[AR5416_EEP4K_NUM_2G_CCK_TARGET_POWERS]; | ||
720 | struct cal_target_power_leg | ||
721 | calTargetPower2G[AR5416_EEP4K_NUM_2G_20_TARGET_POWERS]; | ||
722 | struct cal_target_power_ht | ||
723 | calTargetPower2GHT20[AR5416_EEP4K_NUM_2G_20_TARGET_POWERS]; | ||
724 | struct cal_target_power_ht | ||
725 | calTargetPower2GHT40[AR5416_EEP4K_NUM_2G_40_TARGET_POWERS]; | ||
726 | u8 ctlIndex[AR5416_EEP4K_NUM_CTLS]; | ||
727 | struct cal_ctl_data_4k ctlData[AR5416_EEP4K_NUM_CTLS]; | ||
728 | u8 padding; | ||
729 | } __packed; | ||
730 | |||
604 | struct ar5416IniArray { | 731 | struct ar5416IniArray { |
605 | u32 *ia_array; | 732 | u32 *ia_array; |
606 | u32 ia_rows; | 733 | u32 ia_rows; |
@@ -668,9 +795,22 @@ struct hal_cal_list { | |||
668 | struct hal_cal_list *calNext; | 795 | struct hal_cal_list *calNext; |
669 | }; | 796 | }; |
670 | 797 | ||
798 | /* | ||
799 | * Enum to indentify the eeprom mappings | ||
800 | */ | ||
801 | enum hal_eep_map { | ||
802 | EEP_MAP_DEFAULT = 0x0, | ||
803 | EEP_MAP_4KBITS, | ||
804 | EEP_MAP_MAX | ||
805 | }; | ||
806 | |||
807 | |||
671 | struct ath_hal_5416 { | 808 | struct ath_hal_5416 { |
672 | struct ath_hal ah; | 809 | struct ath_hal ah; |
673 | struct ar5416_eeprom ah_eeprom; | 810 | union { |
811 | struct ar5416_eeprom_def def; | ||
812 | struct ar5416_eeprom_4k map4k; | ||
813 | } ah_eeprom; | ||
674 | struct ar5416Stats ah_stats; | 814 | struct ar5416Stats ah_stats; |
675 | struct ath9k_tx_queue_info ah_txq[ATH9K_NUM_TX_QUEUES]; | 815 | struct ath9k_tx_queue_info ah_txq[ATH9K_NUM_TX_QUEUES]; |
676 | void __iomem *ah_cal_mem; | 816 | void __iomem *ah_cal_mem; |
@@ -792,6 +932,10 @@ struct ath_hal_5416 { | |||
792 | struct ar5416IniArray ah_iniAddac; | 932 | struct ar5416IniArray ah_iniAddac; |
793 | struct ar5416IniArray ah_iniPcieSerdes; | 933 | struct ar5416IniArray ah_iniPcieSerdes; |
794 | struct ar5416IniArray ah_iniModesAdditional; | 934 | struct ar5416IniArray ah_iniModesAdditional; |
935 | struct ar5416IniArray ah_iniModesRxGain; | ||
936 | struct ar5416IniArray ah_iniModesTxGain; | ||
937 | /* To indicate EEPROM mapping used */ | ||
938 | enum hal_eep_map ah_eep_map; | ||
795 | }; | 939 | }; |
796 | #define AH5416(_ah) ((struct ath_hal_5416 *)(_ah)) | 940 | #define AH5416(_ah) ((struct ath_hal_5416 *)(_ah)) |
797 | 941 | ||
@@ -833,13 +977,20 @@ struct ath_hal_5416 { | |||
833 | (AR_SREV_9100(ah)) ? 0x1fff1000 : 0x503f1200 | 977 | (AR_SREV_9100(ah)) ? 0x1fff1000 : 0x503f1200 |
834 | #define AR5416_EEPROM_MAX 0xae0 | 978 | #define AR5416_EEPROM_MAX 0xae0 |
835 | #define ar5416_get_eep_ver(_ahp) \ | 979 | #define ar5416_get_eep_ver(_ahp) \ |
836 | (((_ahp)->ah_eeprom.baseEepHeader.version >> 12) & 0xF) | 980 | (((_ahp)->ah_eeprom.def.baseEepHeader.version >> 12) & 0xF) |
837 | #define ar5416_get_eep_rev(_ahp) \ | 981 | #define ar5416_get_eep_rev(_ahp) \ |
838 | (((_ahp)->ah_eeprom.baseEepHeader.version) & 0xFFF) | 982 | (((_ahp)->ah_eeprom.def.baseEepHeader.version) & 0xFFF) |
839 | #define ar5416_get_ntxchains(_txchainmask) \ | 983 | #define ar5416_get_ntxchains(_txchainmask) \ |
840 | (((_txchainmask >> 2) & 1) + \ | 984 | (((_txchainmask >> 2) & 1) + \ |
841 | ((_txchainmask >> 1) & 1) + (_txchainmask & 1)) | 985 | ((_txchainmask >> 1) & 1) + (_txchainmask & 1)) |
842 | 986 | ||
987 | /* EEPROM 4K bit map definations */ | ||
988 | #define ar5416_get_eep4k_ver(_ahp) \ | ||
989 | (((_ahp)->ah_eeprom.map4k.baseEepHeader.version >> 12) & 0xF) | ||
990 | #define ar5416_get_eep4k_rev(_ahp) \ | ||
991 | (((_ahp)->ah_eeprom.map4k.baseEepHeader.version) & 0xFFF) | ||
992 | |||
993 | |||
843 | #ifdef __BIG_ENDIAN | 994 | #ifdef __BIG_ENDIAN |
844 | #define AR5416_EEPROM_MAGIC 0x5aa5 | 995 | #define AR5416_EEPROM_MAGIC 0x5aa5 |
845 | #else | 996 | #else |
@@ -923,7 +1074,7 @@ struct ath_hal_5416 { | |||
923 | #define OFDM_PLCP_BITS_QUARTER 22 | 1074 | #define OFDM_PLCP_BITS_QUARTER 22 |
924 | #define OFDM_SYMBOL_TIME_QUARTER 16 | 1075 | #define OFDM_SYMBOL_TIME_QUARTER 16 |
925 | 1076 | ||
926 | u32 ath9k_hw_get_eeprom(struct ath_hal_5416 *ahp, | 1077 | u32 ath9k_hw_get_eeprom(struct ath_hal *ah, |
927 | enum eeprom_param param); | 1078 | enum eeprom_param param); |
928 | 1079 | ||
929 | #endif | 1080 | #endif |