Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/dev/ath/ath_hal/ar5416/ar5416_cal.h
39566 views
1
/*-
2
* SPDX-License-Identifier: ISC
3
*
4
* Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
5
* Copyright (c) 2002-2008 Atheros Communications, Inc.
6
*
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.
10
*
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.
18
*/
19
#ifndef _ATH_AR5416_CAL_H_
20
#define _ATH_AR5416_CAL_H_
21
22
typedef enum {
23
ADC_DC_INIT_CAL = 0x1,
24
ADC_GAIN_CAL = 0x2,
25
ADC_DC_CAL = 0x4,
26
IQ_MISMATCH_CAL = 0x8
27
} HAL_CAL_TYPE;
28
29
/* Calibrate state */
30
typedef enum {
31
CAL_INACTIVE,
32
CAL_WAITING,
33
CAL_RUNNING,
34
CAL_DONE
35
} HAL_CAL_STATE;
36
37
typedef union {
38
uint32_t u;
39
int32_t s;
40
} HAL_CAL_SAMPLE;
41
42
#define MIN_CAL_SAMPLES 1
43
#define MAX_CAL_SAMPLES 64
44
#define INIT_LOG_COUNT 5
45
#define PER_MIN_LOG_COUNT 2
46
#define PER_MAX_LOG_COUNT 10
47
48
/* Per Calibration data structure */
49
typedef struct per_cal_data {
50
const char *calName; /* for diagnostics */
51
HAL_CAL_TYPE calType; /* Type of calibration */
52
uint32_t calNumSamples; /* # SW samples to collect */
53
uint32_t calCountMax; /* # HW samples to collect */
54
void (*calCollect)(struct ath_hal *); /* Accumulator function */
55
/* Post-processing function */
56
void (*calPostProc)(struct ath_hal *, uint8_t);
57
} HAL_PERCAL_DATA;
58
59
/* List structure for calibration data */
60
typedef struct cal_list {
61
struct cal_list *calNext;
62
HAL_CAL_STATE calState;
63
const HAL_PERCAL_DATA *calData;
64
} HAL_CAL_LIST;
65
66
struct ar5416PerCal {
67
/*
68
* Periodic calibration state.
69
*/
70
HAL_CAL_TYPE suppCals;
71
HAL_CAL_LIST iqCalData;
72
HAL_CAL_LIST adcGainCalData;
73
HAL_CAL_LIST adcDcCalInitData;
74
HAL_CAL_LIST adcDcCalData;
75
HAL_CAL_LIST *cal_list;
76
HAL_CAL_LIST *cal_last;
77
HAL_CAL_LIST *cal_curr;
78
#define AR5416_MAX_CHAINS 3 /* XXX dup's eeprom def */
79
HAL_CAL_SAMPLE caldata[4][AR5416_MAX_CHAINS];
80
int calSamples;
81
/*
82
* Noise floor cal histogram support.
83
* XXX be nice to re-use space in ar5212
84
*/
85
#define AR5416_NUM_NF_READINGS 6 /* (3 chains * (ctl + ext) */
86
struct ar5212NfCalHist nfCalHist[AR5416_NUM_NF_READINGS];
87
};
88
89
#define INIT_CAL(_perCal) do { \
90
(_perCal)->calState = CAL_WAITING; \
91
(_perCal)->calNext = AH_NULL; \
92
} while (0)
93
94
#define INSERT_CAL(_cal, _perCal) do { \
95
if ((_cal)->cal_last == AH_NULL) { \
96
(_cal)->cal_list = (_cal)->cal_last = (_perCal); \
97
((_cal)->cal_last)->calNext = (_perCal); \
98
} else { \
99
((_cal)->cal_last)->calNext = (_perCal); \
100
(_cal)->cal_last = (_perCal); \
101
(_perCal)->calNext = (_cal)->cal_list; \
102
} \
103
} while (0)
104
105
HAL_BOOL ar5416InitCalHardware(struct ath_hal *ah, const struct ieee80211_channel *chan);
106
HAL_BOOL ar5416InitCal(struct ath_hal *, const struct ieee80211_channel *);
107
HAL_BOOL ar5416PerCalibration(struct ath_hal *, struct ieee80211_channel *,
108
HAL_BOOL *isIQdone);
109
HAL_BOOL ar5416PerCalibrationN(struct ath_hal *, struct ieee80211_channel *,
110
u_int chainMask, HAL_BOOL longCal, HAL_BOOL *isCalDone);
111
HAL_BOOL ar5416ResetCalValid(struct ath_hal *,
112
const struct ieee80211_channel *);
113
114
void ar5416IQCalCollect(struct ath_hal *ah);
115
void ar5416IQCalibration(struct ath_hal *ah, uint8_t numChains);
116
void ar5416AdcGainCalCollect(struct ath_hal *ah);
117
void ar5416AdcGainCalibration(struct ath_hal *ah, uint8_t numChains);
118
void ar5416AdcDcCalCollect(struct ath_hal *ah);
119
void ar5416AdcDcCalibration(struct ath_hal *ah, uint8_t numChains);
120
void ar5416InitNfHistBuff(struct ar5212NfCalHist *h);
121
#endif /* _ATH_AR5416_CAL_H_ */
122
123