SmartAudio/lichee/linux-4.9/drivers/tee/optee/optee_bench.h

69 lines
1.9 KiB
C
Executable File

/*
* Copyright (c) 2016, Linaro Limited
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* 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.
*
*/
#ifndef _OPTEE_BENCH_H
#define _OPTEE_BENCH_H
#include <linux/rwsem.h>
/*
* Cycle count divider is enabled (in PMCR),
* CCNT value is incremented every 64th clock cycle
*/
#define OPTEE_BENCH_DIVIDER 64
/* max amount of timestamps */
#define OPTEE_BENCH_MAX_STAMPS 32
#define OPTEE_BENCH_MAX_MASK (OPTEE_BENCH_MAX_STAMPS - 1)
/* OP-TEE susbsystems ids */
#define OPTEE_BENCH_KMOD 0x20000000
#define OPTEE_MSG_RPC_CMD_BENCH_REG_NEW 0
#define OPTEE_MSG_RPC_CMD_BENCH_REG_DEL 1
/* storing timestamp */
struct optee_time_st {
uint64_t cnt; /* stores value from CNTPCT register */
uint64_t addr; /* stores value from program counter register */
uint64_t src; /* OP-TEE subsystem id */
};
/* per-cpu circular buffer for timestamps */
struct optee_ts_cpu_buf {
uint64_t head;
uint64_t tail;
struct optee_time_st stamps[OPTEE_BENCH_MAX_STAMPS];
};
/* memory layout for shared memory, where timestamps will be stored */
struct optee_ts_global {
uint64_t cores;
struct optee_ts_cpu_buf cpu_buf[];
};
extern struct optee_ts_global *optee_bench_ts_global;
extern struct rw_semaphore optee_bench_ts_rwsem;
#ifdef CONFIG_OPTEE_BENCHMARK
void optee_bm_enable(void);
void optee_bm_disable(void);
void optee_bm_timestamp(void);
#else
static inline void optee_bm_enable(void) {}
static inline void optee_bm_disable(void) {}
static inline void optee_bm_timestamp(void) {}
#endif /* CONFIG_OPTEE_BENCHMARK */
#endif /* _OPTEE_BENCH_H */