17453645fSAndriy Voskoboinyk /*- 27453645fSAndriy Voskoboinyk * Copyright (c) 2016 Andriy Voskoboinyk <avos@FreeBSD.org> 37453645fSAndriy Voskoboinyk * All rights reserved. 47453645fSAndriy Voskoboinyk * 57453645fSAndriy Voskoboinyk * Redistribution and use in source and binary forms, with or without 67453645fSAndriy Voskoboinyk * modification, are permitted provided that the following conditions 77453645fSAndriy Voskoboinyk * are met: 87453645fSAndriy Voskoboinyk * 1. Redistributions of source code must retain the above copyright 97453645fSAndriy Voskoboinyk * notice, this list of conditions and the following disclaimer. 107453645fSAndriy Voskoboinyk * 2. Redistributions in binary form must reproduce the above copyright 117453645fSAndriy Voskoboinyk * notice, this list of conditions and the following disclaimer in the 127453645fSAndriy Voskoboinyk * documentation and/or other materials provided with the distribution. 137453645fSAndriy Voskoboinyk * 147453645fSAndriy Voskoboinyk * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 157453645fSAndriy Voskoboinyk * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 167453645fSAndriy Voskoboinyk * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 177453645fSAndriy Voskoboinyk * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 187453645fSAndriy Voskoboinyk * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 197453645fSAndriy Voskoboinyk * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 207453645fSAndriy Voskoboinyk * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 217453645fSAndriy Voskoboinyk * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 227453645fSAndriy Voskoboinyk * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 237453645fSAndriy Voskoboinyk * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 247453645fSAndriy Voskoboinyk * SUCH DAMAGE. 257453645fSAndriy Voskoboinyk * 267453645fSAndriy Voskoboinyk * $FreeBSD$ 277453645fSAndriy Voskoboinyk */ 287453645fSAndriy Voskoboinyk 297453645fSAndriy Voskoboinyk #ifndef RTL8812A_H 307453645fSAndriy Voskoboinyk #define RTL8812A_H 317453645fSAndriy Voskoboinyk 327453645fSAndriy Voskoboinyk /* 337453645fSAndriy Voskoboinyk * Global definitions. 347453645fSAndriy Voskoboinyk */ 357453645fSAndriy Voskoboinyk #define R12A_PUBQ_NPAGES 219 367453645fSAndriy Voskoboinyk #define R12A_TXPKTBUF_COUNT 255 377453645fSAndriy Voskoboinyk #define R12A_TX_PAGE_COUNT 248 387453645fSAndriy Voskoboinyk 397453645fSAndriy Voskoboinyk #define R12A_TX_PAGE_SIZE 512 407453645fSAndriy Voskoboinyk #define R12A_RX_DMA_BUFFER_SIZE 0x3e80 417453645fSAndriy Voskoboinyk 427453645fSAndriy Voskoboinyk #define R12A_MAX_FW_SIZE 0x8000 437453645fSAndriy Voskoboinyk #define R12A_MACID_MAX 127 447453645fSAndriy Voskoboinyk #define R12A_CAM_ENTRY_COUNT 64 457453645fSAndriy Voskoboinyk 467453645fSAndriy Voskoboinyk #define R12A_INTR_MSG_LEN 60 477453645fSAndriy Voskoboinyk 487453645fSAndriy Voskoboinyk static const uint8_t r12a_chan_5ghz_0[] = 497453645fSAndriy Voskoboinyk { 36, 40, 44, 48, 52, 56, 60, 64 }; 507453645fSAndriy Voskoboinyk static const uint8_t r12a_chan_5ghz_1[] = 517453645fSAndriy Voskoboinyk { 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144 }; 527453645fSAndriy Voskoboinyk static const uint8_t r12a_chan_5ghz_2[] = 537453645fSAndriy Voskoboinyk { 149, 153, 157, 161, 165, 169, 173, 177 }; 547453645fSAndriy Voskoboinyk 557453645fSAndriy Voskoboinyk 567453645fSAndriy Voskoboinyk /* 577453645fSAndriy Voskoboinyk * Function declarations. 587453645fSAndriy Voskoboinyk */ 597453645fSAndriy Voskoboinyk /* r12a_attach.c */ 607453645fSAndriy Voskoboinyk void r12a_vap_preattach(struct rtwn_softc *, struct ieee80211vap *); 617453645fSAndriy Voskoboinyk void r12a_detach_private(struct rtwn_softc *); 627453645fSAndriy Voskoboinyk 637453645fSAndriy Voskoboinyk /* r12a_beacon.c */ 647453645fSAndriy Voskoboinyk void r12a_beacon_init(struct rtwn_softc *, void *, int); 657453645fSAndriy Voskoboinyk void r12a_beacon_set_rate(void *, int); 667453645fSAndriy Voskoboinyk 677453645fSAndriy Voskoboinyk /* r12a_calib.c */ 687453645fSAndriy Voskoboinyk void r12a_save_bb_afe_vals(struct rtwn_softc *, uint32_t[], 697453645fSAndriy Voskoboinyk const uint16_t[], int); 707453645fSAndriy Voskoboinyk void r12a_restore_bb_afe_vals(struct rtwn_softc *, uint32_t[], 717453645fSAndriy Voskoboinyk const uint16_t[], int); 727453645fSAndriy Voskoboinyk void r12a_save_rf_vals(struct rtwn_softc *, uint32_t[], 737453645fSAndriy Voskoboinyk const uint8_t[], int); 747453645fSAndriy Voskoboinyk void r12a_restore_rf_vals(struct rtwn_softc *, uint32_t[], 757453645fSAndriy Voskoboinyk const uint8_t[], int); 767453645fSAndriy Voskoboinyk void r12a_lc_calib(struct rtwn_softc *); 777453645fSAndriy Voskoboinyk #ifndef RTWN_WITHOUT_UCODE 787453645fSAndriy Voskoboinyk int r12a_iq_calib_fw_supported(struct rtwn_softc *); 797453645fSAndriy Voskoboinyk #endif 807453645fSAndriy Voskoboinyk void r12a_iq_calib_sw(struct rtwn_softc *); 817453645fSAndriy Voskoboinyk void r12a_iq_calib(struct rtwn_softc *); 827453645fSAndriy Voskoboinyk 837453645fSAndriy Voskoboinyk /* r12a_caps.c */ 847453645fSAndriy Voskoboinyk int r12a_ioctl_net(struct ieee80211com *, u_long, void *); 857453645fSAndriy Voskoboinyk 867453645fSAndriy Voskoboinyk /* r12a_chan.c */ 877453645fSAndriy Voskoboinyk void r12a_fix_spur(struct rtwn_softc *, struct ieee80211_channel *); 887453645fSAndriy Voskoboinyk void r12a_set_chan(struct rtwn_softc *, struct ieee80211_channel *); 897453645fSAndriy Voskoboinyk void r12a_set_band_2ghz(struct rtwn_softc *, uint32_t); 907453645fSAndriy Voskoboinyk void r12a_set_band_5ghz(struct rtwn_softc *, uint32_t); 917453645fSAndriy Voskoboinyk 927453645fSAndriy Voskoboinyk /* r12a_fw.c */ 937453645fSAndriy Voskoboinyk #ifndef RTWN_WITHOUT_UCODE 947453645fSAndriy Voskoboinyk void r12a_fw_reset(struct rtwn_softc *, int); 957453645fSAndriy Voskoboinyk void r12a_fw_download_enable(struct rtwn_softc *, int); 967453645fSAndriy Voskoboinyk void r12a_set_media_status(struct rtwn_softc *, int); 977453645fSAndriy Voskoboinyk int r12a_set_pwrmode(struct rtwn_softc *, struct ieee80211vap *, 987453645fSAndriy Voskoboinyk int); 997453645fSAndriy Voskoboinyk void r12a_iq_calib_fw(struct rtwn_softc *); 1007453645fSAndriy Voskoboinyk #endif 1017453645fSAndriy Voskoboinyk 1027453645fSAndriy Voskoboinyk /* r12a_init.c */ 1037453645fSAndriy Voskoboinyk int r12a_check_condition(struct rtwn_softc *, const uint8_t[]); 1047453645fSAndriy Voskoboinyk int r12a_set_page_size(struct rtwn_softc *); 1057453645fSAndriy Voskoboinyk void r12a_init_edca(struct rtwn_softc *); 1067453645fSAndriy Voskoboinyk void r12a_init_bb(struct rtwn_softc *); 1077453645fSAndriy Voskoboinyk void r12a_init_rf(struct rtwn_softc *); 1087453645fSAndriy Voskoboinyk void r12a_crystalcap_write(struct rtwn_softc *); 1097453645fSAndriy Voskoboinyk int r12a_power_on(struct rtwn_softc *); 1107453645fSAndriy Voskoboinyk void r12a_power_off(struct rtwn_softc *); 1117453645fSAndriy Voskoboinyk void r12a_init_intr(struct rtwn_softc *); 1127453645fSAndriy Voskoboinyk void r12a_init_antsel(struct rtwn_softc *); 1137453645fSAndriy Voskoboinyk 1147453645fSAndriy Voskoboinyk /* r12a_led.c */ 1157453645fSAndriy Voskoboinyk void r12a_set_led(struct rtwn_softc *, int, int); 1167453645fSAndriy Voskoboinyk 1177453645fSAndriy Voskoboinyk /* r12a_rf.c */ 1187453645fSAndriy Voskoboinyk uint32_t r12a_rf_read(struct rtwn_softc *, int, uint8_t); 1197453645fSAndriy Voskoboinyk uint32_t r12a_c_cut_rf_read(struct rtwn_softc *, int, uint8_t); 1207453645fSAndriy Voskoboinyk void r12a_rf_write(struct rtwn_softc *, int, uint8_t, uint32_t); 1217453645fSAndriy Voskoboinyk 1227453645fSAndriy Voskoboinyk /* r12a_rom.c */ 1237453645fSAndriy Voskoboinyk void r12a_parse_rom_common(struct rtwn_softc *, uint8_t *); 1247453645fSAndriy Voskoboinyk void r12a_parse_rom(struct rtwn_softc *, uint8_t *); 1257453645fSAndriy Voskoboinyk 1267453645fSAndriy Voskoboinyk /* r12a_rx.c */ 1277453645fSAndriy Voskoboinyk void r12a_ratectl_tx_complete(struct rtwn_softc *, uint8_t *, int); 1287453645fSAndriy Voskoboinyk void r12a_handle_c2h_report(struct rtwn_softc *, uint8_t *, int); 1297453645fSAndriy Voskoboinyk int r12a_check_frame_checksum(struct rtwn_softc *, struct mbuf *); 1307453645fSAndriy Voskoboinyk uint8_t r12a_rx_radiotap_flags(const void *); 131*09606165SAndriy Voskoboinyk void r12a_get_rx_stats(struct rtwn_softc *, struct ieee80211_rx_stats *, 132*09606165SAndriy Voskoboinyk const void *, const void *); 1337453645fSAndriy Voskoboinyk 1347453645fSAndriy Voskoboinyk /* r12a_tx.c */ 1357453645fSAndriy Voskoboinyk void r12a_fill_tx_desc(struct rtwn_softc *, struct ieee80211_node *, 1367453645fSAndriy Voskoboinyk struct mbuf *, void *, uint8_t, int); 1377453645fSAndriy Voskoboinyk void r12a_fill_tx_desc_raw(struct rtwn_softc *, struct ieee80211_node *, 1387453645fSAndriy Voskoboinyk struct mbuf *, void *, const struct ieee80211_bpf_params *); 1397453645fSAndriy Voskoboinyk void r12a_fill_tx_desc_null(struct rtwn_softc *, void *, int, int, int); 1407453645fSAndriy Voskoboinyk uint8_t r12a_tx_radiotap_flags(const void *); 1417453645fSAndriy Voskoboinyk 1427453645fSAndriy Voskoboinyk #endif /* RTL8812A_H */ 143