blob: a57e068b686ccc33b8cde2f3bf5b41b67c0bea18 [file] [log] [blame]
/*
* Copyright (c) 2016 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/**
* DOC: i_qdf_perf
* This file provides OS dependent perf API's.
*/
#ifndef _I_QDF_PERF_H
#define _I_QDF_PERF_H
#ifdef QCA_PERF_PROFILING
#if (QCA_MIPS74K_PERF_PROFILING || QCA_MIPS24KK_PERF_PROFILING)
#include <qdf_mips_perf_pvt.h>
#endif
/* #defines required for structures */
#define MAX_SAMPLES_SHIFT 5 /* change this only*/
#define MAX_SAMPLES (1 << MAX_SAMPLES_SHIFT)
#define INC_SAMPLES(x) ((x + 1) & (MAX_SAMPLES - 1))
#define MAX_SAMPLE_SZ (sizeof(uint32_t) * MAX_SAMPLES)
#define PER_SAMPLE_SZ sizeof(uint32_t)
/**
* typedef qdf_perf_entry_t - performance entry
* @list: pointer to next
* @child: pointer tochild
* @parent: pointer to top
* @type: perf cntr
* @name: string
* @proc: pointer to proc entry
* @start_tsc: array at start tsc
* @end_tsc: array at ent tsc
* @samples: array of samples
* @sample_idx: sample index
* @lock_irq: lock irq
*/
typedef struct qdf_os_perf_entry {
struct list_head list;
struct list_head child;
struct qdf_perf_entry *parent;
qdf_perf_cntr_t type;
uint8_t *name;
struct proc_dir_entry *proc;
uint64_t start_tsc[MAX_SAMPLES];
uint64_t end_tsc[MAX_SAMPLES];
uint32_t samples[MAX_SAMPLES];
uint32_t sample_idx;
spinlock_t lock_irq;
} qdf_perf_entry_t;
/* typedefs */
typedef void *__qdf_perf_id_t;
#endif /* QCA_PERF_PROFILING */
#endif /* _I_QDF_PERF_H */