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

#include "ma_usb.h"

#define MAUSB_MAX_NUM_OF_MA_DEVS			15
#define MAUSB_RING_BUFFER_SIZE				1024
#define MAUSB_MAX_DATA_IN_REQ_SIZE			28

#define MAUSB_EVENT_TYPE_DEV_RESET			1u
#define MAUSB_EVENT_TYPE_USB_DEV_HANDLE			2u
#define MAUSB_EVENT_TYPE_EP_HANDLE			3u
#define MAUSB_EVENT_TYPE_EP_HANDLE_ACTIVATE		4u
#define MAUSB_EVENT_TYPE_EP_HANDLE_INACTIVATE		5u
#define MAUSB_EVENT_TYPE_EP_HANDLE_RESET		6u
#define MAUSB_EVENT_TYPE_EP_HANDLE_DELETE		7u
#define MAUSB_EVENT_TYPE_MODIFY_EP0			8u
#define MAUSB_EVENT_TYPE_SET_USB_DEV_ADDRESS		9u
#define MAUSB_EVENT_TYPE_UPDATE_DEV			10u
#define MAUSB_EVENT_TYPE_USB_DEV_DISCONNECT		11u
#define MAUSB_EVENT_TYPE_PING				12u
#define MAUSB_EVENT_TYPE_DEV_DISCONNECT			13u
#define MAUSB_EVENT_TYPE_USB_DEV_RESET			14u
#define MAUSB_EVENT_TYPE_CANCEL_TRANSFER		15u
#define MAUSB_EVENT_TYPE_CLEAR_TRANSFERS		16u

#define MAUSB_EVENT_TYPE_PORT_CHANGED			80u
#define MAUSB_EVENT_TYPE_SEND_MGMT_MSG			81u
#define MAUSB_EVENT_TYPE_SEND_DATA_MSG			82u
#define MAUSB_EVENT_TYPE_RECEIVED_MGMT_MSG		83u
#define MAUSB_EVENT_TYPE_RECEIVED_DATA_MSG		84u
#define MAUSB_EVENT_TYPE_URB_COMPLETE			85u
#define MAUSB_EVENT_TYPE_SEND_ACK			86u
#define MAUSB_EVENT_TYPE_ITERATOR_RESET			87u
#define MAUSB_EVENT_TYPE_ITERATOR_SEEK			88u
#define MAUSB_EVENT_TYPE_DELETE_DATA_TRANSFER		89u
#define MAUSB_EVENT_TYPE_DELETE_MA_DEV			90u
#define MAUSB_EVENT_TYPE_USER_FINISHED			91u
#define MAUSB_EVENT_TYPE_RELEASE_EVENT_RESOURCES	92u
#define MAUSB_EVENT_TYPE_NETWORK_DISCONNECTED		93u
#define MAUSB_EVENT_TYPE_MGMT_REQUEST_TIMED_OUT		94u

#define MAUSB_EVENT_TYPE_NONE				255u

#define MAUSB_DATA_MSG_DIRECTION_OUT			0
#define MAUSB_DATA_MSG_DIRECTION_IN			1
#define MAUSB_DATA_MSG_CONTROL MAUSB_DATA_MSG_DIRECTION_OUT

struct mausb_devhandle {
	u64 event_id;
	u32 route_string;
	u16 hub_dev_handle;
	u16 parent_hs_hub_dev_handle;
	u16 parent_hs_hub_port;
	u16 mtt;
	/* dev_handle assigned in user */
	u16 dev_handle;
	u8  device_speed;
	u8  lse;
};

struct mausb_ephandle {
	u64 event_id;
	u16 device_handle;
	u16 descriptor_size;
	/* ep_handle assigned in user */
	u16 ep_handle;
	char	 descriptor[sizeof(struct ma_usb_ephandlereq_desc_ss)];
};

struct mausb_epactivate {
	u64 event_id;
	u16 device_handle;
	u16 ep_handle;
};

struct mausb_epinactivate {
	u64 event_id;
	u16 device_handle;
	u16 ep_handle;
};

struct mausb_epreset {
	u64 event_id;
	u16 device_handle;
	u16 ep_handle;
	u8  tsp;
};

struct mausb_epdelete {
	u64 event_id;
	u16 device_handle;
	u16 ep_handle;
};

struct mausb_updatedev {
	u64 event_id;
	u16 device_handle;
	u16 max_exit_latency;
	struct ma_usb_updatedevreq_desc update_descriptor;
	u8  hub;
	u8  number_of_ports;
	u8  mtt;
	u8  ttt;
	u8  integrated_hub_latency;
};

struct mausb_usbdevreset {
	u64 event_id;
	u16 device_handle;
};

struct mausb_modifyep0 {
	u64 event_id;
	u16 device_handle;
	u16 ep_handle;
	__le16 max_packet_size;
};

struct mausb_setusbdevaddress {
	u64 event_id;
	u16 device_handle;
	u16 response_timeout;
};

struct mausb_usbdevdisconnect {
	u16 device_handle;
};

struct mausb_canceltransfer {
	u64 urb;
	u16 device_handle;
	u16 ep_handle;
};

struct mausb_cleartransfers {
	u64 event_id;
	u16 device_handle;
	u16 ep_handle;
};

struct mausb_devdisconnect {
	u64 event_id;
};

struct mausb_mgmt_hdr {
	__aligned(4) char hdr[MAUSB_MAX_MGMT_SIZE];
};

struct mausb_mgmt_req_timedout {
	u64 event_id;
};

struct mausb_delete_ma_dev {
	u64 event_id;
	u16 device_id;
};

/* TODO split mgmt_event to generic send mgmt req and specific requests */
struct mausb_mgmt_event {
	union {
		struct mausb_devhandle		dev_handle;
		struct mausb_ephandle		ep_handle;
		struct mausb_epactivate		ep_activate;
		struct mausb_epinactivate	ep_inactivate;
		struct mausb_epreset		ep_reset;
		struct mausb_epdelete		ep_delete;
		struct mausb_modifyep0		modify_ep0;
		struct mausb_setusbdevaddress	set_usb_dev_address;
		struct mausb_updatedev		update_dev;
		struct mausb_usbdevreset	usb_dev_reset;
		struct mausb_usbdevdisconnect	usb_dev_disconnect;
		struct mausb_canceltransfer	cancel_transfer;
		struct mausb_cleartransfers	clear_transfers;
		struct mausb_devdisconnect	dev_disconnect;
		struct mausb_mgmt_hdr		mgmt_hdr;
		struct mausb_mgmt_req_timedout	mgmt_req_timedout;
		struct mausb_delete_ma_dev	delete_ma_dev;
	};
};

struct mausb_data_event {
	uintptr_t urb;
	uintptr_t recv_buf;
	u32 iterator_seek_delta;
	u32 transfer_size;
	u32 rem_transfer_size;
	u32 transfer_flags;
	u32 isoch_seg_num;
	u32 req_id;
	u32 payload_size;
	s32 status;

	__aligned(4) char hdr[MAUSB_TRANSFER_HDR_SIZE];
	__aligned(4) char hdr_ack[MAUSB_TRANSFER_HDR_SIZE];

	u16 device_id;
	u16 ep_handle;
	u16 packet_size;
	u8  setup_packet;
	u8  direction;
	u8  transfer_type;
	u8  first_control_packet;
	u8  transfer_eot;
	u8  mausb_address;
	u8  mausb_ssid;
};

struct mausb_port_changed_event {
	u8 port;
	u8 dev_type;
	u8 dev_speed;
	u8 lse;
};

struct mausb_event {
	union {
		struct mausb_mgmt_event		mgmt;
		struct mausb_data_event		data;
		struct mausb_port_changed_event port_changed;
	};
	s32 status;
	u8 type;
	u8 madev_addr;
};

struct mausb_events_notification {
	u16 num_of_events;
	u16 num_of_completed_events;
	u8  madev_addr;
};

#endif /* __MAUSB_MAUSB_EVENT_H__ */
