cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

greybus_manifest.h (4902B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Greybus manifest definition
      4 *
      5 * See "Greybus Application Protocol" document (version 0.1) for
      6 * details on these values and structures.
      7 *
      8 * Copyright 2014-2015 Google Inc.
      9 * Copyright 2014-2015 Linaro Ltd.
     10 *
     11 * Released under the GPLv2 and BSD licenses.
     12 */
     13
     14#ifndef __GREYBUS_MANIFEST_H
     15#define __GREYBUS_MANIFEST_H
     16
     17#include <linux/bits.h>
     18#include <linux/types.h>
     19
     20enum greybus_descriptor_type {
     21	GREYBUS_TYPE_INVALID		= 0x00,
     22	GREYBUS_TYPE_INTERFACE		= 0x01,
     23	GREYBUS_TYPE_STRING		= 0x02,
     24	GREYBUS_TYPE_BUNDLE		= 0x03,
     25	GREYBUS_TYPE_CPORT		= 0x04,
     26};
     27
     28enum greybus_protocol {
     29	GREYBUS_PROTOCOL_CONTROL	= 0x00,
     30	/* 0x01 is unused */
     31	GREYBUS_PROTOCOL_GPIO		= 0x02,
     32	GREYBUS_PROTOCOL_I2C		= 0x03,
     33	GREYBUS_PROTOCOL_UART		= 0x04,
     34	GREYBUS_PROTOCOL_HID		= 0x05,
     35	GREYBUS_PROTOCOL_USB		= 0x06,
     36	GREYBUS_PROTOCOL_SDIO		= 0x07,
     37	GREYBUS_PROTOCOL_POWER_SUPPLY	= 0x08,
     38	GREYBUS_PROTOCOL_PWM		= 0x09,
     39	/* 0x0a is unused */
     40	GREYBUS_PROTOCOL_SPI		= 0x0b,
     41	GREYBUS_PROTOCOL_DISPLAY	= 0x0c,
     42	GREYBUS_PROTOCOL_CAMERA_MGMT	= 0x0d,
     43	GREYBUS_PROTOCOL_SENSOR		= 0x0e,
     44	GREYBUS_PROTOCOL_LIGHTS		= 0x0f,
     45	GREYBUS_PROTOCOL_VIBRATOR	= 0x10,
     46	GREYBUS_PROTOCOL_LOOPBACK	= 0x11,
     47	GREYBUS_PROTOCOL_AUDIO_MGMT	= 0x12,
     48	GREYBUS_PROTOCOL_AUDIO_DATA	= 0x13,
     49	GREYBUS_PROTOCOL_SVC            = 0x14,
     50	GREYBUS_PROTOCOL_BOOTROM	= 0x15,
     51	GREYBUS_PROTOCOL_CAMERA_DATA	= 0x16,
     52	GREYBUS_PROTOCOL_FW_DOWNLOAD	= 0x17,
     53	GREYBUS_PROTOCOL_FW_MANAGEMENT	= 0x18,
     54	GREYBUS_PROTOCOL_AUTHENTICATION	= 0x19,
     55	GREYBUS_PROTOCOL_LOG		= 0x1a,
     56		/* ... */
     57	GREYBUS_PROTOCOL_RAW		= 0xfe,
     58	GREYBUS_PROTOCOL_VENDOR		= 0xff,
     59};
     60
     61enum greybus_class_type {
     62	GREYBUS_CLASS_CONTROL		= 0x00,
     63	/* 0x01 is unused */
     64	/* 0x02 is unused */
     65	/* 0x03 is unused */
     66	/* 0x04 is unused */
     67	GREYBUS_CLASS_HID		= 0x05,
     68	/* 0x06 is unused */
     69	/* 0x07 is unused */
     70	GREYBUS_CLASS_POWER_SUPPLY	= 0x08,
     71	/* 0x09 is unused */
     72	GREYBUS_CLASS_BRIDGED_PHY	= 0x0a,
     73	/* 0x0b is unused */
     74	GREYBUS_CLASS_DISPLAY		= 0x0c,
     75	GREYBUS_CLASS_CAMERA		= 0x0d,
     76	GREYBUS_CLASS_SENSOR		= 0x0e,
     77	GREYBUS_CLASS_LIGHTS		= 0x0f,
     78	GREYBUS_CLASS_VIBRATOR		= 0x10,
     79	GREYBUS_CLASS_LOOPBACK		= 0x11,
     80	GREYBUS_CLASS_AUDIO		= 0x12,
     81	/* 0x13 is unused */
     82	/* 0x14 is unused */
     83	GREYBUS_CLASS_BOOTROM		= 0x15,
     84	GREYBUS_CLASS_FW_MANAGEMENT	= 0x16,
     85	GREYBUS_CLASS_LOG		= 0x17,
     86		/* ... */
     87	GREYBUS_CLASS_RAW		= 0xfe,
     88	GREYBUS_CLASS_VENDOR		= 0xff,
     89};
     90
     91enum {
     92	GREYBUS_INTERFACE_FEATURE_TIMESYNC = BIT(0),
     93};
     94
     95/*
     96 * The string in a string descriptor is not NUL-terminated.  The
     97 * size of the descriptor will be rounded up to a multiple of 4
     98 * bytes, by padding the string with 0x00 bytes if necessary.
     99 */
    100struct greybus_descriptor_string {
    101	__u8	length;
    102	__u8	id;
    103	__u8	string[];
    104} __packed;
    105
    106/*
    107 * An interface descriptor describes information about an interface as a whole,
    108 * *not* the functions within it.
    109 */
    110struct greybus_descriptor_interface {
    111	__u8	vendor_stringid;
    112	__u8	product_stringid;
    113	__u8	features;
    114	__u8	pad;
    115} __packed;
    116
    117/*
    118 * An bundle descriptor defines an identification number and a class for
    119 * each bundle.
    120 *
    121 * @id: Uniquely identifies a bundle within a interface, its sole purpose is to
    122 * allow CPort descriptors to specify which bundle they are associated with.
    123 * The first bundle will have id 0, second will have 1 and so on.
    124 *
    125 * The largest CPort id associated with an bundle (defined by a
    126 * CPort descriptor in the manifest) is used to determine how to
    127 * encode the device id and module number in UniPro packets
    128 * that use the bundle.
    129 *
    130 * @class: It is used by kernel to know the functionality provided by the
    131 * bundle and will be matched against drivers functinality while probing greybus
    132 * driver. It should contain one of the values defined in
    133 * 'enum greybus_class_type'.
    134 *
    135 */
    136struct greybus_descriptor_bundle {
    137	__u8	id;	/* interface-relative id (0..) */
    138	__u8	class;
    139	__u8	pad[2];
    140} __packed;
    141
    142/*
    143 * A CPort descriptor indicates the id of the bundle within the
    144 * module it's associated with, along with the CPort id used to
    145 * address the CPort.  The protocol id defines the format of messages
    146 * exchanged using the CPort.
    147 */
    148struct greybus_descriptor_cport {
    149	__le16	id;
    150	__u8	bundle;
    151	__u8	protocol_id;	/* enum greybus_protocol */
    152} __packed;
    153
    154struct greybus_descriptor_header {
    155	__le16	size;
    156	__u8	type;		/* enum greybus_descriptor_type */
    157	__u8	pad;
    158} __packed;
    159
    160struct greybus_descriptor {
    161	struct greybus_descriptor_header		header;
    162	union {
    163		struct greybus_descriptor_string	string;
    164		struct greybus_descriptor_interface	interface;
    165		struct greybus_descriptor_bundle	bundle;
    166		struct greybus_descriptor_cport		cport;
    167	};
    168} __packed;
    169
    170struct greybus_manifest_header {
    171	__le16	size;
    172	__u8	version_major;
    173	__u8	version_minor;
    174} __packed;
    175
    176struct greybus_manifest {
    177	struct greybus_manifest_header		header;
    178	struct greybus_descriptor		descriptors[];
    179} __packed;
    180
    181#endif /* __GREYBUS_MANIFEST_H */