17453645fSAndriy Voskoboinyk /*- 27453645fSAndriy Voskoboinyk * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr> 37453645fSAndriy Voskoboinyk * Copyright (c) 2016 Andriy Voskoboinyk <avos@FreeBSD.org> 47453645fSAndriy Voskoboinyk * 57453645fSAndriy Voskoboinyk * Permission to use, copy, modify, and distribute this software for any 67453645fSAndriy Voskoboinyk * purpose with or without fee is hereby granted, provided that the above 77453645fSAndriy Voskoboinyk * copyright notice and this permission notice appear in all copies. 87453645fSAndriy Voskoboinyk * 97453645fSAndriy Voskoboinyk * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 107453645fSAndriy Voskoboinyk * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 117453645fSAndriy Voskoboinyk * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 127453645fSAndriy Voskoboinyk * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 137453645fSAndriy Voskoboinyk * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 147453645fSAndriy Voskoboinyk * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 157453645fSAndriy Voskoboinyk * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 167453645fSAndriy Voskoboinyk * 177453645fSAndriy Voskoboinyk * $OpenBSD: if_urtwnreg.h,v 1.3 2010/11/16 18:02:59 damien Exp $ 187453645fSAndriy Voskoboinyk */ 197453645fSAndriy Voskoboinyk 207453645fSAndriy Voskoboinyk #ifndef R92C_FW_CMD_H 217453645fSAndriy Voskoboinyk #define R92C_FW_CMD_H 227453645fSAndriy Voskoboinyk 237453645fSAndriy Voskoboinyk /* 247453645fSAndriy Voskoboinyk * Host to firmware commands. 257453645fSAndriy Voskoboinyk */ 267453645fSAndriy Voskoboinyk struct r92c_fw_cmd { 277453645fSAndriy Voskoboinyk uint8_t id; 287453645fSAndriy Voskoboinyk #define R92C_CMD_SET_PWRMODE 1 297453645fSAndriy Voskoboinyk #define R92C_CMD_JOINBSS_RPT 2 307453645fSAndriy Voskoboinyk #define R92C_CMD_RSVD_PAGE 3 317453645fSAndriy Voskoboinyk #define R92C_CMD_RSSI_SETTING 5 327453645fSAndriy Voskoboinyk #define R92C_CMD_MACID_CONFIG 6 337453645fSAndriy Voskoboinyk 347453645fSAndriy Voskoboinyk #define R92C_CMD_FLAG_EXT 0x80 357453645fSAndriy Voskoboinyk 367453645fSAndriy Voskoboinyk uint8_t msg[5]; 377453645fSAndriy Voskoboinyk } __packed __attribute__((aligned(4))); 387453645fSAndriy Voskoboinyk 397453645fSAndriy Voskoboinyk /* Structure for R92C_CMD_JOINBSS_RPT. */ 407453645fSAndriy Voskoboinyk struct r92c_fw_cmd_joinbss_rpt { 417453645fSAndriy Voskoboinyk uint8_t mstatus; 427453645fSAndriy Voskoboinyk #define R92C_MSTATUS_DISASSOC 0x00 437453645fSAndriy Voskoboinyk #define R92C_MSTATUS_ASSOC 0x01 447453645fSAndriy Voskoboinyk } __packed; 457453645fSAndriy Voskoboinyk 467453645fSAndriy Voskoboinyk /* Structure for R92C_CMD_SET_PWRMODE. */ 477453645fSAndriy Voskoboinyk struct r92c_fw_cmd_pwrmode { 487453645fSAndriy Voskoboinyk uint8_t mode; 497453645fSAndriy Voskoboinyk #define R92C_PWRMODE_CAM 0 507453645fSAndriy Voskoboinyk #define R92C_PWRMODE_MIN 1 517453645fSAndriy Voskoboinyk #define R92C_PWRMODE_MAX 2 527453645fSAndriy Voskoboinyk #define R92C_PWRMODE_DTIM 3 537453645fSAndriy Voskoboinyk #define R92C_PWRMODE_UAPSD_WMM 5 547453645fSAndriy Voskoboinyk #define R92C_PWRMODE_UAPSD 6 557453645fSAndriy Voskoboinyk #define R92C_PWRMODE_IBSS 7 567453645fSAndriy Voskoboinyk 577453645fSAndriy Voskoboinyk uint8_t smart_ps; 587453645fSAndriy Voskoboinyk /* XXX undocumented */ 597453645fSAndriy Voskoboinyk #define R92C_PWRMODE_SMARTPS_NULLDATA 2 607453645fSAndriy Voskoboinyk 617453645fSAndriy Voskoboinyk uint8_t bcn_pass; /* unit: beacon interval */ 627453645fSAndriy Voskoboinyk } __packed; 637453645fSAndriy Voskoboinyk 647453645fSAndriy Voskoboinyk /* Structure for R92C_CMD_RSVD_PAGE. */ 657453645fSAndriy Voskoboinyk struct r92c_fw_cmd_rsvdpage { 667453645fSAndriy Voskoboinyk uint8_t probe_resp; 677453645fSAndriy Voskoboinyk uint8_t ps_poll; 687453645fSAndriy Voskoboinyk uint8_t null_data; 697453645fSAndriy Voskoboinyk } __packed; 707453645fSAndriy Voskoboinyk 717453645fSAndriy Voskoboinyk /* Structure for R92C_CMD_RSSI_SETTING. */ 727453645fSAndriy Voskoboinyk struct r92c_fw_cmd_rssi { 737453645fSAndriy Voskoboinyk uint8_t macid; 747453645fSAndriy Voskoboinyk uint8_t reserved; 757453645fSAndriy Voskoboinyk uint8_t pwdb; 767453645fSAndriy Voskoboinyk } __packed; 777453645fSAndriy Voskoboinyk 787453645fSAndriy Voskoboinyk /* Structure for R92C_CMD_MACID_CONFIG. */ 797453645fSAndriy Voskoboinyk struct r92c_fw_cmd_macid_cfg { 807453645fSAndriy Voskoboinyk uint32_t mask; 817453645fSAndriy Voskoboinyk uint8_t macid; 827453645fSAndriy Voskoboinyk #define R92C_CMD_MACID_VALID 0x80 83*371a4ee9SAdrian Chadd #define R92C_CMD_MACID_SGI 0x20 847453645fSAndriy Voskoboinyk } __packed; 857453645fSAndriy Voskoboinyk 867453645fSAndriy Voskoboinyk /* 877453645fSAndriy Voskoboinyk * C2H event structure. 887453645fSAndriy Voskoboinyk */ 897453645fSAndriy Voskoboinyk /* Bigger value is used to prevent buffer overrun. */ 907453645fSAndriy Voskoboinyk #define R92C_C2H_MSG_MAX_LEN 16 917453645fSAndriy Voskoboinyk 927453645fSAndriy Voskoboinyk struct r92c_c2h_evt { 937453645fSAndriy Voskoboinyk uint8_t evtb0; 947453645fSAndriy Voskoboinyk #define R92C_C2H_EVTB0_ID_M 0x0f 957453645fSAndriy Voskoboinyk #define R92C_C2H_EVTB0_ID_S 0 967453645fSAndriy Voskoboinyk #define R92C_C2H_EVTB0_LEN_M 0xf0 977453645fSAndriy Voskoboinyk #define R92C_C2H_EVTB0_LEN_S 4 987453645fSAndriy Voskoboinyk 997453645fSAndriy Voskoboinyk uint8_t seq; 1007453645fSAndriy Voskoboinyk 1017453645fSAndriy Voskoboinyk /* Followed by payload (see below). */ 1027453645fSAndriy Voskoboinyk } __packed; 1037453645fSAndriy Voskoboinyk 1047453645fSAndriy Voskoboinyk /* 1057453645fSAndriy Voskoboinyk * C2H event types. 1067453645fSAndriy Voskoboinyk */ 1077453645fSAndriy Voskoboinyk #define R92C_C2H_EVT_DEBUG 0 1087453645fSAndriy Voskoboinyk #define R92C_C2H_EVT_TX_REPORT 3 1097453645fSAndriy Voskoboinyk #define R92C_C2H_EVT_EXT_RA_RPT 6 1107453645fSAndriy Voskoboinyk 1117453645fSAndriy Voskoboinyk /* Structure for R92C_C2H_EVT_TX_REPORT event. */ 1127453645fSAndriy Voskoboinyk struct r92c_c2h_tx_rpt { 1137453645fSAndriy Voskoboinyk uint8_t rptb0; 1147453645fSAndriy Voskoboinyk #define R92C_RPTB0_RETRY_CNT_M 0x3f 1157453645fSAndriy Voskoboinyk #define R92C_RPTB0_RETRY_CNT_S 0 1167453645fSAndriy Voskoboinyk 1177453645fSAndriy Voskoboinyk uint8_t rptb1; /* XXX junk */ 1187453645fSAndriy Voskoboinyk #define R92C_RPTB1_RTS_RETRY_CNT_M 0x3f 1197453645fSAndriy Voskoboinyk #define R92C_RPTB1_RTS_RETRY_CNT_S 0 1207453645fSAndriy Voskoboinyk 1217453645fSAndriy Voskoboinyk uint8_t queue_time_low; 1227453645fSAndriy Voskoboinyk uint8_t queue_time_high; 1237453645fSAndriy Voskoboinyk uint8_t rptb4; 1247453645fSAndriy Voskoboinyk #define R92C_RPTB4_MISSED_PKT_NUM_M 0x1f 1257453645fSAndriy Voskoboinyk #define R92C_RPTB4_MISSED_PKT_NUM_S 0 1267453645fSAndriy Voskoboinyk 1277453645fSAndriy Voskoboinyk uint8_t rptb5; 1287453645fSAndriy Voskoboinyk #define R92C_RPTB5_MACID_M 0x1f 1297453645fSAndriy Voskoboinyk #define R92C_RPTB5_MACID_S 0 1307453645fSAndriy Voskoboinyk #define R92C_RPTB5_DES1_FRAGSSN_M 0xe0 1317453645fSAndriy Voskoboinyk #define R92C_RPTB5_DES1_FRAGSSN_S 5 1327453645fSAndriy Voskoboinyk 1337453645fSAndriy Voskoboinyk uint8_t rptb6; 1347453645fSAndriy Voskoboinyk #define R92C_RPTB6_RPT_PKT_NUM_M 0x1f 1357453645fSAndriy Voskoboinyk #define R92C_RPTB6_RPT_PKT_NUM_S 0 1367453645fSAndriy Voskoboinyk #define R92C_RPTB6_PKT_DROP 0x20 1377453645fSAndriy Voskoboinyk #define R92C_RPTB6_LIFE_EXPIRE 0x40 1387453645fSAndriy Voskoboinyk #define R92C_RPTB6_RETRY_OVER 0x80 1397453645fSAndriy Voskoboinyk 1407453645fSAndriy Voskoboinyk uint8_t rptb7; 1417453645fSAndriy Voskoboinyk #define R92C_RPTB7_EDCA_M 0x0f 1427453645fSAndriy Voskoboinyk #define R92C_RPTB7_EDCA_S 0 1437453645fSAndriy Voskoboinyk #define R92C_RPTB7_BMC 0x20 1447453645fSAndriy Voskoboinyk #define R92C_RPTB7_PKT_OK 0x40 1457453645fSAndriy Voskoboinyk #define R92C_RPTB7_INT_CCX 0x80 1467453645fSAndriy Voskoboinyk } __packed; 1477453645fSAndriy Voskoboinyk 1487453645fSAndriy Voskoboinyk #endif /* R92C_FW_CMD_H */ 149