pruicss.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583
  1. /*
  2. * Copyright (c) 2015, Texas Instruments Incorporated
  3. * All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions
  7. * are met:
  8. *
  9. * * Redistributions of source code must retain the above copyright
  10. * notice, this list of conditions and the following disclaimer.
  11. *
  12. * * Redistributions in binary form must reproduce the above copyright
  13. * notice, this list of conditions and the following disclaimer in the
  14. * documentation and/or other materials provided with the distribution.
  15. *
  16. * * Neither the name of Texas Instruments Incorporated nor the names of
  17. * its contributors may be used to endorse or promote products derived
  18. * from this software without specific prior written permission.
  19. *
  20. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  22. * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  23. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  24. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  25. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  26. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  27. * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  28. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  29. * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  30. * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31. */
  32. /*
  33. * Copyright (c) 2015, Texas Instruments Incorporated
  34. * All rights reserved.
  35. *
  36. * Redistribution and use in source and binary forms, with or without
  37. * modification, are permitted provided that the following conditions
  38. * are met:
  39. *
  40. * * Redistributions of source code must retain the above copyright
  41. * notice, this list of conditions and the following disclaimer.
  42. *
  43. * * Redistributions in binary form must reproduce the above copyright
  44. * notice, this list of conditions and the following disclaimer in the
  45. * documentation and/or other materials provided with the distribution.
  46. *
  47. * * Neither the name of Texas Instruments Incorporated nor the names of
  48. * its contributors may be used to endorse or promote products derived
  49. * from this software without specific prior written permission.
  50. *
  51. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  52. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  53. * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  54. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  55. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  56. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  57. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  58. * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  59. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  60. * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  61. * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  62. */
  63. /** ============================================================================
  64. * @file pruicss.h
  65. *
  66. * @brief pruicss driver interface
  67. *
  68. * The pruss header file should be included in an application as follows:
  69. * @code
  70. * #include <ti/drv/pruss/pruss.h>
  71. * @endcode
  72. *
  73. * ============================================================================
  74. */
  75. #ifndef ti_drivers_PRUICSS__include
  76. #define ti_drivers_PRUICSS__include
  77. #ifdef __cplusplus
  78. extern "C" {
  79. #endif
  80. #include <stdint.h>
  81. #include <stddef.h>
  82. #define PRUICSS_NUM_PRU_HOSTS (10U)
  83. #define PRUICSS_NUM_PRU_CHANNELS (10U)
  84. #define PRUICSS_NUM_PRU_SYS_EVTS (64U)
  85. #define PRUICSS_MAX_WAIT_EVENTS (10U)
  86. #define PRUICSS_PRU0_DATARAM (0U)
  87. #define PRUICSS_PRU1_DATARAM (1U)
  88. #define PRUICSS_PRU0_IRAM (2U)
  89. #define PRUICSS_PRU1_IRAM (3U)
  90. #define PRUICSS_SHARED_DATARAM (4U)
  91. #define PRUICSS_CFG (5U)
  92. #define PRUICSS_UART (6U)
  93. #define PRUICSS_IEP (7U)
  94. #define PRUICSS_ECAP (8U)
  95. #define PRUICSS_MII_RT (9U)
  96. #define PRUICSS_MDIO (10U)
  97. /**< Invalid Intc Mux number, intc Mux not used if assigned PRUSS_INVALID_INTC_MUX_NUM */
  98. #define PRUSS_INVALID_INTC_MUX_NUM ((uint32_t)0xffff)
  99. /*!
  100. * @brief PRUICSS Instance IDs
  101. */
  102. typedef enum PRUICSS_MaxInstances_s
  103. {
  104. PRUICCSS_INSTANCE_ONE=1,
  105. PRUICCSS_INSTANCE_TWO=2,
  106. PRUICCSS_INSTANCE_MAX=3
  107. }PRUICSS_MaxInstances;
  108. /** \brief Interrupt handler */
  109. typedef void (*PRUICSSDRV_IRQ_HANDLER)(void* buf);
  110. typedef struct PRUICSS_Config_s *PRUICSS_Handle;
  111. /*!
  112. * @brief PRUICSS Constant Table Register Entries
  113. */
  114. typedef enum PRUICSS_ConstTblEntry_s
  115. {
  116. PRUICCSS_ConstTblEntryC24,
  117. PRUICCSS_ConstTblEntryC25,
  118. PRUICCSS_ConstTblEntryC26,
  119. PRUICCSS_ConstTblEntryC27,
  120. PRUICCSS_ConstTblEntryC28,
  121. PRUICCSS_ConstTblEntryC29,
  122. PRUICCSS_ConstTblEntryC30,
  123. PRUICCSS_ConstTblEntryC31,
  124. PRUICCSS_ConstTblEntryMax
  125. }PRUICSS_ConstTblEntry;
  126. /***********************************************************************
  127. * Macros to support dynamic chip detecting feature
  128. ***********************************************************************/
  129. typedef void *(*prussdrv_function_handler) (void * buf);
  130. /*!
  131. * @brief PRUICSS system to channel map
  132. *
  133. */
  134. typedef struct PRUICSS_SysevtToChannelMap_s
  135. {
  136. uint8_t sysevt; /*System event number */
  137. uint8_t channel; /*Channel number */
  138. uint8_t polarity; /*Interrupt polarity [ 0 - active low , 1 - active high ] */
  139. uint8_t type; /*Interrupt type [ 0 - level or pulse interrupt , 1 - edge interrupt ] */
  140. }PRUICSS_SysevtToChannelMap;
  141. /*!
  142. * @brief PRUICSS channel to host map
  143. *
  144. */
  145. typedef struct PRUICSS_ChannelToHostMap_s
  146. {
  147. int16_t channel;
  148. int16_t host;
  149. }PRUICSS_ChannelToHostMap;
  150. /*!
  151. * @brief PRUICSS Interrupt controller initialisation data structure
  152. *
  153. */
  154. typedef struct PRUICSS_IntcInitData_s
  155. {
  156. /*Enabled SYSEVTs - Range:0..63
  157. {-1} indicates end of list*/
  158. int8_t sysevts_enabled[PRUICSS_NUM_PRU_SYS_EVTS];
  159. /*SysEvt to Channel map. SYSEVTs - Range:0..63 Channels -Range: 0..9
  160. {-1, -1} indicates end of list*/
  161. PRUICSS_SysevtToChannelMap sysevt_to_channel_map[PRUICSS_NUM_PRU_SYS_EVTS];
  162. /*Channel to Host map.Channels -Range: 0..9 HOSTs - Range:0..9
  163. {-1, -1} indicates end of list*/
  164. PRUICSS_ChannelToHostMap channel_to_host_map[PRUICSS_NUM_PRU_CHANNELS];
  165. /*10-bit mask - Enable Host0-Host9 {Host0/1:PRU0/1, Host2..9 : PRUEVT_OUT0..7)*/
  166. uint32_t host_enable_bitmask;
  167. }PRUICSS_IntcInitData;
  168. /*!
  169. * @brief brief PRUICSS Global configuration
  170. *
  171. */
  172. typedef struct PRUICSS_Config_s {
  173. /*! Pointer to a driver specific data object */
  174. void *object;
  175. /*! Pointer to a driver specific hardware attributes structure */
  176. void const *hwAttrs;
  177. } PRUICSS_Config;
  178. extern PRUICSS_Config pruss_config[];
  179. /*!
  180. * @brief brief PRUICSS IRQ handlers mapping
  181. *
  182. */
  183. typedef struct PRUICSS_IrqFunMap_s
  184. {
  185. PRUICSSDRV_IRQ_HANDLER irqHandler;
  186. /**< Interrupt handler*/
  187. void* semHandle;
  188. /**< Binary semaphore to wait on */
  189. void* handle;
  190. }PRUICSS_IrqFunMap;
  191. /**
  192. * \brief PRU Firmware binary header
  193. *
  194. */
  195. typedef struct PRUICSS_FirmwareBinHeader_s
  196. {
  197. uint32_t image_size;
  198. /**< Image size */
  199. uint32_t load_addr;
  200. /**< Address to which this binary need to be loaded */
  201. uint32_t run_addr;
  202. /**< Address at which the execution should start */
  203. }PRUICSS_FirmwareBinHeader;
  204. /*!
  205. * @brief PRUICSS interrupt config structure
  206. *
  207. * Default interrrupt configuration parametetrs
  208. */
  209. typedef struct PRUICSS_IntrCfg_s
  210. {
  211. uint32_t pruEvtoutNum; /**< PRU Event number */
  212. uint8_t waitEnable; /**< Flag specifying whether application can wait on this interrupt
  213. using PRUICSSPruWaitEvent function */
  214. PRUICSSDRV_IRQ_HANDLER irqHandler; /**< Pointer to a function which will be called on interrupt.*/
  215. /**< DSP: int vector number; ARM: GIC int number (peripheral event ID + 32) */
  216. uint32_t intNum;
  217. /**< CorePac specific Event ID, input to CorePac interrupt controller */
  218. uint32_t eventId;
  219. /**< intc mux number, Keystone inc mux is Chip Interrupt Controller
  220. if assigned -1, system resource manager will decide the mux num */
  221. int32_t intcMuxNum;
  222. /**< intc mux input event ID, for Keystone, it is the input event to CIC
  223. if assigned -1, system resource manager will decide the mux input event ID */
  224. int32_t intcMuxInEvent;
  225. /**< intc mux output event ID, for Keystone, it is the Host interrupt num
  226. if assigned -1, system resource manager will decide the mux output event ID */
  227. int32_t intcMuxOutEvent;
  228. }PRUICSS_IntrCfg;
  229. typedef enum PRUICSS_Return_e
  230. {
  231. PRUICSS_RETURN_FAILURE = -1,
  232. PRUICSS_RETURN_SUCCESS = 0
  233. }PRUICSS_Return;
  234. /**
  235. * @brief This function creates the handle for the PRUICSS instance \n
  236. *
  237. * @param config configuration structure of PRUICSS.
  238. * @param instance PRUICSS instance no.
  239. *
  240. * @return PRUICSS handle. \n
  241. */
  242. PRUICSS_Handle PRUICSS_create(PRUICSS_Config *config ,int32_t instance);
  243. /**
  244. * @brief This function Executes the program in the specified PRU \n
  245. *
  246. * @param handle Pruss's driver handle
  247. * @param pruNum PRU instance number.\n
  248. *
  249. * @return 0 in case of successful transition, -1 otherwise. \n
  250. */
  251. int32_t PRUICSS_pruExecProgram(PRUICSS_Handle handle,int32_t pruNum );
  252. /**
  253. * @brief Routine to
  254. *
  255. * @param handle Pruss's driver handle
  256. * @param pru_instance PRU instance number
  257. * @param spi_offset Offset on SPI flash to where this need to be flashed
  258. *
  259. *
  260. * @return None.
  261. *
  262. **/
  263. int8_t PRUICSS_loadBinary (PRUICSS_Handle handle, uint8_t pru_instance,uint32_t spi_offset);
  264. /**
  265. * @brief This function waits for a System event to happen \n
  266. *
  267. * @param handle Pruss's driver handle
  268. * @param pruEvtoutNum The AINTC Event number.\n
  269. *
  270. * @return 0 in case of successful transition, -1 otherwise. \n
  271. */
  272. int32_t PRUICSS_pruWaitEvent(PRUICSS_Handle handle,uint32_t pruEvtoutNum );
  273. /**
  274. * @brief This function does Interrupt-Channel-host mapping.
  275. *
  276. * @param handle Pruss's driver handle
  277. * @param prussintc_init_data The pointer to structure containing mapping information.
  278. *
  279. * @return 0 in case of successful transition, -1 otherwise. \n
  280. */
  281. int32_t PRUICSS_pruIntcInit(PRUICSS_Handle handle, const PRUICSS_IntcInitData * prussintc_init_data);
  282. /**
  283. * \brief This function generates and INTC event, waits for AINTC event and
  284. * clears an INTC event \n
  285. *
  286. * @param handle Pruss's driver handle
  287. * @param sendEventNum Event number.\n
  288. * @param pruEvtoutNum PRU Event number.\n
  289. * @param ackEventNum Acknowlodegement event number.\n
  290. *
  291. * \return 0 in case of successful transition, -1 otherwise. \n
  292. */
  293. int32_t PRUICSS_pruSendWaitCearEvent(PRUICSS_Handle handle,uint32_t sendEventNum,
  294. uint32_t pruEvtoutNum,
  295. uint32_t ackEventNum
  296. );
  297. /**
  298. * @brief This function Registers an Interrupt Handler for an event.\n
  299. *
  300. * @param handle Pruss's driver handle
  301. *
  302. * @param pruEvtoutNum The ARM side event number.\n
  303. *
  304. * @param intrNum Interrupt number of MPU/C66x
  305. *
  306. * @param eventNum Event number of PRUICSS
  307. *
  308. * @param waitEnable Flag specifying whether application can wait on this interrupt
  309. * using PRUICSSPruWaitEvent function
  310. *
  311. * @param irqHandler Pointer to a function which will be called on interrupt.\n
  312. *
  313. *
  314. * \return 0 in case of successful registration, -1 otherwise. \n
  315. */
  316. int32_t PRUICSS_registerIrqHandler(PRUICSS_Handle handle,uint32_t pruEvtoutNum,
  317. int32_t intrNum,
  318. int32_t eventNum,
  319. uint8_t waitEnable,
  320. PRUICSSDRV_IRQ_HANDLER irqHandler
  321. );
  322. /**
  323. * @brief This function Registers an Interrupt Handler for an event.\n
  324. *
  325. * @param handle Pruss's driver handle
  326. *
  327. *
  328. * @param intrCfg pointer to interrupt configuration parameter
  329. *
  330. * \return 0 in case of successful registration, -1 otherwise. \n
  331. */
  332. int32_t PRUICSS_registerIrqHandler2(PRUICSS_Handle handle,
  333. PRUICSS_IntrCfg* intrCfg);
  334. /**
  335. * @brief This function sets the buffer pointer for PRU. The contents of this buffer will be \n
  336. * loaded to IRAM.\n
  337. *
  338. * @param handle Pruss's driver handle
  339. * @param pruNum The PRU number.\n
  340. * @param buffer Pointer to buffer.\n
  341. * @param numBytes Number of bytes in the buffer.\n
  342. *
  343. * @return 0 in case of successful transition, -1 otherwise. \n
  344. */
  345. int32_t PRUICSS_setPRUBuffer(PRUICSS_Handle handle,
  346. uint32_t pruNum,
  347. void *buffer,
  348. uint32_t numBytes);
  349. /**
  350. * @brief Configure PIN_MUX_SEL
  351. *
  352. * @param handle Pruss's driver handle
  353. * @param regVal value to be written
  354. *
  355. * @return None.
  356. *
  357. **/
  358. void PRUICSS_pinMuxConfig(PRUICSS_Handle handle, uint64_t regVal);
  359. /*The following are the static functions to be moved to .c file.*/
  360. /**
  361. * @brief Resets PRU: \n
  362. *
  363. * @param handle Pruss's driver handle
  364. * @param pruNum PRU instance number[0 or 1].
  365. *
  366. * @return 0 in case of successful reset, -1 otherwise.
  367. **/
  368. int32_t PRUICSS_pruReset(PRUICSS_Handle handle ,uint8_t pruNum);
  369. /**
  370. * @brief Disables PRU: \n
  371. *
  372. * @param handle Pruss's driver handle
  373. * @param pruNum PRU instance number[0 or 1].
  374. *
  375. * @return 0 in case of successful disable, -1 otherwise.
  376. **/
  377. int32_t PRUICSS_pruDisable(PRUICSS_Handle handle,uint8_t pruNum);
  378. /**
  379. * @brief Enables PRU: \n
  380. *
  381. * @param handle Pruss's driver handle
  382. * @param pruNum PRU instance number[0 or 1].
  383. *
  384. * @return 0 in case of successful enable, -1 otherwise.
  385. **/
  386. int32_t PRUICSS_pruEnable(PRUICSS_Handle handle,uint8_t pruNum);
  387. /**
  388. *
  389. * @brief This function writes the given data to PRU memory
  390. *
  391. * @param handle Pruss's driver handle
  392. * @param pruMem PRU Memory Macro [DATARAM0_PHYS_BASE
  393. * @param wordoffset Offset at which the write will happen.
  394. * @param source_mem Source memory[ Array of uint32_tegers ]
  395. * @param bytelength Total number of bytes to be writen
  396. *
  397. * pruMem can have values
  398. * PRU0_DATARAM\n
  399. * PRU0_IRAM\n
  400. * PRU1_DATARAM\n
  401. * PRU1_IRAM\n
  402. * PRUICSS_SHARED_DATARAM
  403. * @return word length written or 0 on error.
  404. *
  405. **/
  406. int32_t PRUICSS_pruWriteMemory(PRUICSS_Handle handle,
  407. uint32_t pruMem,
  408. uint32_t wordoffset,
  409. const uint32_t *source_mem,
  410. uint32_t bytelength
  411. );
  412. /**
  413. * @brief This function Generates an INTC event \n
  414. *
  415. * @param handle Pruss's driver handle
  416. * @param eventnum The INTC Event number.\n
  417. *
  418. * @return 0 in case of successful transition, -1 otherwise. \n
  419. **/
  420. int32_t PRUICSS_pruSendEvent(PRUICSS_Handle handle,uint32_t eventnum);
  421. /**
  422. * @brief This function clears an INTC event \n
  423. *
  424. * @param handle Pruss's driver handle
  425. * @param eventnum The INTC Event number.\n
  426. *
  427. * @return 0 in case of successful transition, -1 otherwise. \n
  428. **/
  429. int32_t PRUICSS_pruClearEvent(PRUICSS_Handle handle,uint32_t eventnum);
  430. /**
  431. * @brief This function returns the address of PRU components.
  432. *
  433. * @param handle Pruss's driver handle
  434. * @param pru_ram_id PRU components' Id. \n
  435. * @param address Memory to which address to be copied. \n
  436. *
  437. * @return 0 in case of success, -1 otherwise. \n
  438. **/
  439. int32_t PRUICSS_mapPruMem(PRUICSS_Handle handle,uint32_t pru_ram_id, void **address);
  440. /**
  441. * @brief This function returns the base address of peripheral IO modules.
  442. *
  443. * @param per_id Peripheral Module's Id.
  444. *
  445. * @param handle Pruss's driver handle
  446. * @param address Memory to which address to be copied. \n
  447. *
  448. * @return 0 in case of success, -1 otherwise. \n
  449. **/
  450. int32_t PRUICSS_mapPeripheralIO(PRUICSS_Handle handle,uint32_t per_id, void **address);
  451. void PRUICSS_enableOCPMasterAccess(PRUICSS_Handle handle );
  452. /**
  453. * @brief Detects the Chip Type \n
  454. *
  455. */
  456. uint32_t PRUICSS_detectHWVersion(void);
  457. /**
  458. * @brief Get PRU ICSS version \n
  459. *
  460. * @param handle Pruss's driver handle
  461. *
  462. * @return PRU ICSS version
  463. **/
  464. uint32_t PRUICSS_getICSSVersion(PRUICSS_Handle handle);
  465. /**
  466. * \brief This API gets the SoC level of PRUICSS intial configuration
  467. *
  468. * \param cfg Pointer to PRUICSS SOC initial config.
  469. *
  470. * \return 0 success
  471. *
  472. */
  473. int32_t PRUICSS_socGetInitCfg( PRUICSS_Config **cfg);
  474. /**
  475. * \brief This API sets the SoC level of PRUICSS intial configuration
  476. *
  477. * \param cfg Pointer to PRUICSS SOC initial config.
  478. *
  479. * \return 0 success
  480. *
  481. */
  482. int32_t PRUICSS_socSetInitCfg(PRUICSS_Config *cfg);
  483. /**
  484. * @brief This function clears all Interrupt-Channel-host mapping.
  485. *
  486. * @param handle Pruss's driver handle
  487. *
  488. * @return 0 in case of successful transition, -1 otherwise. \n
  489. */
  490. int32_t PRUICSS_pruIntcClear(PRUICSS_Handle handle);
  491. /**
  492. * \brief This API updates the constant table for specified constant table entry
  493. which have write permissions.
  494. *
  495. * @param handle Pruss's driver handle
  496. * @param pruNum PRU number[0 or 1] for which constant table is being updated.
  497. * @param constantTblEntry contant table entry being updated
  498. * @param constantTblVal contant table value to be written
  499. *
  500. * \return 0 success, -1 on error
  501. *
  502. */
  503. int32_t PRUICSS_setConstantTblEntry(PRUICSS_Handle handle, uint8_t pruNum, int32_t constantTblEntry, uint32_t constantTblVal);
  504. /**
  505. * \brief This API configures the General Purpose Mux Selector field of
  506. * the General Purpose Config Register (PRUSS_GPCFG)
  507. *
  508. * @param handle Pruss's driver handle
  509. * @param pruNum PRU number[0 or 1].
  510. * @param mode PRU-ICSS wrap mux selection
  511. *
  512. * \return 0 success, -1 on error
  513. *
  514. */
  515. int32_t PRUICSS_setGpMuxSel(PRUICSS_Handle handle, uint8_t pruNum, uint32_t mode);
  516. #ifdef __cplusplus
  517. }
  518. #endif
  519. #endif /* ti_drivers_PRUICSS__include */