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