/* * Copyright (c) 2014, 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 ice40 #if !defined(_TRACE_ICE40_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_ICE40_H #include #include TRACE_EVENT(ice40_reg_write, TP_PROTO(u8 addr, u8 val, u8 cmd0, u8 cmd1, int ret), TP_ARGS(addr, val, cmd0, cmd1, ret), TP_STRUCT__entry( __field(u8, addr) __field(u8, val) __field(u8, cmd0) __field(u8, cmd1) __field(int, ret) ), TP_fast_assign( __entry->addr = addr; __entry->val = val; __entry->cmd0 = cmd0; __entry->cmd1 = cmd1; __entry->ret = ret; ), TP_printk("addr = %x val = %x cmd0 = %x cmd1 = %x ret = %d", __entry->addr, __entry->val, __entry->cmd0, __entry->cmd1, __entry->ret) ); TRACE_EVENT(ice40_reg_read, TP_PROTO(u8 addr, u8 cmd0, int ret), TP_ARGS(addr, cmd0, ret), TP_STRUCT__entry( __field(u8, addr) __field(u8, cmd0) __field(int, ret) ), TP_fast_assign( __entry->addr = addr; __entry->cmd0 = cmd0; __entry->ret = ret; ), TP_printk("addr = %x cmd0 = %x ret = %x", __entry->addr, __entry->cmd0, __entry->ret) ); TRACE_EVENT(ice40_hub_control, TP_PROTO(u16 req, u16 val, u16 index, u16 len, int ret), TP_ARGS(req, val, index, len, ret), TP_STRUCT__entry( __field(u16, req) __field(u16, val) __field(u16, index) __field(u16, len) __field(int, ret) ), TP_fast_assign( __entry->req = req; __entry->val = val; __entry->index = index; __entry->len = len; __entry->ret = ret; ), TP_printk("req = %x val = %x index = %x len = %x ret = %d", __entry->req, __entry->val, __entry->index, __entry->len, __entry->ret) ); TRACE_EVENT(ice40_ep0, TP_PROTO(const char *state), TP_ARGS(state), TP_STRUCT__entry( __string(state, state) ), TP_fast_assign( __assign_str(state, state); ), TP_printk("ep0 state: %s", __get_str(state)) ); TRACE_EVENT(ice40_urb_enqueue, TP_PROTO(struct urb *urb), TP_ARGS(urb), TP_STRUCT__entry( __field(u16, epnum) __field(u8, dir) __field(u8, type) __field(u32, len) ), TP_fast_assign( __entry->epnum = usb_pipeendpoint(urb->pipe); __entry->dir = usb_urb_dir_in(urb); __entry->type = usb_pipebulk(urb->pipe); __entry->len = urb->transfer_buffer_length; ), TP_printk("URB_LOG: E: ep %d %s %s len %d", __entry->epnum, __entry->dir ? "In" : "Out", __entry->type ? "Bulk" : "ctrl", __entry->len) ); TRACE_EVENT(ice40_urb_dequeue, TP_PROTO(struct urb *urb), TP_ARGS(urb), TP_STRUCT__entry( __field(u16, epnum) __field(u8, dir) __field(u8, type) __field(u32, len) __field(int, reason) ), TP_fast_assign( __entry->epnum = usb_pipeendpoint(urb->pipe); __entry->dir = usb_urb_dir_in(urb); __entry->type = usb_pipebulk(urb->pipe); __entry->len = urb->transfer_buffer_length; __entry->reason = urb->unlinked; ), TP_printk("URB_LOG: D: ep %d %s %s len %d reason %d", __entry->epnum, __entry->dir ? "In" : "Out", __entry->type ? "Bulk" : "ctrl", __entry->len, __entry->reason) ); TRACE_EVENT(ice40_urb_done, TP_PROTO(struct urb *urb, int result), TP_ARGS(urb, result), TP_STRUCT__entry( __field(int, result) __field(u16, epnum) __field(u8, dir) __field(u8, type) __field(u32, len) __field(u32, actual) ), TP_fast_assign( __entry->result = result; __entry->epnum = usb_pipeendpoint(urb->pipe); __entry->dir = usb_urb_dir_in(urb); __entry->type = usb_pipebulk(urb->pipe); __entry->len = urb->transfer_buffer_length; __entry->actual = urb->actual_length; ), TP_printk("URB_LOG: C: ep %d %s %s len %d actual %d result %d", __entry->epnum, __entry->dir ? "In" : "Out", __entry->type ? "Bulk" : "ctrl", __entry->len, __entry->actual, __entry->result) ); TRACE_EVENT(ice40_bus_suspend, TP_PROTO(u8 status), TP_ARGS(status), TP_STRUCT__entry( __field(u8, status) ), TP_fast_assign( __entry->status = status; ), TP_printk("bus_suspend status %d", __entry->status) ); TRACE_EVENT(ice40_bus_resume, TP_PROTO(u8 status), TP_ARGS(status), TP_STRUCT__entry( __field(u8, status) ), TP_fast_assign( __entry->status = status; ), TP_printk("bus_resume status %d", __entry->status) ); TRACE_EVENT(ice40_setup, TP_PROTO(const char *token, int ret), TP_ARGS(token, ret), TP_STRUCT__entry( __string(token, token) __field(int, ret) ), TP_fast_assign( __assign_str(token, token); __entry->ret = ret; ), TP_printk("Trace: SETUP %s ret %d", __get_str(token), __entry->ret) ); TRACE_EVENT(ice40_in, TP_PROTO(u16 ep, const char *token, u32 len, u32 expected, int ret), TP_ARGS(ep, token, len, expected, ret), TP_STRUCT__entry( __field(u16, ep) __string(token, token) __field(u32, len) __field(u32, expected) __field(int, ret) ), TP_fast_assign( __entry->ep = ep; __assign_str(token, token); __entry->len = len; __entry->expected = expected; __entry->ret = ret; ), TP_printk("Trace: %d IN %s len %d expected %d ret %d", __entry->ep, __get_str(token), __entry->len, __entry->expected, __entry->ret) ); TRACE_EVENT(ice40_out, TP_PROTO(u16 ep, const char *token, u32 len, int ret), TP_ARGS(ep, token, len, ret), TP_STRUCT__entry( __field(u16, ep) __string(token, token) __field(u32, len) __field(int, ret) ), TP_fast_assign( __entry->ep = ep; __assign_str(token, token); __entry->len = len; __entry->ret = ret; ), TP_printk("Trace: %d OUT %s len %d ret %d", __entry->ep, __get_str(token), __entry->len, __entry->ret) ); #endif /* if !defined(_TRACE_ICE40_H) || defined(TRACE_HEADER_MULTI_READ) */ /* This part must be outside protection */ #include