/**
  ******************************************************************************
  * @file    rtl8710b_inic.h
  * @author
  * @version V1.0.0
  * @date    2016-05-17
  * @brief   This file contains all the functions prototypes for the USB & SDIO INIC firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * This module is a confidential and proprietary property of RealTek and
  * possession or use of this module requires written permission of RealTek.
  *
  * Copyright(c) 2015, Realtek Semiconductor Corporation. All rights reserved.
  ****************************************************************************** 
  */

#ifndef _RTL8710B_INIC_H_
#define _RTL8710B_INIC_H_

/** @addtogroup AmebaZ_Periph_Driver
  * @{
  */

/** @defgroup INIC 
  * @brief INIC driver modules
  * @{
  */

/* Exported types ------------------------------------------------------------*/

/** @defgroup INIC_Exported_Types INIC Exported Types
  * @{
  */

/** 
  * @brief  INIC TX DESC structure definition
  * @note: Ameba1 is 6 dword, but AmebaZ is 4 dwords
  */
typedef struct {
	/* u4Byte 0 */
	u32	txpktsize:16;       // bit[15:0]
	u32	offset:8;    		// bit[23:16], store the sizeof(INIC_TX_DESC)
	u32	bus_agg_num:8;		// bit[31:24], the bus aggregation number

	/* u4Byte 1 */
	u32 type:8;             // bit[7:0], the packet type
	u32 data:8;             // bit[8:15], the value to be written to the memory
	u32 reply:1;            // bit[16], request to send a reply message
	u32 rsvd0:15;

	/* u4Byte 2 */
	u32	start_addr;        // 1) memory write/read start address 2) RAM start_function address

	/* u4Byte 3 */
	u32 data_len:16;      // bit[15:0], the length to write/read
	u32 rsvd2:16;           // bit[31:16]
} INIC_TX_DESC, *PINIC_TX_DESC;

/** 
  * @brief  INIC RX DESC structure definition
  * @note: Ameba1 is 6 dword, but AmebaZ is 4 dwords
  */
typedef struct {
	/* u4Byte 0 */
	u32	pkt_len:16;		// bit[15:0], the packet size
	u32	offset:8;			// bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc    	
	u32	rsvd0:6;			// bit[29:24]
	u32	icv:1; 			//icv error
	u32	crc:1; 			// crc error

	/* u4Byte 1 */
	/************************************************/
	/*****************receive packet type*********************/
	/*	0x82:	802.3 packet						      */
	/*	0x80:	802.11 packet						      */
	/*	0x10:	C2H command					      */
	/*	0x50:	Memory Read						      */
	/*	0x52:	Memory Write						      */
	/*	0x54:	Memory Set						      */
	/*	0x60:	Indicate the firmware is started		      */
	u32	type:8;			// bit[7:0], the type of this packet
	u32	rsvd1:24;		 // bit[31:8]

	/* u4Byte 2 */
	u32	start_addr;

	/* u4Byte 3 */
	u32 data_len:16;		// bit[15:0], the type of this packet
	u32 result:8;			// bit[23:16], the result of memory write command
	u32 rsvd2:8;			// bit[31:24]
} INIC_RX_DESC, *PINIC_RX_DESC;
/**
  * @}
  */

/* Exported constants --------------------------------------------------------*/

/** @defgroup INIC_Exported_Constants INIC Exported Constants
  * @{
  */ 

/** @defgroup INIC_packet_type_definitions 
  * @{
  */
#define TX_PACKET_802_3		(0x83)
#define TX_PACKET_802_11		(0x81)
#define TX_H2C_CMD				(0x11)
#define TX_MEM_READ			(0x51)
#define TX_MEM_WRITE			(0x53)
#define TX_MEM_SET				(0x55)
#define TX_FM_FREETOGO			(0x61)
#define TX_PACKET_USER			(0x41)

#define RX_PACKET_802_3		(0x82)
#define RX_PACKET_802_11		(0x80)
#define RX_C2H_CMD				(0x10)
#define RX_MEM_READ			(0x50)
#define RX_MEM_WRITE			(0x52)
#define RX_MEM_SET				(0x54)
#define RX_FM_FREETOGO			(0x60)
#define RX_PACKET_USER			(0x40)
/**
  * @}
  */

/** @defgroup INIC_DESC_Size_definitions 
  * @{
  */
#define SIZE_RX_DESC	(sizeof(INIC_RX_DESC))
#define SIZE_TX_DESC	(sizeof(INIC_TX_DESC))
/**
  * @}
  */

 /**
  * @}
  */
  

/** @defgroup INIC_Exported_Functions INIC Exported Functions
  * @{
  */
//_LONG_CALL_
/**
  * @}
  */
  
/**
  * @}
  */

/**
  * @}
  */ 

#endif //_RTL8710B_INIC_H_
/******************* (C) COPYRIGHT 2016 Realtek Semiconductor *****END OF FILE****/
