1*4fac4e76Skrw /* $OpenBSD: if_rsureg.h,v 1.4 2020/11/30 16:09:33 krw Exp $ */ 25fdd4e61Sdamien 35fdd4e61Sdamien /*- 45fdd4e61Sdamien * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr> 55fdd4e61Sdamien * 65fdd4e61Sdamien * Permission to use, copy, modify, and distribute this software for any 75fdd4e61Sdamien * purpose with or without fee is hereby granted, provided that the above 85fdd4e61Sdamien * copyright notice and this permission notice appear in all copies. 95fdd4e61Sdamien * 105fdd4e61Sdamien * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 115fdd4e61Sdamien * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 125fdd4e61Sdamien * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 135fdd4e61Sdamien * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 145fdd4e61Sdamien * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 155fdd4e61Sdamien * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 165fdd4e61Sdamien * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 175fdd4e61Sdamien */ 185fdd4e61Sdamien 195fdd4e61Sdamien /* Maximum number of pipes is 11. */ 205fdd4e61Sdamien #define R92S_MAX_EP 11 215fdd4e61Sdamien 225fdd4e61Sdamien /* USB Requests. */ 235fdd4e61Sdamien #define R92S_REQ_REGS 0x05 245fdd4e61Sdamien 255fdd4e61Sdamien /* 265fdd4e61Sdamien * MAC registers. 275fdd4e61Sdamien */ 285fdd4e61Sdamien #define R92S_SYSCFG 0x0000 295fdd4e61Sdamien #define R92S_SYS_ISO_CTRL (R92S_SYSCFG + 0x000) 305fdd4e61Sdamien #define R92S_SYS_FUNC_EN (R92S_SYSCFG + 0x002) 315fdd4e61Sdamien #define R92S_PMC_FSM (R92S_SYSCFG + 0x004) 325fdd4e61Sdamien #define R92S_SYS_CLKR (R92S_SYSCFG + 0x008) 335fdd4e61Sdamien #define R92S_EE_9346CR (R92S_SYSCFG + 0x00a) 345fdd4e61Sdamien #define R92S_AFE_MISC (R92S_SYSCFG + 0x010) 355fdd4e61Sdamien #define R92S_SPS0_CTRL (R92S_SYSCFG + 0x011) 365fdd4e61Sdamien #define R92S_SPS1_CTRL (R92S_SYSCFG + 0x018) 375fdd4e61Sdamien #define R92S_RF_CTRL (R92S_SYSCFG + 0x01f) 385fdd4e61Sdamien #define R92S_LDOA15_CTRL (R92S_SYSCFG + 0x020) 395fdd4e61Sdamien #define R92S_LDOV12D_CTRL (R92S_SYSCFG + 0x021) 405fdd4e61Sdamien #define R92S_AFE_XTAL_CTRL (R92S_SYSCFG + 0x026) 415fdd4e61Sdamien #define R92S_AFE_PLL_CTRL (R92S_SYSCFG + 0x028) 425fdd4e61Sdamien #define R92S_EFUSE_CTRL (R92S_SYSCFG + 0x030) 435fdd4e61Sdamien #define R92S_EFUSE_TEST (R92S_SYSCFG + 0x034) 445fdd4e61Sdamien #define R92S_EFUSE_CLK_CTRL (R92S_SYSCFG + 0x2f8) 455fdd4e61Sdamien 465fdd4e61Sdamien #define R92S_CMDCTRL 0x0040 475fdd4e61Sdamien #define R92S_CR (R92S_CMDCTRL + 0x000) 485fdd4e61Sdamien #define R92S_TCR (R92S_CMDCTRL + 0x004) 495fdd4e61Sdamien #define R92S_RCR (R92S_CMDCTRL + 0x008) 505fdd4e61Sdamien 515fdd4e61Sdamien #define R92S_MACIDSETTING 0x0050 525fdd4e61Sdamien #define R92S_MACID (R92S_MACIDSETTING + 0x000) 535fdd4e61Sdamien 545fdd4e61Sdamien #define R92S_GP 0x01e0 555fdd4e61Sdamien #define R92S_GPIO_CTRL (R92S_GP + 0x00c) 565fdd4e61Sdamien #define R92S_GPIO_IO_SEL (R92S_GP + 0x00e) 575fdd4e61Sdamien #define R92S_MAC_PINMUX_CTRL (R92S_GP + 0x011) 585fdd4e61Sdamien 595fdd4e61Sdamien #define R92S_IOCMD_CTRL 0x0370 605fdd4e61Sdamien #define R92S_IOCMD_DATA 0x0374 615fdd4e61Sdamien 625fdd4e61Sdamien #define R92S_USB_HRPWM 0xfe58 635fdd4e61Sdamien 645fdd4e61Sdamien /* Bits for R92S_SYS_FUNC_EN. */ 655fdd4e61Sdamien #define R92S_FEN_CPUEN 0x0400 665fdd4e61Sdamien 675fdd4e61Sdamien /* Bits for R92S_PMC_FSM. */ 685fdd4e61Sdamien #define R92S_PMC_FSM_CUT_M 0x000f8000 695fdd4e61Sdamien #define R92S_PMC_FSM_CUT_S 15 705fdd4e61Sdamien 715fdd4e61Sdamien /* Bits for R92S_SYS_CLKR. */ 725fdd4e61Sdamien #define R92S_SYS_CLKSEL 0x0001 735fdd4e61Sdamien #define R92S_SYS_PS_CLKSEL 0x0002 745fdd4e61Sdamien #define R92S_SYS_CPU_CLKSEL 0x0004 755fdd4e61Sdamien #define R92S_MAC_CLK_EN 0x0800 765fdd4e61Sdamien #define R92S_SYS_CLK_EN 0x1000 775fdd4e61Sdamien #define R92S_SWHW_SEL 0x4000 785fdd4e61Sdamien #define R92S_FWHW_SEL 0x8000 795fdd4e61Sdamien 805fdd4e61Sdamien /* Bits for R92S_EE_9346CR. */ 815fdd4e61Sdamien #define R92S_9356SEL 0x10 825fdd4e61Sdamien #define R92S_EEPROM_EN 0x20 835fdd4e61Sdamien 845fdd4e61Sdamien /* Bits for R92S_AFE_MISC. */ 855fdd4e61Sdamien #define R92S_AFE_MISC_BGEN 0x01 865fdd4e61Sdamien #define R92S_AFE_MISC_MBEN 0x02 875fdd4e61Sdamien #define R92S_AFE_MISC_I32_EN 0x08 885fdd4e61Sdamien 895fdd4e61Sdamien /* Bits for R92S_SPS1_CTRL. */ 905fdd4e61Sdamien #define R92S_SPS1_LDEN 0x01 915fdd4e61Sdamien #define R92S_SPS1_SWEN 0x02 925fdd4e61Sdamien 935fdd4e61Sdamien /* Bits for R92S_LDOA15_CTRL. */ 945fdd4e61Sdamien #define R92S_LDA15_EN 0x01 955fdd4e61Sdamien 965fdd4e61Sdamien /* Bits for R92S_LDOV12D_CTRL. */ 975fdd4e61Sdamien #define R92S_LDV12_EN 0x01 985fdd4e61Sdamien 995fdd4e61Sdamien /* Bits for R92C_EFUSE_CTRL. */ 1005fdd4e61Sdamien #define R92S_EFUSE_CTRL_DATA_M 0x000000ff 1015fdd4e61Sdamien #define R92S_EFUSE_CTRL_DATA_S 0 1025fdd4e61Sdamien #define R92S_EFUSE_CTRL_ADDR_M 0x0003ff00 1035fdd4e61Sdamien #define R92S_EFUSE_CTRL_ADDR_S 8 1045fdd4e61Sdamien #define R92S_EFUSE_CTRL_VALID 0x80000000 1055fdd4e61Sdamien 1065fdd4e61Sdamien /* Bits for R92S_CR. */ 1075fdd4e61Sdamien #define R92S_CR_TXDMA_EN 0x10 1085fdd4e61Sdamien 1095fdd4e61Sdamien /* Bits for R92S_TCR. */ 1105fdd4e61Sdamien #define R92S_TCR_IMEM_CODE_DONE 0x01 1115fdd4e61Sdamien #define R92S_TCR_IMEM_CHK_RPT 0x02 1125fdd4e61Sdamien #define R92S_TCR_EMEM_CODE_DONE 0x04 1135fdd4e61Sdamien #define R92S_TCR_EMEM_CHK_RPT 0x08 1145fdd4e61Sdamien #define R92S_TCR_DMEM_CODE_DONE 0x10 1155fdd4e61Sdamien #define R92S_TCR_IMEM_RDY 0x20 1165fdd4e61Sdamien #define R92S_TCR_FWRDY 0x80 1175fdd4e61Sdamien 1185fdd4e61Sdamien /* Bits for R92S_GPIO_IO_SEL. */ 1195fdd4e61Sdamien #define R92S_GPIO_WPS 0x10 1205fdd4e61Sdamien 1215fdd4e61Sdamien /* Bits for R92S_MAC_PINMUX_CTRL. */ 1225fdd4e61Sdamien #define R92S_GPIOSEL_GPIO_M 0x03 1235fdd4e61Sdamien #define R92S_GPIOSEL_GPIO_S 0 1245fdd4e61Sdamien #define R92S_GPIOSEL_GPIO_JTAG 0 1255fdd4e61Sdamien #define R92S_GPIOSEL_GPIO_PHYDBG 1 1265fdd4e61Sdamien #define R92S_GPIOSEL_GPIO_BT 2 1275fdd4e61Sdamien #define R92S_GPIOSEL_GPIO_WLANDBG 3 1285fdd4e61Sdamien #define R92S_GPIOMUX_EN 0x08 1295fdd4e61Sdamien 1305fdd4e61Sdamien /* Bits for R92S_IOCMD_CTRL. */ 1315fdd4e61Sdamien #define R92S_IOCMD_CLASS_M 0xff000000 1325fdd4e61Sdamien #define R92S_IOCMD_CLASS_S 24 1335fdd4e61Sdamien #define R92S_IOCMD_CLASS_BB_RF 0xf0 1345fdd4e61Sdamien #define R92S_IOCMD_VALUE_M 0x00ffff00 1355fdd4e61Sdamien #define R92S_IOCMD_VALUE_S 8 1365fdd4e61Sdamien #define R92S_IOCMD_INDEX_M 0x000000ff 1375fdd4e61Sdamien #define R92S_IOCMD_INDEX_S 0 1385fdd4e61Sdamien #define R92S_IOCMD_INDEX_BB_READ 0 1395fdd4e61Sdamien #define R92S_IOCMD_INDEX_BB_WRITE 1 1405fdd4e61Sdamien #define R92S_IOCMD_INDEX_RF_READ 2 1415fdd4e61Sdamien #define R92S_IOCMD_INDEX_RF_WRITE 3 1425fdd4e61Sdamien 1435fdd4e61Sdamien /* Bits for R92S_USB_HRPWM. */ 1445fdd4e61Sdamien #define R92S_USB_HRPWM_PS_ALL_ON 0x04 1455fdd4e61Sdamien #define R92S_USB_HRPWM_PS_ST_ACTIVE 0x08 1465fdd4e61Sdamien 1475fdd4e61Sdamien /* 1485fdd4e61Sdamien * Macros to access subfields in registers. 1495fdd4e61Sdamien */ 1505fdd4e61Sdamien /* Mask and Shift (getter). */ 1515fdd4e61Sdamien #define MS(val, field) \ 1525fdd4e61Sdamien (((val) & field##_M) >> field##_S) 1535fdd4e61Sdamien 1545fdd4e61Sdamien /* Shift and Mask (setter). */ 1555fdd4e61Sdamien #define SM(field, val) \ 1565fdd4e61Sdamien (((val) << field##_S) & field##_M) 1575fdd4e61Sdamien 1585fdd4e61Sdamien /* Rewrite. */ 1595fdd4e61Sdamien #define RW(var, field, val) \ 1605fdd4e61Sdamien (((var) & ~field##_M) | SM(field, val)) 1615fdd4e61Sdamien 1625fdd4e61Sdamien /* 1635fdd4e61Sdamien * Firmware image header. 1645fdd4e61Sdamien */ 1655fdd4e61Sdamien struct r92s_fw_priv { 1665fdd4e61Sdamien /* QWORD0 */ 1675fdd4e61Sdamien uint16_t signature; 1685fdd4e61Sdamien uint8_t hci_sel; 1695fdd4e61Sdamien #define R92S_HCI_SEL_PCIE 0x01 1705fdd4e61Sdamien #define R92S_HCI_SEL_USB 0x02 1715fdd4e61Sdamien #define R92S_HCI_SEL_SDIO 0x04 1725fdd4e61Sdamien #define R92S_HCI_SEL_8172 0x10 1735fdd4e61Sdamien #define R92S_HCI_SEL_AP 0x80 1745fdd4e61Sdamien 1755fdd4e61Sdamien uint8_t chip_version; 1765fdd4e61Sdamien uint16_t custid; 1775fdd4e61Sdamien uint8_t rf_config; 1785fdd4e61Sdamien uint8_t nendpoints; 1795fdd4e61Sdamien /* QWORD1 */ 1805fdd4e61Sdamien uint32_t regulatory; 1815fdd4e61Sdamien uint8_t rfintfs; 1825fdd4e61Sdamien uint8_t def_nettype; 1835fdd4e61Sdamien uint8_t turbo_mode; 1845fdd4e61Sdamien uint8_t lowpower_mode; 1855fdd4e61Sdamien /* QWORD2 */ 1865fdd4e61Sdamien uint8_t lbk_mode; 1875fdd4e61Sdamien uint8_t mp_mode; 1885fdd4e61Sdamien uint8_t vcs_type; 1895fdd4e61Sdamien #define R92S_VCS_TYPE_DISABLE 0 1905fdd4e61Sdamien #define R92S_VCS_TYPE_ENABLE 1 1915fdd4e61Sdamien #define R92S_VCS_TYPE_AUTO 2 1925fdd4e61Sdamien 1935fdd4e61Sdamien uint8_t vcs_mode; 1945fdd4e61Sdamien #define R92S_VCS_MODE_NONE 0 1955fdd4e61Sdamien #define R92S_VCS_MODE_RTS_CTS 1 1965fdd4e61Sdamien #define R92S_VCS_MODE_CTS2SELF 2 1975fdd4e61Sdamien 1985fdd4e61Sdamien uint32_t reserved1; 1995fdd4e61Sdamien /* QWORD3 */ 2005fdd4e61Sdamien uint8_t qos_en; 2015fdd4e61Sdamien uint8_t bw40_en; 2025fdd4e61Sdamien uint8_t amsdu2ampdu_en; 2035fdd4e61Sdamien uint8_t ampdu_en; 2045fdd4e61Sdamien uint8_t rc_offload; 2055fdd4e61Sdamien uint8_t agg_offload; 2065fdd4e61Sdamien uint16_t reserved2; 2075fdd4e61Sdamien /* QWORD4 */ 2085fdd4e61Sdamien uint8_t beacon_offload; 2095fdd4e61Sdamien uint8_t mlme_offload; 2105fdd4e61Sdamien uint8_t hwpc_offload; 2115fdd4e61Sdamien uint8_t tcpcsum_offload; 2125fdd4e61Sdamien uint8_t tcp_offload; 2135fdd4e61Sdamien uint8_t ps_offload; 2145fdd4e61Sdamien uint8_t wwlan_offload; 2155fdd4e61Sdamien uint8_t reserved3; 2165fdd4e61Sdamien /* QWORD5 */ 2175fdd4e61Sdamien uint16_t tcp_tx_len; 2185fdd4e61Sdamien uint16_t tcp_rx_len; 2195fdd4e61Sdamien uint32_t reserved4; 2205fdd4e61Sdamien } __packed; 2215fdd4e61Sdamien 2225fdd4e61Sdamien struct r92s_fw_hdr { 2235fdd4e61Sdamien uint16_t signature; 2245fdd4e61Sdamien uint16_t version; 2255fdd4e61Sdamien uint32_t dmemsz; 2265fdd4e61Sdamien uint32_t imemsz; 2275fdd4e61Sdamien uint32_t sramsz; 2285fdd4e61Sdamien uint32_t privsz; 2295fdd4e61Sdamien uint16_t efuse_addr; 2305fdd4e61Sdamien uint16_t h2c_resp_addr; 2315fdd4e61Sdamien uint32_t svnrev; 2325fdd4e61Sdamien uint8_t month; 2335fdd4e61Sdamien uint8_t day; 2345fdd4e61Sdamien uint8_t hour; 2355fdd4e61Sdamien uint8_t minute; 2365fdd4e61Sdamien struct r92s_fw_priv priv; 2375fdd4e61Sdamien } __packed; 2385fdd4e61Sdamien 2395fdd4e61Sdamien /* Structure for FW commands and FW events notifications. */ 2405fdd4e61Sdamien struct r92s_fw_cmd_hdr { 2415fdd4e61Sdamien uint16_t len; 2425fdd4e61Sdamien uint8_t code; 2435fdd4e61Sdamien uint8_t seq; 2445fdd4e61Sdamien #define R92S_FW_CMD_MORE 0x80 2455fdd4e61Sdamien 2465fdd4e61Sdamien uint32_t reserved; 2475fdd4e61Sdamien } __packed; 2485fdd4e61Sdamien 2495fdd4e61Sdamien /* FW commands codes. */ 2505fdd4e61Sdamien #define R92S_CMD_READ_MACREG 0 2515fdd4e61Sdamien #define R92S_CMD_WRITE_MACREG 1 2525fdd4e61Sdamien #define R92S_CMD_READ_BBREG 2 2535fdd4e61Sdamien #define R92S_CMD_WRITE_BBREG 3 2545fdd4e61Sdamien #define R92S_CMD_READ_RFREG 4 2555fdd4e61Sdamien #define R92S_CMD_WRITE_RFREG 5 2565fdd4e61Sdamien #define R92S_CMD_READ_EEPROM 6 2575fdd4e61Sdamien #define R92S_CMD_WRITE_EEPROM 7 2585fdd4e61Sdamien #define R92S_CMD_READ_EFUSE 8 2595fdd4e61Sdamien #define R92S_CMD_WRITE_EFUSE 9 2605fdd4e61Sdamien #define R92S_CMD_READ_CAM 10 2615fdd4e61Sdamien #define R92S_CMD_WRITE_CAM 11 2625fdd4e61Sdamien #define R92S_CMD_SET_BCNITV 12 2635fdd4e61Sdamien #define R92S_CMD_SET_MBIDCFG 13 2645fdd4e61Sdamien #define R92S_CMD_JOIN_BSS 14 2655fdd4e61Sdamien #define R92S_CMD_DISCONNECT 15 2665fdd4e61Sdamien #define R92S_CMD_CREATE_BSS 16 2675fdd4e61Sdamien #define R92S_CMD_SET_OPMODE 17 2685fdd4e61Sdamien #define R92S_CMD_SITE_SURVEY 18 2695fdd4e61Sdamien #define R92S_CMD_SET_AUTH 19 2705fdd4e61Sdamien #define R92S_CMD_SET_KEY 20 2715fdd4e61Sdamien #define R92S_CMD_SET_STA_KEY 21 2725fdd4e61Sdamien #define R92S_CMD_SET_ASSOC_STA 22 2735fdd4e61Sdamien #define R92S_CMD_DEL_ASSOC_STA 23 2745fdd4e61Sdamien #define R92S_CMD_SET_STAPWRSTATE 24 2755fdd4e61Sdamien #define R92S_CMD_SET_BASIC_RATE 25 2765fdd4e61Sdamien #define R92S_CMD_GET_BASIC_RATE 26 2775fdd4e61Sdamien #define R92S_CMD_SET_DATA_RATE 27 2785fdd4e61Sdamien #define R92S_CMD_GET_DATA_RATE 28 2795fdd4e61Sdamien #define R92S_CMD_SET_PHY_INFO 29 2805fdd4e61Sdamien #define R92S_CMD_GET_PHY_INFO 30 2815fdd4e61Sdamien #define R92S_CMD_SET_PHY 31 2825fdd4e61Sdamien #define R92S_CMD_GET_PHY 32 2835fdd4e61Sdamien #define R92S_CMD_READ_RSSI 33 2845fdd4e61Sdamien #define R92S_CMD_READ_GAIN 34 2855fdd4e61Sdamien #define R92S_CMD_SET_ATIM 35 2865fdd4e61Sdamien #define R92S_CMD_SET_PWR_MODE 36 2875fdd4e61Sdamien #define R92S_CMD_JOIN_BSS_RPT 37 2885fdd4e61Sdamien #define R92S_CMD_SET_RA_TABLE 38 2895fdd4e61Sdamien #define R92S_CMD_GET_RA_TABLE 39 2905fdd4e61Sdamien #define R92S_CMD_GET_CCX_REPORT 40 2915fdd4e61Sdamien #define R92S_CMD_GET_DTM_REPORT 41 2925fdd4e61Sdamien #define R92S_CMD_GET_TXRATE_STATS 42 2935fdd4e61Sdamien #define R92S_CMD_SET_USB_SUSPEND 43 2945fdd4e61Sdamien #define R92S_CMD_SET_H2C_LBK 44 2955fdd4e61Sdamien #define R92S_CMD_ADDBA_REQ 45 2965fdd4e61Sdamien #define R92S_CMD_SET_CHANNEL 46 2975fdd4e61Sdamien #define R92S_CMD_SET_TXPOWER 47 2985fdd4e61Sdamien #define R92S_CMD_SWITCH_ANTENNA 48 2995fdd4e61Sdamien #define R92S_CMD_SET_CRYSTAL_CAL 49 3005fdd4e61Sdamien #define R92S_CMD_SET_SINGLE_CARRIER_TX 50 3015fdd4e61Sdamien #define R92S_CMD_SET_SINGLE_TONE_TX 51 3025fdd4e61Sdamien #define R92S_CMD_SET_CARRIER_SUPPR_TX 52 3035fdd4e61Sdamien #define R92S_CMD_SET_CONTINUOUS_TX 53 3045fdd4e61Sdamien #define R92S_CMD_SWITCH_BANDWIDTH 54 3055fdd4e61Sdamien #define R92S_CMD_TX_BEACON 55 3065fdd4e61Sdamien #define R92S_CMD_SET_POWER_TRACKING 56 3075fdd4e61Sdamien #define R92S_CMD_AMSDU_TO_AMPDU 57 3085fdd4e61Sdamien #define R92S_CMD_SET_MAC_ADDRESS 58 3095fdd4e61Sdamien #define R92S_CMD_GET_H2C_LBK 59 3105fdd4e61Sdamien #define R92S_CMD_SET_PBREQ_IE 60 3115fdd4e61Sdamien #define R92S_CMD_SET_ASSOCREQ_IE 61 3125fdd4e61Sdamien #define R92S_CMD_SET_PBRESP_IE 62 3135fdd4e61Sdamien #define R92S_CMD_SET_ASSOCRESP_IE 63 3145fdd4e61Sdamien #define R92S_CMD_GET_CURDATARATE 64 3155fdd4e61Sdamien #define R92S_CMD_GET_TXRETRY_CNT 65 3165fdd4e61Sdamien #define R92S_CMD_GET_RXRETRY_CNT 66 3175fdd4e61Sdamien #define R92S_CMD_GET_BCNOK_CNT 67 3185fdd4e61Sdamien #define R92S_CMD_GET_BCNERR_CNT 68 3195fdd4e61Sdamien #define R92S_CMD_GET_CURTXPWR_LEVEL 69 3205fdd4e61Sdamien #define R92S_CMD_SET_DIG 70 3215fdd4e61Sdamien #define R92S_CMD_SET_RA 71 3225fdd4e61Sdamien #define R92S_CMD_SET_PT 72 3235fdd4e61Sdamien #define R92S_CMD_READ_TSSI 73 3245fdd4e61Sdamien 3255fdd4e61Sdamien /* FW events notifications codes. */ 326fcc42384Sdamien #define R92S_EVT_READ_MACREG 0 327fcc42384Sdamien #define R92S_EVT_READ_BBREG 1 328fcc42384Sdamien #define R92S_EVT_READ_RFREG 2 329fcc42384Sdamien #define R92S_EVT_READ_EEPROM 3 330fcc42384Sdamien #define R92S_EVT_READ_EFUSE 4 331fcc42384Sdamien #define R92S_EVT_READ_CAM 5 332fcc42384Sdamien #define R92S_EVT_GET_BASICRATE 6 333fcc42384Sdamien #define R92S_EVT_GET_DATARATE 7 334fcc42384Sdamien #define R92S_EVT_SURVEY 8 335fcc42384Sdamien #define R92S_EVT_SURVEY_DONE 9 336fcc42384Sdamien #define R92S_EVT_JOIN_BSS 10 337fcc42384Sdamien #define R92S_EVT_ADD_STA 11 338fcc42384Sdamien #define R92S_EVT_DEL_STA 12 339fcc42384Sdamien #define R92S_EVT_ATIM_DONE 13 340fcc42384Sdamien #define R92S_EVT_TX_REPORT 14 341fcc42384Sdamien #define R92S_EVT_CCX_REPORT 15 342fcc42384Sdamien #define R92S_EVT_DTM_REPORT 16 343fcc42384Sdamien #define R92S_EVT_TXRATE_STATS 17 344fcc42384Sdamien #define R92S_EVT_C2H_LBK 18 345fcc42384Sdamien #define R92S_EVT_FWDBG 19 346fcc42384Sdamien #define R92S_EVT_C2H_FEEDBACK 20 347fcc42384Sdamien #define R92S_EVT_ADDBA 21 348fcc42384Sdamien #define R92S_EVT_C2H_BCN 22 349fcc42384Sdamien #define R92S_EVT_PWR_STATE 23 350fcc42384Sdamien #define R92S_EVT_WPS_PBC 24 351fcc42384Sdamien #define R92S_EVT_ADDBA_REQ_REPORT 25 3525fdd4e61Sdamien 3535fdd4e61Sdamien /* Structure for R92S_CMD_SITE_SURVEY. */ 3545fdd4e61Sdamien struct r92s_fw_cmd_sitesurvey { 3555fdd4e61Sdamien uint32_t active; 3565fdd4e61Sdamien uint32_t limit; 3575fdd4e61Sdamien uint32_t ssidlen; 3585fdd4e61Sdamien uint8_t ssid[32 + 1]; 3595fdd4e61Sdamien } __packed; 3605fdd4e61Sdamien 3615fdd4e61Sdamien /* Structure for R92S_CMD_SET_AUTH. */ 3625fdd4e61Sdamien struct r92s_fw_cmd_auth { 3635fdd4e61Sdamien uint8_t mode; 3645fdd4e61Sdamien #define R92S_AUTHMODE_OPEN 0 3655fdd4e61Sdamien #define R92S_AUTHMODE_SHARED 1 3665fdd4e61Sdamien #define R92S_AUTHMODE_WPA 2 3675fdd4e61Sdamien 3685fdd4e61Sdamien uint8_t dot1x; 3695fdd4e61Sdamien } __packed; 3705fdd4e61Sdamien 3715fdd4e61Sdamien /* Structure for R92S_CMD_SET_KEY. */ 3725fdd4e61Sdamien struct r92s_fw_cmd_set_key { 3735fdd4e61Sdamien uint8_t algo; 3745fdd4e61Sdamien #define R92S_KEY_ALGO_NONE 0 3755fdd4e61Sdamien #define R92S_KEY_ALGO_WEP40 1 3765fdd4e61Sdamien #define R92S_KEY_ALGO_TKIP 2 3775fdd4e61Sdamien #define R92S_KEY_ALGO_TKIP_MMIC 3 3785fdd4e61Sdamien #define R92S_KEY_ALGO_AES 4 3795fdd4e61Sdamien #define R92S_KEY_ALGO_WEP104 5 3805fdd4e61Sdamien 3815fdd4e61Sdamien uint8_t id; 3825fdd4e61Sdamien uint8_t grpkey; 3835fdd4e61Sdamien uint8_t key[16]; 3845fdd4e61Sdamien } __packed; 3855fdd4e61Sdamien 3865fdd4e61Sdamien /* Structures for R92S_EVENT_SURVEY/R92S_CMD_JOIN_BSS. */ 3875fdd4e61Sdamien /* NDIS_802_11_SSID. */ 3885fdd4e61Sdamien struct ndis_802_11_ssid { 3895fdd4e61Sdamien uint32_t ssidlen; 3905fdd4e61Sdamien uint8_t ssid[32]; 3915fdd4e61Sdamien } __packed; 3925fdd4e61Sdamien 3935fdd4e61Sdamien /* NDIS_802_11_CONFIGURATION_FH. */ 3945fdd4e61Sdamien struct ndis_802_11_configuration_fh { 3955fdd4e61Sdamien uint32_t len; 3965fdd4e61Sdamien uint32_t hoppattern; 3975fdd4e61Sdamien uint32_t hopset; 3985fdd4e61Sdamien uint32_t dwelltime; 3995fdd4e61Sdamien } __packed; 4005fdd4e61Sdamien 4015fdd4e61Sdamien /* NDIS_802_11_CONFIGURATION. */ 4025fdd4e61Sdamien struct ndis_802_11_configuration { 4035fdd4e61Sdamien uint32_t len; 4045fdd4e61Sdamien uint32_t bintval; 4055fdd4e61Sdamien uint32_t atim; 4065fdd4e61Sdamien uint32_t dsconfig; 4075fdd4e61Sdamien struct ndis_802_11_configuration_fh fhconfig; 4085fdd4e61Sdamien } __packed; 4095fdd4e61Sdamien 4105fdd4e61Sdamien /* NDIS_WLAN_BSSID_EX. */ 4115fdd4e61Sdamien struct ndis_wlan_bssid_ex { 4125fdd4e61Sdamien uint32_t len; 4135fdd4e61Sdamien uint8_t macaddr[IEEE80211_ADDR_LEN]; 4145fdd4e61Sdamien uint8_t reserved[2]; 4155fdd4e61Sdamien struct ndis_802_11_ssid ssid; 4165fdd4e61Sdamien uint32_t privacy; 4175fdd4e61Sdamien int32_t rssi; 4185fdd4e61Sdamien uint32_t networktype; 4195fdd4e61Sdamien #define NDIS802_11FH 0 4205fdd4e61Sdamien #define NDIS802_11DS 1 4215fdd4e61Sdamien #define NDIS802_11OFDM5 2 4225fdd4e61Sdamien #define NDIS802_11OFDM24 3 4235fdd4e61Sdamien #define NDIS802_11AUTOMODE 4 4245fdd4e61Sdamien 4255fdd4e61Sdamien struct ndis_802_11_configuration config; 4265fdd4e61Sdamien uint32_t inframode; 4275fdd4e61Sdamien #define NDIS802_11IBSS 0 4285fdd4e61Sdamien #define NDIS802_11INFRASTRUCTURE 1 4295fdd4e61Sdamien #define NDIS802_11AUTOUNKNOWN 2 4305fdd4e61Sdamien #define NDIS802_11MONITOR 3 4315fdd4e61Sdamien #define NDIS802_11APMODE 4 4325fdd4e61Sdamien 4335fdd4e61Sdamien uint8_t supprates[16]; 4345fdd4e61Sdamien uint32_t ieslen; 4355fdd4e61Sdamien /* Followed by ``ieslen'' bytes. */ 4365fdd4e61Sdamien } __packed; 4375fdd4e61Sdamien 4385fdd4e61Sdamien /* NDIS_802_11_FIXED_IEs. */ 4395fdd4e61Sdamien struct ndis_802_11_fixed_ies { 4405fdd4e61Sdamien uint8_t tstamp[8]; 4415fdd4e61Sdamien uint16_t bintval; 4425fdd4e61Sdamien uint16_t capabilities; 4435fdd4e61Sdamien } __packed; 4445fdd4e61Sdamien 4455fdd4e61Sdamien /* Structure for R92S_CMD_SET_PWR_MODE. */ 4465fdd4e61Sdamien struct r92s_set_pwr_mode { 4475fdd4e61Sdamien uint8_t mode; 4485fdd4e61Sdamien #define R92S_PS_MODE_ACTIVE 0 4495fdd4e61Sdamien #define R92S_PS_MODE_MIN 1 4505fdd4e61Sdamien #define R92S_PS_MODE_MAX 2 4515fdd4e61Sdamien #define R92S_PS_MODE_DTIM 3 4525fdd4e61Sdamien #define R92S_PS_MODE_VOIP 4 4535fdd4e61Sdamien #define R92S_PS_MODE_UAPSD_WMM 5 4545fdd4e61Sdamien #define R92S_PS_MODE_UAPSD 6 4555fdd4e61Sdamien #define R92S_PS_MODE_IBSS 7 4565fdd4e61Sdamien #define R92S_PS_MODE_WWLAN 8 4575fdd4e61Sdamien #define R92S_PS_MODE_RADIOOFF 9 4585fdd4e61Sdamien #define R92S_PS_MODE_DISABLE 10 4595fdd4e61Sdamien 4605fdd4e61Sdamien uint8_t low_traffic_en; 4615fdd4e61Sdamien uint8_t lpnav_en; 4625fdd4e61Sdamien uint8_t rf_low_snr_en; 4635fdd4e61Sdamien uint8_t dps_en; 4645fdd4e61Sdamien uint8_t bcn_rx_en; 4655fdd4e61Sdamien uint8_t bcn_pass_cnt; 4665fdd4e61Sdamien uint8_t bcn_to; 4675fdd4e61Sdamien uint16_t bcn_itv; 4685fdd4e61Sdamien uint8_t app_itv; 4695fdd4e61Sdamien uint8_t awake_bcn_itv; 4705fdd4e61Sdamien uint8_t smart_ps; 4715fdd4e61Sdamien uint8_t bcn_pass_time; 4725fdd4e61Sdamien } __packed; 4735fdd4e61Sdamien 4745fdd4e61Sdamien /* Structure for event R92S_EVENT_JOIN_BSS. */ 4755fdd4e61Sdamien struct r92s_event_join_bss { 4765fdd4e61Sdamien uint32_t next; 4775fdd4e61Sdamien uint32_t prev; 4785fdd4e61Sdamien uint32_t networktype; 4795fdd4e61Sdamien uint32_t fixed; 4805fdd4e61Sdamien uint32_t lastscanned; 4815fdd4e61Sdamien uint32_t associd; 4825fdd4e61Sdamien uint32_t join_res; 4835fdd4e61Sdamien struct ndis_wlan_bssid_ex bss; 4845fdd4e61Sdamien } __packed; 4855fdd4e61Sdamien 4865fdd4e61Sdamien #define R92S_MACID_BSS 5 4875fdd4e61Sdamien 4885fdd4e61Sdamien /* Rx MAC descriptor. */ 4895fdd4e61Sdamien struct r92s_rx_stat { 4905fdd4e61Sdamien uint32_t rxdw0; 4915fdd4e61Sdamien #define R92S_RXDW0_PKTLEN_M 0x00003fff 4925fdd4e61Sdamien #define R92S_RXDW0_PKTLEN_S 0 4935fdd4e61Sdamien #define R92S_RXDW0_CRCERR 0x00004000 4945fdd4e61Sdamien #define R92S_RXDW0_INFOSZ_M 0x000f0000 4955fdd4e61Sdamien #define R92S_RXDW0_INFOSZ_S 16 4965fdd4e61Sdamien #define R92S_RXDW0_QOS 0x00800000 4975fdd4e61Sdamien #define R92S_RXDW0_SHIFT_M 0x03000000 4985fdd4e61Sdamien #define R92S_RXDW0_SHIFT_S 24 4995fdd4e61Sdamien #define R92S_RXDW0_DECRYPTED 0x08000000 5005fdd4e61Sdamien 5015fdd4e61Sdamien uint32_t rxdw1; 5025fdd4e61Sdamien #define R92S_RXDW1_MOREFRAG 0x08000000 5035fdd4e61Sdamien 5045fdd4e61Sdamien uint32_t rxdw2; 5055fdd4e61Sdamien #define R92S_RXDW2_FRAG_M 0x0000f000 5065fdd4e61Sdamien #define R92S_RXDW2_FRAG_S 12 5075fdd4e61Sdamien #define R92S_RXDW2_PKTCNT_M 0x00ff0000 5085fdd4e61Sdamien #define R92S_RXDW2_PKTCNT_S 16 5095fdd4e61Sdamien 5105fdd4e61Sdamien uint32_t rxdw3; 5115fdd4e61Sdamien #define R92S_RXDW3_RATE_M 0x0000003f 5125fdd4e61Sdamien #define R92S_RXDW3_RATE_S 0 5135fdd4e61Sdamien #define R92S_RXDW3_TCPCHKRPT 0x00000800 5145fdd4e61Sdamien #define R92S_RXDW3_IPCHKRPT 0x00001000 5155fdd4e61Sdamien #define R92S_RXDW3_TCPCHKVALID 0x00002000 5165fdd4e61Sdamien #define R92S_RXDW3_HTC 0x00004000 5175fdd4e61Sdamien 5185fdd4e61Sdamien uint32_t rxdw4; 5195fdd4e61Sdamien uint32_t rxdw5; 5205fdd4e61Sdamien } __packed __attribute__((aligned(4))); 5215fdd4e61Sdamien 5225fdd4e61Sdamien /* Rx PHY descriptor. */ 5235fdd4e61Sdamien struct r92s_rx_phystat { 5245fdd4e61Sdamien uint32_t phydw0; 5255fdd4e61Sdamien uint32_t phydw1; 5265fdd4e61Sdamien uint32_t phydw2; 5275fdd4e61Sdamien uint32_t phydw3; 5285fdd4e61Sdamien uint32_t phydw4; 5295fdd4e61Sdamien uint32_t phydw5; 5305fdd4e61Sdamien uint32_t phydw6; 5315fdd4e61Sdamien uint32_t phydw7; 5325fdd4e61Sdamien } __packed __attribute__((aligned(4))); 5335fdd4e61Sdamien 5345fdd4e61Sdamien /* Rx PHY CCK descriptor. */ 5355fdd4e61Sdamien struct r92s_rx_cck { 5365fdd4e61Sdamien uint8_t adc_pwdb[4]; 5375fdd4e61Sdamien uint8_t sq_rpt; 5385fdd4e61Sdamien uint8_t agc_rpt; 5395fdd4e61Sdamien } __packed; 5405fdd4e61Sdamien 5415fdd4e61Sdamien /* Tx MAC descriptor. */ 5425fdd4e61Sdamien struct r92s_tx_desc { 5435fdd4e61Sdamien uint32_t txdw0; 5445fdd4e61Sdamien #define R92S_TXDW0_PKTLEN_M 0x0000ffff 5455fdd4e61Sdamien #define R92S_TXDW0_PKTLEN_S 0 5465fdd4e61Sdamien #define R92S_TXDW0_OFFSET_M 0x00ff0000 5475fdd4e61Sdamien #define R92S_TXDW0_OFFSET_S 16 5485fdd4e61Sdamien #define R92S_TXDW0_TYPE_M 0x03000000 5495fdd4e61Sdamien #define R92S_TXDW0_TYPE_S 24 5505fdd4e61Sdamien #define R92S_TXDW0_LSG 0x04000000 5515fdd4e61Sdamien #define R92S_TXDW0_FSG 0x08000000 5525fdd4e61Sdamien #define R92S_TXDW0_LINIP 0x10000000 5535fdd4e61Sdamien #define R92S_TXDW0_OWN 0x80000000 5545fdd4e61Sdamien 5555fdd4e61Sdamien uint32_t txdw1; 5565fdd4e61Sdamien #define R92S_TXDW1_MACID_M 0x0000001f 5575fdd4e61Sdamien #define R92S_TXDW1_MACID_S 0 5585fdd4e61Sdamien #define R92S_TXDW1_MOREDATA 0x00000020 5595fdd4e61Sdamien #define R92S_TXDW1_MOREFRAG 0x00000040 5605fdd4e61Sdamien #define R92S_TXDW1_QSEL_M 0x00001f00 5615fdd4e61Sdamien #define R92S_TXDW1_QSEL_S 8 5625fdd4e61Sdamien #define R92S_TXDW1_QSEL_BE 0x03 5635fdd4e61Sdamien #define R92S_TXDW1_QSEL_H2C 0x1f 5645fdd4e61Sdamien #define R92S_TXDW1_NONQOS 0x00010000 5655fdd4e61Sdamien #define R92S_TXDW1_KEYIDX_M 0x00060000 5665fdd4e61Sdamien #define R92S_TXDW1_KEYIDX_S 17 5675fdd4e61Sdamien #define R92S_TXDW1_CIPHER_M 0x00c00000 5685fdd4e61Sdamien #define R92S_TXDW1_CIPHER_S 22 5695fdd4e61Sdamien #define R92S_TXDW1_CIPHER_WEP 1 5705fdd4e61Sdamien #define R92S_TXDW1_CIPHER_TKIP 2 5715fdd4e61Sdamien #define R92S_TXDW1_CIPHER_AES 3 5725fdd4e61Sdamien #define R92S_TXDW1_HWPC 0x80000000 5735fdd4e61Sdamien 5745fdd4e61Sdamien uint32_t txdw2; 5755fdd4e61Sdamien #define R92S_TXDW2_BMCAST 0x00000080 5765fdd4e61Sdamien #define R92S_TXDW2_AGGEN 0x20000000 5775fdd4e61Sdamien #define R92S_TXDW2_BK 0x40000000 5785fdd4e61Sdamien 5795fdd4e61Sdamien uint32_t txdw3; 5805fdd4e61Sdamien #define R92S_TXDW3_SEQ_M 0x0fff0000 5815fdd4e61Sdamien #define R92S_TXDW3_SEQ_S 16 5825fdd4e61Sdamien #define R92S_TXDW3_FRAG_M 0xf0000000 5835fdd4e61Sdamien #define R92S_TXDW3_FRAG_S 28 5845fdd4e61Sdamien 5855fdd4e61Sdamien uint32_t txdw4; 5865fdd4e61Sdamien #define R92S_TXDW4_TXBW 0x00040000 5875fdd4e61Sdamien 5885fdd4e61Sdamien uint32_t txdw5; 5895fdd4e61Sdamien #define R92S_TXDW5_DISFB 0x00008000 5905fdd4e61Sdamien 5915fdd4e61Sdamien uint16_t ipchksum; 5925fdd4e61Sdamien uint16_t tcpchksum; 5935fdd4e61Sdamien 5945fdd4e61Sdamien uint16_t txbufsize; 5955fdd4e61Sdamien uint16_t reserved1; 5965fdd4e61Sdamien } __packed __attribute__((aligned(4))); 5975fdd4e61Sdamien 5985fdd4e61Sdamien 5995fdd4e61Sdamien /* 6005fdd4e61Sdamien * Driver definitions. 6015fdd4e61Sdamien */ 6025fdd4e61Sdamien #define RSU_RX_LIST_COUNT 1 6035fdd4e61Sdamien #define RSU_TX_LIST_COUNT (8 + 1) /* NB: +1 for FW commands. */ 6045fdd4e61Sdamien 6055fdd4e61Sdamien #define RSU_HOST_CMD_RING_COUNT 32 6065fdd4e61Sdamien 6075fdd4e61Sdamien #define RSU_RXBUFSZ (8 * 1024) 6085fdd4e61Sdamien #define RSU_TXBUFSZ \ 6095fdd4e61Sdamien ((sizeof(struct r92s_tx_desc) + IEEE80211_MAX_LEN + 3) & ~3) 6105fdd4e61Sdamien 6115fdd4e61Sdamien #define RSU_TX_TIMEOUT 5000 /* ms */ 6125fdd4e61Sdamien #define RSU_CMD_TIMEOUT 2000 /* ms */ 6135fdd4e61Sdamien 6145fdd4e61Sdamien /* Queue ids (used by soft only). */ 6155fdd4e61Sdamien #define RSU_QID_BCN 0 6165fdd4e61Sdamien #define RSU_QID_MGT 1 6175fdd4e61Sdamien #define RSU_QID_BMC 2 6185fdd4e61Sdamien #define RSU_QID_VO 3 6195fdd4e61Sdamien #define RSU_QID_VI 4 6205fdd4e61Sdamien #define RSU_QID_BE 5 6215fdd4e61Sdamien #define RSU_QID_BK 6 6225fdd4e61Sdamien #define RSU_QID_RXOFF 7 6235fdd4e61Sdamien #define RSU_QID_H2C 8 6245fdd4e61Sdamien #define RSU_QID_C2H 9 6255fdd4e61Sdamien 6265fdd4e61Sdamien /* Map AC to queue id. */ 6275fdd4e61Sdamien static const uint8_t rsu_ac2qid[EDCA_NUM_AC] = { 6285fdd4e61Sdamien RSU_QID_BE, 6295fdd4e61Sdamien RSU_QID_BK, 6305fdd4e61Sdamien RSU_QID_VI, 6315fdd4e61Sdamien RSU_QID_VO 6325fdd4e61Sdamien }; 6335fdd4e61Sdamien 6345fdd4e61Sdamien /* Pipe index to endpoint address mapping. */ 6355fdd4e61Sdamien static const uint8_t r92s_epaddr[] = 6365fdd4e61Sdamien { 0x83, 0x04, 0x06, 0x0d, 6375fdd4e61Sdamien 0x05, 0x07, 6385fdd4e61Sdamien 0x89, 0x0a, 0x0b, 0x0c }; 6395fdd4e61Sdamien 6405fdd4e61Sdamien /* Queue id to pipe index mapping for 4 endpoints configurations. */ 6415fdd4e61Sdamien static const uint8_t rsu_qid2idx_4ep[] = 6425fdd4e61Sdamien { 3, 3, 3, 1, 1, 2, 2, 0, 3, 0 }; 6435fdd4e61Sdamien 6445fdd4e61Sdamien /* Queue id to pipe index mapping for 6 endpoints configurations. */ 6455fdd4e61Sdamien static const uint8_t rsu_qid2idx_6ep[] = 6465fdd4e61Sdamien { 3, 3, 3, 1, 4, 2, 5, 0, 3, 0 }; 6475fdd4e61Sdamien 6485fdd4e61Sdamien /* Queue id to pipe index mapping for 11 endpoints configurations. */ 6495fdd4e61Sdamien static const uint8_t rsu_qid2idx_11ep[] = 6505fdd4e61Sdamien { 7, 9, 8, 1, 4, 2, 5, 0, 3, 6 }; 6515fdd4e61Sdamien 6525fdd4e61Sdamien struct rsu_rx_radiotap_header { 6535fdd4e61Sdamien struct ieee80211_radiotap_header wr_ihdr; 6545fdd4e61Sdamien uint8_t wr_flags; 6555fdd4e61Sdamien uint8_t wr_rate; 6565fdd4e61Sdamien uint16_t wr_chan_freq; 6575fdd4e61Sdamien uint16_t wr_chan_flags; 6585fdd4e61Sdamien uint8_t wr_dbm_antsignal; 6595fdd4e61Sdamien } __packed; 6605fdd4e61Sdamien 6615fdd4e61Sdamien #define RSU_RX_RADIOTAP_PRESENT \ 6625fdd4e61Sdamien (1 << IEEE80211_RADIOTAP_FLAGS | \ 6635fdd4e61Sdamien 1 << IEEE80211_RADIOTAP_RATE | \ 6645fdd4e61Sdamien 1 << IEEE80211_RADIOTAP_CHANNEL | \ 6655fdd4e61Sdamien 1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) 6665fdd4e61Sdamien 6675fdd4e61Sdamien struct rsu_tx_radiotap_header { 6685fdd4e61Sdamien struct ieee80211_radiotap_header wt_ihdr; 6695fdd4e61Sdamien uint8_t wt_flags; 6705fdd4e61Sdamien uint16_t wt_chan_freq; 6715fdd4e61Sdamien uint16_t wt_chan_flags; 6725fdd4e61Sdamien } __packed; 6735fdd4e61Sdamien 6745fdd4e61Sdamien #define RSU_TX_RADIOTAP_PRESENT \ 6755fdd4e61Sdamien (1 << IEEE80211_RADIOTAP_FLAGS | \ 6765fdd4e61Sdamien 1 << IEEE80211_RADIOTAP_CHANNEL) 6775fdd4e61Sdamien 6785fdd4e61Sdamien struct rsu_softc; 6795fdd4e61Sdamien 6805fdd4e61Sdamien struct rsu_rx_data { 6815fdd4e61Sdamien struct rsu_softc *sc; 682ab0b1be7Smglocker struct usbd_pipe *pipe; 683ab0b1be7Smglocker struct usbd_xfer *xfer; 6845fdd4e61Sdamien uint8_t *buf; 6855fdd4e61Sdamien }; 6865fdd4e61Sdamien 6875fdd4e61Sdamien struct rsu_tx_data { 6885fdd4e61Sdamien struct rsu_softc *sc; 689ab0b1be7Smglocker struct usbd_pipe *pipe; 690ab0b1be7Smglocker struct usbd_xfer *xfer; 6915fdd4e61Sdamien uint8_t *buf; 6925fdd4e61Sdamien TAILQ_ENTRY(rsu_tx_data) next; 6935fdd4e61Sdamien }; 6945fdd4e61Sdamien 6955fdd4e61Sdamien struct rsu_host_cmd { 6965fdd4e61Sdamien void (*cb)(struct rsu_softc *, void *); 6975fdd4e61Sdamien uint8_t data[256]; 6985fdd4e61Sdamien }; 6995fdd4e61Sdamien 7005fdd4e61Sdamien struct rsu_cmd_newstate { 7015fdd4e61Sdamien enum ieee80211_state state; 7025fdd4e61Sdamien int arg; 7035fdd4e61Sdamien }; 7045fdd4e61Sdamien 7055fdd4e61Sdamien struct rsu_cmd_key { 7065fdd4e61Sdamien struct ieee80211_key key; 707*4fac4e76Skrw struct ieee80211_node *ni; 7085fdd4e61Sdamien }; 7095fdd4e61Sdamien 7105fdd4e61Sdamien struct rsu_host_cmd_ring { 7115fdd4e61Sdamien struct rsu_host_cmd cmd[RSU_HOST_CMD_RING_COUNT]; 7125fdd4e61Sdamien int cur; 7135fdd4e61Sdamien int next; 7145fdd4e61Sdamien int queued; 7155fdd4e61Sdamien }; 7165fdd4e61Sdamien 7175fdd4e61Sdamien struct rsu_softc { 7185fdd4e61Sdamien struct device sc_dev; 7195fdd4e61Sdamien struct ieee80211com sc_ic; 7205fdd4e61Sdamien int (*sc_newstate)(struct ieee80211com *, 7215fdd4e61Sdamien enum ieee80211_state, int); 722ab0b1be7Smglocker struct usbd_device *sc_udev; 723ab0b1be7Smglocker struct usbd_interface *sc_iface; 7245fdd4e61Sdamien struct usb_task sc_task; 7255fdd4e61Sdamien struct timeout calib_to; 726ab0b1be7Smglocker struct usbd_pipe *pipe[R92S_MAX_EP]; 7275fdd4e61Sdamien int npipes; 7285fdd4e61Sdamien const uint8_t *qid2idx; 7295fdd4e61Sdamien 7305fdd4e61Sdamien u_int cut; 7315fdd4e61Sdamien int scan_pass; 7325fdd4e61Sdamien int sc_tx_timer; 7335fdd4e61Sdamien struct rsu_host_cmd_ring cmdq; 7345fdd4e61Sdamien struct rsu_rx_data rx_data[RSU_RX_LIST_COUNT]; 7355fdd4e61Sdamien struct rsu_tx_data tx_data[RSU_TX_LIST_COUNT]; 7365fdd4e61Sdamien struct rsu_tx_data *fwcmd_data; 7375fdd4e61Sdamien uint8_t cmd_seq; 7385fdd4e61Sdamien TAILQ_HEAD(, rsu_tx_data) tx_free_list; 7395fdd4e61Sdamien uint8_t rom[128]; 7405fdd4e61Sdamien 7415fdd4e61Sdamien #if NBPFILTER > 0 7425fdd4e61Sdamien caddr_t sc_drvbpf; 7435fdd4e61Sdamien 7445fdd4e61Sdamien union { 7455fdd4e61Sdamien struct rsu_rx_radiotap_header th; 7465fdd4e61Sdamien uint8_t pad[64]; 7475fdd4e61Sdamien } sc_rxtapu; 7485fdd4e61Sdamien #define sc_rxtap sc_rxtapu.th 7495fdd4e61Sdamien int sc_rxtap_len; 7505fdd4e61Sdamien 7515fdd4e61Sdamien union { 7525fdd4e61Sdamien struct rsu_tx_radiotap_header th; 7535fdd4e61Sdamien uint8_t pad[64]; 7545fdd4e61Sdamien } sc_txtapu; 7555fdd4e61Sdamien #define sc_txtap sc_txtapu.th 7565fdd4e61Sdamien int sc_txtap_len; 7575fdd4e61Sdamien #endif 758*4fac4e76Skrw int sc_key_tasks; 7595fdd4e61Sdamien }; 760