/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (c) 2019 - 2021 DisplayLink (UK) Ltd.
 */
#ifndef __MAUSB_MA_USB_H__
#define __MAUSB_MA_USB_H__

#ifdef __KERNEL__
#include <linux/types.h>
#else
#include <types.h>
#endif /* __KERNEL__ */

#define MA_USB_SET_FIELD_(_m_, _v) __mausb_set_field(MA_USB_##_m_##_MASK, _v)
#define MA_USB_GET_FIELD_(_m_, _v) __mausb_get_field(MA_USB_##_m_##_MASK, _v)
#define MA_USB_SET_FIELD(_m_, _v) __mausb_set_field(MA_USB_##_m_##_MASK, \
						    MA_USB_##_v)
#define MA_USB_GET_FIELD(_m_, _v) __mausb_get_field(MA_USB_##_m_##_MASK, \
						    MA_USB_##_v)

#define MA_USB_MGMT_TOKEN_RESERVED  0
#define MA_USB_MGMT_TOKEN_MIN       1
#define MA_USB_MGMT_TOKEN_MAX       ((1 << 10) - 1)

#define MA_USB_DATA_EPS_UNASSIGNED  0
#define MA_USB_DATA_EPS_ACTIVE      1
#define MA_USB_DATA_EPS_INACTIVE    2
#define MA_USB_DATA_EPS_HALTED      3

#define MA_USB_DATA_TFLAGS_ARQ      1
#define MA_USB_DATA_TFLAGS_NEG      2
#define MA_USB_DATA_TFLAGS_EOT      4
#define MA_USB_DATA_TFLAGS_TRANSFER_TYPE_CTRL   0
#define MA_USB_DATA_TFLAGS_TRANSFER_TYPE_ISOCH  8
#define MA_USB_DATA_TFLAGS_TRANSFER_TYPE_BULK   16
#define MA_USB_DATA_TFLAGS_TRANSFER_TYPE_INTR   24

#define MA_USB_DATA_TFLAGS_TRANSFER_TYPE_MASK   0x18

#define MA_USB_DATA_IFLAGS_MTD_VALID      1
#define MA_USB_DATA_IFLAGS_HDR_FMT_SHORT  0
#define MA_USB_DATA_IFLAGS_HDR_FMT_STD    2
#define MA_USB_DATA_IFLAGS_HDR_FMT_LONG   4
#define MA_USB_DATA_IFLAGS_IRS_FMT_STD    0
#define MA_USB_DATA_IFLAGS_IRS_FMT_LONG   2
#define MA_USB_DATA_IFLAGS_ASAP           8

#define MA_USB_DATA_IFLAGS_FMT_MASK       0x6

/* version */

#define MA_USB_HDR_VERSION_1_0      0

/* flags */

#define MA_USB_HDR_FLAGS_HOST       1
#define MA_USB_HDR_FLAGS_RETRY      2
#define MA_USB_HDR_FLAGS_TIMESTAMP  4
#define MA_USB_HDR_FLAGS_RESERVED   8
#define MA_USB_HDR_FLAG(_f) MA_USB_HDR_FLAGS_##_f

/* type and subtype */

#define MA_USB_HDR_TYPE_TYPE_MASK     0xC0
#define MA_USB_HDR_TYPE_SUBTYPE_MASK  0x3F

#define MA_USB_HDR_TYPE_TYPE_MANAGEMENT 0
#define MA_USB_HDR_TYPE_TYPE_CONTROL    1
#define MA_USB_HDR_TYPE_TYPE_DATA       2

/* Management subtypes */

#define _MA_USB_HDR_TYPE_MANAGEMENT_REQ(_s) \
	MA_USB_SET_FIELD_(HDR_TYPE_SUBTYPE, (_s) * 2)
#define _MA_USB_HDR_TYPE_MANAGEMENT_RESP(_s) \
	MA_USB_SET_FIELD_(HDR_TYPE_SUBTYPE, (_s) * 2 + 1)

#define MA_USB_HDR_TYPE_MANAGEMENT_REQ(_s) \
	_MA_USB_HDR_TYPE_MANAGEMENT_REQ(MA_USB_HDR_TYPE_SUBTYPE_##_s)
#define MA_USB_HDR_TYPE_MANAGEMENT_RESP(_s) \
	_MA_USB_HDR_TYPE_MANAGEMENT_RESP(MA_USB_HDR_TYPE_SUBTYPE_##_s)

#define MA_USB_HDR_TYPE_SUBTYPE_CAP               0
#define MA_USB_HDR_TYPE_SUBTYPE_USBDEVHANDLE      1
#define MA_USB_HDR_TYPE_SUBTYPE_EPHANDLE          2
#define MA_USB_HDR_TYPE_SUBTYPE_EPACTIVATE        3
#define MA_USB_HDR_TYPE_SUBTYPE_EPINACTIVATE      4
#define MA_USB_HDR_TYPE_SUBTYPE_EPRESET           5
#define MA_USB_HDR_TYPE_SUBTYPE_CLEARTRANSFERS    6
#define MA_USB_HDR_TYPE_SUBTYPE_EPHANDLEDELETE    7
#define MA_USB_HDR_TYPE_SUBTYPE_DEVRESET          8
#define MA_USB_HDR_TYPE_SUBTYPE_MODIFYEP0         9
#define MA_USB_HDR_TYPE_SUBTYPE_SETUSBDEVADDR     10
#define MA_USB_HDR_TYPE_SUBTYPE_UPDATEDEV         11
#define MA_USB_HDR_TYPE_SUBTYPE_USBDEVDISCONNECT  12
#define MA_USB_HDR_TYPE_SUBTYPE_USBSUSPEND        13
#define MA_USB_HDR_TYPE_SUBTYPE_USBRESUME         14
#define MA_USB_HDR_TYPE_SUBTYPE_REMOTEWAKE        15
#define MA_USB_HDR_TYPE_SUBTYPE_PING              16
#define MA_USB_HDR_TYPE_SUBTYPE_DEVDISCONNECT     17
#define MA_USB_HDR_TYPE_SUBTYPE_DEVINITDISCONNECT 18
#define MA_USB_HDR_TYPE_SUBTYPE_SYNCH             19
#define MA_USB_HDR_TYPE_SUBTYPE_CANCELTRANSFER    20
#define MA_USB_HDR_TYPE_SUBTYPE_EPOPENSTREAM      21
#define MA_USB_HDR_TYPE_SUBTYPE_EPCLOSESTREAM     22
#define MA_USB_HDR_TYPE_SUBTYPE_USBDEVRESET       23
#define MA_USB_HDR_TYPE_SUBTYPE_DEVNOTIFICATION   24
#define MA_USB_HDR_TYPE_SUBTYPE_EPSETKEEPALIVE    25
#define MA_USB_HDR_TYPE_SUBTYPE_GETPORTBW         26
#define MA_USB_HDR_TYPE_SUBTYPE_SLEEP             27
#define MA_USB_HDR_TYPE_SUBTYPE_WAKE              28
#define MA_USB_HDR_TYPE_SUBTYPE_VENDORSPECIFIC    31 /* Reserved */

/* Data subtypes */

#define _MA_USB_HDR_TYPE_DATA_REQ(_s) ({ \
	typeof(_s) (s) = (_s); \
	MA_USB_SET_FIELD(HDR_TYPE_TYPE, HDR_TYPE_TYPE_DATA) | \
	MA_USB_SET_FIELD_(HDR_TYPE_SUBTYPE, (s) * 2 \
	+ ((s) > 0 ? 1 : 0)); })
#define _MA_USB_HDR_TYPE_DATA_RESP(_s) ({ \
	typeof(_s) (s) = (_s); \
	MA_USB_SET_FIELD(HDR_TYPE_TYPE, HDR_TYPE_TYPE_DATA) | \
	MA_USB_SET_FIELD_(HDR_TYPE_SUBTYPE, (s) * 2 + 1 \
	+ ((s) > 0 ? 1 : 0)); })
#define _MA_USB_HDR_TYPE_DATA_ACK(_s) ( \
	MA_USB_SET_FIELD(HDR_TYPE_TYPE, HDR_TYPE_TYPE_DATA) | \
	MA_USB_SET_FIELD_(HDR_TYPE_SUBTYPE, (_s) * 2 + 2))

#define MA_USB_HDR_TYPE_DATA_REQ(_s) \
	_MA_USB_HDR_TYPE_DATA_REQ(MA_USB_HDR_TYPE_SUBTYPE_##_s)
#define MA_USB_HDR_TYPE_DATA_RESP(_s) \
	_MA_USB_HDR_TYPE_DATA_RESP(MA_USB_HDR_TYPE_SUBTYPE_##_s)
#define MA_USB_HDR_TYPE_DATA_ACK(_s) \
	_MA_USB_HDR_TYPE_DATA_ACK(MA_USB_HDR_TYPE_SUBTYPE_##_s)

#define MA_USB_HDR_TYPE_SUBTYPE_TRANSFER          0
#define MA_USB_HDR_TYPE_SUBTYPE_ISOCHTRANSFER     1

/* EP/Device Handle */

#define MA_USB_DEVICE_HANDLE_RESERVED   0

#define MA_USB_EP_HANDLE_D_MASK     0x0001
#define MA_USB_EP_HANDLE_EP_N_MASK  0x001e
#define MA_USB_EP_HANDLE_ADDR_MASK  0x0fe0
#define MA_USB_EP_HANDLE_BUS_N_MASK 0xf000

#define MA_USB_EP_HANDLE(_b, _a, _e, _d) ( \
	MA_USB_SET_FIELD_(EP_HANDLE_BUS_N, _b)  | \
	MA_USB_SET_FIELD_(EP_HANDLE_ADDR, _a)   | \
	MA_USB_SET_FIELD_(EP_HANDLE_EP_N, _e)   | \
	MA_USB_SET_FIELD_(EP_HANDLE_D, _d))

#define MA_USB_EP_HANDLE_BUS_N_VIRTUAL  15
#define MA_USB_EP_HANDLE_ADDR_DEFAULT   0
#define MA_USB_EP_HANDLE_EP_N_DEFAULT   0
#define MA_USB_EP_HANDLE_D_OUT          0	/* See USB2.0 9.3, Table 9-2 */
#define MA_USB_EP_HANDLE_D_IN           1	/* See USB2.0 9.3, Table 9-2 */

/* Status codes */

#define MA_USB_HDR_STATUS_UNSUCCESSFUL                  -128
#define MA_USB_HDR_STATUS_INVALID_MA_USB_SESSION_STATE  -127
#define MA_USB_HDR_STATUS_INVALID_DEVICE_HANDLE         -126
#define MA_USB_HDR_STATUS_INVALID_EP_HANDLE             -125
#define MA_USB_HDR_STATUS_INVALID_EP_HANDLE_STATE       -124
#define MA_USB_HDR_STATUS_INVALID_REQUEST               -123
#define MA_USB_HDR_STATUS_MISSING_SEQUENCE_NUMBER       -122
#define MA_USB_HDR_STATUS_TRANSFER_PENDING              -121
#define MA_USB_HDR_STATUS_TRANSFER_EP_STALL             -120
#define MA_USB_HDR_STATUS_TRANSFER_SIZE_ERROR           -119
#define MA_USB_HDR_STATUS_TRANSFER_DATA_BUFFER_ERROR    -118
#define MA_USB_HDR_STATUS_TRANSFER_BABBLE_DETECTED      -117
#define MA_USB_HDR_STATUS_TRANSFER_TRANSACTION_ERROR    -116
#define MA_USB_HDR_STATUS_TRANSFER_SHORT_TRANSFER       -115
#define MA_USB_HDR_STATUS_TRANSFER_CANCELED             -114
#define MA_USB_HDR_STATUS_INSUFICIENT_RESOURCES         -113
#define MA_USB_HDR_STATUS_NOT_SUFFICIENT_BANDWIDTH      -112
#define MA_USB_HDR_STATUS_INTERNAL_ERROR                -111
#define MA_USB_HDR_STATUS_DATA_OVERRUN                  -110
#define MA_USB_HDR_STATUS_DEVICE_NOT_ACCESSED           -109
#define MA_USB_HDR_STATUS_BUFFER_OVERRUN                -108
#define MA_USB_HDR_STATUS_BUSY                          -107
#define MA_USB_HDR_STATUS_DROPPED_PACKET                -106
#define MA_USB_HDR_STATUS_ISOCH_TIME_EXPIRED            -105
#define MA_USB_HDR_STATUS_ISOCH_TIME_INVALID            -104
#define MA_USB_HDR_STATUS_NO_USB_PING_RESPONSE          -103
#define MA_USB_HDR_STATUS_NOT_SUPPORTED                 -102
#define MA_USB_HDR_STATUS_REQUEST_DENIED                -101
#define MA_USB_HDR_STATUS_MISSING_REQUEST_ID            -100
#define MA_USB_HDR_STATUS_SUCCESS                       0	/* Reserved */
#define MA_USB_HDR_STATUS_NO_ERROR MA_USB_HDR_STATUS_SUCCESS	/* Reserved */

/* Speed values */

#define MA_USB_SPEED_LOW_SPEED         0
#define MA_USB_SPEED_FULL_SPEED        1
#define MA_USB_SPEED_HIGH_SPEED        2
#define MA_USB_SPEED_SUPER_SPEED       3
#define MA_USB_SPEED_SUPER_SPEED_PLUS  4

/* capreq extra hdr */

#define MA_USB_CAPREQ_DESC_SYNCHRONIZATION_LENGTH\
	(sizeof(struct ma_usb_desc) +\
	sizeof(struct ma_usb_capreq_desc_synchronization))
#define MA_USB_CAPREQ_DESC_LINK_SLEEP_LENGTH\
	(sizeof(struct ma_usb_desc) +\
	sizeof(struct ma_usb_capreq_desc_link_sleep))

#define MA_USB_CAPREQ_LENGTH\
	(sizeof(struct ma_usb_hdr_common) +\
	sizeof(struct ma_usb_hdr_capreq) +\
	MA_USB_CAPREQ_DESC_SYNCHRONIZATION_LENGTH +\
	MA_USB_CAPREQ_DESC_LINK_SLEEP_LENGTH)

/* capreq desc types */

#define MA_USB_CAPREQ_DESC_TYPE_SYNCHRONIZATION 3
#define MA_USB_CAPREQ_DESC_TYPE_LINK_SLEEP      5

/* capresp descriptors */

#define MA_USB_CAPRESP_DESC_TYPE_SPEED            0
#define MA_USB_CAPRESP_DESC_TYPE_P_MANAGED_OUT    1
#define MA_USB_CAPRESP_DESC_TYPE_ISOCHRONOUS      2
#define MA_USB_CAPRESP_DESC_TYPE_SYNCHRONIZATION  3
#define MA_USB_CAPRESP_DESC_TYPE_CONTAINER_ID     4
#define MA_USB_CAPRESP_DESC_TYPE_LINK_SLEEP       5
#define MA_USB_CAPRESP_DESC_TYPE_HUB_LATENCY      6

/* Request ID and sequence number values */

#define MA_USB_TRANSFER_RESERVED      0
#define MA_USB_TRANSFER_REQID_MIN     0
#define MA_USB_TRANSFER_REQID_MAX     ((1 <<  8) - 1)
#define MA_USB_TRANSFER_SEQN_MIN      0
#define MA_USB_TRANSFER_SEQN_MAX      ((1 << 24) - 2)
#define MA_USB_TRANSFER_SEQN_INVALID  ((1 << 24) - 1)

#define MA_USB_ISOCH_SFLAGS_FRAGMENT      0x1
#define MA_USB_ISOCH_SFLAGS_LAST_FRAGMENT 0x2

#define MAUSB_MAX_MGMT_SIZE 50

#define MAUSB_TRANSFER_HDR_SIZE (u32)(sizeof(struct ma_usb_hdr_common) +\
				      sizeof(struct ma_usb_hdr_transfer))

#define MAUSB_ISOCH_TRANSFER_HDR_SIZE (u16)(sizeof(struct ma_usb_hdr_common) +\
			sizeof(struct ma_usb_hdr_isochtransfer) +\
			sizeof(struct ma_usb_hdr_isochtransfer_optional))

#define MAX_ISOCH_ASAP_PACKET_SIZE (150000 /* Network MTU */ -\
	MAUSB_ISOCH_TRANSFER_HDR_SIZE - 20 /* IP header size */ -\
	8 /* UDP header size*/)

#define shift_ptr(ptr, offset) ((u8 *)(ptr) + (offset))

/* USB descriptor */
struct ma_usb_desc {
	u8 length;
	u8 type;
	u8 value[0];
} __packed;

struct ma_usb_ep_handle {
	u16 d		:1,
	    ep_n	:4,
	    addr	:7,
	    bus_n	:4;
};

struct ma_usb_hdr_mgmt {
	u32 status	:8,
	    token	:10,  /* requestor originator allocated */
	    reserved	:14;
} __aligned(4);

struct ma_usb_hdr_ctrl {	/* used in all req/resp/conf operations */
	s8 status;
	u8 link_type;
	union {
		u8 tid;	/* ieee 802.11 */
	} connection_id;
} __aligned(4);

struct ma_usb_hdr_data {
	s8 status;
	u8 eps		:2,
	   t_flags	:6;
	union {
		u16 stream_id;
		struct {
			u16 headers	:12,
			    i_flags	:4;
		};
	};
} __aligned(4);

struct ma_usb_hdr_common {
	u8 version	:4,
	   flags	:4;
	u8  type;
	u16 length;
	union {
		u16 dev;
		u16 epv;
		struct ma_usb_ep_handle eph;
	} handle;
	u8 dev_addr;
	u8 ssid;
	union {
		s8 status;
		struct ma_usb_hdr_mgmt mgmt;
		struct ma_usb_hdr_ctrl ctrl;
		struct ma_usb_hdr_data data;
	};
} __aligned(4);

/* capreq extra hdr */

struct ma_usb_hdr_capreq {
	u32 out_mgmt_reqs	:12,
	    reserved		:20;
} __aligned(4);

struct ma_usb_capreq_desc_synchronization {
	u8 media_time_available	:1,
	   reserved		:7;
} __packed;

struct ma_usb_capreq_desc_link_sleep {
	u8 link_sleep_capable	:1,
	   reserved		:7;
} __packed;

/* capresp extra hdr */

struct ma_usb_hdr_capresp {
	u16 endpoints;
	u8 devices;
	u8 streams		:5,
	   dev_type		:3;
	u32 descs		:8,
	    descs_length	:24;
	u16 out_transfer_reqs;
	u16 out_mgmt_reqs	:12,
	    reserved		:4;
} __aligned(4);

struct ma_usb_capresp_desc_speed {
	u8 reserved1		:4,
		speed		:4;
	u8 reserved2		:4,
	   lse			:2,	/* USB3.1 8.5.6.7, Table 8-22 */
	   reserved3		:2;
} __packed;

struct ma_usb_capresp_desc_p_managed_out {
	u8 elastic_buffer		:1,
	   drop_notification		:1,
	   reserved			:6;
} __packed;

struct ma_usb_capresp_desc_isochronous {
	u8 payload_dword_aligned	:1,
	   reserved			:7;
} __packed;

struct ma_usb_capresp_desc_synchronization {
	u8 media_time_available	:1,
	   time_stamp_required	:1,/* hubs need this set */
	   reserved		:6;
} __packed;

struct ma_usb_capresp_desc_container_id {
	u8 container_id[16];	/* UUID IETF RFC 4122 */
} __packed;

struct ma_usb_capresp_desc_link_sleep {
	u8 link_sleep_capable	:1,
	   reserved		:7;
} __packed;

struct ma_usb_capresp_desc_hub_latency {
	u16 latency;		/* USB3.1 */
} __packed;

/* usbdevhandlereq extra hdr */
struct ma_usb_hdr_usbdevhandlereq {
	u32 route_string	:20,
	    speed		:4,
	    reserved1		:8;
	u16 hub_dev_handle;
	u16 reserved2;
	u16 parent_hs_hub_dev_handle;
	u16 parent_hs_hub_port		:4,
	    mtt				:1,	/* USB2.0 11.14, 11.14.1.3 */
	    lse				:2,	/* USB3.1 8.5.6.7, Table 8-22 */
	    reserved3			:9;
} __aligned(4);

/* usbdevhandleresp extra hdr */
struct ma_usb_hdr_usbdevhandleresp {
	u16 dev_handle;
	u16 reserved;
} __aligned(4);

/* ephandlereq extra hdr */
struct ma_usb_hdr_ephandlereq {
	u32 ep_descs		:5,
	    ep_desc_size	:6,
	    reserved		:21;
} __aligned(4);

/*
 * Restricted USB2.0 ep desc limited to 6 bytes, isolating further changes.
 * See USB2.0 9.6.6, Table 9-13
 */
struct usb_ep_desc {
	u8 bLength;
	/* USB2.0 9.4, Table 9-5 (5) usb/ch9.h: USB_DT_ENDPOINT */
	u8 bDescriptorType;
	u8  bEndpointAddress;
	u8  bmAttributes;
	__le16 wMaxPacketSize;
	u8  bInterval;
} __packed;

/*
 * Restricted USB3.1 ep comp desc isolating further changes in usb/ch9.h
 * See USB3.1 9.6.7, Table 9-26
 */
struct usb_ss_ep_comp_desc {
	u8 bLength;
	/* USB3.1 9.4, Table 9-6 (48) usb/ch9.h: USB_DT_SS_ENDPOINT_COMP */
	u8  bDescriptorType;
	u8  bMaxBurst;
	u8  bmAttributes;
	__le16 wBytesPerInterval;
} __packed;

/*
 * USB3.1 ss_plus_isoch_ep_comp_desc
 * See USB3.1 9.6.8, Table 9-27
 */
struct usb_ss_plus_isoch_ep_comp_desc {
	u8 bLength;
	/* USB3.1 9.4, Table 9-6 (49) usb/ch9.h: not yet defined! */
	u8 bDescriptorType;
	u16 wReserved;
	u32 dwBytesPerInterval;
} __packed;

struct ma_usb_ephandlereq_desc_std {
	struct usb_ep_desc usb20;
} __aligned(4);

struct ma_usb_ephandlereq_desc_ss {
	struct usb_ep_desc	   usb20;
	struct usb_ss_ep_comp_desc usb31;
} __aligned(4);

struct ma_usb_ephandlereq_desc_ss_plus {
	struct usb_ep_desc		      usb20;
	struct usb_ss_ep_comp_desc	      usb31;
	struct usb_ss_plus_isoch_ep_comp_desc usb31_isoch;
} __aligned(4);

struct ma_usb_dev_context {
	struct usb_ep_desc usb;
};

/* ephandleresp extra hdr */
struct ma_usb_hdr_ephandleresp {
	u32 ep_descs :5,
	    reserved :27;
} __aligned(4);

/* ephandleresp descriptor */
struct ma_usb_ephandleresp_desc {
	union {
		struct ma_usb_ep_handle eph;
		u16		epv;
	} ep_handle;
	u16 d		:1,	/* non-control or non-OUT */
	    isoch	:1,
	    l_managed	:1,	/* control or non-isoch OUT */
	    invalid	:1,
	    reserved1	:12;
	u16 ccu;		/* control or non-isoch OUT */
	u16 reserved2;
	u32 buffer_size;	/* control or OUT */
	u16 isoch_prog_delay;	/* in us. */
	u16 isoch_resp_delay;	/* in us. */
} __aligned(4);

/* epactivatereq extra hdr */
struct ma_usb_hdr_epactivatereq {
	u32 ep_handles	:5,
	    reserved	:27;
	union {
		u16		epv;
		struct ma_usb_ep_handle eph;
	} handle[0];
} __aligned(4);

/* epactivateresp extra hdr */
struct ma_usb_hdr_epactivateresp {
	u32 ep_errors	:5,
	    reserved	:27;
	union {
		u16			epv;
		struct ma_usb_ep_handle eph;
	} handle[0];
} __aligned(4);

/* epinactivatereq extra hdr */
struct ma_usb_hdr_epinactivatereq {
	u32 ep_handles	:5,
	    suspend	:1,
	    reserved	:26;
	union {
		u16		epv;
		struct ma_usb_ep_handle eph;
	} handle[0];
} __aligned(4);

/* epinactivateresp extra hdr */
struct ma_usb_hdr_epinactivateresp {
	u32 ep_errors	:5,
	    reserved	:27;
	union {
		u16		epv;
		struct ma_usb_ep_handle eph;
	} handle[0];
} __aligned(4);

/* epresetreq extra hdr */
struct ma_usb_hdr_epresetreq {
	u32 ep_reset_blocks	:5,
	    reserved		:27;
} __aligned(4);

/* epresetreq reset block */
struct ma_usb_epresetreq_block {
	union {
		u16			epv;
		struct ma_usb_ep_handle eph;
	} handle;
	u16 tsp		:1,
	    reserved	:15;
} __aligned(4);

/* epresetresp extra hdr */
struct ma_usb_hdr_epresetresp {
	u32 ep_errors	:5,
	    reserved	:27;
	union {
		u16			epv;
		struct ma_usb_ep_handle eph;
	} handle[0];
} __aligned(4);

/* cleartransfersreq extra hdr */
struct ma_usb_hdr_cleartransfersreq {
	u32 info_blocks	:8,
	    reserved	:24;
} __aligned(4);

/* cleartransfersreq info block */
struct ma_usb_cleartransfersreq_block {
	union {
		u16			epv;
		struct ma_usb_ep_handle eph;
	} handle;
	u16 stream_id; /* ss stream eps only */
	u32 start_req_id	:8,
	    reserved		:24;
} __aligned(4);

/* cleartransfersresp extra hdr */
struct ma_usb_hdr_cleartransfersresp {
	u32 status_blocks	:8,
	    reserved		:24;
} __aligned(4);

/* cleartransfersresp status block */
struct ma_usb_cleartransfersresp_block {
	union {
		u16			epv;
		struct ma_usb_ep_handle eph;
	} handle;
	u16 stream_id;	/* ss stream eps only */
	u32 cancel_success	:1,
	    partial_delivery	:1,
	    reserved		:30;
	u32 last_req_id		:8,
	    delivered_seq_n	:24;	/* OUT w/partial_delivery only */
	u32 delivered_byte_offset;	/* OUT w/partial_delivery only */
} __aligned(4);

/* ephandledeletereq extra hdr */
struct ma_usb_hdr_ephandledeletereq {
	u32 ep_handles	:5,
	    reserved	:27;
	union {
		u16			epv;
		struct ma_usb_ep_handle eph;
	} handle[0];
} __aligned(4);

/* ephandledeleteresp extra hdr */
struct ma_usb_hdr_ephandledeleteresp {
	u32 ep_errors	:5,
	    reserved	:27;
	union {
		u16			epv;
		struct ma_usb_ep_handle eph;
	} handle[0];
} __aligned(4);

/* modifyep0req extra hdr */
struct ma_usb_hdr_modifyep0req {
	union {
		u16			epv;
		struct ma_usb_ep_handle eph;
	} handle;
	u16 max_packet_size;
} __aligned(4);

/*
 * modifyep0resp extra hdr
 * Only if req ep0 handle addr was 0 and req dev is in the addressed state
 * or  if req ep0 handle addr != 0 and req dev is in default state
 */
struct ma_usb_hdr_modifyep0resp {
	union {
		u16			epv;
		struct ma_usb_ep_handle eph;
	} handle;

	u16 reserved;
} __aligned(4);

/* setusbdevaddrreq extra hdr */
struct ma_usb_hdr_setusbdevaddrreq {
	u16 response_timeout;	/* in ms. */
	u16 reserved;
} __aligned(4);

/* setusbdevaddrresp extra hdr */
struct ma_usb_hdr_setusbdevaddrresp {
	u32 addr	:7,
	    reserved	:25;
} __aligned(4);

/* updatedevreq extra hdr */
struct ma_usb_hdr_updatedevreq {
	u16 max_exit_latency;	/* hubs only */
	u8 hub		:1,
	   ports	:4,
	   mtt		:1,
	   ttt		:2;
	u8 integrated_hub_latency	:1,
	   reserved			:7;
} __aligned(4);

/*
 * USB2.0 dev desc, isolating further changes in usb/ch9.h
 * See USB2.0 9.6.6, Table 9-13
 */
struct usb_dev_desc {
	u8 bLength;
	/*
	 * USB2.0 9.4, Table 9-5 (1)
	 * usb/ch9.h: USB_DT_DEVICE
	 */
	u8 bDescriptorType;
	__le16 bcdUSB;
	u8  bDeviceClass;
	u8  bDeviceSubClass;
	u8  bDeviceProtocol;
	u8  bMaxPacketSize0;
	__le16 idVendor;
	__le16 idProduct;
	__le16 bcdDevice;
	u8  iManufacturer;
	u8  iProduct;
	u8  iSerialNumber;
	u8  bNumConfigurations;
} __packed;

struct ma_usb_updatedevreq_desc {
	struct usb_dev_desc usb20;
} __aligned(4);

/* remotewakereq extra hdr */
struct ma_usb_hdr_remotewakereq {
	u32 resumed  :1,
		 reserved :31;
} __aligned(4);

/* synchreq/resp extra hdr */
struct ma_usb_hdr_synch {
	u32 mtd_valid		:1,	/* MA-USB1.0b 6.5.1.8, Table 66 */
	    resp_required	:1,
	    reserved		:30;
	union {
		u32 timestamp;		/* MA-USB1.0b 6.5.1.11 */
		struct {
			u32 delta		:13,
			    bus_interval	:19;
		};			/* MA-USB1.0b 6.6.1, Table 69 */
	};
	u32 mtd;			/* MA-USB1.0b 6.5.1.12 */
} __aligned(4);

/* canceltransferreq extra hdr */
struct ma_usb_hdr_canceltransferreq {
	union {
		u16			epv;
		struct ma_usb_ep_handle eph;
	} handle;
	u16 stream_id;
	u32 req_id	  :8,
		 reserved :24;
} __aligned(4);

/* canceltransferresp extra hdr */
struct ma_usb_hdr_canceltransferresp {
	union {
		u16			epv;
		struct ma_usb_ep_handle eph;
	} handle;
	u16 stream_id;
	u32 req_id		:8,
	    cancel_status	:3,
	    reserved1		:21;
	u32 delivered_seq_n	:24,
	    reserved2		:8;
	u32 delivered_byte_offset;
} __aligned(4);

/* transferreq/resp/ack extra hdr */
struct ma_usb_hdr_transfer {
	u32 seq_n	:24,
	    req_id	:8;
	union {
		u32 rem_size_credit;
		/* ISOCH aliased fields added for convenience. */
		struct {
			u32 presentation_time	:20,
			    segments		:12;
		};
	};
} __aligned(4);

/* isochtransferreq/resp extra hdr */
struct ma_usb_hdr_isochtransfer {
	u32 seq_n		:24,
	    req_id		:8;
	u32 presentation_time	:20,
	    segments		:12;
} __aligned(4);

/* isochtransferreq/resp optional hdr */
struct ma_usb_hdr_isochtransfer_optional {
	union {
		u32 timestamp;	/* MA-USB1.0b 6.5.1.11 */
		struct {
			u32 delta		:13,
			    bus_interval	:19;
		};		/* MA-USB1.0b 6.6.1, Table 69 */
	};
	u32 mtd;		/* MA-USB1.0b 6.5.1.12 */
} __aligned(4);

/* isochdatablock hdrs */

struct ma_usb_hdr_isochdatablock_short {
	u16 block_length;
	u16 segment_number	:12,
	    s_flags		:4;
} __aligned(4);

struct ma_usb_hdr_isochdatablock_std {
	u16 block_length;
	u16 segment_number	:12,
	    s_flags		:4;
	u16 segment_length;
	u16 fragment_offset;
} __aligned(4);

struct ma_usb_hdr_isochdatablock_long {
	u16 block_length;
	u16 segment_number	:12,
	    s_flags		:4;
	u32 segment_length;
	u32 fragment_offset;
} __aligned(4);

/* isochreadsizeblock hdrs */

struct ma_usb_hdr_isochreadsizeblock_std {
	u32 service_intervals		:12,
	    max_segment_length		:20;
} __aligned(4);

struct ma_usb_hdr_isochreadsizeblock_long {
	u32 service_intervals		:12,
	    reserved			:20;
	u32 max_segment_length;
} __aligned(4);

static inline int __mausb_set_field(int m, int v)
{
	return ((~((m) - 1) & (m)) * (v)) & (m);
}

static inline int __mausb_get_field(int m, int v)
{
	return ((v) & (m)) / (~((m) - 1) & (m));
}

static inline bool mausb_is_management_hdr_type(int hdr_type)
{
	return MA_USB_GET_FIELD_(HDR_TYPE_TYPE, hdr_type)
			== MA_USB_HDR_TYPE_TYPE_MANAGEMENT;
}

static inline bool mausb_is_data_hdr_type(int hdr_type)
{
	return MA_USB_GET_FIELD_(HDR_TYPE_TYPE, hdr_type)
			== MA_USB_HDR_TYPE_TYPE_DATA;
}

static inline bool mausb_is_management_resp_hdr_type(int hdr_resp_type)
{
	return mausb_is_management_hdr_type(hdr_resp_type) &&
			(MA_USB_GET_FIELD_(HDR_TYPE_SUBTYPE, hdr_resp_type) & 1)
			!= 0;
}

static inline
struct ma_usb_hdr_transfer *
mausb_get_data_transfer_hdr(struct ma_usb_hdr_common *hdr)
{
	return (struct ma_usb_hdr_transfer *)shift_ptr(hdr, sizeof(*hdr));
}

static inline
struct ma_usb_hdr_isochtransfer *
mausb_get_isochtransfer_hdr(struct ma_usb_hdr_common *hdr)
{
	return (struct ma_usb_hdr_isochtransfer *)shift_ptr(hdr, sizeof(*hdr));
}

static inline
struct ma_usb_hdr_isochtransfer_optional *
mausb_hdr_isochtransfer_optional_hdr(struct ma_usb_hdr_common *hdr)
{
	return (struct ma_usb_hdr_isochtransfer_optional *)
			shift_ptr(hdr, sizeof(struct ma_usb_hdr_common) +
				       sizeof(struct ma_usb_hdr_isochtransfer));
}

#endif	/* __MAUSB_MA_USB_H__ */
