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 277453645fSAndriy Voskoboinyk #ifndef RTL8812A_H 287453645fSAndriy Voskoboinyk #define RTL8812A_H 297453645fSAndriy Voskoboinyk 307453645fSAndriy Voskoboinyk /* 317453645fSAndriy Voskoboinyk * Global definitions. 327453645fSAndriy Voskoboinyk */ 337453645fSAndriy Voskoboinyk #define R12A_PUBQ_NPAGES 219 347453645fSAndriy Voskoboinyk #define R12A_TXPKTBUF_COUNT 255 357453645fSAndriy Voskoboinyk #define R12A_TX_PAGE_COUNT 248 367453645fSAndriy Voskoboinyk 377453645fSAndriy Voskoboinyk #define R12A_TX_PAGE_SIZE 512 387453645fSAndriy Voskoboinyk #define R12A_RX_DMA_BUFFER_SIZE 0x3e80 397453645fSAndriy Voskoboinyk 407453645fSAndriy Voskoboinyk #define R12A_MAX_FW_SIZE 0x8000 417453645fSAndriy Voskoboinyk #define R12A_MACID_MAX 127 427453645fSAndriy Voskoboinyk #define R12A_CAM_ENTRY_COUNT 64 437453645fSAndriy Voskoboinyk 447453645fSAndriy Voskoboinyk #define R12A_INTR_MSG_LEN 60 457453645fSAndriy Voskoboinyk 467453645fSAndriy Voskoboinyk static const uint8_t r12a_chan_5ghz_0[] = 477453645fSAndriy Voskoboinyk { 36, 40, 44, 48, 52, 56, 60, 64 }; 487453645fSAndriy Voskoboinyk static const uint8_t r12a_chan_5ghz_1[] = 497453645fSAndriy Voskoboinyk { 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144 }; 507453645fSAndriy Voskoboinyk static const uint8_t r12a_chan_5ghz_2[] = 517453645fSAndriy Voskoboinyk { 149, 153, 157, 161, 165, 169, 173, 177 }; 527453645fSAndriy Voskoboinyk 537453645fSAndriy Voskoboinyk /* 547453645fSAndriy Voskoboinyk * Function declarations. 557453645fSAndriy Voskoboinyk */ 567453645fSAndriy Voskoboinyk /* r12a_attach.c */ 577453645fSAndriy Voskoboinyk void r12a_vap_preattach(struct rtwn_softc *, struct ieee80211vap *); 587453645fSAndriy Voskoboinyk void r12a_detach_private(struct rtwn_softc *); 597453645fSAndriy Voskoboinyk 607453645fSAndriy Voskoboinyk /* r12a_beacon.c */ 617453645fSAndriy Voskoboinyk void r12a_beacon_init(struct rtwn_softc *, void *, int); 627453645fSAndriy Voskoboinyk void r12a_beacon_set_rate(void *, int); 639efd2154SAdrian Chadd void r12a_sta_beacon_enable(struct rtwn_softc *, int, bool); 647453645fSAndriy Voskoboinyk 657453645fSAndriy Voskoboinyk /* r12a_calib.c */ 667453645fSAndriy Voskoboinyk void r12a_save_bb_afe_vals(struct rtwn_softc *, uint32_t[], 677453645fSAndriy Voskoboinyk const uint16_t[], int); 687453645fSAndriy Voskoboinyk void r12a_restore_bb_afe_vals(struct rtwn_softc *, uint32_t[], 697453645fSAndriy Voskoboinyk const uint16_t[], int); 707453645fSAndriy Voskoboinyk void r12a_save_rf_vals(struct rtwn_softc *, uint32_t[], 717453645fSAndriy Voskoboinyk const uint8_t[], int); 727453645fSAndriy Voskoboinyk void r12a_restore_rf_vals(struct rtwn_softc *, uint32_t[], 737453645fSAndriy Voskoboinyk const uint8_t[], int); 747453645fSAndriy Voskoboinyk void r12a_lc_calib(struct rtwn_softc *); 757453645fSAndriy Voskoboinyk #ifndef RTWN_WITHOUT_UCODE 767453645fSAndriy Voskoboinyk int r12a_iq_calib_fw_supported(struct rtwn_softc *); 777453645fSAndriy Voskoboinyk #endif 787453645fSAndriy Voskoboinyk void r12a_iq_calib_sw(struct rtwn_softc *); 797453645fSAndriy Voskoboinyk void r12a_iq_calib(struct rtwn_softc *); 807453645fSAndriy Voskoboinyk 817453645fSAndriy Voskoboinyk /* r12a_caps.c */ 827453645fSAndriy Voskoboinyk int r12a_ioctl_net(struct ieee80211com *, u_long, void *); 837453645fSAndriy Voskoboinyk 847453645fSAndriy Voskoboinyk /* r12a_chan.c */ 857453645fSAndriy Voskoboinyk void r12a_fix_spur(struct rtwn_softc *, struct ieee80211_channel *); 867453645fSAndriy Voskoboinyk void r12a_set_chan(struct rtwn_softc *, struct ieee80211_channel *); 877453645fSAndriy Voskoboinyk void r12a_set_band_2ghz(struct rtwn_softc *, uint32_t); 887453645fSAndriy Voskoboinyk void r12a_set_band_5ghz(struct rtwn_softc *, uint32_t); 897453645fSAndriy Voskoboinyk 907453645fSAndriy Voskoboinyk /* r12a_fw.c */ 917453645fSAndriy Voskoboinyk #ifndef RTWN_WITHOUT_UCODE 927453645fSAndriy Voskoboinyk void r12a_fw_reset(struct rtwn_softc *, int); 937453645fSAndriy Voskoboinyk void r12a_fw_download_enable(struct rtwn_softc *, int); 947453645fSAndriy Voskoboinyk void r12a_set_media_status(struct rtwn_softc *, int); 957453645fSAndriy Voskoboinyk int r12a_set_pwrmode(struct rtwn_softc *, struct ieee80211vap *, 967453645fSAndriy Voskoboinyk int); 977453645fSAndriy Voskoboinyk void r12a_iq_calib_fw(struct rtwn_softc *); 987453645fSAndriy Voskoboinyk #endif 997453645fSAndriy Voskoboinyk 1007453645fSAndriy Voskoboinyk /* r12a_init.c */ 1017453645fSAndriy Voskoboinyk int r12a_check_condition(struct rtwn_softc *, const uint8_t[]); 1027453645fSAndriy Voskoboinyk int r12a_set_page_size(struct rtwn_softc *); 1037453645fSAndriy Voskoboinyk void r12a_init_edca(struct rtwn_softc *); 1047453645fSAndriy Voskoboinyk void r12a_init_bb(struct rtwn_softc *); 1057453645fSAndriy Voskoboinyk void r12a_init_rf(struct rtwn_softc *); 1067453645fSAndriy Voskoboinyk void r12a_crystalcap_write(struct rtwn_softc *); 1077453645fSAndriy Voskoboinyk int r12a_power_on(struct rtwn_softc *); 1087453645fSAndriy Voskoboinyk void r12a_power_off(struct rtwn_softc *); 1097453645fSAndriy Voskoboinyk void r12a_init_intr(struct rtwn_softc *); 1107453645fSAndriy Voskoboinyk void r12a_init_antsel(struct rtwn_softc *); 1117453645fSAndriy Voskoboinyk 1127453645fSAndriy Voskoboinyk /* r12a_led.c */ 1137453645fSAndriy Voskoboinyk void r12a_set_led(struct rtwn_softc *, int, int); 1147453645fSAndriy Voskoboinyk 1157453645fSAndriy Voskoboinyk /* r12a_rf.c */ 1167453645fSAndriy Voskoboinyk uint32_t r12a_rf_read(struct rtwn_softc *, int, uint8_t); 1177453645fSAndriy Voskoboinyk uint32_t r12a_c_cut_rf_read(struct rtwn_softc *, int, uint8_t); 1187453645fSAndriy Voskoboinyk void r12a_rf_write(struct rtwn_softc *, int, uint8_t, uint32_t); 1197453645fSAndriy Voskoboinyk 1207453645fSAndriy Voskoboinyk /* r12a_rom.c */ 1217453645fSAndriy Voskoboinyk void r12a_parse_rom_common(struct rtwn_softc *, uint8_t *); 1227453645fSAndriy Voskoboinyk void r12a_parse_rom(struct rtwn_softc *, uint8_t *); 1237453645fSAndriy Voskoboinyk 1247453645fSAndriy Voskoboinyk /* r12a_rx.c */ 1257453645fSAndriy Voskoboinyk void r12a_ratectl_tx_complete(struct rtwn_softc *, uint8_t *, int); 1267453645fSAndriy Voskoboinyk void r12a_handle_c2h_report(struct rtwn_softc *, uint8_t *, int); 1277453645fSAndriy Voskoboinyk int r12a_check_frame_checksum(struct rtwn_softc *, struct mbuf *); 1287453645fSAndriy Voskoboinyk uint8_t r12a_rx_radiotap_flags(const void *); 12909606165SAndriy Voskoboinyk void r12a_get_rx_stats(struct rtwn_softc *, struct ieee80211_rx_stats *, 13009606165SAndriy Voskoboinyk const void *, const void *); 1317453645fSAndriy Voskoboinyk 1327453645fSAndriy Voskoboinyk /* r12a_tx.c */ 1337453645fSAndriy Voskoboinyk void r12a_fill_tx_desc(struct rtwn_softc *, struct ieee80211_node *, 134*64ecfc27SAdrian Chadd struct mbuf *, void *, uint8_t, bool, int); 1357453645fSAndriy Voskoboinyk void r12a_fill_tx_desc_raw(struct rtwn_softc *, struct ieee80211_node *, 1367453645fSAndriy Voskoboinyk struct mbuf *, void *, const struct ieee80211_bpf_params *); 1377453645fSAndriy Voskoboinyk void r12a_fill_tx_desc_null(struct rtwn_softc *, void *, int, int, int); 1387453645fSAndriy Voskoboinyk uint8_t r12a_tx_radiotap_flags(const void *); 1397453645fSAndriy Voskoboinyk 1407453645fSAndriy Voskoboinyk #endif /* RTL8812A_H */ 141