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