1 /******************************************************************************
2 * @file  rsi_rom_table_si91x.h
3 *******************************************************************************
4 * # License
5 * <b>Copyright 2024 Silicon Laboratories Inc. www.silabs.com</b>
6 *******************************************************************************
7 *
8 * SPDX-License-Identifier: Zlib
9 *
10 * The licensor of this software is Silicon Laboratories Inc.
11 *
12 * This software is provided 'as-is', without any express or implied
13 * warranty. In no event will the authors be held liable for any damages
14 * arising from the use of this software.
15 *
16 * Permission is granted to anyone to use this software for any purpose,
17 * including commercial applications, and to alter it and redistribute it
18 * freely, subject to the following restrictions:
19 *
20 * 1. The origin of this software must not be misrepresented; you must not
21 *    claim that you wrote the original software. If you use this software
22 *    in a product, an acknowledgment in the product documentation would be
23 *    appreciated but is not required.
24 * 2. Altered source versions must be plainly marked as such, and must not be
25 *    misrepresented as being the original software.
26 * 3. This notice may not be removed or altered from any source distribution.
27 *
28 ******************************************************************************/
29 
30 /**
31  * Includes
32  */
33 #ifndef __RSI_ROM_TABLE_RS9116_H__
34 #define __RSI_ROM_TABLE_RS9116_H__
35 #include "rsi_ccp_user_config.h"
36 #if defined(A11_ROM)
37 #include <stdint.h>
38 #include "rsi_error.h"
39 #include "rsi_timers.h"
40 #include "rsi_ulpss_clk.h"
41 #include "rsi_pll.h"
42 #include "rsi_power_save.h"
43 #include "rsi_egpio.h"
44 #include "rsi_crc.h"
45 #include "rsi_ulpss_clk.h"
46 #include "rsi_qspi_proto.h"
47 #include "rsi_qspi.h"
48 #include "rsi_rng.h"
49 #include "rsi_gpdma.h"
50 #include "rsi_ct.h"
51 #include "rsi_timers.h"
52 #include "rsi_udma.h"
53 #include "rsi_reg_spi.h"
54 #include "rsi_processor_sensor.h"
55 #include "rsi_retention.h"
56 #include "rsi_temp_sensor.h"
57 #include "rsi_time_period.h"
58 #include "rsi_wwdt.h"
59 #include "rsi_ipmu.h"
60 #if !defined(SLI_SI917B0) && !defined(SLI_SI915)
61 #include "rsi_efuse.h"
62 #include "rsi_pwm.h"
63 #endif
64 #include "rsi_udma_wrapper.h"
65 #include "UDMA.h"
66 #include "USART.h"
67 #include "GSPI.h"
68 #include "SAI.h"
69 #include "I2C.h"
70 #include "SPI.h"
71 #ifdef __cplusplus
72 extern "C" {
73 #endif
74 /* @brief  ROM indirect function structure */
75 
76 ///////////////////EGPIO//////////////////////////
77 typedef struct {
78   void (*egpio_set_dir)(EGPIO_Type *pEGPIO, uint8_t port, uint8_t pin, boolean_t dir);
79   void (*egpio_set_pin)(EGPIO_Type *pEGPIO, uint8_t port, uint8_t pin, uint8_t val);
80   boolean_t (*egpio_get_pin)(const EGPIO_Type *pEGPIO, uint8_t port, uint8_t pin);
81   boolean_t (*egpio_get_dir)(const EGPIO_Type *pEGPIO, uint8_t port, uint8_t pin);
82   void (*egpio_pin_int_sel)(EGPIO_Type *pEGPIO, uint8_t intCh, uint8_t port, uint8_t pin);
83   void (*egpio_set_int_fall_edge_enable)(EGPIO_Type *pEGPIO, uint8_t intCh);
84   void (*egpio_set_int_fall_edge_disable)(EGPIO_Type *pEGPIO, uint8_t intCh);
85   void (*egpio_set_int_rise_edge_enable)(EGPIO_Type *pEGPIO, uint8_t intCh);
86   void (*egpio_set_int_rise_edge_disable)(EGPIO_Type *pEGPIO, uint8_t intCh);
87   void (*egpio_set_int_low_level_enable)(EGPIO_Type *pEGPIO, uint8_t intCh);
88   void (*egpio_int_mask)(EGPIO_Type *pEGPIO, uint8_t intCh);
89   void (*egpio_int_un_mask)(EGPIO_Type *pEGPIO, uint8_t intCh);
90   void (*egpio_set_int_low_level_disable)(EGPIO_Type *pEGPIO, uint8_t intCh);
91   void (*egpio_set_int_high_level_enable)(EGPIO_Type *pEGPIO, uint8_t intCh);
92   void (*egpio_set_int_high_level_disable)(EGPIO_Type *pEGPIO, uint8_t intCh);
93   uint8_t (*egpio_get_int_stat)(const EGPIO_Type *pEGPIO, uint8_t intCh);
94   void (*egpio_int_clr)(EGPIO_Type *pEGPIO, uint8_t intCh, uint8_t flags);
95   void (*egpio_set_pin_mux)(EGPIO_Type *pEGPIO, uint8_t port, uint8_t pin, uint8_t mux);
96   void (*egpio_ulp_soc_gpio_mode)(ULPCLK_Type *pULPCLK, uint8_t gpio, uint8_t mode);
97   void (*egpio_set_port_mask)(EGPIO_Type *pEGPIO, uint8_t port, uint8_t pin);
98   void (*egpio_set_port_un_mask)(EGPIO_Type *pEGPIO, uint8_t port, uint8_t pin);
99   void (*egpio_port_masked_load)(EGPIO_Type *pEGPIO, uint8_t port, uint16_t val);
100   void (*egpio_set_port)(EGPIO_Type *pEGPIO, uint8_t port, uint16_t val);
101   void (*egpio_port_load)(EGPIO_Type *pEGPIO, uint8_t port, uint16_t val);
102   void (*egpio_word_load)(EGPIO_Type *pEGPIO, uint8_t pin, uint16_t val);
103   void (*egpio_clr_port)(EGPIO_Type *pEGPIO, uint8_t port, uint16_t val);
104   void (*egpio_toggle_port)(EGPIO_Type *pEGPIO, uint8_t port, uint16_t val);
105   uint16_t (*egpio_get_port)(const EGPIO_Type *pEGPIO, uint8_t port);
106   void (*egpio_group_int_one_enable)(EGPIO_Type *pEGPIO, uint8_t port, uint8_t pin);
107   void (*egpio_group_int_one_disable)(EGPIO_Type *pEGPIO, uint8_t port, uint8_t pin);
108   void (*egpio_group_int_two_enable)(EGPIO_Type *pEGPIO, uint8_t port, uint8_t pin);
109   void (*egpio_group_int_mask)(EGPIO_Type *pEGPIO, uint8_t grpInt);
110   void (*egpio_group_int_un_Mask)(EGPIO_Type *pEGPIO, uint8_t grpInt);
111   void (*egpio_group_int_enable)(EGPIO_Type *pEGPIO, uint8_t grpInt);
112   void (*egpio_group_int_disable)(EGPIO_Type *pEGPIO, uint8_t grpInt);
113   void (*egpio_group_int_level)(EGPIO_Type *pEGPIO, uint8_t grpInt);
114   void (*egpio_group_int_edge)(EGPIO_Type *pEGPIO, uint8_t grpInt);
115   void (*egpio_group_int_and)(EGPIO_Type *pEGPIO, uint8_t grpInt);
116   void (*egpio_group_int_or)(EGPIO_Type *pEGPIO, uint8_t grpInt);
117   uint32_t (*egpio_group_int_stat)(const EGPIO_Type *pEGPIO, uint8_t grpInt);
118   void (*egpio_group_int_wkeup_Enable)(EGPIO_Type *pEGPIO, uint8_t grpInt);
119   void (*egpio_group_int_wkeup_disable)(EGPIO_Type *pEGPIO, uint8_t grpInt);
120   void (*egpio_group_int_clr)(EGPIO_Type *pEGPIO, uint8_t grpInt, uint8_t flags);
121   void (*egpio_group_int_two_disable)(EGPIO_Type *pEGPIO, uint8_t port, uint8_t pin);
122   void (*egpio_set_group_int_one_pol)(EGPIO_Type *pEGPIO, uint8_t port, uint8_t pin, uint8_t pol);
123   void (*egpio_set_group_int_two_pol)(EGPIO_Type *pEGPIO, uint8_t port, uint8_t pin, uint8_t pol);
124   void (*egpio_host_pads_gpio_mode_enable)(uint8_t u8GpioNum);
125   void (*egpio_host_pads_gpio_mode_disable)(uint8_t u8GpioNum);
126   void (*egpio_pad_selection_enable)(uint8_t padNum);
127   void (*egpio_pad_selection_disable)(uint8_t padNum);
128   void (*egpio_pad_receiver_enable)(uint8_t u8GpioNum);
129   void (*egpio_pad_receiver_disable)(uint8_t u8GpioNum);
130   void (*egpio_pad_sdio_connected)(void);
131   void (*egpio_pad_driver_disable_state)(uint8_t u8GpioNum, en_driver_state_t endstate);
132   void (*egpio_pad_driver_strength_select)(uint8_t u8GpioNum, en_driver_strength_select_t strength);
133   void (*egpio_pad_power_on_start_enable)(uint8_t u8GpioNum, uint8_t val);
134   void (*egpio_pad_active_high_schmitt_trigger)(uint8_t u8GpioNum, uint8_t val);
135   void (*egpio_pad_slew_rate_controll)(uint8_t u8GpioNum, uint8_t val);
136   void (*egpio_ulp_pad_receiver_enable)(uint8_t u8GpioNum);
137   void (*egpio_ulp_pad_receiver_disable)(uint8_t u8GpioNum);
138   void (*egpio_ulp_pad_driver_disable_state)(uint8_t u8GpioNum, en_ulp_driver_disable_state_t disablestate);
139   void (*egpio_ulp_pad_driver_strength_select)(uint8_t u8GpioNum, en_ulp_driver_strength_select_t strength);
140   void (*egpio_ulp_pad_power_on_start_enable)(uint8_t u8GpioNum, uint8_t val);
141   void (*egpio_ulp_pad_active_high_schmitt_trigger)(uint8_t u8GpioNum, uint8_t val);
142   void (*egpio_ulp_pad_slew_rate_controll)(uint8_t u8GpioNum, uint8_t val);
143 } ROM_EGPIO_API_T;
144 ///////////////////EGPIO END//////////////////////////
145 
146 /** @brief CRC ROM indirect function structure */
147 typedef PRE_PACK struct POST_PACK {
148   void (*crc_set_gen_control)(CRC_Type *pCRC);
149   uint32_t (*crc_get_gen_status)(CRC_Type *pCRC);
150   void (*crc_polynomial)(CRC_Type *pCRC, RSI_CRC_PARAMS_T *pCRC_Params);
151   uint32_t (*crc_polynomial_width)(CRC_Type *pCRC, RSI_CRC_PARAMS_T *pCRC_Params);
152   void (*crc_lfsr_init)(CRC_Type *pCRC, RSI_CRC_PARAMS_T *pCRC_Params);
153   uint32_t (*crc_use_swapped_init)(CRC_Type *pCRC, RSI_CRC_PARAMS_T *pCRC_Params);
154   uint32_t (*crc_set_data_width_type)(CRC_Type *pCRC, RSI_CRC_PARAMS_T *pCRC_Params);
155   uint32_t (*crc_set_fifo_thresholds)(CRC_Type *pCRC, RSI_CRC_PARAMS_T *pCRC_Params);
156   uint32_t (*crc_write_data)(CRC_Type *pCRC, RSI_CRC_PARAMS_T *pCRCParams, uint32_t data);
157   uint32_t (*monitor_crc_calc)(CRC_Type *pCRC, RSI_CRC_PARAMS_T *pCRC_Params);
158   void (*crc_lfsr_dynamic_write)(CRC_Type *pCRC, RSI_CRC_PARAMS_T *pCRCParams);
159   void (*crc_reset_fifo)(CRC_Type *pCRC);
160   uint32_t (*crc_get_fifo_status)(CRC_Type *pCRC);
161 } ROM_CRC_API_T;
162 //////////////CRC END/////////////////////////////
163 
164 /** @brief RNG ROM indirect function structure */
165 typedef PRE_PACK struct POST_PACK {
166   uint32_t (*rng_start)(HWRNG_Type *pRNG, uint8_t rngMode);
167   void (*rng_stop)(HWRNG_Type *pRNG);
168   void (*rng_get_bytes)(HWRNG_Type *pRNG, uint32_t *randomBytes, uint32_t numberOfBytes);
169 } ROM_RNG_API_T;
170 ///////////////RNG END//////////////////
171 #if !defined(SLI_SI917B0) && !defined(SLI_SI915)
172 /* @brief  ROM indirect function structure */
173 typedef PRE_PACK struct POST_PACK {
174   void (*efuse_enable)(EFUSE_Type *pstcEfuse);
175   void (*efuse_Disable)(EFUSE_Type *pstcEfuse);
176   uint8_t (*efuse_read_data)(EFUSE_Type *pstcEfuse);
177   void (*efuse_write_addr)(EFUSE_Type *pstcEfuse, uint16_t u16Addr);
178   rsi_error_t (*efuse_write_bit)(EFUSE_Type *pstcEfuse, uint16_t u16Addr, uint8_t u8BitPos, uint32_t hold_time);
179   rsi_error_t (*efuse_fsm_read_byte)(EFUSE_Type *pstcEfuse, uint16_t u16Addr, uint8_t *pu8Byte, uint32_t SocClk);
180   rsi_error_t (*efuse_mem_map_read_byte)(EFUSE_Type *pstcEfuse, uint16_t u16Addr, uint8_t *pu8Byte, uint32_t SocClk);
181   rsi_error_t (*efuse_mem_map_read_word)(EFUSE_Type *pstcEfuse, uint16_t u16Addr, uint16_t *pu16Word, uint32_t SocClk);
182 } ROM_EFUSE_API_T;
183 ///////////////EFUSE END//////////////////
184 #endif
185 typedef PRE_PACK struct POST_PACK {
186   void (*qspi_write_to_flash)(qspi_reg_t *qspi_reg, uint32_t len_in_bits, uint32_t cmd_addr_data, uint32_t cs_no);
187   void (*qspi_switch_qspi2)(qspi_reg_t *qspi_reg, uint32_t mode, uint32_t cs_no);
188   uint32_t (*qspi_wait_flash_status_Idle)(qspi_reg_t *qspi_reg, spi_config_t *spi_config, uint32_t wr_reg_delay_ms);
189   void (*qspi_enable_status_reg_write)(qspi_reg_t *qspi_reg,
190                                        uint32_t flash_type,
191                                        spi_config_t *spi_config,
192                                        uint32_t cs_no);
193   void (*qspi_status_reg_write)(qspi_reg_t *qspi_reg,
194                                 uint32_t write_value,
195                                 spi_config_t *spi_config,
196                                 uint32_t wr_reg_delay_ms);
197   uint32_t (*qspi_flash_reg_read)(qspi_reg_t *qspi_reg, uint8_t reg_read_cmd, uint32_t cs_no, spi_config_t *spi_config);
198   void (*qspi_flash_reg_write)(qspi_reg_t *qspi_reg,
199                                uint32_t reg_write_cmd,
200                                uint32_t reg_write_value,
201                                uint32_t cs_no,
202                                uint32_t wr_reg_delay_ms);
203   void (*qspi_set_flash_mode)(qspi_reg_t *qspi_reg,
204                               uint32_t data_mode,
205                               uint32_t cs_no,
206                               uint32_t ddr_en,
207                               uint32_t flash_type);
208   void (*qspi_config_qflash4_read)(qspi_reg_t *qspi_reg, spi_config_t *spi_config, uint32_t addr);
209   void (*qspi_manual_read)(qspi_reg_t *qspi_reg,
210                            spi_config_t *spi_config,
211                            uint32_t addr,
212                            uint8_t *data,
213                            uint32_t hsize,
214                            uint32_t len_in_bytes,
215                            uint32_t manual_udma_read,
216                            void *udmaHandle,
217                            void *gpdmaHandle);
218   void (*qspi_auto_init)(qspi_reg_t *qspi_reg, spi_config_t *spi_config);
219   void (*qspi_auto_read)(uint32_t cs_no,
220                          uint32_t addr,
221                          uint8_t *data,
222                          uint32_t hsize,
223                          uint32_t len_in_bytes,
224                          spi_config_t *spi_config,
225                          uint32_t dma_flags);
226   void (*qspi_flash_init)(qspi_reg_t *qspi_reg, spi_config_t *spi_config, uint32_t wr_reg_delay_ms);
227   void (*qspi_spi_init)(qspi_reg_t *qspi_reg,
228                         spi_config_t *spi_config,
229                         uint32_t flash_init_req,
230                         uint32_t wr_reg_delay_ms,
231                         uint8_t fifo_thrsld);
232   void (*qspi_spi_erase)(qspi_reg_t *qspi_reg,
233                          spi_config_t *spi_config,
234                          uint32_t erase_cmd,
235                          uint32_t blk_sec_addr,
236                          uint32_t dis_hw_ctrl,
237                          uint32_t wr_reg_delay_ms);
238   uint32_t (*qspi_spi_write)(qspi_reg_t *qspi_reg,
239                              spi_config_t *spi_config,
240                              uint32_t write_cmd,
241                              uint32_t addr,
242                              uint8_t *data,
243                              uint32_t len_in_bytes,
244                              uint16_t page_size,
245                              uint32_t hsize,
246                              uint32_t dis_hw_ctrl,
247                              uint32_t wr_reg_delay_ms,
248                              uint32_t check_en,
249                              uint32_t udma_enable,
250                              void *udmaHandle,
251                              void *gpdmaHandle);
252   void (*qspi_spi_read)(qspi_reg_t *qspi_reg,
253                         spi_config_t *spi_config,
254                         uint32_t addr,
255                         uint8_t *data,
256                         uint32_t hsize,
257                         uint32_t len_in_bytes,
258                         uint32_t manual_udma_read,
259                         void *udmaHandle,
260                         void *gpdmaHandle);
261   void (*qspi_usleep)(uint32_t delay_us); //!< function ptr for halting processor for delay (us) specified
262   void (*qspi_write_block_protect)(qspi_reg_t *qspi_reg,
263                                    uint32_t protect,
264                                    uint32_t cs_no,
265                                    uint32_t num_prot_bytes,
266                                    uint32_t wr_reg_delay_ms);
267 #if defined(SLI_SI917) || defined(SLI_SI915)
268 #if defined(SLI_SI917B0) || defined(SLI_SI915)
269   void (*qspi_qspiload_key)(qspi_reg_t *qspi_reg,
270                             uint8_t mode,
271                             uint32_t *key1,
272                             uint32_t *key2,
273                             uint32_t key_len,
274                             uint32_t kh_enable);
275 #else
276   void (*qspi_qspiload_key)(qspi_reg_t *qspi_reg, uint8_t mode, uint32_t *key, uint32_t kh_enable);
277 #endif
278 #else
279   void (*qspi_qspiload_key)(qspi_reg_t *qspi_reg, uint32_t *key, uint32_t kh_enable);
280 #endif
281   void (*qspi_qspiload_nonce)(qspi_reg_t *qspi_reg, uint32_t *nonce);
282   void (*qspi_seg_sec_en)(qspi_reg_t *qspi_reg, uint32_t seg_no, uint32_t start_addr, uint32_t end_addr);
283   void (*qspi_status_control_reg_write)(spi_config_t *spi_config,
284                                         qspi_reg_t *qspi_reg,
285                                         uint16_t write_command,
286                                         uint32_t addr,
287                                         uint16_t write_value,
288                                         uint32_t cs_no,
289                                         uint32_t wr_reg_delay_ms);
290   void (*qspi_flash_protection)(spi_config_t *spi_config,
291                                 qspi_reg_t *qspi_reg,
292                                 uint32_t protection,
293                                 uint32_t wr_reg_delay_ms);
294   void (*RSI_QSPI_ConfigQspiDll)(spi_config_t *spi_config, qspi_reg_t *qspi_reg);
295   void (*RSI_QSPI_ResetFlash)(qspi_reg_t *qspi_reg, uint32_t cs_no);
296   void (*RSI_QSPI_UpdateOperatingMode_and_ResetType)(qspi_reg_t *qspi_reg, uint32_t operating_mode);
297 } ROM_QSPI_API_T;
298 //////////////////////////QSPI END//////////////////////////
299 
300 /** @brief TIMERS ROM indirect function structure */
301 typedef PRE_PACK struct POST_PACK {
302   RSI_UDMA_HANDLE_T (*udma_init)(void *mem, const RSI_UDMA_INIT_T *pInit);
303 
304   uint32_t (*udma_get_channel_transfer_mode)(RSI_UDMA_HANDLE_T pHandle, const RSI_UDMA_CHA_CFG_T *pCfg);
305   rsi_error_t (*udma_setup_channel_transfer)(RSI_UDMA_HANDLE_T pHandle,
306                                              const RSI_UDMA_CHA_CFG_T *pCfg,
307                                              RSI_UDMA_CHA_CONFIG_DATA_T vsUdmaChaConfigData,
308                                              void *pSrcAddr,
309                                              void *pDstAddr);
310 
311   rsi_error_t (*udma_set_channel_scatter_gather_transfer)(RSI_UDMA_HANDLE_T pHandle,
312                                                           uint8_t dmaCh,
313                                                           uint32_t taskCount,
314                                                           void *pTaskList,
315                                                           uint32_t transferType);
316 
317   uint32_t (*udma_get_channel_transfer_length)(RSI_UDMA_HANDLE_T pHandle,
318                                                const RSI_UDMA_CHA_CFG_T *pCfg,
319                                                RSI_UDMA_CHA_CONFIG_DATA_T vsUDMAChaConfigData);
320 
321   rsi_error_t (*udma_setup_channel)(RSI_UDMA_HANDLE_T pHandle, const RSI_UDMA_CHA_CFG_T *pCfg);
322 
323   void (*udma_deInit)(RSI_UDMA_HANDLE_T pHandle, const RSI_UDMA_CHA_CFG_T *pCfg);
324 
325   void (*udma_interrupt_handler)(RSI_UDMA_HANDLE_T pHandle);
326 
327   rsi_error_t (*udma_interrupt_enable)(RSI_UDMA_HANDLE_T pHandle, uint8_t dmaCh);
328 
329 } ROM_UDMA_API_T;
330 
331 //////////////////////////UDMA END//////////////////////////
332 
333 //////////////////////////UDMA WRAPPERS //////////////////////////
334 typedef PRE_PACK struct POST_PACK {
335   RSI_UDMA_HANDLE_T(*uDMAx_Initialize)
336   (const UDMA_RESOURCES *udma, RSI_UDMA_DESC_T *UDMA_Table, RSI_UDMA_HANDLE_T udmaHandle, uint32_t *mem);
337   int32_t (*uDMAx_Uninitialize)(const UDMA_RESOURCES *udma);
338   int32_t (*uDMAx_ChannelConfigure)(const UDMA_RESOURCES *udma,
339                                     uint8_t ch,
340                                     uint32_t src_addr,
341                                     uint32_t dest_addr,
342                                     uint32_t size,
343                                     RSI_UDMA_CHA_CONFIG_DATA_T control,
344                                     const RSI_UDMA_CHA_CFG_T *config,
345                                     UDMA_SignalEvent_t cb_event,
346                                     UDMA_Channel_Info *chnl_info,
347                                     RSI_UDMA_HANDLE_T udmaHandle);
348   int32_t (*uDMAx_ChannelEnable)(uint8_t ch, const UDMA_RESOURCES *udma, RSI_UDMA_HANDLE_T udmaHandle);
349   int32_t (*uDMAx_DMAEnable)(const UDMA_RESOURCES *udma, RSI_UDMA_HANDLE_T udmaHandle);
350   int32_t (*uDMAx_ChannelDisable)(uint8_t ch, const UDMA_RESOURCES *udma, RSI_UDMA_HANDLE_T udmaHandle);
351   uint32_t (*uDMAx_ChannelGetCount)(uint8_t ch,
352                                     RSI_UDMA_CHA_CONFIG_DATA_T control,
353                                     RSI_UDMA_CHA_CFG_T config,
354                                     const UDMA_RESOURCES *udma,
355                                     RSI_UDMA_HANDLE_T udmaHandle);
356   void (*uDMAx_IRQHandler)(UDMA_RESOURCES *udma, RSI_UDMA_DESC_T *UDMA_Table, UDMA_Channel_Info *chnl_info);
357 
358 } ROM_UDMA_WRAPPER_API_T;
359 //////////////////////////UDMA WRAPPERS END//////////////////////////
360 #if !defined(SLI_SI917B0) && !defined(SLI_SI915)
361 typedef PRE_PACK struct POST_PACK {
362   rsi_error_t (*mcpwm_counter_reset)(RSI_MCPWM_T *pMCPWM, uint8_t chnlNum);
363 
364   rsi_error_t (*mcpwm_channel_reset)(RSI_MCPWM_T *pMCPWM, uint8_t chnlNum);
365 
366   rsi_error_t (*mcpwm_start)(RSI_MCPWM_T *pMCPWM, uint8_t chnlNum);
367 
368   rsi_error_t (*mcpwm_stop)(RSI_MCPWM_T *pMCPWM, uint8_t chnlNum);
369 
370   rsi_error_t (*mcpwm_set_time_period)(RSI_MCPWM_T *pMCPWM, uint8_t chnlNum, uint16_t period, uint16_t initVal);
371 
372   void (*mcpwm_special_event_trigger_config)(RSI_MCPWM_T *pMCPWM,
373                                              boolean_t svtDir,
374                                              RSI_MCPWM_SVT_CONFIG_T *pMCPWMSVTConfig);
375 
376   rsi_error_t (*mcpwm_dead_time_value_set)(RSI_MCPWM_T *pMCPWM,
377                                            RSI_MCPWM_DT_CONFIG_T *pMCPWMDeadTimeConfig,
378                                            uint8_t chnlNum);
379 
380   rsi_error_t (*mcpwm_period_control_config)(RSI_MCPWM_T *pMCPWM,
381                                              uint32_t postScale,
382                                              uint32_t preScale,
383                                              uint8_t chnlNum);
384 
385   rsi_error_t (*mcpwm_fault_avalue_set)(RSI_MCPWM_T *pMCPWM, uint8_t pwmOutput, uint8_t value);
386 
387   rsi_error_t (*mcpwm_fault_bvalue_set)(RSI_MCPWM_T *pMCPWM, uint8_t pwmOutput, uint8_t value);
388 
389   rsi_error_t (*mcpwm_set_base_timer_mode)(RSI_MCPWM_T *pMCPWM, uint8_t mode, uint8_t chnlNum);
390 
391   rsi_error_t (*mcpwm_set_output_mode)(RSI_MCPWM_T *pMCPWM, boolean_t mode, uint8_t chnlNum);
392 
393   void (*mcpwm_set_output_polarity)(RSI_MCPWM_T *pMCPWM, boolean_t polL, boolean_t polH);
394 
395   void (*mcpwm_interrupt_handler)(RSI_MCPWM_T *pMCPWM, RSI_MCPWM_CALLBACK_T *pCallBack);
396 
397 } ROM_MCPWM_API_T;
398 #endif
399 ////////////MCPWM END///////////////////////
400 
401 /* RPDMA Function Pointer Table */
402 typedef PRE_PACK struct POST_PACK {
403   uint32_t (*gpdma_get_mem_size)(void);
404 
405   RSI_GPDMA_HANDLE_T (*gpdma_init)(void *mem, const RSI_GPDMA_INIT_T *pInit);
406 
407   void (*gpdma_register_callback)(RSI_GPDMA_HANDLE_T pHandle, uint32_t cbIndex, gpdmaTransferCompleteCB pCB);
408 
409   rsi_error_t (*gpdma_abort_channel)(RSI_GPDMA_HANDLE_T pHandle, uint8_t dmaCh);
410 
411   rsi_error_t (*gpdma_setup_channel)(RSI_GPDMA_HANDLE_T pHandle, RSI_GPDMA_CHA_CFG_T *pCfg);
412 
413   rsi_error_t (*gpdma_build_descriptors)(RSI_GPDMA_HANDLE_T pHandle,
414                                          RSI_GPDMA_DESC_T *pXferCfg,
415                                          RSI_GPDMA_DESC_T *pDesc,
416                                          RSI_GPDMA_DESC_T *pDescPrev);
417 
418   rsi_error_t (*gpdma_setup_channelTransfer)(RSI_GPDMA_HANDLE_T pHandle, uint8_t dmaCh, RSI_GPDMA_DESC_T *pDesc);
419 
420   void (*gpdma_interrupt_handler)(RSI_GPDMA_HANDLE_T pHandle);
421 
422   void (*gpdma_deInit)(RSI_GPDMA_HANDLE_T pHandle, RSI_GPDMA_CHA_CFG_T *pCfg);
423 
424   rsi_error_t (*gpdma_dma_channel_trigger)(RSI_GPDMA_HANDLE_T pHandle, uint8_t dmaCh);
425 
426   uint32_t (*gpdma_channel_is_enabled)(RSI_GPDMA_HANDLE_T pHandle, uint8_t dmaCh);
427 
428   rsi_error_t (*gpdma_interrupt_disable)(RSI_GPDMA_HANDLE_T pHandle, RSI_GPDMA_CHA_CFG_T *pCfg);
429 
430   rsi_error_t (*gpdma_interrupt_enable)(RSI_GPDMA_HANDLE_T pHandle, RSI_GPDMA_CHA_CFG_T *pCfg);
431 
432   rsi_error_t (*gpdma_error_status_clear)(RSI_GPDMA_HANDLE_T pHandle, RSI_GPDMA_CHA_CFG_T *pCfg);
433 
434   uint32_t (*gpdma_get_error_status)(RSI_GPDMA_HANDLE_T pHandle, RSI_GPDMA_CHA_CFG_T *pCfg);
435 
436   rsi_error_t (*gpdma_interrupt_clear)(RSI_GPDMA_HANDLE_T pHandle, RSI_GPDMA_CHA_CFG_T *pCfg);
437 
438   uint32_t (*gpdma_interrupt_status)(RSI_GPDMA_HANDLE_T pHandle, RSI_GPDMA_CHA_CFG_T *pCfg);
439 
440 } ROM_RPDMA_API_T;
441 ///////////////////////////GPDMA END/////////////////////
442 
443 /** @brief TIMERS ROM indirect function structure */
444 typedef PRE_PACK struct POST_PACK {
445   rsi_error_t (*timers_microsec_timer_config)(RSI_TIMERS_T *pTIMER,
446                                               uint8_t timerNum,
447                                               uint16_t integer,
448                                               uint8_t fractional,
449                                               uint8_t mode);
450   uint32_t (*timers_read_timer)(RSI_TIMERS_T *pTIMER, uint8_t timerNum, boolean_t countDir);
451 } ROM_TIMERS_API_T;
452 
453 ////////////////////////////TIMERS END///////////////////////
454 
455 //USART
456 typedef PRE_PACK struct POST_PACK {
457   int32_t (*USART_Initialize)(ARM_USART_SignalEvent_t cb_event,
458                               USART_RESOURCES *usart,
459                               UDMA_RESOURCES *udma,
460                               RSI_UDMA_DESC_T *UDMA_Table,
461                               RSI_UDMA_HANDLE_T *udmaHandle,
462                               uint32_t *mem);
463   int32_t (*USART_Uninitialize)(USART_RESOURCES *usart, UDMA_RESOURCES *udma);
464   int32_t (*USART_PowerControl)(ARM_POWER_STATE state,
465                                 USART_RESOURCES *usart,
466                                 UDMA_RESOURCES *udma,
467                                 RSI_UDMA_HANDLE_T udmaHandle);
468   int32_t (*USART_SetBaudrate)(uint32_t baudrate, uint32_t baseClk, USART_RESOURCES *usart);
469   int32_t (*USART_Send_Data)(const void *data,
470                              uint32_t num,
471                              USART_RESOURCES *usart,
472                              UDMA_RESOURCES *udma,
473                              UDMA_Channel_Info *chnl_info,
474                              RSI_UDMA_HANDLE_T udmaHandle);
475   int32_t (*USART_Receive_Data)(const void *data,
476                                 uint32_t num,
477                                 USART_RESOURCES *usart,
478                                 UDMA_RESOURCES *udma,
479                                 UDMA_Channel_Info *chnl_info,
480                                 RSI_UDMA_HANDLE_T udmaHandle);
481   int32_t (*USART_Transfer)(const void *data_out,
482                             void *data_in,
483                             uint32_t num,
484                             USART_RESOURCES *usart,
485                             UDMA_RESOURCES *udma,
486                             UDMA_Channel_Info *chnl_info,
487                             RSI_UDMA_HANDLE_T udmaHandle);
488   uint32_t (*USART_GetTxCount)(USART_RESOURCES *usart);
489   uint32_t (*USART_GetRxCount)(USART_RESOURCES *usart);
490   int32_t (*USART_Control)(uint32_t control,
491                            uint32_t arg,
492                            uint32_t baseClk,
493                            USART_RESOURCES *usart,
494                            UDMA_RESOURCES *udma,
495                            RSI_UDMA_HANDLE_T udmaHandle);
496   ARM_USART_STATUS (*USART_GetStatus)(USART_RESOURCES *usart);
497   int32_t (*USART_SetModemControl)(ARM_USART_MODEM_CONTROL control, USART_RESOURCES *usart);
498   ARM_USART_MODEM_STATUS (*USART_GetModemStatus)(USART_RESOURCES *usart);
499   void (*UartIrqHandler)(USART_RESOURCES *usart);
500   void (*USART_UDMA_Tx_Event)(uint32_t event, uint8_t dmaCh, USART_RESOURCES *usart);
501   void (*USART_UDMA_Rx_Event)(uint32_t event, uint8_t dmaCh, USART_RESOURCES *usart);
502 } ROM_USART_API_T;
503 //////////////////////USART END////////////////////
504 
505 //GPSI
506 typedef PRE_PACK struct POST_PACK {
507   int32_t (*GSPI_Initialize)(ARM_SPI_SignalEvent_t cb_event,
508                              const GSPI_RESOURCES *gspi,
509                              UDMA_RESOURCES *udma,
510                              RSI_UDMA_DESC_T *UDMA_Table,
511                              RSI_UDMA_HANDLE_T *udmaHandle,
512                              uint32_t *mem);
513   int32_t (*GSPI_Uninitialize)(const GSPI_RESOURCES *gspi, UDMA_RESOURCES *udma);
514   int32_t (*GSPI_PowerControl)(ARM_POWER_STATE state, const GSPI_RESOURCES *gspi);
515 #if defined(SLI_SI917B0) || defined(SLI_SI915)
516   int32_t (*GSPI_Control)(uint32_t control,
517                           uint32_t arg,
518                           const GSPI_RESOURCES *gspi,
519                           uint32_t base_clock,
520                           uint8_t spi_slavenumber);
521 #else
522   int32_t (*GSPI_Control)(uint32_t control, uint32_t arg, const GSPI_RESOURCES *gspi, uint32_t base_clock);
523 #endif
524   int32_t (*GSPI_Send)(const void *data,
525                        uint32_t num,
526                        const GSPI_RESOURCES *gspi,
527                        UDMA_RESOURCES *udma,
528                        UDMA_Channel_Info *chnl_info,
529                        RSI_UDMA_HANDLE_T udmaHandle);
530   int32_t (*GSPI_Receive)(void *data,
531                           uint32_t num,
532                           const GSPI_RESOURCES *gspi,
533                           UDMA_RESOURCES *udma,
534                           UDMA_Channel_Info *chnl_info,
535                           RSI_UDMA_HANDLE_T udmaHandle);
536   int32_t (*GSPI_Transfer)(const void *data_out,
537                            void *data_in,
538                            uint32_t num,
539                            const GSPI_RESOURCES *gspi,
540                            UDMA_RESOURCES *udma,
541                            UDMA_Channel_Info *chnl_info,
542                            RSI_UDMA_HANDLE_T udmaHandle);
543   uint32_t (*GSPI_GetDataCount)(const GSPI_RESOURCES *gspi);
544   void (*GSPI_UDMA_Tx_Event)(uint32_t event, uint8_t dmaCh, GSPI_RESOURCES *gspi);
545   void (*GSPI_UDMA_Rx_Event)(uint32_t event, uint8_t dmaCh, GSPI_RESOURCES *gspi);
546   void (*GSPI_IRQHandler)(const GSPI_RESOURCES *gspi);
547 } ROM_GSPI_API_T;
548 ////////////////////////////GSPI END//////////////////////////
549 
550 //i2s
551 typedef PRE_PACK struct POST_PACK {
552   int32_t (*I2S_Initialize)(ARM_SAI_SignalEvent_t cb_event,
553                             I2S_RESOURCES *i2s,
554                             UDMA_RESOURCES *udma,
555                             RSI_UDMA_DESC_T *UDMA_Table,
556                             RSI_UDMA_HANDLE_T *udmaHandle,
557                             uint32_t *mem);
558   int32_t (*I2S_Uninitialize)(I2S_RESOURCES *i2s, UDMA_RESOURCES *udma);
559   int32_t (*I2S_PowerControl)(ARM_POWER_STATE state,
560                               I2S_RESOURCES *i2s,
561                               UDMA_RESOURCES *udma,
562                               RSI_UDMA_HANDLE_T udmaHandle);
563   int32_t (*I2S_Send)(const void *data,
564                       uint32_t num,
565                       I2S_RESOURCES *i2s,
566                       UDMA_RESOURCES *udma,
567                       UDMA_Channel_Info *chnl_info,
568                       RSI_UDMA_HANDLE_T udmaHandle);
569   int32_t (*I2S_Receive)(void *data,
570                          uint32_t num,
571                          I2S_RESOURCES *i2s,
572                          UDMA_RESOURCES *udma,
573                          UDMA_Channel_Info *chnl_info,
574                          RSI_UDMA_HANDLE_T udmaHandle);
575   uint32_t (*I2S_GetTxCount)(I2S_RESOURCES *i2s);
576   uint32_t (*I2S_GetRxCount)(I2S_RESOURCES *i2s);
577   int32_t (*I2S_Control)(uint32_t control,
578                          uint32_t arg1,
579                          uint32_t arg2,
580                          I2S_RESOURCES *i2s,
581                          UDMA_RESOURCES *udma,
582                          RSI_UDMA_HANDLE_T udmaHandle);
583   ARM_SAI_STATUS (*I2S_GetStatus)(I2S_RESOURCES *i2s);
584   void (*I2S_IRQHandler)(I2S_RESOURCES *i2s);
585   void (*I2S_UDMA_Tx_Event)(uint32_t event, uint8_t dmaCh, I2S_RESOURCES *i2s);
586   void (*I2S_UDMA_Rx_Event)(uint32_t event, uint8_t dmaCh, I2S_RESOURCES *i2s);
587 } ROM_I2S_API_T;
588 ////////////////////////////I2S END////////////////////////
589 
590 //I2C
591 typedef PRE_PACK struct POST_PACK {
592   int32_t (*I2Cx_Initialize)(ARM_I2C_SignalEvent_t cb_event, I2C_RESOURCES *i2c);
593   int32_t (*I2Cx_Uninitialize)(I2C_RESOURCES *i2c);
594   int32_t (*I2Cx_PowerControl)(ARM_POWER_STATE state, I2C_RESOURCES *i2c);
595   int32_t (
596     *I2Cx_MasterTransmit)(uint32_t addr, const uint8_t *data, uint32_t num, bool xfer_pending, I2C_RESOURCES *i2c);
597   int32_t (*I2Cx_MasterReceive)(uint32_t addr, uint8_t *data, uint32_t num, bool xfer_pending, I2C_RESOURCES *i2c);
598   int32_t (*I2Cx_SlaveTransmit)(const uint8_t *data, uint32_t num, I2C_RESOURCES *i2c);
599   int32_t (*I2Cx_SlaveReceive)(uint8_t *data, uint32_t num, I2C_RESOURCES *i2c);
600   int32_t (*I2Cx_GetDataCount)(I2C_RESOURCES *i2c);
601   int32_t (*I2Cx_Control)(uint32_t control, uint32_t arg, I2C_RESOURCES *i2c, uint32_t clock);
602   ARM_I2C_STATUS (*I2Cx_GetStatus)(I2C_RESOURCES *i2c);
603   uint32_t (*I2Cx_MasterHandler)(I2C_RESOURCES *i2c);
604   uint32_t (*I2Cx_SlaveHandler)(I2C_RESOURCES *i2c);
605   void (*I2Cx_IRQHandler)(I2C_RESOURCES *i2c);
606 } ROM_I2C_API_T;
607 ///////////////////I2C END/////////////////
608 #if 0
609 typedef PRE_PACK struct POST_PACK
610 		{
611 	void  (* rsi_arm_offset_f32_opt)(int32_t *pSrc, int32_t scale, int32_t *pDst,uint32_t length,uint16_t inBank, uint16_t outBank );
612 
613 	void  (* rsi_arm_offset_q7_opt)( q7_t *pSrc, q7_t scale, q7_t *pDst, uint32_t length,uint16_t inBank, uint16_t outBank);
614 
615 	void  (* rsi_arm_offset_q15_opt)( q15_t *pSrc, q15_t scale, q15_t *pDst, uint32_t length,uint16_t inBank, uint16_t outBank);
616 
617 	void  (* rsi_arm_offset_q31_opt)( q31_t *pSrc, q31_t scale, q31_t *pDst, uint32_t length,uint16_t inBank, uint16_t outBank);
618 
619 	void  (* rsi_fim_scalar_sub_q7)(q7_t *pSrc,q7_t scale,q7_t *pDst, uint32_t blockSize,uint16_t inBank, uint16_t outBank);
620 
621 	void  (* rsi_fim_scalar_sub_q31)(q31_t *pSrc,q31_t scale,q31_t *pDst, uint32_t blockSize,uint16_t inBank, uint16_t outBank);
622 
623 	void  (* rsi_fim_scalar_sub_f32)( int32_t *pSrc, int32_t scale,int32_t *pDst, uint32_t length,uint16_t inBank, uint16_t outBank);
624 
625 	void  (* rsi_arm_scale_f32_opt)( int32_t *pSrc,int32_t scale,int32_t *pDst, uint32_t length,uint16_t inBank, uint16_t outBank);
626 
627 	void  (* rsi_arm_scale_q7_opt)( q7_t *pSrc,q7_t scaleFract,int8_t shift,q7_t *pDst,uint32_t blockSize,uint16_t inBank, uint16_t outBank);
628 
629 	void  (* rsi_arm_scale_q15_opt)( q15_t *pSrc, q15_t scaleFract, int8_t shift, q15_t *pDst,uint32_t blockSize,uint16_t inBank, uint16_t outBank);
630 
631 	void  (* rsi_arm_scale_q31_opt)( q31_t * pSrc,q31_t scaleFract, int8_t shift,q31_t * pDst,uint32_t blockSize,uint16_t inBank, uint16_t outBank);
632 
633 	void  (* rsi_fim_scalar_mul_q15)(q15_t *pSrc,q15_t *scale,uint32_t blockSize, typ_data_t typ_data,uint16_t inBank, uint16_t outBank );
634 
635 	void  (* rsi_arm_add_f32_opt)( int32_t *pSrcA,  int32_t *pSrcB,uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
636 
637 	void  (* rsi_arm_add_q7_opt)( q7_t *pSrcA, q7_t *pSrcB, q7_t *pDst,  uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
638 
639 	void  (* rsi_arm_add_q15_opt)( q15_t *pSrcA,   q15_t *pSrcB,  q15_t *pDst, uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
640 
641 	void  (* rsi_arm_add_q31_opt)( q31_t *pSrcA, q31_t *pSrcB, q31_t *pDst, uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
642 
643 	void  (* rsi_fim_vector_add_q15)(q15_t *pIn1, q15_t *pIn2,q15_t *pDst,uint32_t blockSize, typ_data_t typ_data,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
644 
645 	void  (* rsi_arm_sub_f32_opt)(int32_t *pSrcA, int32_t *pSrcB,int32_t *pDst, uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
646 
647 	void  (* rsi_arm_sub_q7_opt)( q7_t *pSrcA,  q7_t *pSrcB, q7_t *pDst, uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
648 
649 	void  (* rsi_arm_sub_q15_opt)( q15_t *pSrcA, q15_t *pSrcB,  q15_t *pDst,uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
650 
651 	void  (*rsi_arm_sub_q31_opt)( q31_t *pSrcA,  q31_t *pSrcB,q31_t *pDst, uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
652 
653 	void  (* rsi_fim_read_data)( uint32_t bank,uint32_t length,volatile void  *pDst, uint8_t data_type,typ_data_t type_data);
654 
655 	void  (* rsi_fim_vector_sub_q15)( q15_t *pIn1, q15_t *pIn2,q15_t *pDst,uint32_t blockSize,typ_data_t typ_data,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
656 
657 	void  (* rsi_arm_mult_f32_opt)( int32_t *pIn1,int32_t *pIn2, uint32_t SatTruncRound,uint32_t length,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
658 
659 	void  (* rsi_arm_mult_q7_opt)( q7_t *pSrcA, q7_t *pSrcB, q7_t *pDst, uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
660 
661 	void  (* rsi_arm_mult_q15_opt)( q15_t *pSrcA, q15_t *pSrcB, q15_t *pDst, uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
662 
663 	void  (* rsi_arm_mult_q31_opt)(q31_t *pSrcA,q31_t *pSrcB,q31_t *pDst,uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
664 
665 	void  (* rsi_fim_vector_mul_q15)( q15_t *pIn1, q15_t *pIn2,q15_t *pDst,uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
666 
667 	void  (* rsi_arm_cmplx_mult_real_q15_opt)(q15_t *pSrcCmplx,q15_t *pSrcReal,q15_t *pDst,uint32_t numSamples,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
668 
669 	void  (* rsi_arm_cmplx_mult_cmplx_q15_opt)(q15_t * pSrcA,q15_t * pSrcB,q15_t *pDst,uint32_t numSamples,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
670 
671 	void  (* rsi_arm_cmplx_mag_squared_q15_opt)(q15_t *pSrc,q15_t *pDst,uint32_t numSamples,uint16_t inBank, uint16_t outBank);
672 
673 	void  (* rsi_fim_absSqr_q7)( q7_t *pSrc,uint32_t length,uint16_t inBank, uint16_t outBank);
674 
675 	void  (* rsi_fim_absSqr_q15)( q15_t *pSrc,  uint32_t length,uint16_t inBank, uint16_t outBank);
676 
677 	void  (* rsi_fim_absSqr_q31)( q31_t *pSrc,uint32_t length,uint16_t inBank, uint16_t outBank);
678 
679 	void  (* rsi_fim_absSqr_f32)(int32_t *pSrc, uint32_t length,uint16_t inBank, uint16_t outBank);
680 
681 	rsi_error_t (* rsi_arm_mat_mult_f32_opt)( const arm_matrix_instance_f32_opt *pSrcA,
682 			const arm_matrix_instance_f32_opt *pSrcB,arm_matrix_instance_f32_opt *pDst,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
683 
684 	rsi_error_t (* rsi_arm_mat_mult_q31_opt)( const arm_matrix_instance_q31_opt * pSrcA,const arm_matrix_instance_q31_opt * pSrcB,
685 			arm_matrix_instance_q31_opt * pDst,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
686 
687 	rsi_error_t (* rsi_arm_mat_mult_q15_opt)( const arm_matrix_instance_q15_opt * pSrcA,
688 			const arm_matrix_instance_q15_opt * pSrcB,arm_matrix_instance_q15_opt * pDst,q15_t * pState
689 			,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
690 
691 	void  (* rsi_arm_fir_init_f32_opt)( arm_fir_instance_f32_opt *S,  uint16_t numTaps,int32_t *pCoeffs, int32_t *pState,
692 			uint32_t blockSize);
693 
694 	void  (* rsi_arm_fir_f32_opt)( arm_fir_instance_f32_opt *S, int32_t *pSrc,  int32_t *pDst,
695 			uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
696 
697 	void  (* rsi_arm_fir_init_q31_opt)( arm_fir_instance_q31_opt *S,uint16_t numTaps,q31_t *pCoeffs,
698 			q31_t *pState, uint32_t blockSize);
699 
700 	void  (* rsi_arm_fir_q31_opt)( arm_fir_instance_q31_opt *S, q31_t *pSrc,q31_t *pDst, uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
701 
702 	void  (* rsi_arm_fir_init_q15_opt)( arm_fir_instance_q15_opt *S,uint16_t numTaps,q15_t *pCoeffs,
703 			q15_t *pState, uint32_t blockSize);
704 
705 	void  (* rsi_arm_fir_q15_opt)( arm_fir_instance_q15_opt *S, q15_t *pSrc,q15_t *pDst, uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
706 
707 	void  (* rsi_arm_fir_init_q7_opt)( arm_fir_instance_q7_opt *S,uint16_t numTaps,q7_t *pCoeffs,
708 			q7_t *pState, uint32_t blockSize);
709 
710 	void  (* rsi_arm_fir_q7_opt)( arm_fir_instance_q7_opt *S, q7_t *pSrc,q7_t *pDst,
711 			uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
712 
713 	void  (* rsi_fim_interrupt_handler)(volatile FIM_Type *ptFim);
714 
715 	void  (* rsi_arm_fir_interpolate_f32_opt)( const arm_fir_interpolate_instance_f32_opt * S, int32_t * pSrc,
716 			int32_t * pDst,uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
717 
718 	arm_status (* rsi_arm_fir_interpolate_init_f32_opt)( arm_fir_interpolate_instance_f32_opt * S,
719 			uint8_t L, uint16_t numTaps,  int32_t * pCoeffs,
720 			int32_t * pState,uint32_t blockSize );
721 
722 	arm_status (* rsi_arm_fir_interpolate_init_q15_opt)( arm_fir_interpolate_instance_q15_opt * S,uint8_t L,
723 			uint16_t numTaps,q15_t * pCoeffs,q15_t * pState,
724 			uint32_t blockSize );
725 
726 	arm_status (* rsi_arm_fir_interpolate_init_q31_opt)( arm_fir_interpolate_instance_q31_opt *S,  uint8_t L,
727 			uint16_t numTaps,q31_t * pCoeffs, q31_t * pState,
728 			uint32_t blockSize );
729 
730 	void  (* rsi_arm_fir_interpolate_q15_opt)( arm_fir_interpolate_instance_q15_opt * S,q15_t * pSrc,q15_t *pDst,
731 			uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
732 
733 
734 	void  (* rsi_arm_fir_interpolate_q31_opt)( const arm_fir_interpolate_instance_q31_opt * S, q31_t * pSrc,
735 			q31_t * pDst, uint32_t blockSize,uint16_t inBank1, uint16_t inBank2, uint16_t outBank);
736 		}ROM_FIM_API_T;
737 
738 /////////////////////FIM END//////////////////////
739 #endif
740 typedef PRE_PACK struct POST_PACK {
741   void (*ct_ocu_high_Low_toggle_select)(RSI_CT_T *pCT, boolean_t lowHigh, boolean_t counterNum, uint8_t outputSel);
742   rsi_error_t (*ct_wfg_control_config)(RSI_CT_T *pCT, WFG_PARAMS_T ctrlReg);
743   rsi_error_t (*ct_ocu_control)(RSI_CT_T *pCT,
744                                 boolean_t counterNum,
745                                 boolean_t dmaEn,
746                                 OCU_PARAMS_T *pOCUparams,
747                                 RSI_CT_CALLBACK_T *pCB);
748 
749   rsi_error_t (*ct_wfg_comapre_value_set)(RSI_CT_T *pCT, boolean_t counterNum, OCU_PARAMS_T *pOCUparams);
750 } ROM_CT_API_T;
751 
752 ///////////////////////CT END///////////////////////////////////
753 /** @brief SPI master ROM indirect function structure */
754 typedef PRE_PACK struct POST_PACK {
755   void (*ps_clr_wkp_up_status)(uint32_t wakeUpIntrClear);
756   void (*ps_bg_ldo_config)(uint8_t ldo_0p6_ctrl, uint8_t ldo_0p6_lp_mode);
757   void (*ps_configure_trim_values)(uint16_t lf_ro_trim,
758                                    uint16_t lf_rc_trim,
759                                    uint16_t hf_ro_trim,
760                                    uint16_t hf_rc_trim,
761                                    uint16_t bg_ptat_trim,
762                                    uint16_t bg_trim);
763   void (*ps_wireless_shutdown)(void);
764   uint32_t (*RSI_SelectTaBootOption)(uint32_t option);
765   void (*RSI_GotoSleepWithRetention)(uint32_t stack_address,
766                                      uint32_t jump_cb_address,
767                                      uint32_t vector_offset,
768                                      uint32_t mode);
769   void (*RSI_WakeupWirelessProcessor)(void);
770 } ROM_PWR_API_T;
771 ///////////////////////POWERSAVE END///////////////////////////
772 
773 typedef PRE_PACK struct POST_PACK {
774   rsi_error_t (*ulpss_clock_config)(M4CLK_Type *pCLK, boolean_t clkEnable, uint16_t divFactor, boolean_t oddDivFactor);
775 
776   rsi_error_t (*ulpss_ulp_peri_clk_enable)(ULPCLK_Type *pULPCLK, uint32_t u32Flags);
777 
778   rsi_error_t (*ulpss_ulp_peri_clk_disable)(ULPCLK_Type *pULPCLK, uint32_t u32Flags);
779 
780   rsi_error_t (*ulpss_ulp_dyn_clk_enable)(ULPCLK_Type *pULPCLK, uint32_t u32Flags);
781 
782   rsi_error_t (*ulpss_ulp_dyn_clk_disable)(ULPCLK_Type *pULPCLK, uint32_t u32Flags);
783 
784   rsi_error_t (*ulpss_ulp_ssi_clk_config)(ULPCLK_Type *pULPCLK,
785                                           CLK_ENABLE_T clkType,
786                                           ULP_SSI_CLK_SELECT_T clkSource,
787                                           uint16_t divFactor);
788 
789   rsi_error_t (*ulpss_ulp_i2s_clk_config)(ULPCLK_Type *pULPCLK, ULP_I2S_CLK_SELECT_T clkSource, uint16_t divFactor);
790 
791   rsi_error_t (*ulpss_ulp_uar_clk_config)(ULPCLK_Type *pULPCLK,
792                                           CLK_ENABLE_T clkType,
793                                           boolean_t bFrClkSel,
794                                           ULP_UART_CLK_SELECT_T clkSource,
795                                           uint16_t divFactor);
796 
797   rsi_error_t (*ulpss_time_clk_disable)(ULPCLK_Type *pULPCLK);
798   rsi_error_t (*ulpss_time_clk_config)(ULPCLK_Type *pULPCLK,
799                                        CLK_ENABLE_T clkType,
800                                        boolean_t bTmrSync,
801                                        ULP_TIMER_CLK_SELECT_T clkSource,
802                                        uint8_t skipSwitchTime);
803 
804   rsi_error_t (*ulpss_aux_clk_config)(ULPCLK_Type *pULPCLK, CLK_ENABLE_T clkType, ULP_AUX_CLK_SELECT_T clkSource);
805 
806   rsi_error_t (*ulpss_vad_clk_config)(ULPCLK_Type *pULPCLK,
807                                       ULP_VAD_CLK_SELECT_T clkSource,
808                                       ULP_VAD_FCLK_SELECT_T FclkSource,
809                                       uint16_t divFactor);
810 
811   rsi_error_t (*ulpss_touch_clk_config)(ULPCLK_Type *pULPCLK, ULP_TOUCH_CLK_SELECT_T clkSource, uint16_t divFactor);
812 
813   rsi_error_t (*ulpss_slp_sensor_clk_config)(ULPCLK_Type *pULPCLK, boolean_t clkEnable, uint32_t divFactor);
814 
815   rsi_error_t (*ulpss_peripheral_enable)(ULPCLK_Type *pULPCLK, ULPPERIPHERALS_CLK_T module, CLK_ENABLE_T clkType);
816 
817   rsi_error_t (*ulpss_peripheral_disable)(ULPCLK_Type *pULPCLK, ULPPERIPHERALS_CLK_T module);
818 
819 } ROM_ULPSS_CLK_API_T;
820 
821 ////////////////////////////ULPSS CLOCKS END/////////////////////////////////
822 
823 typedef PRE_PACK struct POST_PACK {
824   boolean_t (*clk_check_pll_lock)(PLL_TYPE_T pllType);
825   rsi_error_t (*clk_soc_pll_clk_enable)(boolean_t clkEnable);
826   rsi_error_t (*clk_set_soc_pll_freq)(const M4CLK_Type *pCLK, uint32_t socPllFreq, uint32_t pllRefClk);
827   rsi_error_t (*clk_soc_pll_set_freq_div)(const M4CLK_Type *pCLK,
828                                           boolean_t clk_en,
829                                           uint16_t divFactor,
830                                           uint16_t nFactor,
831                                           uint16_t mFactor,
832                                           uint16_t fcwF,
833                                           uint16_t dcoFixSel,
834                                           uint16_t ldoProg);
835   rsi_error_t (*clk_soc_pll_clk_set)(const M4CLK_Type *pCLK);
836   rsi_error_t (*clk_soc_pll_clk_bypass_enable)(boolean_t clkEnable);
837   rsi_error_t (*clk_soc_pll_clk_reset)(void);
838   rsi_error_t (*clk_soc_pll_pd_enable)(boolean_t en);
839   rsi_error_t (*clk_soc_pll_turn_off)(void);
840   rsi_error_t (*clk_soc_pll_turn_on)(void);
841   rsi_error_t (*clk_i2s_pll_clk_enable)(boolean_t clkEnable);
842   rsi_error_t (*clk_i2s_pll_clk_bypass_enable)(boolean_t clkEnable);
843   rsi_error_t (*clk_i2s_pll_pd_enable)(boolean_t en);
844   rsi_error_t (*clk_i2s_pll_turn_off)(void);
845   rsi_error_t (*clk_i2s_pll_turn_on)(void);
846   rsi_error_t (*clk_set_i2s_pll_freq)(const M4CLK_Type *pCLK, uint32_t i2sPllFreq, uint32_t fXtal);
847   rsi_error_t (*clk_i2s_pll_set_freq_div)(const M4CLK_Type *pCLK,
848                                           uint16_t u16DivFactor1,
849                                           uint16_t u16DivFactor2,
850                                           uint16_t nFactor,
851                                           uint16_t mFactor,
852                                           uint16_t fcwF);
853   rsi_error_t (*clk_i2s_pll_clk_set)(const M4CLK_Type *pCLK);
854   rsi_error_t (*clk_i2s_pll_clk_reset)(void);
855   rsi_error_t (*clk_intf_pll_clk_enable)(boolean_t clkEnable);
856   rsi_error_t (*clk_intf_pll_pd_enable)(boolean_t en);
857   rsi_error_t (*clk_intf_pll_turn_off)(void);
858   rsi_error_t (*clk_set_intf_pll_freq)(const M4CLK_Type *pCLK, uint32_t intfPllFreq, uint32_t pllRefClk);
859   rsi_error_t (*clk_intf_pll_set_freq_div)(const M4CLK_Type *pCLK,
860                                            boolean_t clk_en,
861                                            uint16_t divFactor,
862                                            uint16_t nFactor,
863                                            uint16_t mFactor,
864                                            uint16_t fcwF,
865                                            uint16_t dcoFixSel,
866                                            uint16_t ldoProg);
867   rsi_error_t (*clk_intf_pll_clk_bypass_enable)(boolean_t clkEnable);
868   rsi_error_t (*clk_intf_pll_turn_on)(void);
869   rsi_error_t (*clk_intf_pll_clk_reset)(void);
870   rsi_error_t (*clk_intf_pll_clk_set)(const M4CLK_Type *pCLK);
871   rsi_error_t (*clk_peripheral_clk_enable1)(M4CLK_Type *pCLK, uint32_t flags);
872   rsi_error_t (*clk_peripheral_clk_disable1)(M4CLK_Type *pCLK, uint32_t flags);
873   rsi_error_t (*clk_peripheral_clk_enable2)(M4CLK_Type *pCLK, uint32_t flags);
874   rsi_error_t (*clk_peripheral_clk_disable2)(M4CLK_Type *pCLK, uint32_t flags);
875   rsi_error_t (*clk_peripheral_clk_enable3)(M4CLK_Type *pCLK, uint32_t flags);
876   rsi_error_t (*clk_peripheral_clk_disable3)(M4CLK_Type *pCLK, uint32_t flags);
877   rsi_error_t (*clk_dynamic_clk_gate_disable)(M4CLK_Type *pCLK, uint32_t flags);
878   rsi_error_t (*clk_dynamic_clk_gate_disable2)(M4CLK_Type *pCLK, uint32_t flags);
879   rsi_error_t (*clk_dynamic_clk_gate_enable)(M4CLK_Type *pCLK, uint32_t flags);
880   rsi_error_t (*clk_dynamic_clk_gate_enable2)(M4CLK_Type *pCLK, uint32_t flags);
881   rsi_error_t (*ulpss_enable_ref_clks)(REF_CLK_ENABLE_T enable, SRC_TYPE_T srcType, cdDelay delayFn);
882   rsi_error_t (*ulpss_disable_ref_clks)(REF_CLK_ENABLE_T clk_type);
883   rsi_error_t (*clk_qspi_clk_config)(M4CLK_Type *pCLK,
884                                      QSPI_CLK_SRC_SEL_T clkSource,
885                                      boolean_t swalloEn,
886                                      boolean_t OddDivEn,
887                                      uint32_t divFactor);
888   rsi_error_t (*clk_usart_clk_config)(M4CLK_Type *pCLK,
889                                       CLK_ENABLE_T clkType,
890                                       boolean_t FracDivEn,
891                                       EN_USART_T EN_USART_T,
892                                       USART_CLK_SRC_SEL_T clkSource,
893                                       uint32_t divFactor);
894   rsi_error_t (*clk_ssi_mst_clk_config)(M4CLK_Type *pCLK,
895                                         CLK_ENABLE_T clkType,
896                                         SSI_MST_CLK_SRC_SEL_T clkSource,
897                                         uint32_t divFactor);
898 #if !defined(SLI_SI917) && !defined(SLI_SI915)
899   rsi_error_t (*clk_sd_mem_clk_config)(M4CLK_Type *pCLK,
900                                        boolean_t swalloEn,
901                                        SDMEM_CLK_SRC_SEL_T clkSource,
902                                        uint32_t divFactor);
903 #endif
904   rsi_error_t (*clk_ct_clk_config)(M4CLK_Type *pCLK,
905                                    CT_CLK_SRC_SEL_T clkSource,
906                                    uint32_t divFactor,
907                                    CLK_ENABLE_T clkType);
908 #if !defined(SLI_SI917) && !defined(SLI_SI915)
909   rsi_error_t (*clk_cci_clk_config)(M4CLK_Type *pCLK,
910                                     CCI_CLK_SRC_SEL_T clkSource,
911                                     uint32_t divFactor,
912                                     CLK_ENABLE_T clkType);
913 #endif
914   rsi_error_t (*clk_i2s_clk_config)(M4CLK_Type *pCLK, I2S_CLK_SRC_SEL_T clkSource, uint32_t divFactor);
915   rsi_error_t (*clk_mcu_clk_cut_config)(M4CLK_Type *pCLK, MCU_CLKOUT_SRC_SEL_T clkSource, uint32_t divFactor);
916 #if !defined(SLI_SI917) && !defined(SLI_SI915)
917   rsi_error_t (*clk_can_clk_config)(M4CLK_Type *pCLK, uint32_t divFactor, CLK_ENABLE_T clkType);
918   rsi_error_t (*clk_ethernet_clk_config)(M4CLK_Type *pCLK,
919                                          boolean_t swalloEn,
920                                          ETHERNET_CLK_SRC_SEL_T clkSource,
921                                          uint32_t divFactor);
922 #endif
923   rsi_error_t (*clk_m4_soc_clk_div)(M4CLK_Type *pCLK, uint32_t divFactor);
924   rsi_error_t (*clk_qspi_clk_div)(M4CLK_Type *pCLK, boolean_t u8SwallowEn, boolean_t u8OddDivEn, uint32_t divFactor);
925   rsi_error_t (*clk_ct_clk_div)(M4CLK_Type *pCLK, uint32_t divFactor);
926   rsi_error_t (*clk_ssi_mst_clk_div)(M4CLK_Type *pCLK, uint32_t divFactor);
927 #if !defined(SLI_SI917) && !defined(SLI_SI915)
928   rsi_error_t (*clk_cci_clk_div)(M4CLK_Type *pCLK, uint32_t divFactor);
929 #endif
930   rsi_error_t (*clk_i2s_clk_div)(M4CLK_Type *pCLK, uint32_t divFactor);
931 #if !defined(SLI_SI917) && !defined(SLI_SI915)
932   rsi_error_t (*clk_sd_mem_clk_div)(M4CLK_Type *pCLK, boolean_t u8SwallowEn, uint32_t divFactor);
933 #endif
934   rsi_error_t (*clk_usart_clk_div)(M4CLK_Type *pCLK, EN_USART_T EN_USART_T, uint8_t u8FracDivEn, uint32_t divFactor);
935   uint32_t (*clk_slp_clk_calib_config)(M4CLK_Type *pCLK, uint8_t clkCycles);
936   rsi_error_t (*clk_gspi_clk_config)(M4CLK_Type *pCLK, GSPI_CLK_SRC_SEL_T clkSel);
937   rsi_error_t (*clk_slp_clk_config)(M4CLK_Type *pCLK, SLEEP_CLK_SRC_SEL_T clkSrc);
938   rsi_error_t (*clk_i2c_clk_config)(M4CLK_Type *pCLK, boolean_t clkEnable, EN_I2C_T enI2C);
939   rsi_error_t (*clk_xtal_clk_config)(uint8_t xtalPin);
940 #if !defined(SLI_SI917) && !defined(SLI_SI915)
941   rsi_error_t (*clk_usb_clk_config)(M4CLK_Type *pCLK, USB_CLK_SRC_SEL_T clkSource, uint16_t divFactor);
942 #endif
943   rsi_error_t (*clk_peripheral_clk_enable)(M4CLK_Type *pCLK, PERIPHERALS_CLK_T module, CLK_ENABLE_T clkType);
944   rsi_error_t (*clk_peripheral_clk_disable)(M4CLK_Type *pCLK, PERIPHERALS_CLK_T module);
945   void (*clk_config_pll_lock)(boolean_t manual_lock, boolean_t bypass_manual_lock, uint8_t mm_count_limit);
946   void (*clk_config_pll_ref_clk)(uint8_t ref_clk_src);
947 #if defined(SLI_SI917B0) || defined(SLI_SI915)
948   rsi_error_t (*clk_qspi_2_clk_config)(M4CLK_Type *pCLK,
949                                        QSPI_CLK_SRC_SEL_T clkSource,
950                                        boolean_t swalloEn,
951                                        boolean_t OddDivEn,
952                                        uint32_t divFactor);
953 #endif
954 } ROM_M4SS_CLK_API_T;
955 
956 //////////////////////////M4 CLOCKS END///////////////////////
957 
958 ///////////////SSI/////////////////////////////////
959 typedef PRE_PACK struct POST_PACK {
960   int32_t (*SPI_Initialize)(ARM_SPI_SignalEvent_t cb_event,
961                             const SPI_RESOURCES *spi,
962                             UDMA_RESOURCES *udma,
963                             RSI_UDMA_DESC_T *UDMA_Table,
964                             RSI_UDMA_HANDLE_T *udmaHandle,
965                             uint32_t *mem);
966   int32_t (*SPI_Uninitialize)(const SPI_RESOURCES *spi, UDMA_RESOURCES *udma);
967   int32_t (*SPI_PowerControl)(ARM_POWER_STATE state, const SPI_RESOURCES *spi);
968   int32_t (*SPI_Send)(const void *data,
969                       uint32_t num,
970                       const SPI_RESOURCES *spi,
971                       UDMA_RESOURCES *udma,
972                       UDMA_Channel_Info *chnl_info,
973                       RSI_UDMA_HANDLE_T udmaHandle);
974   int32_t (*SPI_Receive)(void *data,
975                          uint32_t num,
976                          const SPI_RESOURCES *spi,
977                          UDMA_RESOURCES *udma,
978                          UDMA_Channel_Info *chnl_info,
979                          RSI_UDMA_HANDLE_T udmaHandle);
980   int32_t (*SPI_Transfer)(const void *data_out,
981                           void *data_in,
982                           uint32_t num,
983                           const SPI_RESOURCES *spi,
984                           UDMA_RESOURCES *udma,
985                           UDMA_Channel_Info *chnl_info,
986                           RSI_UDMA_HANDLE_T udmaHandle);
987   uint32_t (*SPI_GetDataCount)(const SPI_RESOURCES *spi);
988 #if defined(SLI_SI917B0) || defined(SLI_SI915)
989   int32_t (*SPI_Control)(uint32_t control,
990                          uint32_t arg,
991                          const SPI_RESOURCES *spi,
992                          uint32_t base_clock,
993                          uint8_t spi_slavenumber);
994 #else
995   int32_t (*SPI_Control)(uint32_t control, uint32_t arg, const SPI_RESOURCES *spi, uint32_t base_clock);
996 #endif
997   ARM_SPI_STATUS (*SPI_GetStatus)(const SPI_RESOURCES *spi);
998   void (*SPI_UDMA_Tx_Event)(uint32_t event, uint8_t dmaCh, SPI_RESOURCES *spi);
999   void (*SPI_UDMA_Rx_Event)(uint32_t event, uint8_t dmaCh, SPI_RESOURCES *spi);
1000   void (*SPI_IRQHandler)(const SPI_RESOURCES *spi);
1001 } ROM_SSI_API_T;
1002 //////////////////SSI END//////////////////////////
1003 
1004 typedef struct {
1005   const ROM_EGPIO_API_T *pEGPIOROM;   /*!< EGPIO driver API function table base address */
1006   const ROM_TIMERS_API_T *pTIMERSROM; /*!< TIMERS driver API function table base address */
1007   const ROM_UDMA_API_T *pUDMAROM;     /*!< UDMA driver API function table base address */
1008   const ROM_UDMA_WRAPPER_API_T *pUDMAWRAPPERROM;
1009   const ROM_CT_API_T *pCTROM; /*!< SCT driver API function table base address */
1010   const ROM_RPDMA_API_T *pRPDMAROM;
1011   const ROM_PWR_API_T *pPWR;
1012   const ROM_M4SS_CLK_API_T *pM4SSCLK;
1013   const ROM_ULPSS_CLK_API_T *pULPSSCLK;
1014   const ROM_QSPI_API_T *pQSPIROM;
1015 #if !defined(SLI_SI917B0) && !defined(SLI_SI915)
1016   const ROM_EFUSE_API_T *pEFUSEROM;
1017 #endif
1018   const ROM_CRC_API_T *pCRCROM;
1019   const ROM_RNG_API_T *pRNGROM;
1020 #if !defined(SLI_SI917B0) && !defined(SLI_SI915)
1021   const ROM_MCPWM_API_T *pMCPWMROM;
1022 #endif
1023   const ROM_USART_API_T *pUSARTROM;
1024   const ROM_GSPI_API_T *pGSPIROM;
1025   const ROM_I2S_API_T *pI2SROM;
1026   const ROM_I2C_API_T *pI2CROM;
1027 #ifdef CHIP_9118
1028   const struct ROM_WL_API_S *pWLROM;
1029 #endif
1030 #if defined(SLI_SI917) || defined(SLI_SI915)
1031   const ROM_SSI_API_T *pSSIROM;
1032 #endif
1033 } RSI_ROM_API_T;
1034 
1035 /*ROM base address */
1036 #define RSI_ROM_API_BASE_LOC (0x00300100)
1037 
1038 #define RSI_ROM_API ((RSI_ROM_API_T *)RSI_ROM_API_BASE_LOC)
1039 /* Pointer to EGPIO peripheral driver functions in ROM */
1040 #define ROMAPI_EGPIO_API ((RSI_ROM_API)->pEGPIOROM)
1041 
1042 /* Pointer to Timers peripheral driver functions in ROM */
1043 #define ROMAPI_TIMER_API ((RSI_ROM_API)->pTIMERSROM)
1044 
1045 /* Pointer to UDMA peripheral driver functions in ROM */
1046 #define ROMAPI_UDMA_API ((RSI_ROM_API)->pUDMAROM)
1047 
1048 #define ROMAPI_UDMA_WRAPPER_API ((RSI_ROM_API)->pUDMAWRAPPERROM)
1049 
1050 /* Pointer to SCT peripheral driver functions in ROM */
1051 #define ROMAPI_CT_API ((RSI_ROM_API)->pCTROM)
1052 
1053 /* Pointer to RPDMA peripheral driver functions in ROM */
1054 #define ROMAPI_GPDMA_API ((RSI_ROM_API)->pRPDMAROM)
1055 
1056 /* Pointer to POWER driver functions in ROM */
1057 #define ROMAPI_PWR_API ((RSI_ROM_API)->pPWR)
1058 
1059 /* Pointer to M4SS CLOCKS  driver functions in ROM */
1060 #define ROMAPI_M4SS_CLK_API ((RSI_ROM_API)->pM4SSCLK)
1061 
1062 /*ULP clocks*/
1063 #define ROMAPI_ULPSS_CLK_API ((RSI_ROM_API)->pULPSSCLK)
1064 
1065 /* Pointer to QSPI peripheral driver functions in ROM */
1066 #define ROMAPI_QSPI_API ((RSI_ROM_API)->pQSPIROM)
1067 
1068 #if !defined(SLI_SI917B0) && !defined(SLI_SI915)
1069 /* Pointer to EFUSE driver functions in ROM */
1070 #define ROMAPI_EFUSE_API ((RSI_ROM_API)->pEFUSEROM)
1071 #endif
1072 
1073 /* Pointer to CRC peripheral driver functions in ROM */
1074 #define ROMAPI_CRC_API ((RSI_ROM_API)->pCRCROM)
1075 
1076 /* Pointer to RNG peripheral driver functions in ROM */
1077 #define ROMAPI_RNG_API ((RSI_ROM_API)->pRNGROM)
1078 
1079 #if !defined(SLI_SI917B0) && !defined(SLI_SI915)
1080 /* Pointer to MCPWM peripheral driver functions in ROM */
1081 #define ROMAPI_MCPWM_API ((RSI_ROM_API)->pMCPWMROM)
1082 #endif
1083 
1084 /* Pointer to USART peripheral driver functions in ROM */
1085 #define ROMAPI_USART_API ((RSI_ROM_API)->pUSARTROM)
1086 
1087 /* Pointer to GSPI peripheral driver functions in ROM */
1088 #define ROMAPI_GSPI_API ((RSI_ROM_API)->pGSPIROM)
1089 
1090 /* Pointer to I2S peripheral driver functions in ROM */
1091 #define ROMAPI_I2S_API ((RSI_ROM_API)->pI2SROM)
1092 
1093 /* Pointer to I2C peripheral driver functions in ROM */
1094 #define ROMAPI_I2C_API ((RSI_ROM_API)->pI2CROM)
1095 
1096 #ifdef CHIP_9118
1097 /* Pointer to WIRELESS driver functions in ROM */
1098 #define ROMAPI_WL ((RSI_ROM_API)->pWLROM)
1099 #endif
1100 
1101 #if defined(SLI_SI917) || defined(SLI_SI915)
1102 /* Pointer to SSI driver functions in ROM */
1103 #define ROMAPI_SSI_API ((RSI_ROM_API)->pSSIROM)
1104 #endif
1105 
1106 #ifdef __cplusplus
1107 }
1108 #endif
1109 
1110 #endif
1111 
1112 #endif /* __RSI_ROM_TABLE_RS9116_H__ */
1113