1*7453645fSAndriy Voskoboinyk /*- 2*7453645fSAndriy Voskoboinyk * Copyright (c) 2016 Andriy Voskoboinyk <avos@FreeBSD.org> 3*7453645fSAndriy Voskoboinyk * All rights reserved. 4*7453645fSAndriy Voskoboinyk * 5*7453645fSAndriy Voskoboinyk * Redistribution and use in source and binary forms, with or without 6*7453645fSAndriy Voskoboinyk * modification, are permitted provided that the following conditions 7*7453645fSAndriy Voskoboinyk * are met: 8*7453645fSAndriy Voskoboinyk * 1. Redistributions of source code must retain the above copyright 9*7453645fSAndriy Voskoboinyk * notice, this list of conditions and the following disclaimer. 10*7453645fSAndriy Voskoboinyk * 2. Redistributions in binary form must reproduce the above copyright 11*7453645fSAndriy Voskoboinyk * notice, this list of conditions and the following disclaimer in the 12*7453645fSAndriy Voskoboinyk * documentation and/or other materials provided with the distribution. 13*7453645fSAndriy Voskoboinyk * 14*7453645fSAndriy Voskoboinyk * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*7453645fSAndriy Voskoboinyk * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*7453645fSAndriy Voskoboinyk * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*7453645fSAndriy Voskoboinyk * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*7453645fSAndriy Voskoboinyk * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*7453645fSAndriy Voskoboinyk * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*7453645fSAndriy Voskoboinyk * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*7453645fSAndriy Voskoboinyk * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*7453645fSAndriy Voskoboinyk * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*7453645fSAndriy Voskoboinyk * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*7453645fSAndriy Voskoboinyk * SUCH DAMAGE. 25*7453645fSAndriy Voskoboinyk */ 26*7453645fSAndriy Voskoboinyk 27*7453645fSAndriy Voskoboinyk #ifndef R12A_FW_CMD_H 28*7453645fSAndriy Voskoboinyk #define R12A_FW_CMD_H 29*7453645fSAndriy Voskoboinyk 30*7453645fSAndriy Voskoboinyk #include <dev/rtwn/rtl8188e/r88e_fw_cmd.h> 31*7453645fSAndriy Voskoboinyk 32*7453645fSAndriy Voskoboinyk /* 33*7453645fSAndriy Voskoboinyk * Host to firmware commands. 34*7453645fSAndriy Voskoboinyk */ 35*7453645fSAndriy Voskoboinyk /* Note: some parts are shared with RTL8188EU. */ 36*7453645fSAndriy Voskoboinyk #define R12A_CMD_MSR_RPT 0x01 37*7453645fSAndriy Voskoboinyk #define R12A_CMD_SET_PWRMODE 0x20 38*7453645fSAndriy Voskoboinyk #define R12A_CMD_IQ_CALIBRATE 0x45 39*7453645fSAndriy Voskoboinyk 40*7453645fSAndriy Voskoboinyk /* Structure for R12A_CMD_MSR_RPT. */ 41*7453645fSAndriy Voskoboinyk struct r12a_fw_cmd_msrrpt { 42*7453645fSAndriy Voskoboinyk uint8_t msrb0; 43*7453645fSAndriy Voskoboinyk #define R12A_MSRRPT_B0_DISASSOC 0x00 44*7453645fSAndriy Voskoboinyk #define R12A_MSRRPT_B0_ASSOC 0x01 45*7453645fSAndriy Voskoboinyk #define R12A_MSRRPT_B0_MACID_IND 0x02 46*7453645fSAndriy Voskoboinyk 47*7453645fSAndriy Voskoboinyk uint8_t macid; 48*7453645fSAndriy Voskoboinyk uint8_t macid_end; 49*7453645fSAndriy Voskoboinyk } __packed; 50*7453645fSAndriy Voskoboinyk 51*7453645fSAndriy Voskoboinyk /* Structure for R12A_CMD_SET_PWRMODE. */ 52*7453645fSAndriy Voskoboinyk struct r12a_fw_cmd_pwrmode { 53*7453645fSAndriy Voskoboinyk uint8_t mode; 54*7453645fSAndriy Voskoboinyk uint8_t pwrb1; 55*7453645fSAndriy Voskoboinyk uint8_t bcn_pass; 56*7453645fSAndriy Voskoboinyk uint8_t queue_uapsd; 57*7453645fSAndriy Voskoboinyk uint8_t pwr_state; 58*7453645fSAndriy Voskoboinyk uint8_t pwrb5; 59*7453645fSAndriy Voskoboinyk #define R12A_PWRMODE_B5_NO_BTCOEX 0x40 60*7453645fSAndriy Voskoboinyk } __packed; 61*7453645fSAndriy Voskoboinyk 62*7453645fSAndriy Voskoboinyk /* Structure for R12A_CMD_IQ_CALIBRATE. */ 63*7453645fSAndriy Voskoboinyk struct r12a_fw_cmd_iq_calib { 64*7453645fSAndriy Voskoboinyk uint8_t chan; 65*7453645fSAndriy Voskoboinyk uint8_t band_bw; 66*7453645fSAndriy Voskoboinyk #define RTWN_CMD_IQ_CHAN_WIDTH_20 0x01 67*7453645fSAndriy Voskoboinyk #define RTWN_CMD_IQ_CHAN_WIDTH_40 0x02 68*7453645fSAndriy Voskoboinyk #define RTWN_CMD_IQ_CHAN_WIDTH_80 0x04 69*7453645fSAndriy Voskoboinyk #define RTWN_CMD_IQ_CHAN_WIDTH_160 0x08 70*7453645fSAndriy Voskoboinyk #define RTWN_CMD_IQ_BAND_2GHZ 0x10 71*7453645fSAndriy Voskoboinyk #define RTWN_CMD_IQ_BAND_5GHZ 0x20 72*7453645fSAndriy Voskoboinyk 73*7453645fSAndriy Voskoboinyk uint8_t ext_5g_pa_lna; 74*7453645fSAndriy Voskoboinyk #define RTWN_CMD_IQ_EXT_PA_5G(pa) (pa) 75*7453645fSAndriy Voskoboinyk #define RTWN_CMD_IQ_EXT_LNA_5G(lna) ((lna) << 1) 76*7453645fSAndriy Voskoboinyk } __packed; 77*7453645fSAndriy Voskoboinyk 78*7453645fSAndriy Voskoboinyk /* 79*7453645fSAndriy Voskoboinyk * C2H event types. 80*7453645fSAndriy Voskoboinyk */ 81*7453645fSAndriy Voskoboinyk #define R12A_C2H_DEBUG 0x00 82*7453645fSAndriy Voskoboinyk #define R12A_C2H_TX_REPORT 0x03 83*7453645fSAndriy Voskoboinyk #define R12A_C2H_BT_INFO 0x09 84*7453645fSAndriy Voskoboinyk #define R12A_C2H_RA_REPORT 0x0c 85*7453645fSAndriy Voskoboinyk #define R12A_C2H_IQK_FINISHED 0x11 86*7453645fSAndriy Voskoboinyk 87*7453645fSAndriy Voskoboinyk /* Structure for R12A_C2H_TX_REPORT event. */ 88*7453645fSAndriy Voskoboinyk struct r12a_c2h_tx_rpt { 89*7453645fSAndriy Voskoboinyk uint8_t txrptb0; 90*7453645fSAndriy Voskoboinyk #define R12A_TXRPTB0_QSEL_M 0x1f 91*7453645fSAndriy Voskoboinyk #define R12A_TXRPTB0_QSEL_S 0 92*7453645fSAndriy Voskoboinyk #define R12A_TXRPTB0_BC 0x20 93*7453645fSAndriy Voskoboinyk #define R12A_TXRPTB0_LIFE_EXPIRE 0x40 94*7453645fSAndriy Voskoboinyk #define R12A_TXRPTB0_RETRY_OVER 0x80 95*7453645fSAndriy Voskoboinyk 96*7453645fSAndriy Voskoboinyk uint8_t macid; 97*7453645fSAndriy Voskoboinyk uint8_t txrptb2; 98*7453645fSAndriy Voskoboinyk #define R12A_TXRPTB2_RETRY_CNT_M 0x3f 99*7453645fSAndriy Voskoboinyk #define R12A_TXRPTB2_RETRY_CNT_S 0 100*7453645fSAndriy Voskoboinyk 101*7453645fSAndriy Voskoboinyk uint8_t queue_time_low; /* 256 msec unit */ 102*7453645fSAndriy Voskoboinyk uint8_t queue_time_high; 103*7453645fSAndriy Voskoboinyk uint8_t final_rate; 104*7453645fSAndriy Voskoboinyk uint16_t reserved; 105*7453645fSAndriy Voskoboinyk } __packed; 106*7453645fSAndriy Voskoboinyk 107*7453645fSAndriy Voskoboinyk /* Structure for R12A_C2H_RA_REPORT event. */ 108*7453645fSAndriy Voskoboinyk struct r12a_c2h_ra_report { 109*7453645fSAndriy Voskoboinyk uint8_t rarptb0; 110*7453645fSAndriy Voskoboinyk #define R12A_RARPTB0_RATE_M 0x3f 111*7453645fSAndriy Voskoboinyk #define R12A_RARPTB0_RATE_S 0 112*7453645fSAndriy Voskoboinyk 113*7453645fSAndriy Voskoboinyk uint8_t macid; 114*7453645fSAndriy Voskoboinyk uint8_t rarptb2; 115*7453645fSAndriy Voskoboinyk #define R12A_RARPTB0_LDPC 0x01 116*7453645fSAndriy Voskoboinyk #define R12A_RARPTB0_TXBF 0x02 117*7453645fSAndriy Voskoboinyk #define R12A_RARPTB0_NOISE 0x04 118*7453645fSAndriy Voskoboinyk } __packed; 119*7453645fSAndriy Voskoboinyk 120*7453645fSAndriy Voskoboinyk #endif /* R12A_FW_CMD_H */ 121