/* Copyright (c) 2014-2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #undef TRACE_SYSTEM #define TRACE_SYSTEM rmnet_data #define TRACE_INCLUDE_FILE rmnet_data_trace #if !defined(_TRACE_MSM_LOW_POWER_H_) || defined(TRACE_HEADER_MULTI_READ) #define _RMNET_DATA_TRACE_H_ #include #include #include DECLARE_EVENT_CLASS(rmnet_handler_template, TP_PROTO(struct sk_buff *skb), TP_ARGS(skb), TP_STRUCT__entry( __field(void *, skbaddr) __field(unsigned int, len) __string(name, skb->dev->name) ), TP_fast_assign( __entry->skbaddr = skb; __entry->len = skb->len; __assign_str(name, skb->dev->name); ), TP_printk("dev=%s skbaddr=%pK len=%u", __get_str(name), __entry->skbaddr, __entry->len) ) DEFINE_EVENT(rmnet_handler_template, rmnet_egress_handler, TP_PROTO(struct sk_buff *skb), TP_ARGS(skb) ); DEFINE_EVENT(rmnet_handler_template, rmnet_ingress_handler, TP_PROTO(struct sk_buff *skb), TP_ARGS(skb) ); DEFINE_EVENT(rmnet_handler_template, rmnet_vnd_start_xmit, TP_PROTO(struct sk_buff *skb), TP_ARGS(skb) ); DEFINE_EVENT(rmnet_handler_template, __rmnet_deliver_skb, TP_PROTO(struct sk_buff *skb), TP_ARGS(skb) ); DECLARE_EVENT_CLASS(rmnet_tc_fc_template, TP_PROTO(u32 tcm_handle, int qdisc_len, int is_enable), TP_ARGS(tcm_handle, qdisc_len, is_enable), TP_STRUCT__entry( __field(u32, handle) __field(int, qlen) __field(int, enable) ), TP_fast_assign( __entry->handle = tcm_handle; __entry->qlen = qdisc_len; __entry->enable = is_enable; ), TP_printk("tcm_handle=%d qdisc length=%d flow %s", __entry->handle, __entry->qlen, __entry->enable ? "enable" : "disable") ) DEFINE_EVENT(rmnet_tc_fc_template, rmnet_fc_qmi, TP_PROTO(u32 tcm_handle, int qdisc_len, int is_enable), TP_ARGS(tcm_handle, qdisc_len, is_enable) ); DEFINE_EVENT(rmnet_tc_fc_template, rmnet_fc_map, TP_PROTO(u32 tcm_handle, int qdisc_len, int is_enable), TP_ARGS(tcm_handle, qdisc_len, is_enable) ); DECLARE_EVENT_CLASS(rmnet_aggregation_template, TP_PROTO(struct sk_buff *skb, int num_agg_pakcets), TP_ARGS(skb, num_agg_pakcets), TP_STRUCT__entry( __field(void *, skbaddr) __field(unsigned int, len) __string(name, skb->dev->name) __field(int, num) ), TP_fast_assign( __entry->skbaddr = skb; __entry->len = skb->len; __assign_str(name, skb->dev->name); __entry->num = num_agg_pakcets; ), TP_printk("dev=%s skbaddr=%pK len=%u agg_count: %d", __get_str(name), __entry->skbaddr, __entry->len, __entry->num) ) DEFINE_EVENT(rmnet_aggregation_template, rmnet_map_aggregate, TP_PROTO(struct sk_buff *skb, int num_agg_pakcets), TP_ARGS(skb, num_agg_pakcets) ); DEFINE_EVENT(rmnet_aggregation_template, rmnet_map_flush_packet_queue, TP_PROTO(struct sk_buff *skb, int num_agg_pakcets), TP_ARGS(skb, num_agg_pakcets) ); TRACE_EVENT(rmnet_start_aggregation, TP_PROTO(struct sk_buff *skb), TP_ARGS(skb), TP_STRUCT__entry( __string(name, skb->dev->name) ), TP_fast_assign( __assign_str(name, skb->dev->name); ), TP_printk("dev: %s, aggregated first packet", __get_str(name)) ) TRACE_EVENT(rmnet_start_deaggregation, TP_PROTO(struct sk_buff *skb), TP_ARGS(skb), TP_STRUCT__entry( __string(name, skb->dev->name) ), TP_fast_assign( __assign_str(name, skb->dev->name); ), TP_printk("dev: %s, deaggregated first packet", __get_str(name)) ) TRACE_EVENT(rmnet_end_deaggregation, TP_PROTO(struct sk_buff *skb, int num_deagg_packets), TP_ARGS(skb, num_deagg_packets), TP_STRUCT__entry( __string(name, skb->dev->name) __field(int, num) ), TP_fast_assign( __assign_str(name, skb->dev->name); __entry->num = num_deagg_packets; ), TP_printk("dev: %s, deaggregate end count: %d", __get_str(name), __entry->num) ) TRACE_EVENT(rmnet_map_checksum_downlink_packet, TP_PROTO(struct sk_buff *skb, int ckresult), TP_ARGS(skb, ckresult), TP_STRUCT__entry( __string(name, skb->dev->name) __field(int, res) ), TP_fast_assign( __assign_str(name, skb->dev->name); __entry->res = ckresult; ), TP_printk("DL checksum on dev=%s, res: %d", __get_str(name), __entry->res) ) TRACE_EVENT(rmnet_map_checksum_uplink_packet, TP_PROTO(struct net_device *dev, int ckresult), TP_ARGS(dev, ckresult), TP_STRUCT__entry( __string(name, dev->name) __field(int, res) ), TP_fast_assign( __assign_str(name, dev->name); __entry->res = ckresult; ), TP_printk("UL checksum on dev=%s, res: %d", __get_str(name), __entry->res) ) DECLARE_EVENT_CLASS(rmnet_physdev_action_template, TP_PROTO(struct net_device *dev), TP_ARGS(dev), TP_STRUCT__entry( __string(name, dev->name) ), TP_fast_assign( __assign_str(name, dev->name); ), TP_printk("Physical dev=%s", __get_str(name)) ) DEFINE_EVENT(rmnet_physdev_action_template, rmnet_unregister_cb_unhandled, TP_PROTO(struct net_device *dev), TP_ARGS(dev) ); DEFINE_EVENT(rmnet_physdev_action_template, rmnet_unregister_cb_entry, TP_PROTO(struct net_device *dev), TP_ARGS(dev) ); DEFINE_EVENT(rmnet_physdev_action_template, rmnet_unregister_cb_exit, TP_PROTO(struct net_device *dev), TP_ARGS(dev) ); DEFINE_EVENT(rmnet_physdev_action_template, rmnet_unregister_cb_clear_vnds, TP_PROTO(struct net_device *dev), TP_ARGS(dev) ); DEFINE_EVENT(rmnet_physdev_action_template, rmnet_unregister_cb_clear_lepcs, TP_PROTO(struct net_device *dev), TP_ARGS(dev) ); DEFINE_EVENT(rmnet_physdev_action_template, rmnet_associate, TP_PROTO(struct net_device *dev), TP_ARGS(dev) ); DEFINE_EVENT(rmnet_physdev_action_template, rmnet_unassociate, TP_PROTO(struct net_device *dev), TP_ARGS(dev) ); TRACE_EVENT(rmnet_gro_downlink, TP_PROTO(gro_result_t gro_res), TP_ARGS(gro_res), TP_STRUCT__entry( __field(gro_result_t, res) ), TP_fast_assign( __entry->res = gro_res; ), TP_printk("GRO res: %d", __entry->res) ) #endif /* _RMNET_DATA_TRACE_H_ */ /* This part must be outside protection */ #undef TRACE_INCLUDE_PATH #define TRACE_INCLUDE_PATH . #include