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