/*
 * SPDX-FileCopyrightText: Copyright 2020, 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_NETWORK_H
#define ETHOSU_NETWORK_H

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

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

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

struct ethosu_buffer;
struct ethosu_uapi_network_create;
struct device;
struct file;

struct ethosu_network {
	struct device         *dev;
	struct ethosu_mailbox *mailbox;
	struct file           *file;
	struct kref           kref;
	struct ethosu_dma_mem *dma_mem;
	uint32_t              index;
};

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

/**
 * ethosu_network_create() - Create network
 *
 * This function must be called in the context of a user space process.
 *
 * Return: fd on success, else error code.
 */
int ethosu_network_create(struct device *dev,
			  struct ethosu_mailbox *mailbox,
			  struct ethosu_uapi_network_create *uapi);

/**
 * ethosu_network_get_from_fd() - Get network handle from fd
 *
 * This function must be called from a user space context.
 *
 * Return: Pointer on success, else ERR_PTR.
 */
struct ethosu_network *ethosu_network_get_from_fd(int fd);

/**
 * ethosu_network_get() - Get network
 */
void ethosu_network_get(struct ethosu_network *net);

/**
 * ethosu_network_put() - Put network
 *
 * Return: 1 if object was removed, else 0.
 */
int ethosu_network_put(struct ethosu_network *net);

#endif /* ETHOSU_NETWORK_H */
