xref: /freebsd/sys/dev/rtwn/rtl8812a/r12a.h (revision 64ecfc27dbd486ed764f9696b6e56f88e34ee8a1)
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