| /****************************************************************************** |
| * |
| * This file is provided under a dual BSD/GPLv2 license. When using or |
| * redistributing this file, you may do so under either license. |
| * |
| * GPL LICENSE SUMMARY |
| * |
| * Copyright(c) 2010 - 2013 Intel Corporation. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of version 2 of the GNU General Public License as |
| * published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, but |
| * WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, |
| * USA |
| * |
| * The full GNU General Public License is included in this distribution |
| * in the file called LICENSE.GPL. |
| * |
| * Contact Information: |
| * Intel Linux Wireless <ilw@linux.intel.com> |
| * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| * |
| * BSD LICENSE |
| * |
| * Copyright(c) 2010 - 2013 Intel Corporation. All rights reserved. |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in |
| * the documentation and/or other materials provided with the |
| * distribution. |
| * * Neither the name Intel Corporation nor the names of its |
| * contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * |
| *****************************************************************************/ |
| #ifndef __IWL_TESTMODE_H__ |
| #define __IWL_TESTMODE_H__ |
| |
| #include <linux/types.h> |
| |
| |
| /* |
| * Commands from user space to kernel space(IWL_TM_CMD_ID_APP2DEV_XX) and |
| * from and kernel space to user space(IWL_TM_CMD_ID_DEV2APP_XX). |
| * The command ID is carried with IWL_TM_ATTR_COMMAND. |
| * |
| * @IWL_TM_CMD_APP2DEV_UCODE: |
| * commands from user application to the uCode, |
| * the actual uCode host command ID is carried with |
| * IWL_TM_ATTR_UCODE_CMD_ID |
| * |
| * @IWL_TM_CMD_APP2DEV_DIRECT_REG_READ32: |
| * @IWL_TM_CMD_APP2DEV_DIRECT_REG_WRITE32: |
| * @IWL_TM_CMD_APP2DEV_DIRECT_REG_WRITE8: |
| * commands from user applicaiton to access register |
| * |
| * @IWL_TM_CMD_APP2DEV_GET_DEVICENAME: retrieve device name |
| * @IWL_TM_CMD_APP2DEV_LOAD_INIT_FW: load initial uCode image |
| * @IWL_TM_CMD_APP2DEV_CFG_INIT_CALIB: perform calibration |
| * @IWL_TM_CMD_APP2DEV_LOAD_RUNTIME_FW: load runtime uCode image |
| * @IWL_TM_CMD_APP2DEV_GET_EEPROM: request EEPROM data |
| * @IWL_TM_CMD_APP2DEV_FIXRATE_REQ: set fix MCS |
| * commands fom user space for pure driver level operations |
| * |
| * @IWL_TM_CMD_APP2DEV_BEGIN_TRACE: |
| * @IWL_TM_CMD_APP2DEV_END_TRACE: |
| * @IWL_TM_CMD_APP2DEV_READ_TRACE: |
| * commands fom user space for uCode trace operations |
| * |
| * @IWL_TM_CMD_DEV2APP_SYNC_RSP: |
| * commands from kernel space to carry the synchronous response |
| * to user application |
| * @IWL_TM_CMD_DEV2APP_UCODE_RX_PKT: |
| * commands from kernel space to multicast the spontaneous messages |
| * to user application, or reply of host commands |
| * @IWL_TM_CMD_DEV2APP_EEPROM_RSP: |
| * commands from kernel space to carry the eeprom response |
| * to user application |
| * |
| * @IWL_TM_CMD_APP2DEV_OWNERSHIP: |
| * commands from user application to own change the ownership of the uCode |
| * if application has the ownership, the only host command from |
| * testmode will deliver to uCode. Default owner is driver |
| * |
| * @IWL_TM_CMD_APP2DEV_LOAD_WOWLAN_FW: load Wake On Wireless LAN uCode image |
| * @IWL_TM_CMD_APP2DEV_GET_FW_VERSION: retrieve uCode version |
| * @IWL_TM_CMD_APP2DEV_GET_DEVICE_ID: retrieve ID information in device |
| * @IWL_TM_CMD_APP2DEV_GET_FW_INFO: |
| * retrieve information of existing loaded uCode image |
| * |
| * @IWL_TM_CMD_APP2DEV_INDIRECT_BUFFER_READ: |
| * @IWL_TM_CMD_APP2DEV_INDIRECT_BUFFER_DUMP: |
| * @IWL_TM_CMD_APP2DEV_INDIRECT_BUFFER_WRITE: |
| * Commands to read/write data from periphery or SRAM memory ranges. |
| * Fore reading, a READ command is sent from the userspace and the data |
| * is returned when the user calls a DUMP command. |
| * For writing, only a WRITE command is used. |
| * @IWL_TM_CMD_APP2DEV_NOTIFICATIONS: |
| * Command to enable/disable notifications (currently RX packets) from the |
| * driver to userspace. |
| */ |
| enum iwl_tm_cmd_t { |
| IWL_TM_CMD_APP2DEV_UCODE = 1, |
| IWL_TM_CMD_APP2DEV_DIRECT_REG_READ32 = 2, |
| IWL_TM_CMD_APP2DEV_DIRECT_REG_WRITE32 = 3, |
| IWL_TM_CMD_APP2DEV_DIRECT_REG_WRITE8 = 4, |
| IWL_TM_CMD_APP2DEV_GET_DEVICENAME = 5, |
| IWL_TM_CMD_APP2DEV_LOAD_INIT_FW = 6, |
| IWL_TM_CMD_APP2DEV_CFG_INIT_CALIB = 7, |
| IWL_TM_CMD_APP2DEV_LOAD_RUNTIME_FW = 8, |
| IWL_TM_CMD_APP2DEV_GET_EEPROM = 9, |
| IWL_TM_CMD_APP2DEV_FIXRATE_REQ = 10, |
| IWL_TM_CMD_APP2DEV_BEGIN_TRACE = 11, |
| IWL_TM_CMD_APP2DEV_END_TRACE = 12, |
| IWL_TM_CMD_APP2DEV_READ_TRACE = 13, |
| IWL_TM_CMD_DEV2APP_SYNC_RSP = 14, |
| IWL_TM_CMD_DEV2APP_UCODE_RX_PKT = 15, |
| IWL_TM_CMD_DEV2APP_EEPROM_RSP = 16, |
| IWL_TM_CMD_APP2DEV_OWNERSHIP = 17, |
| RESERVED_18 = 18, |
| RESERVED_19 = 19, |
| RESERVED_20 = 20, |
| RESERVED_21 = 21, |
| IWL_TM_CMD_APP2DEV_LOAD_WOWLAN_FW = 22, |
| IWL_TM_CMD_APP2DEV_GET_FW_VERSION = 23, |
| IWL_TM_CMD_APP2DEV_GET_DEVICE_ID = 24, |
| IWL_TM_CMD_APP2DEV_GET_FW_INFO = 25, |
| IWL_TM_CMD_APP2DEV_INDIRECT_BUFFER_READ = 26, |
| IWL_TM_CMD_APP2DEV_INDIRECT_BUFFER_DUMP = 27, |
| IWL_TM_CMD_APP2DEV_INDIRECT_BUFFER_WRITE = 28, |
| IWL_TM_CMD_APP2DEV_NOTIFICATIONS = 29, |
| IWL_TM_CMD_MAX = 30, |
| }; |
| |
| /* |
| * Atrribute filed in testmode command |
| * See enum iwl_tm_cmd_t. |
| * |
| * @IWL_TM_ATTR_NOT_APPLICABLE: |
| * The attribute is not applicable or invalid |
| * @IWL_TM_ATTR_COMMAND: |
| * From user space to kernel space: |
| * the command either destines to ucode, driver, or register; |
| * From kernel space to user space: |
| * the command either carries synchronous response, |
| * or the spontaneous message multicast from the device; |
| * |
| * @IWL_TM_ATTR_UCODE_CMD_ID: |
| * @IWL_TM_ATTR_UCODE_CMD_DATA: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_UCODE, |
| * The mandatory fields are : |
| * IWL_TM_ATTR_UCODE_CMD_ID for recognizable command ID; |
| * IWL_TM_ATTR_UCODE_CMD_DATA for the actual command payload |
| * to the ucode |
| * |
| * @IWL_TM_ATTR_REG_OFFSET: |
| * @IWL_TM_ATTR_REG_VALUE8: |
| * @IWL_TM_ATTR_REG_VALUE32: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_REG_XXX, |
| * The mandatory fields are: |
| * IWL_TM_ATTR_REG_OFFSET for the offset of the target register; |
| * IWL_TM_ATTR_REG_VALUE8 or IWL_TM_ATTR_REG_VALUE32 for value |
| * |
| * @IWL_TM_ATTR_SYNC_RSP: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_DEV2APP_SYNC_RSP, |
| * The mandatory fields are: |
| * IWL_TM_ATTR_SYNC_RSP for the data content responding to the user |
| * application command |
| * |
| * @IWL_TM_ATTR_UCODE_RX_PKT: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_DEV2APP_UCODE_RX_PKT, |
| * The mandatory fields are: |
| * IWL_TM_ATTR_UCODE_RX_PKT for the data content multicast to the user |
| * application |
| * |
| * @IWL_TM_ATTR_EEPROM: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_DEV2APP_EEPROM, |
| * The mandatory fields are: |
| * IWL_TM_ATTR_EEPROM for the data content responging to the user |
| * application |
| * |
| * @IWL_TM_ATTR_TRACE_ADDR: |
| * @IWL_TM_ATTR_TRACE_SIZE: |
| * @IWL_TM_ATTR_TRACE_DUMP: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_XXX_TRACE, |
| * The mandatory fields are: |
| * IWL_TM_ATTR_MEM_TRACE_ADDR for the trace address |
| * IWL_TM_ATTR_MEM_TRACE_SIZE for the trace buffer size |
| * IWL_TM_ATTR_MEM_TRACE_DUMP for the trace dump |
| * |
| * @IWL_TM_ATTR_FIXRATE: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_FIXRATE_REQ, |
| * The mandatory fields are: |
| * IWL_TM_ATTR_FIXRATE for the fixed rate |
| * |
| * @IWL_TM_ATTR_UCODE_OWNER: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_OWNERSHIP, |
| * The mandatory fields are: |
| * IWL_TM_ATTR_UCODE_OWNER for the new owner |
| * |
| * @IWL_TM_ATTR_MEM_ADDR: |
| * @IWL_TM_ATTR_BUFFER_SIZE: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_INDIRECT_BUFFER_READ |
| * or IWL_TM_CMD_APP2DEV_INDIRECT_BUFFER_WRITE. |
| * The mandatory fields are: |
| * IWL_TM_ATTR_MEM_ADDR for the address in SRAM/periphery to read/write |
| * IWL_TM_ATTR_BUFFER_SIZE for the buffer size of data to read/write. |
| * |
| * @IWL_TM_ATTR_BUFFER_DUMP: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_INDIRECT_BUFFER_DUMP, |
| * IWL_TM_ATTR_BUFFER_DUMP is used for the data that was read. |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_INDIRECT_BUFFER_WRITE, |
| * this attribute contains the data to write. |
| * |
| * @IWL_TM_ATTR_FW_VERSION: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_GET_FW_VERSION, |
| * IWL_TM_ATTR_FW_VERSION for the uCode version |
| * |
| * @IWL_TM_ATTR_DEVICE_ID: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_GET_DEVICE_ID, |
| * IWL_TM_ATTR_DEVICE_ID for the device ID information |
| * |
| * @IWL_TM_ATTR_FW_TYPE: |
| * @IWL_TM_ATTR_FW_INST_SIZE: |
| * @IWL_TM_ATTR_FW_DATA_SIZE: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_GET_FW_INFO, |
| * The mandatory fields are: |
| * IWL_TM_ATTR_FW_TYPE for the uCode type (INIT/RUNTIME/...) |
| * IWL_TM_ATTR_FW_INST_SIZE for the size of instruction section |
| * IWL_TM_ATTR_FW_DATA_SIZE for the size of data section |
| * |
| * @IWL_TM_ATTR_UCODE_CMD_SKB: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_UCODE this flag |
| * indicates that the user wants to receive the response of the command |
| * in a reply SKB. If it's not present, the response is not returned. |
| * @IWL_TM_ATTR_ENABLE_NOTIFICATIONS: |
| * When IWL_TM_ATTR_COMMAND is IWL_TM_CMD_APP2DEV_NOTIFICATIONS, this |
| * flag enables (if present) or disables (if not) the forwarding |
| * to userspace. |
| */ |
| enum iwl_tm_attr_t { |
| IWL_TM_ATTR_NOT_APPLICABLE = 0, |
| IWL_TM_ATTR_COMMAND = 1, |
| IWL_TM_ATTR_UCODE_CMD_ID = 2, |
| IWL_TM_ATTR_UCODE_CMD_DATA = 3, |
| IWL_TM_ATTR_REG_OFFSET = 4, |
| IWL_TM_ATTR_REG_VALUE8 = 5, |
| IWL_TM_ATTR_REG_VALUE32 = 6, |
| IWL_TM_ATTR_SYNC_RSP = 7, |
| IWL_TM_ATTR_UCODE_RX_PKT = 8, |
| IWL_TM_ATTR_EEPROM = 9, |
| IWL_TM_ATTR_TRACE_ADDR = 10, |
| IWL_TM_ATTR_TRACE_SIZE = 11, |
| IWL_TM_ATTR_TRACE_DUMP = 12, |
| IWL_TM_ATTR_FIXRATE = 13, |
| IWL_TM_ATTR_UCODE_OWNER = 14, |
| IWL_TM_ATTR_MEM_ADDR = 15, |
| IWL_TM_ATTR_BUFFER_SIZE = 16, |
| IWL_TM_ATTR_BUFFER_DUMP = 17, |
| IWL_TM_ATTR_FW_VERSION = 18, |
| IWL_TM_ATTR_DEVICE_ID = 19, |
| IWL_TM_ATTR_FW_TYPE = 20, |
| IWL_TM_ATTR_FW_INST_SIZE = 21, |
| IWL_TM_ATTR_FW_DATA_SIZE = 22, |
| IWL_TM_ATTR_UCODE_CMD_SKB = 23, |
| IWL_TM_ATTR_ENABLE_NOTIFICATION = 24, |
| IWL_TM_ATTR_MAX = 25, |
| }; |
| |
| /* uCode trace buffer */ |
| #define TRACE_BUFF_SIZE_MAX 0x200000 |
| #define TRACE_BUFF_SIZE_MIN 0x20000 |
| #define TRACE_BUFF_SIZE_DEF TRACE_BUFF_SIZE_MIN |
| #define TRACE_BUFF_PADD 0x2000 |
| |
| /* Maximum data size of each dump it packet */ |
| #define DUMP_CHUNK_SIZE (PAGE_SIZE - 1024) |
| |
| /* Address offset of data segment in SRAM */ |
| #define SRAM_DATA_SEG_OFFSET 0x800000 |
| |
| #endif |