213 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			213 lines
		
	
	
		
			6.3 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.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								***************************************************************************/
							 | 
						||
| 
								 | 
							
								#ifndef __PHY_PHASE_H
							 | 
						||
| 
								 | 
							
								#define __PHY_PHASE_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "iot_config.h"
							 | 
						||
| 
								 | 
							
								#include "os_types.h"
							 | 
						||
| 
								 | 
							
								#include "phy_bb.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    PHY_PHASE_OVR_ALL = 0,
							 | 
						||
| 
								 | 
							
								    PHY_PHASE_OVR_A = 1,
							 | 
						||
| 
								 | 
							
								    PHY_PHASE_OVR_B = 2,
							 | 
						||
| 
								 | 
							
								    PHY_PHASE_OVR_C = 3
							 | 
						||
| 
								 | 
							
								} PHY_PHASE_OVR_ID;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    PHY_TXRX_OVR_IDLE,
							 | 
						||
| 
								 | 
							
								    PHY_TXRX_OVR_RX,
							 | 
						||
| 
								 | 
							
								    PHY_TXRX_OVR_TX,
							 | 
						||
| 
								 | 
							
								    PHY_TXRX_OVR_TXRX
							 | 
						||
| 
								 | 
							
								} PHY_TXRX_OVR_ID;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if K48_CCO_MULTI_CHANNEL_SELECT_ENABLE
							 | 
						||
| 
								 | 
							
								#define TX_EN_CMB_A (3 << 0)
							 | 
						||
| 
								 | 
							
								#define RX_EN_CMB_A (3 << 0)
							 | 
						||
| 
								 | 
							
								#define TX_EN_CMB_B (3 << 2)
							 | 
						||
| 
								 | 
							
								#define RX_EN_CMB_B (3 << 2)
							 | 
						||
| 
								 | 
							
								#define TX_EN_CMB_C (3 << 4)
							 | 
						||
| 
								 | 
							
								#define RX_EN_CMB_C (3 << 4)
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#define TX_EN_CMB_A (1 << 0)
							 | 
						||
| 
								 | 
							
								#define RX_EN_CMB_A (1 << 1)
							 | 
						||
| 
								 | 
							
								#define TX_EN_CMB_B (1 << 2)
							 | 
						||
| 
								 | 
							
								#define RX_EN_CMB_B (1 << 3)
							 | 
						||
| 
								 | 
							
								#define TX_EN_CMB_C (1 << 4)
							 | 
						||
| 
								 | 
							
								#define RX_EN_CMB_C (1 << 5)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *@brief phy_phase_ovr_set.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * force phase select with A/B/C/ALL,
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *@param phase              [A,B,C,ALL]
							 | 
						||
| 
								 | 
							
								 *@param en                 [true/false]
							 | 
						||
| 
								 | 
							
								 *@param mode               [0:idle,1:rx,2:tx,3:txrx]
							 | 
						||
| 
								 | 
							
								 *@exception                [none.]
							 | 
						||
| 
								 | 
							
								 *@return                   [none.]
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void phy_phase_ovr_set(PHY_PHASE_OVR_ID phase, bool_t en, PHY_TXRX_OVR_ID mode);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *@brief phy_set_phase_overwrite() - set the tx&rx descriptor(0~3) map to
							 | 
						||
| 
								 | 
							
								 *                                   hw phase(phase A/B/C/ALL)
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * set user protocol phase value map to kunlun chip's actual phase.
							 | 
						||
| 
								 | 
							
								 * for example:
							 | 
						||
| 
								 | 
							
								 * smart grid phase A = 1, then set desc1_to_hw_phae = HW_DESC_PHASE_A,
							 | 
						||
| 
								 | 
							
								 * since then, set descriptor's tx_phase/rx_phase = PLC_PHASE_A(1), kunlun chip
							 | 
						||
| 
								 | 
							
								 * will (tx&rx) work in phase A.
							 | 
						||
| 
								 | 
							
								 * if is_enable != false, desc0_to_hw_phase/desc1_to_hw_phase/desc2_to_hw_phase/
							 | 
						||
| 
								 | 
							
								 * desc3_to_hw_phase must be set to HW_DESC_PHASE_ALL/HW_DESC_PHASE_A/
							 | 
						||
| 
								 | 
							
								 * HW_DESC_PHASE_B/ HW_DESC_PHASE_C one of the values.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *@param is_enable:         is enable phase overwrite.
							 | 
						||
| 
								 | 
							
								 *                          true - enable, false - disable
							 | 
						||
| 
								 | 
							
								 *@param desc0_to_hw_phase: tx&rx descriptor value 0 map to hw phase, this value
							 | 
						||
| 
								 | 
							
								 *                          must be HW_DESC_PHASE_ALL/HW_DESC_PHASE_A/
							 | 
						||
| 
								 | 
							
								 *                          HW_DESC_PHASE_B/HW_DESC_PHASE_C
							 | 
						||
| 
								 | 
							
								 *@param desc1_to_hw_phase: tx&rx descriptor value 1 map to hw phase, same as
							 | 
						||
| 
								 | 
							
								 *                          desc0_to_hw_phase.
							 | 
						||
| 
								 | 
							
								 *@param desc2_to_hw_phase: tx&rx descriptor value 2 map to hw phase, same as
							 | 
						||
| 
								 | 
							
								 *                          desc0_to_hw_phase.
							 | 
						||
| 
								 | 
							
								 *@param desc3_to_hw_phase: tx&rx descriptor value 3 map to hw phase, same as
							 | 
						||
| 
								 | 
							
								 *                          desc0_to_hw_phase.
							 | 
						||
| 
								 | 
							
								 *@return                   none
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void phy_set_phase_overwrite(bool_t is_enable,
							 | 
						||
| 
								 | 
							
								    uint8_t desc0_to_hw_phase, uint8_t desc1_to_hw_phase,
							 | 
						||
| 
								 | 
							
								    uint8_t desc2_to_hw_phase, uint8_t desc3_to_hw_phase);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *@brief register_get_rx_phase_cb   phy get mac rx phase cb.
							 | 
						||
| 
								 | 
							
								 *@exception                [none.]
							 | 
						||
| 
								 | 
							
								 *@return                   [none.]
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								void register_get_rx_phase_cb(mac_get_rx_phase_cb_t cb);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *@brief phy_get_mac_rx_phase    get phy callback value, rx phase.
							 | 
						||
| 
								 | 
							
								 *@exception                [none.]
							 | 
						||
| 
								 | 
							
								 *@return                   [rx phase.]
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint32_t phy_get_mac_rx_phase();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *@brief phy_force_0_access_require
							 | 
						||
| 
								 | 
							
								 *                            require the privilage to access force 0 register.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *@param void               [void]
							 | 
						||
| 
								 | 
							
								 *@exception                [none.]
							 | 
						||
| 
								 | 
							
								 *@return                   [none.]
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								void phy_force_0_access_require();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *@brief phy_force_0_access_release
							 | 
						||
| 
								 | 
							
								 *                           release the privilage to access force 0 register.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *@param void               [void]
							 | 
						||
| 
								 | 
							
								 *@exception                [none.]
							 | 
						||
| 
								 | 
							
								 *@return                   [none.]
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								void phy_force_0_access_release();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *@brief phy_force_0_access_require_from_isr
							 | 
						||
| 
								 | 
							
								 *                   require the privilage to access force 0 register from ISR.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *@param void               [void]
							 | 
						||
| 
								 | 
							
								 *@exception                [none.]
							 | 
						||
| 
								 | 
							
								 *@return uint32_t          [require the privilage success or not]
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								void phy_force_0_access_require_from_isr();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *@brief phy_force_0_access_release_from_isr
							 | 
						||
| 
								 | 
							
								 *                   release the privilage to access force 0 register from ISR.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *@param void               [void]
							 | 
						||
| 
								 | 
							
								 *@exception                [none.]
							 | 
						||
| 
								 | 
							
								 *@return uint32_t          [release the privilage success or not]
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								void phy_force_0_access_release_from_isr();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *@brief phy_rx_phase_force_set
							 | 
						||
| 
								 | 
							
								 *  force phy rx phase from mac.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *@param enable             [true or false]
							 | 
						||
| 
								 | 
							
								 *@param hw_phase           [ALL/A/B/C]
							 | 
						||
| 
								 | 
							
								 *@exception                [none.]
							 | 
						||
| 
								 | 
							
								 *@return                   [none.]
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								void phy_rx_phase_force_set(bool_t enable, uint8_t hw_phase);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *@brief phy_rx_phase_force_set_on_dump
							 | 
						||
| 
								 | 
							
								 *  force phy rx phase from mac on dump mode.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *@param enable             [true or false]
							 | 
						||
| 
								 | 
							
								 *@param hw_phase           [ALL/A/B/C]
							 | 
						||
| 
								 | 
							
								 *@exception                [none.]
							 | 
						||
| 
								 | 
							
								 *@return                   [none.]
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								void phy_rx_phase_force_set_on_dump(bool_t enable, uint8_t hw_phase);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *@brief phy_get_rx_force_phase_val   get rx force phase.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *@return                   [force phase]
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint32_t phy_get_rx_force_phase_val();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *@brief phy_get_rx_phase_force_en  get rx force phase enable/disable.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *@return                   [0]
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint32_t phy_get_rx_phase_force_en();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								* @brief phy_get_hw_phy_rx_phase_sel() - get phy rx phase select
							 | 
						||
| 
								 | 
							
								*
							 | 
						||
| 
								 | 
							
								* @param        none
							 | 
						||
| 
								 | 
							
								*
							 | 
						||
| 
								 | 
							
								* @return       phy rx phase num
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint32_t phy_get_hw_phy_rx_phase_sel(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief               enable/disable force phy tx
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param is_enable:    0 - disable force phy tx
							 | 
						||
| 
								 | 
							
								 *                      1 - enable force phy tx
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return              none
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void phy_set_tx_force_enable(uint8_t is_enable);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |