1/****************************************************************************** 2 * 3 * Copyright(c) 2009 - 2014 Intel Corporation. All rights reserved. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of version 2 of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 * 14 * You should have received a copy of the GNU General Public License along with 15 * this program; if not, write to the Free Software Foundation, Inc., 16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 17 * 18 * The full GNU General Public License is included in this distribution in the 19 * file called LICENSE. 20 * 21 * Contact Information: 22 * Intel Linux Wireless <ilw@linux.intel.com> 23 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 24 * 25 *****************************************************************************/ 26 27#ifndef __IWLWIFI_DEVICE_TRACE 28#include <linux/skbuff.h> 29#include <linux/ieee80211.h> 30#include <net/cfg80211.h> 31#include "iwl-trans.h" 32#if !defined(__IWLWIFI_DEVICE_TRACE) 33static inline bool iwl_trace_data(struct sk_buff *skb) 34{ 35 struct ieee80211_hdr *hdr = (void *)skb->data; 36 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 37 38 if (!ieee80211_is_data(hdr->frame_control)) 39 return false; 40 return !(info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO); 41} 42 43static inline size_t iwl_rx_trace_len(const struct iwl_trans *trans, 44 void *rxbuf, size_t len) 45{ 46 struct iwl_cmd_header *cmd = (void *)((u8 *)rxbuf + sizeof(__le32)); 47 struct ieee80211_hdr *hdr; 48 49 if (cmd->cmd != trans->rx_mpdu_cmd) 50 return len; 51 52 hdr = (void *)((u8 *)cmd + sizeof(struct iwl_cmd_header) + 53 trans->rx_mpdu_cmd_hdr_size); 54 if (!ieee80211_is_data(hdr->frame_control)) 55 return len; 56 /* maybe try to identify EAPOL frames? */ 57 return sizeof(__le32) + sizeof(*cmd) + trans->rx_mpdu_cmd_hdr_size + 58 ieee80211_hdrlen(hdr->frame_control); 59} 60#endif 61 62#define __IWLWIFI_DEVICE_TRACE 63 64#include <linux/tracepoint.h> 65#include <linux/device.h> 66#include "iwl-trans.h" 67 68 69#if !defined(CONFIG_IWLWIFI_DEVICE_TRACING) || defined(__CHECKER__) 70#undef TRACE_EVENT 71#define TRACE_EVENT(name, proto, ...) \ 72static inline void trace_ ## name(proto) {} 73#undef DECLARE_EVENT_CLASS 74#define DECLARE_EVENT_CLASS(...) 75#undef DEFINE_EVENT 76#define DEFINE_EVENT(evt_class, name, proto, ...) \ 77static inline void trace_ ## name(proto) {} 78#endif 79 80#define DEV_ENTRY __string(dev, dev_name(dev)) 81#define DEV_ASSIGN __assign_str(dev, dev_name(dev)) 82 83#include "iwl-devtrace-io.h" 84#include "iwl-devtrace-ucode.h" 85#include "iwl-devtrace-msg.h" 86#include "iwl-devtrace-data.h" 87#include "iwl-devtrace-iwlwifi.h" 88 89#endif /* __IWLWIFI_DEVICE_TRACE */ 90