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_ */
 | ||
|  | 
 |