1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef __GREYBUS_MANIFEST_H
15#define __GREYBUS_MANIFEST_H
16
17enum greybus_descriptor_type {
18 GREYBUS_TYPE_INVALID = 0x00,
19 GREYBUS_TYPE_INTERFACE = 0x01,
20 GREYBUS_TYPE_STRING = 0x02,
21 GREYBUS_TYPE_BUNDLE = 0x03,
22 GREYBUS_TYPE_CPORT = 0x04,
23};
24
25enum greybus_protocol {
26 GREYBUS_PROTOCOL_CONTROL = 0x00,
27
28 GREYBUS_PROTOCOL_GPIO = 0x02,
29 GREYBUS_PROTOCOL_I2C = 0x03,
30 GREYBUS_PROTOCOL_UART = 0x04,
31 GREYBUS_PROTOCOL_HID = 0x05,
32 GREYBUS_PROTOCOL_USB = 0x06,
33 GREYBUS_PROTOCOL_SDIO = 0x07,
34 GREYBUS_PROTOCOL_POWER_SUPPLY = 0x08,
35 GREYBUS_PROTOCOL_PWM = 0x09,
36
37 GREYBUS_PROTOCOL_SPI = 0x0b,
38 GREYBUS_PROTOCOL_DISPLAY = 0x0c,
39 GREYBUS_PROTOCOL_CAMERA_MGMT = 0x0d,
40 GREYBUS_PROTOCOL_SENSOR = 0x0e,
41 GREYBUS_PROTOCOL_LIGHTS = 0x0f,
42 GREYBUS_PROTOCOL_VIBRATOR = 0x10,
43 GREYBUS_PROTOCOL_LOOPBACK = 0x11,
44 GREYBUS_PROTOCOL_AUDIO_MGMT = 0x12,
45 GREYBUS_PROTOCOL_AUDIO_DATA = 0x13,
46 GREYBUS_PROTOCOL_SVC = 0x14,
47 GREYBUS_PROTOCOL_BOOTROM = 0x15,
48 GREYBUS_PROTOCOL_CAMERA_DATA = 0x16,
49 GREYBUS_PROTOCOL_FW_DOWNLOAD = 0x17,
50 GREYBUS_PROTOCOL_FW_MANAGEMENT = 0x18,
51 GREYBUS_PROTOCOL_AUTHENTICATION = 0x19,
52 GREYBUS_PROTOCOL_LOG = 0x1a,
53
54 GREYBUS_PROTOCOL_RAW = 0xfe,
55 GREYBUS_PROTOCOL_VENDOR = 0xff,
56};
57
58enum greybus_class_type {
59 GREYBUS_CLASS_CONTROL = 0x00,
60
61
62
63
64 GREYBUS_CLASS_HID = 0x05,
65
66
67 GREYBUS_CLASS_POWER_SUPPLY = 0x08,
68
69 GREYBUS_CLASS_BRIDGED_PHY = 0x0a,
70
71 GREYBUS_CLASS_DISPLAY = 0x0c,
72 GREYBUS_CLASS_CAMERA = 0x0d,
73 GREYBUS_CLASS_SENSOR = 0x0e,
74 GREYBUS_CLASS_LIGHTS = 0x0f,
75 GREYBUS_CLASS_VIBRATOR = 0x10,
76 GREYBUS_CLASS_LOOPBACK = 0x11,
77 GREYBUS_CLASS_AUDIO = 0x12,
78
79
80 GREYBUS_CLASS_BOOTROM = 0x15,
81 GREYBUS_CLASS_FW_MANAGEMENT = 0x16,
82 GREYBUS_CLASS_LOG = 0x17,
83
84 GREYBUS_CLASS_RAW = 0xfe,
85 GREYBUS_CLASS_VENDOR = 0xff,
86};
87
88enum {
89 GREYBUS_INTERFACE_FEATURE_TIMESYNC = BIT(0),
90};
91
92
93
94
95
96
97struct greybus_descriptor_string {
98 __u8 length;
99 __u8 id;
100 __u8 string[0];
101} __packed;
102
103
104
105
106
107struct greybus_descriptor_interface {
108 __u8 vendor_stringid;
109 __u8 product_stringid;
110 __u8 features;
111 __u8 pad;
112} __packed;
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133struct greybus_descriptor_bundle {
134 __u8 id;
135 __u8 class;
136 __u8 pad[2];
137} __packed;
138
139
140
141
142
143
144
145struct greybus_descriptor_cport {
146 __le16 id;
147 __u8 bundle;
148 __u8 protocol_id;
149} __packed;
150
151struct greybus_descriptor_header {
152 __le16 size;
153 __u8 type;
154 __u8 pad;
155} __packed;
156
157struct greybus_descriptor {
158 struct greybus_descriptor_header header;
159 union {
160 struct greybus_descriptor_string string;
161 struct greybus_descriptor_interface interface;
162 struct greybus_descriptor_bundle bundle;
163 struct greybus_descriptor_cport cport;
164 };
165} __packed;
166
167struct greybus_manifest_header {
168 __le16 size;
169 __u8 version_major;
170 __u8 version_minor;
171} __packed;
172
173struct greybus_manifest {
174 struct greybus_manifest_header header;
175 struct greybus_descriptor descriptors[0];
176} __packed;
177
178#endif
179