14d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn/* 29c9a0d145fee73b5e821bb460732ac2a66c680b3Gertjan van Wingerde Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com> 34d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn <http://rt2x00.serialmonkey.com> 44d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn 54d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn This program is free software; you can redistribute it and/or modify 64d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn it under the terms of the GNU General Public License as published by 74d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn the Free Software Foundation; either version 2 of the License, or 84d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn (at your option) any later version. 94d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn 104d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn This program is distributed in the hope that it will be useful, 114d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn but WITHOUT ANY WARRANTY; without even the implied warranty of 124d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 134d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn GNU General Public License for more details. 144d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn 154d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn You should have received a copy of the GNU General Public License 16a05b8c580c83a7bd4fce81f8d6af044e97e4a7a4Jeff Kirsher along with this program; if not, see <http://www.gnu.org/licenses/>. 174d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn */ 184d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn 194d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn/* 204d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn Module: rt2x00dump 21b4df47081b67bce9dcb7b84b551588c7402a330aGertjan van Wingerde Abstract: 22b4df47081b67bce9dcb7b84b551588c7402a330aGertjan van Wingerde Data structures for the rt2x00debug & userspace. 23b4df47081b67bce9dcb7b84b551588c7402a330aGertjan van Wingerde 24b4df47081b67bce9dcb7b84b551588c7402a330aGertjan van Wingerde The declarations in this file can be used by both rt2x00 25b4df47081b67bce9dcb7b84b551588c7402a330aGertjan van Wingerde and userspace and therefore should be kept together in 26b4df47081b67bce9dcb7b84b551588c7402a330aGertjan van Wingerde this file. 274d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn */ 284d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn 294d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn#ifndef RT2X00DUMP_H 304d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn#define RT2X00DUMP_H 314d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn 324d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn/** 334d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * DOC: Introduction 344d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * 354d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * This header is intended to be exported to userspace, 364d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * to make the structures and enumerations available to userspace 374d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * applications. This means that all data types should be exportable. 384d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * 394d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * When rt2x00 is compiled with debugfs support enabled, 404d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * it is possible to capture all data coming in and out of the device 414d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * by reading the frame dump file. This file can have only a single reader. 424d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * The following frames will be reported: 434d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * - All incoming frames (rx) 444d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * - All outgoing frames (tx, including beacon and atim) 454d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * - All completed frames (txdone including atim) 464d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * 474d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * The data is send to the file using the following format: 484d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * 494d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * [rt2x00dump header][hardware descriptor][ieee802.11 frame] 504d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * 514d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * rt2x00dump header: The description of the dumped frame, as well as 5225985edcedea6396277003854657b5f3cb31a628Lucas De Marchi * additional information useful for debugging. See &rt2x00dump_hdr. 534d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * hardware descriptor: Descriptor that was used to receive or transmit 544d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * the frame. 554d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * ieee802.11 frame: The actual frame that was received or transmitted. 564d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn */ 574d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn 584d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn/** 594d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * enum rt2x00_dump_type - Frame type 604d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * 614d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * These values are used for the @type member of &rt2x00dump_hdr. 624d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * @DUMP_FRAME_RXDONE: This frame has been received by the hardware. 634d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * @DUMP_FRAME_TX: This frame is queued for transmission to the hardware. 644d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * @DUMP_FRAME_TXDONE: This frame indicates the device has handled 654d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * the tx event which has either succeeded or failed. A frame 664d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * with this type should also have been reported with as a 674d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * %DUMP_FRAME_TX frame. 68185e5f77f891d5bc7a0d8c8eb2b1edf6c317edabGertjan van Wingerde * @DUMP_FRAME_BEACON: This beacon frame is queued for transmission to the 69185e5f77f891d5bc7a0d8c8eb2b1edf6c317edabGertjan van Wingerde * hardware. 704d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn */ 714d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doornenum rt2x00_dump_type { 724d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn DUMP_FRAME_RXDONE = 1, 734d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn DUMP_FRAME_TX = 2, 744d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn DUMP_FRAME_TXDONE = 3, 75185e5f77f891d5bc7a0d8c8eb2b1edf6c317edabGertjan van Wingerde DUMP_FRAME_BEACON = 4, 764d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn}; 774d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn 784d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn/** 794d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * struct rt2x00dump_hdr - Dump frame header 804d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * 814d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * Each frame dumped to the debugfs file starts with this header 824d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * attached. This header contains the description of the actual 834d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * frame which was dumped. 844d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * 854d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * New fields inside the structure must be appended to the end of 864d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * the structure. This way userspace tools compiled for earlier 874d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * header versions can still correctly handle the frame dump 884d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * (although they will not handle all data passed to them in the dump). 894d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * 904d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * @version: Header version should always be set to %DUMP_HEADER_VERSION. 914d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * This field must be checked by userspace to determine if it can 924d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * handle this frame. 934d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * @header_length: The length of the &rt2x00dump_hdr structure. This is 944d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * used for compatibility reasons so userspace can easily determine 954d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * the location of the next field in the dump. 964d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * @desc_length: The length of the device descriptor. 974d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * @data_length: The length of the frame data (including the ieee802.11 header. 984d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * @chip_rt: RT chipset 994d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * @chip_rf: RF chipset 1004d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * @chip_rev: Chipset revision 1014d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * @type: The frame type (&rt2x00_dump_type) 102181d6902b6bad978d157e69479c95cc0ff213a76Ivo van Doorn * @queue_index: The index number of the data queue. 103181d6902b6bad978d157e69479c95cc0ff213a76Ivo van Doorn * @entry_index: The index number of the entry inside the data queue. 1044d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * @timestamp_sec: Timestamp - seconds 1054d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn * @timestamp_usec: Timestamp - microseconds 1064d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn */ 1074d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doornstruct rt2x00dump_hdr { 1084d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn __le32 version; 1094d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn#define DUMP_HEADER_VERSION 2 1104d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn 1114d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn __le32 header_length; 1124d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn __le32 desc_length; 1134d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn __le32 data_length; 1144d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn 1154d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn __le16 chip_rt; 1164d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn __le16 chip_rf; 11716124541321e3c4030973b34b3f013605f052679John W. Linville __le16 chip_rev; 1184d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn 1194d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn __le16 type; 120181d6902b6bad978d157e69479c95cc0ff213a76Ivo van Doorn __u8 queue_index; 1214d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn __u8 entry_index; 1224d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn 1234d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn __le32 timestamp_sec; 1244d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn __le32 timestamp_usec; 1254d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn}; 1264d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn 1274d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71Ivo van Doorn#endif /* RT2X00DUMP_H */ 128