133aca94dSKalle Valo /* 233aca94dSKalle Valo Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com> 333aca94dSKalle Valo <http://rt2x00.serialmonkey.com> 433aca94dSKalle Valo 533aca94dSKalle Valo This program is free software; you can redistribute it and/or modify 633aca94dSKalle Valo it under the terms of the GNU General Public License as published by 733aca94dSKalle Valo the Free Software Foundation; either version 2 of the License, or 833aca94dSKalle Valo (at your option) any later version. 933aca94dSKalle Valo 1033aca94dSKalle Valo This program is distributed in the hope that it will be useful, 1133aca94dSKalle Valo but WITHOUT ANY WARRANTY; without even the implied warranty of 1233aca94dSKalle Valo MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1333aca94dSKalle Valo GNU General Public License for more details. 1433aca94dSKalle Valo 1533aca94dSKalle Valo You should have received a copy of the GNU General Public License 1633aca94dSKalle Valo along with this program; if not, see <http://www.gnu.org/licenses/>. 1733aca94dSKalle Valo */ 1833aca94dSKalle Valo 1933aca94dSKalle Valo /* 2033aca94dSKalle Valo Module: rt2x00dump 2133aca94dSKalle Valo Abstract: 2233aca94dSKalle Valo Data structures for the rt2x00debug & userspace. 2333aca94dSKalle Valo 2433aca94dSKalle Valo The declarations in this file can be used by both rt2x00 2533aca94dSKalle Valo and userspace and therefore should be kept together in 2633aca94dSKalle Valo this file. 2733aca94dSKalle Valo */ 2833aca94dSKalle Valo 2933aca94dSKalle Valo #ifndef RT2X00DUMP_H 3033aca94dSKalle Valo #define RT2X00DUMP_H 3133aca94dSKalle Valo 3233aca94dSKalle Valo /** 3333aca94dSKalle Valo * DOC: Introduction 3433aca94dSKalle Valo * 3533aca94dSKalle Valo * This header is intended to be exported to userspace, 3633aca94dSKalle Valo * to make the structures and enumerations available to userspace 3733aca94dSKalle Valo * applications. This means that all data types should be exportable. 3833aca94dSKalle Valo * 3933aca94dSKalle Valo * When rt2x00 is compiled with debugfs support enabled, 4033aca94dSKalle Valo * it is possible to capture all data coming in and out of the device 4133aca94dSKalle Valo * by reading the frame dump file. This file can have only a single reader. 4233aca94dSKalle Valo * The following frames will be reported: 4333aca94dSKalle Valo * - All incoming frames (rx) 4433aca94dSKalle Valo * - All outgoing frames (tx, including beacon and atim) 4533aca94dSKalle Valo * - All completed frames (txdone including atim) 4633aca94dSKalle Valo * 4733aca94dSKalle Valo * The data is send to the file using the following format: 4833aca94dSKalle Valo * 4933aca94dSKalle Valo * [rt2x00dump header][hardware descriptor][ieee802.11 frame] 5033aca94dSKalle Valo * 5133aca94dSKalle Valo * rt2x00dump header: The description of the dumped frame, as well as 5233aca94dSKalle Valo * additional information useful for debugging. See &rt2x00dump_hdr. 5333aca94dSKalle Valo * hardware descriptor: Descriptor that was used to receive or transmit 5433aca94dSKalle Valo * the frame. 5533aca94dSKalle Valo * ieee802.11 frame: The actual frame that was received or transmitted. 5633aca94dSKalle Valo */ 5733aca94dSKalle Valo 5833aca94dSKalle Valo /** 5933aca94dSKalle Valo * enum rt2x00_dump_type - Frame type 6033aca94dSKalle Valo * 6133aca94dSKalle Valo * These values are used for the @type member of &rt2x00dump_hdr. 6233aca94dSKalle Valo * @DUMP_FRAME_RXDONE: This frame has been received by the hardware. 6333aca94dSKalle Valo * @DUMP_FRAME_TX: This frame is queued for transmission to the hardware. 6433aca94dSKalle Valo * @DUMP_FRAME_TXDONE: This frame indicates the device has handled 6533aca94dSKalle Valo * the tx event which has either succeeded or failed. A frame 6633aca94dSKalle Valo * with this type should also have been reported with as a 6733aca94dSKalle Valo * %DUMP_FRAME_TX frame. 6833aca94dSKalle Valo * @DUMP_FRAME_BEACON: This beacon frame is queued for transmission to the 6933aca94dSKalle Valo * hardware. 7033aca94dSKalle Valo */ 7133aca94dSKalle Valo enum rt2x00_dump_type { 7233aca94dSKalle Valo DUMP_FRAME_RXDONE = 1, 7333aca94dSKalle Valo DUMP_FRAME_TX = 2, 7433aca94dSKalle Valo DUMP_FRAME_TXDONE = 3, 7533aca94dSKalle Valo DUMP_FRAME_BEACON = 4, 7633aca94dSKalle Valo }; 7733aca94dSKalle Valo 7833aca94dSKalle Valo /** 7933aca94dSKalle Valo * struct rt2x00dump_hdr - Dump frame header 8033aca94dSKalle Valo * 8133aca94dSKalle Valo * Each frame dumped to the debugfs file starts with this header 8233aca94dSKalle Valo * attached. This header contains the description of the actual 8333aca94dSKalle Valo * frame which was dumped. 8433aca94dSKalle Valo * 8533aca94dSKalle Valo * New fields inside the structure must be appended to the end of 8633aca94dSKalle Valo * the structure. This way userspace tools compiled for earlier 8733aca94dSKalle Valo * header versions can still correctly handle the frame dump 8833aca94dSKalle Valo * (although they will not handle all data passed to them in the dump). 8933aca94dSKalle Valo * 9033aca94dSKalle Valo * @version: Header version should always be set to %DUMP_HEADER_VERSION. 9133aca94dSKalle Valo * This field must be checked by userspace to determine if it can 9233aca94dSKalle Valo * handle this frame. 9333aca94dSKalle Valo * @header_length: The length of the &rt2x00dump_hdr structure. This is 9433aca94dSKalle Valo * used for compatibility reasons so userspace can easily determine 9533aca94dSKalle Valo * the location of the next field in the dump. 9633aca94dSKalle Valo * @desc_length: The length of the device descriptor. 9733aca94dSKalle Valo * @data_length: The length of the frame data (including the ieee802.11 header. 9833aca94dSKalle Valo * @chip_rt: RT chipset 9933aca94dSKalle Valo * @chip_rf: RF chipset 10033aca94dSKalle Valo * @chip_rev: Chipset revision 10133aca94dSKalle Valo * @type: The frame type (&rt2x00_dump_type) 10233aca94dSKalle Valo * @queue_index: The index number of the data queue. 10333aca94dSKalle Valo * @entry_index: The index number of the entry inside the data queue. 10433aca94dSKalle Valo * @timestamp_sec: Timestamp - seconds 10533aca94dSKalle Valo * @timestamp_usec: Timestamp - microseconds 10633aca94dSKalle Valo */ 10733aca94dSKalle Valo struct rt2x00dump_hdr { 10833aca94dSKalle Valo __le32 version; 10933aca94dSKalle Valo #define DUMP_HEADER_VERSION 2 11033aca94dSKalle Valo 11133aca94dSKalle Valo __le32 header_length; 11233aca94dSKalle Valo __le32 desc_length; 11333aca94dSKalle Valo __le32 data_length; 11433aca94dSKalle Valo 11533aca94dSKalle Valo __le16 chip_rt; 11633aca94dSKalle Valo __le16 chip_rf; 11733aca94dSKalle Valo __le16 chip_rev; 11833aca94dSKalle Valo 11933aca94dSKalle Valo __le16 type; 12033aca94dSKalle Valo __u8 queue_index; 12133aca94dSKalle Valo __u8 entry_index; 12233aca94dSKalle Valo 12333aca94dSKalle Valo __le32 timestamp_sec; 12433aca94dSKalle Valo __le32 timestamp_usec; 12533aca94dSKalle Valo }; 12633aca94dSKalle Valo 12733aca94dSKalle Valo #endif /* RT2X00DUMP_H */ 128