1251655Sadrian/*-
2251655Sadrian * Copyright (c) 2013 Adrian Chadd <adrian@FreeBSD.org>
3251655Sadrian * All rights reserved.
4251655Sadrian *
5251655Sadrian * Redistribution and use in source and binary forms, with or without
6251655Sadrian * modification, are permitted provided that the following conditions
7251655Sadrian * are met:
8251655Sadrian * 1. Redistributions of source code must retain the above copyright
9251655Sadrian *    notice, this list of conditions and the following disclaimer,
10251655Sadrian *    without modification.
11251655Sadrian * 2. Redistributions in binary form must reproduce at minimum a disclaimer
12251655Sadrian *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
13251655Sadrian *    redistribution must be conditioned upon including a substantially
14251655Sadrian *    similar Disclaimer requirement for further binary redistribution.
15251655Sadrian *
16251655Sadrian * NO WARRANTY
17251655Sadrian * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18251655Sadrian * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19251655Sadrian * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
20251655Sadrian * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21251655Sadrian * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
22251655Sadrian * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23251655Sadrian * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24251655Sadrian * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25251655Sadrian * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26251655Sadrian * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27251655Sadrian * THE POSSIBILITY OF SUCH DAMAGES.
28251655Sadrian *
29251655Sadrian * $FreeBSD$
30251655Sadrian */
31251655Sadrian#ifndef	__IF_ATH_LNA_DIV_H__
32251655Sadrian#define	__IF_ATH_LNA_DIV_H__
33251655Sadrian
34251655Sadrian#define	ATH_ANT_RX_CURRENT_SHIFT		4
35251655Sadrian#define	ATH_ANT_RX_MAIN_SHIFT			2
36251655Sadrian#define	ATH_ANT_RX_MASK				0x3
37251655Sadrian
38251655Sadrian#define	ATH_ANT_DIV_COMB_SHORT_SCAN_INTR	50
39251655Sadrian#define	ATH_ANT_DIV_COMB_SHORT_SCAN_PKTCOUNT	0x100
40251655Sadrian#define	ATH_ANT_DIV_COMB_MAX_PKTCOUNT		0x200
41251655Sadrian#define	ATH_ANT_DIV_COMB_INIT_COUNT		95
42251655Sadrian#define	ATH_ANT_DIV_COMB_MAX_COUNT		100
43251655Sadrian#define	ATH_ANT_DIV_COMB_ALT_ANT_RATIO		30
44251655Sadrian#define	ATH_ANT_DIV_COMB_ALT_ANT_RATIO2		20
45251655Sadrian
46251655Sadrian#define	ATH_ANT_DIV_COMB_LNA1_LNA2_SWITCH_DELTA	-1
47251655Sadrian#define	ATH_ANT_DIV_COMB_LNA1_DELTA_HI		-4
48251655Sadrian#define	ATH_ANT_DIV_COMB_LNA1_DELTA_MID		-2
49251655Sadrian#define	ATH_ANT_DIV_COMB_LNA1_DELTA_LOW		2
50251655Sadrian
51251655Sadrianstruct if_ath_ant_comb_state {
52251655Sadrian	uint16_t count;
53251655Sadrian	uint16_t total_pkt_count;
54251655Sadrian	HAL_BOOL scan;
55251655Sadrian	HAL_BOOL scan_not_start;
56251655Sadrian	int main_total_rssi;
57251655Sadrian	int alt_total_rssi;
58251655Sadrian	int alt_recv_cnt;
59251655Sadrian	int main_recv_cnt;
60251655Sadrian	int rssi_lna1;
61251655Sadrian	int rssi_lna2;
62251655Sadrian	int rssi_add;
63251655Sadrian	int rssi_sub;
64251655Sadrian	int rssi_first;
65251655Sadrian	int rssi_second;
66251655Sadrian	int rssi_third;
67251655Sadrian	HAL_BOOL alt_good;
68251655Sadrian	int quick_scan_cnt;
69251655Sadrian	int main_conf;
70251655Sadrian	HAL_ANT_DIV_COMB_LNA_CONF first_quick_scan_conf;
71251655Sadrian	HAL_ANT_DIV_COMB_LNA_CONF second_quick_scan_conf;
72251655Sadrian	int first_bias;
73251655Sadrian	int second_bias;
74251655Sadrian	HAL_BOOL first_ratio;
75251655Sadrian	HAL_BOOL second_ratio;
76251655Sadrian	unsigned long scan_start_time;
77251730Sadrian	int lna1_lna2_delta;
78251655Sadrian};
79251655Sadrian
80251655Sadrianextern	int ath_lna_div_attach(struct ath_softc *sc);
81251655Sadrianextern	int ath_lna_div_detach(struct ath_softc *sc);
82251655Sadrianextern	int ath_lna_div_ioctl(struct ath_softc *sc, struct ath_diag *ad);
83251655Sadrianextern	int ath_lna_div_enable(struct ath_softc *sc,
84251655Sadrian	    const struct ieee80211_channel *ch);
85251655Sadrian
86251655Sadrianextern	void ath_lna_rx_comb_scan(struct ath_softc *sc,
87251655Sadrian	    struct ath_rx_status *rs, unsigned long ticks, int hz);
88251655Sadrian
89251655Sadrian#endif	/* __IF_ATH_LNA_DIV_H__ */
90