//<MStar Software>
//******************************************************************************
// MStar Software
// Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
// All software, firmware and related documentation herein ("MStar Software") are
// intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
// law, including, but not limited to, copyright law and international treaties.
// Any use, modification, reproduction, retransmission, or republication of all
// or part of MStar Software is expressly prohibited, unless prior written
// permission has been granted by MStar.
//
// By accessing, browsing and/or using MStar Software, you acknowledge that you
// have read, understood, and agree, to be bound by below terms ("Terms") and to
// comply with all applicable laws and regulations:
//
// 1. MStar shall retain any and all right, ownership and interest to MStar
//    Software and any modification/derivatives thereof.
//    No right, ownership, or interest to MStar Software and any
//    modification/derivatives thereof is transferred to you under Terms.
//
// 2. You understand that MStar Software might include, incorporate or be
//    supplied together with third party`s software and the use of MStar
//    Software may require additional licenses from third parties.
//    Therefore, you hereby agree it is your sole responsibility to separately
//    obtain any and all third party right and license necessary for your use of
//    such third party`s software.
//
// 3. MStar Software and any modification/derivatives thereof shall be deemed as
//    MStar`s confidential information and you agree to keep MStar`s
//    confidential information in strictest confidence and not disclose to any
//    third party.
//
// 4. MStar Software is provided on an "AS IS" basis without warranties of any
//    kind. Any warranties are hereby expressly disclaimed by MStar, including
//    without limitation, any warranties of merchantability, non-infringement of
//    intellectual property rights, fitness for a particular purpose, error free
//    and in conformity with any international standard.  You agree to waive any
//    claim against MStar for any loss, damage, cost or expense that you may
//    incur related to your use of MStar Software.
//    In no event shall MStar be liable for any direct, indirect, incidental or
//    consequential damages, including without limitation, lost of profit or
//    revenues, lost or damage of data, and unauthorized system use.
//    You agree that this Section 4 shall still apply without being affected
//    even if MStar Software has been modified by MStar in accordance with your
//    request or instruction for your use, except otherwise agreed by both
//    parties in writing.
//
// 5. If requested, MStar may from time to time provide technical supports or
//    services in relation with MStar Software to you for your use of
//    MStar Software in conjunction with your or your customer`s product
//    ("Services").
//    You understand and agree that, except otherwise agreed by both parties in
//    writing, Services are provided on an "AS IS" basis and the warranty
//    disclaimer set forth in Section 4 above shall apply.
//
// 6. Nothing contained herein shall be construed as by implication, estoppels
//    or otherwise:
//    (a) conferring any license or right to use MStar name, trademark, service
//        mark, symbol or any other identification;
//    (b) obligating MStar or any of its affiliates to furnish any person,
//        including without limitation, you and your customers, any assistance
//        of any kind whatsoever, or any information; or
//    (c) conferring any license or right under any intellectual property right.
//
// 7. These terms shall be governed by and construed in accordance with the laws
//    of Taiwan, R.O.C., excluding its conflict of law rules.
//    Any and all dispute arising out hereof or related hereto shall be finally
//    settled by arbitration referred to the Chinese Arbitration Association,
//    Taipei in accordance with the ROC Arbitration Law and the Arbitration
//    Rules of the Association by three (3) arbitrators appointed in accordance
//    with the said Rules.
//    The place of arbitration shall be in Taipei, Taiwan and the language shall
//    be English.
//    The arbitration award shall be final and binding to both parties.
//
//******************************************************************************
//<MStar Software>

#ifndef __DRV_EMMC_H__
#define __DRV_EMMC_H__

#ifndef U32
#define U32  unsigned long
#endif
#ifndef U16
#define U16  unsigned short
#endif
#ifndef U8
#define U8   unsigned char
#endif
#ifndef S32
#define S32  signed long
#endif
#ifndef S16
#define S16  signed short
#endif
#ifndef S8
#define S8   signed char
#endif

/*=============================================================*/
// Include files
/*=============================================================*/
#include "eMMC_config.h"

/*=============================================================*/
// Extern definition
/*=============================================================*/

/*=============================================================*/
// Macro definition
/*=============================================================*/

/*=============================================================*/
// Data type definition
/*=============================================================*/

/*=============================================================*/
// Variable definition
/*=============================================================*/

/*=============================================================*/
// Global function definition
/*=============================================================*/
U32  emmc_init(void);
U32  emmc_init_device(void);
U32  emmc_init_device_ex(void);
U32 emmc_load_images(U32 *pu32_addr, U32 u32_byte_cnt, U32 u32_hash_stage);
//--------------------------------------------
// CAUTION: u32_data_byte_cnt has to be 512B x n
//--------------------------------------------
U32  emmc_write_data_ex(U8 *pu8_data_buf, U32 u32_data_byte_cnt, U32 u32_blk_addr);
U32  emmc_read_data_ex(U8 *pu8_data_buf, U32 u32_data_byte_cnt, U32 u32_blk_addr);
// skip driver-reserved area
U32  emmc_write_data(U8 *pu8_data_buf, U32 u32_data_byte_cnt, U32 u32_blk_addr);
U32  emmc_read_data(U8 *pu8_data_buf, U32 u32_data_byte_cnt, U32 u32_blk_addr);
U32  emmc_get_capacity(U32 *pu32_total_sector_cnt); // 1 sector = 512B
U32  emmc_erase_block(U32 u32_emmc_blk_addr_start, U32 u32_emmc_blk_addr_end);
U32  emmc_get_cid(U8 *pu8_cid); // pu8_CID needs to hold 16 bytes
//--------------------------------------------


/*=============================================================*/
// internal function definition
/*=============================================================*/
U32  emmc_read_boot_part(U8 *pu8_data_buf, U32 u32_data_byte_cnt, U32 u32_blk_addr, U8 u8_part_no);
U32  emmc_check_if_ready(void);
void emmc_reset_ready_flag(void);
void emmc_dump_driver_status(void);
void emmc_dump_speed_status(void);
U32  emmc_fcie_build_ddr_timing_table(void);
U32  emmc_fcie_build_hS200_timing_table(void);
void emmc_print_gp_partition(void);

#endif //__DRV_EMMC_H__

