1 /* 2 * 3 *Copyright (c) 2024 Nordic Semiconductor ASA 4 * 5 *SPDX-License-Identifier: BSD-3-Clause 6 */ 7 8 /** 9 * @file 10 * 11 * @addtogroup nrf_wifi_fw_if Wi-Fi driver and firmware interface 12 * @{ 13 * 14 * @brief Common interface between host and RPU 15 * 16 */ 17 #ifndef __NRF_WIFI_HOST_RPU_COMMON_IFACE_H__ 18 #define __NRF_WIFI_HOST_RPU_COMMON_IFACE_H__ 19 20 #include "common/rpu_if.h" 21 #include "common/pack_def.h" 22 23 #define NRF_WIFI_UMAC_VER(version) (((version)&0xFF000000) >> 24) 24 #define NRF_WIFI_UMAC_VER_MAJ(version) (((version)&0x00FF0000) >> 16) 25 #define NRF_WIFI_UMAC_VER_MIN(version) (((version)&0x0000FF00) >> 8) 26 #define NRF_WIFI_UMAC_VER_EXTRA(version) (((version)&0x000000FF) >> 0) 27 #define RPU_MEM_UMAC_BOOT_SIG 0xB0000000 28 #define RPU_MEM_UMAC_VER 0xB0000004 29 #define RPU_MEM_UMAC_PEND_Q_BMP 0xB0004FBC 30 #define RPU_MEM_UMAC_CMD_ADDRESS 0xB00007A8 31 #define RPU_MEM_UMAC_EVENT_ADDRESS 0xB0000E28 32 #define RPU_MEM_UMAC_PATCH_BIN 0x8008C000 33 #define RPU_MEM_UMAC_PATCH_BIMG 0x80099400 34 35 #define NRF_WIFI_UMAC_BOOT_SIG 0x5A5A5A5A 36 #define NRF_WIFI_UMAC_ROM_PATCH_OFFSET (RPU_MEM_UMAC_PATCH_BIMG - RPU_ADDR_UMAC_CORE_RET_START) 37 #define NRF_WIFI_UMAC_BOOT_EXCP_VECT_0 0x3c1a8000 38 #define NRF_WIFI_UMAC_BOOT_EXCP_VECT_1 0x275a0000 39 #define NRF_WIFI_UMAC_BOOT_EXCP_VECT_2 0x03400008 40 #define NRF_WIFI_UMAC_BOOT_EXCP_VECT_3 0x00000000 41 42 /** 43 * @brief This enum defines the different categories of messages that can be exchanged between 44 * the Host and the RPU. 45 * 46 */ 47 enum nrf_wifi_host_rpu_msg_type { 48 /** System interface messages */ 49 NRF_WIFI_HOST_RPU_MSG_TYPE_SYSTEM, 50 /** Unused */ 51 NRF_WIFI_HOST_RPU_MSG_TYPE_SUPPLICANT, 52 /** Data path messages */ 53 NRF_WIFI_HOST_RPU_MSG_TYPE_DATA, 54 /** Control path messages */ 55 NRF_WIFI_HOST_RPU_MSG_TYPE_UMAC 56 }; 57 /** 58 * @brief This structure defines the common message header used to encapsulate each message 59 * exchanged between the Host and UMAC. 60 * 61 */ 62 63 struct host_rpu_msg { 64 /** Header */ 65 struct host_rpu_msg_hdr hdr; 66 /** Type of the RPU message see &enum nrf_wifi_host_rpu_msg_type */ 67 signed int type; 68 /** Actual message */ 69 signed char msg[0]; 70 } __NRF_WIFI_PKD; 71 72 #define NRF_WIFI_PENDING_FRAMES_BITMAP_AC_VO (1 << 0) 73 #define NRF_WIFI_PENDING_FRAMES_BITMAP_AC_VI (1 << 1) 74 #define NRF_WIFI_PENDING_FRAMES_BITMAP_AC_BE (1 << 2) 75 #define NRF_WIFI_PENDING_FRAMES_BITMAP_AC_BK (1 << 3) 76 77 /** 78 * @brief This new structure represents the bitmap of STA (Station) pending frames in 79 * SoftAP power save mode. 80 * 81 */ 82 struct sap_client_pend_frames_bitmap { 83 /** STA MAC address */ 84 unsigned char mac_addr[6] __NRF_WIFI_ALIGN_4; 85 /** Reserved: 2 byte for alignment */ 86 unsigned char reserved[2]; 87 /** Pending frames bitmap for each access category */ 88 unsigned char pend_frames_bitmap; 89 /** Reserved: 3 Bytes for alignment */ 90 unsigned char reserved1[3]; 91 } __NRF_WIFI_PKD __NRF_WIFI_ALIGN_4; 92 93 94 /** 95 * @brief This structure represents the bitmap of STA (Station) pending frames in 96 * SoftAP power save mode. 97 * 98 */ 99 100 struct sap_pend_frames_bitmap { 101 /** STA MAC address */ 102 unsigned char mac_addr[6]; 103 /** Pending frames bitmap for each access category */ 104 unsigned char pend_frames_bitmap; 105 } __NRF_WIFI_PKD; 106 107 /** 108 * @brief This structure represents the information related to UMAC. 109 * 110 */ 111 struct host_rpu_umac_info { 112 /** Boot status signature */ 113 unsigned int boot_status; 114 /** UMAC version */ 115 unsigned int version; 116 /** @ref sap_pend_frames_bitmap */ 117 struct sap_pend_frames_bitmap sap_bitmap[4]; 118 /** Hardware queues info &enum host_rpu_hpqm_info */ 119 struct host_rpu_hpqm_info hpqm_info; 120 /** OTP params */ 121 unsigned int info_part; 122 /** OTP params */ 123 unsigned int info_variant; 124 /** OTP params */ 125 unsigned int info_lromversion; 126 /** OTP params */ 127 unsigned int info_uromversion; 128 /** OTP params */ 129 unsigned int info_uuid[4]; 130 /** OTP params */ 131 unsigned int info_spare0; 132 /** OTP params */ 133 unsigned int info_spare1; 134 /** OTP params */ 135 unsigned int mac_address0[2]; 136 /** OTP params */ 137 unsigned int mac_address1[2]; 138 /** OTP params */ 139 unsigned int calib[9]; 140 } __NRF_WIFI_PKD; 141 /** 142 * @} 143 */ 144 #endif /* __NRF_WIFI_HOST_RPU_IFACE_H__ */ 145