1 /****************************************************************************** 2 * 3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. 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 * 19 ******************************************************************************/ 20 #ifndef __RTW_IOL_H_ 21 #define __RTW_IOL_H_ 22 23 24 struct xmit_frame *rtw_IOL_accquire_xmit_frame(ADAPTER *adapter); 25 int rtw_IOL_append_cmds(struct xmit_frame *xmit_frame, u8 *IOL_cmds, u32 cmd_len); 26 int rtw_IOL_append_LLT_cmd(struct xmit_frame *xmit_frame, u8 page_boundary); 27 int rtw_IOL_exec_cmds_sync(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms, u32 bndy_cnt); 28 bool rtw_IOL_applied(ADAPTER *adapter); 29 int rtw_IOL_append_DELAY_US_cmd(struct xmit_frame *xmit_frame, u16 us); 30 int rtw_IOL_append_DELAY_MS_cmd(struct xmit_frame *xmit_frame, u16 ms); 31 int rtw_IOL_append_END_cmd(struct xmit_frame *xmit_frame); 32 33 34 #ifdef CONFIG_IOL_NEW_GENERATION 35 #define IOREG_CMD_END_LEN 4 36 37 struct ioreg_cfg { 38 u8 length; 39 u8 cmd_id; 40 u16 address; 41 u32 data; 42 u32 mask; 43 }; 44 enum ioreg_cmd { 45 IOREG_CMD_LLT = 0x01, 46 IOREG_CMD_REFUSE = 0x02, 47 IOREG_CMD_EFUSE_PATH = 0x03, 48 IOREG_CMD_WB_REG = 0x04, 49 IOREG_CMD_WW_REG = 0x05, 50 IOREG_CMD_WD_REG = 0x06, 51 IOREG_CMD_W_RF = 0x07, 52 IOREG_CMD_DELAY_US = 0x10, 53 IOREG_CMD_DELAY_MS = 0x11, 54 IOREG_CMD_END = 0xFF, 55 }; 56 void read_efuse_from_txpktbuf(ADAPTER *adapter, int bcnhead, u8 *content, u16 *size); 57 58 int _rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value, u8 mask); 59 int _rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value, u16 mask); 60 int _rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value, u32 mask); 61 int _rtw_IOL_append_WRF_cmd(struct xmit_frame *xmit_frame, u8 rf_path, u16 addr, u32 value, u32 mask); 62 #define rtw_IOL_append_WB_cmd(xmit_frame, addr, value, mask) _rtw_IOL_append_WB_cmd((xmit_frame), (addr), (value), (mask)) 63 #define rtw_IOL_append_WW_cmd(xmit_frame, addr, value, mask) _rtw_IOL_append_WW_cmd((xmit_frame), (addr), (value), (mask)) 64 #define rtw_IOL_append_WD_cmd(xmit_frame, addr, value, mask) _rtw_IOL_append_WD_cmd((xmit_frame), (addr), (value), (mask)) 65 #define rtw_IOL_append_WRF_cmd(xmit_frame, rf_path, addr, value, mask) _rtw_IOL_append_WRF_cmd((xmit_frame), (rf_path), (addr), (value), (mask)) 66 67 u8 rtw_IOL_cmd_boundary_handle(struct xmit_frame *pxmit_frame); 68 void rtw_IOL_cmd_buf_dump(ADAPTER *Adapter, int buf_len, u8 *pbuf); 69 70 #ifdef CONFIG_IOL_IOREG_CFG_DBG 71 struct cmd_cmp { 72 u16 addr; 73 u32 value; 74 }; 75 #endif 76 77 #else /* CONFIG_IOL_NEW_GENERATION */ 78 79 typedef struct _io_offload_cmd { 80 u8 rsvd0; 81 u8 cmd; 82 u16 address; 83 u32 value; 84 } IO_OFFLOAD_CMD, IOL_CMD; 85 86 #define IOL_CMD_LLT 0x00 87 /* #define IOL_CMD_R_EFUSE 0x01 */ 88 #define IOL_CMD_WB_REG 0x02 89 #define IOL_CMD_WW_REG 0x03 90 #define IOL_CMD_WD_REG 0x04 91 /* #define IOL_CMD_W_RF 0x05 */ 92 #define IOL_CMD_DELAY_US 0x80 93 #define IOL_CMD_DELAY_MS 0x81 94 /* #define IOL_CMD_DELAY_S 0x82 */ 95 #define IOL_CMD_END 0x83 96 97 #if 0 98 /* **************************************************** 99 * CMD Address Value 100 * (B1) (B2/B3:H/L addr) (B4:B7 : MSB:LSB) 101 * ****************************************************** 102 * IOL_CMD_LLT - B7: PGBNDY 103 * IOL_CMD_R_EFUSE - - */ 104 IOL_CMD_WB_REG 0x0~0xFFFF B7 105 IOL_CMD_WW_REG 0x0~0xFFFF B6~B7 106 IOL_CMD_WD_REG 0x0~0xFFFF B4~B7 107 /* IOL_CMD_W_RF RF Reg B5~B7 */ 108 IOL_CMD_DELAY_US - B6~B7 109 IOL_CMD_DELAY_MS - B6~B7 110 /* IOL_CMD_DELAY_S - B6~B7 */ 111 IOL_CMD_END - - 112 /* ***************************************************** */ 113 #endif 114 int _rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value); 115 int _rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value); 116 int _rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value); 117 118 119 int rtw_IOL_exec_cmd_array_sync(PADAPTER adapter, u8 *IOL_cmds, u32 cmd_num, u32 max_wating_ms); 120 int rtw_IOL_exec_empty_cmds_sync(ADAPTER *adapter, u32 max_wating_ms); 121 122 #ifdef DBG_IO 123 int dbg_rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value, const char *caller, const int line); 124 int dbg_rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value, const char *caller, const int line); 125 int dbg_rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value, const char *caller, const int line); 126 #define rtw_IOL_append_WB_cmd(xmit_frame, addr, value) dbg_rtw_IOL_append_WB_cmd((xmit_frame), (addr), (value), __FUNCTION__, __LINE__) 127 #define rtw_IOL_append_WW_cmd(xmit_frame, addr, value) dbg_rtw_IOL_append_WW_cmd((xmit_frame), (addr), (value), __FUNCTION__, __LINE__) 128 #define rtw_IOL_append_WD_cmd(xmit_frame, addr, value) dbg_rtw_IOL_append_WD_cmd((xmit_frame), (addr), (value), __FUNCTION__, __LINE__) 129 #else 130 #define rtw_IOL_append_WB_cmd(xmit_frame, addr, value) _rtw_IOL_append_WB_cmd((xmit_frame), (addr), (value)) 131 #define rtw_IOL_append_WW_cmd(xmit_frame, addr, value) _rtw_IOL_append_WW_cmd((xmit_frame), (addr), (value)) 132 #define rtw_IOL_append_WD_cmd(xmit_frame, addr, value) _rtw_IOL_append_WD_cmd((xmit_frame), (addr), (value)) 133 #endif /* DBG_IO */ 134 #endif /* CONFIG_IOL_NEW_GENERATION */ 135 136 137 138 #endif /* __RTW_IOL_H_ */ 139