[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__