alistair23-linux/drivers/staging/greybus/greybus_manifest.h
Greg Kroah-Hartman 1db0a5ff3a greybus: bundle: s/gb_interface/gb_bundle/g
Rename struct gb_interface to struct gb_bundle

It's a lot of renaming, some structures got renamed and also some
fields, but the goal was to rename things to make sense with the new
naming of how the system is put together in the 'driver model' view.

Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
2014-12-13 13:37:49 -05:00

158 lines
4 KiB
C

/*
* Greybus module manifest definition
*
* See "Greybus Application Protocol" document (version 0.1) for
* details on these values and structures.
*
* Copyright 2014 Google Inc.
* Copyright 2014 Linaro Ltd.
*
* Released under the GPLv2 and BSD licenses.
*/
#ifndef __GREYBUS_MANIFEST_H
#define __GREYBUS_MANIFEST_H
#pragma pack(push, 1)
enum greybus_descriptor_type {
GREYBUS_TYPE_INVALID = 0x00,
GREYBUS_TYPE_MODULE = 0x01,
GREYBUS_TYPE_STRING = 0x02,
GREYBUS_TYPE_INTERFACE = 0x03,
GREYBUS_TYPE_CPORT = 0x04,
GREYBUS_TYPE_CLASS = 0x05,
};
enum greybus_protocol {
GREYBUS_PROTOCOL_CONTROL = 0x00,
GREYBUS_PROTOCOL_AP = 0x01,
GREYBUS_PROTOCOL_GPIO = 0x02,
GREYBUS_PROTOCOL_I2C = 0x03,
GREYBUS_PROTOCOL_UART = 0x04,
GREYBUS_PROTOCOL_HID = 0x05,
GREYBUS_PROTOCOL_USB = 0x06,
GREYBUS_PROTOCOL_SDIO = 0x07,
GREYBUS_PROTOCOL_BATTERY = 0x08,
GREYBUS_PROTOCOL_PWM = 0x09,
GREYBUS_PROTOCOL_I2S = 0x0a,
GREYBUS_PROTOCOL_SPI = 0x0b,
GREYBUS_PROTOCOL_DISPLAY = 0x0c,
GREYBUS_PROTOCOL_CAMERA = 0x0d,
GREYBUS_PROTOCOL_SENSOR = 0x0e,
GREYBUS_PROTOCOL_LED = 0x0f,
GREYBUS_PROTOCOL_VIBRATOR = 0x10,
/* ... */
GREYBUS_PROTOCOL_VENDOR = 0xff,
};
enum greybus_class_type {
GREYBUS_CLASS_CONTROL = 0x00,
GREYBUS_CLASS_AP = 0x01,
GREYBUS_CLASS_GPIO = 0x02,
GREYBUS_CLASS_I2C = 0x03,
GREYBUS_CLASS_UART = 0x04,
GREYBUS_CLASS_HID = 0x05,
GREYBUS_CLASS_USB = 0x06,
GREYBUS_CLASS_SDIO = 0x07,
GREYBUS_CLASS_BATTERY = 0x08,
GREYBUS_CLASS_PWM = 0x09,
GREYBUS_CLASS_I2S = 0x0a,
GREYBUS_CLASS_SPI = 0x0b,
GREYBUS_CLASS_DISPLAY = 0x0c,
GREYBUS_CLASS_CAMERA = 0x0d,
GREYBUS_CLASS_SENSOR = 0x0e,
GREYBUS_CLASS_VENDOR = 0xff,
};
/*
* A module descriptor describes information about a module as a
* whole, *not* the functions within it.
*/
struct greybus_descriptor_module {
__le16 vendor;
__le16 product;
__le16 version; // TODO - remove after Dec demo.
__u8 vendor_stringid;
__u8 product_stringid;
__le64 unique_id;
};
/*
* The string in a string descriptor is not NUL-terminated. The
* size of the descriptor will be rounded up to a multiple of 4
* bytes, by padding the string with 0x00 bytes if necessary.
*/
struct greybus_descriptor_string {
__u8 length;
__u8 id;
__u8 string[0];
};
/*
* An interface descriptor simply defines a module-unique id for
* each interface present on a module. Its sole purpose is to allow
* CPort descriptors to specify which interface they are associated
* with. Normally there's only one interface, with id 0. The
* second one must have id 1, and so on consecutively.
*
* The largest CPort id associated with an interface (defined by a
* CPort descriptor in the manifest) is used to determine how to
* encode the device id and module number in UniPro packets
* that use the interface.
*/
struct greybus_descriptor_interface {
__u8 id; /* module-relative id (0..) */
};
/*
* A CPort descriptor indicates the id of the bundle within the
* module it's associated with, along with the CPort id used to
* address the CPort. The protocol id defines the format of messages
* exchanged using the CPort.
*/
struct greybus_descriptor_cport {
__u8 bundle;
__le16 id;
__u8 protocol_id; /* enum greybus_protocol */
};
/*
* A class descriptor defines functionality supplied by a module.
* Beyond that, not much else is defined yet...
*/
struct greybus_descriptor_class {
__u8 class; /* enum greybus_class_type */
};
struct greybus_descriptor_header {
__le16 size;
__u8 type; /* enum greybus_descriptor_type */
};
struct greybus_descriptor {
struct greybus_descriptor_header header;
union {
struct greybus_descriptor_module module;
struct greybus_descriptor_string string;
struct greybus_descriptor_interface interface;
struct greybus_descriptor_cport cport;
struct greybus_descriptor_class class;
};
};
struct greybus_manifest_header {
__le16 size;
__u8 version_major;
__u8 version_minor;
};
struct greybus_manifest {
struct greybus_manifest_header header;
struct greybus_descriptor descriptors[0];
};
#pragma pack(pop)
#endif /* __GREYBUS_MANIFEST_H */