| /* | 
|  * | 
|  * (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_ */ |