1 /****************************************************************************** 2 * 3 * This file is provided under a dual BSD/GPLv2 license. When using or 4 * redistributing this file, you may do so under either license. 5 * 6 * GPL LICENSE SUMMARY 7 * 8 * Copyright(c) 2010 - 2011 Intel Corporation. All rights reserved. 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of version 2 of the GNU General Public License as 12 * published by the Free Software Foundation. 13 * 14 * This program is distributed in the hope that it will be useful, but 15 * WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, 22 * USA 23 * 24 * The full GNU General Public License is included in this distribution 25 * in the file called LICENSE.GPL. 26 * 27 * Contact Information: 28 * Intel Linux Wireless <ilw@linux.intel.com> 29 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 30 * 31 * BSD LICENSE 32 * 33 * Copyright(c) 2010 - 2011 Intel Corporation. All rights reserved. 34 * All rights reserved. 35 * 36 * Redistribution and use in source and binary forms, with or without 37 * modification, are permitted provided that the following conditions 38 * are met: 39 * 40 * * Redistributions of source code must retain the above copyright 41 * notice, this list of conditions and the following disclaimer. 42 * * Redistributions in binary form must reproduce the above copyright 43 * notice, this list of conditions and the following disclaimer in 44 * the documentation and/or other materials provided with the 45 * distribution. 46 * * Neither the name Intel Corporation nor the names of its 47 * contributors may be used to endorse or promote products derived 48 * from this software without specific prior written permission. 49 * 50 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 51 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 52 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 53 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 54 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 55 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 56 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 57 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 58 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 59 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 60 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 61 * 62 *****************************************************************************/ 63 #ifndef __IWL_TESTMODE_H__ 64 #define __IWL_TESTMODE_H__ 65 66 #include <linux/types.h> 67 68 69 /* 70 * Commands from user space to kernel space(IWL_TM_CMD_ID_APP2DEV_XX) and 71 * from and kernel space to user space(IWL_TM_CMD_ID_DEV2APP_XX). 72 * The command ID is carried with IWL_TM_ATTR_COMMAND. 73 * 74 * @IWL_TM_CMD_APP2DEV_UCODE: 75 * commands from user application to the uCode, 76 * the actual uCode host command ID is carried with 77 * IWL_TM_ATTR_UCODE_CMD_ID 78 * 79 * @IWL_TM_CMD_APP2DEV_DIRECT_REG_READ32: 80 * @IWL_TM_CMD_APP2DEV_DIRECT_REG_WRITE32: 81 * @IWL_TM_CMD_APP2DEV_DIRECT_REG_WRITE8: 82 * commands from user applicaiton to access register 83 * 84 * @IWL_TM_CMD_APP2DEV_GET_DEVICENAME: retrieve device name 85 * @IWL_TM_CMD_APP2DEV_LOAD_INIT_FW: load initial uCode image 86 * @IWL_TM_CMD_APP2DEV_CFG_INIT_CALIB: perform calibration 87 * @IWL_TM_CMD_APP2DEV_LOAD_RUNTIME_FW: load runtime uCode image 88 * @IWL_TM_CMD_APP2DEV_GET_EEPROM: request EEPROM data 89 * @IWL_TM_CMD_APP2DEV_FIXRATE_REQ: set fix MCS 90 * commands fom user space for pure driver level operations 91 * 92 * @IWL_TM_CMD_APP2DEV_BEGIN_TRACE: 93 * @IWL_TM_CMD_APP2DEV_END_TRACE: 94 * @IWL_TM_CMD_APP2DEV_READ_TRACE: 95 * commands fom user space for uCode trace operations 96 * 97 * @IWL_TM_CMD_DEV2APP_SYNC_RSP: 98 * commands from kernel space to carry the synchronous response 99 * to user application 100 * @IWL_TM_CMD_DEV2APP_UCODE_RX_PKT: 101 * commands from kernel space to multicast the spontaneous messages 102 * to user application 103 * @IWL_TM_CMD_DEV2APP_EEPROM_RSP: 104 * commands from kernel space to carry the eeprom response 105 * to user application 106 * 107 * @IWL_TM_CMD_APP2DEV_OWNERSHIP: 108 * commands from user application to own change the ownership of the uCode 109 * if application has the ownership, the only host command from 110 * testmode will deliver to uCode. Default owner is driver 111 * 112 * @IWL_TM_CMD_APP2DEV_INDIRECT_REG_READ32: 113 * @IWL_TM_CMD_APP2DEV_INDIRECT_REG_WRITE32: 114 * commands from user applicaiton to indirectly access peripheral register 115 * 116 * @IWL_TM_CMD_APP2DEV_READ_SRAM: 117 * @IWL_TM_CMD_APP2DEV_DUMP_SRAM: 118 * commands from user applicaiton to read data in sram 119 * 120 * @IWL_TM_CMD_APP2DEV_LOAD_WOWLAN_FW: load Weak On Wireless LAN uCode image 121 * @IWL_TM_CMD_APP2DEV_GET_FW_VERSION: retrieve uCode version 122 * @IWL_TM_CMD_APP2DEV_GET_DEVICE_ID: retrieve ID information in device 123 * 124 */ 125 enum iwl_tm_cmd_t { 126 IWL_TM_CMD_APP2DEV_UCODE = 1, 127 IWL_TM_CMD_APP2DEV_DIRECT_REG_READ32 = 2, 128 IWL_TM_CMD_APP2DEV_DIRECT_REG_WRITE32 = 3, 129 IWL_TM_CMD_APP2DEV_DIRECT_REG_WRITE8 = 4, 130 IWL_TM_CMD_APP2DEV_GET_DEVICENAME = 5, 131 IWL_TM_CMD_APP2DEV_LOAD_INIT_FW = 6, 132 IWL_TM_CMD_APP2DEV_CFG_INIT_CALIB = 7, 133 IWL_TM_CMD_APP2DEV_LOAD_RUNTIME_FW = 8, 134 IWL_TM_CMD_APP2DEV_GET_EEPROM = 9, 135 IWL_TM_CMD_APP2DEV_FIXRATE_REQ = 10, 136 IWL_TM_CMD_APP2DEV_BEGIN_TRACE = 11, 137 IWL_TM_CMD_APP2DEV_END_TRACE = 12, 138 IWL_TM_CMD_APP2DEV_READ_TRACE = 13, 139 IWL_TM_CMD_DEV2APP_SYNC_RSP = 14, 140 IWL_TM_CMD_DEV2APP_UCODE_RX_PKT = 15, 141 IWL_TM_CMD_DEV2APP_EEPROM_RSP = 16, 142 IWL_TM_CMD_APP2DEV_OWNERSHIP = 17, 143 IWL_TM_CMD_APP2DEV_INDIRECT_REG_READ32 = 18, 144 IWL_TM_CMD_APP2DEV_INDIRECT_REG_WRITE32 = 19, 145 IWL_TM_CMD_APP2DEV_READ_SRAM = 20, 146 IWL_TM_CMD_APP2DEV_DUMP_SRAM = 21, 147 IWL_TM_CMD_APP2DEV_LOAD_WOWLAN_FW = 22, 148 IWL_TM_CMD_APP2DEV_GET_FW_VERSION = 23, 149 IWL_TM_CMD_APP2DEV_GET_DEVICE_ID = 24, 150 IWL_TM_CMD_MAX = 25, 151 }; 152 153 /* 154 * Atrribute filed in testmode command 155 * See enum iwl_tm_cmd_t. 156 * 157 * @IWL_TM_ATTR_NOT_APPLICABLE: 158 * The attribute is not applicable or invalid 159 * @IWL_TM_ATTR_COMMAND: 160 * From user space to kernel space: 161 * the command either destines to ucode, driver, or register; 162 * From kernel space to user space: 163 * the command either carries synchronous response, 164 * or the spontaneous message multicast from the device; 165 * 166 * @IWL_TM_ATTR_UCODE_CMD_ID: 167 * @IWL_TM_ATTR_UCODE_CMD_DATA: 168 * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_UCODE, 169 * The mandatory fields are : 170 * IWL_TM_ATTR_UCODE_CMD_ID for recognizable command ID; 171 * IWL_TM_ATTR_COMMAND_FLAG for the flags of the commands; 172 * The optional fields are: 173 * IWL_TM_ATTR_UCODE_CMD_DATA for the actual command payload 174 * to the ucode 175 * 176 * @IWL_TM_ATTR_REG_OFFSET: 177 * @IWL_TM_ATTR_REG_VALUE8: 178 * @IWL_TM_ATTR_REG_VALUE32: 179 * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_REG_XXX, 180 * The mandatory fields are: 181 * IWL_TM_ATTR_REG_OFFSET for the offset of the target register; 182 * IWL_TM_ATTR_REG_VALUE8 or IWL_TM_ATTR_REG_VALUE32 for value 183 * 184 * @IWL_TM_ATTR_SYNC_RSP: 185 * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_DEV2APP_SYNC_RSP, 186 * The mandatory fields are: 187 * IWL_TM_ATTR_SYNC_RSP for the data content responding to the user 188 * application command 189 * 190 * @IWL_TM_ATTR_UCODE_RX_PKT: 191 * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_DEV2APP_UCODE_RX_PKT, 192 * The mandatory fields are: 193 * IWL_TM_ATTR_UCODE_RX_PKT for the data content multicast to the user 194 * application 195 * 196 * @IWL_TM_ATTR_EEPROM: 197 * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_DEV2APP_EEPROM, 198 * The mandatory fields are: 199 * IWL_TM_ATTR_EEPROM for the data content responging to the user 200 * application 201 * 202 * @IWL_TM_ATTR_TRACE_ADDR: 203 * @IWL_TM_ATTR_TRACE_SIZE: 204 * @IWL_TM_ATTR_TRACE_DUMP: 205 * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_XXX_TRACE, 206 * The mandatory fields are: 207 * IWL_TM_ATTR_MEM_TRACE_ADDR for the trace address 208 * IWL_TM_ATTR_MEM_TRACE_SIZE for the trace buffer size 209 * IWL_TM_ATTR_MEM_TRACE_DUMP for the trace dump 210 * 211 * @IWL_TM_ATTR_FIXRATE: 212 * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_FIXRATE_REQ, 213 * The mandatory fields are: 214 * IWL_TM_ATTR_FIXRATE for the fixed rate 215 * 216 * @IWL_TM_ATTR_UCODE_OWNER: 217 * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_OWNERSHIP, 218 * The mandatory fields are: 219 * IWL_TM_ATTR_UCODE_OWNER for the new owner 220 * 221 * @IWL_TM_ATTR_SRAM_ADDR: 222 * @IWL_TM_ATTR_SRAM_SIZE: 223 * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_READ_SRAM, 224 * The mandatory fields are: 225 * IWL_TM_ATTR_SRAM_ADDR for the address in sram 226 * IWL_TM_ATTR_SRAM_SIZE for the buffer size of data reading 227 * 228 * @IWL_TM_ATTR_SRAM_DUMP: 229 * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_DUMP_SRAM, 230 * IWL_TM_ATTR_SRAM_DUMP for the data in sram 231 * 232 * @IWL_TM_ATTR_FW_VERSION: 233 * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_GET_FW_VERSION, 234 * IWL_TM_ATTR_FW_VERSION for the uCode version 235 * 236 * @IWL_TM_ATTR_DEVICE_ID: 237 * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_GET_DEVICE_ID, 238 * IWL_TM_ATTR_DEVICE_ID for the device ID information 239 * 240 */ 241 enum iwl_tm_attr_t { 242 IWL_TM_ATTR_NOT_APPLICABLE = 0, 243 IWL_TM_ATTR_COMMAND = 1, 244 IWL_TM_ATTR_UCODE_CMD_ID = 2, 245 IWL_TM_ATTR_UCODE_CMD_DATA = 3, 246 IWL_TM_ATTR_REG_OFFSET = 4, 247 IWL_TM_ATTR_REG_VALUE8 = 5, 248 IWL_TM_ATTR_REG_VALUE32 = 6, 249 IWL_TM_ATTR_SYNC_RSP = 7, 250 IWL_TM_ATTR_UCODE_RX_PKT = 8, 251 IWL_TM_ATTR_EEPROM = 9, 252 IWL_TM_ATTR_TRACE_ADDR = 10, 253 IWL_TM_ATTR_TRACE_SIZE = 11, 254 IWL_TM_ATTR_TRACE_DUMP = 12, 255 IWL_TM_ATTR_FIXRATE = 13, 256 IWL_TM_ATTR_UCODE_OWNER = 14, 257 IWL_TM_ATTR_SRAM_ADDR = 15, 258 IWL_TM_ATTR_SRAM_SIZE = 16, 259 IWL_TM_ATTR_SRAM_DUMP = 17, 260 IWL_TM_ATTR_FW_VERSION = 18, 261 IWL_TM_ATTR_DEVICE_ID = 19, 262 IWL_TM_ATTR_MAX = 20, 263 }; 264 265 /* uCode trace buffer */ 266 #define TRACE_BUFF_SIZE_MAX 0x200000 267 #define TRACE_BUFF_SIZE_MIN 0x20000 268 #define TRACE_BUFF_SIZE_DEF TRACE_BUFF_SIZE_MIN 269 #define TRACE_BUFF_PADD 0x2000 270 271 /* Maximum data size of each dump it packet */ 272 #define DUMP_CHUNK_SIZE (PAGE_SIZE - 1024) 273 274 #endif 275