2 * SPDX-License-Identifier: ISC
4 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
5 * Copyright (c) 2002-2008 Atheros Communications, Inc.
7 * Permission to use, copy, modify, and/or distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 #ifndef _ATH_AR5416_CAL_H_
22 #define _ATH_AR5416_CAL_H_
25 ADC_DC_INIT_CAL = 0x1,
44 #define MIN_CAL_SAMPLES 1
45 #define MAX_CAL_SAMPLES 64
46 #define INIT_LOG_COUNT 5
47 #define PER_MIN_LOG_COUNT 2
48 #define PER_MAX_LOG_COUNT 10
50 /* Per Calibration data structure */
51 typedef struct per_cal_data {
52 const char *calName; /* for diagnostics */
53 HAL_CAL_TYPE calType; /* Type of calibration */
54 uint32_t calNumSamples; /* # SW samples to collect */
55 uint32_t calCountMax; /* # HW samples to collect */
56 void (*calCollect)(struct ath_hal *); /* Accumulator function */
57 /* Post-processing function */
58 void (*calPostProc)(struct ath_hal *, uint8_t);
61 /* List structure for calibration data */
62 typedef struct cal_list {
63 struct cal_list *calNext;
64 HAL_CAL_STATE calState;
65 const HAL_PERCAL_DATA *calData;
70 * Periodic calibration state.
72 HAL_CAL_TYPE suppCals;
73 HAL_CAL_LIST iqCalData;
74 HAL_CAL_LIST adcGainCalData;
75 HAL_CAL_LIST adcDcCalInitData;
76 HAL_CAL_LIST adcDcCalData;
77 HAL_CAL_LIST *cal_list;
78 HAL_CAL_LIST *cal_last;
79 HAL_CAL_LIST *cal_curr;
80 #define AR5416_MAX_CHAINS 3 /* XXX dup's eeprom def */
81 HAL_CAL_SAMPLE caldata[4][AR5416_MAX_CHAINS];
84 * Noise floor cal histogram support.
85 * XXX be nice to re-use space in ar5212
87 #define AR5416_NUM_NF_READINGS 6 /* (3 chains * (ctl + ext) */
88 struct ar5212NfCalHist nfCalHist[AR5416_NUM_NF_READINGS];
91 #define INIT_CAL(_perCal) do { \
92 (_perCal)->calState = CAL_WAITING; \
93 (_perCal)->calNext = AH_NULL; \
96 #define INSERT_CAL(_cal, _perCal) do { \
97 if ((_cal)->cal_last == AH_NULL) { \
98 (_cal)->cal_list = (_cal)->cal_last = (_perCal); \
99 ((_cal)->cal_last)->calNext = (_perCal); \
101 ((_cal)->cal_last)->calNext = (_perCal); \
102 (_cal)->cal_last = (_perCal); \
103 (_perCal)->calNext = (_cal)->cal_list; \
107 HAL_BOOL ar5416InitCalHardware(struct ath_hal *ah, const struct ieee80211_channel *chan);
108 HAL_BOOL ar5416InitCal(struct ath_hal *, const struct ieee80211_channel *);
109 HAL_BOOL ar5416PerCalibration(struct ath_hal *, struct ieee80211_channel *,
111 HAL_BOOL ar5416PerCalibrationN(struct ath_hal *, struct ieee80211_channel *,
112 u_int chainMask, HAL_BOOL longCal, HAL_BOOL *isCalDone);
113 HAL_BOOL ar5416ResetCalValid(struct ath_hal *,
114 const struct ieee80211_channel *);
116 void ar5416IQCalCollect(struct ath_hal *ah);
117 void ar5416IQCalibration(struct ath_hal *ah, uint8_t numChains);
118 void ar5416AdcGainCalCollect(struct ath_hal *ah);
119 void ar5416AdcGainCalibration(struct ath_hal *ah, uint8_t numChains);
120 void ar5416AdcDcCalCollect(struct ath_hal *ah);
121 void ar5416AdcDcCalibration(struct ath_hal *ah, uint8_t numChains);
122 void ar5416InitNfHistBuff(struct ar5212NfCalHist *h);
123 #endif /* _ATH_AR5416_CAL_H_ */