130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Intel Wireless WiMax Connection 2400m 330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Host-Device protocol interface definitions 430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (C) 2007-2008 Intel Corporation. All rights reserved. 730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Redistribution and use in source and binary forms, with or without 930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * modification, are permitted provided that the following conditions 1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * are met: 1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * * Redistributions of source code must retain the above copyright 1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * notice, this list of conditions and the following disclaimer. 1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * * Redistributions in binary form must reproduce the above copyright 1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * notice, this list of conditions and the following disclaimer in 1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the documentation and/or other materials provided with the 1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * distribution. 1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * * Neither the name of Intel Corporation nor the names of its 1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * contributors may be used to endorse or promote products derived 2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * from this software without specific prior written permission. 2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Intel Corporation <linux-wimax@intel.com> 3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> 3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - Initial implementation 3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This header defines the data structures and constants used to 4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * communicate with the device. 4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * BOOTMODE/BOOTROM/FIRMWARE UPLOAD PROTOCOL 4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The firmware upload protocol is quite simple and only requires a 4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * handful of commands. See drivers/net/wimax/i2400m/fw.c for more 4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * details. 4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The BCF data structure is for the firmware file header. 5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * THE DATA / CONTROL PROTOCOL 5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This is the normal protocol spoken with the device once the 5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * firmware is uploaded. It transports data payloads and control 5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * messages back and forth. 5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * It consists 'messages' that pack one or more payloads each. The 5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * format is described in detail in drivers/net/wimax/i2400m/rx.c and 6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * tx.c. 6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * THE L3L4 PROTOCOL 6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The term L3L4 refers to Layer 3 (the device), Layer 4 (the 6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * driver/host software). 6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This is the control protocol used by the host to control the i2400m 6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * device (scan, connect, disconnect...). This is sent to / received 7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * as control frames. These frames consist of a header and zero or 7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * more TLVs with information. We call each control frame a "message". 7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Each message is composed of: 7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * HEADER 7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * [TLV0 + PAYLOAD0] 7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * [TLV1 + PAYLOAD1] 7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * [...] 7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * [TLVN + PAYLOADN] 8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The HEADER is defined by 'struct i2400m_l3l4_hdr'. The payloads are 8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * defined by a TLV structure (Type Length Value) which is a 'header' 8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * (struct i2400m_tlv_hdr) and then the payload. 8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * All integers are represented as Little Endian. 8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - REQUESTS AND EVENTS 8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The requests can be clasified as follows: 9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * COMMAND: implies a request from the host to the device requesting 9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * an action being performed. The device will reply with a 9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * message (with the same type as the command), status and 9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * no (TLV) payload. Execution of a command might cause 9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * events (of different type) to be sent later on as 9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * device's state changes. 9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * GET/SET: similar to COMMAND, but will not cause other 9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * EVENTs. The reply, in the case of GET, will contain 10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * TLVs with the requested information. 10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * EVENT: asynchronous messages sent from the device, maybe as a 10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * consequence of previous COMMANDs but disassociated from 10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * them. 10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Only one request might be pending at the same time (ie: don't 10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * parallelize nor post another GET request before the previous 10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * COMMAND has been acknowledged with it's corresponding reply by the 10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * device). 11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The different requests and their formats are described below: 11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * I2400M_MT_* Message types 11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * I2400M_MS_* Message status (for replies, events) 11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * i2400m_tlv_* TLVs 11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * data types are named 'struct i2400m_msg_OPNAME', OPNAME matching the 11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * operation. 11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef __LINUX__WIMAX__I2400M_H__ 12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define __LINUX__WIMAX__I2400M_H__ 12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h> 125e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#include <linux/if_ether.h> 12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Host Device Interface (HDI) common to all busses 12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Boot-mode (firmware upload mode) commands */ 13230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 13330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Header for the firmware file */ 13430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_bcf_hdr { 13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 module_type; 13630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 header_len; 13730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 header_version; 13830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 module_id; 13930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 module_vendor; 14030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 date; /* BCD YYYMMDD */ 14130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 size; /* in dwords */ 14230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 key_size; /* in dwords */ 14330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 modulus_size; /* in dwords */ 14430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 exponent_size; /* in dwords */ 14530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 reserved[88]; 14630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__ ((packed)); 14730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 14830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Boot mode opcodes */ 14930692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum i2400m_brh_opcode { 15030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_READ = 1, 15130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_WRITE = 2, 15230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_JUMP = 3, 15330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_SIGNED_JUMP = 8, 15430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_HASH_PAYLOAD_ONLY = 9, 15530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 15630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 15730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Boot mode command masks and stuff */ 15830692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum i2400m_brh { 15930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_SIGNATURE = 0xcbbc0000, 16030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_SIGNATURE_MASK = 0xffff0000, 16130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_SIGNATURE_SHIFT = 16, 16230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_OPCODE_MASK = 0x0000000f, 16330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_RESPONSE_MASK = 0x000000f0, 16430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_RESPONSE_SHIFT = 4, 16530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_DIRECT_ACCESS = 0x00000400, 16630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_RESPONSE_REQUIRED = 0x00000200, 16730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_BRH_USE_CHECKSUM = 0x00000100, 16830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 16930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 17030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 17130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 17230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * i2400m_bootrom_header - Header for a boot-mode command 17330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 17430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @cmd: the above command descriptor 17530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @target_addr: where on the device memory should the action be performed. 17630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @data_size: for read/write, amount of data to be read/written 17730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @block_checksum: checksum value (if applicable) 17830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @payload: the beginning of data attached to this header 17930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 18030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_bootrom_header { 18130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 command; /* Compose with enum i2400_brh */ 18230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 target_addr; 18330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 data_size; 18430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 block_checksum; 18530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng char payload[0]; 18630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__ ((packed)); 18730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 18830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 18930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 19030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Data / control protocol 19130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 19230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 19330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Packet types for the host-device interface */ 19430692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum i2400m_pt { 19530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_PT_DATA = 0, 19630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_PT_CTRL, 19730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_PT_TRACE, /* For device debug */ 19830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_PT_RESET_WARM, /* device reset */ 19930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_PT_RESET_COLD, /* USB[transport] reset, like reconnect */ 20030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_PT_EDATA, /* Extended RX data */ 20130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_PT_ILLEGAL 20230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 20330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 20430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 20530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 20630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Payload for a data packet 20730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 20830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This is prefixed to each and every outgoing DATA type. 20930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 21030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_pl_data_hdr { 21130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 reserved; 21230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 21330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 21430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 21530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 21630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Payload for an extended data packet 21730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 21830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * New in fw v1.4 21930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 22030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @reorder: if this payload has to be reorder or not (and how) 22130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @cs: the type of data in the packet, as defined per (802.16e 22230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * T11.13.19.1). Currently only 2 (IPv4 packet) supported. 22330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 22430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This is prefixed to each and every INCOMING DATA packet. 22530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 22630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_pl_edata_hdr { 22730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 reorder; /* bits defined in i2400m_ro */ 22830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 cs; 22930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 reserved[11]; 23030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 23130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 23230692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum i2400m_cs { 23330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_CS_IPV4_0 = 0, 23430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_CS_IPV4 = 2, 23530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 23630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 23730692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum i2400m_ro { 23830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RO_NEEDED = 0x01, 23930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RO_TYPE = 0x03, 24030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RO_TYPE_SHIFT = 1, 24130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RO_CIN = 0x0f, 24230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RO_CIN_SHIFT = 4, 24330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RO_FBN = 0x07ff, 24430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RO_FBN_SHIFT = 8, 24530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RO_SN = 0x07ff, 24630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RO_SN_SHIFT = 21, 24730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 24830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 24930692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum i2400m_ro_type { 25030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RO_TYPE_RESET = 0, 25130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RO_TYPE_PACKET, 25230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RO_TYPE_WS, 25330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RO_TYPE_PACKET_WS, 25430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 25530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 25630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 25730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Misc constants */ 25830692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum { 25930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_PL_ALIGN = 16, /* Payload data size alignment */ 26030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_PL_SIZE_MAX = 0x3EFF, 26130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MAX_PLS_IN_MSG = 60, 26230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* protocol barkers: sync sequences; for notifications they 26330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * are sent in groups of four. */ 26430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_H2D_PREVIEW_BARKER = 0xcafe900d, 26530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_COLD_RESET_BARKER = 0xc01dc01d, 26630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_WARM_RESET_BARKER = 0x50f750f7, 26730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_NBOOT_BARKER = 0xdeadbeef, 26830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SBOOT_BARKER = 0x0ff1c1a1, 26930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SBOOT_BARKER_6050 = 0x80000001, 27030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_ACK_BARKER = 0xfeedbabe, 27130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_D2H_MSG_BARKER = 0xbeefbabe, 27230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 27330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 27430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 27530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 27630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Hardware payload descriptor 27730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 27830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Bitfields encoded in a struct to enforce typing semantics. 27930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 28030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Look in rx.c and tx.c for a full description of the format. 28130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 28230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_pld { 28330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 val; 28430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__ ((packed)); 28530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 28630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define I2400M_PLD_SIZE_MASK 0x00003fff 28730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define I2400M_PLD_TYPE_SHIFT 16 28830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define I2400M_PLD_TYPE_MASK 0x000f0000 28930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 29030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 29130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Header for a TX message or RX message 29230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 29330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @barker: preamble 29430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @size: used for management of the FIFO queue buffer; before 29530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * sending, this is converted to be a real preamble. This 29630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * indicates the real size of the TX message that starts at this 29730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * point. If the highest bit is set, then this message is to be 29830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * skipped. 29930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @sequence: sequence number of this message 30030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @offset: offset where the message itself starts -- see the comments 30130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * in the file header about message header and payload descriptor 30230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * alignment. 30330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @num_pls: number of payloads in this message 30430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @padding: amount of padding bytes at the end of the message to make 30530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * it be of block-size aligned 30630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 30730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Look in rx.c and tx.c for a full description of the format. 30830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 30930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_msg_hdr { 31030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng union { 31130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 barker; 31230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 size; /* same size type as barker!! */ 31330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng }; 31430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng union { 31530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 sequence; 31630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 offset; /* same size type as barker!! */ 31730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng }; 31830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 num_pls; 31930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 rsv1; 32030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 padding; 32130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 rsv2; 32230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct i2400m_pld pld[0]; 32330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__ ((packed)); 32430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 32530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 32630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 32730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 32830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * L3/L4 control protocol 32930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 33030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 33130692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum { 33230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* Interface version */ 33330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_L3L4_VERSION = 0x0100, 33430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 33530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 33630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Message types */ 33730692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum i2400m_mt { 33830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_RESERVED = 0x0000, 33930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_INVALID = 0xffff, 34030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_REPORT_MASK = 0x8000, 34130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 34230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_GET_SCAN_RESULT = 0x4202, 34330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_SET_SCAN_PARAM = 0x4402, 34430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_CMD_RF_CONTROL = 0x4602, 34530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_CMD_SCAN = 0x4603, 34630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_CMD_CONNECT = 0x4604, 34730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_CMD_DISCONNECT = 0x4605, 34830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_CMD_EXIT_IDLE = 0x4606, 34930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_GET_LM_VERSION = 0x5201, 35030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_GET_DEVICE_INFO = 0x5202, 35130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_GET_LINK_STATUS = 0x5203, 35230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_GET_STATISTICS = 0x5204, 35330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_GET_STATE = 0x5205, 35430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_GET_MEDIA_STATUS = 0x5206, 35530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_SET_INIT_CONFIG = 0x5404, 35630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_CMD_INIT = 0x5601, 35730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_CMD_TERMINATE = 0x5602, 35830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_CMD_MODE_OF_OP = 0x5603, 35930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_CMD_RESET_DEVICE = 0x5604, 36030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_CMD_MONITOR_CONTROL = 0x5605, 36130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_CMD_ENTER_POWERSAVE = 0x5606, 36230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_GET_TLS_OPERATION_RESULT = 0x6201, 36330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_SET_EAP_SUCCESS = 0x6402, 36430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_SET_EAP_FAIL = 0x6403, 36530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_SET_EAP_KEY = 0x6404, 36630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_CMD_SEND_EAP_RESPONSE = 0x6602, 36730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_REPORT_SCAN_RESULT = 0xc002, 36830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_REPORT_STATE = 0xd002, 36930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_REPORT_POWERSAVE_READY = 0xd005, 37030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_REPORT_EAP_REQUEST = 0xe002, 37130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_REPORT_EAP_RESTART = 0xe003, 37230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_REPORT_ALT_ACCEPT = 0xe004, 37330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MT_REPORT_KEY_REQUEST = 0xe005, 37430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 37530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 37630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 37730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 37830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Message Ack Status codes 37930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 38030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * When a message is replied-to, this status is reported. 38130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 38230692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum i2400m_ms { 38330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_DONE_OK = 0, 38430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_DONE_IN_PROGRESS = 1, 38530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_INVALID_OP = 2, 38630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_BAD_STATE = 3, 38730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_ILLEGAL_VALUE = 4, 38830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_MISSING_PARAMS = 5, 38930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_VERSION_ERROR = 6, 39030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_ACCESSIBILITY_ERROR = 7, 39130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_BUSY = 8, 39230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_CORRUPTED_TLV = 9, 39330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_UNINITIALIZED = 10, 39430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_UNKNOWN_ERROR = 11, 39530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_PRODUCTION_ERROR = 12, 39630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_NO_RF = 13, 39730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_NOT_READY_FOR_POWERSAVE = 14, 39830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_THERMAL_CRITICAL = 15, 39930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MS_MAX 40030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 40130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 40230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 40330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 40430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * i2400m_tlv - enumeration of the different types of TLVs 40530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 40630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * TLVs stand for type-length-value and are the header for a payload 40730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * composed of almost anything. Each payload has a type assigned 40830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * and a length. 40930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 41030692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum i2400m_tlv { 41130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_TLV_L4_MESSAGE_VERSIONS = 129, 41230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_TLV_SYSTEM_STATE = 141, 41330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_TLV_MEDIA_STATUS = 161, 41430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_TLV_RF_OPERATION = 162, 41530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_TLV_RF_STATUS = 163, 41630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_TLV_DEVICE_RESET_TYPE = 132, 41730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_TLV_CONFIG_IDLE_PARAMETERS = 601, 41830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_TLV_CONFIG_IDLE_TIMEOUT = 611, 41930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_TLV_CONFIG_D2H_DATA_FORMAT = 614, 42030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_TLV_CONFIG_DL_HOST_REORDER = 615, 42130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 42230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 42330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 42430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_tlv_hdr { 42530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 type; 42630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 length; /* payload's */ 42730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 pl[0]; 42830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 42930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 43030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 43130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_l3l4_hdr { 43230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 type; 43330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 length; /* payload's */ 43430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 version; 43530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 resv1; 43630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 status; 43730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 resv2; 43830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct i2400m_tlv_hdr pl[0]; 43930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 44030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 44130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 44230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 44330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * i2400m_system_state - different states of the device 44430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 44530692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum i2400m_system_state { 44630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_UNINITIALIZED = 1, 44730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_INIT, 44830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_READY, 44930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_SCAN, 45030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_STANDBY, 45130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_CONNECTING, 45230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_WIMAX_CONNECTED, 45330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_DATA_PATH_CONNECTED, 45430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_IDLE, 45530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_DISCONNECTING, 45630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_OUT_OF_ZONE, 45730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_SLEEPACTIVE, 45830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_PRODUCTION, 45930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_CONFIG, 46030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_RF_OFF, 46130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_RF_SHUTDOWN, 46230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_DEVICE_DISCONNECT, 46330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_SS_MAX, 46430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 46530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 46630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 46730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 46830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * i2400m_tlv_system_state - report on the state of the system 46930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 47030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @state: see enum i2400m_system_state 47130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 47230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_tlv_system_state { 47330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct i2400m_tlv_hdr hdr; 47430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 state; 47530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 47630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 47730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 47830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_tlv_l4_message_versions { 47930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct i2400m_tlv_hdr hdr; 48030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 major; 48130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 minor; 48230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 branch; 48330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le16 reserved; 48430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 48530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 48630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 48730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_tlv_detailed_device_info { 48830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct i2400m_tlv_hdr hdr; 48930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 reserved1[400]; 490e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl __u8 mac_address[ETH_ALEN]; 49130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 reserved2[2]; 49230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 49330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 49430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 49530692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum i2400m_rf_switch_status { 49630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RF_SWITCH_ON = 1, 49730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RF_SWITCH_OFF = 2, 49830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 49930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 50030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_tlv_rf_switches_status { 50130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct i2400m_tlv_hdr hdr; 50230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 sw_rf_switch; /* 1 ON, 2 OFF */ 50330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 hw_rf_switch; /* 1 ON, 2 OFF */ 50430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 reserved[2]; 50530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 50630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 50730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 50830692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum { 50930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng i2400m_rf_operation_on = 1, 51030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng i2400m_rf_operation_off = 2 51130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 51230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 51330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_tlv_rf_operation { 51430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct i2400m_tlv_hdr hdr; 51530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 status; /* 1 ON, 2 OFF */ 51630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 51730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 51830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 51930692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum i2400m_tlv_reset_type { 52030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RESET_TYPE_COLD = 1, 52130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_RESET_TYPE_WARM 52230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 52330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 52430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_tlv_device_reset_type { 52530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct i2400m_tlv_hdr hdr; 52630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 reset_type; 52730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 52830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 52930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 53030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_tlv_config_idle_parameters { 53130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct i2400m_tlv_hdr hdr; 53230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 idle_timeout; /* 100 to 300000 ms [5min], 100 increments 53330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 0 disabled */ 53430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 idle_paging_interval; /* frames */ 53530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 53630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 53730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 53830692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum i2400m_media_status { 53930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MEDIA_STATUS_LINK_UP = 1, 54030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MEDIA_STATUS_LINK_DOWN, 54130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng I2400M_MEDIA_STATUS_LINK_RENEW, 54230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 54330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 54430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_tlv_media_status { 54530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct i2400m_tlv_hdr hdr; 54630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 media_status; 54730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 54830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 54930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 55030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* New in v1.4 */ 55130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_tlv_config_idle_timeout { 55230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct i2400m_tlv_hdr hdr; 55330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __le32 timeout; /* 100 to 300000 ms [5min], 100 increments 55430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 0 disabled */ 55530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 55630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 55730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* New in v1.4 -- for backward compat, will be removed */ 55830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_tlv_config_d2h_data_format { 55930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct i2400m_tlv_hdr hdr; 56030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 format; /* 0 old format, 1 enhanced */ 56130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 reserved[3]; 56230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 56330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 56430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* New in v1.4 */ 56530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct i2400m_tlv_config_dl_host_reorder { 56630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct i2400m_tlv_hdr hdr; 56730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 reorder; /* 0 disabled, 1 enabled */ 56830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 reserved[3]; 56930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 57030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 57130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 57230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* #ifndef __LINUX__WIMAX__I2400M_H__ */ 573