156 lines
4.6 KiB
C
156 lines
4.6 KiB
C
/*
|
|
*
|
|
* (C) COPYRIGHT 2015-2016 ARM Limited. All rights reserved.
|
|
*
|
|
* This program is free software and is provided to you under the terms of the
|
|
* GNU General Public License version 2 as published by the Free Software
|
|
* Foundation, and any use by you of this program is subject to the terms
|
|
* of such GNU licence.
|
|
*
|
|
* A copy of the licence is included with the program, and can also be obtained
|
|
* from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
*
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _KBASE_VINSTR_H_
|
|
#define _KBASE_VINSTR_H_
|
|
|
|
#include <mali_kbase.h>
|
|
#include <mali_kbase_hwcnt_reader.h>
|
|
|
|
/*****************************************************************************/
|
|
|
|
struct kbase_vinstr_context;
|
|
struct kbase_vinstr_client;
|
|
|
|
/*****************************************************************************/
|
|
|
|
/**
|
|
* kbase_vinstr_init() - initialize the vinstr core
|
|
* @kbdev: kbase device
|
|
*
|
|
* Return: pointer to the vinstr context on success or NULL on failure
|
|
*/
|
|
struct kbase_vinstr_context *kbase_vinstr_init(struct kbase_device *kbdev);
|
|
|
|
/**
|
|
* kbase_vinstr_term() - terminate the vinstr core
|
|
* @vinstr_ctx: vinstr context
|
|
*/
|
|
void kbase_vinstr_term(struct kbase_vinstr_context *vinstr_ctx);
|
|
|
|
/**
|
|
* kbase_vinstr_hwcnt_reader_setup - configure hw counters reader
|
|
* @vinstr_ctx: vinstr context
|
|
* @setup: reader's configuration
|
|
*
|
|
* Return: zero on success
|
|
*/
|
|
int kbase_vinstr_hwcnt_reader_setup(
|
|
struct kbase_vinstr_context *vinstr_ctx,
|
|
struct kbase_uk_hwcnt_reader_setup *setup);
|
|
|
|
/**
|
|
* kbase_vinstr_legacy_hwc_setup - configure hw counters for dumping
|
|
* @vinstr_ctx: vinstr context
|
|
* @cli: pointer where to store pointer to new vinstr client structure
|
|
* @setup: hwc configuration
|
|
*
|
|
* Return: zero on success
|
|
*/
|
|
int kbase_vinstr_legacy_hwc_setup(
|
|
struct kbase_vinstr_context *vinstr_ctx,
|
|
struct kbase_vinstr_client **cli,
|
|
struct kbase_uk_hwcnt_setup *setup);
|
|
|
|
/**
|
|
* kbase_vinstr_hwcnt_kernel_setup - configure hw counters for kernel side
|
|
* client
|
|
* @vinstr_ctx: vinstr context
|
|
* @setup: reader's configuration
|
|
* @kernel_buffer: pointer to dump buffer
|
|
*
|
|
* setup->buffer_count and setup->fd are not used for kernel side clients.
|
|
*
|
|
* Return: pointer to client structure, or NULL on failure
|
|
*/
|
|
struct kbase_vinstr_client *kbase_vinstr_hwcnt_kernel_setup(
|
|
struct kbase_vinstr_context *vinstr_ctx,
|
|
struct kbase_uk_hwcnt_reader_setup *setup,
|
|
void *kernel_buffer);
|
|
|
|
/**
|
|
* kbase_vinstr_hwc_dump - issue counter dump for vinstr client
|
|
* @cli: pointer to vinstr client
|
|
* @event_id: id of event that triggered hwcnt dump
|
|
*
|
|
* Return: zero on success
|
|
*/
|
|
int kbase_vinstr_hwc_dump(
|
|
struct kbase_vinstr_client *cli,
|
|
enum base_hwcnt_reader_event event_id);
|
|
|
|
/**
|
|
* kbase_vinstr_hwc_clear - performs a reset of the hardware counters for
|
|
* a given kbase context
|
|
* @cli: pointer to vinstr client
|
|
*
|
|
* Return: zero on success
|
|
*/
|
|
int kbase_vinstr_hwc_clear(struct kbase_vinstr_client *cli);
|
|
|
|
/**
|
|
* kbase_vinstr_try_suspend - try suspending operation of a given vinstr context
|
|
* @vinstr_ctx: vinstr context
|
|
*
|
|
* Return: 0 on success, or negative if state change is in progress
|
|
*
|
|
* Warning: This API call is non-generic. It is meant to be used only by
|
|
* job scheduler state machine.
|
|
*
|
|
* Function initiates vinstr switch to suspended state. Once it was called
|
|
* vinstr enters suspending state. If function return non-zero value, it
|
|
* indicates that state switch is not complete and function must be called
|
|
* again. On state switch vinstr will trigger job scheduler state machine
|
|
* cycle.
|
|
*/
|
|
int kbase_vinstr_try_suspend(struct kbase_vinstr_context *vinstr_ctx);
|
|
|
|
/**
|
|
* kbase_vinstr_suspend - suspends operation of a given vinstr context
|
|
* @vinstr_ctx: vinstr context
|
|
*
|
|
* Function initiates vinstr switch to suspended state. Then it blocks until
|
|
* operation is completed.
|
|
*/
|
|
void kbase_vinstr_suspend(struct kbase_vinstr_context *vinstr_ctx);
|
|
|
|
/**
|
|
* kbase_vinstr_resume - resumes operation of a given vinstr context
|
|
* @vinstr_ctx: vinstr context
|
|
*
|
|
* Function can be called only if it was preceded by a successful call
|
|
* to kbase_vinstr_suspend.
|
|
*/
|
|
void kbase_vinstr_resume(struct kbase_vinstr_context *vinstr_ctx);
|
|
|
|
/**
|
|
* kbase_vinstr_dump_size - Return required size of dump buffer
|
|
* @kbdev: device pointer
|
|
*
|
|
* Return : buffer size in bytes
|
|
*/
|
|
size_t kbase_vinstr_dump_size(struct kbase_device *kbdev);
|
|
|
|
/**
|
|
* kbase_vinstr_detach_client - Detach a client from the vinstr core
|
|
* @cli: pointer to vinstr client
|
|
*/
|
|
void kbase_vinstr_detach_client(struct kbase_vinstr_client *cli);
|
|
|
|
#endif /* _KBASE_VINSTR_H_ */
|
|
|