[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/interface/driver/devdrv/pcmon/drv_pcmon.h b/mcu/interface/driver/devdrv/pcmon/drv_pcmon.h
new file mode 100644
index 0000000..f4fcf05
--- /dev/null
+++ b/mcu/interface/driver/devdrv/pcmon/drv_pcmon.h
@@ -0,0 +1,264 @@
+#ifndef __DRV_PCMON_H__
+#define __DRV_PCMON_H__
+
+/*****************************************************************************
+ * Includes
+ *****************************************************************************/
+
+#include "drv_pcmon_common.h"
+#include "drv_pcmon_v2.h"
+
+/*****************************************************************************
+ * Type Definition
+ *****************************************************************************/
+
+typedef PDAMON_CFG_V2_T             PDAMON_CFG_T;
+typedef PDAMON_PC_PAIR_RAW_V2_T     PDAMON_PC_PAIR_RAW_T;
+typedef PDAMON_RAW_PER_CORE_V2_T    PDAMON_RAW_PER_CORE_T;
+typedef PDAMON_STOP_SOURCE_V2       PDAMON_STOP_SOURCE;
+typedef PDAMON_EVENT_MASK_V2        PDAMON_EVENT_MASK;
+typedef PDAMON_EX_RAW_V2_T          PDAMON_EX_RAW_T;
+typedef PDAMON_NEX_RAW_V2_T         PDAMON_NEX_RAW_T;
+
+#define PDAMON_IA_PIPED_CNT         PDAMON_IA_PIPED_CNT_V2
+#define PDAMON_DA_PIPED_CNT         PDAMON_DA_PIPED_CNT_V2
+
+/**
+ * For exception flow
+ */
+#define PDAMON_EX_PIPED_PC_CNT      (PDAMON_EX_PIPED_PC_CNT_V2)
+#define PDAMON_EX_PC_PAIR_CNT       (PDAMON_EX_PC_PAIR_CNT_V2)
+#define PDAMON_EX_PIPED_DA_CNT      (PDAMON_EX_PIPED_DA_CNT_V2)
+#define PDAMON_EX_DA_PAIR_CNT       (PDAMON_EX_DA_PAIR_CNT_V2)
+
+/**
+ * A structure for backup raw data of RMPU violation case
+ */
+typedef struct {
+    PDAMON_RAW_PER_CORE_T raw[PDAMON_CORE_NUM];
+} PDAMON_RMPU_VIO_BACKUP, *PPDAMON_RMPU_VIO_BACKUP;
+
+
+///@}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to initialize PDAMON driver
+///
+/// \return                 PDAMON_OK if initialization is successful
+/// \return                 PDAMON_FAIL if initialization is failed.
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_init(void);
+
+///////////////////////////////////////////////////////////////////////////////
+//// \brief                 This function is to configure PCMON module when leave dormant.
+///
+/// \return                 PDAMON_OK if configuration is successful
+/// \return                 PDAMON_FAIL if configuration is failed.
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_configure_dormant_leave(void);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to configure PDAMON of cores.
+///
+/// \param [in] cfg         A configuration structure.
+/// \param [in] core        Core ID.
+/// \return                 PDAMON_OK if configuration is successful;
+///                         Not PDAMON_OK if failure.
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_set_config(PDAMON_CFG_T *cfg, PDAMON_CORE_SEL core);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to setup PC match address.
+///
+/// \param [in] index       Match index from 0 to 5.
+/// \param [in] addr        Program counter to match.
+/// \param [in] enabled     Set this match as enabled or not.
+/// \return                 PDAMON_OK if configuration is successful;
+///                         Not PDAMON_OK if failure.
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_set_pc_match(kal_uint32 index, kal_uint32 addr, kal_bool enabled);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to setup PC match address.
+///
+/// \param [in] index       Match index from 0 to 5.
+/// \param [in] addr        Program counter to match.
+/// \param [in] mask        Mask of Program counter to match.
+/// \param [in] enabled     Set this match as enabled or not.
+/// \return                 PDAMON_OK if configuration is successful;
+///                         Not PDAMON_OK if failure.
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_set_pc_match_and_mask(kal_uint32 index, kal_uint32 addr, kal_uint32 mask, kal_bool enabled);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to start PDAMON of cores.
+///
+/// \param [in] core        Core definition. One of PDAMON_CORE_SEL.
+/// \return                 PDAMON_OK if starting capture is successful;
+///                         Not PDAMON_OK if failure.
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_start_capture(PDAMON_CORE_SEL core);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to stop PDAMON of cores.
+///
+/// \param [in] core        Core definition. One of PDAMON_CORE_SEL.
+/// \return                 PDAMON_OK if stopping capture is successful;
+///                         Not PDAMON_OK if failure.
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_stop_capture(PDAMON_CORE_SEL core);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is to stop capturing of PDAMON via GCR control
+/// \param [in] core        The core of PDAMON to be stopped
+///
+/// \return                 PDAMON_RET_OK if stop capturing of PDAMON via GCR is successful
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_gcr_stop_capture(PDAMON_CORE_SEL core);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to select PDAMON of specific
+///                         core.
+///
+/// \param [in] core        Core definition. One of PDAMON_CORE_SEL.
+/// \return                 PDAMON_OK if core selection is successful;
+///                         Not PDAMON_OK if failure.
+/// \note                   V2 : Not support.
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_core_select(PDAMON_CORE_SEL core);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to check if PDAMON is stopped.
+///
+/// \return                 KAL_TRUE if PDAMON is stopped. KAL_FALSE otherwise.
+/// \note                   V1 : Must called after drv_pdamon_core_select
+///////////////////////////////////////////////////////////////////////////////
+kal_bool drv_pdamon_is_stopped(PDAMON_CORE_SEL core);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to check if PDAMON is stopped
+///                         by specific sources.
+///
+/// \return                 KAL_TRUE if PDAMON is stopped. KAL_FALSE otherwise.
+///////////////////////////////////////////////////////////////////////////////
+kal_bool drv_pdamon_is_stopped_by_sources(PDAMON_CORE_SEL core, PDAMON_STOP_SOURCE source);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to get PC record count of
+///                         specific core.
+///
+/// \return                 PC record count.
+/// \note                   V1 : Must called after drv_pdamon_core_select
+///////////////////////////////////////////////////////////////////////////////
+kal_uint32 drv_pdamon_get_pc_count(PDAMON_CORE_SEL core);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to get PC record count of
+///                         a specific TC of a core.
+///
+/// \return                 PC record count.
+/// \note                   V2 support only.
+///////////////////////////////////////////////////////////////////////////////
+kal_uint32 drv_pdamon_get_pc_count_by_tc(PDAMON_CORE_SEL core, PDAMON_TC_SEL tc);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to get DA record count of
+///                         specific core.
+///
+/// \return                 DA record count.
+/// \note                   V1 : Must called after drv_pdamon_core_select
+///////////////////////////////////////////////////////////////////////////////
+kal_uint32 drv_pdamon_get_da_count(PDAMON_CORE_SEL core);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to get DA record count of
+///                         a specific TC of a core.
+///
+/// \return                 DA record count.
+/// \note                   V2 support only.
+///////////////////////////////////////////////////////////////////////////////
+kal_uint32 drv_pdamon_get_da_count_by_tc(PDAMON_CORE_SEL core, PDAMON_TC_SEL tc);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to get PDAMON status value
+///
+/// \param [in/out] status  Buffer to store status value
+/// \return                 PDAMON_OK if status value is returned from PDAMON.
+///                         Not PDAMON_OK if failure.
+/// \note                   V1 : Must called after drv_pdamon_core_select
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_get_status(PDAMON_CORE_SEL core, kal_uint32 *status);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to get PDAMON status value
+///
+/// \param [in/out] status  Pointer to a buffer to store PC/DA record.
+/// \return                 PDAMON_OK if record is available from PDAMON.
+///                         Not PDAMON_OK if failure.
+/// \note                   V1 : Must called after drv_pdamon_core_select
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_get_raw(PDAMON_CORE_SEL core, PDAMON_RAW_PER_CORE_T *raw);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to get PC/DA record of specific
+///                         core in excpetion flow
+///
+/// \param [in] core        Core definition. One of PDAMON_CORE_SEL.
+/// \param [in] raw         Pointer to a buffer to store PC/DA record.
+/// \return                 PDAMON_OK if record is available.
+///                         Not PDAMON_OK if failure.
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_ex_get_raw(PDAMON_CORE_SEL core, PDAMON_EX_RAW_T *raw);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to get PC/DA record of specific
+///                         core in nested excpetion flow
+///
+/// \param [in] core        Core definition. One of PDAMON_CORE_SEL.
+/// \param [in] raw         Pointer to a buffer to store PC/DA record.
+/// \return                 PDAMON_OK if record is available.
+///                         Not PDAMON_OK if failure.
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_nex_get_raw(PDAMON_CORE_SEL core, PDAMON_NEX_RAW_T *raw);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                  This function is used to get PC/DA record of all
+///                         cores in excpetion flow
+///
+/// \return                 PDAMON_OK if all record are available.
+///                         Not PDAMON_OK if failure.
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_ex_get_all_raw();
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                      This function is used to mask/un-mask stop sources.
+///
+/// \param [in] source          Stop source enumeration.
+///                             Please refer to PCMON_STOP_SOURCE.
+/// \param [in] mask            KAL_TRUE means mask stop source.
+///                             KAL_FALSE means unmask stop source.
+///
+/// \return                     PCMON_OK if mask/un-mask operation is done.
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_mask_stop_sources(PDAMON_CORE_SEL core, PDAMON_STOP_SOURCE sources, kal_bool mask);
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief                      This function is used to backup PC/DA record and
+///                             re-start PCMon.
+///
+/// \param [in] mcu             KAL_TRUE means backup PC/DA record by MCU.
+///                             KAL_FALSE means backup PC/DA record by GDMA.
+/// \param [in/out] data_ptr    A pointer of buffer to store PC/DA record.
+/// \param [in] size            Size of data_ptr in byes. This value must be 256.
+/// \param [in] mask            KAL_TRUE means mask RMPU stop source after backup.
+///                             KAL_FALSE means unmask RMPU stop source after backup.
+///
+/// \return                     PCMON_INVALID_ARGUMENT means \size if not the
+///                             proper value.
+/// \return                     PCMON_OK if backup and restart are done.
+/// \return                     PCMON_FAIL if PCMon is not stopped. Backup can not
+///                             be done.
+///////////////////////////////////////////////////////////////////////////////
+PDAMON_RET drv_pdamon_backup_and_restart(kal_bool mcu, PPDAMON_RMPU_VIO_BACKUP data_ptr, kal_bool mask);
+
+#endif // end of __DRV_PCMON_H__