eeprom.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. /*
  2. * Shared Atheros AR9170 Header
  3. *
  4. * EEPROM layout
  5. *
  6. * Copyright 2008, Johannes Berg <johannes@sipsolutions.net>
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; see the file COPYING. If not, see
  20. * http://www.gnu.org/licenses/.
  21. *
  22. * This file incorporates work covered by the following copyright and
  23. * permission notice:
  24. * Copyright (c) 2007-2008 Atheros Communications, Inc.
  25. *
  26. * Permission to use, copy, modify, and/or distribute this software for any
  27. * purpose with or without fee is hereby granted, provided that the above
  28. * copyright notice and this permission notice appear in all copies.
  29. *
  30. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  31. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  32. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  33. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  34. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  35. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  36. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  37. */
  38. #ifndef __CARL9170_SHARED_EEPROM_H
  39. #define __CARL9170_SHARED_EEPROM_H
  40. #define AR9170_EEPROM_START 0x1600
  41. #define AR5416_MAX_CHAINS 2
  42. #define AR5416_MODAL_SPURS 5
  43. struct ar9170_eeprom_modal {
  44. __le32 antCtrlChain[AR5416_MAX_CHAINS];
  45. __le32 antCtrlCommon;
  46. s8 antennaGainCh[AR5416_MAX_CHAINS];
  47. u8 switchSettling;
  48. u8 txRxAttenCh[AR5416_MAX_CHAINS];
  49. u8 rxTxMarginCh[AR5416_MAX_CHAINS];
  50. s8 adcDesiredSize;
  51. s8 pgaDesiredSize;
  52. u8 xlnaGainCh[AR5416_MAX_CHAINS];
  53. u8 txEndToXpaOff;
  54. u8 txEndToRxOn;
  55. u8 txFrameToXpaOn;
  56. u8 thresh62;
  57. s8 noiseFloorThreshCh[AR5416_MAX_CHAINS];
  58. u8 xpdGain;
  59. u8 xpd;
  60. s8 iqCalICh[AR5416_MAX_CHAINS];
  61. s8 iqCalQCh[AR5416_MAX_CHAINS];
  62. u8 pdGainOverlap;
  63. u8 ob;
  64. u8 db;
  65. u8 xpaBiasLvl;
  66. u8 pwrDecreaseFor2Chain;
  67. u8 pwrDecreaseFor3Chain;
  68. u8 txFrameToDataStart;
  69. u8 txFrameToPaOn;
  70. u8 ht40PowerIncForPdadc;
  71. u8 bswAtten[AR5416_MAX_CHAINS];
  72. u8 bswMargin[AR5416_MAX_CHAINS];
  73. u8 swSettleHt40;
  74. u8 reserved[22];
  75. struct spur_channel {
  76. __le16 spurChan;
  77. u8 spurRangeLow;
  78. u8 spurRangeHigh;
  79. } __packed spur_channels[AR5416_MODAL_SPURS];
  80. } __packed;
  81. #define AR5416_NUM_PD_GAINS 4
  82. #define AR5416_PD_GAIN_ICEPTS 5
  83. struct ar9170_calibration_data_per_freq {
  84. u8 pwr_pdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
  85. u8 vpd_pdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
  86. } __packed;
  87. #define AR5416_NUM_5G_CAL_PIERS 8
  88. #define AR5416_NUM_2G_CAL_PIERS 4
  89. #define AR5416_NUM_5G_TARGET_PWRS 8
  90. #define AR5416_NUM_2G_CCK_TARGET_PWRS 3
  91. #define AR5416_NUM_2G_OFDM_TARGET_PWRS 4
  92. #define AR5416_MAX_NUM_TGT_PWRS 8
  93. struct ar9170_calibration_target_power_legacy {
  94. u8 freq;
  95. u8 power[4];
  96. } __packed;
  97. struct ar9170_calibration_target_power_ht {
  98. u8 freq;
  99. u8 power[8];
  100. } __packed;
  101. #define AR5416_NUM_CTLS 24
  102. struct ar9170_calctl_edges {
  103. u8 channel;
  104. #define AR9170_CALCTL_EDGE_FLAGS 0xC0
  105. u8 power_flags;
  106. } __packed;
  107. #define AR5416_NUM_BAND_EDGES 8
  108. struct ar9170_calctl_data {
  109. struct ar9170_calctl_edges
  110. control_edges[AR5416_MAX_CHAINS][AR5416_NUM_BAND_EDGES];
  111. } __packed;
  112. struct ar9170_eeprom {
  113. __le16 length;
  114. __le16 checksum;
  115. __le16 version;
  116. u8 operating_flags;
  117. #define AR9170_OPFLAG_5GHZ 1
  118. #define AR9170_OPFLAG_2GHZ 2
  119. u8 misc;
  120. __le16 reg_domain[2];
  121. u8 mac_address[6];
  122. u8 rx_mask;
  123. u8 tx_mask;
  124. __le16 rf_silent;
  125. __le16 bluetooth_options;
  126. __le16 device_capabilities;
  127. __le32 build_number;
  128. u8 deviceType;
  129. u8 reserved[33];
  130. u8 customer_data[64];
  131. struct ar9170_eeprom_modal
  132. modal_header[2];
  133. u8 cal_freq_pier_5G[AR5416_NUM_5G_CAL_PIERS];
  134. u8 cal_freq_pier_2G[AR5416_NUM_2G_CAL_PIERS];
  135. struct ar9170_calibration_data_per_freq
  136. cal_pier_data_5G[AR5416_MAX_CHAINS][AR5416_NUM_5G_CAL_PIERS],
  137. cal_pier_data_2G[AR5416_MAX_CHAINS][AR5416_NUM_2G_CAL_PIERS];
  138. /* power calibration data */
  139. struct ar9170_calibration_target_power_legacy
  140. cal_tgt_pwr_5G[AR5416_NUM_5G_TARGET_PWRS];
  141. struct ar9170_calibration_target_power_ht
  142. cal_tgt_pwr_5G_ht20[AR5416_NUM_5G_TARGET_PWRS],
  143. cal_tgt_pwr_5G_ht40[AR5416_NUM_5G_TARGET_PWRS];
  144. struct ar9170_calibration_target_power_legacy
  145. cal_tgt_pwr_2G_cck[AR5416_NUM_2G_CCK_TARGET_PWRS],
  146. cal_tgt_pwr_2G_ofdm[AR5416_NUM_2G_OFDM_TARGET_PWRS];
  147. struct ar9170_calibration_target_power_ht
  148. cal_tgt_pwr_2G_ht20[AR5416_NUM_2G_OFDM_TARGET_PWRS],
  149. cal_tgt_pwr_2G_ht40[AR5416_NUM_2G_OFDM_TARGET_PWRS];
  150. /* conformance testing limits */
  151. u8 ctl_index[AR5416_NUM_CTLS];
  152. struct ar9170_calctl_data
  153. ctl_data[AR5416_NUM_CTLS];
  154. u8 pad;
  155. __le16 subsystem_id;
  156. } __packed;
  157. #define AR9170_LED_MODE_POWER_ON 0x0001
  158. #define AR9170_LED_MODE_RESERVED 0x0002
  159. #define AR9170_LED_MODE_DISABLE_STATE 0x0004
  160. #define AR9170_LED_MODE_OFF_IN_PSM 0x0008
  161. /* AR9170_LED_MODE BIT is set */
  162. #define AR9170_LED_MODE_FREQUENCY_S 4
  163. #define AR9170_LED_MODE_FREQUENCY 0x0030
  164. #define AR9170_LED_MODE_FREQUENCY_1HZ 0x0000
  165. #define AR9170_LED_MODE_FREQUENCY_0_5HZ 0x0010
  166. #define AR9170_LED_MODE_FREQUENCY_0_25HZ 0x0020
  167. #define AR9170_LED_MODE_FREQUENCY_0_125HZ 0x0030
  168. /* AR9170_LED_MODE BIT is not set */
  169. #define AR9170_LED_MODE_CONN_STATE_S 4
  170. #define AR9170_LED_MODE_CONN_STATE 0x0030
  171. #define AR9170_LED_MODE_CONN_STATE_FORCE_OFF 0x0000
  172. #define AR9170_LED_MODE_CONN_STATE_FORCE_ON 0x0010
  173. /* Idle off / Active on */
  174. #define AR9170_LED_MODE_CONN_STATE_IOFF_AON 0x0020
  175. /* Idle on / Active off */
  176. #define AR9170_LED_MODE_CONN_STATE_ION_AOFF 0x0010
  177. #define AR9170_LED_MODE_MODE 0x0040
  178. #define AR9170_LED_MODE_RESERVED2 0x0080
  179. #define AR9170_LED_MODE_TON_SCAN_S 8
  180. #define AR9170_LED_MODE_TON_SCAN 0x0f00
  181. #define AR9170_LED_MODE_TOFF_SCAN_S 12
  182. #define AR9170_LED_MODE_TOFF_SCAN 0xf000
  183. struct ar9170_led_mode {
  184. __le16 led;
  185. };
  186. #endif /* __CARL9170_SHARED_EEPROM_H */