1 /***************************************************************************/ /**
2  * @file
3  * @brief
4  *******************************************************************************
5  * # License
6  * <b>Copyright 2019 Silicon Laboratories Inc. www.silabs.com</b>
7  *******************************************************************************
8  *
9  * SPDX-License-Identifier: Zlib
10  *
11  * The licensor of this software is Silicon Laboratories Inc.
12  *
13  * This software is provided 'as-is', without any express or implied
14  * warranty. In no event will the authors be held liable for any damages
15  * arising from the use of this software.
16  *
17  * Permission is granted to anyone to use this software for any purpose,
18  * including commercial applications, and to alter it and redistribute it
19  * freely, subject to the following restrictions:
20  *
21  * 1. The origin of this software must not be misrepresented; you must not
22  *    claim that you wrote the original software. If you use this software
23  *    in a product, an acknowledgment in the product documentation would be
24  *    appreciated but is not required.
25  * 2. Altered source versions must be plainly marked as such, and must not be
26  *    misrepresented as being the original software.
27  * 3. This notice may not be removed or altered from any source distribution.
28  *
29  ******************************************************************************/
30 #pragma once
31 
32 #include "sl_si91x_status.h"
33 #include "sl_si91x_types.h"
34 #include "sl_si91x_protocol_types.h"
35 #include "sl_bit.h"
36 #include "sl_wifi_types.h"
37 #include <stdint.h>
38 #include <stddef.h>
39 
40 //! @cond Doxygen_Suppress
41 #ifndef BIT
42 #define BIT(a) ((uint32_t)1U << a)
43 #endif
44 
45 #define NETWORK_INTERFACE_VALID(x) (x == SL_NET_WIFI_CLIENT_INTERFACE) || (x == SL_NET_WIFI_AP_INTERFACE)
46 
47 // NOTE: The value for SL_SI91X_SI917_RAM_MEM_CONFIG will be fetched from respective si91x_mem_config_1/2/3.slcc
48 #ifdef SLI_SI91X_MCU_INTERFACE
49 #if SL_SI91X_SI917_RAM_MEM_CONFIG == 1
50 #define MEMORY_CONFIG SL_SI91X_RAM_LEVEL_NWP_ADV_MCU_BASIC
51 #elif SL_SI91X_SI917_RAM_MEM_CONFIG == 2
52 #define MEMORY_CONFIG SL_SI91X_RAM_LEVEL_NWP_MEDIUM_MCU_MEDIUM
53 #elif SL_SI91X_SI917_RAM_MEM_CONFIG == 3
54 #define MEMORY_CONFIG SL_SI91X_RAM_LEVEL_NWP_BASIC_MCU_ADV
55 #endif
56 #else
57 #define MEMORY_CONFIG SL_SI91X_RAM_LEVEL_NWP_ALL_AVAILABLE
58 #endif
59 
60 //! @endcond
61 
62 /** \addtogroup SI91X_FEATURE_BITMAP
63   * @{ */
64 /*=========================================================================*/
65 // feature bit map parameters description !//
66 /*=========================================================================*/
67 /**
68  * @def SL_SI91X_FEAT_SECURITY_OPEN
69  * @brief Security type: Open.
70  * @details
71  * This feature supports open security type in client mode.
72  *
73  * @note It is recommended to enable this macro when configuring the security type as open mode.
74  */
75 #define SL_SI91X_FEAT_SECURITY_OPEN BIT(0)
76 
77 /**
78  * @def SL_SI91X_FEAT_SECURITY_PSK
79  * @brief Security type: WPA/WPA2.
80  * @details
81  * This feature supports WPA/WPA2 security type in client mode.
82  *
83  * @note It is recommended to enable this macro when configuring the security type as WPA, WPA2, or any other security modes.
84  */
85 #define SL_SI91X_FEAT_SECURITY_PSK BIT(1)
86 
87 /**
88  * @def SL_SI91X_FEAT_AGGREGATION
89  * @brief Aggregation support.
90  * @details
91  * Enables support for packet aggregation.
92  *
93  * @note Supports AMPDU for both TX and RX.
94  */
95 #define SL_SI91X_FEAT_AGGREGATION BIT(2)
96 
97 /**
98  * @def SL_SI91X_FEAT_LP_GPIO_BASED_HANDSHAKE
99  * @brief Low Power (LP) mode GPIO handshake.
100  * @details
101  * Enables GPIO-based handshake for low power mode.
102  *
103  * @note Not applicable for SI917.
104  */
105 #define SL_SI91X_FEAT_LP_GPIO_BASED_HANDSHAKE BIT(3)
106 
107 /**
108  * @def SL_SI91X_FEAT_ULP_GPIO_BASED_HANDSHAKE
109  * @brief Ultra Low Power (ULP) mode GPIO handshake.
110  * @details
111  * Enables GPIO-based handshake for ultra low power mode.
112  *
113  * @note Not applicable for SoC
114  */
115 #define SL_SI91X_FEAT_ULP_GPIO_BASED_HANDSHAKE BIT(4)
116 
117 /**
118  * @def SL_SI91X_FEAT_DEV_TO_HOST_ULP_GPIO_1
119  * @brief ULP GPIO 1 wake-up indication.
120  * @details
121  * Configures ULP GPIO 1 for wake-up indication.
122  */
123 #define SL_SI91X_FEAT_DEV_TO_HOST_ULP_GPIO_1 BIT(5)
124 
125 /**
126  * @def SL_SI91X_FEAT_RF_SUPPLY_VOL_3_3_VOLT
127  * @brief 3.3V RF supply.
128  * @details
129  * Configures the device to use a 3.3V power supply for RF.
130  *
131  * @note Not applicable for SI917.
132  */
133 #define SL_SI91X_FEAT_RF_SUPPLY_VOL_3_3_VOLT BIT(6)
134 
135 /**
136  * @def SL_SI91X_FEAT_WPS_DISABLE
137  * @brief Disable WPS in AP mode.
138  * @details
139  * Disables Wi-Fi Protected Setup (WPS) functionality in Client and Access Point (AP) mode.
140  */
141 #define SL_SI91X_FEAT_WPS_DISABLE BIT(7)
142 
143 /**
144  * @def SL_SI91X_FEAT_EAP_LEAP_IN_COEX
145  * @brief Enable EAP-LEAP mode.
146  * @details
147  * Enables Extensible Authentication Protocol - Lightweight Extensible Authentication Protocol (EAP-LEAP) in coexistence mode.
148  */
149 #define SL_SI91X_FEAT_EAP_LEAP_IN_COEX BIT(8)
150 
151 /**
152  * @def SL_SI91X_FEAT_HIDE_PSK_CREDENTIALS
153  * @brief Hide sensitive credentials.
154  * @details
155  * Hides sensitive information such as Pre-Shared Key (PSK), Pairwise Master Key (PMK), and EAP credentials.
156  */
157 #define SL_SI91X_FEAT_HIDE_PSK_CREDENTIALS BIT(9)
158 
159 /**
160  * @def SL_SI91X_FEAT_SSL_HIGH_STREAMING_BIT
161  * @brief High SSL streaming throughput.
162  * @details
163  * Enables high throughput for Secure Sockets Layer (SSL) streaming.
164  */
165 #define SL_SI91X_FEAT_SSL_HIGH_STREAMING_BIT BIT(10)
166 
167 /**
168  * @def SL_SI91X_FEAT_LONG_ICMP_PACKET
169  * @brief Support for long-sized ICMP packets.
170  * @details
171  * Enables support for long-sized Internet Control Message Protocol (ICMP) packets. Maximum 1472 bytes for IPv4 and 1452 bytes for IPv6.
172  *
173  * @note Bit 11 are reserved.
174  */
175 #define SL_SI91X_FEAT_LONG_ICMP_PACKET BIT(12)
176 
177 /**
178  * @def SL_SI91X_FEAT_TRANSCEIVER_MAC_PEER_DS_SUPPORT
179  * @brief MAC layer peer information storage.
180  * @details
181  * Enables support to store peer information in the MAC layer in Transceiver mode of operation.
182  */
183 #define SL_SI91X_FEAT_TRANSCEIVER_MAC_PEER_DS_SUPPORT BIT(13)
184 
185 /**
186  * @def SL_SI91X_FEAT_LONG_HTTP_URL
187  * @brief Support for long HTTP GET URLs.
188  * @details
189  * Enables support for long HTTP GET URLs. The maximum URL length supported is 2048 bytes.
190  */
191 #define SL_SI91X_FEAT_LONG_HTTP_URL BIT(14)
192 
193 /**
194  * @def SL_SI91X_FEAT_DISABLE_11AX_SUPPORT
195  * @brief Disable 11ax connections.
196  * @details
197  * Force DUT connection (in station mode) to use 11n, disabling 11ax connections.
198  */
199 #define SL_SI91X_FEAT_DISABLE_11AX_SUPPORT BIT(15)
200 /** @} */
201 
202 /**
203  * @def SLI_SI91X_FEAT_FW_UPDATE_NEW_CODE
204  * @brief Indicates support for a new set of firmware update result codes. This bit is used for internal purpose.
205  * @details
206  * This bit in the feature bitmap is used to inform the NWP firmware whether
207  * the host supports a new set of result codes to differentiate firmware update
208  * results from other non-firmware-related results. If this bit is set,
209  * the NWP firmware will send result codes from the new set after a firmware update.
210  * If the bit is not set, the legacy result codes will be used.
211  */
212 #define SLI_SI91X_FEAT_FW_UPDATE_NEW_CODE BIT(16)
213 
214 /** \addtogroup SI91X_FEATURE_BITMAP
215   * @{ */
216 /**
217  * @def SL_SI91X_FEAT_SECURE_ATTESTATION
218  * @brief Secure attestation.
219  * @details
220  * Enables secure attestation functionality.
221  *
222  * @note Bit(16) is used internally by SDK. Bit 17-29 and Bit 31 is reserved.
223  */
224 #define SL_SI91X_FEAT_SECURE_ATTESTATION BIT(30)
225 /** @} */
226 
227 /** \addtogroup SI91X_TCP_IP_FEATURE_BITMAP
228   * @{ */
229 /*=========================================================================*/
230 // TCP/IP feature bit map parameters description !//
231 /*=========================================================================*/
232 /**
233  * @def SL_SI91X_TCP_IP_FEAT_BYPASS
234  * @brief Enables the TCP/IP bypass feature.
235  *
236  * @details
237  * When this feature is enabled, the TCP/IP stack processing is bypassed,
238  * allowing raw Ethernet frames to be sent and received. This is useful
239  * for applications that require direct control over Ethernet frames or
240  * for implementing custom network protocols.
241  *
242  * This is defined as a bit flag that can be set in the feature configuration
243  * to enable the TCP/IP bypass.
244  */
245 
246 #define SL_SI91X_TCP_IP_FEAT_BYPASS BIT(0)
247 
248 /// @note Bit 1 is reserved
249 
250 /**
251  * @def SL_SI91X_TCP_IP_FEAT_DHCPV4_CLIENT
252  * @brief Enables the DHCPv4 client feature.
253  *
254  * @details
255  * This feature allows the device to obtain an IPv4 address,
256  * subnet mask, default gateway, and DNS server from a DHCP server.
257  */
258 #define SL_SI91X_TCP_IP_FEAT_DHCPV4_CLIENT BIT(2)
259 
260 /**
261  * @def SL_SI91X_TCP_IP_FEAT_DHCPV6_CLIENT
262  * @brief Enables the DHCPv6 client feature.
263  *
264  * @details
265  * This feature allows the device to obtain an IPv6 address
266  * and other network configuration details from a DHCPv6 server.
267  */
268 #define SL_SI91X_TCP_IP_FEAT_DHCPV6_CLIENT BIT(3)
269 
270 /**
271  * @def SL_SI91X_TCP_IP_FEAT_DHCPV4_SERVER
272  * @brief Enables the DHCPv4 server feature.
273  *
274  * @details
275  * This feature allows the device to act as a DHCPv4 server, providing IPv4
276  * addresses and network configuration to DHCPv4 clients on the network.
277  */
278 #define SL_SI91X_TCP_IP_FEAT_DHCPV4_SERVER BIT(4)
279 
280 /**
281  * @def SL_SI91X_TCP_IP_FEAT_DHCPV6_SERVER
282  * @brief Enables the DHCPv6 server feature.
283  *
284  * @details
285  * This feature allows the device to act as a DHCPv6 server, providing IPv6
286  * addresses and network configuration to DHCPv6 clients on the network.
287  */
288 #define SL_SI91X_TCP_IP_FEAT_DHCPV6_SERVER BIT(5)
289 
290 /**
291  * @def SL_SI91X_TCP_IP_FEAT_JSON_OBJECTS
292  * @brief Enables support for JSON objects.
293  *
294  * @details
295  * This feature allows the device to handle JSON (JavaScript Object Notation)
296  * objects, which can be used for data interchange in web applications.
297  */
298 #define SL_SI91X_TCP_IP_FEAT_JSON_OBJECTS BIT(6)
299 
300 /**
301  * @def SL_SI91X_TCP_IP_FEAT_HTTP_CLIENT
302  * @brief Enables the HTTP client feature.
303  *
304  * @details
305  * This feature allows the device to send HTTP requests and receive HTTP
306  * responses from web servers, enabling web-based communication.
307  */
308 #define SL_SI91X_TCP_IP_FEAT_HTTP_CLIENT BIT(7)
309 
310 /**
311  * @def SL_SI91X_TCP_IP_FEAT_DNS_CLIENT
312  * @brief Enables the DNS client feature.
313  *
314  * @details
315  * This feature allows the device to resolve domain names to IP addresses
316  * using the Domain Name System (DNS), enabling communication with servers
317  * by hostname.
318  */
319 #define SL_SI91X_TCP_IP_FEAT_DNS_CLIENT BIT(8)
320 
321 /**
322  * @def SL_SI91X_TCP_IP_FEAT_SNMP_AGENT
323  * @brief Enables the SNMP agent feature.
324  *
325  * @details
326  * This feature allows the device to act as an SNMP (Simple Network Management
327  * Protocol) agent, enabling network management and monitoring.
328  */
329 #define SL_SI91X_TCP_IP_FEAT_SNMP_AGENT BIT(9)
330 
331 /**
332  * @def SL_SI91X_TCP_IP_FEAT_SSL
333  * @brief Enables the SSL feature.
334  *
335  * @details
336  * This feature allows the device to use SSL (Secure Sockets Layer) for secure
337  * communication over the network, providing encryption and authentication.
338  */
339 #define SL_SI91X_TCP_IP_FEAT_SSL BIT(10)
340 
341 /**
342  * @def SL_SI91X_TCP_IP_FEAT_ICMP
343  * @brief Enables the ICMP feature (ping).
344  *
345  * @details
346  * This feature allows the device to use ICMP (Internet Control Message
347  * Protocol) for network diagnostics, such as sending ping requests.
348  */
349 #define SL_SI91X_TCP_IP_FEAT_ICMP BIT(11)
350 
351 /// @note Bit 12 is reserved
352 
353 /// @note Bit 13 is reserved
354 
355 /**
356  * @def SL_SI91X_TCP_IP_FEAT_SEND_CONFIGS_TO_HOST
357  * @brief Enables sending configuration data to the host.
358  *
359  * @details
360  * This feature allows the device to send web page configuration data to the
361  * host system from the wireless configuration page.
362  */
363 #define SL_SI91X_TCP_IP_FEAT_SEND_CONFIGS_TO_HOST BIT(14)
364 
365 /**
366  * @def SL_SI91X_TCP_IP_FEAT_FTP_CLIENT
367  * @brief Enables the FTP client feature.
368  *
369  * @details
370  * This feature allows the device to act as an FTP (File Transfer Protocol)
371  * client, enabling file transfers to and from FTP servers.
372  */
373 #define SL_SI91X_TCP_IP_FEAT_FTP_CLIENT BIT(15)
374 
375 /**
376  * @def SL_SI91X_TCP_IP_FEAT_SNTP_CLIENT
377  * @brief Enables the SNTP client feature.
378  *
379  * @details
380  * This feature allows the device to synchronize its clock with an SNTP
381  * (Simple Network Time Protocol) server, ensuring accurate timekeeping.
382  */
383 #define SL_SI91X_TCP_IP_FEAT_SNTP_CLIENT BIT(16)
384 
385 /**
386  * @def SL_SI91X_TCP_IP_FEAT_IPV6
387  * @brief Enables IPv6 support.
388  *
389  * @details
390  * This feature allows the device to use IPv6 (Internet Protocol version 6),
391  * providing a larger address space and improved routing capabilities.
392  *
393  * @note IPv6 will also be enabled if the DHCPv6 client or DHCPv6 server
394  * feature is enabled, regardless of the tcp_ip_feature_bit_map[17] setting.
395  */
396 #define SL_SI91X_TCP_IP_FEAT_IPV6 BIT(17)
397 
398 /**
399  * @def SL_SI91X_TCP_IP_FEAT_RAW_DATA
400  * @brief Enables raw data support.
401  *
402  * @details
403  * This feature allows the device to handle raw data frames, bypassing the
404  * TCP/IP stack. It is supported only in AP mode and requires the TCP_BYPASS
405  * feature to be disabled. If any packet from the host with frame type 0x1
406  * is received by the firmware, the packet will be sent on air without
407  * TCP/IP stack processing. ARP and broadcast packets (other than DHCP
408  * packets) received on air will be sent to the host.
409  */
410 #define SL_SI91X_TCP_IP_FEAT_RAW_DATA BIT(18)
411 
412 /**
413  * @def SL_SI91X_TCP_IP_FEAT_MDNSD
414  * @brief Enables the MDNSD feature.
415  *
416  * @details
417  * This feature allows the device to use Multicast DNS (mDNS) for local
418  * network service discovery, enabling devices to find each other without
419  * a central DNS server.
420  *
421  * @note This feature is not supported in AP mode.
422  */
423 #define SL_SI91X_TCP_IP_FEAT_MDNSD BIT(19)
424 
425 /**
426  * @def SL_SI91X_TCP_IP_FEAT_SMTP_CLIENT
427  * @brief Enables the SMTP client feature.
428  *
429  * @details
430  * This feature allows the device to act as an SMTP (Simple Mail Transfer
431  * Protocol) client, enabling it to send emails.
432  */
433 #define SL_SI91X_TCP_IP_FEAT_SMTP_CLIENT BIT(20)
434 
435 /**
436  * @def SL_SI91X_TCP_IP_TOTAL_SOCKETS
437  * @brief Selects the number of sockets.
438  *
439  * @details
440  * This macro allows the configuration of the total number of sockets
441  * available. A maximum of 10 sockets are allowed. Bits 21-24 are used
442  * to set the TOTAL_SOCKETS.
443  * @param total_sockets The total number of sockets to be configured.
444  */
445 #define SL_SI91X_TCP_IP_TOTAL_SOCKETS(total_sockets) (total_sockets << 21)
446 
447 /**
448  * @def SL_SI91X_TCP_IP_FEAT_SINGLE_SSL_SOCKET
449  * @brief Enables a single SSL socket.
450  *
451  * @details
452  * This feature allows the device to use a single SSL socket for secure
453  * communication.
454  */
455 #define SL_SI91X_TCP_IP_FEAT_SINGLE_SSL_SOCKET BIT(25)
456 
457 /**
458  * @def SL_SI91X_TCP_IP_FEAT_LOAD_PUBLIC_PRIVATE_CERTS
459  * @brief Enables loading of public and private keys for TLS/SSL handshake.
460  *
461  * @details
462  * This feature allows the device to load public and private keys for use
463  * in TLS/SSL handshakes.
464  *
465  * @note If a secure handshake is to be done using only
466  * a CA-certificate, then loading of private and public keys can be
467  * disabled, and these certificates can be erased from the flash using
468  * the load_cert API. If secure handshake verification of private and
469  * public keys is needed, then loading of these keys must be enabled.
470  */
471 #define SL_SI91X_TCP_IP_FEAT_LOAD_PUBLIC_PRIVATE_CERTS BIT(26)
472 
473 /**
474  * @def SL_SI91X_TCP_IP_FEAT_LOAD_CERTS_INTO_RAM
475  * @brief Enables loading of SSL certificates into RAM.
476  *
477  * @details
478  * This feature allows the device to load SSL certificates into RAM for
479  * faster access during secure communications.
480  */
481 #define SL_SI91X_TCP_IP_FEAT_LOAD_CERTS_INTO_RAM BIT(27)
482 
483 /// @note Bit 28 is reserved
484 
485 /**
486  * @def SL_SI91X_TCP_IP_FEAT_POP3_CLIENT
487  * @brief Enables the POP3 client feature.
488  *
489  * @details
490  * This feature allows the device to act as a POP3 (Post Office Protocol
491  * version 3) client, enabling it to retrieve emails from a POP3 server.
492  */
493 #define SL_SI91X_TCP_IP_FEAT_POP3_CLIENT BIT(29)
494 
495 /**
496  * @def SL_SI91X_TCP_IP_FEAT_OTAF
497  * @brief Enables the OTAF client feature.
498  *
499  * @details
500  * This feature allows the device to perform over-the-air firmware (OTAF)
501  * updates, enabling it to download and install firmware updates remotely.
502  */
503 #define SL_SI91X_TCP_IP_FEAT_OTAF BIT(30)
504 
505 /**
506  * @def SL_SI91X_TCP_IP_FEAT_EXTENSION_VALID
507  * @brief Enables TCP/IP extension support.
508  *
509  * @details
510  * This feature allows the device to use extended TCP/IP features,
511  * If this bit is enabled then only, the features present in the ext_tcp ip feature bitmap can be used.
512  */
513 #define SL_SI91X_TCP_IP_FEAT_EXTENSION_VALID BIT(31)
514 /** @} */
515 
516 /** \addtogroup SI91X_CUSTOM_FEATURE_BITMAP
517   * @{ */
518 /*=========================================================================*/
519 // Custom feature bit map parameters description !//
520 /*=========================================================================*/
521 /**
522  * @def SL_SI91X_CUSTOM_FEAT_DISABLE_GATEWAY_IN_RSI_AP
523  * @brief Disables gateway configuration sent to STA from RSI AP.
524  * @details If this bit is set to 1, the DHCP server behavior changes when the device is in Access Point (AP) mode.
525  * The DHCP server will assign IP addresses to client nodes without sending out a Gateway address, providing only the assigned IP and Subnet values.
526  * It is highly recommended to keep this value at '0' for standard AP functionality,
527  * as disabling the gateway address is typically needed only for very specialized use cases. The default value of this bit is '0'
528  *
529  * @note Bits 0 - 1 are reserved.
530  */
531 #define SL_SI91X_CUSTOM_FEAT_DISABLE_GATEWAY_IN_RSI_AP BIT(2)
532 
533 /**
534  * @def SL_SI91X_CUSTOM_FEAT_SOC_CLK_CONFIG_160MHZ
535  * @brief Configures the clock for NWP SOC to 160 MHz.
536  * @details If higher performance, such as increased throughput, is required this configuration sets the System-on-Chip (SoC) clock to 160 MHz.
537  *
538  * @note Ensure to set `pll_mode` to 1 in the feature frame command for this configuration to take effect.
539  * @note Bit 3 is reserved.
540  */
541 #define SL_SI91X_CUSTOM_FEAT_SOC_CLK_CONFIG_160MHZ BIT(4)
542 
543 /**
544  * @def SL_SI91X_CUSTOM_FEAT_AP_IN_HIDDEN_MODE
545  * @brief Configures the Access Point (AP) to operate in hidden mode.
546  * @details If this bit is set, the AP is created in a hidden mode where its SSID is not broadcasted, making the AP less visible to clients.
547  * This feature is valid only when the device is in AP mode.
548  */
549 #define SL_SI91X_CUSTOM_FEAT_AP_IN_HIDDEN_MODE BIT(5)
550 
551 /**
552  * @def SL_SI91X_CUSTOM_FEAT_DNS_SERVER_IN_DHCP_OFFER
553  * @brief Includes DNS server IP address in DHCP offer response when in AP mode.
554  * @details When this bit is set, the DHCP server running in AP mode will include the DNS server IP address in the DHCP offer response sent to clients.
555  */
556 #define SL_SI91X_CUSTOM_FEAT_DNS_SERVER_IN_DHCP_OFFER BIT(6)
557 
558 /**
559  * @def SL_SI91X_CUSTOM_FEAT_DFS_CHANNEL_SUPPORT
560  * @brief Enables scanning of DFS channels in the 5 GHz band.
561  * @details This bit enables the support for scanning Dynamic Frequency Selection (DFS) channels in the 5 GHz band.
562  * It is valid only in Wi-Fi client mode. Ensure to set the region configuration before scanning DFS channels.
563  *
564  * @note Bit 7 is reserved.
565  * @note 5Gz is not supported in SI917.
566  */
567 #define SL_SI91X_CUSTOM_FEAT_DFS_CHANNEL_SUPPORT BIT(8)
568 
569 /**
570  * @def SL_SI91X_CUSTOM_FEAT_LED_FEATURE
571  * @brief Enables LED blinking feature to indicate network activity.
572  * @details When this bit is set, the LED (GPIO_16) will blink to indicate network activity.
573  * The LED blinks when a TX packet is sent or when a unicast packet addressed to the device’s MAC is received.
574  *
575  * @note Not applicable for SI917.
576  */
577 #define SL_SI91X_CUSTOM_FEAT_LED_FEATURE BIT(9)
578 
579 /**
580  * @def SL_SI91X_CUSTOM_FEAT_ASYNC_CONNECTION_STATUS
581  * @brief Enables asynchronous WLAN connection status indication to the host.
582  * @details If this bit is enabled, the module will asynchronously notify the host of WLAN connection status changes.
583  * This feature is valid only in Wi-Fi client mode.
584  */
585 #define SL_SI91X_CUSTOM_FEAT_ASYNC_CONNECTION_STATUS BIT(10)
586 
587 /**
588  * @def SL_SI91X_CUSTOM_FEAT_WAKE_ON_WIRELESS
589  * @brief Enables wake-on-wireless functionality in UART mode.
590  * @details This bit enables the wake-on-wireless feature when operating in UART mode, allowing the module to wake up in response to wireless events.
591  *
592  * @note applicable only for NCP.
593  */
594 #define SL_SI91X_CUSTOM_FEAT_WAKE_ON_WIRELESS BIT(11)
595 
596 /**
597  * @def SL_SI91X_CUSTOM_FEAT_ENABLE_AP_BLACKLIST
598  * @brief Enables AP blacklisting in Station (STA) mode.
599  * @details By default, the client maintains an AP blacklist to avoid specific access points.
600  * Enabling this feature allows the client to bypass the AP blacklist during roaming or rejoin, if needed.
601  */
602 #define SL_SI91X_CUSTOM_FEAT_ENABLE_AP_BLACKLIST BIT(12)
603 
604 /**
605  * @def SL_SI91X_CUSTOM_FEAT_MAX_NUM_OF_CLIENTS
606  * @brief Sets the maximum number of clients supported in AP mode.
607  * @details This bit field sets the maximum number of clients that can be supported in Access Point (AP) mode.
608  * The value for this field should be provided in the range specified by bits 13 - 16.
609  * @param max_num_of_clients Number of clients to be supported (1 to 15).
610  */
611 #define SL_SI91X_CUSTOM_FEAT_MAX_NUM_OF_CLIENTS(max_num_of_clients) (max_num_of_clients << 13)
612 
613 /**
614  * @def SL_SI91X_CUSTOM_FEAT_ROAM_WITH_DEAUTH_OR_NULL_DATA
615  * @brief Selects between de-authentication or null data (with power management bit set) for roaming.
616  * @details If this bit is enabled then roam through DEAUTH, or roam through NULL.
617  */
618 #define SL_SI91X_CUSTOM_FEAT_ROAM_WITH_DEAUTH_OR_NULL_DATA BIT(17)
619 
620 /**
621  * @def SL_SI91X_CUSTOM_FEAT_TRIGGER_AUTO_CONFIG
622  * @brief Triggers automatic configuration.
623  * @details This bit enables the auto-configuration feature, which allows the module to automatically configure itself based on predefined parameters.
624  *
625  * @note Bits 18 - 19 are reserved.
626  * @note Not applicable for SI917.
627  */
628 #define SL_SI91X_CUSTOM_FEAT_TRIGGER_AUTO_CONFIG BIT(20)
629 
630 /**
631  * @def SL_SI91X_CUSTOM_FEAT_LIMIT_PACKETS_PER_STA
632  * @brief Limits the number of packets buffered per STA in AP mode.
633  * @details In Access Point (AP) mode, if this bit is set, only two packets per Station (STA) will be buffered when the STA is in Power Save (PS) mode.
634  * This helps manage buffer usage and ensures efficient packet handling.
635  *
636  * @note Bit 21 is reserved.
637  */
638 #define SL_SI91X_CUSTOM_FEAT_LIMIT_PACKETS_PER_STA BIT(22)
639 
640 /**
641  * @def SL_SI91X_CUSTOM_FEAT_HTTP_HTTPS_AUTH
642  * @brief Enables HTTP/HTTPS authentication.
643  * @details This bit enables authentication for HTTP and HTTPS connections, adding an extra layer of security for web-based communications.
644  */
645 #define SL_SI91X_CUSTOM_FEAT_HTTP_HTTPS_AUTH BIT(23)
646 
647 /**
648  * @def SL_SI91X_CUSTOM_FEAT_SOC_CLK_CONFIG_120MHZ
649  * @brief Configures the clock for NWP SOC to 120 MHz.
650  * @details This configuration sets the System-on-Chip (SoC) clock to 120 MHz. This may be required for certain performance needs.
651  * Ensure to set `pll_mode` to 1 in the feature frame command for this configuration to take effect.
652  *
653  * @note This configuration is necessary for high throughput scenarios.
654  */
655 #define SL_SI91X_CUSTOM_FEAT_SOC_CLK_CONFIG_120MHZ BIT(24)
656 
657 /**
658  * @def SL_SI91X_CUSTOM_FEAT_REJECT_CONNECT_REQ_IMMEDIATELY
659  * @brief Rejects new LTCP connection requests immediately when maximum clients are connected.
660  * @details When this bit is set, any new connection request for an LTCP socket will be rejected immediately if the maximum number of clients is already connected.
661  * By default, such requests are maintained in a pending list until an existing client disconnects.
662  *
663  * @note When BIT[26] = 0: New connection requests are held in a pending list. When BIT[26] = 1: New connection requests are immediately rejected.
664  */
665 #define SL_SI91X_CUSTOM_FEAT_REJECT_CONNECT_REQ_IMMEDIATELY BIT(26)
666 
667 /**
668  * @def SL_SI91X_CUSTOM_FEAT_DUAL_BAND_ROAM_VCSAFD
669  * @brief Enables dual-band roaming and VCSAFD feature (currently not supported).
670  * @details This bit enables support for dual-band roaming and VCSAFD (Virtual Channel Scan and Frequency Avoidance Detection),
671  * which enhances the module’s ability to switch between different frequency bands and avoid interference.
672  */
673 #define SL_SI91X_CUSTOM_FEAT_DUAL_BAND_ROAM_VCSAFD BIT(27)
674 
675 /**
676  * @def SL_SI91X_CUSTOM_FEAT_RTC_FROM_HOST
677  * @brief Enables Real-Time Clock (RTC) synchronization from the host.
678  * @details When this bit is set, the module will use the Real-Time Clock (RTC) provided by the host system for timekeeping.
679  *
680  * @note
681  *   Ensure that the Real-Time Clock (RTC) timer is configured to enable certificate validation.
682  */
683 #define SL_SI91X_CUSTOM_FEAT_RTC_FROM_HOST BIT(28)
684 
685 /**
686  * @def SL_SI91X_CUSTOM_FEAT_BT_IAP
687  * @brief Enables Bluetooth In-App Programming (IAP) feature.
688  * @details This bit enables the Bluetooth In-App Programming (IAP) feature, allowing the module to support Bluetooth-related in-app programming functionalities.
689  */
690 #define SL_SI91X_CUSTOM_FEAT_BT_IAP BIT(29)
691 
692 /**
693  * @def SL_SI91X_CUSTOM_FEAT_EXTENTION_VALID
694  * @brief Validates the use of extended custom feature bitmap.
695  * @details This bit indicates that the extended custom feature bitmap is valid.
696  * If this bit is enabled then only, the features present in the extended custom feature bitmap can be used.
697  */
698 #define SL_SI91X_CUSTOM_FEAT_EXTENSION_VALID BIT(31)
699 /** @} */
700 
701 /** \addtogroup SI91X_EXTENDED_CUSTOM_FEATURE_BITMAP
702   * @{ */
703 /*=========================================================================*/
704 
705 // Extended custom feature bitmap !//
706 /*=========================================================================*/
707 
708 /**
709  * @def SL_SI91X_EXT_FEAT_RSA_KEY_WITH_4096_SUPPORT
710  * @brief Supports 4096 size RSA KEY certificate.
711  * @details Enabling this bit allows the device to support 4096-bit RSA keys. Recommended only if 4096-bit keys are required.
712  *
713  * @note Bit 0 is reserved.
714  */
715 #define SL_SI91X_EXT_FEAT_RSA_KEY_WITH_4096_SUPPORT BIT(1)
716 
717 /**
718  * @def SL_SI91X_EXT_FEAT_SSL_CERT_WITH_4096_KEY_SUPPORT
719  * @brief Supports 4096 size KEY SSL certificate.
720  * @details Enabling this bit allows the device to support SSL certificates with 4096-bit keys. Recommended only if 4096-bit keys are required.
721  *
722  * @note Bit 2 is reserved.
723  */
724 #define SL_SI91X_EXT_FEAT_SSL_CERT_WITH_4096_KEY_SUPPORT BIT(3)
725 
726 /**
727  * @def SL_SI91X_EXT_FEAT_AP_BROADCAST_PKT_SND_B4_DTIM
728  * @brief Extended custom bitmap for AP Broadcast customization.
729  * @details Enabling this bit configures the Access Point to send broadcast packets before the DTIM (Delivery Traffic Indication Message) interval.
730  *
731  * @note If this bit is enabled, connected clients in power save mode may miss the packet.
732  */
733 #define SL_SI91X_EXT_FEAT_AP_BROADCAST_PKT_SND_B4_DTIM BIT(4)
734 
735 /**
736  * @def SL_SI91X_EXT_FEAT_FCC_LOW_PWR
737  * @brief Extended custom bitmap to support FCC (currently not supported).
738  * @details Enabling this bit allows the device to operate in a mode that complies with FCC (Federal Communications Commission) regulations for low power operation.
739  */
740 #define SL_SI91X_EXT_FEAT_FCC_LOW_PWR BIT(5)
741 
742 /**
743  * @def SL_SI91X_EXT_FEAT_PUF
744  * @brief To enable PUF (Physical Unclonable Function).
745  * @details Enabling this bit activates the Physical Unclonable Function feature, which provides a unique identifier for each device based on its physical characteristics.
746  *
747  * @note Bit 6 is reserved.
748  * @note Currently this feature is not supported for SI917.
749  */
750 #define SL_SI91X_EXT_FEAT_PUF BIT(7)
751 
752 /**
753  * @def SL_SI91X_EXT_FEAT_SPECTRAL_MASK_NOKIA
754  * @brief Nokia Spectral mask extended custom bitmap (currently not supported).
755  * @details Enabling this bit allows the device to support the Nokia Spectral mask for extended custom bitmap configurations.
756  */
757 #define SL_SI91X_EXT_FEAT_SPECTRAL_MASK_NOKIA BIT(8)
758 
759 /**
760  * @def SL_SI91X_EXT_HTTP_SKIP_DEFAULT_LEADING_CHARACTER
761  * @brief Extended feature bitmap to skip default leading character '\' in HTTP header.
762  * @details Enabling this bit configures the device to omit the default leading character '\' in HTTP headers, allowing for custom header formatting.
763  */
764 #define SL_SI91X_EXT_HTTP_SKIP_DEFAULT_LEADING_CHARACTER BIT(9)
765 
766 /**
767  * @def SL_SI91X_EXT_FEAT_PUF_PRIVATE_KEY
768  * @brief To enable PUF (Physical Unclonable Function) private key.
769  * @details Enabling this bit activates the use of a private key associated with the Physical Unclonable Function feature for enhanced security.
770  *
771  * @note Currently this feature is not supported for SI917.
772  */
773 #define SL_SI91X_EXT_FEAT_PUF_PRIVATE_KEY BIT(10)
774 
775 /**
776  * @def SL_SI91X_EXT_FEAT_ENABLE_11R_OTA
777  * @brief To enable 802.11R Over The Air Roaming (currently not supported).
778  * @details Enabling this bit activates support for 802.11R (Fast BSS Transition) Over The Air Roaming, which improves the handoff experience between access points.
779  *
780  * @note Resource Request Support is not present.
781  * @note If both BIT[11] and BIT[16] are not enabled, the device will default to Legacy Roaming.
782  */
783 #define SL_SI91X_EXT_FEAT_ENABLE_11R_OTA BIT(11)
784 
785 /**
786  * @def SL_SI91X_EXT_FEAT_IEEE_80211J
787  * @brief To enable 802.11J protocol (currently not supported).
788  * @details Enabling this bit activates support for the 802.11J protocol, which is used for wireless communication in Japan.
789  *
790  * @note If this bit is enabled, the set region command is mandatory with the region set to Japan and the band value must be 1.
791  */
792 #define SL_SI91X_EXT_FEAT_IEEE_80211J BIT(12)
793 
794 /**
795  * @def SL_SI91X_EXT_FEAT_IEEE_80211W
796  * @brief To enable 802.11W protocol.
797  * @details Enabling this bit activates support for the 802.11W protocol, which provides management frame protection.
798  *
799  * @note This bit must be set to enable WPA3 Personal Mode and WPA3 Personal Transition mode.
800  */
801 #define SL_SI91X_EXT_FEAT_IEEE_80211W BIT(13)
802 
803 /**
804  * @def SL_SI91X_EXT_FEAT_SSL_VERSIONS_SUPPORT
805  * @brief To enable the Multi-version TCP over SSL support.
806  * @details Enabling this bit allows the device to support multiple versions of SSL/TLS over TCP, providing flexibility in handling different SSL/TLS versions.
807  */
808 #define SL_SI91X_EXT_FEAT_SSL_VERSIONS_SUPPORT BIT(14)
809 
810 /**
811  * @def SL_SI91X_EXT_FEAT_16th_STATION_IN_AP_MODE
812  * @brief To enable 16 client support in Access Point (AP) mode.
813  * @details Enabling this bit allows up to 16 stations to connect to the device when it is operating in AP mode.
814  *
815  * @note If this bit is enabled, up to 16 stations can connect; otherwise, a maximum of 8 stations can connect.
816  */
817 #define SL_SI91X_EXT_FEAT_16th_STATION_IN_AP_MODE BIT(15)
818 
819 /**
820  * @def SL_SI91X_EXT_FEAT_ENABLE_11R_ODS
821  * @brief To enable 802.11R Over the Distribution System Roaming.
822  * @details Enabling this bit activates support for 802.11R (Fast BSS Transition) Over the Distribution System Roaming, which enhances roaming performance across different access points in the distribution system.
823  *
824  * @note 1. Resource Request Support is not present.
825  * @note 2. If both BIT[11] and BIT[16] are not enabled, the device will default to Legacy Roaming.
826  */
827 #define SL_SI91X_EXT_FEAT_ENABLE_11R_ODS BIT(16)
828 
829 /**
830  * @def SL_SI91X_EXT_FEAT_WOWLAN_DISABLE
831  * @brief To disable the WoWLAN (Wake-on-Wireless-LAN) feature.
832  * @details Enabling this bit disables the WoWLAN feature, which is used for waking the device from a low-power state through wireless network activity.
833  * By default WOW LAN Is enabled to maintain backward compatibility. So given option to disable this feature.
834  *
835  * @note This only valid in NCP mode.
836  */
837 #define SL_SI91X_EXT_FEAT_WOWLAN_DISABLE BIT(17)
838 
839 /**
840  * @def SL_SI91X_EXT_FEAT_DISABLE_XTAL_CORRECTION
841  * @brief To disable auto correction of XTAL (40MHz crystal)
842  * @details Enabling this bit will disable the automatic compensation for frequency offsets, ensuring error-free calibration.
843  *
844  * @note This bit should be enabled in the following cases:
845  * @note 1. Always enable it in the Calibration application.
846  * @note 2. Enable it for all applications for the customer hardware with an XTAL part number other than 8Y40070013.
847  */
848 #define SL_SI91X_EXT_FEAT_DISABLE_XTAL_CORRECTION BIT(18)
849 
850 /**
851  * @def SL_SI91X_EXT_FEAT_LOW_POWER_MODE
852  * @brief To enable low power mode in WLAN.
853  * @details Enabling this bit activates low power mode for WLAN, Active current will also be reduced.
854  * As most of the code which is needed to maintain connection is kept in RAM.
855  * There will be minimal execution of code from Flash which in turn results in low average current.
856  */
857 #define SL_SI91X_EXT_FEAT_LOW_POWER_MODE BIT(19)
858 
859 #if defined(SLI_SI917) || defined(DOXYGEN) || defined(SLI_SI915)
860 
861 // For SoC
862 #if defined(SLI_SI91X_MCU_INTERFACE) || defined(DOXYGEN)
863 /**
864  * @def SL_SI91X_EXT_FEAT_352K_M4SS_320K
865  * @brief To enable 352K memory for NWP and 320K memory for M4.
866  * @details This configuration allocates 352K memory to the Network Processor (NWP) and 320K memory to the M4 core.
867  */
868 #define SL_SI91X_EXT_FEAT_352K_M4SS_320K 0
869 
870 /**
871  * @def SL_SI91X_RAM_LEVEL_NWP_BASIC_MCU_ADV
872  * @brief To enable basic NWP and advanced MCU RAM level configuration.
873  * @details This setting configures the NWP with a basic memory level while providing the MCU with an advanced memory configuration.
874  *
875  * @note This configuration uses SL_SI91X_EXT_FEAT_352K_M4SS_320K.
876  */
877 #define SL_SI91X_RAM_LEVEL_NWP_BASIC_MCU_ADV SL_SI91X_EXT_FEAT_352K_M4SS_320K
878 
879 /**
880  * @def SL_SI91X_EXT_FEAT_416K_M4SS_256K
881  * @brief To enable 416K memory for NWP and 256K memory for M4.
882  * @details This configuration allocates 416K memory to the Network Processor (NWP) and 256K memory to the M4 core.
883  */
884 #define SL_SI91X_EXT_FEAT_416K_M4SS_256K BIT(21)
885 
886 /**
887  * @def SL_SI91X_RAM_LEVEL_NWP_MEDIUM_MCU_MEDIUM
888  * @brief To enable medium NWP and medium MCU RAM level configuration.
889  * @details This setting configures both the NWP and the MCU with medium memory levels.
890  *
891  * @note This configuration uses SL_SI91X_EXT_FEAT_416K_M4SS_256K.
892  */
893 #define SL_SI91X_RAM_LEVEL_NWP_MEDIUM_MCU_MEDIUM SL_SI91X_EXT_FEAT_416K_M4SS_256K
894 
895 /**
896  * @def SL_SI91X_EXT_FEAT_480K_M4SS_192K
897  * @brief To enable 480K memory for NWP and 192K memory for M4.
898  * @details This configuration allocates 480K memory to the Network Processor (NWP) and 192K memory to the M4 core.
899  */
900 #define SL_SI91X_EXT_FEAT_480K_M4SS_192K BIT(20)
901 
902 /**
903  * @def SL_SI91X_RAM_LEVEL_NWP_ADV_MCU_BASIC
904  * @brief To enable advanced NWP and basic MCU RAM level configuration.
905  * @details This setting configures the NWP with an advanced memory level while providing the MCU with a basic memory configuration.
906  *
907  * @note This configuration uses SL_SI91X_EXT_FEAT_480K_M4SS_192K.
908  */
909 #define SL_SI91X_RAM_LEVEL_NWP_ADV_MCU_BASIC SL_SI91X_EXT_FEAT_480K_M4SS_192K
910 #endif
911 
912 // For NCP
913 #if (!defined(SLI_SI91X_MCU_INTERFACE)) || defined(DOXYGEN)
914 /**
915  * @def SL_SI91X_EXT_FEAT_352K
916  * @brief To enable 352K memory for NWP.
917  */
918 #define SL_SI91X_EXT_FEAT_352K 0
919 
920 /**
921  * @def SL_SI91X_RAM_LEVEL_NWP_BASIC
922  * @brief To enable basic NWP RAM level configuration.
923  * @details This setting configures the Network Processor (NWP) with 352K of memory.
924  */
925 #define SL_SI91X_RAM_LEVEL_NWP_BASIC SL_SI91X_EXT_FEAT_352K
926 
927 /**
928  * @def SL_SI91X_EXT_FEAT_672K
929  * @brief To enable 672K memory for NWP.
930  */
931 #define SL_SI91X_EXT_FEAT_672K (BIT(20) | BIT(21))
932 
933 /**
934  * @def SL_SI91X_RAM_LEVEL_NWP_ALL_AVAILABLE
935  * @brief To enable full NWP RAM level configuration.
936  * @details This setting configures the Network Processor (NWP) with 672K of memory.
937  */
938 #define SL_SI91X_RAM_LEVEL_NWP_ALL_AVAILABLE SL_SI91X_EXT_FEAT_672K
939 
940 /**
941  * @def SL_SI91X_EXT_FEAT_352K_M4SS_320K
942  * @brief To enable 352K memory for NWP (For NCP mode ONLY, to be deprecated soon).
943  * @details This setting is soon to be deprecated and should only be used for NCP mode.
944  *
945  * @note For NCP mode ONLY, to be deprecated soon.
946  */
947 #define SL_SI91X_EXT_FEAT_352K_M4SS_320K SL_SI91X_EXT_FEAT_352K
948 
949 /**
950  * @def SL_SI91X_RAM_LEVEL_NWP_BASIC_MCU_ADV
951  * @brief To enable basic NWP RAM level configuration (For NCP mode ONLY, to be deprecated soon).
952  * @details This setting configures the Network Processor (NWP) with 352K of memory in NCP mode.
953  *
954  * @note For NCP mode ONLY, to be deprecated soon.
955  */
956 #define SL_SI91X_RAM_LEVEL_NWP_BASIC_MCU_ADV SL_SI91X_EXT_FEAT_352K
957 
958 /**
959  * @def SL_SI91X_EXT_FEAT_672K_M4SS_0K
960  * @brief To enable 672K memory for NWP and 0K memory for M4 (For NCP mode ONLY, to be deprecated soon).
961  * @details This setting configures the Network Processor (NWP) with 672K of memory and allocates no memory to the M4 core in NCP mode.
962  *
963  * @note For NCP mode ONLY, to be deprecated soon.
964  */
965 #define SL_SI91X_EXT_FEAT_672K_M4SS_0K SL_SI91X_EXT_FEAT_672K
966 
967 /**
968  * @def SL_SI91X_RAM_LEVEL_NWP_ALL_MCU_ZERO
969  * @brief To enable full NWP RAM level configuration (For NCP mode ONLY, to be deprecated soon).
970  * @details This setting configures the Network Processor (NWP) with 672K of memory and allocates no memory to the M4 core in NCP mode.
971  *
972  * @note For NCP mode ONLY, to be deprecated soon.
973  */
974 #define SL_SI91X_RAM_LEVEL_NWP_ALL_MCU_ZERO SL_SI91X_EXT_FEAT_672K
975 
976 #endif
977 
978 #elif defined(SLI_SI917) || defined(SLI_SI915)
979 
980 #define SL_SI91X_EXT_FEAT_384K_M4SS_320K         0
981 #define SL_SI91X_RAM_LEVEL_NWP_BASIC_MCU_ADV     SL_SI91X_EXT_FEAT_384K_M4SS_320K
982 
983 /// To enable 448K memory for NWP
984 /// To enable 448K memory for NWP
985 #define SL_SI91X_EXT_FEAT_448K_M4SS_256K         BIT(21)
986 #define SL_SI91X_RAM_LEVEL_NWP_MEDIUM_MCU_MEDIUM SL_SI91X_EXT_FEAT_448K_M4SS_256K
987 
988 /// To enable 512K memory for NWP
989 #define SL_SI91X_EXT_FEAT_512K_M4SS_192K         BIT(20)
990 #define SL_SI91X_RAM_LEVEL_NWP_ADV_MCU_BASIC     SL_SI91X_EXT_FEAT_512K_M4SS_192K
991 
992 #ifndef SLI_SI91X_MCU_INTERFACE
993 // To enable 704K memory for NWP; only supported in NCP
994 #define SL_SI91X_EXT_FEAT_704K_M4SS_0K       (BIT(20) | BIT(21))
995 #define SL_SI91X_RAM_LEVEL_NWP_ALL_MCU_ZERO  SL_SI91X_EXT_FEAT_704K_M4SS_0K
996 #define SL_SI91X_RAM_LEVEL_NWP_ALL_AVAILABLE SL_SI91X_RAM_LEVEL_NWP_ALL_MCU_ZERO
997 #endif
998 
999 #endif // SLI_SI917
1000 
1001 /// For 9116 chipsets
1002 #if !(defined(SLI_SI917) || defined(SLI_SI915)) // defaults
1003 
1004 /**
1005  * @def SL_SI91X_RAM_LEVEL_NWP_MEDIUM_MCU_MEDIUM
1006  * @brief RAM level configuration: Medium NWP and Medium MCU memory.
1007  * @details This macro sets the RAM level to Medium for both NWP (Network Processor) and MCU (Microcontroller) memory.
1008  */
1009 #define SL_SI91X_RAM_LEVEL_NWP_MEDIUM_MCU_MEDIUM SL_SI91X_EXT_FEAT_256K_MODE
1010 
1011 /**
1012  * @def SL_SI91X_EXT_FEAT_320K_MODE
1013  * @brief To enable 320K memory for NWP.
1014  * @details Enabling this bit sets the memory configuration to 320KB for the NWP.
1015  */
1016 #define SL_SI91X_EXT_FEAT_320K_MODE BIT(20)
1017 
1018 /**
1019  * @def SL_SI91X_RAM_LEVEL_NWP_ADV_MCU_BASIC
1020  * @brief RAM level configuration: Advanced NWP and Basic MCU memory.
1021  * @details This macro sets the RAM level to Advanced for NWP (Network Processor) and Basic for MCU (Microcontroller) memory, equivalent to enabling 320KB memory.
1022  */
1023 #define SL_SI91X_RAM_LEVEL_NWP_ADV_MCU_BASIC SL_SI91X_EXT_FEAT_320K_MODE
1024 
1025 /**
1026  * @def SL_SI91X_EXT_FEAT_256K_MODE
1027  * @brief To enable 256K memory for NWP.
1028  * @details Enabling this bit sets the memory configuration to 256KB for the NWP. The default memory configuration is 192KB. The memory configuration can be changed as follows:
1029  *
1030  * | Mode(KB) | BIT[20] | BIT[21] |
1031  * |:---------|:--------|:--------|
1032  * | 192      | 0       | 0       |
1033  * | 256      | 0       | 1       |
1034  * | 320      | 1       | 0       |
1035  * | 384      | 1       | 1       |
1036  *
1037  * @note Default memory configuration (RAM) is 192KB. User can set these bits to change the memory configuration as described.
1038  */
1039 #define SL_SI91X_EXT_FEAT_256K_MODE BIT(21)
1040 
1041 /**
1042  * @def SL_SI91X_EXT_FEAT_384K_MODE
1043  * @brief To enable 384K memory.
1044  * @details Enabling this bit sets the memory configuration to 384KB. This configuration is achieved by setting both BIT(20) and BIT(21).
1045  */
1046 #define SL_SI91X_EXT_FEAT_384K_MODE (BIT(20) | BIT(21))
1047 
1048 /**
1049  * @def SL_SI91X_RAM_LEVEL_NWP_ALL_MCU_ZERO
1050  * @brief RAM level configuration: All NWP and Zero MCU memory.
1051  * @details This macro sets the RAM level to 384KB for NWP (Network Processor) memory with zero configuration for MCU (Microcontroller) memory, equivalent to enabling 384KB memory.
1052  */
1053 #define SL_SI91X_RAM_LEVEL_NWP_ALL_MCU_ZERO SL_SI91X_EXT_FEAT_384K_MODE
1054 
1055 /**
1056  * @def SL_SI91X_RAM_LEVEL_NWP_ALL_AVAILABLE
1057  * @brief RAM level configuration: All available NWP memory.
1058  * @details This macro sets the RAM level to the maximum available memory configuration for NWP (Network Processor), which is equivalent to the configuration set by `SL_SI91X_RAM_LEVEL_NWP_ALL_MCU_ZERO`.
1059  */
1060 #define SL_SI91X_RAM_LEVEL_NWP_ALL_AVAILABLE SL_SI91X_RAM_LEVEL_NWP_ALL_MCU_ZERO
1061 
1062 #endif // defaults
1063 
1064 /**
1065  * @def SL_SI91X_EXT_FEAT_XTAL_CLK_ENABLE
1066  * @brief To enable crystal clock for NWP.
1067  * @details This macro configures the sleep clock source selection for the NWP. The options are as follows:
1068  *
1069  * | Selection                                     | BIT[23] | BIT[22] |
1070  * |:----------------------------------------------|:--------|:--------|
1071  * | Use RC clock as sleep clock                   | 0       | 0       |
1072  * | Use 32KHz clock from external XTAL OSCILLATOR | 0       | 1       |
1073  * | Use 32KHz bypass clock on UULP_GPIO_3         | 1       | 0       |
1074  * | Use 32KHz bypass clock on UULP_GPIO_4         | 1       | 1       |
1075  *
1076  * @note For 917 radio boards, set `SL_SI91X_EXT_FEAT_XTAL_CLK_ENABLE` to 1. For other variants, a value of 2 is recommended.
1077  */
1078 
1079 #ifdef SI91X_32kHz_EXTERNAL_OSCILLATOR
1080 #define SL_SI91X_EXT_FEAT_XTAL_CLK_ENABLE(xtal_clk_enable) (xtal_clk_enable << 23)
1081 #else
1082 #define SL_SI91X_EXT_FEAT_XTAL_CLK_ENABLE(xtal_clk_enable) (xtal_clk_enable << 22)
1083 #endif
1084 
1085 // Determine the XTAL clock enable value
1086 #if defined(SLI_SI917) || defined(SLI_SI915) && defined(SLI_SI91X_MCU_CONFIG_RADIO_BOARD_VER2)
1087 /// To enable crystal clock for NWP
1088 #define SL_SI91X_EXT_FEAT_XTAL_CLK SL_SI91X_EXT_FEAT_XTAL_CLK_ENABLE(1)
1089 #else
1090 /**
1091  * @def SL_SI91X_EXT_FEAT_XTAL_CLK
1092  * @brief Define to enable 32KHz crystal clock using the external XTAL OSCILLATOR.
1093  * @details This macro sets the `SL_SI91X_EXT_FEAT_XTAL_CLK_ENABLE` with a value of 2, which configures the sleep clock source to use the 32KHz clock from the external XTAL OSCILLATOR.
1094  */
1095 #define SL_SI91X_EXT_FEAT_XTAL_CLK SL_SI91X_EXT_FEAT_XTAL_CLK_ENABLE(2)
1096 #endif
1097 
1098 /**
1099  * @def SL_SI91X_EXT_FEAT_HOMEKIT_WAC_ENABLED
1100  * @brief To inform firmware not to modify mDNS text records.
1101  * @details Enabling this bit indicates that the firmware should not alter mDNS (Multicast DNS) text records.
1102  */
1103 #define SL_SI91X_EXT_FEAT_HOMEKIT_WAC_ENABLED BIT(24)
1104 
1105 /**
1106  * @def SL_SI91X_EXT_FEAT_1P8V_SUPPORT
1107  * @brief To enable 1.8V support for NWP.
1108  * @details Enabling this bit activates support for 1.8V operation.
1109  */
1110 #define SL_SI91X_EXT_FEAT_1P8V_SUPPORT BIT(25)
1111 
1112 /**
1113  * @def SL_SI91X_EXT_FEAT_UART_SEL_FOR_DEBUG_PRINTS
1114  * @brief To select UART for debug prints pin selection.
1115  * @details If BIT(27) is enabled, debug prints are supported on UART1. If BIT(27) is disabled, debug prints are supported on UART2.
1116  *
1117  * @note Bit 26 is reserved.
1118  * @note By default, all debug prints from the device network processor will be sent to UART2 if this bit is not enabled. UART1 pins are mapped as follows:
1119  * - UART1-TX: GPIO_9
1120  * - UART1-RX: GPIO_8
1121  * - UART2-TX: GPIO_6
1122  * - UART2-RX: GPIO_10
1123  *
1124  * Ensure these pins are not used in MCU applications in SoC mode to avoid pin usage conflicts. This bit is valid only if BIT[28] in the ext_custom_feature_bit_map is set to 0. There is no functionality on RX pins for debug prints.
1125  */
1126 #define SL_SI91X_EXT_FEAT_UART_SEL_FOR_DEBUG_PRINTS BIT(27)
1127 
1128 /**
1129  * @def SL_SI91X_EXT_FEAT_DISABLE_DEBUG_PRINTS
1130  * @brief To disable debug prints support in NWP (Network Processor).
1131  * @details By default the prints will be coming on UART2. If this bit is enabled, disable debug prints.
1132  * To enable prints on UART 1 @ref SL_SI91X_EXT_FEAT_UART_SEL_FOR_DEBUG_PRINTS  bit needs to set.
1133  */
1134 #define SL_SI91X_EXT_FEAT_DISABLE_DEBUG_PRINTS BIT(28)
1135 
1136 #if defined(SLI_SI917) || defined(DOXYGEN) || defined(SLI_SI915)
1137 /**
1138  * @def SL_SI91X_EXT_FEAT_FRONT_END_SWITCH_PINS_ULP_GPIO_4_5_0
1139  * @brief To configure frontend with selection BIT[30:29] for 917B0.
1140  * @details This bit configures the frontend switch pins based on the following table:
1141  *
1142  * | Bit[30] | BIT[29] | ANT_SEL_1 (VC3)  | ANT_SEL_2 (VC2)  | ANT_SEL_3 (VC1)  |
1143  * |:--------|:--------|:-----------------|:-----------------|:-----------------|
1144  * | 0       | 0       | Reserved         | Reserved         | Reserved         |
1145  * | 0       | 1       | ULP_GPIO 4       | ULP_GPIO 5       | ULP_GPIO 0       |
1146  * | 1       | 0       | Internal Switch  | Internal Switch  | Internal Switch  |
1147  * | 1       | 1       | Reserved         | Reserved         | Reserved         |
1148  *
1149  * @note SiWx917 has an integrated on-chip transmit/receive (T/R) switch. This internal RF switch configuration uses internal logic present in the IC, and GPIOs are not needed. RF_BLE_TX (8dBm) mode is not supported in this configuration.
1150  * @note VC1, VC2, and VC3 are control voltage pins of the RF switch.
1151  */
1152 #define SL_SI91X_EXT_FEAT_FRONT_END_SWITCH_PINS_ULP_GPIO_4_5_0 BIT(29)
1153 
1154 /**
1155  * @def SL_SI91X_EXT_FEAT_FRONT_END_INTERNAL_SWITCH
1156  * @brief To enable the internal front-end switch configuration.
1157  * @details Enabling this bit selects the internal front-end switch configuration for the frontend. This configuration uses internal logic present in the IC, eliminating the need for external GPIOs.
1158  */
1159 #define SL_SI91X_EXT_FEAT_FRONT_END_INTERNAL_SWITCH BIT(30)
1160 
1161 #else
1162 /**
1163  * @brief For 917A0
1164  *
1165  * | Bit[30] | BIT[29] | ANT_SEL_1(VC3) | ANT_SEL_2(VC2) | ANT_SEL_3(VC1) |
1166  * |:--------|:--------|:---------------|:---------------|:---------------|
1167  * | 0       |   0     | GPIO 46        | GPIO 47        | GPIO 48        |
1168  * | 0       |   1     | Reserved       | Reserved       | Reserved       |
1169  * | 1       |   0     | UILP_GPIO 4    | ULP_GPIO 5     | ULP_GPIO 0     |
1170  * | 1       |   1     | UILP_GPIO 4    | ULP_GPIO 5     | ULP_GPIO 7     |
1171  */
1172 #define SL_SI91X_EXT_FEAT_FRONT_END_SWITCH_PINS_GPIO_46_47_48  0
1173 #define SL_SI91X_EXT_FEAT_FRONT_END_SWITCH_PINS_ULP_GPIO_4_5_0 BIT(30)
1174 #define SL_SI91X_EXT_FEAT_FRONT_END_SWITCH_PINS_ULP_GPIO_4_5_7 (BIT(30) | BIT(29))
1175 #endif
1176 
1177 /**
1178  * @def SL_SI91X_EXT_FEAT_BT_CUSTOM_FEAT_ENABLE
1179  * @brief To enable Bluetooth custom features.
1180  * @details Enabling this bit activates Bluetooth custom features.
1181  * If this bit is enabled then only, the features present in the Bluetooth custom feature can be used.
1182  */
1183 #define SL_SI91X_EXT_FEAT_BT_CUSTOM_FEAT_ENABLE BIT(31)
1184 /** @} */
1185 
1186 /** \addtogroup SI91X_EXTENDED_TCP_IP_FEATURE_BITMAP
1187   * @{ */
1188 /*=========================================================================*/
1189 // Extended TCP/IP feature bit map parameters description !//
1190 /*=========================================================================*/
1191 /**
1192  * @def SL_SI91X_EXT_TCP_FEAT_DHCP_OPT77
1193  * @brief DHCP USER CLASS.
1194  * @details
1195  * This feature enables DHCP Option 77, which allows the device to specify user class information in DHCP requests.
1196  *
1197  * @note Bit 0 is reserved.
1198  */
1199 #define SL_SI91X_EXT_TCP_FEAT_DHCP_OPT77 BIT(1)
1200 
1201 /**
1202  * @def SL_SI91X_EXT_TCP_IP_BI_DIR_ACK_UPDATE
1203  * @brief TCP bi-directional acknowledgment update.
1204  * @details
1205  * This feature enables bi-directional data transfer by updating TCP acknowledgment handling.
1206  *
1207  * @note Need to enable this bit if user wants to run the bi-directional data transfer.
1208  * @note Bit 2 is reserved.
1209  */
1210 #define SL_SI91X_EXT_TCP_IP_BI_DIR_ACK_UPDATE BIT(3)
1211 
1212 /**
1213  * @def SL_SI91X_EXT_TCP_IP_WINDOW_DIV
1214  * @brief TCP RX window division.
1215  * @details
1216  * This feature allows the division of the TCP receive window, enabling
1217  * more granular control over the window size.
1218  */
1219 #define SL_SI91X_EXT_TCP_IP_WINDOW_DIV BIT(4)
1220 
1221 /**
1222  * @def SL_SI91X_EXT_TCP_IP_CERT_BYPASS
1223  * @brief SSL server certificate bypass.
1224  * @details
1225  * This feature allows the device to bypass SSL server certificate
1226  * validation, with validation being performed by the host instead.
1227  */
1228 #define SL_SI91X_EXT_TCP_IP_CERT_BYPASS BIT(5)
1229 
1230 /**
1231  * @def SL_SI91X_EXT_TCP_IP_SSL_16K_RECORD
1232  * @brief SSL 16K record size support.
1233  * @details
1234  * This feature enables support for 16K SSL record sizes, improving
1235  * performance for SSL connections that use larger record sizes.
1236  */
1237 #define SL_SI91X_EXT_TCP_IP_SSL_16K_RECORD BIT(6)
1238 
1239 /**
1240  * @def SL_SI91X_EXT_TCP_IP_DNS_CLIENT_BYPASS
1241  * @brief Enable DNS client bypass.
1242  * @details
1243  * This feature allows the device to bypass the internal DNS client,
1244  * using the host for DNS resolution instead.
1245  */
1246 #define SL_SI91X_EXT_TCP_IP_DNS_CLIENT_BYPASS BIT(7)
1247 
1248 /**
1249  * @def SL_SI91X_EXT_TCP_IP_WINDOW_SCALING
1250  * @brief Enable TCP window scaling feature.
1251  * @details
1252  * This feature enables TCP window scaling, allowing the device to use
1253  * receive window sizes larger than 64 KB.
1254  *
1255  * @note If this feature is not enabled, then the maximum possible RX window size is 64 KB.
1256  * If user wants to use more than 64KB window size, tcp_rx_window_size_cap in socket configuration is used to increase the window size.
1257  */
1258 #define SL_SI91X_EXT_TCP_IP_WINDOW_SCALING BIT(8)
1259 
1260 /**
1261  * @def SL_SI91X_EXT_TCP_IP_DUAL_MODE_ENABLE
1262  * @brief Enable both TCP/IP bypass mode and embedded modes.
1263  * @details
1264  * This feature allows the device to use both bypass and non-bypass modes
1265  * simultaneously, providing flexibility in network communication.
1266  *
1267  * @note Enabling this feature allows to use both bypass and non-bypass modes simultaneously.
1268  */
1269 #define SL_SI91X_EXT_TCP_IP_DUAL_MODE_ENABLE BIT(9)
1270 
1271 /**
1272  * @def SL_SI91X_EXT_TCP_IP_ETH_WIFI_BRIDGE
1273  * @brief Enable Ethernet to WiFi bridge.
1274  * @details
1275  * This feature enables the device to act as a bridge between Ethernet and
1276  * WiFi networks, facilitating communication between the two.
1277  */
1278 #define SL_SI91X_EXT_TCP_IP_ETH_WIFI_BRIDGE BIT(10)
1279 
1280 /**
1281  * @def SL_SI91X_EXT_DYNAMIC_COEX_MEMORY
1282  * @brief Enable dynamic coexistence memory.
1283  * @details
1284  * This feature dynamically adjusts the TCP receive window size based on
1285  * coexistence requirements, improving network performance in coexistence
1286  * scenarios.
1287  *
1288  * @note To enable or disable the coexistence and update TCP RX window accordingly.
1289  */
1290 #define SL_SI91X_EXT_DYNAMIC_COEX_MEMORY BIT(11)
1291 
1292 /**
1293  * @def SL_SI91X_EXT_TCP_IP_TOTAL_SELECTS
1294  * @brief Configure the number of selects.
1295  * @details
1296  * This feature configures the number of select operations the device can
1297  * handle, with a maximum value of 10.
1298  *
1299  * @note Bits 12 - 15 are used for TOTAL_SELECTS.
1300  */
1301 #define SL_SI91X_EXT_TCP_IP_TOTAL_SELECTS(total_selects) (total_selects << 12)
1302 
1303 /**
1304  * @def SL_SI91X_EXT_TCP_IP_WAIT_FOR_SOCKET_CLOSE
1305  * @brief Enable socket wait close.
1306  * @details
1307  * This feature ensures that a socket is not closed until close() is called
1308  * from the host, which is recommended for use with TCP sockets.
1309  *
1310  * @note If it is set socket will not be closed until close() is called from host. It is recommended to enable this bit when using TCP sockets.
1311  * @note This is always set internally for Si91x chips.
1312  */
1313 #define SL_SI91X_EXT_TCP_IP_WAIT_FOR_SOCKET_CLOSE BIT(16)
1314 
1315 /**
1316  * @def SL_SI91X_EXT_EMB_MQTT_ENABLE
1317  * @brief Enable embedded/internal MQTT.
1318  * @details
1319  * This feature enables support for embedded MQTT (Message Queuing
1320  * Telemetry Transport) functionality, allowing the device to use MQTT
1321  * without external libraries.
1322  *
1323  * @note If user wants to use AT command for MQTT, enable this bit in the Opermode Command.
1324  */
1325 #define SL_SI91X_EXT_EMB_MQTT_ENABLE BIT(17)
1326 
1327 /**
1328  * @def SL_SI91X_EXT_FEAT_HTTP_OTAF_SUPPORT
1329  * @brief Enable HTTP OTAF support.
1330  * @details
1331  * This feature enables support for HTTP-based over-the-air firmware (OTAF)
1332  * updates, allowing the device to download and install firmware updates
1333  * via HTTP.
1334  *
1335  * @note To do firmware upgrade with HTTP this bit should be enabled.
1336  */
1337 #define SL_SI91X_EXT_FEAT_HTTP_OTAF_SUPPORT BIT(18)
1338 
1339 /**
1340  * @def SL_SI91X_EXT_TCP_DYNAMIC_WINDOW_UPDATE_FROM_HOST
1341  * @brief Enable to update TCP window from host.
1342  * @details
1343  * This feature allows the TCP window size to be dynamically updated from
1344  * the host, providing more control over TCP flow management.
1345  */
1346 #define SL_SI91X_EXT_TCP_DYNAMIC_WINDOW_UPDATE_FROM_HOST BIT(19)
1347 
1348 /**
1349  * @def SL_SI91X_EXT_TCP_MAX_RECV_LENGTH
1350  * @brief Enable to update max receive length for TCP.
1351  * @details
1352  * This feature allows the maximum receive length for TCP connections to be
1353  * updated, accommodating different application requirements.
1354  */
1355 #define SL_SI91X_EXT_TCP_MAX_RECV_LENGTH BIT(20)
1356 
1357 /**
1358  * @def SL_SI91X_EXT_TCP_IP_FEAT_SSL_THREE_SOCKETS
1359  * @brief Enable three SSL/TLS sockets.
1360  * @details
1361  * This feature allows the device to support up to three simultaneous
1362  * SSL/TLS connections.
1363  *
1364  * @note Set tcp_ip_feature_bit_map[31] and ext_tcp_ip_feature_bit_map[29] to open 3 TLS sockets.
1365  * @note Bits 21-28 are reserved.
1366  */
1367 #define SL_SI91X_EXT_TCP_IP_FEAT_SSL_THREE_SOCKETS BIT(29)
1368 
1369 /**
1370  * @def SL_SI91X_EXT_TCP_IP_FEAT_SSL_MEMORY_CLOUD
1371  * @brief Configure additional memory for SSL/TLS connections to cloud servers.
1372  * @details
1373  * This feature allocates additional memory for SSL/TLS connections,
1374  * typically required for connections to cloud servers, to avoid 0xD2 error.
1375  *
1376  * @note If user connects to a cloud server using two SSL/TLS connections then it is required to set this bit to avoid 0xD2 error.
1377  */
1378 #define SL_SI91X_EXT_TCP_IP_FEAT_SSL_MEMORY_CLOUD BIT(30)
1379 
1380 /**
1381  * @def SL_SI91X_CONFIG_FEAT_EXTENTION_VALID
1382  * @brief Config feature bit map validity.
1383  * @details
1384  * This feature validates the configuration feature bit map.
1385  * If this bit is enabled then only, the features present in the configuration feature bitmap can be used.
1386  */
1387 #define SL_SI91X_CONFIG_FEAT_EXTENSION_VALID BIT(31)
1388 /** @} */
1389 
1390 /** \addtogroup SI91X_BT_FEATURE_BITMAP
1391   * @{ */
1392 /*=========================================================================*/
1393 // BT feature bit map parameters description !//
1394 /*=========================================================================*/
1395 /**
1396  * @def SL_SI91X_BT_RF_TYPE
1397  * @brief Macro to specify the BT RF type for the SI91X wireless device.
1398  *
1399  * This macro is used to specify the BT RF type for the SI91X wireless device.
1400  * It is defined as BIT(30).
1401  * 0 - RF_TYPE_EXTERNAL
1402  * 1 - RF_TYPE_INTERNAL
1403  */
1404 #define SL_SI91X_BT_RF_TYPE BIT(30)
1405 /**
1406  * @def SL_SI91X_ENABLE_BLE_PROTOCOL
1407  * @brief Macro to enable the BLE protocol.
1408  *
1409  * This macro is used to enable the BLE (Bluetooth Low Energy) protocol.
1410  * The BLE protocol can be enabled by setting the bit 31 of the corresponding register.
1411  *
1412  */
1413 #define SL_SI91X_ENABLE_BLE_PROTOCOL BIT(31)
1414 /** @} */
1415 
1416 /** \addtogroup SI91X_BLE_FEATURE_BITMAP
1417   * @{ */
1418 /*=========================================================================*/
1419 // BLE feature bit map
1420 /*=========================================================================*/
1421 /**
1422  * @def SL_SI91X_BLE_MAX_NBR_ATT_REC
1423  * @brief BLE number of attributes.
1424  * @details
1425  * Sets the maximum number of BLE attributes.
1426 
1427  * @note Maximum number of BLE attributes is 124.
1428  * @note Bits 0 - 7 are used to set MAX_NBR_ATT_REC.
1429  */
1430 #define SL_SI91X_BLE_MAX_NBR_ATT_REC(max_num_of_att_rec) (max_num_of_att_rec << 0)
1431 /**
1432  * @def SL_SI91X_BLE_MAX_NBR_ATT_SERV
1433  * @brief BLE number of GATT services.
1434  * @details
1435  * Sets the maximum number of BLE GATT services.
1436 
1437  * @note Maximum number of services is 10.
1438  * @note Bits 8 - 11 are used to set MAX_NBR_ATT_SERV.
1439  */
1440 #define SL_SI91X_BLE_MAX_NBR_ATT_SERV(max_num_of_att_serv) (max_num_of_att_serv << 8)
1441 /**
1442  * @def SL_SI91X_BLE_MAX_NBR_PERIPHERALS
1443  * @brief BLE number of peripherals.
1444  * @details
1445  * Sets the maximum number of BLE peripherals.
1446 
1447  * @note Maximum number of BLE peripherals is 8.
1448  * @note Bits 12 - 15 are used to set MAX_NBR_PERIPHERALS.
1449  */
1450 #define SL_SI91X_BLE_MAX_NBR_PERIPHERALS(max_num_of_peripherals) (max_num_of_peripherals << 12)
1451 /**
1452  * @def SL_SI91X_BLE_PWR_INX
1453  * @brief BLE Tx power index.
1454  * @details
1455  * Sets the BLE Tx power index value.
1456  * - Default value for BLE Tx Power Index is 31.
1457  * - Range for the BLE Tx Power Index is 1 to 127 (0, 32 index is invalid).
1458  *   -  1 - 31: BLE - 0dBm Mode
1459  *   - 33 - 63: BLE - 10dBm Mode
1460  *   - 64 - 127: BLE - HP Mode
1461 
1462  * @note Bits 16 - 23 are used to set PWR_INX.
1463  */
1464 #define SL_SI91X_BLE_PWR_INX(power_index) (power_index << 16)
1465 /**
1466  * @def SL_SI91X_BLE_PWR_SAVE_OPTIONS
1467  * @brief BLE power save options.
1468  * @details
1469  * Configures BLE power save options.
1470  * - Bit 24: BLE_DUTY_CYCLING
1471  * - Bit 25: BLR_DUTY_CYCLING
1472  * - Bit 26: BLE_4X_PWR_SAVE_MODE
1473  * - For BLE_DISABLE_DUTY_CYCLING, bits 24-26 are set to zero.
1474 
1475  * @note This feature is not supported in the current release.
1476  */
1477 #define SL_SI91X_BLE_PWR_SAVE_OPTIONS(duty_cycle) (duty_cycle << 24)
1478 /**
1479  * @def SL_SI91X_BLE_MAX_NBR_CENTRALS
1480  * @brief Number of Centrals.
1481  * @details
1482  * Sets the maximum number of BLE Central devices.
1483 
1484  * @note Maximum number of BLE Centrals is 2.
1485  * @note Bits 27 - 28 are used to set BLE_PWR_INX.
1486  */
1487 #define SL_SI91X_BLE_MAX_NBR_CENTRALS(max_num_of_centrals) (max_num_of_centrals << 27)
1488 /**
1489  * @def SL_SI91X_BLE_GATT_ASYNC_ENABLE
1490  * @brief GATT ASYNC BIT.
1491  * @details
1492  * Enables asynchronous GATT operations.
1493 
1494  * @note Default is disabled. When enabled, the response structure will be filled in the Event, which will come later, not in sync with the response for the query command.
1495  */
1496 #define SL_SI91X_BLE_GATT_ASYNC_ENABLE BIT(29)
1497 /**
1498  * @def SL_SI91X_916_BLE_COMPATIBLE_FEAT_ENABLE
1499  * @brief BLE feature compatibility.
1500  * @details
1501  * Enables new feature compatible.
1502  *
1503  * @note This bit should be enable to get the set of events from controller for the new features.
1504  */
1505 #define SL_SI91X_916_BLE_COMPATIBLE_FEAT_ENABLE BIT(30)
1506 /**
1507  * @def SL_SI91X_FEAT_BLE_CUSTOM_FEAT_EXTENTION_VALID
1508  * @brief Extension validity for custom feature bitmap.
1509  * @details
1510  * Validates the use of an extended custom feature bitmap for BLE.
1511  */
1512 #define SL_SI91X_FEAT_BLE_CUSTOM_FEAT_EXTENSION_VALID BIT(31)
1513 /** @} */
1514 
1515 /** \addtogroup SI91X_EXTENDED_BLE_CUSTOM_FEATURE_BITMAP
1516   * @{ */
1517 /*=========================================================================*/
1518 // Extended BLE custom feature bit map parameters description !//
1519 /*=========================================================================*/
1520 /**
1521  * @def SL_SI91X_BLE_NUM_CONN_EVENTS
1522  * @brief BLE number of connection events.
1523  * @details
1524  * Describes the number of buffers that need to be allocated for BLE on the opermode.
1525  * - By default, each role (central/peripheral) will be allocated with 1 buffer for the notify/write command.
1526  * - Increasing the buffer capacity for the notify/write commands helps achieve the best throughput.
1527  * - See rsi_ble_set_wo_resp_notify_buf_info() to set more buffers for the notify/write commands.
1528 
1529  * @note Bits 0 - 4 are used to set NUM_CONN_EVENTS.
1530  */
1531 #define SL_SI91X_BLE_NUM_CONN_EVENTS(num_conn_events) (num_conn_events << 0)
1532 /**
1533  * @def SL_SI91X_BLE_NUM_REC_BYTES
1534  * @brief BLE number of record size in bytes.
1535  * @details
1536  * Specifies the number of record bytes in multiples of 16.
1537  * - n*16 : (n=60, Default 1024 bytes (1K)).
1538 
1539  * @note Bits 5 - 12 are used to set NUM_REC_BYTES.
1540  */
1541 #define SL_SI91X_BLE_NUM_REC_BYTES(num_rec_bytes) (num_rec_bytes << 5)
1542 /**
1543  * @def SL_SI91X_BLE_GATT_INIT
1544  * @brief GATT initialization mode.
1545  * @details
1546  * Specifies whether the GATT is initialized in firmware or by the host.
1547  * - 0: GATT Init in Firmware. Both the GAP service and GATT service will be maintained by the firmware.
1548  * - 1: GATT Init in Host. The GAP service and GATT service should be created by the APP/Host/User, and the ATT transactions like read, write, notify, and indicate shall be handled by the APP/Host/User.
1549  * - Default: GATT Init in Firmware.
1550  */
1551 #define SL_SI91X_BLE_GATT_INIT BIT(13)
1552 /**
1553  * @def SL_SI91X_BLE_INDICATE_CONFIRMATION_FROM_HOST
1554  * @brief Acknowlegment of the indication from the client.
1555  * @details
1556  * As per the ATT protocol, every indication received from the server should be acknowledged (indication response) by the client.
1557  * - If this bit is disabled, the firmware will send the acknowledgment (indication response).
1558  * - If this bit is enabled, the APP/Host/User needs to send the acknowledgment (indication response).
1559  */
1560 #define SL_SI91X_BLE_INDICATE_CONFIRMATION_FROM_HOST BIT(14)
1561 /**
1562  * @def SL_SI91X_BLE_MTU_EXCHANGE_FROM_HOST
1563  * @brief MTU exchange request initiation from APP.
1564  * @details
1565  * - If this bit is disabled, the firmware will initiate the MTU request to the remote device on a successful connection.
1566  *  - If the peer initiates an MTU exchange request, the firmware will send an Exchange MTU Response in reply to the received Exchange MTU Request.
1567  * - If this bit is enabled, the APP/Host/User needs to initiate the MTU request using the rsi_ble_mtu_exchange_event API.
1568  *  - If the peer initiates an MTU exchange request, the APP/Host/User shall send an Exchange MTU Response using the rsi_ble_mtu_exchange_resp API.
1569  */
1570 #define SL_SI91X_BLE_MTU_EXCHANGE_FROM_HOST BIT(15)
1571 /**
1572  * @def SL_SI91X_BLE_SET_SCAN_RESP_DATA_FROM_HOST
1573  * @brief Set scan response data from host.
1574  * @details
1575  * The device will maintain some default scan response data to be used in the scan_response controller frame.
1576  * - Enabling this bit will make the default data Null (empty).
1577  */
1578 #define SL_SI91X_BLE_SET_SCAN_RESP_DATA_FROM_HOST BIT(16)
1579 /**
1580  * @def SL_SI91X_BLE_DISABLE_CODED_PHY_FROM_HOST
1581  * @brief Disable coded PHY from APP.
1582  * @details
1583  * The device supports the LE-coded PHY feature (i.e., LR - 125kbps and 500kbps) by default.
1584  * - If this bit is enabled, the device will not support the LE-coded PHY rates.
1585  */
1586 #define SL_SI91X_BLE_DISABLE_CODED_PHY_FROM_HOST BIT(17)
1587 /**
1588  * @def SL_SI91X_BLE_ENABLE_ADV_EXTN
1589  * @brief Enable advertising extensions.
1590  * @details
1591  * Enables or disables advertising extensions.
1592 
1593  * @note Bit 19 is used for enabling advertising extensions.
1594  */
1595 #define SL_SI91X_BLE_ENABLE_ADV_EXTN BIT(19)
1596 /**
1597  * @def SL_SI91X_BLE_AE_MAX_ADV_SETS
1598  * @brief Maximum number of AE advertising sets.
1599  * @details
1600  * Configures the maximum number of AE advertising sets.
1601  * - Maximum number of AE advertising sets is 2.
1602 
1603  * @note Bits 20 - 23 are used to set the number of AE advertising sets.
1604  */
1605 #define SL_SI91X_BLE_AE_MAX_ADV_SETS(num_adv_sets) (num_adv_sets << 20)
1606 
1607 /// @note Bits 24 -31 are reserved
1608 /** @} */
1609 
1610 /** \addtogroup SI91X_CONFIG_FEATURE_BITMAP
1611   * @{ */
1612 /*=========================================================================*/
1613 // Config feature bitmap parameters description !//
1614 /*=========================================================================*/
1615 /**
1616  * @def SL_SI91X_FEAT_SLEEP_GPIO_SEL_BITMAP
1617  * @brief Selects the GPIO for wakeup indication to the host.
1618  * @details When this bit is disabled, UULP_GPIO_3 is used as the wakeup indication. When enabled, UULP_GPIO_0 is used instead.
1619  *
1620  * @note Bit 1 is reserved and should not be used.
1621  */
1622 #define SL_SI91X_FEAT_SLEEP_GPIO_SEL_BITMAP BIT(0)
1623 
1624 /**
1625  * @def SL_SI91X_FEAT_DVS_SEL_CONFIG_1
1626  * @brief Enables Dynamic Voltage Selection (DVS) Configuration 1.
1627  * @details This bit configures the dynamic voltage selection for the system.
1628  *
1629  * @note Not applicable for SI917.
1630  */
1631 #define SL_SI91X_FEAT_DVS_SEL_CONFIG_1 BIT(2)
1632 
1633 /**
1634  * @def SL_SI91X_FEAT_DVS_SEL_CONFIG_2
1635  * @brief Enables Dynamic Voltage Selection (DVS) Configuration 2.
1636  * @details This bit configures the dynamic voltage selection for the system.
1637  *
1638  * @note Not applicable for SI917.
1639  */
1640 #define SL_SI91X_FEAT_DVS_SEL_CONFIG_2 BIT(3)
1641 
1642 /**
1643  * @def SL_SI91X_FEAT_DVS_SEL_CONFIG_3
1644  * @brief Enables Dynamic Voltage Selection (DVS) Configuration 3.
1645  * @details This bit configures the dynamic voltage selection for the system.
1646  *
1647  * @note Not applicable for SI917.
1648  */
1649 #define SL_SI91X_FEAT_DVS_SEL_CONFIG_3 BIT(4)
1650 
1651 /**
1652  * @def SL_SI91X_FEAT_DVS_SEL_CONFIG_4
1653  * @brief Enables Dynamic Voltage Selection (DVS) Configuration 4.
1654  * @details This bit configures the dynamic voltage selection for the system.
1655  *
1656  * @note Not applicable for SI917.
1657  */
1658 #define SL_SI91X_FEAT_DVS_SEL_CONFIG_4 BIT(5)
1659 
1660 /**
1661  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_100us
1662  * @brief Configures External PMU good time to 100 µs.
1663  * @details This bit selects an external PMU good time of 100 microseconds.
1664  *
1665  * @note These bits are used to select external PMU good time. 1 to 15 means 100 usec to 1500 usec (in 100 usec granularity)
1666  * @note Not applicable for SI917.
1667  */
1668 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_100us BIT(6)
1669 
1670 /**
1671  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_200us
1672  * @brief Configures External PMU good time to 200 µs.
1673  * @details This bit selects an external PMU good time of 200 microseconds.
1674  *
1675  * @note Not applicable for SI917.
1676  */
1677 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_200us BIT(7)
1678 
1679 /**
1680  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_300us
1681  * @brief Configures External PMU good time to 300 µs.
1682  * @details This is a combination of 100 µs and 200 µs good times, totaling 300 microseconds.
1683  *
1684  * @note Not applicable for SI917.
1685  */
1686 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_300us (BIT(6) | BIT(7))
1687 
1688 /**
1689  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_400us
1690  * @brief Configures External PMU good time to 400 µs.
1691  * @details This bit selects an external PMU good time of 400 microseconds.
1692  *
1693  * @note Not applicable for SI917.
1694  */
1695 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_400us BIT(8)
1696 
1697 /**
1698  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_500us
1699  * @brief Configures External PMU good time to 500 µs.
1700  * @details This is a combination of 100 µs and 400 µs good times, totaling 500 microseconds.
1701  *
1702  * @note Not applicable for SI917.
1703  */
1704 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_500us (BIT(6) | BIT(8))
1705 
1706 /**
1707  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_600us
1708  * @brief Configures External PMU good time to 600 µs.
1709  * @details This is a combination of 200 µs and 400 µs good times, totaling 600 microseconds.
1710  *
1711  * @note Not applicable for SI917.
1712  */
1713 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_600us (BIT(7) | BIT(8))
1714 
1715 /**
1716  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_700us
1717  * @brief Configures External PMU good time to 700 µs.
1718  * @details This is a combination of 100 µs, 200 µs, and 400 µs good times, totaling 700 microseconds.
1719  *
1720  * @note Not applicable for SI917.
1721  */
1722 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_700us (BIT(6) | BIT(7) | BIT(8))
1723 
1724 /**
1725  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_800us
1726  * @brief Configures External PMU good time to 800 µs.
1727  * @details This bit selects an external PMU good time of 800 microseconds.
1728  *
1729  * @note Not applicable for SI917.
1730  */
1731 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_800us BIT(9)
1732 
1733 /**
1734  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_900us
1735  * @brief Configures External PMU good time to 900 µs.
1736  * @details This is a combination of 100 µs and 800 µs good times, totaling 900 microseconds.
1737  *
1738  * @note Not applicable for SI917.
1739  */
1740 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_900us (BIT(6) | BIT(9))
1741 
1742 /**
1743  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_1000us
1744  * @brief Configures External PMU good time to 1000 µs.
1745  * @details This is a combination of 200 µs and 800 µs good times, totaling 1000 microseconds.
1746  *
1747  * @note Not applicable for SI917.
1748  */
1749 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_1000us (BIT(7) | BIT(9))
1750 
1751 /**
1752  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_1100us
1753  * @brief Configures External PMU good time to 1100 µs.
1754  * @details This is a combination of 100 µs, 200 µs, and 800 µs good times, totaling 1100 microseconds.
1755  *
1756  * @note Not applicable for SI917.
1757  */
1758 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_1100us (BIT(6) | BIT(7) | BIT(9))
1759 
1760 /**
1761  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_1200us
1762  * @brief Configures External PMU good time to 1200 µs.
1763  * @details This is a combination of 400 µs and 800 µs good times, totaling 1200 microseconds.
1764  *
1765  * @note Not applicable for SI917.
1766  */
1767 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_1200us (BIT(8) | BIT(9))
1768 
1769 /**
1770  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_1300us
1771  * @brief Configures External PMU good time to 1300 µs.
1772  * @details This is a combination of 100 µs, 400 µs, and 800 µs good times, totaling 1300 microseconds.
1773  *
1774  * @note Not applicable for SI917.
1775  */
1776 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_1300us (BIT(6) | BIT(8) | BIT(9))
1777 
1778 /**
1779  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_1400us
1780  * @brief Configures External PMU good time to 1400 µs.
1781  * @details This is a combination of 200 µs, 400 µs, and 800 µs good times, totaling 1400 microseconds.
1782  *
1783  * @note Not applicable for SI917.
1784  */
1785 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_1400us (BIT(7) | BIT(8) | BIT(9))
1786 
1787 /**
1788  * @def SL_SI91X_EXTERNAL_PMU_GOOD_TIME_1500us
1789  * @brief Configures External PMU good time to 1500 µs.
1790  * @details This is a combination of 100 µs, 200 µs, 400 µs, and 800 µs good times, totaling 1500 microseconds.
1791  *
1792  * @note Not applicable for SI917.
1793  */
1794 #define SL_SI91X_EXTERNAL_PMU_GOOD_TIME_1500us (BIT(6) | BIT(7) | BIT(8) | BIT(9))
1795 
1796 /**
1797  * @def SL_SI91X_FEAT_EXTERNAL_LDO_SEL
1798  * @brief Enables selection of external LDO voltage.
1799  * @details When enabled, this bit allows the selection between using an external LDO or an internal PMU.
1800  * If both the external LDO selection and the LDO voltage are configured, the system uses the external LDO.
1801  * If this bit is cleared, the internal PMU is used.
1802  *
1803  * @note These bits are used for External LDO selection External PMU:
1804  * 1. Incase of External PMU, User has to set EXTERNAL_PMU_GOOD_TIME_CONFIGURATION value to external PMU good time, If this is zero then it indicates using Internal PMU.
1805  * 2. Incase of External PMU 1.0v or 1.05v, User has to set both the bits config_feature_bit_map[11] & config_feature_bit_map[10].
1806  *
1807  * @note Not applicable for SI917.
1808  */
1809 #define SL_SI91X_FEAT_EXTERNAL_LDO_SEL BIT(10)
1810 
1811 /**
1812  * @def SL_SI91X_FEAT_EXTERNAL_LDO_VOL
1813  * @brief Selects the external LDO voltage.
1814  * @details This field is relevant only if SL_SI91X_FEAT_EXTERNAL_LDO_SEL is enabled (i.e., BIT(10) is set).
1815  * If this bit is set, the LDO voltage is configured to 1.0V; if cleared, it is set to 1.1V.
1816  *
1817  * @note Not applicable for SI917.
1818  */
1819 #define SL_SI91X_FEAT_EXTERNAL_LDO_VOL BIT(11)
1820 
1821 /**
1822  * @def SL_SI91X_FEAT_EAP_TLS_V1P0
1823  * @brief Enables TLS version 1.0 for enterprise security.
1824  *
1825  * @note Bit 12 -13 are reserved
1826  */
1827 #define SL_SI91X_FEAT_EAP_TLS_V1P0 BIT(14)
1828 
1829 /**
1830  * @def SL_SI91X_FEAT_EAP_TLS_V1P2
1831  * @brief Enables TLS version 1.2 for enterprise security.
1832  */
1833 #define SL_SI91X_FEAT_EAP_TLS_V1P2 BIT(15)
1834 
1835 /**
1836  * @def SL_SI91X_FEAT_CONC_STA_AP_DYN_SWITCH_SEL
1837  * @brief Configures dynamic switching between STA and AP modes.
1838  * @details This bit enables or disables dynamic switching between Station (STA) and Access Point (AP) modes.
1839  * When enabled, the system can dynamically switch between STA and AP modes based on operational requirements or network conditions.
1840  * This feature is useful for applications requiring flexible mode changes to optimize performance or power consumption.
1841  *
1842  * @note Enabling this feature allows the system to switch modes dynamically, which can improve adaptability in varying network scenarios.
1843  * Make sure to configure the system appropriately for the desired switching behavior.
1844  * @note Bit 16 is reserved
1845  */
1846 #define SL_SI91X_FEAT_CONC_STA_AP_DYN_SWITCH_SEL BIT(17)
1847 
1848 /**
1849  * @def SL_SI91X_ULP_GPIO9_FOR_UART2_TX
1850  * @brief Selects ULP_GPIO_9 to enable firmware debug prints.
1851  * @details If this bit is not set, the default UART2-TX pin GPIO_6 is used.
1852  *
1853  * @note SI917 supports prints only on ULP_GPIO_9.
1854  */
1855 #define SL_SI91X_ULP_GPIO9_FOR_UART2_TX BIT(18)
1856 
1857 /**
1858  * @def SL_SI91X_FEAT_DISABLE_MCS_5_6_7_DATARATES
1859  * @brief Disables MCS-5, 6, and 7 data rates.
1860  * @details This bit is used to disable the higher MCS data rates (5, 6, and 7) for reduced data rate requirements.
1861  */
1862 #define SL_SI91X_FEAT_DISABLE_MCS_5_6_7_DATARATES BIT(19)
1863 
1864 /**
1865  * @def SL_SI91X_FEAT_DISABLE_SHORT_GI
1866  * @brief Disables Short Guard Interval (Short-GI).
1867  * @details This bit disables the use of Short-GI, which may affect the timing and performance of the system.
1868  */
1869 #define SL_SI91X_FEAT_DISABLE_SHORT_GI BIT(20)
1870 
1871 /**
1872  * @def SL_SI91X_PTA_3WIRE_EN
1873  * @brief Enable PTA 3-Wire feature.
1874  * @details It has three different configurations, which can be chosen in SL_SI91X_PTA_3WIRE_CONFIG_SEL(config_sel)).
1875  */
1876 #define SL_SI91X_PTA_3WIRE_EN BIT(21)
1877 
1878 /**
1879  * @def SL_SI91X_PTA_3WIRE_CONFIG_SEL
1880  * @brief Option to choose PTA 3-Wire configuration.
1881  * @details It has three different configurations, which can be chosen by enabling or disabling the Bit [23:22].
1882  * Each of these configurations changes the behavior of how GRANT is asserted in response to REQUEST and PRIORITY signals.
1883  *
1884  * | Configuration | BIT[23] | BIT[22] |
1885  * |:--------------|:--------|:--------|
1886  * | Reserved      | 0       | 0       |
1887  * | config1       | 0       | 1       |
1888  * | config2       | 1       | 0       |
1889  * | config3       | 1       | 1       |
1890  *
1891  * | Configuration            |          Description                |
1892  * |:-------------------------|:------------------------------------|
1893  * | Configuration 1          | PTA Main will aggressively assert GRANT if the REQUEST is asserted irrespective of PRIORITY being asserted or not. This will mean any ongoing Wi-Fi transmission will be aborted, and GRANT will be provided to the PTA secondary. |
1894  * | Configuration 2          | PTA Main will aggressively assert GRANT if the REQUEST is asserted irrespective of PRIORITY being asserted or not, with only one exception of an ongoing ACK/Block ACK Transmission in response to a Wi-Fi reception. If there is an ongoing ACK/Block ACK transmission in response to a Wi-Fi Reception, PTA MAIN will GRANT access if PRIORITY is asserted along with REQUEST. |
1895  * | Configuration 3          | If there is an ongoing Wi-Fi Transmission (Including ACK/BLOCK ACK), then PTA MAIN will not assert GRANT to an asserted REQUEST. However, if PRIORITY and REQUEST are asserted, PTA MAIN will assert GRANT. |
1896  *
1897  * The below configuration describes the pin connections between the EFR32MG21 and the SiW91x device that involves the GRANT, REQUEST, and PRIORITY signal.
1898  * 0 kept reserved for future. 3-Wire used at DUT are GPIO_7(Grant pin driven by DUT), ULP_GPIO_1(Request i/p pin for DUT) and ULP_GPIO_6(Priority i/p pin for DUT).
1899  *
1900  * | Pin Description | GPIO         | 4338A Radio board  | 4002A EFR board |
1901  * |:----------------|:-------------|:-------------------|:----------------|
1902  * | Request         | ULP_GPIO_1   | WSTK_P16           | Pin7            |
1903  * | Priority        | ULP_GPIO_6   | EXP_HEADER16       | Pin11           |
1904  * | Grant           | GPIO_7       | WSTK_P20           | Pin9            |
1905  */
1906 #define SL_SI91X_PTA_3WIRE_CONFIG_SEL(config_sel) (config_sel << 22)
1907 
1908 /**
1909  * @def SL_SI91X_XTAL_GOODTIME_1000us
1910  * @brief Configures XTAL good time to 1000 µs.
1911  * @details This bit selects a default XTAL good time of 1000 microseconds. This setting is applicable from Release 2.3.0 onward.
1912  * Prior releases have reserved config_feature_bitmap[31:17]. This setting is intended for chip users and not applicable for device users.
1913  *
1914  * @note Not applicable for SI917.
1915  */
1916 #define SL_SI91X_XTAL_GOODTIME_1000us 0
1917 
1918 /**
1919  * @def SL_SI91X_XTAL_GOODTIME_2000us
1920  * @brief Configures XTAL good time to 2000 µs.
1921  * @details This bit selects an XTAL good time of 2000 microseconds.
1922  *
1923  * @note Not applicable for SI917.
1924  */
1925 #define SL_SI91X_XTAL_GOODTIME_2000us BIT(24)
1926 
1927 /**
1928  * @def SL_SI91X_XTAL_GOODTIME_3000us
1929  * @brief Configures XTAL good time to 3000 µs.
1930  * @details This bit selects an XTAL good time of 3000 microseconds.
1931  *
1932  * @note Not applicable for SI917.
1933  */
1934 #define SL_SI91X_XTAL_GOODTIME_3000us BIT(25)
1935 
1936 /**
1937  * @def SL_SI91X_XTAL_GOODTIME_600us
1938  * @brief Configures XTAL good time to 600 µs.
1939  * @details This is a combination of 2000 µs and 3000 µs XTAL good times, totaling 600 microseconds.
1940  *
1941  * @note Not applicable for SI917.
1942  */
1943 #define SL_SI91X_XTAL_GOODTIME_600us (BIT(24) | BIT(25))
1944 
1945 /**
1946  * @def SL_SI91X_ENABLE_ENHANCED_MAX_PSP
1947  * @brief Enables Enhanced Max PSP.
1948  * @details Set this bit to enable the Enhanced Max PSP feature for improved performance.
1949  */
1950 #define SL_SI91X_ENABLE_ENHANCED_MAX_PSP BIT(26)
1951 
1952 /**
1953  * @def SL_SI91X_ENABLE_DEBUG_BBP_TEST_PINS
1954  * @brief Enables BBP Test Pins.
1955  * @details Set this bit to enable the use of BBP test pins for debugging and testing purposes.
1956  *
1957  * @note Bits 28 - 31 are reserved for future use.
1958  */
1959 #define SL_SI91X_ENABLE_DEBUG_BBP_TEST_PINS BIT(27)
1960 /** @} */
1961 
1962 /** \addtogroup SL_SI91X_CONSTANTS
1963   * @{ */
1964 /// Si91x operating mode
1965 typedef enum {
1966   SL_SI91X_CLIENT_MODE            = 0,     ///< Wi-Fi personal client mode
1967   SL_SI91X_ENTERPRISE_CLIENT_MODE = 2,     ///< Wi-Fi enterprise client mode
1968   SL_SI91X_ACCESS_POINT_MODE      = 6,     ///< Wi-Fi access point mode
1969   SL_SI91X_TRANSCEIVER_MODE       = 7,     ///< Wi-Fi transceiver mode
1970   SL_SI91X_TRANSMIT_TEST_MODE     = 8,     ///< Wi-Fi transmit test mode
1971   SL_SI91X_CONCURRENT_MODE        = 9,     ///< Wi-Fi concurrent mode
1972   __FORCE_OPERATION_ENUM_16BIT    = 0xFFFF ///< Force the enumeration to be 16-bit
1973 } sl_si91x_operation_mode_t;
1974 
1975 /// Si91x wireless co-existence mode
1976 /// @note Only BLE, WLAN, and WLAN + BLE modes are supported.
1977 typedef enum {
1978   SL_SI91X_WLAN_ONLY_MODE      = 0,  ///< Wireless local area network (WLAN) only mode
1979   SL_SI91X_WLAN_MODE           = 1,  ///< WLAN mode (not currently supported)
1980   SL_SI91X_BLUETOOTH_MODE      = 4,  ///< Bluetooth only mode (not currently supported)
1981   SL_SI91X_WLAN_BLUETOOTH_MODE = 5,  ///< WLAN and Bluetooth mode (not currently supported)
1982   SL_SI91X_DUAL_MODE           = 8,  ///< Dual mode (not currently supported)
1983   SL_SI91X_WLAN_DUAL_MODE      = 9,  ///< WLAN dual mode (not currently supported)
1984   SL_SI91X_BLE_MODE            = 12, ///< Bluetooth Low Energy (BLE) only mode, used when power save mode is not needed.
1985   SL_SI91X_WLAN_BLE_MODE       = 13, ///< WLAN and BLE mode
1986   __FORCE_COEX_ENUM_16BIT      = 0xFFFF ///< Force the enumeration to be 16-bit
1987 } sl_si91x_coex_mode_t;
1988 
1989 /// Si91x efuse data index
1990 typedef enum {
1991   SL_SI91X_EFUSE_MFG_SW_VERSION = 0, ///< Efuse data index for manufacturing software version
1992   SL_SI91X_EFUSE_PTE_CRC        = 1, ///< Efuse data index for PTE CRC
1993 } sl_si91x_efuse_data_type_t;
1994 /** @} */
1995 
1996 /** \addtogroup SI91X_BURN_TARGET_OPTIONS
1997   * @{ */
1998 /*=========================================================================*/
1999 // Burn target options parameters description !//
2000 // This group defines the target options for burning data into different memory types.
2001 //=========================================================================*/
2002 
2003 /**
2004  * @def SL_SI91X_BURN_INTO_EFUSE
2005  * @brief Option to burn data into EFUSE.
2006  *
2007  * @details This option specifies that the data should be burned into the EFUSE memory.
2008  * EFUSE memory is used for storing critical calibration or configuration data that should not be modified after programming.
2009  * Use this option when permanent storage of data is required.
2010  */
2011 #define SL_SI91X_BURN_INTO_EFUSE 0
2012 
2013 /**
2014  * @def SL_SI91X_BURN_INTO_FLASH
2015  * @brief Option to burn data into Flash.
2016  *
2017  * @details This option specifies that the data should be burned into Flash memory.
2018  * Flash memory provides non-volatile storage that can be reprogrammed.
2019  * This is suitable for data that might need to be updated or modified over time.
2020  */
2021 #define SL_SI91X_BURN_INTO_FLASH 1
2022 /** @} */
2023 
2024 /** \addtogroup SI91X_CALIBRATION_FLAGS
2025   * @{ */
2026 /**
2027  * @def SL_SI91X_BURN_GAIN_OFFSET
2028  * @brief Burn gain offset into the device.
2029  *
2030  * @details
2031  * This macro defines the bit for burning the gain offset into the device.
2032  */
2033 #define SL_SI91X_BURN_GAIN_OFFSET BIT(0)
2034 
2035 /**
2036  * @def SL_SI91X_BURN_FREQ_OFFSET
2037  * @brief Burn frequency offset into the device.
2038  *
2039  * @details
2040  * This macro defines the bit for burning the frequency offset into the device.
2041  */
2042 #define SL_SI91X_BURN_FREQ_OFFSET BIT(1)
2043 
2044 /**
2045  * @def SL_SI91X_SW_XO_CTUNE_VALID
2046  * @brief Indicates if the software XO CTUNE is valid.
2047  *
2048  * @details
2049  * This macro defines the bit to indicate that the software XO CTUNE (crystal tuning) value is valid.
2050  */
2051 #define SL_SI91X_SW_XO_CTUNE_VALID BIT(2)
2052 
2053 /**
2054  * @def SL_SI91X_BURN_XO_FAST_DISABLE
2055  * @brief Burn bit to disable XO fast into the device.
2056  *
2057  * @details
2058  * This macro defines the bit for burning a setting to disable the fast XO (crystal oscillator) into the device.
2059  *
2060  * @note Not applicable for SI917.
2061  */
2062 #define SL_SI91X_BURN_XO_FAST_DISABLE BIT(3)
2063 
2064 /** @} */
2065 
2066 /** \addtogroup SI91X_DTIM_ALIGNMENT_TYPES
2067   * @{ */
2068 /// Module wakes up at beacon which is just before or equal to listen_interval
2069 #define SL_SI91X_ALIGN_WITH_BEACON 0
2070 /// Module wakes up at DTIM beacon which is just before or equal to listen_interval
2071 #define SL_SI91X_ALIGN_WITH_DTIM_BEACON 1
2072 /** @} */
2073 
2074 /** \addtogroup SL_SI91X_TYPES Types
2075  * @{
2076  * */
2077 // Device configuration for 911x. This should be in the 911x driver folder
2078 /// Device configuration for Si91x device
2079 typedef struct {
2080   uint8_t boot_option; ///< Boot option. One of the values from @ref SI91X_LOAD_IMAGE_TYPES
2081   sl_mac_address_t *
2082     mac_address; ///< MAC address of type [sl_mac_address_t](../wiseconnect-api-reference-guide-nwk-mgmt/sl-net-types#sl-mac-address-t).
2083   sl_si91x_band_mode_t band;                 ///< Si91x Wi-Fi band of type @ref sl_si91x_band_mode_t.
2084   sl_si91x_region_code_t region_code;        ///< Si91x region code of type @ref sl_si91x_region_code_t.
2085   sl_si91x_boot_configuration_t boot_config; ///< Si91x boot configuration. Refer to @ref SL_SI91X_BOOT_CONFIGURATION.
2086   sl_si91x_dynamic_pool ta_pool; ///< TA buffer allocation command parameters of type @ref sl_si91x_dynamic_pool.
2087   uint8_t efuse_data_type; ///<Type of eFuse data need to be read from flash. Refer to @ref sl_si91x_efuse_data_type_t.
2088 } sl_wifi_device_configuration_t;
2089 
2090 /// Wi-Fi device context
2091 typedef struct {
2092   void *device_context; ///< Reserved for future use
2093 } sl_wifi_device_context_t;
2094 /** @} */
2095 
2096 /// Si91x calibration data structure
2097 typedef struct {
2098   uint8_t burn_target;  ///< Burn into efuse or flash, @ref SI91X_BURN_TARGET_OPTIONS
2099   uint8_t reserved0[3]; ///< Reserved bits
2100   uint32_t flags;       ///< Calibration Flags, @ref SI91X_CALIBRATION_FLAGS
2101   int8_t gain_offset;   ///< gain offset
2102   int8_t xo_ctune;      ///< xo ctune
2103   uint8_t reserved1[2]; ///< Reserved bits
2104 } si91x_calibration_data_t;
2105 
2106 /** \addtogroup SL_SI91X_CONSTANTS
2107  * @{
2108  * */
2109 
2110 /// Si91x performance profile
2111 typedef enum {
2112   HIGH_PERFORMANCE,                  ///< Power save is disabled and throughput is maximum.
2113   ASSOCIATED_POWER_SAVE,             ///< Low power profile when the device is associated with an AP (MAX PSP).
2114   ASSOCIATED_POWER_SAVE_LOW_LATENCY, ///< Low power profile when the device is associated with an AP (FAST PSP).
2115   DEEP_SLEEP_WITHOUT_RAM_RETENTION,  ///< Deep Sleep without RAM Retention when the device is not associated with AP.
2116   DEEP_SLEEP_WITH_RAM_RETENTION      ///< Deep Sleep with RAM Retention when the device is not associated with AP.
2117 } sl_si91x_performance_profile_t;
2118 /** @} */
2119 
2120 /** \addtogroup SL_SI91X_TYPES
2121  * @{
2122  * */
2123 /// Bluetooth performance profile
2124 typedef struct {
2125   sl_si91x_performance_profile_t profile; ///< Performance profile of type @ref sl_si91x_performance_profile_t.
2126 } sl_bt_performance_profile_t;
2127 
2128 /// Wi-Fi performance profile
2129 typedef struct {
2130   sl_si91x_performance_profile_t profile; ///< Performance profile of type @ref sl_si91x_performance_profile_t.
2131   uint8_t dtim_aligned_type; ///< Set DTIM alignment required. One of the values from @ref SI91X_DTIM_ALIGNMENT_TYPES.
2132   uint8_t num_of_dtim_skip;  ///< Number of DTIM intervals to skip. Default value is 0.
2133   uint16_t listen_interval;  ///< Listen interval in beacon intervals.
2134   uint16_t
2135     monitor_interval; ///< Monitor interval in milliseconds. Default interval 50 milliseconds is used if monitor_interval is set to 0. This is only valid when performance profile is set to ASSOCIATED_POWER_SAVE_LOW_LATENCY.
2136   sl_wifi_twt_request_t twt_request;     ///< Target Wake Time (TWT) request settings.
2137   sl_wifi_twt_selection_t twt_selection; ///< Target Wake Time (TWT) selection request settings.
2138 } sl_wifi_performance_profile_t;
2139 /** @} */
2140 
2141 /** \addtogroup SL_SI91X_DEFAULT_DEVICE_CONFIGURATION
2142   * @{ */
2143 /// Default Wi-Fi client configuration
2144 static const sl_wifi_device_configuration_t sl_wifi_default_client_configuration = {
2145   .boot_option = LOAD_NWP_FW,
2146   .mac_address = NULL,
2147   .band        = SL_SI91X_WIFI_BAND_2_4GHZ,
2148   .region_code = US,
2149   .boot_config = { .oper_mode = SL_SI91X_CLIENT_MODE,
2150                    .coex_mode = SL_SI91X_WLAN_ONLY_MODE,
2151                    .feature_bit_map =
2152 #ifdef SLI_SI91X_MCU_INTERFACE
2153                      (SL_SI91X_FEAT_SECURITY_OPEN | SL_SI91X_FEAT_WPS_DISABLE),
2154 #else
2155                      (SL_SI91X_FEAT_SECURITY_OPEN | SL_SI91X_FEAT_AGGREGATION),
2156 #endif
2157                    .tcp_ip_feature_bit_map = (SL_SI91X_TCP_IP_FEAT_DHCPV4_CLIENT | SL_SI91X_TCP_IP_FEAT_DNS_CLIENT
2158                                               | SL_SI91X_TCP_IP_FEAT_SSL | SL_SI91X_TCP_IP_FEAT_MDNSD
2159 #ifdef SLI_SI91X_ENABLE_IPV6
2160                                               | SL_SI91X_TCP_IP_FEAT_DHCPV6_CLIENT | SL_SI91X_TCP_IP_FEAT_IPV6
2161 #endif
2162                                               | SL_SI91X_TCP_IP_FEAT_ICMP | SL_SI91X_TCP_IP_FEAT_EXTENSION_VALID),
2163                    .custom_feature_bit_map = SL_SI91X_CUSTOM_FEAT_EXTENSION_VALID,
2164                    .ext_custom_feature_bit_map =
2165                      (SL_SI91X_EXT_FEAT_XTAL_CLK | SL_SI91X_EXT_FEAT_UART_SEL_FOR_DEBUG_PRINTS | MEMORY_CONFIG
2166 #if defined(SLI_SI917) || defined(SLI_SI915)
2167                       | SL_SI91X_EXT_FEAT_FRONT_END_SWITCH_PINS_ULP_GPIO_4_5_0
2168 #endif
2169                       ),
2170                    .bt_feature_bit_map = 0,
2171                    .ext_tcp_ip_feature_bit_map =
2172                      (SL_SI91X_EXT_TCP_IP_WINDOW_SCALING | SL_SI91X_EXT_TCP_IP_TOTAL_SELECTS(10)),
2173                    .ble_feature_bit_map     = 0,
2174                    .ble_ext_feature_bit_map = 0,
2175                    .config_feature_bit_map  = 0 }
2176 };
2177 
2178 /// Default Wi-Fi enterprise client configuration
2179 static const sl_wifi_device_configuration_t sl_wifi_default_enterprise_client_configuration = {
2180   .boot_option = LOAD_NWP_FW,
2181   .mac_address = NULL,
2182   .band        = SL_SI91X_WIFI_BAND_2_4GHZ,
2183   .region_code = US,
2184   .boot_config = { .oper_mode              = SL_SI91X_ENTERPRISE_CLIENT_MODE,
2185                    .coex_mode              = SL_SI91X_WLAN_ONLY_MODE,
2186                    .feature_bit_map        = (SL_SI91X_FEAT_SECURITY_OPEN | SL_SI91X_FEAT_AGGREGATION),
2187                    .tcp_ip_feature_bit_map = (SL_SI91X_TCP_IP_FEAT_DHCPV4_CLIENT | SL_SI91X_TCP_IP_FEAT_ICMP
2188                                               | SL_SI91X_TCP_IP_FEAT_EXTENSION_VALID),
2189                    .custom_feature_bit_map = SL_SI91X_CUSTOM_FEAT_EXTENSION_VALID,
2190                    .ext_custom_feature_bit_map =
2191                      (SL_SI91X_EXT_FEAT_XTAL_CLK | SL_SI91X_EXT_FEAT_UART_SEL_FOR_DEBUG_PRINTS | MEMORY_CONFIG
2192 #if defined(SLI_SI917) || defined(SLI_SI915)
2193                       | SL_SI91X_EXT_FEAT_FRONT_END_SWITCH_PINS_ULP_GPIO_4_5_0
2194 #endif
2195                       ),
2196                    .bt_feature_bit_map = 0,
2197                    .ext_tcp_ip_feature_bit_map =
2198                      (SL_SI91X_EXT_TCP_IP_WINDOW_SCALING | SL_SI91X_EXT_TCP_IP_TOTAL_SELECTS(10)),
2199                    .ble_feature_bit_map     = 0,
2200                    .ble_ext_feature_bit_map = 0,
2201                    .config_feature_bit_map  = 0 }
2202 };
2203 
2204 /// Default Wi-Fi ap configuration
2205 static const sl_wifi_device_configuration_t sl_wifi_default_ap_configuration = {
2206   .boot_option = LOAD_NWP_FW,
2207   .mac_address = NULL,
2208   .band        = SL_SI91X_WIFI_BAND_2_4GHZ,
2209   .region_code = US,
2210   .boot_config = { .oper_mode       = SL_SI91X_ACCESS_POINT_MODE,
2211                    .coex_mode       = SL_SI91X_WLAN_ONLY_MODE,
2212                    .feature_bit_map = SL_SI91X_FEAT_SECURITY_OPEN,
2213                    .tcp_ip_feature_bit_map =
2214                      (SL_SI91X_TCP_IP_FEAT_DHCPV4_SERVER | SL_SI91X_TCP_IP_FEAT_EXTENSION_VALID),
2215                    .custom_feature_bit_map     = SL_SI91X_CUSTOM_FEAT_EXTENSION_VALID,
2216                    .ext_custom_feature_bit_map = (SL_SI91X_EXT_FEAT_XTAL_CLK | MEMORY_CONFIG
2217 #if defined(SLI_SI917) || defined(SLI_SI915)
2218                                                   | SL_SI91X_EXT_FEAT_FRONT_END_SWITCH_PINS_ULP_GPIO_4_5_0
2219 #endif
2220                                                   ),
2221                    .bt_feature_bit_map         = 0,
2222                    .ext_tcp_ip_feature_bit_map = 0,
2223                    .ble_feature_bit_map        = 0,
2224                    .ble_ext_feature_bit_map    = 0,
2225                    .config_feature_bit_map     = 0 }
2226 };
2227 
2228 /// Default Wi-Fi concurrent (AP + STATION) configuration
2229 static const sl_wifi_device_configuration_t sl_wifi_default_concurrent_configuration = {
2230   .boot_option = LOAD_NWP_FW,
2231   .mac_address = NULL,
2232   .band        = SL_SI91X_WIFI_BAND_2_4GHZ,
2233   .region_code = US,
2234   .boot_config = { .oper_mode              = SL_SI91X_CONCURRENT_MODE,
2235                    .coex_mode              = SL_SI91X_WLAN_ONLY_MODE,
2236                    .feature_bit_map        = SL_SI91X_FEAT_AGGREGATION,
2237                    .tcp_ip_feature_bit_map = (SL_SI91X_TCP_IP_FEAT_DHCPV4_CLIENT | SL_SI91X_TCP_IP_FEAT_DHCPV4_SERVER
2238                                               | SL_SI91X_TCP_IP_FEAT_ICMP | SL_SI91X_TCP_IP_FEAT_EXTENSION_VALID),
2239                    .custom_feature_bit_map = SL_SI91X_CUSTOM_FEAT_EXTENSION_VALID,
2240                    .ext_custom_feature_bit_map = (SL_SI91X_EXT_FEAT_XTAL_CLK | MEMORY_CONFIG
2241 #if defined(SLI_SI917) || defined(SLI_SI915)
2242                                                   | SL_SI91X_EXT_FEAT_FRONT_END_SWITCH_PINS_ULP_GPIO_4_5_0
2243 #endif
2244                                                   ),
2245                    .bt_feature_bit_map         = 0,
2246                    .ext_tcp_ip_feature_bit_map = SL_SI91X_CONFIG_FEAT_EXTENSION_VALID,
2247                    .ble_feature_bit_map        = 0,
2248                    .ble_ext_feature_bit_map    = 0,
2249                    .config_feature_bit_map     = SL_SI91X_FEAT_SLEEP_GPIO_SEL_BITMAP }
2250 };
2251 
2252 /// Default Wi-Fi concurrent (AP + STATION) configuration
2253 static const sl_wifi_device_configuration_t sl_wifi_default_concurrent_v6_configuration = {
2254   .boot_option = LOAD_NWP_FW,
2255   .mac_address = NULL,
2256   .band        = SL_SI91X_WIFI_BAND_2_4GHZ,
2257   .region_code = US,
2258   .boot_config = { .oper_mode       = SL_SI91X_CONCURRENT_MODE,
2259                    .coex_mode       = SL_SI91X_WLAN_ONLY_MODE,
2260                    .feature_bit_map = (SL_SI91X_FEAT_AGGREGATION | SL_SI91X_FEAT_DISABLE_11AX_SUPPORT),
2261                    .tcp_ip_feature_bit_map =
2262                      (SL_SI91X_TCP_IP_FEAT_DHCPV4_CLIENT | SL_SI91X_TCP_IP_FEAT_DHCPV4_SERVER
2263                       | SL_SI91X_TCP_IP_FEAT_DHCPV6_CLIENT | SL_SI91X_TCP_IP_FEAT_DHCPV6_SERVER
2264                       | SL_SI91X_TCP_IP_FEAT_IPV6 | SL_SI91X_TCP_IP_FEAT_ICMP | SL_SI91X_TCP_IP_FEAT_EXTENSION_VALID
2265                       | SL_SI91X_TCP_IP_FEAT_HTTP_CLIENT),
2266                    .custom_feature_bit_map     = SL_SI91X_CUSTOM_FEAT_EXTENSION_VALID,
2267                    .ext_custom_feature_bit_map = (SL_SI91X_EXT_FEAT_XTAL_CLK | MEMORY_CONFIG
2268 #if defined(SLI_SI917) || defined(SLI_SI915)
2269                                                   | SL_SI91X_EXT_FEAT_FRONT_END_SWITCH_PINS_ULP_GPIO_4_5_0
2270 #endif
2271                                                   ),
2272                    .bt_feature_bit_map         = 0,
2273                    .ext_tcp_ip_feature_bit_map = SL_SI91X_CONFIG_FEAT_EXTENSION_VALID,
2274                    .ble_feature_bit_map        = 0,
2275                    .ble_ext_feature_bit_map    = 0,
2276                    .config_feature_bit_map     = SL_SI91X_FEAT_SLEEP_GPIO_SEL_BITMAP }
2277 };
2278 
2279 /// Default Wi-Fi transmit configuration
2280 static const sl_wifi_device_configuration_t sl_wifi_default_transmit_test_configuration = {
2281   .boot_option = LOAD_NWP_FW,
2282   .mac_address = NULL,
2283   .band        = SL_SI91X_WIFI_BAND_2_4GHZ,
2284   .region_code = WORLD_DOMAIN,
2285   .boot_config = { .oper_mode = SL_SI91X_TRANSMIT_TEST_MODE,
2286                    .coex_mode = SL_SI91X_WLAN_ONLY_MODE,
2287                    .feature_bit_map =
2288 #ifdef SLI_SI91X_MCU_INTERFACE
2289                      (SL_SI91X_FEAT_SECURITY_OPEN | SL_SI91X_FEAT_WPS_DISABLE),
2290 #else
2291                      (SL_SI91X_FEAT_SECURITY_OPEN),
2292 #endif
2293                    .tcp_ip_feature_bit_map =
2294                      (SL_SI91X_TCP_IP_FEAT_DHCPV4_CLIENT | SL_SI91X_TCP_IP_FEAT_EXTENSION_VALID),
2295                    .custom_feature_bit_map     = SL_SI91X_CUSTOM_FEAT_EXTENSION_VALID,
2296                    .ext_custom_feature_bit_map = (MEMORY_CONFIG
2297 #if defined(SLI_SI917) || defined(SLI_SI915)
2298                                                   | SL_SI91X_EXT_FEAT_FRONT_END_SWITCH_PINS_ULP_GPIO_4_5_0
2299 #endif
2300                                                   ),
2301                    .bt_feature_bit_map         = SL_SI91X_BT_RF_TYPE,
2302                    .ext_tcp_ip_feature_bit_map = SL_SI91X_CONFIG_FEAT_EXTENSION_VALID,
2303                    .ble_feature_bit_map        = 0,
2304                    .ble_ext_feature_bit_map    = 0,
2305                    .config_feature_bit_map     = SL_SI91X_FEAT_SLEEP_GPIO_SEL_BITMAP }
2306 };
2307 
2308 /// Default Wi-Fi transceiver mode configuration
2309 static const sl_wifi_device_configuration_t sl_wifi_default_transceiver_configuration = {
2310   .boot_option = LOAD_NWP_FW,
2311   .mac_address = NULL,
2312   .band        = SL_SI91X_WIFI_BAND_2_4GHZ,
2313   .region_code = JP,
2314   .boot_config = { .oper_mode = SL_SI91X_TRANSCEIVER_MODE,
2315                    .coex_mode = SL_SI91X_WLAN_ONLY_MODE,
2316 #ifdef TRANSCEIVER_MAC_PEER_DS_SUPPORT
2317                    .feature_bit_map = (SL_SI91X_FEAT_TRANSCEIVER_MAC_PEER_DS_SUPPORT | SL_SI91X_FEAT_SECURITY_OPEN),
2318 #else
2319                    .feature_bit_map = SL_SI91X_FEAT_SECURITY_OPEN,
2320 #endif
2321                    .tcp_ip_feature_bit_map = SL_SI91X_TCP_IP_FEAT_BYPASS,
2322                    .custom_feature_bit_map = SL_SI91X_CUSTOM_FEAT_EXTENSION_VALID,
2323                    .ext_custom_feature_bit_map =
2324                      (SL_SI91X_EXT_FEAT_XTAL_CLK | SL_SI91X_EXT_FEAT_UART_SEL_FOR_DEBUG_PRINTS
2325 #if defined(SLI_SI917) || defined(SLI_SI915)
2326                       | SL_SI91X_EXT_FEAT_FRONT_END_SWITCH_PINS_ULP_GPIO_4_5_0
2327 #endif
2328                       ),
2329                    .bt_feature_bit_map         = 0,
2330                    .ext_tcp_ip_feature_bit_map = (SL_SI91X_CONFIG_FEAT_EXTENSION_VALID),
2331                    .ble_feature_bit_map        = 0,
2332                    .ble_ext_feature_bit_map    = 0,
2333                    .config_feature_bit_map     = 0 }
2334 };
2335 
2336 /** @} */
2337