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