/*
 * Copyright (C) 2018 Synaptics Incorporated. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND
 * SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES,
 * INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY
 * INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR
 * CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE
 * OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND
 * BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF
 * COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT
 * DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY
 * TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS.
 */
//
// MEMMAP for NIUE USB for BUFFER used by USB stack
//


#ifdef USB_USE_SRAM
#include "mem_config.h"
#define USB_MASS_BULK_DATA_SIZE	 (16*1024)
#define USB_MASS_M2M_XFER_SIZE	(8*1024)
#define USB_MASS_M2M_BLK_COUNT	8
#else
#define BUFFER_USB2_BASE		0x1A000000
#define USB_MASS_BULK_DATA_SIZE	 (2*1024*1024)
#define USB_MASS_M2M_XFER_SIZE	(1024*1024)
#if PLATFORM==VELOCE
#define USB_MASS_M2M_BLK_COUNT	16
#else
#define USB_MASS_M2M_BLK_COUNT	256
#endif
#endif


#define USB_MEMMAP_BASE			BUFFER_USB2_BASE
#define USB_MASS_BULK_DATA_BASE	(USB_MEMMAP_BASE)
#define USB_MASS_M2M_READ_BASE 	USB_MASS_BULK_DATA_BASE
#define USB_MASS_M2M_WRITE_BASE (USB_MASS_M2M_READ_BASE + USB_MASS_M2M_XFER_SIZE)
#define USB_SCATGAT_DESC_QH	(USB_MASS_M2M_WRITE_BASE + USB_MASS_M2M_XFER_SIZE)		//Must be 512 bytes aligned
#define USB_SCATGAT_DESC_MAX_COUNT	64
#define USB_SCATGAT_DESC_SIZE	(USB_SCATGAT_DESC_MAX_COUNT*8)
#define USB_CTRL_BUFF_BASE		(USB_SCATGAT_DESC_QH + USB_SCATGAT_DESC_SIZE)
#define USB_CTRL_BUFF_SIZE		64
#define USB_MASS_BULK_CDB_BASE	(USB_CTRL_BUFF_BASE + USB_CTRL_BUFF_SIZE)
#define USB_MASS_BULK_CDB_SIZE	64
#define USB_MASS_BULK_CSW_BASE	(USB_MASS_BULK_CDB_BASE + USB_MASS_BULK_CDB_SIZE)
#define USB_MASS_BULK_CSW_SIZE	16
#define USB_MASS_SENSE_DATA_BASE (USB_MASS_BULK_CSW_BASE + USB_MASS_BULK_CSW_SIZE)
#define USB_MASS_SENSE_DATA_SIZE	16
#define USB_SETUP_PACKET_BUFF	(USB_MASS_SENSE_DATA_BASE+USB_MASS_SENSE_DATA_SIZE)
#define USB_SETUP_PACKET_SIZE	8
