/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * * (C) COPYRIGHT 2019-2021 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 license. * * 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. * * You should have received a copy of the GNU General Public License * along with this program; if not, you can access it online at * http://www.gnu.org/licenses/gpl-2.0.html. * */ /** * DOC: Mali arbiter interface APIs to share GPU between Virtual Machines */ #ifndef _MALI_KBASE_ARBIF_H_ #define _MALI_KBASE_ARBIF_H_ /** * enum kbase_arbif_evt - Internal Arbiter event. * * @KBASE_VM_GPU_INITIALIZED_EVT: KBase has finished initializing * and can be stopped * @KBASE_VM_GPU_STOP_EVT: Stop message received from Arbiter * @KBASE_VM_GPU_GRANTED_EVT: Grant message received from Arbiter * @KBASE_VM_GPU_LOST_EVT: Lost message received from Arbiter * @KBASE_VM_GPU_IDLE_EVENT: KBase has transitioned into an inactive state. * @KBASE_VM_REF_EVENT: KBase has transitioned into an active state. * @KBASE_VM_OS_SUSPEND_EVENT: KBase is suspending * @KBASE_VM_OS_RESUME_EVENT: Kbase is resuming */ enum kbase_arbif_evt { KBASE_VM_GPU_INITIALIZED_EVT = 1, KBASE_VM_GPU_STOP_EVT, KBASE_VM_GPU_GRANTED_EVT, KBASE_VM_GPU_LOST_EVT, KBASE_VM_GPU_IDLE_EVENT, KBASE_VM_REF_EVENT, KBASE_VM_OS_SUSPEND_EVENT, KBASE_VM_OS_RESUME_EVENT, }; /** * kbase_arbif_init() - Initialize the arbiter interface functionality. * @kbdev: The kbase device structure for the device (must be a valid pointer) * * Initialize the arbiter interface and also determines * if Arbiter functionality is required. * * Return: * * 0 - the interface was initialized or was not specified * * in the device tree. * * -EFAULT - the interface was specified but failed to initialize. * * -EPROBE_DEFER - module dependencies are not yet available. */ int kbase_arbif_init(struct kbase_device *kbdev); /** * kbase_arbif_destroy() - Cleanups the arbiter interface functionality. * @kbdev: The kbase device structure for the device (must be a valid pointer) * * Cleans up the arbiter interface functionality and resets the reference count * of the arbif module used */ void kbase_arbif_destroy(struct kbase_device *kbdev); /** * kbase_arbif_get_max_config() - Request max config info * @kbdev: The kbase device structure for the device (must be a valid pointer) * * call back function from arb interface to arbiter requesting max config info */ void kbase_arbif_get_max_config(struct kbase_device *kbdev); /** * kbase_arbif_gpu_request() - Send GPU request message to the arbiter * @kbdev: The kbase device structure for the device (must be a valid pointer) * * Sends a message to Arbiter to request GPU access. */ void kbase_arbif_gpu_request(struct kbase_device *kbdev); /** * kbase_arbif_gpu_stopped() - Send GPU stopped message to the arbiter * @kbdev: The kbase device structure for the device (must be a valid pointer) * @gpu_required: true if GPU access is still required * (Arbiter will automatically send another grant message) * * Sends a message to Arbiter to notify that the GPU has stopped. * @note Once this call has been made, KBase must not attempt to access the GPU * until the #KBASE_VM_GPU_GRANTED_EVT event has been received. */ void kbase_arbif_gpu_stopped(struct kbase_device *kbdev, u8 gpu_required); /** * kbase_arbif_gpu_active() - Send a GPU active message to the arbiter * @kbdev: The kbase device structure for the device (must be a valid pointer) * * Sends a message to Arbiter to report that KBase has gone active. */ void kbase_arbif_gpu_active(struct kbase_device *kbdev); /** * kbase_arbif_gpu_idle() - Send a GPU idle message to the arbiter * @kbdev: The kbase device structure for the device (must be a valid pointer) * * Sends a message to Arbiter to report that KBase has gone idle. */ void kbase_arbif_gpu_idle(struct kbase_device *kbdev); #endif /* _MALI_KBASE_ARBIF_H_ */