[6319] | 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_ */ |
---|