blob: 53c1dea6b16d030533c0af930fcc85e5159ba775 [file] [log] [blame]
John Stultz453bbea2015-04-09 16:01:31 -07001/*
2 * This file is provided under a dual BSD/GPLv2 license. When using or
3 * redistributing this file, you may do so under either license.
4 *
5 * GPL LICENSE SUMMARY
6 *
7 * Copyright(c) 2014 - 2015 Google Inc. All rights reserved.
8 * Copyright(c) 2014 - 2015 Linaro Ltd. All rights reserved.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of version 2 of the GNU General Public License as
12 * published by the Free Software Foundation.
13 *
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License version 2 for more details.
18 *
19 * BSD LICENSE
20 *
21 * Copyright(c) 2014 - 2015 Google Inc. All rights reserved.
22 * Copyright(c) 2014 - 2015 Linaro Ltd. All rights reserved.
23 *
24 * Redistribution and use in source and binary forms, with or without
25 * modification, are permitted provided that the following conditions
26 * are met:
27 *
28 * * Redistributions of source code must retain the above copyright
29 * notice, this list of conditions and the following disclaimer.
30 * * Redistributions in binary form must reproduce the above copyright
31 * notice, this list of conditions and the following disclaimer in
32 * the documentation and/or other materials provided with the
33 * distribution.
34 * * Neither the name of Google Inc. or Linaro Ltd. nor the names of
35 * its contributors may be used to endorse or promote products
36 * derived from this software without specific prior written
37 * permission.
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
40 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
41 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
42 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC. OR
43 * LINARO LTD. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
44 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
45 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
46 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
47 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
48 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
49 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50 */
51
Alex Elder012d7d42015-05-27 14:45:58 -050052#ifndef __GREYBUS_PROTOCOLS_H
53#define __GREYBUS_PROTOCOLS_H
John Stultz453bbea2015-04-09 16:01:31 -070054
Viresh Kumarc8dd60d2015-07-21 17:44:12 +053055/* Fixed IDs for control/svc protocols */
56
57/* Device ID of SVC and AP */
58#define GB_DEVICE_ID_SVC 0
59#define GB_DEVICE_ID_AP 1
60#define GB_DEVICE_ID_MODULES_START 2
Viresh Kumarcdee4f72015-06-22 16:42:26 +053061
Viresh Kumarec320622015-07-21 17:44:13 +053062/*
63 * Bundle/cport for control/svc cport: The same bundle/cport is shared by both
64 * CONTROL and SVC protocols for communication between AP and SVC.
65 */
66#define GB_SVC_BUNDLE_ID 0
Viresh Kumaref5d9492015-07-24 15:32:24 +053067#define GB_SVC_CPORT_ID 0
Viresh Kumarcdee4f72015-06-22 16:42:26 +053068#define GB_CONTROL_BUNDLE_ID 0
Viresh Kumaref5d9492015-07-24 15:32:24 +053069#define GB_CONTROL_CPORT_ID 0
Viresh Kumarcdee4f72015-06-22 16:42:26 +053070
Viresh Kumar6366d732015-07-21 17:44:11 +053071
Viresh Kumare34fae52015-07-29 11:42:54 +053072/*
73 * All operation messages (both requests and responses) begin with
74 * a header that encodes the size of the message (header included).
75 * This header also contains a unique identifier, that associates a
76 * response message with its operation. The header contains an
77 * operation type field, whose interpretation is dependent on what
78 * type of protocol is used over the connection. The high bit
79 * (0x80) of the operation type field is used to indicate whether
80 * the message is a request (clear) or a response (set).
81 *
82 * Response messages include an additional result byte, which
83 * communicates the result of the corresponding request. A zero
84 * result value means the operation completed successfully. Any
85 * other value indicates an error; in this case, the payload of the
86 * response message (if any) is ignored. The result byte must be
87 * zero in the header for a request message.
88 *
89 * The wire format for all numeric fields in the header is little
90 * endian. Any operation-specific data begins immediately after the
91 * header.
92 */
93struct gb_operation_msg_hdr {
94 __le16 size; /* Size in bytes of header + payload */
95 __le16 operation_id; /* Operation unique id */
96 __u8 type; /* E.g GB_I2C_TYPE_* or GB_GPIO_TYPE_* */
97 __u8 result; /* Result of request (in responses only) */
98 __u8 pad[2]; /* must be zero (ignore when read) */
Viresh Kumarb7016862015-08-31 17:21:04 +053099} __packed;
Viresh Kumarec320622015-07-21 17:44:13 +0530100
101
Viresh Kumar2b11a452015-08-11 07:35:57 +0530102/* Generic request numbers supported by all modules */
103#define GB_REQUEST_TYPE_INVALID 0x00
104#define GB_REQUEST_TYPE_PROTOCOL_VERSION 0x01
105
Johan Hovoldcfb16902015-09-15 10:48:01 +0200106struct gb_protocol_version_request {
107 __u8 major;
108 __u8 minor;
109} __packed;
Viresh Kumare34fae52015-07-29 11:42:54 +0530110
Viresh Kumar6366d732015-07-21 17:44:11 +0530111struct gb_protocol_version_response {
112 __u8 major;
113 __u8 minor;
Viresh Kumarb7016862015-08-31 17:21:04 +0530114} __packed;
Viresh Kumar6366d732015-07-21 17:44:11 +0530115
116/* Control Protocol */
117
Viresh Kumarcdee4f72015-06-22 16:42:26 +0530118/* Version of the Greybus control protocol we support */
119#define GB_CONTROL_VERSION_MAJOR 0x00
120#define GB_CONTROL_VERSION_MINOR 0x01
121
122/* Greybus control request types */
Viresh Kumarcdee4f72015-06-22 16:42:26 +0530123#define GB_CONTROL_TYPE_PROBE_AP 0x02
124#define GB_CONTROL_TYPE_GET_MANIFEST_SIZE 0x03
125#define GB_CONTROL_TYPE_GET_MANIFEST 0x04
126#define GB_CONTROL_TYPE_CONNECTED 0x05
127#define GB_CONTROL_TYPE_DISCONNECTED 0x06
128
129/* Control protocol manifest get size request has no payload*/
130struct gb_control_get_manifest_size_response {
131 __le16 size;
Viresh Kumarb7016862015-08-31 17:21:04 +0530132} __packed;
Viresh Kumarcdee4f72015-06-22 16:42:26 +0530133
134/* Control protocol manifest get request has no payload */
135struct gb_control_get_manifest_response {
136 __u8 data[0];
Viresh Kumarb7016862015-08-31 17:21:04 +0530137} __packed;
Viresh Kumarcdee4f72015-06-22 16:42:26 +0530138
139/* Control protocol [dis]connected request */
140struct gb_control_connected_request {
141 __le16 cport_id;
Viresh Kumarb7016862015-08-31 17:21:04 +0530142} __packed;
Viresh Kumarcdee4f72015-06-22 16:42:26 +0530143
144struct gb_control_disconnected_request {
145 __le16 cport_id;
Viresh Kumarb7016862015-08-31 17:21:04 +0530146} __packed;
Viresh Kumarcdee4f72015-06-22 16:42:26 +0530147/* Control protocol [dis]connected response has no payload */
148
Viresh Kumar90f1b612015-08-12 09:19:33 +0530149
150/* Firmware Protocol */
151
152/* Version of the Greybus firmware protocol we support */
153#define GB_FIRMWARE_VERSION_MAJOR 0x00
154#define GB_FIRMWARE_VERSION_MINOR 0x01
155
156/* Greybus firmware request types */
Viresh Kumar90f1b612015-08-12 09:19:33 +0530157#define GB_FIRMWARE_TYPE_FIRMWARE_SIZE 0x02
158#define GB_FIRMWARE_TYPE_GET_FIRMWARE 0x03
159#define GB_FIRMWARE_TYPE_READY_TO_BOOT 0x04
Viresh Kumar4c9e2282015-09-09 21:08:33 +0530160#define GB_FIRMWARE_TYPE_AP_READY 0x05 /* Request with no-payload */
Viresh Kumarf1e941a2015-11-26 15:33:46 +0530161#define GB_FIRMWARE_TYPE_GET_VID_PID 0x06 /* Request with no-payload */
Viresh Kumar90f1b612015-08-12 09:19:33 +0530162
Eli Sennesh3563ff82015-12-22 17:26:57 -0500163/* FIXME: remove all ES2-specific identifiers from the kernel */
164#define ES2_DDBL1_MFR_ID 0x00000126
165#define ES2_DDBL1_PROD_ID 0x00001000
166
Viresh Kumar90f1b612015-08-12 09:19:33 +0530167/* Greybus firmware boot stages */
168#define GB_FIRMWARE_BOOT_STAGE_ONE 0x01 /* Reserved for the boot ROM */
169#define GB_FIRMWARE_BOOT_STAGE_TWO 0x02 /* Firmware package to be loaded by the boot ROM */
170#define GB_FIRMWARE_BOOT_STAGE_THREE 0x03 /* Module personality package loaded by Stage 2 firmware */
171
172/* Greybus firmware ready to boot status */
173#define GB_FIRMWARE_BOOT_STATUS_INVALID 0x00 /* Firmware blob could not be validated */
174#define GB_FIRMWARE_BOOT_STATUS_INSECURE 0x01 /* Firmware blob is valid but insecure */
175#define GB_FIRMWARE_BOOT_STATUS_SECURE 0x02 /* Firmware blob is valid and secure */
176
177/* Max firmware data fetch size in bytes */
178#define GB_FIRMWARE_FETCH_MAX 2000
179
180/* Firmware protocol firmware size request/response */
181struct gb_firmware_size_request {
182 __u8 stage;
Viresh Kumar829a91e2015-08-31 17:21:03 +0530183} __packed;
Viresh Kumar90f1b612015-08-12 09:19:33 +0530184
185struct gb_firmware_size_response {
186 __le32 size;
Viresh Kumar829a91e2015-08-31 17:21:03 +0530187} __packed;
Viresh Kumar90f1b612015-08-12 09:19:33 +0530188
189/* Firmware protocol get firmware request/response */
190struct gb_firmware_get_firmware_request {
191 __le32 offset;
192 __le32 size;
Viresh Kumar829a91e2015-08-31 17:21:03 +0530193} __packed;
Viresh Kumar90f1b612015-08-12 09:19:33 +0530194
195struct gb_firmware_get_firmware_response {
196 __u8 data[0];
Viresh Kumar829a91e2015-08-31 17:21:03 +0530197} __packed;
Viresh Kumar90f1b612015-08-12 09:19:33 +0530198
199/* Firmware protocol Ready to boot request */
200struct gb_firmware_ready_to_boot_request {
Viresh Kumar90f1b612015-08-12 09:19:33 +0530201 __u8 status;
Viresh Kumar829a91e2015-08-31 17:21:03 +0530202} __packed;
Viresh Kumar90f1b612015-08-12 09:19:33 +0530203/* Firmware protocol Ready to boot response has no payload */
204
Viresh Kumarf1e941a2015-11-26 15:33:46 +0530205/* Firmware protocol get VID/PID request has no payload */
206struct gb_firmware_get_vid_pid_response {
207 __le32 vendor_id;
208 __le32 product_id;
209} __packed;
210
Viresh Kumar90f1b612015-08-12 09:19:33 +0530211
Rui Miguel Silva2724be02015-11-12 15:36:00 +0000212/* Power Supply */
Viresh Kumarce832942015-08-12 11:51:10 +0530213
Rui Miguel Silva2724be02015-11-12 15:36:00 +0000214/* Version of the Greybus power supply protocol we support */
215#define GB_POWER_SUPPLY_VERSION_MAJOR 0x00
216#define GB_POWER_SUPPLY_VERSION_MINOR 0x01
Viresh Kumarce832942015-08-12 11:51:10 +0530217
Rui Miguel Silva2724be02015-11-12 15:36:00 +0000218/* Greybus power supply request types */
Rui Miguel Silvaffe2e242015-11-12 15:36:02 +0000219#define GB_POWER_SUPPLY_TYPE_GET_SUPPLIES 0x02
220#define GB_POWER_SUPPLY_TYPE_GET_DESCRIPTION 0x03
221#define GB_POWER_SUPPLY_TYPE_GET_PROP_DESCRIPTORS 0x04
222#define GB_POWER_SUPPLY_TYPE_GET_PROPERTY 0x05
223#define GB_POWER_SUPPLY_TYPE_SET_PROPERTY 0x06
224#define GB_POWER_SUPPLY_TYPE_EVENT 0x07
Viresh Kumarce832942015-08-12 11:51:10 +0530225
Rui Miguel Silvaffe2e242015-11-12 15:36:02 +0000226/* Should match up with battery technologies in linux/power_supply.h */
Rui Miguel Silva2724be02015-11-12 15:36:00 +0000227#define GB_POWER_SUPPLY_TECH_UNKNOWN 0x0000
228#define GB_POWER_SUPPLY_TECH_NiMH 0x0001
229#define GB_POWER_SUPPLY_TECH_LION 0x0002
230#define GB_POWER_SUPPLY_TECH_LIPO 0x0003
231#define GB_POWER_SUPPLY_TECH_LiFe 0x0004
232#define GB_POWER_SUPPLY_TECH_NiCd 0x0005
233#define GB_POWER_SUPPLY_TECH_LiMn 0x0006
Viresh Kumarce832942015-08-12 11:51:10 +0530234
Rui Miguel Silvaffe2e242015-11-12 15:36:02 +0000235/* Should match up with power supply types in linux/power_supply.h */
236#define GB_POWER_SUPPLY_UNKNOWN_TYPE 0x0000
237#define GB_POWER_SUPPLY_BATTERY_TYPE 0x0001
238#define GB_POWER_SUPPLY_UPS_TYPE 0x0002
239#define GB_POWER_SUPPLY_MAINS_TYPE 0x0003
240#define GB_POWER_SUPPLY_USB_TYPE 0x0004
241#define GB_POWER_SUPPLY_USB_DCP_TYPE 0x0005
242#define GB_POWER_SUPPLY_USB_CDP_TYPE 0x0006
243#define GB_POWER_SUPPLY_USB_ACA_TYPE 0x0007
244
245/* Should match up with power supply health in linux/power_supply.h */
246#define GB_POWER_SUPPLY_HEALTH_UNKNOWN 0x0000
247#define GB_POWER_SUPPLY_HEALTH_GOOD 0x0001
248#define GB_POWER_SUPPLY_HEALTH_OVERHEAT 0x0002
249#define GB_POWER_SUPPLY_HEALTH_DEAD 0x0003
250#define GB_POWER_SUPPLY_HEALTH_OVERVOLTAGE 0x0004
251#define GB_POWER_SUPPLY_HEALTH_UNSPEC_FAILURE 0x0005
252#define GB_POWER_SUPPLY_HEALTH_COLD 0x0006
253#define GB_POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE 0x0007
254#define GB_POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE 0x0008
255
256/* Should match up with battery status in linux/power_supply.h */
257#define GB_POWER_SUPPLY_STATUS_UNKNOWN 0x0000
258#define GB_POWER_SUPPLY_STATUS_CHARGING 0x0001
259#define GB_POWER_SUPPLY_STATUS_DISCHARGING 0x0002
260#define GB_POWER_SUPPLY_STATUS_NOT_CHARGING 0x0003
261#define GB_POWER_SUPPLY_STATUS_FULL 0x0004
262
263struct gb_power_supply_get_supplies_response {
264 __u8 supplies_count;
Viresh Kumarb7016862015-08-31 17:21:04 +0530265} __packed;
Viresh Kumarce832942015-08-12 11:51:10 +0530266
Rui Miguel Silvaffe2e242015-11-12 15:36:02 +0000267struct gb_power_supply_get_description_request {
268 __u8 psy_id;
Viresh Kumarb7016862015-08-31 17:21:04 +0530269} __packed;
Viresh Kumarce832942015-08-12 11:51:10 +0530270
Rui Miguel Silvaffe2e242015-11-12 15:36:02 +0000271struct gb_power_supply_get_description_response {
272 __u8 manufacturer[32];
273 __u8 model[32];
274 __u8 serial_number[32];
275 __le16 type;
276 __u8 properties_count;
Viresh Kumarb7016862015-08-31 17:21:04 +0530277} __packed;
Viresh Kumarce832942015-08-12 11:51:10 +0530278
Rui Miguel Silvaffe2e242015-11-12 15:36:02 +0000279struct gb_power_supply_props_desc {
280 __u8 property;
281#define GB_POWER_SUPPLY_PROP_STATUS 0x00
282#define GB_POWER_SUPPLY_PROP_CHARGE_TYPE 0x01
283#define GB_POWER_SUPPLY_PROP_HEALTH 0x02
284#define GB_POWER_SUPPLY_PROP_PRESENT 0x03
285#define GB_POWER_SUPPLY_PROP_ONLINE 0x04
286#define GB_POWER_SUPPLY_PROP_AUTHENTIC 0x05
287#define GB_POWER_SUPPLY_PROP_TECHNOLOGY 0x06
288#define GB_POWER_SUPPLY_PROP_CYCLE_COUNT 0x07
289#define GB_POWER_SUPPLY_PROP_VOLTAGE_MAX 0x08
290#define GB_POWER_SUPPLY_PROP_VOLTAGE_MIN 0x09
291#define GB_POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN 0x0A
292#define GB_POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN 0x0B
293#define GB_POWER_SUPPLY_PROP_VOLTAGE_NOW 0x0C
294#define GB_POWER_SUPPLY_PROP_VOLTAGE_AVG 0x0D
295#define GB_POWER_SUPPLY_PROP_VOLTAGE_OCV 0x0E
296#define GB_POWER_SUPPLY_PROP_VOLTAGE_BOOT 0x0F
297#define GB_POWER_SUPPLY_PROP_CURRENT_MAX 0x10
298#define GB_POWER_SUPPLY_PROP_CURRENT_NOW 0x11
299#define GB_POWER_SUPPLY_PROP_CURRENT_AVG 0x12
300#define GB_POWER_SUPPLY_PROP_CURRENT_BOOT 0x13
301#define GB_POWER_SUPPLY_PROP_POWER_NOW 0x14
302#define GB_POWER_SUPPLY_PROP_POWER_AVG 0x15
303#define GB_POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN 0x16
304#define GB_POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN 0x17
305#define GB_POWER_SUPPLY_PROP_CHARGE_FULL 0x18
306#define GB_POWER_SUPPLY_PROP_CHARGE_EMPTY 0x19
307#define GB_POWER_SUPPLY_PROP_CHARGE_NOW 0x1A
308#define GB_POWER_SUPPLY_PROP_CHARGE_AVG 0x1B
309#define GB_POWER_SUPPLY_PROP_CHARGE_COUNTER 0x1C
310#define GB_POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT 0x1D
311#define GB_POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX 0x1E
312#define GB_POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE 0x1F
313#define GB_POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX 0x20
314#define GB_POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT 0x21
315#define GB_POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX 0x22
316#define GB_POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT 0x23
317#define GB_POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN 0x24
318#define GB_POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN 0x25
319#define GB_POWER_SUPPLY_PROP_ENERGY_FULL 0x26
320#define GB_POWER_SUPPLY_PROP_ENERGY_EMPTY 0x27
321#define GB_POWER_SUPPLY_PROP_ENERGY_NOW 0x28
322#define GB_POWER_SUPPLY_PROP_ENERGY_AVG 0x29
323#define GB_POWER_SUPPLY_PROP_CAPACITY 0x2A
324#define GB_POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN 0x2B
325#define GB_POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX 0x2C
326#define GB_POWER_SUPPLY_PROP_CAPACITY_LEVEL 0x2D
327#define GB_POWER_SUPPLY_PROP_TEMP 0x2E
328#define GB_POWER_SUPPLY_PROP_TEMP_MAX 0x2F
329#define GB_POWER_SUPPLY_PROP_TEMP_MIN 0x30
330#define GB_POWER_SUPPLY_PROP_TEMP_ALERT_MIN 0x31
331#define GB_POWER_SUPPLY_PROP_TEMP_ALERT_MAX 0x32
332#define GB_POWER_SUPPLY_PROP_TEMP_AMBIENT 0x33
333#define GB_POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN 0x34
334#define GB_POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX 0x35
335#define GB_POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW 0x36
336#define GB_POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG 0x37
337#define GB_POWER_SUPPLY_PROP_TIME_TO_FULL_NOW 0x38
338#define GB_POWER_SUPPLY_PROP_TIME_TO_FULL_AVG 0x39
339#define GB_POWER_SUPPLY_PROP_TYPE 0x3A
340#define GB_POWER_SUPPLY_PROP_SCOPE 0x3B
341#define GB_POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT 0x3C
342#define GB_POWER_SUPPLY_PROP_CALIBRATE 0x3D
343 __u8 is_writeable;
Viresh Kumarb7016862015-08-31 17:21:04 +0530344} __packed;
Viresh Kumarce832942015-08-12 11:51:10 +0530345
Rui Miguel Silvaffe2e242015-11-12 15:36:02 +0000346struct gb_power_supply_get_property_descriptors_request {
347 __u8 psy_id;
Viresh Kumarb7016862015-08-31 17:21:04 +0530348} __packed;
Viresh Kumarce832942015-08-12 11:51:10 +0530349
Rui Miguel Silvaffe2e242015-11-12 15:36:02 +0000350struct gb_power_supply_get_property_descriptors_response {
351 __u8 properties_count;
352 struct gb_power_supply_props_desc props[];
353} __packed;
354
355struct gb_power_supply_get_property_request {
356 __u8 psy_id;
357 __u8 property;
358} __packed;
359
360struct gb_power_supply_get_property_response {
361 __le32 prop_val;
362};
363
364struct gb_power_supply_set_property_request {
365 __u8 psy_id;
366 __u8 property;
367 __le32 prop_val;
368} __packed;
369
370struct gb_power_supply_event_request {
371 __u8 psy_id;
372 __u8 event;
373#define GB_POWER_SUPPLY_UPDATE 0x01
Viresh Kumarb7016862015-08-31 17:21:04 +0530374} __packed;
Viresh Kumarce832942015-08-12 11:51:10 +0530375
376
Viresh Kumar51aee042015-08-12 11:51:11 +0530377/* HID */
378
379/* Version of the Greybus hid protocol we support */
380#define GB_HID_VERSION_MAJOR 0x00
381#define GB_HID_VERSION_MINOR 0x01
382
383/* Greybus HID operation types */
Viresh Kumar51aee042015-08-12 11:51:11 +0530384#define GB_HID_TYPE_GET_DESC 0x02
385#define GB_HID_TYPE_GET_REPORT_DESC 0x03
386#define GB_HID_TYPE_PWR_ON 0x04
387#define GB_HID_TYPE_PWR_OFF 0x05
388#define GB_HID_TYPE_GET_REPORT 0x06
389#define GB_HID_TYPE_SET_REPORT 0x07
390#define GB_HID_TYPE_IRQ_EVENT 0x08
391
392/* Report type */
393#define GB_HID_INPUT_REPORT 0
394#define GB_HID_OUTPUT_REPORT 1
395#define GB_HID_FEATURE_REPORT 2
396
397/* Different request/response structures */
398/* HID get descriptor response */
399struct gb_hid_desc_response {
400 __u8 bLength;
401 __le16 wReportDescLength;
402 __le16 bcdHID;
403 __le16 wProductID;
404 __le16 wVendorID;
405 __u8 bCountryCode;
406} __packed;
407
408/* HID get report request/response */
409struct gb_hid_get_report_request {
410 __u8 report_type;
411 __u8 report_id;
Viresh Kumarb7016862015-08-31 17:21:04 +0530412} __packed;
Viresh Kumar51aee042015-08-12 11:51:11 +0530413
414/* HID set report request */
415struct gb_hid_set_report_request {
416 __u8 report_type;
417 __u8 report_id;
418 __u8 report[0];
Viresh Kumarb7016862015-08-31 17:21:04 +0530419} __packed;
Viresh Kumar51aee042015-08-12 11:51:11 +0530420
421/* HID input report request, via interrupt pipe */
422struct gb_hid_input_report_request {
423 __u8 report[0];
Viresh Kumarb7016862015-08-31 17:21:04 +0530424} __packed;
Viresh Kumar51aee042015-08-12 11:51:11 +0530425
426
John Stultz453bbea2015-04-09 16:01:31 -0700427/* I2C */
428
429/* Version of the Greybus i2c protocol we support */
Greg Kroah-Hartman67c920b2015-04-10 11:18:49 +0200430#define GB_I2C_VERSION_MAJOR 0x00
431#define GB_I2C_VERSION_MINOR 0x01
John Stultz453bbea2015-04-09 16:01:31 -0700432
433/* Greybus i2c request types */
Greg Kroah-Hartman67c920b2015-04-10 11:18:49 +0200434#define GB_I2C_TYPE_FUNCTIONALITY 0x02
435#define GB_I2C_TYPE_TIMEOUT 0x03
436#define GB_I2C_TYPE_RETRIES 0x04
437#define GB_I2C_TYPE_TRANSFER 0x05
John Stultz453bbea2015-04-09 16:01:31 -0700438
Greg Kroah-Hartman67c920b2015-04-10 11:18:49 +0200439#define GB_I2C_RETRIES_DEFAULT 3
440#define GB_I2C_TIMEOUT_DEFAULT 1000 /* milliseconds */
John Stultz453bbea2015-04-09 16:01:31 -0700441
442/* functionality request has no payload */
443struct gb_i2c_functionality_response {
444 __le32 functionality;
Viresh Kumarb7016862015-08-31 17:21:04 +0530445} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700446
447struct gb_i2c_timeout_request {
448 __le16 msec;
Viresh Kumarb7016862015-08-31 17:21:04 +0530449} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700450/* timeout response has no payload */
451
452struct gb_i2c_retries_request {
453 __u8 retries;
Viresh Kumarb7016862015-08-31 17:21:04 +0530454} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700455/* retries response has no payload */
456
457/*
458 * Outgoing data immediately follows the op count and ops array.
459 * The data for each write (master -> slave) op in the array is sent
460 * in order, with no (e.g. pad) bytes separating them.
461 *
462 * Short reads cause the entire transfer request to fail So response
463 * payload consists only of bytes read, and the number of bytes is
464 * exactly what was specified in the corresponding op. Like
465 * outgoing data, the incoming data is in order and contiguous.
466 */
467struct gb_i2c_transfer_op {
468 __le16 addr;
469 __le16 flags;
470 __le16 size;
Viresh Kumarb7016862015-08-31 17:21:04 +0530471} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700472
473struct gb_i2c_transfer_request {
474 __le16 op_count;
475 struct gb_i2c_transfer_op ops[0]; /* op_count of these */
Viresh Kumarb7016862015-08-31 17:21:04 +0530476} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700477struct gb_i2c_transfer_response {
478 __u8 data[0]; /* inbound data */
Viresh Kumarb7016862015-08-31 17:21:04 +0530479} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700480
481
482/* GPIO */
483
484/* Version of the Greybus GPIO protocol we support */
Greg Kroah-Hartman67c920b2015-04-10 11:18:49 +0200485#define GB_GPIO_VERSION_MAJOR 0x00
486#define GB_GPIO_VERSION_MINOR 0x01
John Stultz453bbea2015-04-09 16:01:31 -0700487
488/* Greybus GPIO request types */
Greg Kroah-Hartman67c920b2015-04-10 11:18:49 +0200489#define GB_GPIO_TYPE_LINE_COUNT 0x02
490#define GB_GPIO_TYPE_ACTIVATE 0x03
491#define GB_GPIO_TYPE_DEACTIVATE 0x04
492#define GB_GPIO_TYPE_GET_DIRECTION 0x05
493#define GB_GPIO_TYPE_DIRECTION_IN 0x06
494#define GB_GPIO_TYPE_DIRECTION_OUT 0x07
495#define GB_GPIO_TYPE_GET_VALUE 0x08
496#define GB_GPIO_TYPE_SET_VALUE 0x09
497#define GB_GPIO_TYPE_SET_DEBOUNCE 0x0a
John Stultz453bbea2015-04-09 16:01:31 -0700498#define GB_GPIO_TYPE_IRQ_TYPE 0x0b
Johan Hovold47bf0b42015-05-27 12:45:07 +0200499#define GB_GPIO_TYPE_IRQ_MASK 0x0c
500#define GB_GPIO_TYPE_IRQ_UNMASK 0x0d
501#define GB_GPIO_TYPE_IRQ_EVENT 0x0e
John Stultz453bbea2015-04-09 16:01:31 -0700502
Johan Hovold7ba864a2015-05-28 19:03:34 +0200503#define GB_GPIO_IRQ_TYPE_NONE 0x00
504#define GB_GPIO_IRQ_TYPE_EDGE_RISING 0x01
505#define GB_GPIO_IRQ_TYPE_EDGE_FALLING 0x02
506#define GB_GPIO_IRQ_TYPE_EDGE_BOTH 0x03
507#define GB_GPIO_IRQ_TYPE_LEVEL_HIGH 0x04
508#define GB_GPIO_IRQ_TYPE_LEVEL_LOW 0x08
509
John Stultz453bbea2015-04-09 16:01:31 -0700510/* line count request has no payload */
511struct gb_gpio_line_count_response {
512 __u8 count;
Viresh Kumarb7016862015-08-31 17:21:04 +0530513} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700514
515struct gb_gpio_activate_request {
516 __u8 which;
Viresh Kumarb7016862015-08-31 17:21:04 +0530517} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700518/* activate response has no payload */
519
520struct gb_gpio_deactivate_request {
521 __u8 which;
Viresh Kumarb7016862015-08-31 17:21:04 +0530522} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700523/* deactivate response has no payload */
524
525struct gb_gpio_get_direction_request {
526 __u8 which;
Viresh Kumarb7016862015-08-31 17:21:04 +0530527} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700528struct gb_gpio_get_direction_response {
529 __u8 direction;
Viresh Kumarb7016862015-08-31 17:21:04 +0530530} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700531
532struct gb_gpio_direction_in_request {
533 __u8 which;
Viresh Kumarb7016862015-08-31 17:21:04 +0530534} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700535/* direction in response has no payload */
536
537struct gb_gpio_direction_out_request {
538 __u8 which;
539 __u8 value;
Viresh Kumarb7016862015-08-31 17:21:04 +0530540} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700541/* direction out response has no payload */
542
543struct gb_gpio_get_value_request {
544 __u8 which;
Viresh Kumarb7016862015-08-31 17:21:04 +0530545} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700546struct gb_gpio_get_value_response {
547 __u8 value;
Viresh Kumarb7016862015-08-31 17:21:04 +0530548} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700549
550struct gb_gpio_set_value_request {
551 __u8 which;
552 __u8 value;
Viresh Kumarb7016862015-08-31 17:21:04 +0530553} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700554/* set value response has no payload */
555
556struct gb_gpio_set_debounce_request {
557 __u8 which;
Johan Hovold5b559e62015-08-01 11:50:41 +0200558 __le16 usec;
559} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700560/* debounce response has no payload */
561
562struct gb_gpio_irq_type_request {
563 __u8 which;
564 __u8 type;
Viresh Kumarb7016862015-08-31 17:21:04 +0530565} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700566/* irq type response has no payload */
567
568struct gb_gpio_irq_mask_request {
569 __u8 which;
Viresh Kumarb7016862015-08-31 17:21:04 +0530570} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700571/* irq mask response has no payload */
572
573struct gb_gpio_irq_unmask_request {
574 __u8 which;
Viresh Kumarb7016862015-08-31 17:21:04 +0530575} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700576/* irq unmask response has no payload */
577
John Stultz453bbea2015-04-09 16:01:31 -0700578/* irq event requests originate on another module and are handled on the AP */
579struct gb_gpio_irq_event_request {
580 __u8 which;
Viresh Kumarb7016862015-08-31 17:21:04 +0530581} __packed;
Johan Hovold1409c4d2015-05-26 15:29:25 +0200582/* irq event has no response */
John Stultz453bbea2015-04-09 16:01:31 -0700583
584
585/* PWM */
586
587/* Version of the Greybus PWM protocol we support */
Greg Kroah-Hartman67c920b2015-04-10 11:18:49 +0200588#define GB_PWM_VERSION_MAJOR 0x00
589#define GB_PWM_VERSION_MINOR 0x01
John Stultz453bbea2015-04-09 16:01:31 -0700590
Alex Elder6d653372015-05-07 13:03:52 -0500591/* Greybus PWM operation types */
Greg Kroah-Hartman67c920b2015-04-10 11:18:49 +0200592#define GB_PWM_TYPE_PWM_COUNT 0x02
593#define GB_PWM_TYPE_ACTIVATE 0x03
594#define GB_PWM_TYPE_DEACTIVATE 0x04
595#define GB_PWM_TYPE_CONFIG 0x05
596#define GB_PWM_TYPE_POLARITY 0x06
597#define GB_PWM_TYPE_ENABLE 0x07
598#define GB_PWM_TYPE_DISABLE 0x08
John Stultz453bbea2015-04-09 16:01:31 -0700599
600/* pwm count request has no payload */
601struct gb_pwm_count_response {
602 __u8 count;
Viresh Kumarb7016862015-08-31 17:21:04 +0530603} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700604
605struct gb_pwm_activate_request {
606 __u8 which;
Viresh Kumarb7016862015-08-31 17:21:04 +0530607} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700608
609struct gb_pwm_deactivate_request {
610 __u8 which;
Viresh Kumarb7016862015-08-31 17:21:04 +0530611} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700612
613struct gb_pwm_config_request {
614 __u8 which;
Johan Hovold5b559e62015-08-01 11:50:41 +0200615 __le32 duty;
616 __le32 period;
617} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700618
619struct gb_pwm_polarity_request {
620 __u8 which;
621 __u8 polarity;
Viresh Kumarb7016862015-08-31 17:21:04 +0530622} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700623
624struct gb_pwm_enable_request {
625 __u8 which;
Viresh Kumarb7016862015-08-31 17:21:04 +0530626} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700627
628struct gb_pwm_disable_request {
629 __u8 which;
Viresh Kumarb7016862015-08-31 17:21:04 +0530630} __packed;
John Stultz453bbea2015-04-09 16:01:31 -0700631
Viresh Kumar4890f312015-05-20 16:33:57 +0530632/* SPI */
633
634/* Version of the Greybus spi protocol we support */
635#define GB_SPI_VERSION_MAJOR 0x00
636#define GB_SPI_VERSION_MINOR 0x01
637
638/* Should match up with modes in linux/spi/spi.h */
639#define GB_SPI_MODE_CPHA 0x01 /* clock phase */
640#define GB_SPI_MODE_CPOL 0x02 /* clock polarity */
641#define GB_SPI_MODE_MODE_0 (0|0) /* (original MicroWire) */
642#define GB_SPI_MODE_MODE_1 (0|GB_SPI_MODE_CPHA)
643#define GB_SPI_MODE_MODE_2 (GB_SPI_MODE_CPOL|0)
644#define GB_SPI_MODE_MODE_3 (GB_SPI_MODE_CPOL|GB_SPI_MODE_CPHA)
645#define GB_SPI_MODE_CS_HIGH 0x04 /* chipselect active high? */
646#define GB_SPI_MODE_LSB_FIRST 0x08 /* per-word bits-on-wire */
647#define GB_SPI_MODE_3WIRE 0x10 /* SI/SO signals shared */
648#define GB_SPI_MODE_LOOP 0x20 /* loopback mode */
649#define GB_SPI_MODE_NO_CS 0x40 /* 1 dev/bus, no chipselect */
650#define GB_SPI_MODE_READY 0x80 /* slave pulls low to pause */
651
652/* Should match up with flags in linux/spi/spi.h */
653#define GB_SPI_FLAG_HALF_DUPLEX BIT(0) /* can't do full duplex */
654#define GB_SPI_FLAG_NO_RX BIT(1) /* can't do buffer read */
655#define GB_SPI_FLAG_NO_TX BIT(2) /* can't do buffer write */
656
657/* Greybus spi operation types */
Rui Miguel Silvab343f6a2015-12-02 11:12:28 +0000658#define GB_SPI_TYPE_MASTER_CONFIG 0x02
659#define GB_SPI_TYPE_DEVICE_CONFIG 0x03
660#define GB_SPI_TYPE_TRANSFER 0x04
Viresh Kumar4890f312015-05-20 16:33:57 +0530661
662/* mode request has no payload */
Rui Miguel Silvab343f6a2015-12-02 11:12:28 +0000663struct gb_spi_master_config_response {
Viresh Kumar4890f312015-05-20 16:33:57 +0530664 __le32 bits_per_word_mask;
Rui Miguel Silvab343f6a2015-12-02 11:12:28 +0000665 __le32 min_speed_hz;
666 __le32 max_speed_hz;
667 __le16 mode;
668 __le16 flags;
Rui Miguel Silva50014e02015-12-10 14:24:58 +0000669 __u8 num_chipselect;
Viresh Kumarb7016862015-08-31 17:21:04 +0530670} __packed;
Viresh Kumar4890f312015-05-20 16:33:57 +0530671
Rui Miguel Silvab343f6a2015-12-02 11:12:28 +0000672struct gb_spi_device_config_request {
Rui Miguel Silva50014e02015-12-10 14:24:58 +0000673 __u8 chip_select;
Rui Miguel Silvab343f6a2015-12-02 11:12:28 +0000674} __packed;
675
676struct gb_spi_device_config_response {
677 __le16 mode;
678 __u8 bits_per_word;
679 __le32 max_speed_hz;
680 __u8 name[32];
Viresh Kumarb7016862015-08-31 17:21:04 +0530681} __packed;
Viresh Kumar4890f312015-05-20 16:33:57 +0530682
683/**
684 * struct gb_spi_transfer - a read/write buffer pair
685 * @speed_hz: Select a speed other than the device default for this transfer. If
686 * 0 the default (from @spi_device) is used.
687 * @len: size of rx and tx buffers (in bytes)
688 * @delay_usecs: microseconds to delay after this transfer before (optionally)
689 * changing the chipselect status, then starting the next transfer or
690 * completing this spi_message.
691 * @cs_change: affects chipselect after this transfer completes
692 * @bits_per_word: select a bits_per_word other than the device default for this
693 * transfer. If 0 the default (from @spi_device) is used.
694 */
695struct gb_spi_transfer {
696 __le32 speed_hz;
697 __le32 len;
698 __le16 delay_usecs;
699 __u8 cs_change;
700 __u8 bits_per_word;
Rui Miguel Silvab455c842015-12-02 11:12:27 +0000701 __u8 rdwr;
702#define GB_SPI_XFER_READ 0x01
703#define GB_SPI_XFER_WRITE 0x02
Viresh Kumarb7016862015-08-31 17:21:04 +0530704} __packed;
Viresh Kumar4890f312015-05-20 16:33:57 +0530705
706struct gb_spi_transfer_request {
707 __u8 chip_select; /* of the spi device */
708 __u8 mode; /* of the spi device */
709 __le16 count;
Johan Hovold46d26c52015-08-01 11:50:37 +0200710 struct gb_spi_transfer transfers[0]; /* count of these */
Viresh Kumarb7016862015-08-31 17:21:04 +0530711} __packed;
Viresh Kumar4890f312015-05-20 16:33:57 +0530712
713struct gb_spi_transfer_response {
714 __u8 data[0]; /* inbound data */
Viresh Kumarb7016862015-08-31 17:21:04 +0530715} __packed;
Viresh Kumar4890f312015-05-20 16:33:57 +0530716
Alex Elder30c6d9d2015-05-22 13:02:08 -0500717/* Version of the Greybus SVC protocol we support */
718#define GB_SVC_VERSION_MAJOR 0x00
719#define GB_SVC_VERSION_MINOR 0x01
720
721/* Greybus SVC request types */
Viresh Kumaread35462015-07-21 17:44:19 +0530722#define GB_SVC_TYPE_SVC_HELLO 0x02
723#define GB_SVC_TYPE_INTF_DEVICE_ID 0x03
724#define GB_SVC_TYPE_INTF_HOTPLUG 0x04
725#define GB_SVC_TYPE_INTF_HOT_UNPLUG 0x05
726#define GB_SVC_TYPE_INTF_RESET 0x06
727#define GB_SVC_TYPE_CONN_CREATE 0x07
728#define GB_SVC_TYPE_CONN_DESTROY 0x08
Viresh Kumar19151c32015-09-09 21:08:29 +0530729#define GB_SVC_TYPE_DME_PEER_GET 0x09
730#define GB_SVC_TYPE_DME_PEER_SET 0x0a
Perry Hunge08aaa42015-07-24 19:02:31 -0400731#define GB_SVC_TYPE_ROUTE_CREATE 0x0b
Viresh Kumar0a020572015-09-07 18:05:26 +0530732#define GB_SVC_TYPE_ROUTE_DESTROY 0x0c
Laurent Pinchart784f8762015-12-18 21:23:22 +0200733#define GB_SVC_TYPE_LINK_CONFIG 0x0d
Viresh Kumaread35462015-07-21 17:44:19 +0530734
Johan Hovoldcfb16902015-09-15 10:48:01 +0200735/*
736 * SVC version request/response has the same payload as
737 * gb_protocol_version_request/response.
738 */
Viresh Kumaread35462015-07-21 17:44:19 +0530739
740/* SVC protocol hello request */
741struct gb_svc_hello_request {
742 __le16 endo_id;
743 __u8 interface_id;
Johan Hovold2130f092015-08-01 11:50:38 +0200744} __packed;
Viresh Kumaread35462015-07-21 17:44:19 +0530745/* hello response has no payload */
Alex Elder30c6d9d2015-05-22 13:02:08 -0500746
747struct gb_svc_intf_device_id_request {
748 __u8 intf_id;
749 __u8 device_id;
Viresh Kumar829a91e2015-08-31 17:21:03 +0530750} __packed;
Alex Elder30c6d9d2015-05-22 13:02:08 -0500751/* device id response has no payload */
752
753struct gb_svc_intf_hotplug_request {
754 __u8 intf_id;
755 struct {
Viresh Kumarb32a5c52015-12-22 22:04:33 +0530756 __le32 ddbl1_mfr_id;
757 __le32 ddbl1_prod_id;
Alex Elder30c6d9d2015-05-22 13:02:08 -0500758 __le32 ara_vend_id;
759 __le32 ara_prod_id;
760 } data;
Johan Hovold2130f092015-08-01 11:50:38 +0200761} __packed;
Alex Elder30c6d9d2015-05-22 13:02:08 -0500762/* hotplug response has no payload */
763
764struct gb_svc_intf_hot_unplug_request {
765 __u8 intf_id;
Viresh Kumar829a91e2015-08-31 17:21:03 +0530766} __packed;
Alex Elder30c6d9d2015-05-22 13:02:08 -0500767/* hot unplug response has no payload */
768
769struct gb_svc_intf_reset_request {
770 __u8 intf_id;
Viresh Kumar829a91e2015-08-31 17:21:03 +0530771} __packed;
Alex Elder30c6d9d2015-05-22 13:02:08 -0500772/* interface reset response has no payload */
773
774struct gb_svc_conn_create_request {
775 __u8 intf1_id;
Rui Miguel Silva24980502015-09-15 15:33:51 +0100776 __le16 cport1_id;
Alex Elder30c6d9d2015-05-22 13:02:08 -0500777 __u8 intf2_id;
Rui Miguel Silva24980502015-09-15 15:33:51 +0100778 __le16 cport2_id;
Perry Hung0b226492015-07-24 19:02:34 -0400779 __u8 tc;
780 __u8 flags;
Johan Hovold2130f092015-08-01 11:50:38 +0200781} __packed;
Alex Elder30c6d9d2015-05-22 13:02:08 -0500782/* connection create response has no payload */
783
784struct gb_svc_conn_destroy_request {
785 __u8 intf1_id;
Rui Miguel Silva24980502015-09-15 15:33:51 +0100786 __le16 cport1_id;
Alex Elder30c6d9d2015-05-22 13:02:08 -0500787 __u8 intf2_id;
Rui Miguel Silva24980502015-09-15 15:33:51 +0100788 __le16 cport2_id;
Johan Hovold2130f092015-08-01 11:50:38 +0200789} __packed;
Alex Elder30c6d9d2015-05-22 13:02:08 -0500790/* connection destroy response has no payload */
791
Viresh Kumar19151c32015-09-09 21:08:29 +0530792struct gb_svc_dme_peer_get_request {
793 __u8 intf_id;
Rui Miguel Silva24980502015-09-15 15:33:51 +0100794 __le16 attr;
795 __le16 selector;
Viresh Kumar19151c32015-09-09 21:08:29 +0530796} __packed;
797
798struct gb_svc_dme_peer_get_response {
Rui Miguel Silva24980502015-09-15 15:33:51 +0100799 __le16 result_code;
800 __le32 attr_value;
Viresh Kumar19151c32015-09-09 21:08:29 +0530801} __packed;
802
803struct gb_svc_dme_peer_set_request {
804 __u8 intf_id;
Rui Miguel Silva24980502015-09-15 15:33:51 +0100805 __le16 attr;
806 __le16 selector;
807 __le32 value;
Viresh Kumar19151c32015-09-09 21:08:29 +0530808} __packed;
809
810struct gb_svc_dme_peer_set_response {
Rui Miguel Silva24980502015-09-15 15:33:51 +0100811 __le16 result_code;
Viresh Kumar19151c32015-09-09 21:08:29 +0530812} __packed;
813
Laurent Pinchart784f8762015-12-18 21:23:22 +0200814#define GB_SVC_LINK_CONFIG_BURST_PWM 0
815#define GB_SVC_LINK_CONFIG_BURST_HS_A 1
816#define GB_SVC_LINK_CONFIG_BURST_HS_B 2
817#define GB_SVC_LINK_CONFIG_FLAG_AUTO_SLEEP (1 << 0)
818
819struct gb_svc_link_config_request {
820 __u8 intf_id;
821 __u8 burst;
822 __u8 gear;
823 __u8 nlanes;
824 __u8 flags;
825} __packed;
826/* link config response has no payload */
827
Viresh Kumar6bec5c72015-09-24 14:40:29 -0700828/* Attributes for peer get/set operations */
829#define DME_ATTR_SELECTOR_INDEX 0
Eli Sennesh3563ff82015-12-22 17:26:57 -0500830/* FIXME: remove ES2 support and DME_ATTR_T_TST_SRC_INCREMENT */
Viresh Kumar6bec5c72015-09-24 14:40:29 -0700831#define DME_ATTR_T_TST_SRC_INCREMENT 0x4083
Eli Sennesh3563ff82015-12-22 17:26:57 -0500832#define DME_ATTR_ES3_INIT_STATUS 0x6101
Viresh Kumar6bec5c72015-09-24 14:40:29 -0700833
Eli Sennesh3563ff82015-12-22 17:26:57 -0500834/* Return value from init-status attributes listed above */
835#define DME_DIS_SPI_BOOT_STARTED 0x02
836#define DME_DIS_TRUSTED_SPI_BOOT_FINISHED 0x03
837#define DME_DIS_UNTRUSTED_SPI_BOOT_FINISHED 0x04
838#define DME_DIS_UNIPRO_BOOT_STARTED 0x06
839#define DME_DIS_FALLBACK_UNIPRO_BOOT_STARTED 0x09
Viresh Kumar1575ef12015-10-07 15:40:24 -0400840
Perry Hunge08aaa42015-07-24 19:02:31 -0400841struct gb_svc_route_create_request {
842 __u8 intf1_id;
843 __u8 dev1_id;
844 __u8 intf2_id;
845 __u8 dev2_id;
Viresh Kumar829a91e2015-08-31 17:21:03 +0530846} __packed;
Viresh Kumard6ec7872015-08-31 17:21:02 +0530847/* route create response has no payload */
Perry Hunge08aaa42015-07-24 19:02:31 -0400848
Viresh Kumar0a020572015-09-07 18:05:26 +0530849struct gb_svc_route_destroy_request {
850 __u8 intf1_id;
851 __u8 intf2_id;
852} __packed;
853/* route destroy response has no payload */
854
Viresh Kumard65e3a22015-08-13 10:04:45 +0530855
856/* RAW */
857
858/* Version of the Greybus raw protocol we support */
859#define GB_RAW_VERSION_MAJOR 0x00
860#define GB_RAW_VERSION_MINOR 0x01
861
862/* Greybus raw request types */
863#define GB_RAW_TYPE_SEND 0x02
864
865struct gb_raw_send_request {
866 __le32 len;
867 __u8 data[0];
Viresh Kumarb7016862015-08-31 17:21:04 +0530868} __packed;
Viresh Kumard65e3a22015-08-13 10:04:45 +0530869
870
Bryan O'Donoghue4ef53482015-06-02 13:40:44 +0100871/* UART */
872
873/* Version of the Greybus UART protocol we support */
874#define GB_UART_VERSION_MAJOR 0x00
875#define GB_UART_VERSION_MINOR 0x01
876
877/* Greybus UART operation types */
Bryan O'Donoghue4ef53482015-06-02 13:40:44 +0100878#define GB_UART_TYPE_SEND_DATA 0x02
879#define GB_UART_TYPE_RECEIVE_DATA 0x03 /* Unsolicited data */
880#define GB_UART_TYPE_SET_LINE_CODING 0x04
881#define GB_UART_TYPE_SET_CONTROL_LINE_STATE 0x05
Bryan O'Donoghuea5192032015-07-14 02:10:18 +0100882#define GB_UART_TYPE_SEND_BREAK 0x06
Bryan O'Donoghue4ef53482015-06-02 13:40:44 +0100883#define GB_UART_TYPE_SERIAL_STATE 0x07 /* Unsolicited data */
884
Bryan O'Donoghue11fca142015-06-02 13:40:45 +0100885/* Represents data from AP -> Module */
Bryan O'Donoghue4ef53482015-06-02 13:40:44 +0100886struct gb_uart_send_data_request {
887 __le16 size;
888 __u8 data[0];
Viresh Kumarb7016862015-08-31 17:21:04 +0530889} __packed;
Bryan O'Donoghue4ef53482015-06-02 13:40:44 +0100890
Bryan O'Donoghue802362d2015-06-29 18:09:13 +0100891/* recv-data-request flags */
892#define GB_UART_RECV_FLAG_FRAMING 0x01 /* Framing error */
893#define GB_UART_RECV_FLAG_PARITY 0x02 /* Parity error */
894#define GB_UART_RECV_FLAG_OVERRUN 0x04 /* Overrun error */
895#define GB_UART_RECV_FLAG_BREAK 0x08 /* Break */
896
Bryan O'Donoghue11fca142015-06-02 13:40:45 +0100897/* Represents data from Module -> AP */
898struct gb_uart_recv_data_request {
899 __le16 size;
Bryan O'Donoghue802362d2015-06-29 18:09:13 +0100900 __u8 flags;
Bryan O'Donoghue11fca142015-06-02 13:40:45 +0100901 __u8 data[0];
Johan Hovoldcfc5f2c2015-08-01 11:50:39 +0200902} __packed;
Bryan O'Donoghue4ef53482015-06-02 13:40:44 +0100903
904struct gb_uart_set_line_coding_request {
Bryan O'Donoghue11fca142015-06-02 13:40:45 +0100905 __le32 rate;
906 __u8 format;
907#define GB_SERIAL_1_STOP_BITS 0
908#define GB_SERIAL_1_5_STOP_BITS 1
909#define GB_SERIAL_2_STOP_BITS 2
910
911 __u8 parity;
912#define GB_SERIAL_NO_PARITY 0
913#define GB_SERIAL_ODD_PARITY 1
914#define GB_SERIAL_EVEN_PARITY 2
915#define GB_SERIAL_MARK_PARITY 3
916#define GB_SERIAL_SPACE_PARITY 4
917
918 __u8 data_bits;
Johan Hovoldcfc5f2c2015-08-01 11:50:39 +0200919} __packed;
Bryan O'Donoghue4ef53482015-06-02 13:40:44 +0100920
921/* output control lines */
Bryan O'Donoghue11fca142015-06-02 13:40:45 +0100922#define GB_UART_CTRL_DTR 0x01
923#define GB_UART_CTRL_RTS 0x02
Bryan O'Donoghue4ef53482015-06-02 13:40:44 +0100924
925struct gb_uart_set_control_line_state_request {
Bryan O'Donoghueba4b0992015-06-29 18:09:15 +0100926 __u8 control;
Viresh Kumarb7016862015-08-31 17:21:04 +0530927} __packed;
Bryan O'Donoghue4ef53482015-06-02 13:40:44 +0100928
929struct gb_uart_set_break_request {
930 __u8 state;
Viresh Kumarb7016862015-08-31 17:21:04 +0530931} __packed;
Bryan O'Donoghue4ef53482015-06-02 13:40:44 +0100932
933/* input control lines and line errors */
Bryan O'Donoghue11fca142015-06-02 13:40:45 +0100934#define GB_UART_CTRL_DCD 0x01
935#define GB_UART_CTRL_DSR 0x02
Bryan O'Donoghue802362d2015-06-29 18:09:13 +0100936#define GB_UART_CTRL_RI 0x04
Bryan O'Donoghue4ef53482015-06-02 13:40:44 +0100937
938struct gb_uart_serial_state_request {
Bryan O'Donoghueba4b0992015-06-29 18:09:15 +0100939 __u8 control;
Viresh Kumarb7016862015-08-31 17:21:04 +0530940} __packed;
Bryan O'Donoghue4ef53482015-06-02 13:40:44 +0100941
Bryan O'Donoghuef9f971a2015-07-13 20:20:45 +0100942/* Loopback */
943
944/* Version of the Greybus loopback protocol we support */
Bryan O'Donoghue52af1412015-07-14 00:53:12 +0100945#define GB_LOOPBACK_VERSION_MAJOR 0x00
946#define GB_LOOPBACK_VERSION_MINOR 0x01
Bryan O'Donoghuef9f971a2015-07-13 20:20:45 +0100947
948/* Greybus loopback request types */
Bryan O'Donoghue52af1412015-07-14 00:53:12 +0100949#define GB_LOOPBACK_TYPE_PING 0x02
950#define GB_LOOPBACK_TYPE_TRANSFER 0x03
Bryan O'Donoghue384a7a32015-07-13 20:20:49 +0100951#define GB_LOOPBACK_TYPE_SINK 0x04
Bryan O'Donoghuef9f971a2015-07-13 20:20:45 +0100952
953struct gb_loopback_transfer_request {
954 __le32 len;
955 __u8 data[0];
Viresh Kumarb7016862015-08-31 17:21:04 +0530956} __packed;
Bryan O'Donoghuef9f971a2015-07-13 20:20:45 +0100957
958struct gb_loopback_transfer_response {
Bryan O'Donoghue4a655ad2015-09-14 10:48:45 +0100959 __le32 len;
Bryan O'Donoghue04db3342015-10-12 15:45:05 +0100960 __le32 reserved0;
961 __le32 reserved1;
Bryan O'Donoghuef9f971a2015-07-13 20:20:45 +0100962 __u8 data[0];
Viresh Kumarb7016862015-08-31 17:21:04 +0530963} __packed;
Bryan O'Donoghuef9f971a2015-07-13 20:20:45 +0100964
Rui Miguel Silva3b6ecd62015-06-22 14:03:52 +0100965/* SDIO */
966/* Version of the Greybus sdio protocol we support */
967#define GB_SDIO_VERSION_MAJOR 0x00
968#define GB_SDIO_VERSION_MINOR 0x01
969
Rui Miguel Silva3b6ecd62015-06-22 14:03:52 +0100970/* Greybus SDIO operation types */
Rui Miguel Silva3b6ecd62015-06-22 14:03:52 +0100971#define GB_SDIO_TYPE_GET_CAPABILITIES 0x02
972#define GB_SDIO_TYPE_SET_IOS 0x03
973#define GB_SDIO_TYPE_COMMAND 0x04
974#define GB_SDIO_TYPE_TRANSFER 0x05
975#define GB_SDIO_TYPE_EVENT 0x06
976
977/* get caps response: request has no payload */
978struct gb_sdio_get_caps_response {
979 __le32 caps;
980#define GB_SDIO_CAP_NONREMOVABLE 0x00000001
981#define GB_SDIO_CAP_4_BIT_DATA 0x00000002
982#define GB_SDIO_CAP_8_BIT_DATA 0x00000004
983#define GB_SDIO_CAP_MMC_HS 0x00000008
984#define GB_SDIO_CAP_SD_HS 0x00000010
985#define GB_SDIO_CAP_ERASE 0x00000020
986#define GB_SDIO_CAP_1_2V_DDR 0x00000040
987#define GB_SDIO_CAP_1_8V_DDR 0x00000080
988#define GB_SDIO_CAP_POWER_OFF_CARD 0x00000100
989#define GB_SDIO_CAP_UHS_SDR12 0x00000200
990#define GB_SDIO_CAP_UHS_SDR25 0x00000400
991#define GB_SDIO_CAP_UHS_SDR50 0x00000800
992#define GB_SDIO_CAP_UHS_SDR104 0x00001000
993#define GB_SDIO_CAP_UHS_DDR50 0x00002000
994#define GB_SDIO_CAP_DRIVER_TYPE_A 0x00004000
995#define GB_SDIO_CAP_DRIVER_TYPE_C 0x00008000
996#define GB_SDIO_CAP_DRIVER_TYPE_D 0x00010000
997#define GB_SDIO_CAP_HS200_1_2V 0x00020000
998#define GB_SDIO_CAP_HS200_1_8V 0x00040000
999#define GB_SDIO_CAP_HS400_1_2V 0x00080000
1000#define GB_SDIO_CAP_HS400_1_8V 0x00100000
1001
1002 /* see possible values below at vdd */
1003 __le32 ocr;
1004 __le16 max_blk_count;
1005 __le16 max_blk_size;
Rui Miguel Silvae0f875c2015-10-08 12:10:51 +01001006 __le32 f_min;
1007 __le32 f_max;
Viresh Kumarb7016862015-08-31 17:21:04 +05301008} __packed;
Rui Miguel Silva3b6ecd62015-06-22 14:03:52 +01001009
1010/* set ios request: response has no payload */
1011struct gb_sdio_set_ios_request {
1012 __le32 clock;
1013 __le32 vdd;
1014#define GB_SDIO_VDD_165_195 0x00000001
1015#define GB_SDIO_VDD_20_21 0x00000002
1016#define GB_SDIO_VDD_21_22 0x00000004
1017#define GB_SDIO_VDD_22_23 0x00000008
1018#define GB_SDIO_VDD_23_24 0x00000010
1019#define GB_SDIO_VDD_24_25 0x00000020
1020#define GB_SDIO_VDD_25_26 0x00000040
1021#define GB_SDIO_VDD_26_27 0x00000080
1022#define GB_SDIO_VDD_27_28 0x00000100
1023#define GB_SDIO_VDD_28_29 0x00000200
1024#define GB_SDIO_VDD_29_30 0x00000400
1025#define GB_SDIO_VDD_30_31 0x00000800
1026#define GB_SDIO_VDD_31_32 0x00001000
1027#define GB_SDIO_VDD_32_33 0x00002000
1028#define GB_SDIO_VDD_33_34 0x00004000
1029#define GB_SDIO_VDD_34_35 0x00008000
1030#define GB_SDIO_VDD_35_36 0x00010000
1031
1032 __u8 bus_mode;
1033#define GB_SDIO_BUSMODE_OPENDRAIN 0x00
1034#define GB_SDIO_BUSMODE_PUSHPULL 0x01
1035
1036 __u8 power_mode;
1037#define GB_SDIO_POWER_OFF 0x00
1038#define GB_SDIO_POWER_UP 0x01
1039#define GB_SDIO_POWER_ON 0x02
1040#define GB_SDIO_POWER_UNDEFINED 0x03
1041
1042 __u8 bus_width;
1043#define GB_SDIO_BUS_WIDTH_1 0x00
1044#define GB_SDIO_BUS_WIDTH_4 0x02
1045#define GB_SDIO_BUS_WIDTH_8 0x03
1046
1047 __u8 timing;
1048#define GB_SDIO_TIMING_LEGACY 0x00
1049#define GB_SDIO_TIMING_MMC_HS 0x01
1050#define GB_SDIO_TIMING_SD_HS 0x02
1051#define GB_SDIO_TIMING_UHS_SDR12 0x03
1052#define GB_SDIO_TIMING_UHS_SDR25 0x04
1053#define GB_SDIO_TIMING_UHS_SDR50 0x05
1054#define GB_SDIO_TIMING_UHS_SDR104 0x06
1055#define GB_SDIO_TIMING_UHS_DDR50 0x07
1056#define GB_SDIO_TIMING_MMC_DDR52 0x08
1057#define GB_SDIO_TIMING_MMC_HS200 0x09
1058#define GB_SDIO_TIMING_MMC_HS400 0x0A
1059
1060 __u8 signal_voltage;
1061#define GB_SDIO_SIGNAL_VOLTAGE_330 0x00
1062#define GB_SDIO_SIGNAL_VOLTAGE_180 0x01
1063#define GB_SDIO_SIGNAL_VOLTAGE_120 0x02
1064
1065 __u8 drv_type;
1066#define GB_SDIO_SET_DRIVER_TYPE_B 0x00
1067#define GB_SDIO_SET_DRIVER_TYPE_A 0x01
1068#define GB_SDIO_SET_DRIVER_TYPE_C 0x02
1069#define GB_SDIO_SET_DRIVER_TYPE_D 0x03
Johan Hovold8bbd9ed2015-08-01 11:50:40 +02001070} __packed;
Rui Miguel Silva3b6ecd62015-06-22 14:03:52 +01001071
1072/* command request */
1073struct gb_sdio_command_request {
1074 __u8 cmd;
1075 __u8 cmd_flags;
1076#define GB_SDIO_RSP_NONE 0x00
Rui Miguel Silvaef0cc0e2015-07-02 19:11:30 +01001077#define GB_SDIO_RSP_PRESENT 0x01
1078#define GB_SDIO_RSP_136 0x02
1079#define GB_SDIO_RSP_CRC 0x04
1080#define GB_SDIO_RSP_BUSY 0x08
1081#define GB_SDIO_RSP_OPCODE 0x10
Rui Miguel Silva3b6ecd62015-06-22 14:03:52 +01001082
1083 __u8 cmd_type;
1084#define GB_SDIO_CMD_AC 0x00
1085#define GB_SDIO_CMD_ADTC 0x01
Rui Miguel Silva2d465d52015-08-20 15:20:17 +01001086#define GB_SDIO_CMD_BC 0x02
1087#define GB_SDIO_CMD_BCR 0x03
Rui Miguel Silva3b6ecd62015-06-22 14:03:52 +01001088
1089 __le32 cmd_arg;
Rui Miguel Silva10ed1932015-10-15 23:56:51 +01001090 __le16 data_blocks;
1091 __le16 data_blksz;
Johan Hovold8bbd9ed2015-08-01 11:50:40 +02001092} __packed;
Rui Miguel Silva3b6ecd62015-06-22 14:03:52 +01001093
1094struct gb_sdio_command_response {
1095 __le32 resp[4];
Viresh Kumarb7016862015-08-31 17:21:04 +05301096} __packed;
Rui Miguel Silva3b6ecd62015-06-22 14:03:52 +01001097
1098/* transfer request */
1099struct gb_sdio_transfer_request {
1100 __u8 data_flags;
1101#define GB_SDIO_DATA_WRITE 0x01
1102#define GB_SDIO_DATA_READ 0x02
1103#define GB_SDIO_DATA_STREAM 0x04
1104
1105 __le16 data_blocks;
1106 __le16 data_blksz;
1107 __u8 data[0];
Johan Hovold8bbd9ed2015-08-01 11:50:40 +02001108} __packed;
Rui Miguel Silva3b6ecd62015-06-22 14:03:52 +01001109
1110struct gb_sdio_transfer_response {
1111 __le16 data_blocks;
1112 __le16 data_blksz;
1113 __u8 data[0];
Viresh Kumarb7016862015-08-31 17:21:04 +05301114} __packed;
Rui Miguel Silva3b6ecd62015-06-22 14:03:52 +01001115
1116/* event request: generated by module and is defined as unidirectional */
1117struct gb_sdio_event_request {
1118 __u8 event;
1119#define GB_SDIO_CARD_INSERTED 0x01
1120#define GB_SDIO_CARD_REMOVED 0x02
1121#define GB_SDIO_WP 0x04
Viresh Kumarb7016862015-08-31 17:21:04 +05301122} __packed;
Rui Miguel Silva3b6ecd62015-06-22 14:03:52 +01001123
Laurent Pincharte61a2a72015-12-15 03:18:05 +02001124/* Camera */
1125
1126#define GB_CAMERA_VERSION_MAJOR 0x00
1127#define GB_CAMERA_VERSION_MINOR 0x01
1128
1129/* Greybus Camera request types */
1130#define GB_CAMERA_TYPE_CAPABILITIES 0x02
1131#define GB_CAMERA_TYPE_CONFIGURE_STREAMS 0x03
1132#define GB_CAMERA_TYPE_CAPTURE 0x04
1133#define GB_CAMERA_TYPE_FLUSH 0x05
1134#define GB_CAMERA_TYPE_METADATA 0x06
1135
1136#define GB_CAMERA_MAX_STREAMS 4
1137#define GB_CAMERA_MAX_SETTINGS_SIZE 8192
1138
1139/* Greybus Camera Configure Streams request payload */
1140struct gb_camera_stream_config_request {
1141 __le16 width;
1142 __le16 height;
1143 __le16 format;
1144 __le16 padding;
1145} __packed;
1146
1147struct gb_camera_configure_streams_request {
1148 __le16 num_streams;
1149 __le16 padding;
1150 struct gb_camera_stream_config_request config[0];
1151} __packed;
1152
1153/* Greybus Camera Configure Streams response payload */
1154struct gb_camera_stream_config_response {
1155 __le16 width;
1156 __le16 height;
1157 __le16 format;
1158 __u8 virtual_channel;
1159 __u8 data_type[2];
1160 __u8 padding[3];
1161 __le32 max_size;
1162} __packed;
1163
1164struct gb_camera_configure_streams_response {
1165 __le16 num_streams;
1166#define GB_CAMERA_CONFIGURE_STREAMS_ADJUSTED 0x01
Rui Miguel Silva8e77c832015-12-17 19:56:23 +00001167 __u8 flags;
1168 __u8 padding;
Laurent Pincharte61a2a72015-12-15 03:18:05 +02001169 struct gb_camera_stream_config_response config[0];
1170} __packed;
1171
1172/* Greybus Camera Capture request payload - response has no payload */
1173struct gb_camera_capture_request {
1174 __le32 request_id;
Rui Miguel Silva8e77c832015-12-17 19:56:23 +00001175 __u8 streams;
1176 __u8 padding;
Laurent Pincharte61a2a72015-12-15 03:18:05 +02001177 __le16 num_frames;
Rui Miguel Silva8e77c832015-12-17 19:56:23 +00001178 __u8 settings[0];
Laurent Pincharte61a2a72015-12-15 03:18:05 +02001179} __packed;
1180
1181/* Greybus Camera Flush response payload - request has no payload */
1182struct gb_camera_flush_response {
1183 __le32 request_id;
1184} __packed;
1185
1186/* Greybus Camera Metadata request payload - operation has no response */
1187struct gb_camera_metadata_request {
1188 __le32 request_id;
1189 __le16 frame_number;
1190 __u8 stream;
1191 __u8 padding;
Rui Miguel Silva8e77c832015-12-17 19:56:23 +00001192 __u8 metadata[0];
Laurent Pincharte61a2a72015-12-15 03:18:05 +02001193} __packed;
1194
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001195/* Lights */
1196
1197#define GB_LIGHTS_VERSION_MAJOR 0x00
1198#define GB_LIGHTS_VERSION_MINOR 0x01
1199
1200/* Greybus Lights request types */
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001201#define GB_LIGHTS_TYPE_GET_LIGHTS 0x02
1202#define GB_LIGHTS_TYPE_GET_LIGHT_CONFIG 0x03
1203#define GB_LIGHTS_TYPE_GET_CHANNEL_CONFIG 0x04
1204#define GB_LIGHTS_TYPE_GET_CHANNEL_FLASH_CONFIG 0x05
1205#define GB_LIGHTS_TYPE_SET_BRIGHTNESS 0x06
1206#define GB_LIGHTS_TYPE_SET_BLINK 0x07
1207#define GB_LIGHTS_TYPE_SET_COLOR 0x08
1208#define GB_LIGHTS_TYPE_SET_FADE 0x09
1209#define GB_LIGHTS_TYPE_EVENT 0x0A
1210#define GB_LIGHTS_TYPE_SET_FLASH_INTENSITY 0x0B
1211#define GB_LIGHTS_TYPE_SET_FLASH_STROBE 0x0C
1212#define GB_LIGHTS_TYPE_SET_FLASH_TIMEOUT 0x0D
1213#define GB_LIGHTS_TYPE_GET_FLASH_FAULT 0x0E
1214
1215/* Greybus Light modes */
1216
1217/*
1218 * if you add any specific mode below, update also the
1219 * GB_CHANNEL_MODE_DEFINED_RANGE value accordingly
1220 */
1221#define GB_CHANNEL_MODE_NONE 0x00000000
1222#define GB_CHANNEL_MODE_BATTERY 0x00000001
1223#define GB_CHANNEL_MODE_POWER 0x00000002
1224#define GB_CHANNEL_MODE_WIRELESS 0x00000004
1225#define GB_CHANNEL_MODE_BLUETOOTH 0x00000008
1226#define GB_CHANNEL_MODE_KEYBOARD 0x00000010
1227#define GB_CHANNEL_MODE_BUTTONS 0x00000020
1228#define GB_CHANNEL_MODE_NOTIFICATION 0x00000040
1229#define GB_CHANNEL_MODE_ATTENTION 0x00000080
1230#define GB_CHANNEL_MODE_FLASH 0x00000100
1231#define GB_CHANNEL_MODE_TORCH 0x00000200
1232#define GB_CHANNEL_MODE_INDICATOR 0x00000400
1233
1234/* Lights Mode valid bit values */
1235#define GB_CHANNEL_MODE_DEFINED_RANGE 0x000004FF
1236#define GB_CHANNEL_MODE_VENDOR_RANGE 0x00F00000
1237
1238/* Greybus Light Channels Flags */
1239#define GB_LIGHT_CHANNEL_MULTICOLOR 0x00000001
1240#define GB_LIGHT_CHANNEL_FADER 0x00000002
1241#define GB_LIGHT_CHANNEL_BLINK 0x00000004
1242
1243/* get count of lights in module */
1244struct gb_lights_get_lights_response {
1245 __u8 lights_count;
Viresh Kumarb7016862015-08-31 17:21:04 +05301246} __packed;
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001247
1248/* light config request payload */
1249struct gb_lights_get_light_config_request {
1250 __u8 id;
Viresh Kumarb7016862015-08-31 17:21:04 +05301251} __packed;
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001252
1253/* light config response payload */
1254struct gb_lights_get_light_config_response {
1255 __u8 channel_count;
1256 __u8 name[32];
Viresh Kumarb7016862015-08-31 17:21:04 +05301257} __packed;
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001258
1259/* channel config request payload */
1260struct gb_lights_get_channel_config_request {
1261 __u8 light_id;
1262 __u8 channel_id;
Viresh Kumarb7016862015-08-31 17:21:04 +05301263} __packed;
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001264
1265/* channel flash config request payload */
1266struct gb_lights_get_channel_flash_config_request {
1267 __u8 light_id;
1268 __u8 channel_id;
Viresh Kumarb7016862015-08-31 17:21:04 +05301269} __packed;
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001270
1271/* channel config response payload */
1272struct gb_lights_get_channel_config_response {
1273 __u8 max_brightness;
1274 __le32 flags;
1275 __le32 color;
1276 __u8 color_name[32];
1277 __le32 mode;
1278 __u8 mode_name[32];
1279} __packed;
1280
1281/* channel flash config response payload */
1282struct gb_lights_get_channel_flash_config_response {
1283 __le32 intensity_min_uA;
1284 __le32 intensity_max_uA;
1285 __le32 intensity_step_uA;
1286 __le32 timeout_min_us;
1287 __le32 timeout_max_us;
1288 __le32 timeout_step_us;
Viresh Kumarb7016862015-08-31 17:21:04 +05301289} __packed;
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001290
1291/* blink request payload: response have no payload */
1292struct gb_lights_blink_request {
1293 __u8 light_id;
1294 __u8 channel_id;
1295 __le16 time_on_ms;
1296 __le16 time_off_ms;
Viresh Kumarb7016862015-08-31 17:21:04 +05301297} __packed;
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001298
1299/* set brightness request payload: response have no payload */
1300struct gb_lights_set_brightness_request {
1301 __u8 light_id;
1302 __u8 channel_id;
1303 __u8 brightness;
Viresh Kumarb7016862015-08-31 17:21:04 +05301304} __packed;
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001305
1306/* set color request payload: response have no payload */
1307struct gb_lights_set_color_request {
1308 __u8 light_id;
1309 __u8 channel_id;
1310 __le32 color;
1311} __packed;
1312
1313/* set fade request payload: response have no payload */
1314struct gb_lights_set_fade_request {
1315 __u8 light_id;
1316 __u8 channel_id;
1317 __u8 fade_in;
1318 __u8 fade_out;
Viresh Kumarb7016862015-08-31 17:21:04 +05301319} __packed;
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001320
1321/* event request: generated by module */
1322struct gb_lights_event_request {
1323 __u8 light_id;
1324 __u8 event;
1325#define GB_LIGHTS_LIGHT_CONFIG 0x01
Viresh Kumarb7016862015-08-31 17:21:04 +05301326} __packed;
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001327
1328/* set flash intensity request payload: response have no payload */
1329struct gb_lights_set_flash_intensity_request {
1330 __u8 light_id;
1331 __u8 channel_id;
1332 __le32 intensity_uA;
1333} __packed;
1334
1335/* set flash strobe state request payload: response have no payload */
1336struct gb_lights_set_flash_strobe_request {
1337 __u8 light_id;
1338 __u8 channel_id;
1339 __u8 state;
Viresh Kumarb7016862015-08-31 17:21:04 +05301340} __packed;
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001341
1342/* set flash timeout request payload: response have no payload */
1343struct gb_lights_set_flash_timeout_request {
1344 __u8 light_id;
1345 __u8 channel_id;
1346 __le32 timeout_us;
1347} __packed;
1348
1349/* get flash fault request payload */
1350struct gb_lights_get_flash_fault_request {
1351 __u8 light_id;
1352 __u8 channel_id;
Viresh Kumarb7016862015-08-31 17:21:04 +05301353} __packed;
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001354
1355/* get flash fault response payload */
1356struct gb_lights_get_flash_fault_response {
1357 __le32 fault;
1358#define GB_LIGHTS_FLASH_FAULT_OVER_VOLTAGE 0x00000000
1359#define GB_LIGHTS_FLASH_FAULT_TIMEOUT 0x00000001
1360#define GB_LIGHTS_FLASH_FAULT_OVER_TEMPERATURE 0x00000002
1361#define GB_LIGHTS_FLASH_FAULT_SHORT_CIRCUIT 0x00000004
1362#define GB_LIGHTS_FLASH_FAULT_OVER_CURRENT 0x00000008
1363#define GB_LIGHTS_FLASH_FAULT_INDICATOR 0x00000010
1364#define GB_LIGHTS_FLASH_FAULT_UNDER_VOLTAGE 0x00000020
1365#define GB_LIGHTS_FLASH_FAULT_INPUT_VOLTAGE 0x00000040
1366#define GB_LIGHTS_FLASH_FAULT_LED_OVER_TEMPERATURE 0x00000080
Viresh Kumarb7016862015-08-31 17:21:04 +05301367} __packed;
Rui Miguel Silva2870b522015-08-14 13:58:19 +01001368
Alex Elder012d7d42015-05-27 14:45:58 -05001369#endif /* __GREYBUS_PROTOCOLS_H */
Bryan O'Donoghue4ef53482015-06-02 13:40:44 +01001370