1 /****************************************************************************** 2 * 3 * Copyright(c) 2009-2012 Realtek Corporation. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of version 2 of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 * 14 * You should have received a copy of the GNU General Public License along with 15 * this program; if not, write to the Free Software Foundation, Inc., 16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 17 * 18 * The full GNU General Public License is included in this distribution in the 19 * file called LICENSE. 20 * 21 * Contact Information: 22 * wlanfae <wlanfae@realtek.com> 23 * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park, 24 * Hsinchu 300, Taiwan. 25 * Larry Finger <Larry.Finger@lwfinger.net> 26 * 27 **************************************************************************** 28 */ 29 30 #ifndef __RTL92C__FW__H__ 31 #define __RTL92C__FW__H__ 32 33 #define FW_8192C_START_ADDRESS 0x1000 34 #define FW_8192C_END_ADDRESS 0x3FFF 35 #define FW_8192C_PAGE_SIZE 4096 36 #define FW_8192C_POLLING_DELAY 5 37 #define FW_8192C_POLLING_TIMEOUT_COUNT 1000 38 39 #define BEACON_PG 0 40 #define PSPOLL_PG 2 41 #define NULL_PG 3 42 #define PROBERSP_PG 4 /* ->5 */ 43 44 #define TOTAL_RESERVED_PKT_LEN 768 45 46 #define IS_FW_HEADER_EXIST(_pfwhdr) \ 47 ((_pfwhdr->signature&0xFF00) == 0x2300) 48 49 struct rtl8723ae_firmware_header { 50 u16 signature; 51 u8 category; 52 u8 function; 53 u16 version; 54 u8 subversion; 55 u8 rsvd1; 56 u8 month; 57 u8 date; 58 u8 hour; 59 u8 minute; 60 u16 ramcodeSize; 61 u16 rsvd2; 62 u32 svnindex; 63 u32 rsvd3; 64 u32 rsvd4; 65 u32 rsvd5; 66 }; 67 68 enum rtl8192c_h2c_cmd { 69 H2C_AP_OFFLOAD = 0, 70 H2C_SETPWRMODE = 1, 71 H2C_JOINBSSRPT = 2, 72 H2C_RSVDPAGE = 3, 73 H2C_RSSI_REPORT = 4, 74 H2C_P2P_PS_CTW_CMD = 5, 75 H2C_P2P_PS_OFFLOAD = 6, 76 H2C_RA_MASK = 7, 77 MAX_H2CCMD 78 }; 79 80 #define SET_H2CCMD_PWRMODE_PARM_MODE(__ph2ccmd, __val) \ 81 SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 8, __val) 82 #define SET_H2CCMD_PWRMODE_PARM_SMART_PS(__ph2ccmd, __val) \ 83 SET_BITS_TO_LE_1BYTE((__ph2ccmd)+1, 0, 8, __val) 84 #define SET_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__ph2ccmd, __val) \ 85 SET_BITS_TO_LE_1BYTE((__ph2ccmd)+2, 0, 8, __val) 86 #define SET_H2CCMD_JOINBSSRPT_PARM_OPMODE(__ph2ccmd, __val) \ 87 SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 8, __val) 88 #define SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(__ph2ccmd, __val) \ 89 SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 8, __val) 90 #define SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(__ph2ccmd, __val) \ 91 SET_BITS_TO_LE_1BYTE((__ph2ccmd)+1, 0, 8, __val) 92 #define SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__ph2ccmd, __val) \ 93 SET_BITS_TO_LE_1BYTE((__ph2ccmd)+2, 0, 8, __val) 94 95 int rtl8723ae_download_fw(struct ieee80211_hw *hw); 96 void rtl8723ae_fill_h2c_cmd(struct ieee80211_hw *hw, u8 element_id, 97 u32 cmd_len, u8 *p_cmdbuffer); 98 void rtl8723ae_firmware_selfreset(struct ieee80211_hw *hw); 99 void rtl8723ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode); 100 void rtl8723ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished); 101 void rtl8723ae_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus); 102 void rtl8723ae_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state); 103 104 #endif 105