[Feature][Modem]Update MTK MODEM V1.6 baseline version: MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6
MTK modem version: MT2735_IVT_MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6.tar.gz
RF modem version: NA
Change-Id: I45a4c2752fa9d1a618beacd5d40737fb39ab64fb
diff --git a/mcu/interface/driver/peripheral/hif_hal.h b/mcu/interface/driver/peripheral/hif_hal.h
new file mode 100644
index 0000000..928ecfc
--- /dev/null
+++ b/mcu/interface/driver/peripheral/hif_hal.h
@@ -0,0 +1,393 @@
+#ifndef __HIF_HAL_H__
+/* !ignore me! */
+#define __HIF_HAL_H__
+
+#include "kal_general_types.h"
+#include "drv_features.h"
+
+#ifdef DRV_HIF_SUPPORT
+
+/* <GROUP CallBackFunctions>
+ FUNCTION
+ HIF_CALLBACK
+ DESCRIPTION
+ HIF callback function
+ HIF callback function is called when HIF interrupt has arrived. It indicates HIF has finished the last data transfer.
+ HIF callback function is called in the context of HISR.
+*/
+typedef void (*HIF_CALLBACK)(void);
+
+/* HIF Handle.
+ HIF handle can be retrieved from hif_open(). It is used for most HIF APIs.
+*/
+typedef kal_uint32 HIF_HANDLE;
+
+/* HIF transfer type.
+ Defines the transfer type of HIF interface.
+*/
+typedef enum
+{
+ /* HIF transfer with A0=1. Use CPU to move data. */
+ HIF_TYPE_A0H_CPU,
+ /* HIF transfer with A0=1. Use DMA to transfer data. */
+ HIF_TYPE_A0H_DMA,
+ /* HIF transfer with A0=0. Use CPU to move data. */
+ HIF_TYPE_A0L_CPU,
+ /* HIF transfer with A0=0. Use DMA to transfer data. */
+ HIF_TYPE_A0L_DMA,
+} HIF_TYPE;
+
+/* HIF result enum.
+*/
+typedef enum
+{
+ /* Indicates no error occurs in the last operation. */
+ HIF_RESULT_OK,
+ /* Indicates some errors have occured in the last operation. */
+ HIF_RESULT_ERROR,
+ /* Indicates the function is not supported on the current platform. */
+ HIF_RESULT_NOT_SUPPORTED,
+ /* Indicates the HIF handle is not valid. */
+ HIF_RESULT_INVALID_HANDLE,
+ /* Indicates the input argument is not valid. */
+ HIF_RESULT_INVALID_ARGUMENT,
+ /* Indicates that the HIF power was not turned on when making HIF transactions. */
+ HIF_RESULT_HIF_NOT_POWER_ON,
+ /* Indicates that the HIF power was not turned on when making HIF transactions. */
+ HIF_RESULT_DMA_IS_BUSY
+} HIF_RESULT;
+
+/*************************************************************************************************************************************
+ * HIF IOCTL code definition.
+ * For detail description and usage of HIF control codes, please refer to <xref target="HIF HAL IOCTL Code" text="HIF IOCTL Code" />.
+ *************************************************************************************************************************************/
+typedef enum
+{
+ /****************************************************************************************************************
+ * Get the current HIF configuration parameters.
+ * For detail description and usage of this control code, please refer to <xref target="HIF_IOCTL_GET_PARAM" />.
+ ****************************************************************************************************************/
+ HIF_IOCTL_GET_PARAM,
+ /****************************************************************************************************************
+ * Set ultra high control for HIF.
+ * For detail description and usage of this control code, please refer to <xref target="HIF_IOCTL_ULTRA_HIGH_CTRL" />.
+ ****************************************************************************************************************/
+ HIF_IOCTL_ULTRA_HIGH_CTRL,
+ /****************************************************************************************************************
+ * Query HIF timing support.
+ * For detail description and usage of this control code, please refer to <xref target="HIF_IOCTL_QUERY_TIMING_SUPPORT" />.
+ ****************************************************************************************************************/
+ HIF_IOCTL_QUERY_TIMING_SUPPORT,
+ /****************************************************************************************************************
+ * Query HIF capabilities.
+ * For detail description and usage of this control code, please refer to <xref target="HIF_IOCTL_QUERY_CAPABILITY" />.
+ ****************************************************************************************************************/
+ HIF_IOCTL_QUERY_CAPABILITY,
+ /****************************************************************************************************************
+ * Query HIF clock support.
+ * For detail description and usage of this control code, please refer to <xref target="HIF_IOCTL_QUERY_CLOCK_SUPPORT" />.
+ ****************************************************************************************************************/
+ HIF_IOCTL_QUERY_CLOCK_SUPPORT,
+ /****************************************************************************************************************
+ * Query HIF power state.
+ * For detail description and usage of this control code, please refer to <xref target="HIF_IOCTL_QUERY_POWER_STATE" />.
+ ****************************************************************************************************************/
+ HIF_IOCTL_QUERY_POWER_STATE,
+ /****************************************************************************************************************
+ * TD realtime support.
+ * For detail description and usage of this control code, please refer to <xref target="HIF_IOCTL_REALTIME_REQUEST" />.
+ ****************************************************************************************************************/
+ HIF_IOCTL_REALTIME_CALLBACK
+} HIF_IOCTL_CODE;
+
+/**********************************
+ * HIF configuration parameters.
+ *
+ * Remarks
+ * <img name="hif_write_timing" />
+ *
+ * <img name="hif_read_timing" />
+ **********************************/
+typedef struct
+{
+ /* Chip Select (LPCE#) to Write Strobe (LWR#) setup time. */
+ kal_uint32 hif_time_c2ws;
+ /* Chip Select (LPCE#) to Write Strobe (LWR#) hold time. */
+ kal_uint32 hif_time_c2wh;
+ /* Write wait state time. */
+ kal_uint32 hif_time_wst;
+ /* Chip Select (LPCE#) to Read Strobe (LRD#) setup time. */
+ kal_uint32 hif_time_c2rs;
+ /* Chip Select (LPCE#) to Read Strobe (LRD#) hold time. */
+ kal_uint32 hif_time_c2rh;
+ /* Read latency time. */
+ kal_uint32 hif_time_rlt;
+ /* Chip Select high width. */
+ kal_uint32 hif_time_chw;
+ /* HIF base clock. Unit in MHz. */
+ kal_uint32 hif_base_clk;
+ /* HIF bus width. */
+ kal_uint32 hif_bus_width;
+} HIF_CONFIG_T;
+
+/* This structure is used as the parameter of HIF_IOCTL_QUERY_TIMING_SUPPORT.
+*/
+typedef struct
+{
+ /* Indicates whether C2WS is supported. */
+ kal_bool c2ws_support;
+ /* Indicates whether C2WH is supported. */
+ kal_bool c2wh_support;
+ /* Indicates whether WST is supported. */
+ kal_bool wst_support;
+ /* Indicates whether C2RS is supported. */
+ kal_bool c2rs_support;
+ /* Indicates whether C2RH is supported. */
+ kal_bool c2rh_support;
+ /* Indicates whether CHW is supported. */
+ kal_bool chw_support;
+ /* Indicates whether RLT is supported. */
+ kal_bool rlt_support;
+} HIF_QUERY_TIMING_SUPPORT_T;
+
+/* This structure is used as the parameter of HIF_IOCTL_QUERY_CLOCK_SUPPORT.
+*/
+typedef struct
+{
+ /* This array contains the supported clock frequencies. Unit in MHz. Value 0 indicates invalid clock frequency.*/
+ kal_uint32 clock[4];
+} HIF_QUERY_CLOCK_SUPPORT_T;
+
+/* This structure is used as the parameter of HIF_IOCTL_QUERY_CAPABILITY.
+*/
+typedef struct
+{
+ /* Minimum value for HIF transfer length. */
+ kal_uint32 transfer_length_min;
+ /* Maximum value for HIF transfer length. */
+ kal_uint32 transfer_length_max;
+} HIF_CAPABILITY_T;
+
+/* This structure is used as the parameter of HIF_IOCTL_ULTRA_HIGH_CTRL.
+*/
+typedef struct
+{
+ /* Enable ultra high signal during HIF transaction. */
+ kal_bool ultra_high_en;
+} HIF_ULTRA_HIGH_CTRL_T;
+
+
+/* This structure is used as the parameter of HIF_IOCTL_QUERY_POWER_STATE.
+*/
+typedef struct
+{
+ /* HIF power state. */
+ kal_bool hif_power_on;
+} HIF_POWER_STATE_T;
+
+/* This structure is used as the parameter of HIF_IOCTL_REALTIME_CALLBACK.
+*/
+typedef struct
+{
+ /* Enable realtime request,Call HIF callback function(hif_hisr) at LISR level. */
+ kal_bool realtime_callback_en;
+} HIF_REALTIME_CALLBACK_T;
+
+/**************************************************************************************************************************************
+ * Function
+ * hif_init
+ * Description
+ * Initialize HIF hardware and structures.
+ * Returns
+ * None.
+ * Remarks
+ * <color Red>This function is called in system initialization. HIF user does not need to call this function.</color>
+ **************************************************************************************************************************************/
+void hif_init(void);
+
+/**************************************************************************************************************************************
+ * Function
+ * hif_open
+ * Description
+ * Open and get HIF handle.
+ * Parameters
+ * port : [IN] HIF port. Zero based port index.
+ * Returns
+ * Return a HIF handle.
+ * Example
+ * <code>
+ * HIF_HANDLE handle;
+ * handle = hif_open(0);
+ * </code>
+ **************************************************************************************************************************************/
+HIF_HANDLE hif_open(kal_uint32 port);
+
+/********************************************************
+ * Function
+ * hif_close
+ * Description
+ * Release a HIF handle.
+ * Parameters
+ * handle : [IN] HIF handle. Retrieved from hif_open().
+ * Returns
+ * Return a HIF result code.
+ * Example
+ * <code>
+ * HIF_HANDLE handle;
+ * handle = hif_open(0);
+ * // HIF operations.
+ * hif_close(handle);
+ * </code>
+ ********************************************************/
+HIF_RESULT hif_close(HIF_HANDLE handle);
+
+/***********************************************************************
+ * Function
+ * hif_config
+ * Description
+ * Configure HIF timing parameters.
+ * HIF parameters must be set before any HIF transmissions.
+ * Parameters
+ * handle : [IN] HIF handle. Retrieved from hif_open().
+ * pConfigParam : [IN] HIF parameters. Refer to HIF_CONFIG_T for details.
+ * Returns
+ * Return a HIF result code.
+ * Example
+ * <code>
+ * HIF_HANDLE handle;
+ * HIF_CONFIG_T hif_config_param;
+ * handle = hif_open(0);
+ * hif_config_param.hif_time_c2ws = 3;
+ * hif_config_param.hif_time_c2wh = 2;
+ * hif_config_param.hif_time_wst = 15;
+ * hif_config_param.hif_time_c2rs = 4;
+ * hif_config_param.hif_time_c2rh = 0;
+ * hif_config_param.hif_time_rlt = 0x1f;
+ * hif_config_param.hif_base_clk = 122;
+ * hif_config_param.hif_bus_width = 16;
+ * hif_config(handle, &hif_config_param);
+ * // ...
+ * hif_close(handle);
+ * </code>
+ ***********************************************************************/
+HIF_RESULT hif_config(HIF_HANDLE handle, HIF_CONFIG_T* pConfigParam);
+
+/*******************************************************************************
+ * Function
+ * hif_write
+ * Description
+ * Fire a HIF transmission for output.
+ * Parameters
+ * handle : [IN] HIF handle. Retrieved from hif_open().
+ * type : [IN] HIF transfer type. Refer to HIF_TYPE for details.
+ * addr : [IN] Data buffer address for output.
+ * size : [IN] Data length for HIF transfer. Unit in bytes.
+ * fCB : [IN] Specifies the callback function when the transmission completes.
+ * If fCB is specified, HIF driver uses interrupt mode. This API is asynchronous.
+ * If fCB is NULL, HIF drvier uses polling mode. This API becomes synchronous.
+ * Returns
+ * Return a HIF result code.
+ * Remarks
+ * If type is set to HIF_TYPE_A0H_CPU or HIF_TYPE_A0L_CPU, fCB is ignored. HIF driver works synchronous in CPU mode.
+ * Example
+ * <code>
+ * HIF_HANDLE handle;
+ * handle = hif_open(0);
+ * // ...
+ *
+ * // Synchronous call.
+ * hif_write(handle, HIF_TYPE_A0H_CPU, hif_test_buffer, 1024, NULL);
+ *
+ * // Asynchronous call.
+ * hif_write(handle, HIF_TYPE_A0H_DMA, hif_test_buffer, 1024, hif_test_cb);
+ * // Wait for a event which is set in callback function.
+ * // ...
+ * hif_close(handle);
+ * </code>
+ *******************************************************************************/
+HIF_RESULT hif_write(HIF_HANDLE handle, HIF_TYPE type, kal_uint32 addr, kal_uint32 size, HIF_CALLBACK fCB);
+
+/*******************************************************************************
+ * Function
+ * hif_read
+ * Description
+ * Fire a HIF transmission for input.
+ * Parameters
+ * handle : [IN] HIF handle. Retrieved from hif_open().
+ * type : [IN] HIF transfer type. Refer to HIF_TYPE for details.
+ * addr : [IN] Data buffer address for input.
+ * size : [IN] Data length for HIF transfer. Unit in bytes.
+ * fCB : [IN] Specifies the callback function when the transmission completes.
+ * If fCB is specified, HIF driver uses interrupt mode. This API is asynchronous.
+ * If fCB is NULL, HIF drvier uses polling mode. This API becomes synchronous.
+ * Returns
+ * Return a HIF result code.
+ * Remarks
+ * If type is set to HIF_TYPE_A0H_CPU or HIF_TYPE_A0L_CPU, fCB is ignored. HIF driver works synchronous in CPU mode.
+ * Example
+ * <code>
+ * HIF_HANDLE handle;
+ * handle = hif_open(0);
+ * // ...
+ *
+ * // Synchronous call.
+ * hif_read(handle, HIF_TYPE_A0H_CPU, hif_test_buffer, 1024, NULL);
+ *
+ * // Asynchronous call.
+ * hif_read(handle, HIF_TYPE_A0H_DMA, hif_test_buffer, 1024, hif_test_cb);
+ * // Wait for a event which is set in callback function.
+ * // ...
+ * hif_close(handle);
+ * </code>
+ *******************************************************************************/
+HIF_RESULT hif_read(HIF_HANDLE handle, HIF_TYPE type, kal_uint32 addr, kal_uint32 size, HIF_CALLBACK fCB);
+
+/*****************************************************************************
+ * Function
+ * hif_power_ctrl
+ * Description
+ * Enable or disable HIF hardware power.
+ * Parameters
+ * handle : [IN] HIF handle. Retrieved from hif_open().
+ * bPowerOn : [IN] Set KAL_TRUE to power on HIF hardware. Set KAL_FALSE to power off HIF hardware.
+ * Returns
+ * Return a HIF result code.
+ * Example
+ * <code>
+ * HIF_HANDLE handle;
+ * handle = hif_open(0);
+ * hif_power_ctrl(handle, KAL_TRUE);
+ * // HIF operations.
+ * hif_power_ctrl(handle, KAL_FALSE);
+ * hif_close(handle);
+ * </code>
+ *****************************************************************************/
+HIF_RESULT hif_power_ctrl(HIF_HANDLE handle, kal_bool bPowerOn);
+
+/*****************************************************************************
+ * Function
+ * hif_ioctl
+ * Description
+ * IO Control for HIF driver.
+ * A series of HIF control code is defined for extension usage. Refer to HIF_IOCTL_CODE.
+ * Parameters
+ * handle : [IN] HIF handle. Retrieved from hif_open().
+ * code : [IN] HIF control code. Refer to HIF_IOCTL_CODE.
+ * pParam : [IN/OUT] Parameter for HIF IO Control. The definition depends on the specified control code. Refer to HIF_IOCTL_CODE.
+ * Returns
+ * Return a HIF result code.
+ * The return value is HIF_RESULT_NOT_SUPPORTED if the current platform does not support the sepcific control code.
+ * Example
+ * <code>
+ * HIF_HANDLE handle;
+ * HIF_CONFIG_T config;
+ * handle = hif_open(0);
+ * hif_ioctl(handle, HIF_IOCTL_GET_PARAM, &config);
+ * hif_close(handle);
+ * </code>
+ *****************************************************************************/
+HIF_RESULT hif_ioctl(HIF_HANDLE handle, HIF_IOCTL_CODE code, void* pParam);
+
+#endif
+
+#endif