/* SPDX-License-Identifier: MIT */
/* Copyright (C) 2025 Arm, Ltd. */
#ifndef _ETHOSU_DRM_H_
#define _ETHOSU_DRM_H_

#include "drm.h"

#if defined(__cplusplus)
extern "C" {
#endif

/**
 * DOC: IOCTL IDs
 *
 * enum drm_ethosu_ioctl_id - IOCTL IDs
 *
 * Place new ioctls at the end, don't re-order, don't replace or remove entries.
 *
 * These IDs are not meant to be used directly. Use the DRM_IOCTL_ETHOSU_xxx
 * definitions instead.
 */
enum drm_ethosu_ioctl_id {
	/** @DRM_ETHOSU_DEV_QUERY: Query device information. */
	DRM_ETHOSU_DEV_QUERY = 0,

	/** @DRM_ETHOSU_BO_CREATE: Create a buffer object. */
	DRM_ETHOSU_BO_CREATE,

	/** @DRM_ETHOSU_BO_WAIT: Wait on a buffer object's fence. */
	DRM_ETHOSU_BO_WAIT,

	/**
	 * @DRM_ETHOSU_BO_MMAP_OFFSET: Get the file offset to pass to
	 * mmap to map a GEM object.
	 */
	DRM_ETHOSU_BO_MMAP_OFFSET,

	/**
	 * @DRM_ETHOSU_CMDSTREAM_BO_CREATE: Create a command stream buffer
	 * object.
	 */
	DRM_ETHOSU_CMDSTREAM_BO_CREATE,

	/** @DRM_ETHOSU_SUBMIT: Submit a job and BOs to run. */
	DRM_ETHOSU_SUBMIT,

	DRM_ETHOSU_PERFMON_CREATE,
	DRM_ETHOSU_PERFMON_DESTROY,
	DRM_ETHOSU_PERFMON_GET_VALUES,
	DRM_ETHOSU_PERFMON_SET_GLOBAL,
};

/**
 * DOC: IOCTL arguments
 */

/**
 * enum drm_ethosu_dev_query_type - Query type
 *
 * Place new types at the end, don't re-order, don't remove or replace.
 */
enum drm_ethosu_dev_query_type {
	/** @DRM_ETHOSU_DEV_QUERY_NPU_INFO: Query NPU information. */
	DRM_ETHOSU_DEV_QUERY_NPU_INFO = 0,
};

/**
 * struct drm_ethosu_gpu_info - NPU information
 *
 * Structure grouping all queryable information relating to the NPU.
 */
struct drm_ethosu_npu_info {
	/** @id : NPU ID. */
	__u32 id;
#define DRM_ETHOSU_ARCH_MAJOR(x)			((x) >> 28)
#define DRM_ETHOSU_ARCH_MINOR(x)			(((x) >> 20) & 0xff)
#define DRM_ETHOSU_ARCH_PATCH(x)			(((x) >> 16) & 0xf)
#define DRM_ETHOSU_PRODUCT_MAJOR(x)		(((x) >> 12) & 0xf)
#define DRM_ETHOSU_VERSION_MAJOR(x)		(((x) >> 8) & 0xf)
#define DRM_ETHOSU_VERSION_MINOR(x)		(((x) >> 4) & 0xff)
#define DRM_ETHOSU_VERSION_STATUS(x)		((x) & 0xf)

	/** @gpu_rev: GPU revision. */
	__u32 config;

	__u32 sram_size;
	__u32 pmu_counters;
};

/**
 * struct drm_ethosu_dev_query - Arguments passed to DRM_ETHOSU_IOCTL_DEV_QUERY
 */
struct drm_ethosu_dev_query {
	/** @type: the query type (see drm_ethosu_dev_query_type). */
	__u32 type;

	/**
	 * @size: size of the type being queried.
	 *
	 * If pointer is NULL, size is updated by the driver to provide the
	 * output structure size. If pointer is not NULL, the driver will
	 * only copy min(size, actual_structure_size) bytes to the pointer,
	 * and update the size accordingly. This allows us to extend query
	 * types without breaking userspace.
	 */
	__u32 size;

	/**
	 * @pointer: user pointer to a query type struct.
	 *
	 * Pointer can be NULL, in which case, nothing is copied, but the
	 * actual structure size is returned. If not NULL, it must point to
	 * a location that's large enough to hold size bytes.
	 */
	__u64 pointer;
};

/**
 * enum drm_ethosu_bo_flags - Buffer object flags, passed at creation time.
 */
enum drm_ethosu_bo_flags {
	/**
	 * @DRM_ETHOSU_BO_NO_MMAP: The buffer object will never be CPU-mapped
	 * in userspace.
	 */
	DRM_ETHOSU_BO_NO_MMAP = (1 << 0),
};

/**
 * struct drm_ethosu_bo_create - Arguments passed to DRM_IOCTL_ETHOSU_BO_CREATE.
 */
struct drm_ethosu_bo_create {
	/**
	 * @size: Requested size for the object
	 *
	 * The (page-aligned) allocated size for the object will be returned.
	 */
	__u64 size;

	/**
	 * @flags: Flags. Must be a combination of drm_ethosu_bo_flags flags.
	 */
	__u32 flags;

	/**
	 * @handle: Returned handle for the object.
	 *
	 * Object handles are nonzero.
	 */
	__u32 handle;
};

/**
 * struct drm_ethosu_bo_mmap_offset - Arguments passed to DRM_IOCTL_ETHOSU_BO_MMAP_OFFSET.
 */
struct drm_ethosu_bo_mmap_offset {
	/** @handle: Handle of the object we want an mmap offset for. */
	__u32 handle;

	/** @pad: MBZ. */
	__u32 pad;

	/** @offset: The fake offset to use for subsequent mmap calls. */
	__u64 offset;
};

/**
 * struct drm_ethosu_wait_bo - ioctl argument for waiting for
 * completion of the last DRM_ETHOSU_SUBMIT on a BO.
 *
 * This is useful for cases where multiple processes might be
 * rendering to a BO and you want to wait for all rendering to be
 * completed.
 */
struct drm_ethosu_bo_wait {
	__u32 handle;
	__u32 pad;
	__s64 timeout_ns;	/* absolute */
};

struct drm_ethosu_cmdstream_bo_create {
	/* Size of the data argument. */
	__u32 size;

	/* Flags, currently must be 0. */
	__u32 flags;

	/* Pointer to the data. */
	__u64 data;

	/** Returned GEM handle for the BO. */
	__u32 handle;

	/* Pad, must be 0. */
	__u32 pad;
};

/**
 * struct drm_ethosu_job - A job to be run on the NPU
 *
 * The kernel will schedule the execution of this job taking into account its
 * dependencies with other jobs. All tasks in the same job will be executed
 * sequentially on the same core, to benefit from memory residency in SRAM.
 */
struct drm_ethosu_job {
	/** Input: BO handle for cmdstream. */
	__u32 cmd_bo;

	/** Input: Amount of SRAM to use. */
	__u32 sram_size;

#define ETHOSU_MAX_REGIONS	8
	/** Input: Array of BO handles for each region. */
	__u32 region_bo_handles[ETHOSU_MAX_REGIONS];
};

/**
 * struct drm_ethosu_submit - ioctl argument for submitting commands to the NPU.
 *
 * The kernel will schedule the execution of these jobs in dependency order.
 */
struct drm_ethosu_submit {
	/** Input: Pointer to an array of struct drm_ethosu_job. */
	__u64 jobs;

	/** Input: Number of jobs passed in. */
	__u32 job_count;

	/** Input: Id returned by DRM_ETHOSU_PERFMON_CREATE */
	__u32 perfmon_id;
};

#define DRM_ETHOSU_MAX_PERF_EVENT_COUNTERS	8
#define DRM_ETHOSU_MAX_PERF_COUNTERS \
	(DRM_ETHOSU_MAX_PERF_EVENT_COUNTERS + 1)

struct drm_ethosu_perfmon_create {
	__u32 id;
	__u32 ncounters;
	__u16 counters[DRM_ETHOSU_MAX_PERF_EVENT_COUNTERS];
};

struct drm_ethosu_perfmon_destroy {
	__u32 id;
	__u32 pad;
};

/*
 * Returns the values of the performance counters tracked by this
 * perfmon (as an array of (ncounters + 1) u64 values).
 *
 * No implicit synchronization is performed, so the user has to
 * guarantee that any jobs using this perfmon have already been
 * completed.
 */
struct drm_ethosu_perfmon_get_values {
	__u32 id;
	__u32 pad;
	__u64 values_ptr;
};

#define DRM_ETHOSU_PERFMON_CLEAR_GLOBAL    0x0001

/**
 * struct drm_ethosu_perfmon_set_global - ioctl to define a global performance
 * monitor
 *
 * The global performance monitor will be used for all jobs. If a global
 * performance monitor is defined, jobs with a self-defined performance
 * monitor won't be allowed.
 */
struct drm_ethosu_perfmon_set_global {
	__u32 flags;
	__u32 id;
};

/**
 * DRM_IOCTL_ETHOSU() - Build a ethosu IOCTL number
 * @__access: Access type. Must be R, W or RW.
 * @__id: One of the DRM_ETHOSU_xxx id.
 * @__type: Suffix of the type being passed to the IOCTL.
 *
 * Don't use this macro directly, use the DRM_IOCTL_ETHOSU_xxx
 * values instead.
 *
 * Return: An IOCTL number to be passed to ioctl() from userspace.
 */
#define DRM_IOCTL_ETHOSU(__access, __id, __type) \
	DRM_IO ## __access(DRM_COMMAND_BASE + DRM_ETHOSU_ ## __id, \
			   struct drm_ethosu_ ## __type)

enum {
	DRM_IOCTL_ETHOSU_DEV_QUERY =
		DRM_IOCTL_ETHOSU(WR, DEV_QUERY, dev_query),
	DRM_IOCTL_ETHOSU_BO_CREATE =
		DRM_IOCTL_ETHOSU(WR, BO_CREATE, bo_create),
	DRM_IOCTL_ETHOSU_BO_WAIT =
		DRM_IOCTL_ETHOSU(WR, BO_WAIT, bo_wait),
	DRM_IOCTL_ETHOSU_BO_MMAP_OFFSET =
		DRM_IOCTL_ETHOSU(WR, BO_MMAP_OFFSET, bo_mmap_offset),
	DRM_IOCTL_ETHOSU_CMDSTREAM_BO_CREATE =
		DRM_IOCTL_ETHOSU(WR, CMDSTREAM_BO_CREATE, cmdstream_bo_create),
	DRM_IOCTL_ETHOSU_SUBMIT =
		DRM_IOCTL_ETHOSU(WR, SUBMIT, submit),
	DRM_IOCTL_ETHOSU_PERFMON_CREATE =
		DRM_IOCTL_ETHOSU(WR, PERFMON_CREATE, perfmon_create),
	DRM_IOCTL_ETHOSU_PERFMON_DESTROY =
		DRM_IOCTL_ETHOSU(WR, PERFMON_DESTROY, perfmon_destroy),
	DRM_IOCTL_ETHOSU_PERFMON_GET_VALUES =
		DRM_IOCTL_ETHOSU(WR, PERFMON_GET_VALUES, perfmon_get_values),
	DRM_IOCTL_ETHOSU_PERFMON_SET_GLOBAL =
		DRM_IOCTL_ETHOSU(WR, PERFMON_SET_GLOBAL, perfmon_set_global),
};

#if defined(__cplusplus)
}
#endif

#endif /* _ETHOSU_DRM_H_ */
