107 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			107 lines
		
	
	
		
			3.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 _IOT_SPINLOCK_H_
							 | 
						||
| 
								 | 
							
								#define _IOT_SPINLOCK_H_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define SPINLOCK_MASTER_MAX     16
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* NOTE: consider the application of multi-cpu system spinlock,
							 | 
						||
| 
								 | 
							
								 *       we can divide spinlock like this:
							 | 
						||
| 
								 | 
							
								 *       ID 0: dynamically allocated mutually exclusive protection;
							 | 
						||
| 
								 | 
							
								 *       ID 1 - 7: static allocation used by AMP;
							 | 
						||
| 
								 | 
							
								 *       ID 8 - 15: dynamically allocation used by SMP;
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *       only static allocation of the AMP system is currently enabled.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_0 = 0,
							 | 
						||
| 
								 | 
							
								    /* define spinlock used to set registers synchronously
							 | 
						||
| 
								 | 
							
								     * between hplc cpu and bbcpu
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    SPINLOCK_HPLC_RF_SYNC,
							 | 
						||
| 
								 | 
							
								    /* define spinlock used to set rtc synchronously
							 | 
						||
| 
								 | 
							
								     * between hplc cpu and cus cpu
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    SPINLOCK_RTC_SYNC,
							 | 
						||
| 
								 | 
							
								    /* define spinlock used to crypto hw synchronously
							 | 
						||
| 
								 | 
							
								     * between hplc cpu and sec cpu
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    SPINLOCK_CRYPTO_SM3_SHA,
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_4,
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_5,
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_6,
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_7,
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_8,
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_9,
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_10,
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_11,
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_12,
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_13,
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_14,
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_15,
							 | 
						||
| 
								 | 
							
								    SPINLOCK_INDEX_MAX,
							 | 
						||
| 
								 | 
							
								} SPINLOCK_MODULE_E;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_spinlock_lock()   - spinlock lock.
							 | 
						||
| 
								 | 
							
								 * @param id:                   - spinlock id.
							 | 
						||
| 
								 | 
							
								 * @param master:               - master id.
							 | 
						||
| 
								 | 
							
								 * @return uint32_t:            - lock success or not.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_spinlock_lock(uint8_t id, uint8_t master);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_spinlock_unlock() - spinlock unlock.
							 | 
						||
| 
								 | 
							
								 * @param id:                   - spinlock id.
							 | 
						||
| 
								 | 
							
								 * @param master:               - master id.
							 | 
						||
| 
								 | 
							
								 * @return uint32_t:            - unlock success or not.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_spinlock_unlock(uint8_t id, uint8_t master);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_spinlock_owner()  - spinlock owner.
							 | 
						||
| 
								 | 
							
								 * @param id:                   - spinlock id.
							 | 
						||
| 
								 | 
							
								 * @return uint32_t:            - owner master.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_spinlock_owner(uint8_t id);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_spinlock_init()   - spinlock init.
							 | 
						||
| 
								 | 
							
								 * @param void:                 - void.
							 | 
						||
| 
								 | 
							
								 * @return uint32_t:            - success or not.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_spinlock_init();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_spinlock_alloc()  - spinlock alloc.
							 | 
						||
| 
								 | 
							
								 * @param master:               - master.
							 | 
						||
| 
								 | 
							
								 * @return uint32_t:            - alloc success or not.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint8_t iot_spinlock_alloc(uint8_t master);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_spinlock_free()   - spinlock alloc.
							 | 
						||
| 
								 | 
							
								 * @param id:                   - spinlock id.
							 | 
						||
| 
								 | 
							
								 * @param master:               - master.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_spinlock_free(uint8_t id, uint8_t master);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* _IOT_SPINLOCK_H_ */
							 | 
						||
| 
								 | 
							
								
							 |