/* SPDX-License-Identifier: GPL-2.0 */ 
 | 
#define ION_TRACE_EMIT 
 | 
  
 | 
#ifdef ION_TRACE_EMIT 
 | 
  
 | 
/* 
 | 
  ion_trace_lvl 
 | 
    0: no trace 
 | 
    1: trace iommu 
 | 
    2: trace all 
 | 
 */ 
 | 
static int ion_trace_lvl = 0; 
 | 
  
 | 
#define pr_ion_trace(lvl, fmt, ...) \ 
 | 
    if (unlikely(ion_trace_lvl>=lvl)) \ 
 | 
        printk(KERN_INFO "%15.s-%5.d: %s: "pr_fmt(fmt), current->comm,\ 
 | 
               current->pid, __func__, ##__VA_ARGS__) 
 | 
  
 | 
static inline void trace_ion_buffer_alloc(const char* client, void* buf, 
 | 
                                   unsigned int size) 
 | 
{ 
 | 
    pr_ion_trace(2, "client=%s,buffer=%p:%d\n", client, buf, size); 
 | 
} 
 | 
  
 | 
static inline void trace_ion_buffer_free(const char* client, void* buf, 
 | 
                                   unsigned int size) 
 | 
{ 
 | 
    pr_ion_trace(2, "client=%s,buffer=%p:%d\n", client, buf, size); 
 | 
} 
 | 
  
 | 
static inline void trace_ion_buffer_import(const char* client, void* buf, 
 | 
                                   unsigned int size) 
 | 
{ 
 | 
    pr_ion_trace(2, "client=%s,buffer=%p:%d\n", client, buf, size); 
 | 
} 
 | 
  
 | 
static inline void trace_ion_buffer_destroy(const char* client, void* buf, 
 | 
                                   unsigned int size) 
 | 
{ 
 | 
    pr_ion_trace(2, "client=%s,buffer=%p:%d\n", client, buf, size); 
 | 
} 
 | 
  
 | 
static inline void trace_ion_kernel_unmap(const char* client, void* buf, 
 | 
                                   unsigned int size) 
 | 
{ 
 | 
    pr_ion_trace(2, "client=%s,buffer=%p:%d\n", client, buf, size); 
 | 
} 
 | 
  
 | 
static inline void trace_ion_buffer_share(const char* client, void* buf, 
 | 
                                   unsigned int size, int fd) 
 | 
{ 
 | 
    pr_ion_trace(2, "client=%s,buffer=%p:%d,fd=%d\n", client, buf, size, fd); 
 | 
} 
 | 
  
 | 
static inline void trace_ion_client_create(const char* client) 
 | 
{ 
 | 
    pr_ion_trace(2, "client=%s\n", client); 
 | 
} 
 | 
  
 | 
static inline void trace_ion_client_destroy(const char* client) 
 | 
{ 
 | 
    pr_ion_trace(2, "client=%s\n", client); 
 | 
} 
 | 
  
 | 
static inline void trace_ion_iommu_map(const char* client, void* buf, 
 | 
                                unsigned int size, const char* iommu_dev, 
 | 
                                unsigned int iommu_addr, 
 | 
                                unsigned int iommu_size, unsigned int map_cnt) 
 | 
{ 
 | 
    pr_ion_trace(1, "client=%s,buffer=%p:%d,iommu=%s[%08x:%08x]:%d\n", 
 | 
             client,buf, size, iommu_dev, iommu_addr, 
 | 
             iommu_addr+iommu_size, map_cnt); 
 | 
} 
 | 
  
 | 
static inline void trace_ion_iommu_unmap(const char* client, void* buf, 
 | 
                                unsigned int size, const char* iommu_dev, 
 | 
                                unsigned int iommu_addr, 
 | 
                                unsigned int iommu_size, unsigned int map_cnt) 
 | 
{ 
 | 
    pr_ion_trace(1, "client=%s,buffer=%p:%d,iommu=%s[%08x:%08x]:%d\n", 
 | 
             client,buf, size, iommu_dev, iommu_addr, 
 | 
             iommu_addr+iommu_size, map_cnt); 
 | 
} 
 | 
  
 | 
static inline void trace_ion_iommu_release(const char* client, void* buf, 
 | 
                                unsigned int size, const char* iommu_dev, 
 | 
                                unsigned int iommu_addr, 
 | 
                                unsigned int iommu_size, unsigned int map_cnt) 
 | 
{ 
 | 
    pr_ion_trace(1, "client=%s,buffer=%p:%d,iommu=%s[%08x:%08x]:%d\n", 
 | 
             client,buf, size, iommu_dev, iommu_addr, 
 | 
             iommu_addr+iommu_size, map_cnt); 
 | 
} 
 | 
  
 | 
static inline void trace_ion_kernel_map(const char* client, void* buf, 
 | 
                                 unsigned int size, void* kaddr) 
 | 
{ 
 | 
    pr_ion_trace(2, "client=%s,buffer=%p:%d,kaddr=%p\n", client, buf, size, 
 | 
             kaddr); 
 | 
} 
 | 
  
 | 
static inline void trace_ion_buffer_mmap(const char* client, void* buf, 
 | 
                                  unsigned int size, unsigned long vm_start, 
 | 
                                  unsigned long vm_end) 
 | 
{ 
 | 
    pr_ion_trace(2, "client=%s,buffer=%p:%d,vma[%08lx:%08lx]\n", client, 
 | 
             buf, size, vm_start, vm_end); 
 | 
} 
 | 
  
 | 
static inline void trace_ion_buffer_munmap(const char* client, void* buf, 
 | 
                                    unsigned int size, unsigned long vm_start, 
 | 
                                    unsigned long vm_end) 
 | 
{ 
 | 
    pr_ion_trace(2, "client=%s,buffer=%p:%d,vma[%08lx:%08lx]\n", client, 
 | 
             buf, size, vm_start, vm_end); 
 | 
} 
 | 
  
 | 
#else 
 | 
  
 | 
#undef TRACE_SYSTEM 
 | 
#define TRACE_INCLUDE_PATH ../../drivers/staging/android/trace 
 | 
#define TRACE_SYSTEM ion 
 | 
  
 | 
#if !defined(_TRACE_ION_H) || defined(TRACE_HEADER_MULTI_READ) 
 | 
#define _TRACE_ION_H 
 | 
  
 | 
#include <linux/tracepoint.h> 
 | 
  
 | 
DECLARE_EVENT_CLASS(ion_buffer_op, 
 | 
    TP_PROTO(const char* client, void* buf, unsigned int size), 
 | 
    TP_ARGS(client, buf, size), 
 | 
    TP_STRUCT__entry( 
 | 
        __string(client, client) 
 | 
        __field(void*, buf) 
 | 
        __field(unsigned int, size) 
 | 
    ), 
 | 
    TP_fast_assign( 
 | 
        __assign_str(client, client); 
 | 
        __entry->buf = buf; 
 | 
        __entry->size = size; 
 | 
    ), 
 | 
    TP_printk("client=%s,buffer=%p:%d", 
 | 
          __get_str(client), __entry->buf, __entry->size) 
 | 
); 
 | 
DEFINE_EVENT(ion_buffer_op, ion_buffer_alloc, 
 | 
    TP_PROTO(const char* client, void* buffer, unsigned int size), 
 | 
    TP_ARGS(client, buffer, size)); 
 | 
  
 | 
DEFINE_EVENT(ion_buffer_op, ion_buffer_free, 
 | 
    TP_PROTO(const char* client, void* buffer, unsigned int size), 
 | 
    TP_ARGS(client, buffer, size)); 
 | 
  
 | 
DEFINE_EVENT(ion_buffer_op, ion_buffer_import, 
 | 
    TP_PROTO(const char* client, void* buffer, unsigned int size), 
 | 
    TP_ARGS(client, buffer, size)); 
 | 
  
 | 
DEFINE_EVENT(ion_buffer_op, ion_buffer_destroy, 
 | 
    TP_PROTO(const char* client, void* buffer, unsigned int size), 
 | 
    TP_ARGS(client, buffer, size)); 
 | 
  
 | 
DEFINE_EVENT(ion_buffer_op, ion_kernel_unmap, 
 | 
    TP_PROTO(const char* client, void* buffer, unsigned int size), 
 | 
    TP_ARGS(client, buffer, size)); 
 | 
  
 | 
TRACE_EVENT(ion_buffer_share, 
 | 
    TP_PROTO(const char* client, void* buf, unsigned int size, int fd), 
 | 
    TP_ARGS(client, buf, size, fd), 
 | 
    TP_STRUCT__entry( 
 | 
        __string(client, client) 
 | 
        __field(void*, buf) 
 | 
        __field(unsigned int, size) 
 | 
        __field(int, fd) 
 | 
    ), 
 | 
    TP_fast_assign( 
 | 
        __assign_str(client, client); 
 | 
        __entry->buf = buf; 
 | 
        __entry->size = size; 
 | 
        __entry->fd = fd; 
 | 
    ), 
 | 
    TP_printk("client=%s,buffer=%p:%d,fd=%d", 
 | 
          __get_str(client), __entry->buf, __entry->size, __entry->fd) 
 | 
); 
 | 
  
 | 
DECLARE_EVENT_CLASS(ion_client_op, 
 | 
    TP_PROTO(const char* client), 
 | 
    TP_ARGS(client), 
 | 
    TP_STRUCT__entry( 
 | 
        __string(client, client) 
 | 
    ), 
 | 
    TP_fast_assign( 
 | 
        __assign_str(client, client); 
 | 
    ), 
 | 
    TP_printk("client=%s", __get_str(client)) 
 | 
); 
 | 
DEFINE_EVENT(ion_client_op, ion_client_create, 
 | 
    TP_PROTO(const char* client), 
 | 
    TP_ARGS(client)); 
 | 
DEFINE_EVENT(ion_client_op, ion_client_destroy, 
 | 
    TP_PROTO(const char* client), 
 | 
    TP_ARGS(client)); 
 | 
  
 | 
DECLARE_EVENT_CLASS(ion_iommu_op, 
 | 
    TP_PROTO(const char* client, void* buf, unsigned int size, 
 | 
        const char* iommu_dev, unsigned int iommu_addr, 
 | 
        unsigned int iommu_size, unsigned int map_cnt), 
 | 
    TP_ARGS(client, buf, size, iommu_dev, iommu_addr, iommu_size, map_cnt), 
 | 
    TP_STRUCT__entry( 
 | 
        __string(client, client) 
 | 
        __field(void*, buf) 
 | 
        __field(unsigned int, size) 
 | 
        __string(iommu_dev, iommu_dev) 
 | 
        __field(unsigned int, iommu_addr) 
 | 
        __field(unsigned int, iommu_size) 
 | 
        __field(unsigned int, map_cnt) 
 | 
    ), 
 | 
    TP_fast_assign( 
 | 
        __assign_str(client, client); 
 | 
        __entry->buf = buf; 
 | 
        __entry->size = size; 
 | 
        __assign_str(iommu_dev, iommu_dev); 
 | 
        __entry->iommu_addr = iommu_addr; 
 | 
        __entry->iommu_size = iommu_size; 
 | 
        __entry->map_cnt = map_cnt; 
 | 
    ), 
 | 
    TP_printk("client=%s,buffer=%p:%d,iommu=%s,map=%08x:%d,map_count=%d", 
 | 
          __get_str(client), __entry->buf, __entry->size, 
 | 
          __get_str(iommu_dev), __entry->iommu_addr, __entry->iommu_size, 
 | 
          __entry->map_cnt) 
 | 
); 
 | 
DEFINE_EVENT(ion_iommu_op, ion_iommu_map, 
 | 
    TP_PROTO(const char* client, void* buf, unsigned int size, 
 | 
        const char* iommu_dev, unsigned int iommu_addr, 
 | 
        unsigned int iommu_size, unsigned int map_cnt), 
 | 
    TP_ARGS(client, buf, size, iommu_dev, iommu_addr, iommu_size, map_cnt)); 
 | 
DEFINE_EVENT(ion_iommu_op, ion_iommu_unmap, 
 | 
    TP_PROTO(const char* client, void* buf, unsigned int size, 
 | 
        const char* iommu_dev, unsigned int iommu_addr, 
 | 
        unsigned int iommu_size, unsigned int map_cnt), 
 | 
    TP_ARGS(client, buf, size, iommu_dev, iommu_addr, iommu_size, map_cnt)); 
 | 
DEFINE_EVENT(ion_iommu_op, ion_iommu_release, 
 | 
    TP_PROTO(const char* client, void* buf, unsigned int size, 
 | 
        const char* iommu_dev, unsigned int iommu_addr, 
 | 
        unsigned int iommu_size, unsigned int map_cnt), 
 | 
    TP_ARGS(client, buf, size, iommu_dev, iommu_addr, iommu_size, map_cnt)); 
 | 
  
 | 
DECLARE_EVENT_CLASS(ion_kmap_op, 
 | 
    TP_PROTO(const char* client, void* buf, unsigned int size, void* kaddr), 
 | 
    TP_ARGS(client, buf, size, kaddr), 
 | 
    TP_STRUCT__entry( 
 | 
        __string(client, client) 
 | 
        __field(void*, buf) 
 | 
        __field(unsigned int, size) 
 | 
        __field(void*, kaddr) 
 | 
    ), 
 | 
    TP_fast_assign( 
 | 
        __assign_str(client, client); 
 | 
        __entry->buf = buf; 
 | 
        __entry->size = size; 
 | 
        __entry->kaddr = kaddr; 
 | 
    ), 
 | 
    TP_printk("client=%s,buffer=%p:%d,kaddr=%p", 
 | 
          __get_str(client), __entry->buf, __entry->size, __entry->kaddr) 
 | 
); 
 | 
DEFINE_EVENT(ion_kmap_op, ion_kernel_map, 
 | 
    TP_PROTO(const char* client, void* buffer, unsigned int size, void* kaddr), 
 | 
    TP_ARGS(client, buffer, size, kaddr)); 
 | 
  
 | 
DECLARE_EVENT_CLASS(ion_mmap_op, 
 | 
    TP_PROTO(const char* client, void* buf, unsigned int size, 
 | 
        unsigned long vm_start, unsigned long vm_end), 
 | 
    TP_ARGS(client, buf, size, vm_start, vm_end), 
 | 
    TP_STRUCT__entry( 
 | 
        __string(client, client) 
 | 
        __field(void*, buf) 
 | 
        __field(unsigned int, size) 
 | 
        __field(unsigned long, vm_start) 
 | 
        __field(unsigned long, vm_end) 
 | 
    ), 
 | 
    TP_fast_assign( 
 | 
        __assign_str(client, client); 
 | 
        __entry->buf = buf; 
 | 
        __entry->size = size; 
 | 
        __entry->vm_start = vm_start; 
 | 
        __entry->vm_end = vm_end; 
 | 
    ), 
 | 
    TP_printk("client=%s,buffer=%p:%d,vma[%08lx:%08lx]", 
 | 
          __get_str(client), __entry->buf, __entry->size, 
 | 
          __entry->vm_start, __entry->vm_end) 
 | 
); 
 | 
  
 | 
DEFINE_EVENT(ion_mmap_op, ion_buffer_mmap, 
 | 
    TP_PROTO(const char* client, void* buf, unsigned int size, 
 | 
        unsigned long vm_start, unsigned long vm_end), 
 | 
    TP_ARGS(client, buf, size, vm_start, vm_end)); 
 | 
  
 | 
DEFINE_EVENT(ion_mmap_op, ion_buffer_munmap, 
 | 
    TP_PROTO(const char* client, void* buf, unsigned int size, 
 | 
        unsigned long vm_start, unsigned long vm_end), 
 | 
    TP_ARGS(client, buf, size, vm_start, vm_end)); 
 | 
  
 | 
#endif /* _TRACE_ION_H */ 
 | 
  
 | 
/* This part must be outside protection */ 
 | 
#include <trace/define_trace.h> 
 | 
#endif 
 |