jump_function.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. /**************************************************************************************************
  2. Phyplus Microelectronics Limited confidential and proprietary.
  3. All rights reserved.
  4. IMPORTANT: All rights of this software belong to Phyplus Microelectronics
  5. Limited ("Phyplus"). Your use of this Software is limited to those
  6. specific rights granted under the terms of the business contract, the
  7. confidential agreement, the non-disclosure agreement and any other forms
  8. of agreements as a customer or a partner of Phyplus. You may not use this
  9. Software unless you agree to abide by the terms of these agreements.
  10. You acknowledge that the Software may not be modified, copied,
  11. distributed or disclosed unless embedded on a Phyplus Bluetooth Low Energy
  12. (BLE) integrated circuit, either as a product or is integrated into your
  13. products. Other than for the aforementioned purposes, you may not use,
  14. reproduce, copy, prepare derivative works of, modify, distribute, perform,
  15. display or sell this Software and/or its documentation for any purposes.
  16. YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
  17. PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
  18. INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
  19. NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
  20. PHYPLUS OR ITS SUBSIDIARIES BE LIABLE OR OBLIGATED UNDER CONTRACT,
  21. NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
  22. LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
  23. INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
  24. OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
  25. OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
  26. (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
  27. **************************************************************************************************/
  28. /**
  29. ****************************************************************************************
  30. *
  31. * @file jump_fucntion.h
  32. *
  33. * @brief This file contains the definitions of the macros and functions that are
  34. * architecture dependent. The implementation of those is implemented in the
  35. * appropriate architecture directory.
  36. *
  37. *
  38. * $Rev: $
  39. *
  40. ****************************************************************************************
  41. */
  42. #ifndef _JUMP_FUNC_H_
  43. #define _JUMP_FUNC_H_
  44. #include <stdint.h>
  45. #include "types.h"
  46. #include "ll_def.h"
  47. #include "ll_sleep.h"
  48. #include "hci.h"
  49. #include "l2cap.h"
  50. // ===================== MACROS =======================
  51. #define JUMP_BASE_ADDR 0x1fff0800
  52. #define JUMP_FUNCTION(x) (*(uint32 *)(JUMP_BASE_ADDR + (x << 2)))
  53. // ROM function entries
  54. // 0 - 10 for common
  55. #define OSAL_INIT_TASKS 1
  56. #define TASKS_ARRAY 2
  57. #define TASK_COUNT 3
  58. #define TASK_EVENTS 4
  59. #define OSAL_MEM_INIT 5
  60. #define LL_INIT 11
  61. #define LL_PROCESS_EVENT 12
  62. #define LL_RESET 13
  63. #define LL_TXDATA 14
  64. #define LL_DISCONNECT 15
  65. #define LL_SET_ADV_PARAM 16
  66. #define LL_SET_ADV_DATA 17
  67. #define LL_SET_ADV_CONTROL 18
  68. #define LL_SET_DEFAULT_CONN_PARAM 19
  69. #define LL_EXT_SET_TX_POWER 20
  70. #define LL_CLEAR_WHITE_LIST 21
  71. #define LL_ADD_WHITE_LIST_DEV 22
  72. #define LL_REMOVE_WHITE_LIST_DEV 23
  73. #define LL_READ_WHITE_LIST_SIZE 24
  74. #define LL_NUM_EMPTY_WL_ENTRIES 25
  75. #define LL_SLAVE_EVT_ENDOK 26
  76. #define LL_SETUP_NEXT_SLAVE_EVT 27
  77. #define LL_CHK_LSTO_DURING_SL 28
  78. #define LL_PROCESS_SLAVE_CTRL_PROC 29
  79. #define LL_PROCESS_SLAVE_CTRL_PKT 30
  80. #define LL_SLAVE_EVT_ABORT 31
  81. #define LL_PROCESS_RX_DATA 32
  82. #define LL_PROCESS_TX_DATA 33
  83. #define LL_CONN_TERMINATE 34
  84. #define LL_WRITE_TX_DATA 35
  85. #define LL_EVT_SCHEDULE 36
  86. #define LL_MOVE_TO_SLAVE_FUNCTION 37
  87. #define LL_SLAVE_CONN_EVENT 38
  88. #define LL_SETUP_ADV 39
  89. #define LL_SETUP_UNDIRECT_ADV 40
  90. #define LL_SETUP_NOCONN_ADV 41
  91. #define LL_SETUP_SCAN_ADV 42
  92. #define LL_SETUP_DIRECT_ADV 43
  93. #define LL_CALC_TIMER_DRIFT 44
  94. #define LL_GENERATE_TX_BUFFER 45
  95. #define LL_READ_RX_FIFO 46
  96. #define LL_READ_TX_FIFO_RTLP 47
  97. #define LL_READ_TX_FIFO_PKT 48
  98. #define LL_HW_PROCESS_RTO 49
  99. #define LL_HW_SET_TIMING 50
  100. #define LL_RELEASE_CONN_ID 51
  101. #define LL_READ_TX_PWR_LVL 52 // A1 ROM metal change add
  102. #define LL_READ_ADV_TX_PWR_LVL 53 // A1 ROM metal change add
  103. #define LL_READ_RSSI 54 // A1 ROM metal change add
  104. #define LL_READ_REMOTE_USE_FEATURES 55 // A1 ROM metal change add
  105. #define LL_ENCRYPT 56 // A1 ROM metal change add
  106. #define LL_DIRECT_TEST_END 57 // A1 ROM metal change add
  107. #define LL_DIRECT_TEST_TX_TEST 58 // A1 ROM metal change add
  108. #define LL_DIRECT_TEST_RX_TEST 59 // A1 ROM metal change add
  109. #define OSAL_POWER_CONSERVE 60
  110. #define ENTER_SLEEP_PROCESS 61
  111. #define WAKEUP_PROCESS 62
  112. #define CONFIG_RTC 63
  113. #define ENTER_SLEEP_OFF_MODE 64 // A1 ROM metal change add
  114. #define HAL_PROCESS_POLL 65 // A1 ROM metal change add
  115. #define LL_HW_GO 66 // A1 ROM metal change add
  116. #define LL_HW_TRIGGER 67 // A1 ROM metal change add
  117. #define LL_SET_TX_PWR_LVL 68 // A1 ROM metal change add
  118. // LL AES
  119. #define LL_AES128_ENCRYPT 70 // A1 ROM metal change add
  120. #define LL_GEN_TRUE_RANDOM 71 // A1 ROM metal change add
  121. #define LL_GEN_DEVICE_SKD 72 // A1 ROM metal change add
  122. #define LL_GEN_DEVICE_IV 73 // A1 ROM metal change add
  123. #define LL_GENERATE_NOUNCE 74 // A1 ROM metal change add
  124. #define LL_ENC_ENCRYPT 75 // A1 ROM metal change add
  125. #define LL_ENC_DECRYPT 76 // A1 ROM metal change add
  126. // host entries
  127. #define SMP_INIT 80
  128. #define SMP_PROCESS_EVENT 81
  129. // l2cap entries
  130. #define L2CAP_PARSE_PACKET 82
  131. #define L2CAP_ENCAP_PACKET 83
  132. #define L2CAP_PKT_TO_SEGBUFF 84
  133. #define L2CAP_SEGBUFF_TO_LINKLAYER 85
  134. #define L2CAP_PROCESS_FREGMENT_TX_DATA 86
  135. //gap linkmgr entries
  136. #define GAP_LINK_MGR_PROCESS_CONNECT_EVT 87
  137. #define GAP_LINK_MGR_PROCESS_DISCONNECT_EVT 88
  138. // hci tl
  139. #define HCI_INIT 90 // A1 ROM metal change add
  140. #define HCI_PROCESS_EVENT 91 // A1 ROM metal change add
  141. // app entries
  142. #define APP_SLEEP_PROCESS 100
  143. #define APP_WAKEUP_PROCESS 101
  144. #define RF_INIT 102
  145. #define WAKEUP_INIT 103
  146. #define BOOT_INIT 104
  147. #define DEBUG_PRINT 105
  148. #define RF_CALIBRATTE 106 // A1 ROM metal change add
  149. // LL master, A2 ROM metal change add
  150. #define LL_MASTER_EVT_ENDOK 110
  151. #define LL_SETUP_NEXT_MASTER_EVT 111
  152. #define LL_PROCESS_MASTER_CTRL_PROC 112
  153. #define LL_PROCESS_MASTER_CTRL_PKT 113
  154. #define LL_MOVE_TO_MASTER_FUNCTION 114
  155. #define LL_MASTER_CONN_EVENT 115
  156. #define LL_SET_SCAN_CTRL 116
  157. #define LL_SET_SCAN_PARAM 117
  158. #define LL_CREATE_CONN 118
  159. #define LL_CREATE_CONN_CANCEL 119
  160. #define LL_START_ENCRYPT 120
  161. #define LL_SETUP_SCAN 121
  162. #define LL_SETUP_SEC_ADV 122
  163. #define LL_SETUP_SEC_SCAN 123
  164. #define LL_SEC_ADV_ALLOW 124
  165. #define LL_CALC_MAX_SCAN_TIME 125
  166. //DLE
  167. #define LL_SET_DATA_LENGTH 130
  168. #define LL_PDU_LENGTH_UPDATE 131
  169. #define LL_TRX_NUM_ADJUST 132
  170. //PHY UPDATE
  171. #define LL_SET_PHY_MODE 133
  172. #define LL_PHY_MODE_UPDATE 134
  173. #define LL_SET_NEXT_PHY_MODE 135
  174. // interrupt request handler
  175. #define NMI_HANDLER 219
  176. #define HARDFAULT_HANDLER 220
  177. #define SVC_HANDLER 221
  178. #define PENDSV_HANDLER 222
  179. #define SYSTICK_HANDLER 223
  180. #define V0_IRQ_HANDLER 224
  181. #define V1_IRQ_HANDLER 225
  182. #define V2_IRQ_HANDLER 226
  183. #define V3_IRQ_HANDLER 227
  184. #define V4_IRQ_HANDLER 228
  185. #define V5_IRQ_HANDLER 229
  186. #define V6_IRQ_HANDLER 230
  187. #define V7_IRQ_HANDLER 231
  188. #define V8_IRQ_HANDLER 232
  189. #define V9_IRQ_HANDLER 233
  190. #define V10_IRQ_HANDLER 234
  191. #define V11_IRQ_HANDLER 235
  192. #define V12_IRQ_HANDLER 236
  193. #define V13_IRQ_HANDLER 237
  194. #define V14_IRQ_HANDLER 238
  195. #define V15_IRQ_HANDLER 239
  196. #define V16_IRQ_HANDLER 240
  197. #define V17_IRQ_HANDLER 241
  198. #define V18_IRQ_HANDLER 242
  199. #define V19_IRQ_HANDLER 243
  200. #define V20_IRQ_HANDLER 244
  201. #define V21_IRQ_HANDLER 245
  202. #define V22_IRQ_HANDLER 246
  203. #define V23_IRQ_HANDLER 247
  204. #define V24_IRQ_HANDLER 248
  205. #define V25_IRQ_HANDLER 249
  206. #define V26_IRQ_HANDLER 250
  207. #define V27_IRQ_HANDLER 251
  208. #define V28_IRQ_HANDLER 252
  209. #define V29_IRQ_HANDLER 253
  210. #define V30_IRQ_HANDLER 254
  211. #define V31_IRQ_HANDLER 255
  212. // ================== FUNCTIONS ==================================
  213. void move_to_slave_function0(void);
  214. void LL_slave_conn_event0(void);
  215. llStatus_t llSetupAdv0(void);
  216. void llSetupUndirectedAdvEvt0(void);
  217. void llSetupNonConnectableAdvEvt0( void );
  218. void llSetupScannableAdvEvt0( void );
  219. void llSetupDirectedAdvEvt0( void );
  220. void LL_evt_schedule0(void);
  221. void llCalcTimerDrift0( uint32 connInterval,
  222. uint16 slaveLatency,
  223. uint8 sleepClkAccuracy,
  224. uint32 *timerDrift ) ;
  225. uint16 ll_generateTxBuffer0(int txFifo_vacancy, uint16 *pSave_ptr);
  226. void ll_hw_read_tfifo_rtlp0(void);
  227. void ll_read_rxfifo0(void);
  228. int ll_hw_read_tfifo_packet0(uint8 *pkt);
  229. void ll_hw_process_RTO0(uint32 ack_num);
  230. void LL_set_default_conn_params0(void);
  231. // =====
  232. void enterSleepProcess0(uint32 time);
  233. void wakeupProcess0(void);
  234. void config_RTC0(uint32 time);
  235. void enter_sleep_off_mode0(Sleep_Mode mode);
  236. void llSlaveEvt_TaskEndOk0( void );
  237. uint8 llSetupNextSlaveEvent0( void );
  238. uint8 llCheckForLstoDuringSL0( llConnState_t *connPtr );
  239. uint8 llProcessSlaveControlProcedures0( llConnState_t *connPtr );
  240. void llProcessSlaveControlPacket0( llConnState_t *connPtr,
  241. uint8 *pBuf );
  242. void llSlaveEvt_TaskAbort0(void );
  243. // ------
  244. void llMasterEvt_TaskEndOk0( void );
  245. void llProcessMasterControlPacket0( llConnState_t *connPtr,
  246. uint8 *pBuf );
  247. uint8 llProcessMasterControlProcedures0( llConnState_t *connPtr );
  248. uint8 llSetupNextMasterEvent0( void );
  249. void move_to_master_function0(void);
  250. void LL_master_conn_event0(void);
  251. llStatus_t LL_SetScanControl0( uint8 scanMode,
  252. uint8 filterReports );
  253. llStatus_t LL_SetScanParam0( uint8 scanType,
  254. uint16 scanInterval,
  255. uint16 scanWindow,
  256. uint8 ownAddrType,
  257. uint8 scanWlPolicy );
  258. llStatus_t LL_CreateConn0( uint16 scanInterval,
  259. uint16 scanWindow,
  260. uint8 initWlPolicy,
  261. uint8 peerAddrType,
  262. uint8 *peerAddr,
  263. uint8 ownAddrType,
  264. uint16 connIntervalMin,
  265. uint16 connIntervalMax,
  266. uint16 connLatency,
  267. uint16 connTimeout,
  268. uint16 minLength,
  269. uint16 maxLength );
  270. llStatus_t LL_CreateConnCancel0( void );
  271. llStatus_t LL_StartEncrypt0( uint16 connId,
  272. uint8 *rand,
  273. uint8 *eDiv,
  274. uint8 *ltk );
  275. void llSetupScan0( uint8 chan );
  276. // ================== ll.c
  277. void LL_Init0( uint8 taskId );
  278. uint16 LL_ProcessEvent0( uint8 task_id, uint16 events );
  279. llStatus_t LL_Reset0( void );
  280. llStatus_t LL_TxData0( uint16 connId, uint8 *pBuf, uint8 pktLen, uint8 fragFlag );
  281. llStatus_t LL_Disconnect0( uint16 connId, uint8 reason );
  282. llStatus_t LL_SetAdvParam0( uint16 advIntervalMin,
  283. uint16 advIntervalMax,
  284. uint8 advEvtType,
  285. uint8 ownAddrType,
  286. uint8 directAddrType,
  287. uint8 *directAddr,
  288. uint8 advChanMap,
  289. uint8 advWlPolicy );
  290. llStatus_t LL_SetAdvData0( uint8 advDataLen, uint8 *advData );
  291. llStatus_t LL_SetAdvControl0( uint8 advMode );
  292. llStatus_t LL_EXT_SetTxPower0( uint8 txPower, uint8 *cmdComplete );
  293. llStatus_t LL_ClearWhiteList0( void );
  294. llStatus_t LL_AddWhiteListDevice0( uint8 *devAddr, uint8 addrType );
  295. llStatus_t LL_RemoveWhiteListDevice0( uint8 *devAddr, uint8 addrType );
  296. llStatus_t LL_ReadWlSize0( uint8 *numEntries );
  297. llStatus_t LL_ReadTxPowerLevel0( uint8 connId, uint8 type, int8 *txPower );
  298. llStatus_t LL_SetTxPowerLevel0( int8 txPower );
  299. llStatus_t LL_ReadAdvChanTxPower0( int8 *txPower );
  300. llStatus_t LL_ReadRssi0( uint16 connId, int8 *lastRssi );
  301. llStatus_t LL_ReadRemoteUsedFeatures0( uint16 connId );
  302. llStatus_t LL_Encrypt0( uint8 *key, uint8 *plaintextData, uint8 *encryptedData );
  303. llStatus_t LL_DirectTestEnd0( void );
  304. llStatus_t LL_DirectTestTxTest0( uint8 txFreq, uint8 payloadLen, uint8 payloadType );
  305. llStatus_t LL_DirectTestRxTest0( uint8 rxFreq );
  306. // ================ ll_common.c
  307. void llProcessTxData0( llConnState_t *connPtr, uint8 context );
  308. uint8 llProcessRxData0( void );
  309. uint8 llWriteTxData0( llConnState_t *connPtr,
  310. uint8 pktHdr,
  311. uint8 pktLen,
  312. uint8 *pBuf );
  313. void llConnTerminate0( llConnState_t *connPtr, uint8 reason );
  314. void llReleaseConnId0( llConnState_t *connPtr );
  315. // ================ ll_enc.c
  316. void LL_ENC_AES128_Encrypt0( uint8 *key,
  317. uint8 *plaintext,
  318. uint8 *ciphertext );
  319. uint8 LL_ENC_GenerateTrueRandNum0( uint8 *buf,
  320. uint8 len );
  321. void LL_ENC_GenDeviceSKD0( uint8 *SKD );
  322. void LL_ENC_GenDeviceIV0( uint8 *IV );
  323. void LL_ENC_GenerateNonce0( uint32 pktCnt,
  324. uint8 direction,
  325. uint8 *nonce );
  326. void LL_ENC_Encrypt0( llConnState_t *connPtr,
  327. uint8 pktHdr,
  328. uint8 pktLen,
  329. uint8 *pBuf );
  330. uint8 LL_ENC_Decrypt0( llConnState_t *connPtr,
  331. uint8 pktHdr,
  332. uint8 pktLen,
  333. uint8 *pBuf );
  334. // =================== osal
  335. void osal_pwrmgr_powerconserve0( void ) ;
  336. // =================== ll_hw_drv.c
  337. void ll_hw_set_timing0(uint8 pktFmt);
  338. void ll_hw_go0(void);
  339. void ll_hw_trigger0(void);
  340. // ================== SMP functions
  341. void SM_Init0( uint8 task_id );
  342. uint16 SM_ProcessEvent0( uint8 task_id, uint16 events );
  343. // ================== HCI_TL functions
  344. void HCI_Init0( uint8 task_id );
  345. uint16 HCI_ProcessEvent0( uint8 task_id, uint16 events );
  346. // ======= OSAL memory
  347. void osal_mem_init0(void);
  348. // =========== ROM -> APP function
  349. void app_sleep_process(void);
  350. void app_wakeup_process(void);
  351. void rf_init(void);
  352. void boot_init0(void);
  353. void wakeup_init0(void);
  354. void debug_print(uint32 state);
  355. void rf_calibrate0(void);
  356. // ========== A2, for conn-adv, conn-scan
  357. uint8 llSetupSecNonConnectableAdvEvt0( void );
  358. uint8 llSecAdvAllow0(void);
  359. uint32 llCalcMaxScanTime0(void);
  360. void llSetupSecScan0( uint8 chan );
  361. //=============== gap_linkmgr.c
  362. void gapProcessDisconnectCompleteEvt0( hciEvt_DisconnComplete_t *pPkt );
  363. void gapProcessConnectionCompleteEvt0( hciEvt_BLEConnComplete_t *pPkt );
  364. //=============== l2cap_util.c
  365. uint8 l2capParsePacket0( l2capPacket_t *pPkt, hciDataEvent_t *pHciMsg );
  366. uint8 l2capEncapSendData0( uint16 connHandle, l2capPacket_t *pPkt );
  367. uint8 l2capPktToSegmentBuff0(uint16 connHandle, l2capSegmentBuff_t* pSegBuf, uint8 blen,uint8* pBuf);
  368. void l2capPocessFragmentTxData0(uint16 connHandle);
  369. uint8 l2capSegmentBuffToLinkLayer0(uint16 connHandle, l2capSegmentBuff_t* pSegBuf);
  370. void l2capPocessFragmentTxData0(uint16 connHandle);
  371. //=============== DLE
  372. llStatus_t LL_SetDataLengh0( uint16 connId,uint16 TxOctets,uint16 TxTime );
  373. void llPduLengthUpdate0(uint16 connHandle);
  374. void llTrxNumAdaptiveConfig0(void);
  375. //=============== PHY UPDATE
  376. llStatus_t LL_SetPhyMode0( uint16 connId,uint8 allPhy,uint8 txPhy, uint8 rxPhy,uint16 phyOptions);
  377. llStatus_t LL_PhyUpdate0( uint16 connId );
  378. void llSetNextPhyMode0( llConnState_t *connPtr );
  379. #endif // _JUMP_FUNC_H_