/*
 * 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.
 */

#ifndef _USB_DEV_COMMON_H
#define _USB_DEV_COMMON_H

#include "stdint.h"
#include "tsp.h"

#define TSP_SRAM2_START_ADDR (MEMMAP_TSP_REG_BASE + RA_TspReg_FigoItcm) // 0xf7a50000
#define SOC_SRAM2_TOTAL_USED_SIZE (8*1024 + 0x1000)
#define USB_CONSOLE_BUF_BASE (TSP_SRAM2_START_ADDR + SOC_SRAM2_TOTAL_USED_SIZE)
#define USB_SOC_OUTPUT_STRING_BUF (USB_CONSOLE_BUF_BASE + 32)
#define USB_SOC_INPUT_STRING_BUF  (USB_SOC_OUTPUT_STRING_BUF + USB_SOC_STRING_BUF_SIZE + 32)
#define USB_SOC_STRING_BUF_SIZE (8*1024 - 32)
#define USB_INTR_BUF_SIZE 0x200
#define MAX_ONETIME_INPUT_LEN USB_INTR_BUF_SIZE
#define MAX_ONETIME_OUTPUT_LEN USB_INTR_BUF_SIZE
#define USB_SOC_INPUT_STRING_BUF_ROLL_POINT \
        (USB_SOC_INPUT_STRING_BUF + USB_SOC_STRING_BUF_SIZE - MAX_ONETIME_INPUT_LEN)
#define USB_SOC_OUTPUT_STRING_BUF_ROLL_POINT \
        (USB_SOC_OUTPUT_STRING_BUF + USB_SOC_STRING_BUF_SIZE - MAX_ONETIME_OUTPUT_LEN)
#define USB_SOC_OUTPUT_WRITE_PTR (USB_SOC_OUTPUT_STRING_BUF - 32)//write by ARM, read only by BCM
#define USB_SOC_OUTPUT_EOS_PTR (USB_SOC_OUTPUT_STRING_BUF - 28)//write by ARM, read only by BCM
#define USB_SOC_OUTPUT_ROLLBACK_FLAG (USB_SOC_OUTPUT_STRING_BUF - 24)
#define USB_SOC_INPUT_WRITE_PTR  (USB_SOC_INPUT_STRING_BUF - 32)
#define USB_SOC_INPUT_EOS_PTR  (USB_SOC_INPUT_STRING_BUF - 28)

#endif//_USB_DEV_COMMON_H
