/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef _UAPI__LINUX_FUNCTIONFS_H__
#define _UAPI__LINUX_FUNCTIONFS_H__


#include <linux/const.h>
#include <linux/types.h>
#include <linux/ioctl.h>

#include <linux/usb/ch9.h>


enum {
	FUNCTIONFS_DESCRIPTORS_MAGIC = 1,
	FUNCTIONFS_STRINGS_MAGIC = 2,
	FUNCTIONFS_DESCRIPTORS_MAGIC_V2 = 3,
};

enum functionfs_flags {
	FUNCTIONFS_HAS_FS_DESC = 1,
	FUNCTIONFS_HAS_HS_DESC = 2,
	FUNCTIONFS_HAS_SS_DESC = 4,
	FUNCTIONFS_HAS_MS_OS_DESC = 8,
	FUNCTIONFS_VIRTUAL_ADDR = 16,
	FUNCTIONFS_EVENTFD = 32,
	FUNCTIONFS_ALL_CTRL_RECIP = 64,
	FUNCTIONFS_CONFIG0_SETUP = 128,
};

/* Descriptor of an non-audio endpoint */
struct usb_endpoint_descriptor_no_audio {
	__u8  bLength;
	__u8  bDescriptorType;

	__u8  bEndpointAddress;
	__u8  bmAttributes;
	__le16 wMaxPacketSize;
	__u8  bInterval;
} __attribute__((packed));

/**
 * struct usb_dfu_functional_descriptor - DFU Functional descriptor
 * @bLength:		Size of the descriptor (bytes)
 * @bDescriptorType:	USB_DT_DFU_FUNCTIONAL
 * @bmAttributes:	DFU attributes
 * @wDetachTimeOut:	Maximum time to wait after DFU_DETACH (ms, le16)
 * @wTransferSize:	Maximum number of bytes per control-write (le16)
 * @bcdDFUVersion:	DFU Spec version (BCD, le16)
 */
struct usb_dfu_functional_descriptor {
	__u8  bLength;
	__u8  bDescriptorType;
	__u8  bmAttributes;
	__le16 wDetachTimeOut;
	__le16 wTransferSize;
	__le16 bcdDFUVersion;
} __attribute__ ((packed));

/* from DFU functional descriptor bmAttributes */
#define DFU_FUNC_ATT_CAN_DOWNLOAD	_BITUL(0)
#define DFU_FUNC_ATT_CAN_UPLOAD		_BITUL(1)
#define DFU_FUNC_ATT_MANIFEST_TOLERANT	_BITUL(2)
#define DFU_FUNC_ATT_WILL_DETACH	_BITUL(3)


struct usb_functionfs_descs_head_v2 {
	__le32 magic;
	__le32 length;
	__le32 flags;
	/*
	 * __le32 fs_count, hs_count, fs_count; must be included manually in
	 * the structure taking flags into consideration.
	 */
} __attribute__((packed));

/* Legacy format, deprecated as of 3.14. */
struct usb_functionfs_descs_head {
	__le32 magic;
	__le32 length;
	__le32 fs_count;
	__le32 hs_count;
} __attribute__((packed, deprecated));

/* MS OS Descriptor header */
struct usb_os_desc_header {
	__u8	interface;
	__le32	dwLength;
	__le16	bcdVersion;
	__le16	wIndex;
	union {
		struct {
			__u8	bCount;
			__u8	Reserved;
		};
		__le16	wCount;
	};
} __attribute__((packed));

struct usb_ext_compat_desc {
	__u8	bFirstInterfaceNumber;
	__u8	Reserved1;
	__struct_group(/* no tag */, IDs, /* no attrs */,
		__u8	CompatibleID[8];
		__u8	SubCompatibleID[8];
	);
	__u8	Reserved2[6];
};

struct usb_ext_prop_desc {
	__le32	dwSize;
	__le32	dwPropertyDataType;
	__le16	wPropertyNameLength;
} __attribute__((packed));

/* Flags for usb_ffs_dmabuf_transfer_req->flags (none for now) */
#define USB_FFS_DMABUF_TRANSFER_MASK	0x0

/**
 * struct usb_ffs_dmabuf_transfer_req - Transfer request for a DMABUF object
 * @fd:		file descriptor of the DMABUF object
 * @flags:	one or more USB_FFS_DMABUF_TRANSFER_* flags
 * @length:	number of bytes used in this DMABUF for the data transfer.
 *		Should generally be set to the DMABUF's size.
 */
struct usb_ffs_dmabuf_transfer_req {
	int fd;
	__u32 flags;
	__u64 length;
} __attribute__((packed));

#ifndef __KERNEL__

/**
 * DOC: descriptors
 *
 * Descriptors format:
 *
 * +-----+-----------+--------------+--------------------------------------+
 * | off | name      | type         | description                          |
 * +-----+-----------+--------------+--------------------------------------+
 * |   0 | magic     | LE32         | FUNCTIONFS_DESCRIPTORS_MAGIC_V2      |
 * +-----+-----------+--------------+--------------------------------------+
 * |   4 | length    | LE32         | length of the whole data chunk       |
 * +-----+-----------+--------------+--------------------------------------+
 * |   8 | flags     | LE32         | combination of functionfs_flags      |
 * +-----+-----------+--------------+--------------------------------------+
 * |     | eventfd   | LE32         | eventfd file descriptor              |
 * +-----+-----------+--------------+--------------------------------------+
 * |     | fs_count  | LE32         | number of full-speed descriptors     |
 * +-----+-----------+--------------+--------------------------------------+
 * |     | hs_count  | LE32         | number of high-speed descriptors     |
 * +-----+-----------+--------------+--------------------------------------+
 * |     | ss_count  | LE32         | number of super-speed descriptors    |
 * +-----+-----------+--------------+--------------------------------------+
 * |     | os_count  | LE32         | number of MS OS descriptors          |
 * +-----+-----------+--------------+--------------------------------------+
 * |     | fs_descrs | Descriptor[] | list of full-speed descriptors       |
 * +-----+-----------+--------------+--------------------------------------+
 * |     | hs_descrs | Descriptor[] | list of high-speed descriptors       |
 * +-----+-----------+--------------+--------------------------------------+
 * |     | ss_descrs | Descriptor[] | list of super-speed descriptors      |
 * +-----+-----------+--------------+--------------------------------------+
 * |     | os_descrs | OSDesc[]     | list of MS OS descriptors            |
 * +-----+-----------+--------------+--------------------------------------+
 *
 * Depending on which flags are set, various fields may be missing in the
 * structure.  Any flags that are not recognised cause the whole block to be
 * rejected with -ENOSYS.
 *
 * Legacy descriptors format (deprecated as of 3.14):
 *
 * +-----+-----------+--------------+--------------------------------------+
 * | off | name      | type         | description                          |
 * +-----+-----------+--------------+--------------------------------------+
 * |   0 | magic     | LE32         | FUNCTIONFS_DESCRIPTORS_MAGIC         |
 * +-----+-----------+--------------+--------------------------------------+
 * |   4 | length    | LE32         | length of the whole data chunk       |
 * +-----+-----------+--------------+--------------------------------------+
 * |   8 | fs_count  | LE32         | number of full-speed descriptors     |
 * +-----+-----------+--------------+--------------------------------------+
 * |  12 | hs_count  | LE32         | number of high-speed descriptors     |
 * +-----+-----------+--------------+--------------------------------------+
 * |  16 | fs_descrs | Descriptor[] | list of full-speed descriptors       |
 * +-----+-----------+--------------+--------------------------------------+
 * |     | hs_descrs | Descriptor[] | list of high-speed descriptors       |
 * +-----+-----------+--------------+--------------------------------------+
 *
 * All numbers must be in little endian order.
 *
 * Descriptor[] is an array of valid USB descriptors which have the following
 * format:
 *
 * +-----+-----------------+------+--------------------------+
 * | off | name            | type | description              |
 * +-----+-----------------+------+--------------------------+
 * |   0 | bLength         | U8   | length of the descriptor |
 * +-----+-----------------+------+--------------------------+
 * |   1 | bDescriptorType | U8   | descriptor type          |
 * +-----+-----------------+------+--------------------------+
 * |   2 | payload         |      | descriptor's payload     |
 * +-----+-----------------+------+--------------------------+
 *
 * OSDesc[] is an array of valid MS OS Feature Descriptors which have one of
 * the following formats:
 *
 * +-----+-----------------+------+--------------------------+
 * | off | name            | type | description              |
 * +-----+-----------------+------+--------------------------+
 * |   0 | interface       | U8   | related interface number |
 * +-----+-----------------+------+--------------------------+
 * |   1 | dwLength        | U32  | length of the descriptor |
 * +-----+-----------------+------+--------------------------+
 * |   5 | bcdVersion      | U16  | currently supported: 1   |
 * +-----+-----------------+------+--------------------------+
 * |   7 | wIndex          | U16  | currently supported: 4   |
 * +-----+-----------------+------+--------------------------+
 * |   9 | bCount          | U8   | number of ext. compat.   |
 * +-----+-----------------+------+--------------------------+
 * |  10 | Reserved        | U8   | 0                        |
 * +-----+-----------------+------+--------------------------+
 * |  11 | ExtCompat[]     |      | list of ext. compat. d.  |
 * +-----+-----------------+------+--------------------------+
 *
 * +-----+-----------------+------+--------------------------+
 * | off | name            | type | description              |
 * +-----+-----------------+------+--------------------------+
 * |   0 | interface       | U8   | related interface number |
 * +-----+-----------------+------+--------------------------+
 * |   1 | dwLength        | U32  | length of the descriptor |
 * +-----+-----------------+------+--------------------------+
 * |   5 | bcdVersion      | U16  | currently supported: 1   |
 * +-----+-----------------+------+--------------------------+
 * |   7 | wIndex          | U16  | currently supported: 5   |
 * +-----+-----------------+------+--------------------------+
 * |   9 | wCount          | U16  | number of ext. compat.   |
 * +-----+-----------------+------+--------------------------+
 * |  11 | ExtProp[]       |      | list of ext. prop. d.    |
 * +-----+-----------------+------+--------------------------+
 *
 * ExtCompat[] is an array of valid Extended Compatibility descriptors
 * which have the following format:
 *
 * +-----+-----------------------+------+-------------------------------------+
 * | off | name                  | type | description                         |
 * +-----+-----------------------+------+-------------------------------------+
 * |   0 | bFirstInterfaceNumber | U8   | index of the interface or of the 1st|
 * +-----+-----------------------+------+-------------------------------------+
 * |     |                       |      | interface in an IAD group           |
 * +-----+-----------------------+------+-------------------------------------+
 * |   1 | Reserved              | U8   | 1                                   |
 * +-----+-----------------------+------+-------------------------------------+
 * |   2 | CompatibleID          | U8[8]| compatible ID string                |
 * +-----+-----------------------+------+-------------------------------------+
 * |  10 | SubCompatibleID       | U8[8]| subcompatible ID string             |
 * +-----+-----------------------+------+-------------------------------------+
 * |  18 | Reserved              | U8[6]| 0                                   |
 * +-----+-----------------------+------+-------------------------------------+
 *
 * ExtProp[] is an array of valid Extended Properties descriptors
 * which have the following format:
 *
 * +-----+-----------------------+------+-------------------------------------+
 * | off | name                  | type | description                         |
 * +-----+-----------------------+------+-------------------------------------+
 * |   0 | dwSize                | U32  | length of the descriptor            |
 * +-----+-----------------------+------+-------------------------------------+
 * |   4 | dwPropertyDataType    | U32  | 1..7                                |
 * +-----+-----------------------+------+-------------------------------------+
 * |   8 | wPropertyNameLength   | U16  | bPropertyName length (NL)           |
 * +-----+-----------------------+------+-------------------------------------+
 * |  10 | bPropertyName         |U8[NL]| name of this property               |
 * +-----+-----------------------+------+-------------------------------------+
 * |10+NL| dwPropertyDataLength  | U32  | bPropertyData length (DL)           |
 * +-----+-----------------------+------+-------------------------------------+
 * |14+NL| bProperty             |U8[DL]| payload of this property            |
 * +-----+-----------------------+------+-------------------------------------+
 */

struct usb_functionfs_strings_head {
	__le32 magic;
	__le32 length;
	__le32 str_count;
	__le32 lang_count;
} __attribute__((packed));

/*
 * Strings format:
 *
 * | off | name       | type                  | description                |
 * |-----+------------+-----------------------+----------------------------|
 * |   0 | magic      | LE32                  | FUNCTIONFS_STRINGS_MAGIC   |
 * |   4 | length     | LE32                  | length of the data chunk   |
 * |   8 | str_count  | LE32                  | number of strings          |
 * |  12 | lang_count | LE32                  | number of languages        |
 * |  16 | stringtab  | StringTab[lang_count] | table of strings per lang  |
 *
 * For each language there is one stringtab entry (ie. there are lang_count
 * stringtab entries).  Each StringTab has following format:
 *
 * | off | name    | type              | description                        |
 * |-----+---------+-------------------+------------------------------------|
 * |   0 | lang    | LE16              | language code                      |
 * |   2 | strings | String[str_count] | array of strings in given language |
 *
 * For each string there is one strings entry (ie. there are str_count
 * string entries).  Each String is a NUL terminated string encoded in
 * UTF-8.
 */

#endif


/*
 * Events are delivered on the ep0 file descriptor, when the user mode driver
 * reads from this file descriptor after writing the descriptors.  Don't
 * stop polling this descriptor.
 */

enum usb_functionfs_event_type {
	FUNCTIONFS_BIND,
	FUNCTIONFS_UNBIND,

	FUNCTIONFS_ENABLE,
	FUNCTIONFS_DISABLE,

	FUNCTIONFS_SETUP,

	FUNCTIONFS_SUSPEND,
	FUNCTIONFS_RESUME
};

/* NOTE:  this structure must stay the same size and layout on
 * both 32-bit and 64-bit kernels.
 */
struct usb_functionfs_event {
	union {
		/* SETUP: packet; DATA phase i/o precedes next event
		 *(setup.bmRequestType & USB_DIR_IN) flags direction */
		struct usb_ctrlrequest	setup;
	} __attribute__((packed)) u;

	/* enum usb_functionfs_event_type */
	__u8				type;
	__u8				_pad[3];
} __attribute__((packed));


/* Endpoint ioctls */
/* The same as in gadgetfs */

/* IN transfers may be reported to the gadget driver as complete
 *	when the fifo is loaded, before the host reads the data;
 * OUT transfers may be reported to the host's "client" driver as
 *	complete when they're sitting in the FIFO unread.
 * THIS returns how many bytes are "unclaimed" in the endpoint fifo
 * (needed for precise fault handling, when the hardware allows it)
 */
#define	FUNCTIONFS_FIFO_STATUS	_IO('g', 1)

/* discards any unclaimed data in the fifo. */
#define	FUNCTIONFS_FIFO_FLUSH	_IO('g', 2)

/* resets endpoint halt+toggle; used to implement set_interface.
 * some hardware (like pxa2xx) can't support this.
 */
#define	FUNCTIONFS_CLEAR_HALT	_IO('g', 3)

/* Specific for functionfs */

/*
 * Returns reverse mapping of an interface.  Called on EP0.  If there
 * is no such interface returns -EDOM.  If function is not active
 * returns -ENODEV.
 */
#define	FUNCTIONFS_INTERFACE_REVMAP	_IO('g', 128)

/*
 * Returns real bEndpointAddress of an endpoint. If endpoint shuts down
 * during the call, returns -ESHUTDOWN.
 */
#define	FUNCTIONFS_ENDPOINT_REVMAP	_IO('g', 129)

/*
 * Returns endpoint descriptor. If endpoint shuts down during the call,
 * returns -ESHUTDOWN.
 */
#define	FUNCTIONFS_ENDPOINT_DESC	_IOR('g', 130, \
					     struct usb_endpoint_descriptor)

/*
 * Attach the DMABUF object, identified by its file descriptor, to the
 * data endpoint. Returns zero on success, and a negative errno value
 * on error.
 */
#define FUNCTIONFS_DMABUF_ATTACH	_IOW('g', 131, int)


/*
 * Detach the given DMABUF object, identified by its file descriptor,
 * from the data endpoint. Returns zero on success, and a negative
 * errno value on error. Note that closing the endpoint's file
 * descriptor will automatically detach all attached DMABUFs.
 */
#define FUNCTIONFS_DMABUF_DETACH	_IOW('g', 132, int)

/*
 * Enqueue the previously attached DMABUF to the transfer queue.
 * The argument is a structure that packs the DMABUF's file descriptor,
 * the size in bytes to transfer (which should generally correspond to
 * the size of the DMABUF), and a 'flags' field which is unused
 * for now. Returns zero on success, and a negative errno value on
 * error.
 */
#define FUNCTIONFS_DMABUF_TRANSFER	_IOW('g', 133, \
					     struct usb_ffs_dmabuf_transfer_req)

#endif /* _UAPI__LINUX_FUNCTIONFS_H__ */
