/*
 * Copyright 2018 - 2021 NXP
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef __USB_DC_MCUX_H__
#define __USB_DC_MCUX_H__

#include <drivers/usb/usb_dc.h>
#include <sys/byteorder.h>
#include "usb_spec.h"
#include "usb.h"
#include "usb_device_dci.h"
#include "usb_device.h"

/******************************************************************************
 * Definitions
 *****************************************************************************/
/* EHCI instance count */
#ifdef CONFIG_USB_DC_NXP_EHCI
#define USB_DEVICE_CONFIG_EHCI (1U)
/* How many the DTD are supported. */
#define USB_DEVICE_CONFIG_EHCI_MAX_DTD (16U)
/* Whether device is self power. 1U supported, 0U not supported */
#define USB_DEVICE_CONFIG_SELF_POWER (1U)
#endif

#ifdef CONFIG_USB_DC_NXP_LPCIP3511

#ifdef USBHSD_BASE_ADDRS
#define USB_DEVICE_CONFIG_LPCIP3511HS (1U)
#else
#define USB_DEVICE_CONFIG_LPCIP3511HS (0U)
#endif

#ifdef USB_BASE_ADDRS
#define USB_DEVICE_CONFIG_LPCIP3511FS (1U)
#else
#define USB_DEVICE_CONFIG_LPCIP3511FS (0U)
#endif

/* Whether device is self power. 1U supported, 0U not supported */
#define USB_DEVICE_CONFIG_SELF_POWER (1U)

#endif

#if defined(CONFIG_BIG_ENDIAN)
#define USB_SHORT_FROM_LITTLE_ENDIAN(n) __bswap_16(n)
#else
#define USB_SHORT_FROM_LITTLE_ENDIAN(n) (n)
#endif

#if (((defined(USB_DEVICE_CONFIG_LPCIP3511FS)) && (USB_DEVICE_CONFIG_LPCIP3511FS > 0U)) || \
	((defined(USB_DEVICE_CONFIG_LPCIP3511HS)) && (USB_DEVICE_CONFIG_LPCIP3511HS > 0U)))
#define USB_DATA_ALIGN_SIZE 64U
#else
#define USB_DATA_ALIGN_SIZE 4U
#endif

#define USB_DATA_ALIGN_SIZE_MULTIPLE(n) (((n) + USB_DATA_ALIGN_SIZE - 1U) & \
						(~(USB_DATA_ALIGN_SIZE - 1U)))

/* Number of endpoints supported */
#define USB_DEVICE_CONFIG_ENDPOINTS (DT_INST_PROP(0, num_bidir_endpoints))

/* controller driver do the ZLP for controller transfer automatically or not */
#define USB_DEVICE_CONTROLLER_AUTO_CONTROL_TRANSFER_ZLP (0)

/* endpoint related macros */
#define EP0_MAX_PACKET_SIZE    64
#define EP0_OUT 0
#define EP0_IN  0x80

/* enter critical macros */
#define OSA_SR_ALLOC() int usbOsaCurrentSr
#define OSA_ENTER_CRITICAL() usbOsaCurrentSr = irq_lock()
#define OSA_EXIT_CRITICAL() irq_unlock(usbOsaCurrentSr)

/* NXP SDK USB controller driver configuration macros */
#if defined(CONFIG_USB_DEDICATED_MEMORY)
#define USB_BDT __attribute__((section("m_usb_bdt, \"aw\", %nobits @")))
#define USB_GLOBAL __attribute__((section("m_usb_global, \"aw\", %nobits @")))
#else
#define USB_BDT
#define USB_GLOBAL
#endif

#define USB_RAM_ADDRESS_ALIGNMENT(n) __aligned(n)

/* EHCI */
#if defined(CONFIG_NOCACHE_MEMORY)
#define USB_CONTROLLER_DATA __nocache
#elif defined(CONFIG_USB_DEDICATED_MEMORY)
#define USB_CONTROLLER_DATA __attribute__((section("m_usb_global, \"aw\", %nobits @")))
#else
#define USB_CONTROLLER_DATA
#endif

struct usb_ep_ctrl_data {
	usb_device_callback_message_struct_t transfer_message;
	struct k_mem_block block;
	usb_dc_ep_callback callback;
	uint16_t ep_mps;
	uint8_t ep_type;
	uint8_t ep_enabled : 1;
	uint8_t ep_occupied : 1;
};

#define USBD_MCUX_THREAD_STACK_SIZE		1024

struct usb_device_struct {
#if ((defined(USB_DEVICE_CONFIG_REMOTE_WAKEUP)) && \
		(USB_DEVICE_CONFIG_REMOTE_WAKEUP > 0U)) || \
	(defined(FSL_FEATURE_SOC_USB_ANALOG_COUNT) && \
		(FSL_FEATURE_SOC_USB_ANALOG_COUNT > 0U))
	/* Current hw tick(ms)*/
	volatile uint64_t hwTick;
#endif
	/* Controller handle */
	usb_device_controller_handle controllerHandle;
	/* Controller interface handle */
	const usb_device_controller_interface_struct_t *interface;
	usb_dc_status_callback status_callback;
	struct usb_ep_ctrl_data *eps;
	bool attached;
	/* Current device address */
	uint8_t address;
	/* Controller ID */
	uint8_t controllerId;
	/* Current device state */
	uint8_t state;
#if ((defined(USB_DEVICE_CONFIG_REMOTE_WAKEUP)) && (USB_DEVICE_CONFIG_REMOTE_WAKEUP > 0U))
	/* Remote wakeup is enabled or not */
	uint8_t remotewakeup;
#endif
	/* Is doing device reset or not */
	uint8_t isResetting;
	uint8_t setupDataStage;
	K_KERNEL_STACK_MEMBER(thread_stack, USBD_MCUX_THREAD_STACK_SIZE);
	struct k_thread thread;
};

#endif /* __USB_DC_MCUX_H__ */
