/******************************************************************************
*
* Copyright (C) 2010 - 2015 Xilinx, Inc.  All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal 
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/*****************************************************************************/
/**
 *
 * @file xusbps_endpoint.h
* @addtogroup usbps_v2_4
* @{
 *
 * This is an internal file containung the definitions for endpoints. It is
 * included by the xusbps_endpoint.c which is implementing the endpoint
 * functions and by xusbps_intr.c.
 *
 * <pre>
 * MODIFICATION HISTORY:
 *
 * Ver   Who  Date     Changes
 * ----- ---- -------- --------------------------------------------------------
 * 1.00a wgr  10/10/10 First release
 * </pre>
 *
 ******************************************************************************/
#ifndef XUSBPS_ENDPOINT_H
#define XUSBPS_ENDPOINT_H

#ifdef __cplusplus
extern "C" {
#endif

/***************************** Include Files *********************************/

#include "xil_cache.h"
#include "xusbps.h"
#include "xil_types.h"

/**************************** Type Definitions *******************************/

/************************** Constant Definitions *****************************/


/**
 * Endpoint Device Transfer Descriptor
 *
 * The dTD describes to the device controller the location and quantity of data
 * to be sent/received for given transfer. The driver does not attempt to
 * modify any field in an active dTD except the Next Link Pointer.
 */
#define XUSBPS_dTDNLP		0x00 /**< Pointer to the next descriptor */
#define XUSBPS_dTDTOKEN	0x04 /**< Descriptor Token */
#define XUSBPS_dTDBPTR0	0x08 /**< Buffer Pointer 0 */
#define XUSBPS_dTDBPTR1	0x0C /**< Buffer Pointer 1 */
#define XUSBPS_dTDBPTR2	0x10 /**< Buffer Pointer 2 */
#define XUSBPS_dTDBPTR3	0x14 /**< Buffer Pointer 3 */
#define XUSBPS_dTDBPTR4	0x18 /**< Buffer Pointer 4 */
#define XUSBPS_dTDBPTR(n)	(XUSBPS_dTDBPTR0 + (n) * 0x04)
#define XUSBPS_dTDRSRVD	0x1C /**< Reserved field */

/* We use the reserved field in the dTD to store user data. */
#define XUSBPS_dTDUSERDATA	XUSBPS_dTDRSRVD /**< Reserved field */


/** @name dTD Next Link Pointer (dTDNLP) bit positions.
 *  @{
 */
#define XUSBPS_dTDNLP_T_MASK		0x00000001
				/**< USB dTD Next Link Pointer Terminate Bit */
#define XUSBPS_dTDNLP_ADDR_MASK	0xFFFFFFE0
				/**< USB dTD Next Link Pointer Address [31:5] */
/* @} */


/** @name dTD Token (dTDTOKEN) bit positions.
 *  @{
 */
#define XUSBPS_dTDTOKEN_XERR_MASK	0x00000008 /**< dTD Transaction Error */
#define XUSBPS_dTDTOKEN_BUFERR_MASK	0x00000020 /**< dTD Data Buffer Error */
#define XUSBPS_dTDTOKEN_HALT_MASK	0x00000040 /**< dTD Halted Flag */
#define XUSBPS_dTDTOKEN_ACTIVE_MASK	0x00000080 /**< dTD Active Bit */
#define XUSBPS_dTDTOKEN_MULTO_MASK	0x00000C00 /**< Multiplier Override Field [1:0] */
#define XUSBPS_dTDTOKEN_IOC_MASK	0x00008000 /**< Interrupt on Complete Bit */
#define XUSBPS_dTDTOKEN_LEN_MASK	0x7FFF0000 /**< Transfer Length Field */
/* @} */


/***************** Macros (Inline Functions) Definitions *********************/

/*****************************************************************************/
/**
 *
 * IMPORTANT NOTE:
 * ===============
 *
 * Many of the following macros modify Device Queue Head (dQH) data structures
 * and Device Transfer Descriptor (dTD) data structures. Those structures can
 * potentially reside in CACHED memory. Therefore, it's the callers
 * responsibility to ensure cache coherency by using provided
 *
 * 	XUsbPs_dQHInvalidateCache()
 * 	XUsbPs_dQHFlushCache()
 * 	XUsbPs_dTDInvalidateCache()
 * 	XUsbPs_dTDFlushCache()
 *
 * function calls.
 *
 ******************************************************************************/
#define XUsbPs_dTDInvalidateCache(dTDPtr) \
		Xil_DCacheInvalidateRange((unsigned int)dTDPtr, sizeof(XUsbPs_dTD))

#define XUsbPs_dTDFlushCache(dTDPtr) \
		Xil_DCacheFlushRange((unsigned int)dTDPtr, sizeof(XUsbPs_dTD))

#define XUsbPs_dQHInvalidateCache(dQHPtr) \
		Xil_DCacheInvalidateRange((unsigned int)dQHPtr, sizeof(XUsbPs_dQH))

#define XUsbPs_dQHFlushCache(dQHPtr) \
		Xil_DCacheFlushRange((unsigned int)dQHPtr, sizeof(XUsbPs_dQH))

/*****************************************************************************/
/**
 *
 * This macro sets the Transfer Length for the given Transfer Descriptor.
 *
 * @param	dTDPtr is pointer to the dTD element.
 * @param	Len is the length to be set. Range: 0..16384
 *
 * @note	C-style signature:
 *		void XUsbPs_dTDSetTransferLen(u32 dTDPtr, u32 Len)
 *
 ******************************************************************************/
#define XUsbPs_dTDSetTransferLen(dTDPtr, Len)				\
		XUsbPs_WritedTD(dTDPtr, XUSBPS_dTDTOKEN, 		\
			(XUsbPs_ReaddTD(dTDPtr, XUSBPS_dTDTOKEN) &	\
				~XUSBPS_dTDTOKEN_LEN_MASK) | ((Len) << 16))


/*****************************************************************************/
/**
 *
 * This macro gets the Next Link pointer of the given Transfer Descriptor.
 *
 * @param	dTDPtr is pointer to the dTD element.
 *
 * @return 	TransferLength field of the descriptor.
 *
 * @note	C-style signature:
 *		u32 XUsbPs_dTDGetTransferLen(u32 dTDPtr)
 *
 ******************************************************************************/
#define XUsbPs_dTDGetNLP(dTDPtr)					\
		(XUsbPs_dTD *) ((XUsbPs_ReaddTD(dTDPtr, XUSBPS_dTDNLP)\
					& XUSBPS_dTDNLP_ADDR_MASK))


/*****************************************************************************/
/**
 *
 * This macro sets the Next Link pointer of the given Transfer Descriptor.
 *
 * @param	dTDPtr is a pointer to the dTD element.
 * @param	NLP is the Next Link Pointer
 *
 * @note	C-style signature:
 *		void XUsbPs_dTDSetTransferLen(u32 dTDPtr, u32 Len)
 *
 ******************************************************************************/
#define XUsbPs_dTDSetNLP(dTDPtr, NLP)					\
		XUsbPs_WritedTD(dTDPtr, XUSBPS_dTDNLP, 		\
			(XUsbPs_ReaddTD(dTDPtr, XUSBPS_dTDNLP) &	\
				~XUSBPS_dTDNLP_ADDR_MASK) |		\
					((NLP) & XUSBPS_dTDNLP_ADDR_MASK))


/*****************************************************************************/
/**
 *
 * This macro gets the Transfer Length for the given Transfer Descriptor.
 *
 * @param	dTDPtr is a pointer to the dTD element.
 *
 * @return 	TransferLength field of the descriptor.
 *
 * @note	C-style signature:
 *		u32 XUsbPs_dTDGetTransferLen(u32 dTDPtr)
 *
 ******************************************************************************/
#define XUsbPs_dTDGetTransferLen(dTDPtr)				\
		(u32) ((XUsbPs_ReaddTD(dTDPtr, XUSBPS_dTDTOKEN) 	\
				& XUSBPS_dTDTOKEN_LEN_MASK) >> 16)


/*****************************************************************************/
/**
 *
 * This macro sets the Interrupt On Complete (IOC) bit for the given Transfer
 * Descriptor.
 *
 * @param	dTDPtr is a pointer to the dTD element.
 *
 * @note	C-style signature:
 *		void XUsbPs_dTDSetIOC(u32 dTDPtr)
 *
 ******************************************************************************/
#define XUsbPs_dTDSetIOC(dTDPtr)					\
		XUsbPs_WritedTD(dTDPtr, XUSBPS_dTDTOKEN, 		\
			XUsbPs_ReaddTD(dTDPtr, XUSBPS_dTDTOKEN) |	\
						XUSBPS_dTDTOKEN_IOC_MASK)


/*****************************************************************************/
/**
 *
 * This macro sets the Terminate bit for the given Transfer Descriptor.
 *
 * @param	dTDPtr is a pointer to the dTD element.
 *
 * @note	C-style signature:
 *		void XUsbPs_dTDSetTerminate(u32 dTDPtr)
 *
 ******************************************************************************/
#define XUsbPs_dTDSetTerminate(dTDPtr)				\
		XUsbPs_WritedTD(dTDPtr, XUSBPS_dTDNLP, 		\
			XUsbPs_ReaddTD(dTDPtr, XUSBPS_dTDNLP) |	\
						XUSBPS_dTDNLP_T_MASK)


/*****************************************************************************/
/**
 *
 * This macro clears the Terminate bit for the given Transfer Descriptor.
 *
 * @param	dTDPtr is a pointer to the dTD element.
 *
 * @note	C-style signature:
 *		void XUsbPs_dTDClrTerminate(u32 dTDPtr)
 *
 ******************************************************************************/
#define XUsbPs_dTDClrTerminate(dTDPtr)				\
		XUsbPs_WritedTD(dTDPtr, XUSBPS_dTDNLP, 		\
			XUsbPs_ReaddTD(dTDPtr, XUSBPS_dTDNLP) &	\
						~XUSBPS_dTDNLP_T_MASK)


/*****************************************************************************/
/**
 *
 * This macro checks if the given descriptor is active.
 *
 * @param	dTDPtr is a pointer to the dTD element.
 *
 * @return
 * 		- TRUE: The buffer is active.
 * 		- FALSE: The buffer is not active.
 *
 * @note	C-style signature:
 *		int XUsbPs_dTDIsActive(u32 dTDPtr)
 *
 ******************************************************************************/
#define XUsbPs_dTDIsActive(dTDPtr)					\
		((XUsbPs_ReaddTD(dTDPtr, XUSBPS_dTDTOKEN) &		\
				XUSBPS_dTDTOKEN_ACTIVE_MASK) ? TRUE : FALSE)


/*****************************************************************************/
/**
 *
 * This macro sets the Active bit for the given Transfer Descriptor.
 *
 * @param	dTDPtr is a pointer to the dTD element.
 *
 * @note	C-style signature:
 *		void XUsbPs_dTDSetActive(u32 dTDPtr)
 *
 ******************************************************************************/
#define XUsbPs_dTDSetActive(dTDPtr)					\
		XUsbPs_WritedTD(dTDPtr, XUSBPS_dTDTOKEN, 		\
			XUsbPs_ReaddTD(dTDPtr, XUSBPS_dTDTOKEN) |	\
						XUSBPS_dTDTOKEN_ACTIVE_MASK)


/*****************************************************************************/
/**
 *
 * This macro reads the content of a field in a Transfer Descriptor.
 *
 * @param	dTDPtr is a pointer to the dTD element.
 * @param	Id is the field ID inside the dTD element to read.
 *
 * @note	C-style signature:
 *		u32 XUsbPs_ReaddTD(u32 dTDPtr, u32 Id)
 *
 ******************************************************************************/
#define XUsbPs_ReaddTD(dTDPtr, Id)	(*(u32 *)((u32)(dTDPtr) + (u32)(Id)))

/*****************************************************************************/
/**
 *
 * This macro writes a value to a field in a Transfer Descriptor.
 *
 * @param	dTDPtr is pointer to the dTD element.
 * @param	Id is the field ID inside the dTD element to read.
 * @param	Val is the value to write to the field.
 *
 * @note	C-style signature:
 *		u32 XUsbPs_WritedTD(u32 dTDPtr, u32 Id, u32 Val)
 *
 ******************************************************************************/
#define XUsbPs_WritedTD(dTDPtr, Id, Val)	\
			(*(u32 *) ((u32)(dTDPtr) + (u32)(Id)) = (u32)(Val))


/******************************************************************************/
/**
 * Endpoint Device Queue Head
 *
 * Device queue heads are arranged in an array in a continuous area of memory
 * pointed to by the ENDPOINTLISTADDR pointer. The device controller will index
 * into this array based upon the endpoint number received from the USB bus.
 * All information necessary to respond to transactions for all primed
 * transfers is contained in this list so the Device Controller can readily
 * respond to incoming requests without having to traverse a linked list.
 *
 * The device Endpoint Queue Head (dQH) is where all transfers are managed. The
 * dQH is a 48-byte data structure, but must be aligned on a 64-byte boundary.
 * During priming of an endpoint, the dTD (device transfer descriptor) is
 * copied into the overlay area of the dQH, which starts at the nextTD pointer
 * DWord and continues through the end of the buffer pointers DWords. After a
 * transfer is complete, the dTD status DWord is updated in the dTD pointed to
 * by the currentTD pointer. While a packet is in progress, the overlay area of
 * the dQH is used as a staging area for the dTD so that the Device Controller
 * can access needed information with little minimal latency.
 *
 * @note
 *    Software must ensure that no interface data structure reachable by the
 *    Device Controller spans a 4K-page boundary.  The first element of the
 *    Endpoint Queue Head List must be aligned on a 4K boundary.
 */
#define XUSBPS_dQHCFG			0x00 /**< dQH Configuration */
#define XUSBPS_dQHCPTR			0x04 /**< dQH Current dTD Pointer */
#define XUSBPS_dQHdTDNLP		0x08 /**< dTD Next Link Ptr in dQH
					       overlay */
#define XUSBPS_dQHdTDTOKEN		0x0C /**< dTD Token in dQH overlay */
#define XUSBPS_dQHSUB0			0x28 /**< USB dQH Setup Buffer 0 */
#define XUSBPS_dQHSUB1			0x2C /**< USB dQH Setup Buffer 1 */


/** @name dQH Configuration (dQHCFG) bit positions.
 *  @{
 */
#define XUSBPS_dQHCFG_IOS_MASK		0x00008000
					/**< USB dQH Interrupt on Setup Bit */
#define XUSBPS_dQHCFG_MPL_MASK		0x07FF0000
					/**< USB dQH Maximum Packet Length
					 * Field [10:0] */
#define XUSBPS_dQHCFG_MPL_SHIFT    16
#define XUSBPS_dQHCFG_ZLT_MASK		0x20000000
					/**< USB dQH Zero Length Termination
					 * Select Bit */
#define XUSBPS_dQHCFG_MULT_MASK		0xC0000000
					/* USB dQH Number of Transactions Field
					 * [1:0] */
#define XUSBPS_dQHCFG_MULT_SHIFT       30
/* @} */


/*****************************************************************************/
/**
 *
 * This macro sets the Maximum Packet Length field of the give Queue Head.
 *
 * @param	dQHPtr is a pointer to the dQH element.
 * @param	Len is the length to be set.
 *
 * @note	C-style signature:
 *		void XUsbPs_dQHSetMaxPacketLen(u32 dQHPtr, u32 Len)
 *
 ******************************************************************************/
#define XUsbPs_dQHSetMaxPacketLen(dQHPtr, Len)			\
		XUsbPs_WritedQH(dQHPtr, XUSBPS_dQHCFG, 		\
			(XUsbPs_ReaddQH(dQHPtr, XUSBPS_dQHCFG) &	\
				~XUSBPS_dQHCFG_MPL_MASK) | ((Len) << 16))

/*****************************************************************************/
/**
 *
 * This macro sets the Interrupt On Setup (IOS) bit for an endpoint.
 *
 * @param	dQHPtr is a pointer to the dQH element.
 *
 * @note	C-style signature:
 *		void XUsbPs_dQHSetIOS(u32 dQHPtr)
 *
 ******************************************************************************/
#define XUsbPs_dQHSetIOS(dQHPtr)					\
		XUsbPs_WritedQH(dQHPtr, XUSBPS_dQHCFG, 		\
			XUsbPs_ReaddQH(dQHPtr, XUSBPS_dQHCFG) |	\
						XUSBPS_dQHCFG_IOS_MASK)

/*****************************************************************************/
/**
 *
 * This macro clears the Interrupt On Setup (IOS) bit for an endpoint.
 *
 * @param	dQHPtr is a pointer to the dQH element.
 *
 * @note	C-style signature:
 *		void XUsbPs_dQHClrIOS(u32 dQHPtr)
 *
 ******************************************************************************/
#define XUsbPs_dQHClrIOS(dQHPtr)					\
		XUsbPs_WritedQH(dQHPtr, XUSBPS_dQHCFG, 		\
			XUsbPs_ReaddQH(dQHPtr, XUSBPS_dQHCFG) &	\
						~XUSBPS_dQHCFG_IOS_MASK)

/*****************************************************************************/
/**
 *
 * This macro enables Zero Length Termination for the endpoint.
 *
 * @param	dQHPtr is a pointer to the dQH element.
 *
 * @note	C-style signature:
 *		void XUsbPs_dQHEnableZLT(u32 dQHPtr)
 *
 *
 ******************************************************************************/
#define XUsbPs_dQHEnableZLT(dQHPtr)					\
		XUsbPs_WritedQH(dQHPtr, XUSBPS_dQHCFG, 		\
			XUsbPs_ReaddQH(dQHPtr, XUSBPS_dQHCFG) &	\
						~XUSBPS_dQHCFG_ZLT_MASK)


/*****************************************************************************/
/**
 *
 * This macro disables Zero Length Termination for the endpoint.
 *
 * @param	dQHPtr is a pointer to the dQH element.
 *
 * @note	C-style signature:
 *		void XUsbPs_dQHDisableZLT(u32 dQHPtr)
 *
 *
 ******************************************************************************/
#define XUsbPs_dQHDisableZLT(dQHPtr)					\
		XUsbPs_WritedQH(dQHPtr, XUSBPS_dQHCFG, 		\
			XUsbPs_ReaddQH(dQHPtr, XUSBPS_dQHCFG) |	\
						XUSBPS_dQHCFG_ZLT_MASK)

/*****************************************************************************/
/**
 *
 * This macro reads the content of a field in a Queue Head.
 *
 * @param	dQHPtr is a pointer to the dQH element.
 * @param	Id is the Field ID inside the dQH element to read.
 *
 * @note	C-style signature:
 *		u32 XUsbPs_ReaddQH(u32 dQHPtr, u32 Id)
 *
 ******************************************************************************/
#define XUsbPs_ReaddQH(dQHPtr, Id)	(*(u32 *)((u32)(dQHPtr) + (u32) (Id)))

/*****************************************************************************/
/**
 *
 * This macro writes a value to a field in a Queue Head.
 *
 * @param	dQHPtr is a pointer to the dQH element.
 * @param	Id is the Field ID inside the dQH element to read.
 * @param	Val is the Value to write to the field.
 *
 * @note	C-style signature:
 *		u32 XUsbPs_WritedQH(u32 dQHPtr, u32 Id, u32 Val)
 *
 ******************************************************************************/
#define XUsbPs_WritedQH(dQHPtr, Id, Val)	\
			(*(u32 *) ((u32)(dQHPtr) + (u32)(Id)) = (u32)(Val))



#ifdef __cplusplus
}
#endif

#endif /* XUSBPS_ENDPOINT_H */
/** @} */
