1 | /** @file wlan_mac_high.h |
---|
2 | * @brief Low-level WLAN MAC High Framework |
---|
3 | * |
---|
4 | * This contains the low-level code for accessing the WLAN MAC Low Framework. |
---|
5 | * |
---|
6 | * @copyright Copyright 2014-2019, Mango Communications. All rights reserved. |
---|
7 | * Distributed under the Mango Communications Reference Design License |
---|
8 | * See LICENSE.txt included in the design archive or |
---|
9 | * at http://mangocomm.com/802.11/license |
---|
10 | * |
---|
11 | * This file is part of the Mango 802.11 Reference Design (https://mangocomm.com/802.11) |
---|
12 | */ |
---|
13 | |
---|
14 | |
---|
15 | /*************************** Constant Definitions ****************************/ |
---|
16 | #ifndef WLAN_MAC_LOW_H_ |
---|
17 | #define WLAN_MAC_LOW_H_ |
---|
18 | |
---|
19 | #include "xil_types.h" |
---|
20 | #include "xil_io.h" |
---|
21 | #include "wlan_common_types.h" |
---|
22 | |
---|
23 | //Forward declarations |
---|
24 | struct wlan_mac_low_tx_details_t; |
---|
25 | struct wlan_ipc_msg_t; |
---|
26 | |
---|
27 | //----------------------------------------------- |
---|
28 | // MAC Header defines |
---|
29 | #define MAC_HW_LASTBYTE_ADDR1 (9) |
---|
30 | #define MAC_HW_LASTBYTE_ADDR2 (15) |
---|
31 | |
---|
32 | //----------------------------------------------- |
---|
33 | // Power defines |
---|
34 | // |
---|
35 | #define PKT_DET_MIN_POWER_MIN -90 |
---|
36 | #define PKT_DET_MIN_POWER_MAX -30 |
---|
37 | |
---|
38 | //----------------------------------------------- |
---|
39 | // Channel band defines |
---|
40 | // |
---|
41 | #define CHAN_BAND_24GHz 0 |
---|
42 | #define CHAN_BAND_5GHz 1 |
---|
43 | |
---|
44 | |
---|
45 | |
---|
46 | //----------------------------------------------- |
---|
47 | // Macros wrapping register read/writes in MAC core |
---|
48 | // |
---|
49 | #define wlan_mac_reset(x) Xil_Out32(WLAN_MAC_REG_CONTROL, (Xil_In32(WLAN_MAC_REG_CONTROL) & ~WLAN_MAC_CTRL_MASK_RESET) | ((x) ? WLAN_MAC_CTRL_MASK_RESET : 0)) |
---|
50 | |
---|
51 | #define wlan_mac_set_postTx_timer1(d) (Xil_Out32(WLAN_MAC_REG_POST_TX_TIMERS, ((Xil_In32(WLAN_MAC_REG_POST_TX_TIMERS) & ~WLAN_MAC_POST_TX_TIMERS_MASK_TIMER1_COUNTTO) | ((d) & WLAN_MAC_POST_TX_TIMERS_MASK_TIMER1_COUNTTO)))) |
---|
52 | #define wlan_mac_set_postTx_timer2(d) (Xil_Out32(WLAN_MAC_REG_POST_TX_TIMERS, ((Xil_In32(WLAN_MAC_REG_POST_TX_TIMERS) & ~WLAN_MAC_POST_TX_TIMERS_MASK_TIMER2_COUNTTO) | (((d) << 16) & WLAN_MAC_POST_TX_TIMERS_MASK_TIMER2_COUNTTO)))) |
---|
53 | #define wlan_mac_set_postRx_timer1(d) (Xil_Out32(WLAN_MAC_REG_POST_RX_TIMERS, ((Xil_In32(WLAN_MAC_REG_POST_RX_TIMERS) & ~WLAN_MAC_POST_RX_TIMERS_MASK_TIMER1_COUNTTO) | ((d) & WLAN_MAC_POST_RX_TIMERS_MASK_TIMER1_COUNTTO)))) |
---|
54 | #define wlan_mac_set_postRx_timer2(d) (Xil_Out32(WLAN_MAC_REG_POST_RX_TIMERS, ((Xil_In32(WLAN_MAC_REG_POST_RX_TIMERS) & ~WLAN_MAC_POST_RX_TIMERS_MASK_TIMER2_COUNTTO) | (((d) << 16) & WLAN_MAC_POST_RX_TIMERS_MASK_TIMER2_COUNTTO)))) |
---|
55 | |
---|
56 | #define wlan_mac_postTx_timer1_en(d) (Xil_Out32(WLAN_MAC_REG_POST_TX_TIMERS, ((Xil_In32(WLAN_MAC_REG_POST_TX_TIMERS) & ~WLAN_MAC_POST_TX_TIMERS_MASK_TIMER1_EN) | ((d) ? WLAN_MAC_POST_TX_TIMERS_MASK_TIMER1_EN : 0)))) |
---|
57 | #define wlan_mac_postTx_timer2_en(d) (Xil_Out32(WLAN_MAC_REG_POST_TX_TIMERS, ((Xil_In32(WLAN_MAC_REG_POST_TX_TIMERS) & ~WLAN_MAC_POST_TX_TIMERS_MASK_TIMER2_EN) | ((d) ? WLAN_MAC_POST_TX_TIMERS_MASK_TIMER2_EN : 0)))) |
---|
58 | #define wlan_mac_postRx_timer1_en(d) (Xil_Out32(WLAN_MAC_REG_POST_RX_TIMERS, ((Xil_In32(WLAN_MAC_REG_POST_RX_TIMERS) & ~WLAN_MAC_POST_RX_TIMERS_MASK_TIMER1_EN) | ((d) ? WLAN_MAC_POST_RX_TIMERS_MASK_TIMER1_EN : 0)))) |
---|
59 | #define wlan_mac_postRx_timer2_en(d) (Xil_Out32(WLAN_MAC_REG_POST_RX_TIMERS, ((Xil_In32(WLAN_MAC_REG_POST_RX_TIMERS) & ~WLAN_MAC_POST_RX_TIMERS_MASK_TIMER2_EN) | ((d) ? WLAN_MAC_POST_RX_TIMERS_MASK_TIMER2_EN : 0)))) |
---|
60 | |
---|
61 | #define wlan_mac_reset_tx_ctrl_A(x) Xil_Out32(WLAN_MAC_REG_CONTROL, (Xil_In32(WLAN_MAC_REG_CONTROL) & ~WLAN_MAC_CTRL_MASK_RESET_TX_CTRL_A) | ((x) ? WLAN_MAC_CTRL_MASK_RESET_TX_CTRL_A : 0)) |
---|
62 | #define wlan_mac_reset_tx_ctrl_B(x) Xil_Out32(WLAN_MAC_REG_CONTROL, (Xil_In32(WLAN_MAC_REG_CONTROL) & ~WLAN_MAC_CTRL_MASK_RESET_TX_CTRL_B) | ((x) ? WLAN_MAC_CTRL_MASK_RESET_TX_CTRL_B : 0)) |
---|
63 | #define wlan_mac_reset_tx_ctrl_C(x) Xil_Out32(WLAN_MAC_REG_CONTROL, (Xil_In32(WLAN_MAC_REG_CONTROL) & ~WLAN_MAC_CTRL_MASK_RESET_TX_CTRL_C) | ((x) ? WLAN_MAC_CTRL_MASK_RESET_TX_CTRL_C : 0)) |
---|
64 | #define wlan_mac_reset_tx_ctrl_D(x) Xil_Out32(WLAN_MAC_REG_CONTROL, (Xil_In32(WLAN_MAC_REG_CONTROL) & ~WLAN_MAC_CTRL_MASK_RESET_TX_CTRL_D) | ((x) ? WLAN_MAC_CTRL_MASK_RESET_TX_CTRL_D : 0)) |
---|
65 | |
---|
66 | #define wlan_mac_set_A_backoff_reset(x) Xil_Out32(WLAN_MAC_REG_CONTROL, (Xil_In32(WLAN_MAC_REG_CONTROL) & ~WLAN_MAC_CTRL_MASK_RESET_A_BACKOFF) | ((x) ? WLAN_MAC_CTRL_MASK_RESET_A_BACKOFF : 0)) |
---|
67 | #define wlan_mac_set_C_backoff_reset(x) Xil_Out32(WLAN_MAC_REG_CONTROL, (Xil_In32(WLAN_MAC_REG_CONTROL) & ~WLAN_MAC_CTRL_MASK_RESET_C_BACKOFF) | ((x) ? WLAN_MAC_CTRL_MASK_RESET_C_BACKOFF : 0)) |
---|
68 | #define wlan_mac_set_D_backoff_reset(x) Xil_Out32(WLAN_MAC_REG_CONTROL, (Xil_In32(WLAN_MAC_REG_CONTROL) & ~WLAN_MAC_CTRL_MASK_RESET_D_BACKOFF) | ((x) ? WLAN_MAC_CTRL_MASK_RESET_D_BACKOFF : 0)) |
---|
69 | |
---|
70 | #define wlan_mac_pause_tx_ctrl_A(x) Xil_Out32(WLAN_MAC_REG_CONTROL, (Xil_In32(WLAN_MAC_REG_CONTROL) & ~WLAN_MAC_CTRL_MASK_PAUSE_TX_A) | ((x) ? WLAN_MAC_CTRL_MASK_PAUSE_TX_A : 0)) |
---|
71 | #define wlan_mac_pause_tx_ctrl_C(x) Xil_Out32(WLAN_MAC_REG_CONTROL, (Xil_In32(WLAN_MAC_REG_CONTROL) & ~WLAN_MAC_CTRL_MASK_PAUSE_TX_C) | ((x) ? WLAN_MAC_CTRL_MASK_PAUSE_TX_C : 0)) |
---|
72 | #define wlan_mac_pause_tx_ctrl_D(x) Xil_Out32(WLAN_MAC_REG_CONTROL, (Xil_In32(WLAN_MAC_REG_CONTROL) & ~WLAN_MAC_CTRL_MASK_PAUSE_TX_D) | ((x) ? WLAN_MAC_CTRL_MASK_PAUSE_TX_D : 0)) |
---|
73 | |
---|
74 | #define wlan_mac_reset_tu_target_latch(x) Xil_Out32(WLAN_MAC_REG_CONTROL, (Xil_In32(WLAN_MAC_REG_CONTROL) & ~WLAN_MAC_CTRL_MASK_RESET_TU_LATCH) | ((x) ? WLAN_MAC_CTRL_MASK_RESET_TU_LATCH : 0)) |
---|
75 | #define wlan_mac_reset_rx_started(x) Xil_Out32(WLAN_MAC_REG_CONTROL, (Xil_In32(WLAN_MAC_REG_CONTROL) & ~WLAN_MAC_CTRL_MASK_RESET_RX_STARTED_LATCH) | ((x) ? WLAN_MAC_CTRL_MASK_RESET_RX_STARTED_LATCH : 0)) |
---|
76 | |
---|
77 | // WLAN_MAC_REG_SW_BACKOFF_CTRL: |
---|
78 | // b[15:0]: Num Slots |
---|
79 | // b[31] : Start |
---|
80 | // |
---|
81 | #define wlan_mac_set_backoff_num_slots(d) Xil_Out32(WLAN_MAC_REG_SW_BACKOFF_CTRL, ((Xil_In32(WLAN_MAC_REG_SW_BACKOFF_CTRL) & (~0x0000FFFF)) | ((d) & 0x0000FFFF))) |
---|
82 | #define wlan_mac_backoff_start(x) Xil_Out32(WLAN_MAC_REG_SW_BACKOFF_CTRL, ((Xil_In32(WLAN_MAC_REG_SW_BACKOFF_CTRL) & (~0x80000000)) | (((x) << 31) & 0x80000000))) |
---|
83 | |
---|
84 | // WLAN_MAC_IFS_1: |
---|
85 | // b[9:0] : Slot |
---|
86 | // b[29:20]: DIFS |
---|
87 | // |
---|
88 | #define wlan_mac_set_slot(d) Xil_Out32(WLAN_MAC_REG_IFS_1, ((Xil_In32(WLAN_MAC_REG_IFS_1) & (~0x000003FF)) | ((d) & 0x000003FF))) |
---|
89 | #define wlan_mac_set_DIFS(d) Xil_Out32(WLAN_MAC_REG_IFS_1, ((Xil_In32(WLAN_MAC_REG_IFS_1) & (~0x3FF00000)) | (((d) << 20) & 0x3FF00000))) |
---|
90 | |
---|
91 | // WLAN_MAC_IFS_2: |
---|
92 | // b[15:0] : EIFS |
---|
93 | // b[31:16]: ACK Timeout |
---|
94 | // |
---|
95 | #define wlan_mac_set_EIFS(d) Xil_Out32(WLAN_MAC_REG_IFS_2, ((Xil_In32(WLAN_MAC_REG_IFS_2) & (~0x0000FFFF)) | ((d) & 0x0000FFFF))) |
---|
96 | |
---|
97 | // WLAN_MAC_CALIB_TIMES: |
---|
98 | // b[9:0] : TxDIFS |
---|
99 | // b[31:24]: NAV Adj (Fix8_0 - signed char!) |
---|
100 | // |
---|
101 | #define wlan_mac_set_TxDIFS(d) Xil_Out32(WLAN_MAC_REG_CALIB_TIMES, ((Xil_In32(WLAN_MAC_REG_CALIB_TIMES) & (~0x000003FF)) | ((d) & 0x000003FF))) |
---|
102 | #define wlan_mac_set_NAV_adj(d) Xil_Out32(WLAN_MAC_REG_CALIB_TIMES, ((Xil_In32(WLAN_MAC_REG_CALIB_TIMES) & (~0xFF000000)) | (((d) << 24) & 0xFF000000))) |
---|
103 | |
---|
104 | // TX_CTRL_A_PARAMS: |
---|
105 | // b[3:0] : Pkt buf |
---|
106 | // b[7:4] : Tx ant mask |
---|
107 | // b[23:8]: Num backoff slots |
---|
108 | // b[24] : Pre-Wait for PostRx Timer 1 |
---|
109 | // b[25] : Pre-Wait for PostTx Timer 1 |
---|
110 | // b[26] : Post-Wait for PostTx Timer 2 |
---|
111 | // b[29:27]: PHY mode |
---|
112 | // |
---|
113 | #define wlan_mac_tx_ctrl_A_params(pktBuf, antMask, preTx_backoff_slots, preWait_postRxTimer1, preWait_postTxTimer1, postWait_postTxTimer2, phy_mode) \ |
---|
114 | Xil_Out32(WLAN_MAC_REG_TX_CTRL_A_PARAMS, \ |
---|
115 | (((pktBuf) & 0xF ) | \ |
---|
116 | (((antMask) & 0xF ) << 4) | \ |
---|
117 | (((preTx_backoff_slots) & 0xFFFF) << 8) | \ |
---|
118 | (((preWait_postRxTimer1) & 0x1 ) << 24) | \ |
---|
119 | (((preWait_postTxTimer1) & 0x1 ) << 25) | \ |
---|
120 | (((postWait_postTxTimer2) & 0x1 ) << 26) | \ |
---|
121 | (((phy_mode) & 0x7 ) << 27))) |
---|
122 | |
---|
123 | // TX_CTRL_A_GAINS |
---|
124 | // b[0:5] : RFA Tx gain |
---|
125 | // b[6:11] : RFB Tx gain |
---|
126 | // b[12:17]: RFC Tx gain |
---|
127 | // b[18:23]: RFD Tx gain |
---|
128 | // |
---|
129 | #define wlan_mac_tx_ctrl_A_gains(rf_a, rf_b, rf_c, rf_d) \ |
---|
130 | Xil_Out32(WLAN_MAC_REG_TX_CTRL_A_GAINS, \ |
---|
131 | (((rf_a) & 0x3F) | \ |
---|
132 | (((rf_b) & 0x3F) << 6) | \ |
---|
133 | (((rf_c) & 0x3F) << 12) | \ |
---|
134 | (((rf_d) & 0x3F) << 18))) |
---|
135 | |
---|
136 | // TX_CTRL_B_PARAMS: |
---|
137 | // b[3:0]: Pkt buf |
---|
138 | // b[7:4]: Tx ant mask |
---|
139 | // b[8]: Pre-Wait for PostRx Timer 1 |
---|
140 | // b[9]: Pre-Wait for PostRx Timer 2 |
---|
141 | // b[10]: Pre-Wait for PostTx Timer 1 |
---|
142 | // b[11]: Require NAV=0 at Tx time (otherwise skip Tx) |
---|
143 | // b[14:12]: PHY mode |
---|
144 | // |
---|
145 | #define wlan_mac_tx_ctrl_B_params(pktBuf, antMask, req_zeroNAV, preWait_postRxTimer1, preWait_postRxTimer2, preWait_postTxTimer1, phy_mode) \ |
---|
146 | Xil_Out32(WLAN_MAC_REG_TX_CTRL_B_PARAMS, \ |
---|
147 | (((pktBuf) & 0xF) | \ |
---|
148 | (((antMask) & 0xF) << 4) | \ |
---|
149 | (((preWait_postRxTimer1) & 0x1) << 8) | \ |
---|
150 | (((preWait_postRxTimer2) & 0x1) << 9) | \ |
---|
151 | (((preWait_postTxTimer1) & 0x1) << 10) | \ |
---|
152 | (((req_zeroNAV) & 0x1) << 11) | \ |
---|
153 | (((phy_mode) & 0x7) << 12))) |
---|
154 | |
---|
155 | // TX_CTRL_B_GAINS |
---|
156 | // b[0:5] : RFA Tx gain |
---|
157 | // b[6:11] : RFB Tx gain |
---|
158 | // b[12:17]: RFC Tx gain |
---|
159 | // b[18:23]: RFD Tx gain |
---|
160 | // |
---|
161 | #define wlan_mac_tx_ctrl_B_gains(rf_a, rf_b, rf_c, rf_d) \ |
---|
162 | Xil_Out32(WLAN_MAC_REG_TX_CTRL_B_GAINS, \ |
---|
163 | (((rf_a) & 0x3F) | \ |
---|
164 | (((rf_b) & 0x3F) << 6) | \ |
---|
165 | (((rf_c) & 0x3F) << 12) | \ |
---|
166 | (((rf_d) & 0x3F) << 18))) |
---|
167 | |
---|
168 | // TX_CTRL_C_PARAMS: |
---|
169 | // b[3:0]: Pkt buf |
---|
170 | // b[7:4]: Tx ant mask |
---|
171 | // b[8]: Require pre-Tx backoff |
---|
172 | // b[11:9]: PHY mode |
---|
173 | // b[27:12]: Num backoff slots |
---|
174 | // |
---|
175 | #define wlan_mac_tx_ctrl_C_params(pktBuf, antMask, req_backoff, phy_mode, num_slots) \ |
---|
176 | Xil_Out32(WLAN_MAC_REG_TX_CTRL_C_PARAMS, \ |
---|
177 | (((pktBuf) & 0xF) | \ |
---|
178 | (((antMask) & 0xF) << 4) | \ |
---|
179 | (((req_backoff) & 0x1) << 8) | \ |
---|
180 | (((phy_mode) & 0x7) << 9) | \ |
---|
181 | (((num_slots) & 0xFFFF) << 12))) |
---|
182 | |
---|
183 | // TX_CTRL_C_GAINS |
---|
184 | // b[0:5] : RFA Tx gain |
---|
185 | // b[6:11] : RFB Tx gain |
---|
186 | // b[12:17]: RFC Tx gain |
---|
187 | // b[18:23]: RFD Tx gain |
---|
188 | // |
---|
189 | #define wlan_mac_tx_ctrl_C_gains(rf_a, rf_b, rf_c, rf_d) \ |
---|
190 | Xil_Out32(WLAN_MAC_REG_TX_CTRL_C_GAINS, \ |
---|
191 | (((rf_a) & 0x3F) | \ |
---|
192 | (((rf_b) & 0x3F) << 6) | \ |
---|
193 | (((rf_c) & 0x3F) << 12) | \ |
---|
194 | (((rf_d) & 0x3F) << 18))) |
---|
195 | |
---|
196 | // TX_CTRL_D_PARAMS: |
---|
197 | // b[3:0]: Pkt buf |
---|
198 | // b[7:4]: Tx ant mask |
---|
199 | // b[8]: Require pre-Tx backoff |
---|
200 | // b[11:9]: PHY mode |
---|
201 | // b[27:12]: Num backoff slots |
---|
202 | // |
---|
203 | #define wlan_mac_tx_ctrl_D_params(pktBuf, antMask, req_backoff, phy_mode, num_slots) \ |
---|
204 | Xil_Out32(WLAN_MAC_REG_TX_CTRL_D_PARAMS, \ |
---|
205 | (((pktBuf) & 0xF) | \ |
---|
206 | (((antMask) & 0xF) << 4) | \ |
---|
207 | (((req_backoff) & 0x1) << 8) | \ |
---|
208 | (((phy_mode) & 0x7) << 9) | \ |
---|
209 | (((num_slots) & 0xFFFF) << 12))) |
---|
210 | |
---|
211 | // TX_CTRL_D_GAINS |
---|
212 | // b[0:5] : RFA Tx gain |
---|
213 | // b[6:11] : RFB Tx gain |
---|
214 | // b[12:17]: RFC Tx gain |
---|
215 | // b[18:23]: RFD Tx gain |
---|
216 | // |
---|
217 | #define wlan_mac_tx_ctrl_D_gains(rf_a, rf_b, rf_c, rf_d) \ |
---|
218 | Xil_Out32(WLAN_MAC_REG_TX_CTRL_D_GAINS, \ |
---|
219 | (((rf_a) & 0x3F) | \ |
---|
220 | (((rf_b) & 0x3F) << 6) | \ |
---|
221 | (((rf_c) & 0x3F) << 12) | \ |
---|
222 | (((rf_d) & 0x3F) << 18))) |
---|
223 | |
---|
224 | // TX_START |
---|
225 | // b[0]: Tx CTRL A Start |
---|
226 | // b[1]: Tx CTRL B Start |
---|
227 | // b[2]: Tx CTRL C Start |
---|
228 | // b[3]: Tx CTRL D Start |
---|
229 | // |
---|
230 | // NOTE: Intrepret non-zero (x) as Tx start enable, zero (x) as Tx start disable |
---|
231 | // MAC core requires rising edge on either Tx start bit; software must set then clear for each Tx |
---|
232 | // |
---|
233 | #define wlan_mac_tx_ctrl_A_start(x) Xil_Out32(WLAN_MAC_REG_TX_START, ((Xil_In32(WLAN_MAC_REG_TX_START) & ~WLAN_MAC_START_REG_MASK_START_TX_A) | ((x) ? WLAN_MAC_START_REG_MASK_START_TX_A : 0x0))) |
---|
234 | #define wlan_mac_tx_ctrl_B_start(x) Xil_Out32(WLAN_MAC_REG_TX_START, ((Xil_In32(WLAN_MAC_REG_TX_START) & ~WLAN_MAC_START_REG_MASK_START_TX_B) | ((x) ? WLAN_MAC_START_REG_MASK_START_TX_B : 0x0))) |
---|
235 | #define wlan_mac_tx_ctrl_C_start(x) Xil_Out32(WLAN_MAC_REG_TX_START, ((Xil_In32(WLAN_MAC_REG_TX_START) & ~WLAN_MAC_START_REG_MASK_START_TX_C) | ((x) ? WLAN_MAC_START_REG_MASK_START_TX_C : 0x0))) |
---|
236 | #define wlan_mac_tx_ctrl_D_start(x) Xil_Out32(WLAN_MAC_REG_TX_START, ((Xil_In32(WLAN_MAC_REG_TX_START) & ~WLAN_MAC_START_REG_MASK_START_TX_D) | ((x) ? WLAN_MAC_START_REG_MASK_START_TX_D : 0x0))) |
---|
237 | |
---|
238 | // LATEST_RX_BYTE |
---|
239 | // b[15:0] : Last byte index |
---|
240 | // b[23:16]: Last byte |
---|
241 | // |
---|
242 | #define wlan_mac_get_last_byte_index() (Xil_In32(WLAN_MAC_REG_LATEST_RX_BYTE) & 0xFFFF) |
---|
243 | #define wlan_mac_get_last_byte() ((Xil_In32(WLAN_MAC_REG_LATEST_RX_BYTE) & 0xFF0000) >> 16) |
---|
244 | |
---|
245 | // TX_A_BACKOFF_COUNTER |
---|
246 | // b[15:0]: A Backoff count |
---|
247 | #define wlan_mac_get_backoff_count_A() (Xil_In32(WLAN_MAC_REG_TX_A_BACKOFF_COUNTER) & 0x0000FFFF) |
---|
248 | |
---|
249 | // TX_CD_BACKOFF_COUNTERS |
---|
250 | // b[15:0]: C Backoff count |
---|
251 | // b[31:16]: D Backoff count |
---|
252 | #define wlan_mac_get_backoff_count_C() (Xil_In32(WLAN_MAC_REG_TX_CD_BACKOFF_COUNTERS) & 0x0000FFFF) |
---|
253 | #define wlan_mac_get_backoff_count_D() ((Xil_In32(WLAN_MAC_REG_TX_CD_BACKOFF_COUNTERS) & 0xFFFF0000) >> 16) |
---|
254 | |
---|
255 | // RX_PHY_PARAMS Register: |
---|
256 | // b[15:0] : Length |
---|
257 | // b[22:16]: MCS |
---|
258 | // b[23] : Unsupported |
---|
259 | // b[26:24]: Rx PHY Mode ([1,2,4] = [11a,11n,11ac]) |
---|
260 | // b[27] : Rx params valid |
---|
261 | // b[28] : Rx PHY Sel (0=OFDM, 1=DSSS) |
---|
262 | // b[31:29] : Rx Error |
---|
263 | // |
---|
264 | #define wlan_mac_get_rx_phy_hdr_params() (Xil_In32(WLAN_MAC_REG_PHY_RX_PHY_HDR_PARAMS)) |
---|
265 | #define wlan_mac_get_rx_phy_length() (Xil_In32(WLAN_MAC_REG_PHY_RX_PHY_HDR_PARAMS) & WLAN_MAC_PHY_RX_PHY_HDR_MASK_LENGTH) |
---|
266 | #define wlan_mac_get_rx_phy_mcs() ((Xil_In32(WLAN_MAC_REG_PHY_RX_PHY_HDR_PARAMS) & WLAN_MAC_PHY_RX_PHY_HDR_MASK_MCS) >> 16) |
---|
267 | #define wlan_mac_get_rx_phy_sel() ((Xil_In32(WLAN_MAC_REG_PHY_RX_PHY_HDR_PARAMS) & WLAN_MAC_PHY_RX_PHY_HDR_MASK_PHY_SEL)) |
---|
268 | #define wlan_mac_get_rx_phy_mode() ((Xil_In32(WLAN_MAC_REG_PHY_RX_PHY_HDR_PARAMS) & WLAN_MAC_PHY_RX_PHY_HDR_MASK_PHY_MODE) >> 24) |
---|
269 | #define wlan_mac_get_rx_error() ((Xil_In32(WLAN_MAC_REG_PHY_RX_PHY_HDR_PARAMS) & WLAN_MAC_PHY_RX_PHY_HDR_MASK_RX_ERROR) >> 29) |
---|
270 | #define wlan_mac_get_rx_phy_params_valid() ((Xil_In32(WLAN_MAC_REG_PHY_RX_PHY_HDR_PARAMS) & WLAN_MAC_PHY_RX_PHY_HDR_MASK_PARAMS_VALID)) |
---|
271 | |
---|
272 | |
---|
273 | // TU Target register - UFix32_0 TU target |
---|
274 | #define wlan_mac_get_tu_target() (u64)(((u64)Xil_In32(WLAN_MAC_REG_TU_TARGET_MSB)<<32) + (u64)Xil_In32(WLAN_MAC_REG_TU_TARGET_LSB)) |
---|
275 | |
---|
276 | //----------------------------------------------- |
---|
277 | // MAC Rx callback return defines |
---|
278 | // |
---|
279 | #define FRAME_RX_RET_STATUS_RECEIVED_PKT 0x00000001 // b[0] |
---|
280 | #define FRAME_RX_RET_STATUS_GOOD 0x00000002 // b[1] |
---|
281 | #define FRAME_RX_RET_ADDR_MATCH 0x00000004 // b[2] |
---|
282 | #define FRAME_RX_RET_CANCEL_TX 0x00000008 // b[3] |
---|
283 | #define FRAME_RX_RET_SKIP_RX_STARTED_RESET 0x00000010 // b[4] |
---|
284 | #define FRAME_RX_RET_STATUS_TYPE 0x0000FF00 // b[15:8] |
---|
285 | |
---|
286 | #define FRAME_RX_RET_TYPE_DATA (1 << 8) |
---|
287 | #define FRAME_RX_RET_TYPE_ACK (1 << 9) |
---|
288 | #define FRAME_RX_RET_TYPE_CTS (1 << 10) |
---|
289 | #define FRAME_RX_RET_TYPE_OTHER (1 << 11) |
---|
290 | |
---|
291 | //----------------------------------------------- |
---|
292 | // WLAN Exp low parameter defines |
---|
293 | // NOTE: Need to make sure that these values do not conflict with any of the LOW PARAM |
---|
294 | // callback defines |
---|
295 | |
---|
296 | #define LOW_PARAM_PKT_DET_MIN_POWER 0x00000006 |
---|
297 | #define LOW_PARAM_PHY_SAMPLE_RATE 0x00000008 |
---|
298 | #define LOW_PARAM_DSSS_PKT_DET_THRESH 0x0000A000 |
---|
299 | #define LOW_PARAM_OFDM_PKT_DET_THRESH 0x0000B000 |
---|
300 | #define LOW_PARAM_OFDM_RX_EN 0x0000C000 |
---|
301 | #define LOW_PARAM_CUSTOM_MAX2829_TUNE 0x0000D000 |
---|
302 | |
---|
303 | |
---|
304 | /*************************** Function Prototypes *****************************/ |
---|
305 | int wlan_mac_low_init(u32 type, char* date, char* time); |
---|
306 | void wlan_mac_low_init_finish(); |
---|
307 | void wlan_mac_low_send_status(u8 cpu_status_reason); |
---|
308 | void set_phy_samp_rate(enum phy_samp_rate_t phy_samp_rate); |
---|
309 | void wlan_mac_hw_init(); |
---|
310 | void wlan_mac_low_init_hw_info(u32 type); |
---|
311 | |
---|
312 | void wlan_mac_low_send_exception(u32 reason); |
---|
313 | |
---|
314 | u32 wlan_mac_low_poll_frame_rx(); |
---|
315 | int wlan_mac_low_poll_ipc_rx(); |
---|
316 | |
---|
317 | void wlan_mac_low_process_ipc_msg(struct wlan_ipc_msg_t * msg); |
---|
318 | void wlan_mac_low_frame_ipc_send(); |
---|
319 | void wlan_mac_low_send_low_tx_details(u8 pkt_buf, struct wlan_mac_low_tx_details_t* low_tx_details); |
---|
320 | |
---|
321 | void wlan_mac_low_set_frame_rx_callback(function_ptr_t callback); |
---|
322 | void wlan_mac_low_set_beacon_txrx_config_callback(function_ptr_t callback); |
---|
323 | void wlan_mac_low_set_mcast_buffer_enable_callback(function_ptr_t callback); |
---|
324 | void wlan_mac_low_set_mactime_change_callback(function_ptr_t callback); |
---|
325 | void wlan_mac_low_set_sample_rate_change_callback(function_ptr_t callback); |
---|
326 | void wlan_mac_low_set_handle_tx_pkt_buf_ready(function_ptr_t callback); |
---|
327 | void wlan_mac_low_set_ipc_low_param_callback(function_ptr_t callback); |
---|
328 | |
---|
329 | u64 wlan_mac_low_get_rx_start_timestamp(); |
---|
330 | u64 wlan_mac_low_get_tx_start_timestamp(); |
---|
331 | u32 wlan_mac_low_get_active_channel(); |
---|
332 | s8 wlan_mac_low_get_current_ctrl_tx_pow(); |
---|
333 | u32 wlan_mac_low_get_current_rx_filter(); |
---|
334 | enum phy_samp_rate_t wlan_mac_low_get_phy_samp_rate(); |
---|
335 | |
---|
336 | void wlan_mac_low_set_nav_check_addr(u8* addr); |
---|
337 | int wlan_mac_low_set_radio_channel(u32 channel); |
---|
338 | u32 wlan_mac_low_lock_tx_pkt_buf(u16 tx_pkt_buf); |
---|
339 | |
---|
340 | void wlan_mac_low_DSSS_rx_enable(); |
---|
341 | void wlan_mac_low_DSSS_rx_disable(); |
---|
342 | |
---|
343 | #define PREPARE_FRAME_TRANSMIT_ERROR_INVALID_PKT_BUF -1 |
---|
344 | #define PREPARE_FRAME_TRANSMIT_ERROR_UNEXPECTED_PKT_BUF_STATE -2 |
---|
345 | #define PREPARE_FRAME_TRANSMIT_ERROR_LOCK_FAIL -3 |
---|
346 | |
---|
347 | int wlan_mac_low_prepare_frame_transmit(u16 tx_pkt_buf); |
---|
348 | int wlan_mac_low_finish_frame_transmit(u16 tx_pkt_buf); |
---|
349 | |
---|
350 | |
---|
351 | |
---|
352 | void wlan_mac_low_lock_empty_rx_pkt_buf(); |
---|
353 | |
---|
354 | u32 wlan_mac_hw_rx_finish(); |
---|
355 | |
---|
356 | void wlan_mac_reset_backoff_counter(); |
---|
357 | void wlan_mac_reset_NAV_counter(); |
---|
358 | |
---|
359 | u16 wlan_mac_low_mcs_to_n_dbps(u8 mcs, u8 phy_mode); |
---|
360 | u8 wlan_mac_low_mcs_to_ctrl_resp_mcs(u8 mcs, u8 phy_mode); |
---|
361 | |
---|
362 | void wlan_mac_hw_clear_rx_started(); |
---|
363 | |
---|
364 | void wlan_mac_set_tu_target(u64 tu_target); |
---|
365 | |
---|
366 | |
---|
367 | #endif /* WLAN_MAC_LOW_H_ */ |
---|