11619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* -----------------------------------------------------------------------------
21619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly * Copyright (c) 2011 Ozmo Inc
31619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly * Released under the GNU General Public License Version 2 (GPLv2).
41619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly * -----------------------------------------------------------------------------
51619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
61619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#ifndef _OZPROTOCOL_H
71619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define _OZPROTOCOL_H
81619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
91619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define PACKED __packed
101619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
111619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_ETHERTYPE 0x892e
121619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
131619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* Status codes
141619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
151619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_STATUS_SUCCESS		0
161619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_STATUS_INVALID_PARAM		1
171619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_STATUS_TOO_MANY_PDS		2
181619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_STATUS_NOT_ALLOWED		4
191619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_STATUS_SESSION_MISMATCH	5
201619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_STATUS_SESSION_TEARDOWN	6
211619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
221619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* This is the generic element header.
231619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly   Every element starts with this.
241619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
251619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_elt {
261619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8 type;
271619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8 length;
281619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
291619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
301619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define oz_next_elt(__elt)	\
311619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	(struct oz_elt *)((u8 *)((__elt) + 1) + (__elt)->length)
321619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
331619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* Protocol element IDs.
341619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
351619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_ELT_CONNECT_REQ	0x06
361619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_ELT_CONNECT_RSP	0x07
371619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_ELT_DISCONNECT	0x08
381619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_ELT_UPDATE_PARAM_REQ	0x11
391619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_ELT_FAREWELL_REQ	0x12
401619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_ELT_APP_DATA		0x31
411619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
421619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* This is the Ozmo header which is the first Ozmo specific part
431619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly * of a frame and comes after the MAC header.
441619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
451619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_hdr {
461619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	control;
471619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	last_pkt_num;
481619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u32	pkt_num;
491619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
501619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
511619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_PROTOCOL_VERSION	0x1
521619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* Bits in the control field. */
531619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_VERSION_MASK		0xc
541619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_VERSION_SHIFT	2
551619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_F_ACK		0x10
561619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_F_ISOC		0x20
571619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_F_MORE_DATA		0x40
581619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_F_ACK_REQUESTED	0x80
591619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
601619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define oz_get_prot_ver(__x)	(((__x) & OZ_VERSION_MASK) >> OZ_VERSION_SHIFT)
611619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
621619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* Used to select the bits of packet number to put in the last_pkt_num.
631619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
641619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_LAST_PN_MASK		0x00ff
651619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
661619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_LAST_PN_HALF_CYCLE	127
671619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
681619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* Connect request data structure.
691619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
701619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_elt_connect_req {
711619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	mode;
721619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	resv1[16];
731619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	pd_info;
741619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	session_id;
751619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	presleep;
761619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	resv2;
771619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	host_vendor;
781619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	keep_alive;
791619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u16	apps;
801619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	max_len_div16;
811619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	ms_per_isoc;
821619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	resv3[2];
831619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
841619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
851619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* mode field bits.
861619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
871619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_MODE_POLLED		0x0
881619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_MODE_TRIGGERED	0x1
891619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_MODE_MASK		0xf
901619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_F_ISOC_NO_ELTS	0x40
911619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_F_ISOC_ANYTIME	0x80
921619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
931619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* Keep alive field.
941619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
951619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_KALIVE_TYPE_MASK	0xc0
961619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_KALIVE_VALUE_MASK	0x3f
971619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_KALIVE_SPECIAL	0x00
981619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_KALIVE_SECS		0x40
991619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_KALIVE_MINS		0x80
1001619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_KALIVE_HOURS		0xc0
1011619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
1021619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* Connect response data structure.
1031619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
1041619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_elt_connect_rsp {
1051619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	mode;
1061619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	status;
1071619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	resv1[3];
1081619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	session_id;
1091619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u16	apps;
1101619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u32	resv2;
1111619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
1121619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
1131619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_elt_farewell {
1141619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	ep_num;
1151619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	index;
1161619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	report[1];
1171619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
1181619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
1191619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_elt_update_param {
1201619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	resv1[16];
1211619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	presleep;
1221619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	resv2;
1231619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	host_vendor;
1241619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	keepalive;
1251619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
1261619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
1271619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* Header common to all application elements.
1281619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
1291619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_app_hdr {
1301619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
1311619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
1321619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
1331619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
1341619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* Values for app_id.
1351619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
1361619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_APPID_USB				0x1
1371619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_APPID_UNUSED1			0x2
1381619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_APPID_UNUSED2			0x3
1391619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_APPID_SERIAL				0x4
1401619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_APPID_MAX				OZ_APPID_SERIAL
1411619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_NB_APPS				(OZ_APPID_MAX+1)
1421619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
1431619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* USB header common to all elements for the  USB application.
1441619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly * This header extends the oz_app_hdr and comes directly after
1451619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly * the element header in a USB application.
1461619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
1471619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_usb_hdr {
1481619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
1491619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
1501619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
1511619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
1521619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
1531619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
1541619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
1551619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* USB requests element subtypes (type field of hs_usb_hdr).
1561619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
1571619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_GET_DESC_REQ			1
1581619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_GET_DESC_RSP			2
1591619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_SET_CONFIG_REQ		3
1601619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_SET_CONFIG_RSP		4
1611619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_SET_INTERFACE_REQ		5
1621619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_SET_INTERFACE_RSP		6
1631619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_VENDOR_CLASS_REQ		7
1641619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_VENDOR_CLASS_RSP		8
1651619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_GET_STATUS_REQ		9
1661619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_GET_STATUS_RSP		10
1671619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_CLEAR_FEATURE_REQ		11
1681619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_CLEAR_FEATURE_RSP		12
1691619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_SET_FEATURE_REQ		13
1701619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_SET_FEATURE_RSP		14
1711619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_GET_CONFIGURATION_REQ	15
1721619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_GET_CONFIGURATION_RSP	16
1731619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_GET_INTERFACE_REQ		17
1741619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_GET_INTERFACE_RSP		18
1751619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_SYNCH_FRAME_REQ		19
1761619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_SYNCH_FRAME_RSP		20
1771619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_USB_ENDPOINT_DATA		23
1781619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
1791619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_REQD_D2H			0x80
1801619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
1811619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_get_desc_req {
1821619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
1831619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
1841619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
1851619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_id;
1861619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u16	offset;
1871619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u16	size;
1881619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_type;
1891619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	desc_type;
1901619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u16	w_index;
1911619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	index;
1921619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
1931619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
1941619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* Values for desc_type field.
1951619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly*/
1961619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_DESC_DEVICE			0x01
1971619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_DESC_CONFIG			0x02
1981619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_DESC_STRING			0x03
1991619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
2001619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* Values for req_type field.
2011619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
2021619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_RECP_MASK			0x1F
2031619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_RECP_DEVICE			0x00
2041619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_RECP_INTERFACE		0x01
2051619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_RECP_ENDPOINT		0x02
2061619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
2071619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_REQT_MASK			0x60
2081619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_REQT_STD			0x00
2091619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_REQT_CLASS			0x20
2101619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_REQT_VENDOR			0x40
2111619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
2121619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_get_desc_rsp {
2131619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
2141619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
2151619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
2161619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_id;
2171619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u16	offset;
2181619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u16	total_size;
2191619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	rcode;
2201619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	data[1];
2211619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
2221619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
2231619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_feature_req {
2241619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
2251619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
2261619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
2271619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_id;
2281619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	recipient;
2291619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	index;
2301619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u16	feature;
2311619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
2321619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
2331619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_feature_rsp {
2341619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
2351619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
2361619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
2371619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_id;
2381619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	rcode;
2391619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
2401619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
2411619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_set_config_req {
2421619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
2431619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
2441619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
2451619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_id;
2461619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	index;
2471619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
2481619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
2491619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_set_config_rsp {
2501619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
2511619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
2521619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
2531619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_id;
2541619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	rcode;
2551619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
2561619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
2571619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_set_interface_req {
2581619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
2591619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
2601619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
2611619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_id;
2621619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	index;
2631619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	alternative;
2641619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
2651619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
2661619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_set_interface_rsp {
2671619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
2681619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
2691619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
2701619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_id;
2711619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	rcode;
2721619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
2731619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
2741619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_get_interface_req {
2751619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
2761619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
2771619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
2781619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_id;
2791619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	index;
2801619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
2811619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
2821619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_get_interface_rsp {
2831619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
2841619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
2851619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
2861619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_id;
2871619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	rcode;
2881619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	alternative;
2891619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
2901619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
2911619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_vendor_class_req {
2921619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
2931619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
2941619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
2951619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_id;
2961619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_type;
2971619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	request;
2981619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u16	value;
2991619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u16	index;
3001619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	data[1];
3011619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
3021619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
3031619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_vendor_class_rsp {
3041619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
3051619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
3061619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
3071619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	req_id;
3081619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	rcode;
3091619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	data[1];
3101619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
3111619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
3121619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_data {
3131619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
3141619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
3151619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
3161619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	endpoint;
3171619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	format;
3181619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
3191619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
3201619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_isoc_fixed {
3211619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
3221619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
3231619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
3241619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	endpoint;
3251619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	format;
3261619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	unit_size;
3271619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	frame_number;
3281619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	data[1];
3291619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
3301619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
3311619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_multiple_fixed {
3321619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
3331619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
3341619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
3351619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	endpoint;
3361619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	format;
3371619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	unit_size;
3381619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	data[1];
3391619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
3401619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
3411619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_fragmented {
3421619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	app_id;
3431619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	elt_seq_num;
3441619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	type;
3451619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	endpoint;
3461619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	format;
3471619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u16	total_size;
3481619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u16	offset;
3491619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	data[1];
3501619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
3511619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
3521619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly/* Note: the following does not get packaged in an element in the same way
3531619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly * that other data formats are packaged. Instead the data is put in a frame
3541619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly * directly after the oz_header and is the only permitted data in such a
3551619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly * frame. The length of the data is directly determined from the frame size.
3561619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly */
3571619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kellystruct oz_isoc_large {
3581619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	endpoint;
3591619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	format;
3601619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	ms_data;
3611619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly	u8	frame_number;
3621619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly} PACKED;
3631619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
3641619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_DATA_F_TYPE_MASK		0xF
3651619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_DATA_F_MULTIPLE_FIXED	0x1
3661619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_DATA_F_MULTIPLE_VAR		0x2
3671619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_DATA_F_ISOC_FIXED		0x3
3681619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_DATA_F_ISOC_VAR		0x4
3691619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_DATA_F_FRAGMENTED		0x5
3701619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#define OZ_DATA_F_ISOC_LARGE		0x7
3711619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly
3721619cb6f2dd9674491e5772bf37b45e03666dc10Chris Kelly#endif /* _OZPROTOCOL_H */
373