1ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler/* 2ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * iwmc3200top - Intel Wireless MultiCom 3200 Top Driver 3ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * drivers/misc/iwmc3200top/fw-msg.h 4ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * 5ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * Copyright (C) 2009 Intel Corporation. All rights reserved. 6ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * 7ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * This program is free software; you can redistribute it and/or 8ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * modify it under the terms of the GNU General Public License version 9ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * 2 as published by the Free Software Foundation. 10ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * 11ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * This program is distributed in the hope that it will be useful, 12ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * but WITHOUT ANY WARRANTY; without even the implied warranty of 13ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * GNU General Public License for more details. 15ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * 16ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * You should have received a copy of the GNU General Public License 17ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * along with this program; if not, write to the Free Software 18ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * 02110-1301, USA. 20ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * 21ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * 22ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * Author Name: Maxim Grabarnik <maxim.grabarnink@intel.com> 23ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * - 24ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler * 25ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler */ 26ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 27ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#ifndef __FWMSG_H__ 28ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define __FWMSG_H__ 29ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 30ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define COMM_TYPE_D2H 0xFF 31ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define COMM_TYPE_H2D 0xEE 32ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 33ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define COMM_CATEGORY_OPERATIONAL 0x00 34ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define COMM_CATEGORY_DEBUG 0x01 35ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define COMM_CATEGORY_TESTABILITY 0x02 36ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define COMM_CATEGORY_DIAGNOSTICS 0x03 37ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 38ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define OP_DBG_ZSTR_MSG cpu_to_le16(0x1A) 39ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 40ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define FW_LOG_SRC_MAX 32 41ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define FW_LOG_SRC_ALL 255 42ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 43ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define FW_STRING_TABLE_ADDR cpu_to_le32(0x0C000000) 44ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 45ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define CMD_DBG_LOG_LEVEL cpu_to_le16(0x0001) 46ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define CMD_TST_DEV_RESET cpu_to_le16(0x0060) 47ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define CMD_TST_FUNC_RESET cpu_to_le16(0x0062) 48ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define CMD_TST_IFACE_RESET cpu_to_le16(0x0064) 49ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define CMD_TST_CPU_UTILIZATION cpu_to_le16(0x0065) 50ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define CMD_TST_TOP_DEEP_SLEEP cpu_to_le16(0x0080) 51ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define CMD_TST_WAKEUP cpu_to_le16(0x0081) 52ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define CMD_TST_FUNC_WAKEUP cpu_to_le16(0x0082) 53ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define CMD_TST_FUNC_DEEP_SLEEP_REQUEST cpu_to_le16(0x0083) 54ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define CMD_TST_GET_MEM_DUMP cpu_to_le16(0x0096) 55ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 56ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define OP_OPR_ALIVE cpu_to_le16(0x0010) 57ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define OP_OPR_CMD_ACK cpu_to_le16(0x001F) 58ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define OP_OPR_CMD_NACK cpu_to_le16(0x0020) 59ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define OP_TST_MEM_DUMP cpu_to_le16(0x0043) 60ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 61ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define CMD_FLAG_PADDING_256 0x80 62ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 63ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#define FW_HCMD_BLOCK_SIZE 256 64ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 65ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winklerstruct msg_hdr { 66ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler u8 type; 67ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler u8 category; 68ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler __le16 opcode; 69ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler u8 seqnum; 70ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler u8 flags; 71ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler __le16 length; 72ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler} __attribute__((__packed__)); 73ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 74ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winklerstruct log_hdr { 75ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler __le32 timestamp; 76ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler u8 severity; 77ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler u8 logsource; 78ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler __le16 reserved; 79ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler} __attribute__((__packed__)); 80ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 81ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winklerstruct mdump_hdr { 82ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler u8 dmpid; 83ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler u8 frag; 84ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler __le16 size; 85ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler __le32 addr; 86ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler} __attribute__((__packed__)); 87ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 88ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winklerstruct top_msg { 89ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler struct msg_hdr hdr; 90ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler union { 91ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler /* D2H messages */ 92ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler struct { 93ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler struct log_hdr log_hdr; 94ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler u8 data[1]; 95ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler } __attribute__((__packed__)) log; 96ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 97ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler struct { 98ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler struct log_hdr log_hdr; 99ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler struct mdump_hdr md_hdr; 100ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler u8 data[1]; 101ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler } __attribute__((__packed__)) mdump; 102ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 103ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler /* H2D messages */ 104ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler struct { 105ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler u8 logsource; 106ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler u8 sevmask; 107ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler } __attribute__((__packed__)) logdefs[FW_LOG_SRC_MAX]; 108ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler struct mdump_hdr mdump_req; 109ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler } u; 110ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler} __attribute__((__packed__)); 111ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 112ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler 113ab69a5ae2bdc0b5e20e935a7b75f30aa3f4c3baeTomas Winkler#endif /* __FWMSG_H__ */ 114