/*
 * Greybus device descriptor definition
 *
 * Defined in the "Greybus Application Protocol" document.
 * See that document for any details on these values and structures.
 *
 * Copyright 2014 Google Inc.
 */

#ifndef __GREYBUS_DESC_H
#define __GREYBUS_DESC_H

#pragma pack(push, 1)

struct greybus_manifest_header {
	__le16	size;
	__u8	version_major;
	__u8	version_minor;
};

enum greybus_descriptor_type {
	GREYBUS_TYPE_INVALID		= 0x0000,
	GREYBUS_TYPE_FUNCTION		= 0x0001,
	GREYBUS_TYPE_MODULE_ID		= 0x0002,
	GREYBUS_TYPE_SERIAL_NUMBER	= 0x0003,
	GREYBUS_TYPE_STRING		= 0x0004,
	GREYBUS_TYPE_CPORT		= 0x0005,
};

struct greybus_descriptor_header {
	__le16	size;
	__le16	type;	/* enum greybus_descriptor_type */
};

enum greybus_function_class {
	GREYBUS_FUNCTION_CONTROL	= 0x00,
	GREYBUS_FUNCTION_USB		= 0x01,
	GREYBUS_FUNCTION_GPIO		= 0x02,
	GREYBUS_FUNCTION_SPI		= 0x03,
	GREYBUS_FUNCTION_UART		= 0x04,
	GREYBUS_FUNCTION_PWM		= 0x05,
	GREYBUS_FUNCTION_I2S		= 0x06,
	GREYBUS_FUNCTION_I2C		= 0x07,
	GREYBUS_FUNCTION_SDIO		= 0x08,
	GREYBUS_FUNCTION_HID		= 0x09,
	GREYBUS_FUNCTION_DISPLAY	= 0x0a,
	GREYBUS_FUNCTION_CAMERA		= 0x0b,
	GREYBUS_FUNCTION_SENSOR		= 0x0c,
	GREYBUS_FUNCTION_VENDOR		= 0xff,
};

struct greybus_descriptor_function {
	__le16	number;
	__le16	cport;
	__u8	class;		/* enum greybus_function_class */
	__u8	subclass;
	__u8	protocol;
	__u8	reserved;
};

struct greybus_descriptor_module_id {
	__le16	vendor;
	__le16	product;
	__le16	version;
	__u8	vendor_stringid;
	__u8	product_stringid;
};

struct greybus_descriptor_serial_number {
	__le64	serial_number;
};

struct greybus_descriptor_string {
	__le16	length;
	__u8	id;
	__u8	string[0];
};

struct greybus_descriptor_cport {
	__le16	number;
	__le16	size;
	__u8	speed;	// FIXME
	__u8	reserved;
};

struct greybus_descriptor {
	struct greybus_descriptor_header	header;
	union {
		struct greybus_descriptor_function	function;
		struct greybus_descriptor_module_id	module_id;
		struct greybus_descriptor_serial_number	serial_number;
		struct greybus_descriptor_string	string;
		struct greybus_descriptor_cport		cport;
	};
};

struct greybus_manifest {
	struct greybus_manifest_header		header;
	struct greybus_descriptor		descriptors[0];
};

#pragma pack(pop)

#endif /* __GREYBUS_DESC_H */
