1232809Sjmallett/***********************license start***************
2232809Sjmallett * Copyright (c) 2011  Cavium Inc. (support@cavium.com). All rights
3232809Sjmallett * reserved.
4232809Sjmallett *
5232809Sjmallett *
6232809Sjmallett * Redistribution and use in source and binary forms, with or without
7232809Sjmallett * modification, are permitted provided that the following conditions are
8232809Sjmallett * met:
9232809Sjmallett *
10232809Sjmallett *   * Redistributions of source code must retain the above copyright
11232809Sjmallett *     notice, this list of conditions and the following disclaimer.
12232809Sjmallett *
13232809Sjmallett *   * Redistributions in binary form must reproduce the above
14232809Sjmallett *     copyright notice, this list of conditions and the following
15232809Sjmallett *     disclaimer in the documentation and/or other materials provided
16232809Sjmallett *     with the distribution.
17232809Sjmallett *
18232809Sjmallett *   * Neither the name of Cavium Inc. nor the names of
19232809Sjmallett *     its contributors may be used to endorse or promote products
20232809Sjmallett *     derived from this software without specific prior written
21232809Sjmallett *     permission.
22232809Sjmallett *
23232809Sjmallett * This Software, including technical data, may be subject to U.S. export  control
24232809Sjmallett * laws, including the U.S. Export Administration Act and its  associated
25232809Sjmallett * regulations, and may be subject to export or import  regulations in other
26232809Sjmallett * countries.
27232809Sjmallett *
28232809Sjmallett * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
29232809Sjmallett * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR
30232809Sjmallett * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
31232809Sjmallett * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
32232809Sjmallett * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
33232809Sjmallett * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
34232809Sjmallett * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
35232809Sjmallett * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
36232809Sjmallett * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE  RISK ARISING OUT OF USE OR
37232809Sjmallett * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
38232809Sjmallett *************************license end**************************************/
39232809Sjmallett
40232809Sjmallett/**
41232809Sjmallett * @file
42232809Sjmallett *
43232809Sjmallett * Header file for the event Profiler.
44232809Sjmallett *
45232809Sjmallett */
46232809Sjmallett
47232809Sjmallett#ifndef __CVMX_PROFILER_H__
48232809Sjmallett#define __CVMX_PROFILER_H__
49232809Sjmallett
50232809Sjmallett#ifdef  __cplusplus
51232809Sjmallettextern "C" {
52232809Sjmallett#endif
53232809Sjmallett
54232809Sjmallett#define EVENT_PERCPU_BUFFER_SIZE	8192
55232809Sjmallett#define PADBYTES			24
56232809Sjmallett
57232809Sjmallett#define	EVENT_BUFFER_BLOCK		"event_block"
58232809Sjmallett#define EVENT_BUFFER_SIZE		EVENT_PERCPU_BUFFER_SIZE * (cvmx_octeon_num_cores() + 1)
59232809Sjmallett
60232809Sjmallett#define EVENT_BUFFER_CONFIG_BLOCK	"event_config_block"
61232809Sjmallett#define EBC_BLOCK_SIZE			256
62232809Sjmallett
63232809Sjmalletttypedef struct {
64232809Sjmallett    int core;
65232809Sjmallett    uint32_t pc;
66232809Sjmallett} cvmx_sample_entry_t;
67232809Sjmallett
68232809Sjmalletttypedef struct cpu_event_block {
69232809Sjmallett    int size;
70232809Sjmallett    int sample_read;
71232809Sjmallett    int64_t max_samples;
72232809Sjmallett    int64_t sample_count;
73232809Sjmallett    char *head;
74232809Sjmallett    char *tail;
75232809Sjmallett    char *end;
76232809Sjmallett    char *data;
77232809Sjmallett} cvmx_cpu_event_block_t;
78232809Sjmallett
79232809Sjmalletttypedef struct {
80232809Sjmallett    cvmx_cpu_event_block_t pcpu_blk_info;
81232809Sjmallett    char *pcpu_data;
82232809Sjmallett} cvmx_ringbuf_t;
83232809Sjmallett
84232809Sjmalletttypedef struct config_block {
85232809Sjmallett    int64_t sample_count;
86232809Sjmallett    uint64_t events;
87232809Sjmallett    char *pcpu_base_addr[CVMX_MAX_CORES];
88232809Sjmallett} cvmx_config_block_t;
89232809Sjmallett
90232809Sjmalletttypedef struct event_counter_control_block {
91232809Sjmallett    int32_t read_cfg_blk;
92232809Sjmallett    char *config_blk_base_addr;
93232809Sjmallett    cvmx_config_block_t cfg_blk;
94232809Sjmallett} event_counter_control_block_t;
95232809Sjmallett
96232809Sjmallettextern void cvmx_update_perfcnt_irq(void);
97232809Sjmallettextern void cvmx_collect_sample(void);
98232809Sjmallett
99232809Sjmallett#ifdef  __cplusplus
100232809Sjmallett}
101232809Sjmallett#endif
102232809Sjmallett
103232809Sjmallett#endif	/*  __CVMX_PROFILER_H__ */
104