1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 /* 3 * 4 * (C) COPYRIGHT 2015-2018, 2020-2021 ARM Limited. All rights reserved. 5 * 6 * This program is free software and is provided to you under the terms of the 7 * GNU General Public License version 2 as published by the Free Software 8 * Foundation, and any use by you of this program is subject to the terms 9 * of such GNU license. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, you can access it online at 18 * http://www.gnu.org/licenses/gpl-2.0.html. 19 * 20 */ 21 22 /* 23 * Vinstr, used to provide an ioctl for userspace access to periodic hardware 24 * counters. 25 */ 26 27 #ifndef _KBASE_VINSTR_H_ 28 #define _KBASE_VINSTR_H_ 29 30 struct kbase_vinstr_context; 31 struct kbase_hwcnt_virtualizer; 32 struct kbase_ioctl_hwcnt_reader_setup; 33 34 /** 35 * kbase_vinstr_init() - Initialise a vinstr context. 36 * @hvirt: Non-NULL pointer to the hardware counter virtualizer. 37 * @out_vctx: Non-NULL pointer to where the pointer to the created vinstr 38 * context will be stored on success. 39 * 40 * On creation, the suspend count of the context will be 0. 41 * 42 * Return: 0 on success, else error code. 43 */ 44 int kbase_vinstr_init( 45 struct kbase_hwcnt_virtualizer *hvirt, 46 struct kbase_vinstr_context **out_vctx); 47 48 /** 49 * kbase_vinstr_term() - Terminate a vinstr context. 50 * @vctx: Pointer to the vinstr context to be terminated. 51 */ 52 void kbase_vinstr_term(struct kbase_vinstr_context *vctx); 53 54 /** 55 * kbase_vinstr_suspend() - Increment the suspend count of the context. 56 * @vctx: Non-NULL pointer to the vinstr context to be suspended. 57 * 58 * After this function call returns, it is guaranteed that all timers and 59 * workers in vinstr will be cancelled, and will not be re-triggered until 60 * after the context has been resumed. In effect, this means no new counter 61 * dumps will occur for any existing or subsequently added periodic clients. 62 */ 63 void kbase_vinstr_suspend(struct kbase_vinstr_context *vctx); 64 65 /** 66 * kbase_vinstr_resume() - Decrement the suspend count of the context. 67 * @vctx: Non-NULL pointer to the vinstr context to be resumed. 68 * 69 * If a call to this function decrements the suspend count from 1 to 0, then 70 * normal operation of vinstr will be resumed (i.e. counter dumps will once 71 * again be automatically triggered for all periodic clients). 72 * 73 * It is only valid to call this function one time for each prior returned call 74 * to kbase_vinstr_suspend. 75 */ 76 void kbase_vinstr_resume(struct kbase_vinstr_context *vctx); 77 78 /** 79 * kbase_vinstr_hwcnt_reader_setup() - Set up a new hardware counter reader 80 * client. 81 * @vinstr_ctx: Non-NULL pointer to the vinstr context. 82 * @setup: Non-NULL pointer to the hwcnt reader configuration. 83 * 84 * Return: file descriptor on success, else a (negative) error code. 85 */ 86 int kbase_vinstr_hwcnt_reader_setup( 87 struct kbase_vinstr_context *vinstr_ctx, 88 struct kbase_ioctl_hwcnt_reader_setup *setup); 89 90 #endif /* _KBASE_VINSTR_H_ */ 91