289 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			289 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/****************************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
							 | 
						||
| 
								 | 
							
								be copied by any method or incorporated into another program without
							 | 
						||
| 
								 | 
							
								the express written consent of Aerospace C.Power. This Information or any portion
							 | 
						||
| 
								 | 
							
								thereof remains the property of Aerospace C.Power. The Information contained herein
							 | 
						||
| 
								 | 
							
								is believed to be accurate and Aerospace C.Power assumes no responsibility or
							 | 
						||
| 
								 | 
							
								liability for its use in any way and conveys no license or title under
							 | 
						||
| 
								 | 
							
								any patent or copyright and makes no representation or warranty that this
							 | 
						||
| 
								 | 
							
								Information is free from patent or copyright infringement.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								****************************************************************************/
							 | 
						||
| 
								 | 
							
								#include "mac_rawdata_hw.h"
							 | 
						||
| 
								 | 
							
								#include "hw_reg_api.h"
							 | 
						||
| 
								 | 
							
								#include "phy_reg.h"
							 | 
						||
| 
								 | 
							
								#include "iot_errno.h"
							 | 
						||
| 
								 | 
							
								#include "mac_tx_hw.h"
							 | 
						||
| 
								 | 
							
								#include "os_types.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if HW_PLATFORM >= HW_PLATFORM_FPGA
							 | 
						||
| 
								 | 
							
								#include "mac_raw_reg.h"
							 | 
						||
| 
								 | 
							
								#include "mac_sched_hw.h"
							 | 
						||
| 
								 | 
							
								#include "phy_bb.h"
							 | 
						||
| 
								 | 
							
								#include "plc_mpdu_header.h"
							 | 
						||
| 
								 | 
							
								#include "mac_sys_reg.h"
							 | 
						||
| 
								 | 
							
								#include "hw_reg_api.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void IRAM_ATTR iot_raw_write_reg(uint32_t type, uint32_t addr, uint32_t val)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if(type == RAW_REG_TYPE_MAC){
							 | 
						||
| 
								 | 
							
								        RGF_RAW_WRITE_REG(addr,val);
							 | 
						||
| 
								 | 
							
								    }else if(type == RAW_REG_TYPE_PHY){
							 | 
						||
| 
								 | 
							
								        PHY_WRITE_REG(addr, val);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint32_t IRAM_ATTR iot_raw_read_reg(uint32_t type,  uint32_t addr)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t val = 0;
							 | 
						||
| 
								 | 
							
								    if(type == RAW_REG_TYPE_MAC){
							 | 
						||
| 
								 | 
							
								        val = RGF_RAW_READ_REG(addr);
							 | 
						||
| 
								 | 
							
								    }else if(type == RAW_REG_TYPE_PHY){
							 | 
						||
| 
								 | 
							
								        val = PHY_READ_REG(addr);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return val;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void mac_rawdata_mode_enable(uint32_t enable)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* set mac raw mode */
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC, CFG_RAW_DATA_MODE_ADDR, enable);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void phy_rawdata_mode_enable(uint32_t enable)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* set bb raw mode */
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_PHY,CFG_BB_RAW_DATA_MODE_CTRL_ADDR, \
							 | 
						||
| 
								 | 
							
								        enable);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void mac_rawdata_proto_set(uint32_t src_prot)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* set mac raw mode proto */
							 | 
						||
| 
								 | 
							
								    src_prot &= CFG_SW_TX_PROTO_MASK;
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC, CFG_SW_TX_PROTO_ADDR, src_prot);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint32_t iot_rawdata_hw_enable(uint8_t rawdata_enable)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* set mac raw mode */
							 | 
						||
| 
								 | 
							
								    mac_rawdata_mode_enable(rawdata_enable);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* set bb raw mode */
							 | 
						||
| 
								 | 
							
								    phy_rawdata_mode_enable(rawdata_enable);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return ERR_OK;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint32_t iot_rawdata_get_tx_fc_bytes(fc_trans_msg *rawfc)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t idx=0;
							 | 
						||
| 
								 | 
							
								#ifdef ENABLE_PRINT
							 | 
						||
| 
								 | 
							
								    iot_printf("get_mac_tx_fc\n");
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    rawfc->org_fc[idx++]= iot_raw_read_reg(RAW_REG_TYPE_MAC,CFG_TX_RAW_FC_0_ADDR);
							 | 
						||
| 
								 | 
							
								    rawfc->org_fc[idx++]= iot_raw_read_reg(RAW_REG_TYPE_MAC,CFG_TX_RAW_FC_1_ADDR);
							 | 
						||
| 
								 | 
							
								    rawfc->org_fc[idx++]= iot_raw_read_reg(RAW_REG_TYPE_MAC,CFG_TX_RAW_FC_2_ADDR);
							 | 
						||
| 
								 | 
							
								    rawfc->org_fc[idx++]= iot_raw_read_reg(RAW_REG_TYPE_MAC,CFG_TX_RAW_FC_3_ADDR);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return ERR_OK;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint32_t iot_rawdata_translate_tx_fc(fc_trans_msg *rawfc, \
							 | 
						||
| 
								 | 
							
								    uint32_t src_prot, uint32_t trans_prot)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /*
							 | 
						||
| 
								 | 
							
								     * consider two cases. 1. src_prot and trans_prot are same, but minor
							 | 
						||
| 
								 | 
							
								     * version different.  2. src_prot and trans_prot are different.
							 | 
						||
| 
								 | 
							
								     * 2nd case should not to hit, focus on case 1 currently.
							 | 
						||
| 
								 | 
							
								    */
							 | 
						||
| 
								 | 
							
								    frame_control_t* src_sgfc = NULL;
							 | 
						||
| 
								 | 
							
								    frame_control_t* trans_sgfc = NULL;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    spg_frame_control_t* src_spgfc = NULL;
							 | 
						||
| 
								 | 
							
								    spg_frame_control_t* trans_spgfc = NULL;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if(src_prot == trans_prot){
							 | 
						||
| 
								 | 
							
								        if(src_prot == PLC_PROTO_TYPE_SG){
							 | 
						||
| 
								 | 
							
								            src_sgfc = (frame_control_t*)rawfc->org_fc;
							 | 
						||
| 
								 | 
							
								            trans_sgfc = (frame_control_t*)rawfc->trans_fc;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            /* real work should be bits adjustment in same prot family
							 | 
						||
| 
								 | 
							
								             * currently just copy
							 | 
						||
| 
								 | 
							
								            */
							 | 
						||
| 
								 | 
							
								           os_mem_cpy(trans_sgfc,src_sgfc,(RAW_FC_LEN_DW*sizeof(uint32_t)) );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        }else if (src_prot == PLC_PROTO_TYPE_SPG){
							 | 
						||
| 
								 | 
							
								            src_spgfc = (spg_frame_control_t*)rawfc->org_fc;
							 | 
						||
| 
								 | 
							
								            trans_spgfc = (spg_frame_control_t*)rawfc->trans_fc;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            /* real work should be bits adjustment in same prot family
							 | 
						||
| 
								 | 
							
								             * currently just copy
							 | 
						||
| 
								 | 
							
								            */
							 | 
						||
| 
								 | 
							
								            os_mem_cpy(trans_spgfc, src_spgfc,(RAW_FC_LEN_DW*sizeof(uint32_t)));
							 | 
						||
| 
								 | 
							
								        }else{
							 | 
						||
| 
								 | 
							
								            IOT_ASSERT(0);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    }else{
							 | 
						||
| 
								 | 
							
								        IOT_ASSERT(0);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return ERR_OK;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint32_t iot_rawdata_set_translate_tx_fc(fc_trans_msg *rawfc)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t idx = 0;
							 | 
						||
| 
								 | 
							
								#ifdef ENABLE_PRINT
							 | 
						||
| 
								 | 
							
								    iot_printf("set_mac_tx_fc\n");
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    /* caculate crc data here */
							 | 
						||
| 
								 | 
							
								//       iot_rawdata_set_crc(rawfc);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* Set Data */
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC,CFG_TX_SW_FC_0_ADDR,rawfc->trans_fc[idx++]);
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC,CFG_TX_SW_FC_1_ADDR,rawfc->trans_fc[idx++]);
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC,CFG_TX_SW_FC_2_ADDR,rawfc->trans_fc[idx++]);
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC,CFG_TX_SW_FC_3_ADDR,rawfc->trans_fc[idx++]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //iot_rawdata_modify_tx_fc(rawfc);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* Valid data */
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC,CFG_SW_FC_VALID_ADDR, 1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef RAWDATA_TIME_PROFILE_ENABLE
							 | 
						||
| 
								 | 
							
								    /* log interrupt trigger time */
							 | 
						||
| 
								 | 
							
								    iot_rawdata_mark_timestamp(&rawfc->profile.rawdata_set_translate_fc_ticks);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return ERR_OK;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void  mac_rawdata_sack_tx_isr_disable()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t reg_intr_en = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* handle mac intr */
							 | 
						||
| 
								 | 
							
								    reg_intr_en = iot_raw_read_reg(RAW_REG_TYPE_MAC, CFG_RAW_INT_ENA_ADDR);
							 | 
						||
| 
								 | 
							
								    reg_intr_en &= (~MAC_TX_SACK_FC_MASK);
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC, CFG_RAW_INT_ENA_ADDR, reg_intr_en);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void mac_rawdata_sack_tx_isr_enable()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t reg_intr_en = 0;
							 | 
						||
| 
								 | 
							
								    uint32_t reg_int = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    reg_int = iot_raw_read_reg(RAW_REG_TYPE_MAC, CFG_RAW_INT_PRI3_MASK_ADDR);
							 | 
						||
| 
								 | 
							
								    reg_int |= MAC_TX_SACK_FC_MASK;
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC, CFG_RAW_INT_PRI3_MASK_ADDR, reg_int);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    reg_intr_en = iot_raw_read_reg(RAW_REG_TYPE_MAC, CFG_RAW_INT_ENA_ADDR);
							 | 
						||
| 
								 | 
							
								    reg_intr_en |= MAC_TX_SACK_FC_MASK;
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC, CFG_RAW_INT_ENA_ADDR, reg_intr_en);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void mac_rawdata_sack_isr_cfg(uint32_t src_prot)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* disable sack tx rawdata isr */
							 | 
						||
| 
								 | 
							
								    mac_rawdata_sack_tx_isr_disable();
							 | 
						||
| 
								 | 
							
								    /* set rawdata mode */
							 | 
						||
| 
								 | 
							
								    mac_rawdata_proto_set(src_prot);
							 | 
						||
| 
								 | 
							
								    /* enable sack tx rawdata isr */
							 | 
						||
| 
								 | 
							
								    mac_rawdata_sack_tx_isr_enable();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void mac_rawdata_tx_start_isr_disable()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t reg_intr_en = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* handle mac intr */
							 | 
						||
| 
								 | 
							
								    reg_intr_en = iot_raw_read_reg(RAW_REG_TYPE_MAC, CFG_RAW_INT_ENA_ADDR);
							 | 
						||
| 
								 | 
							
								    reg_intr_en &= (~MAC_TX_START_MASK);
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC, CFG_RAW_INT_ENA_ADDR, reg_intr_en);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void mac_rawdata_tx_start_isr_enable()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t reg_intr_en = 0;
							 | 
						||
| 
								 | 
							
								    uint32_t reg_int = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    reg_int = iot_raw_read_reg(RAW_REG_TYPE_MAC, CFG_RAW_INT_PRI3_MASK_ADDR);
							 | 
						||
| 
								 | 
							
								    reg_int |= MAC_TX_START_MASK;
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC, CFG_RAW_INT_PRI3_MASK_ADDR, reg_int);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    reg_intr_en = iot_raw_read_reg(RAW_REG_TYPE_MAC, CFG_RAW_INT_ENA_ADDR);
							 | 
						||
| 
								 | 
							
								    reg_intr_en |= MAC_TX_START_MASK;
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC, CFG_RAW_INT_ENA_ADDR, reg_intr_en);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void mac_rawdata_tx_war_isr_cfg(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* disable rawdata tx start isr */
							 | 
						||
| 
								 | 
							
								    mac_rawdata_tx_start_isr_disable();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* enable rawdata tx start isr */
							 | 
						||
| 
								 | 
							
								    mac_rawdata_tx_start_isr_enable();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void IRAM_ATTR mac_rawdata_tx_start_isr_clr(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t reg_intr_status = 0;
							 | 
						||
| 
								 | 
							
								    reg_intr_status = iot_raw_read_reg(RAW_REG_TYPE_MAC, \
							 | 
						||
| 
								 | 
							
								                            CFG_RAW_INT_CLR_ADDR);
							 | 
						||
| 
								 | 
							
								    reg_intr_status |= MAC_TX_START_INT_STATUS;
							 | 
						||
| 
								 | 
							
								    iot_raw_write_reg(RAW_REG_TYPE_MAC, \
							 | 
						||
| 
								 | 
							
								                            CFG_RAW_INT_CLR_ADDR, reg_intr_status);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#else // HW_PLATFORM >= HW_PLATFORM_FPGA
							 | 
						||
| 
								 | 
							
								void mac_rawdata_sack_isr_cfg(uint32_t src_prot)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    (void)src_prot;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if CPLC_IOT_CERT_SUPPORT
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void mac_rawdata_send_cert_mpdu(uint32_t hwqid, tx_mpdu_start *mpdu,
							 | 
						||
| 
								 | 
							
								    fc_trans_msg *p_msg, void *fc, uint32_t tmi, uint32_t ext_tmi)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    (void)hwqid;
							 | 
						||
| 
								 | 
							
								    (void)mpdu;
							 | 
						||
| 
								 | 
							
								    (void)p_msg;
							 | 
						||
| 
								 | 
							
								    (void)fc;
							 | 
						||
| 
								 | 
							
								    (void)tmi;
							 | 
						||
| 
								 | 
							
								    (void)ext_tmi;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#else /* CPLC_IOT_CERT_SUPPORT */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void mac_rawdata_send_cert_mpdu(uint32_t hwqid, tx_mpdu_start *mpdu,
							 | 
						||
| 
								 | 
							
								    fc_trans_msg *p_msg, void *fc, uint32_t tmi, uint32_t ext_tmi)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    (void)hwqid;
							 | 
						||
| 
								 | 
							
								    (void)mpdu;
							 | 
						||
| 
								 | 
							
								    (void)p_msg;
							 | 
						||
| 
								 | 
							
								    (void)fc;
							 | 
						||
| 
								 | 
							
								    (void)tmi;
							 | 
						||
| 
								 | 
							
								    (void)ext_tmi;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* CPLC_IOT_CERT_SUPPORT */
							 | 
						||
| 
								 | 
							
								
							 |