/*
 * SPDX-FileCopyrightText: Copyright 2022-2024 Arm Limited and/or its affiliates <open-source-office@arm.com>
 * SPDX-License-Identifier: GPL-2.0-only
 *
 * 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.
 *
 * 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.
 */

#ifndef ETHOSU_CAPABILITIES_H
#define ETHOSU_CAPABILITIES_H

/****************************************************************************
 * Includes
 ****************************************************************************/

#include <rpmsg/ethosu_rpmsg_mailbox.h>

#include <linux/types.h>
#include <linux/completion.h>

/****************************************************************************
 * Types
 ****************************************************************************/

struct ethosu_core_msg_capabilities_rsp;
struct ethosu_device;
struct ethosu_uapi_device_capabilities;

/**
 * struct ethosu_capabilities - Capabilities internal struct
 */
struct ethosu_capabilities {
	struct device                          *dev;
	struct completion                      done;
	struct ethosu_uapi_device_capabilities *uapi;
	struct ethosu_mailbox_msg              msg;
	int                                    errno;
};

/****************************************************************************
 * Functions
 ****************************************************************************/

int ethosu_capabilities_request(struct device *dev,
				struct ethosu_mailbox *mailbox,
				struct ethosu_uapi_device_capabilities *uapi);

void ethosu_capability_rsp(struct ethosu_mailbox *mailbox,
			   int msg_id,
			   struct ethosu_core_msg_capabilities_rsp *rsp);

#endif
