[724] | 1 | /*! \file warpphy.h |
---|
| 2 | \brief Header file for the WARPPHY functions |
---|
| 3 | |
---|
[1598] | 4 | @version 15.22 |
---|
[903] | 5 | @author Patrick Murphy and Chris Hunter |
---|
[724] | 6 | |
---|
| 7 | This header file contains the macros, function prototypes, and typedefs required for WARPPHY. |
---|
| 8 | */ |
---|
| 9 | |
---|
[675] | 10 | //WARPPHY Interface |
---|
| 11 | /***************CHANGELOG***************** |
---|
| 12 | |
---|
| 13 | ******************************************/ |
---|
| 14 | /*****************WARPPHY***************** |
---|
| 15 | Description: This file specifies the |
---|
| 16 | interface between to the PHY. |
---|
| 17 | ******************************************/ |
---|
| 18 | |
---|
| 19 | #ifndef WARPPHY_H |
---|
| 20 | #define WARPPHY_H |
---|
| 21 | |
---|
[1169] | 22 | //Flag to include a bunch of low-level debugging functions |
---|
| 23 | // for tweaking values in the PHY cores |
---|
| 24 | // These can be excluded for most applications, saving a lot of code space |
---|
[1712] | 25 | #define INCLUDE_WARPPHY_DEBUG_FUNCTIONS 0 |
---|
[1169] | 26 | |
---|
| 27 | //Old design flow used OFDM_BASEADDR to refer to the PHY's base address |
---|
| 28 | // New flow addresses registers directly, not relative to a base address |
---|
| 29 | // This value is still defined to keep code from breaking |
---|
[972] | 30 | #define OFDM_BASEADDR 0 |
---|
[1169] | 31 | |
---|
| 32 | //PHY packet buffer is actually a PLB BRAM |
---|
| 33 | // The base address is the address of the PLB BRAM controller |
---|
[972] | 34 | #define OFDM_PKTBUFF_BASEADDR XPAR_XPS_BRAM_IF_CNTLR_2_BASEADDR |
---|
[675] | 35 | |
---|
| 36 | //Masks for configuring modulation settings in the PHY |
---|
| 37 | //Each is 8 copies of a 4-bit modulation value |
---|
| 38 | #define MODMASK_BPSK 0x11111111 |
---|
| 39 | #define MODMASK_QPSK 0x22222222 |
---|
| 40 | #define MODMASK_16QAM 0x44444444 |
---|
| 41 | #define MODMASK_64QAM 0x66666666 |
---|
| 42 | |
---|
[1208] | 43 | #define MOD_UNCHANGED 0xFF |
---|
| 44 | |
---|
[1616] | 45 | #define NUM_BASERATE_SYMBOLS_BPSK_CODED 8 |
---|
| 46 | #define NUM_BASERATE_SYMBOLS_QPSK_CODED 4 |
---|
| 47 | #define NUM_BASERATE_SYMBOLS_BPSK_UNCODED 4 |
---|
| 48 | #define NUM_BASERATE_SYMBOLS_QPSK_UNCODED 2 |
---|
| 49 | |
---|
| 50 | //Number of base rate OFDM symbols per packet |
---|
| 51 | // Must correspond to base rate modulation, number of header bytes and header coding rate |
---|
| 52 | #define NUM_BASERATE_SYMBOLS NUM_BASERATE_SYMBOLS_QPSK_CODED |
---|
| 53 | |
---|
| 54 | //Define number of channel training symbols per packet - must be even! |
---|
| 55 | // In SISO mode all symbols are used to train the H_AA channel |
---|
| 56 | // In Alamouti, alternate symbols train H_AA and H_BA |
---|
| 57 | // In 2x2, alternate symbols train H_AA/H_AB and H_BA/H_BB |
---|
| 58 | #define NUM_TRAINING_SYMBOLS 2 |
---|
| 59 | |
---|
[1169] | 60 | //Number of packet buffers; each sub-buffer is 2KB, so a 64KB PLB BRAM hold 32 buffers |
---|
[1103] | 61 | #define NUMPKTBUFFS 32 |
---|
[675] | 62 | |
---|
[1169] | 63 | //Length of the running RSSI sum in the pkt detector |
---|
| 64 | // #define'd here so it can be used again below |
---|
| 65 | #define PKTDET_RSSI_SUMLEN 16 |
---|
| 66 | |
---|
| 67 | //Define an RSSI threshold big enough so that carrier sensing will never assert |
---|
| 68 | // This is used to "disable" carrier sensing at run time |
---|
| 69 | #define CSMA_DISABLED_THRESH (1023*PKTDET_RSSI_SUMLEN) |
---|
| 70 | |
---|
[1494] | 71 | //Initial FFT window offset (number of CP samples to use per Rx FFT) |
---|
[1616] | 72 | #define INIT_RXFFTOFSET 10 |
---|
[1279] | 73 | |
---|
[1105] | 74 | //Code rate selection values, used in header.codeRate field per-packet |
---|
[1164] | 75 | //#define CONVCODED_PHY 1 |
---|
[1616] | 76 | #define HDR_CODE_RATE_12 0 |
---|
| 77 | #define HDR_CODE_RATE_23 1 |
---|
| 78 | #define HDR_CODE_RATE_34 2 |
---|
| 79 | #define HDR_CODE_RATE_NONE 3 |
---|
[1105] | 80 | |
---|
[1197] | 81 | #define TIMER_MODE_CARRIERSENSE 1 |
---|
| 82 | #define TIMER_MODE_NOCARRIERSENSE 0 |
---|
| 83 | |
---|
[1015] | 84 | //Define scaling values for the PHY's FFT cores |
---|
| 85 | #define TX_FFT_SCALING_STAGE1 1 |
---|
| 86 | #define TX_FFT_SCALING_STAGE2 2 |
---|
| 87 | #define TX_FFT_SCALING_STAGE3 3 |
---|
| 88 | |
---|
[1494] | 89 | // Was 1 2 1 |
---|
| 90 | #define RX_FFT_SCALING_STAGE1 0 |
---|
| 91 | #define RX_FFT_SCALING_STAGE2 1 |
---|
| 92 | #define RX_FFT_SCALING_STAGE3 1 |
---|
[1015] | 93 | |
---|
[1032] | 94 | //Define thresholds for the AGC |
---|
| 95 | #define AGC_THRESH_1 0xE2 //-30 |
---|
| 96 | #define AGC_THRESH_2 0xCB //-53 |
---|
| 97 | #define AGC_THRESH_3 0xA6 //-90 |
---|
[1169] | 98 | |
---|
[941] | 99 | //RX Status register values |
---|
[1282] | 100 | #define PHYRXSTATUS_INCOMPLETE 0 |
---|
| 101 | #define PHYRXSTATUS_GOOD 0x5 |
---|
| 102 | #define PHYRXSTATUS_BAD 0xA |
---|
| 103 | #define PHYRXSTATUS_PAYLOAD 0x3 |
---|
| 104 | #define PHYRXSTATUS_HEADER 0xC |
---|
[941] | 105 | |
---|
[1208] | 106 | //Antenna configuration constants |
---|
| 107 | #define ANTMODE_UNCHANGED 0 |
---|
| 108 | |
---|
[1226] | 109 | #define ANTMODE_MASK_ANTSEL 0x00F |
---|
| 110 | #define ANTMODE_MASK_PHYMODE 0x0F0 |
---|
| 111 | #define ANTMODE_MASK_PHYANTCFG 0xF00 |
---|
[1208] | 112 | |
---|
[1226] | 113 | #define ANTMODE_ANTSEL_RADA 0x001 |
---|
| 114 | #define ANTMODE_ANTSEL_RADB 0x002 |
---|
| 115 | #define ANTMODE_ANTSEL_BOTHRADS (ANTMODE_ANTSEL_RADA | ANTMODE_ANTSEL_RADB) |
---|
[1208] | 116 | |
---|
[1226] | 117 | #define PHYMODE_SISO 0x010 |
---|
| 118 | #define PHYMODE_ALAMOUTI 0x020 |
---|
| 119 | #define PHYMODE_2X2MULT 0x040 |
---|
[1208] | 120 | |
---|
[1226] | 121 | #define PHYANTCFG_TX_NORMAL 0x100 |
---|
| 122 | #define PHYANTCFG_TX_SWAPPED 0x200 |
---|
[1208] | 123 | |
---|
[1226] | 124 | #define PHYANTCFG_RX_NORMAL 0x100 |
---|
| 125 | #define PHYANTCFG_RX_SWAPPED 0x200 |
---|
| 126 | #define PHYANTCFG_RX_SELDIV 0x400 |
---|
| 127 | |
---|
| 128 | #define TX_ANTMODE_SISO_ANTA (ANTMODE_ANTSEL_RADA | PHYMODE_SISO | PHYANTCFG_TX_NORMAL) |
---|
| 129 | #define TX_ANTMODE_SISO_ANTB (ANTMODE_ANTSEL_RADB | PHYMODE_SISO | PHYANTCFG_TX_SWAPPED) |
---|
| 130 | #define TX_ANTMODE_MULTPLX (ANTMODE_ANTSEL_BOTHRADS | PHYMODE_2X2MULT | PHYANTCFG_TX_NORMAL) |
---|
| 131 | #define TX_ANTMODE_MULTPLX_SWAPPED (ANTMODE_ANTSEL_BOTHRADS | PHYMODE_2X2MULT | PHYANTCFG_TX_SWAPPED) |
---|
| 132 | #define TX_ANTMODE_ALAMOUTI_2ANT (ANTMODE_ANTSEL_BOTHRADS | PHYMODE_ALAMOUTI | PHYANTCFG_TX_NORMAL) |
---|
| 133 | #define TX_ANTMODE_ALAMOUTI_2ANT_SWAPPED (ANTMODE_ANTSEL_BOTHRADS | PHYMODE_ALAMOUTI | PHYANTCFG_TX_SWAPPED) |
---|
| 134 | #define TX_ANTMODE_ALAMOUTI_ANTA (ANTMODE_ANTSEL_RADA | PHYMODE_ALAMOUTI | PHYANTCFG_TX_NORMAL) |
---|
[1232] | 135 | #define TX_ANTMODE_ALAMOUTI_ANTB (ANTMODE_ANTSEL_RADB | PHYMODE_ALAMOUTI | PHYANTCFG_TX_NORMAL) |
---|
| 136 | #define TX_ANTMODE_ALAMOUTI_ANTA_SWAPPED (ANTMODE_ANTSEL_RADA | PHYMODE_ALAMOUTI | PHYANTCFG_TX_SWAPPED) |
---|
| 137 | #define TX_ANTMODE_ALAMOUTI_ANTB_SWAPPED (ANTMODE_ANTSEL_RADB | PHYMODE_ALAMOUTI | PHYANTCFG_TX_SWAPPED) |
---|
[1226] | 138 | |
---|
| 139 | #define RX_ANTMODE_SISO_ANTA (ANTMODE_ANTSEL_RADA | PHYMODE_SISO | PHYANTCFG_RX_NORMAL) |
---|
| 140 | #define RX_ANTMODE_SISO_ANTB (ANTMODE_ANTSEL_RADB | PHYMODE_SISO | PHYANTCFG_RX_SWAPPED) |
---|
| 141 | #define RX_ANTMODE_SISO_SELDIV (ANTMODE_ANTSEL_BOTHRADS | PHYMODE_SISO | PHYANTCFG_RX_SELDIV) |
---|
| 142 | #define RX_ANTMODE_MULTPLX (ANTMODE_ANTSEL_BOTHRADS | PHYMODE_2X2MULT | PHYANTCFG_RX_NORMAL) |
---|
| 143 | #define RX_ANTMODE_ALAMOUTI_ANTA (ANTMODE_ANTSEL_RADA | PHYMODE_ALAMOUTI | PHYANTCFG_RX_NORMAL) |
---|
| 144 | #define RX_ANTMODE_ALAMOUTI_ANTB (ANTMODE_ANTSEL_RADB | PHYMODE_ALAMOUTI | PHYANTCFG_RX_SWAPPED) |
---|
| 145 | #define RX_ANTMODE_ALAMOUTI_SELDIV (ANTMODE_ANTSEL_BOTHRADS | PHYMODE_ALAMOUTI | PHYANTCFG_RX_SELDIV) |
---|
| 146 | |
---|
[720] | 147 | //Bit masks for the options configured in Rx_ControlBits |
---|
[675] | 148 | #define RESET_BER 0x1 |
---|
| 149 | #define REQ_LONG_CORR 0x2 |
---|
[1555] | 150 | //#define UNUSED 0x4 |
---|
[720] | 151 | #define BIG_PKTBUF_MODE 0x8 |
---|
[675] | 152 | #define RX_SISO_MODE 0x10 |
---|
[1555] | 153 | //#define UNUSED 0x20 |
---|
| 154 | //#define UNUSED 0x40 |
---|
[1203] | 155 | #define RECORD_CHAN_ESTS 0x80 |
---|
[1537] | 156 | #define RECORD_CHAN_ESTMAGS 0x100 |
---|
[675] | 157 | #define BYPASS_CARR_REC 0x200 |
---|
[720] | 158 | #define COARSE_CFO_EN 0x400 |
---|
[1516] | 159 | #define EXT_PKTDETRESET_EN 0x800 |
---|
[1245] | 160 | #define RSSI_GAIN_ADJ 0x1000 |
---|
[675] | 161 | #define EQ_BYPASS_DIVISION 0x4000 |
---|
[1164] | 162 | #define TX_DISABLE_PKTDET 0x8000 |
---|
[675] | 163 | #define SIMPLE_DYN_MOD_EN 0x10000 |
---|
| 164 | #define SWITCHING_DIV_EN 0x20000 |
---|
| 165 | #define SISO_ON_ANTB 0x40000 |
---|
[825] | 166 | #define RESET_ON_BAD_HDR 0x80000 |
---|
[1192] | 167 | #define RX_ALAMOUTI_MODE 0x100000 |
---|
| 168 | #define FLEX_BER_MODE 0x200000 |
---|
| 169 | #define BER_IGNORE_HDR 0x400000 |
---|
[1208] | 170 | #define PHY_RADIO_RXEN 0x1000000 |
---|
| 171 | #define AF_SAVEWAVEFORM 0x2000000 |
---|
[1254] | 172 | #define AUTORESP_FLAGA_RST 0x4000000 |
---|
| 173 | #define AUTORESP_FLAGB_RST 0x8000000 |
---|
[1546] | 174 | #define COARSECFO_PKTDET_EN 0x10000000 |
---|
| 175 | #define CHANMAG_MASKING_EN 0x20000000 |
---|
[1555] | 176 | //#define UNUSED 0x40000000 |
---|
[675] | 177 | #define RX_GLOBAL_RESET 0x80000000 |
---|
| 178 | |
---|
[1494] | 179 | //Bit masks for PreCFO_Options register |
---|
| 180 | #define PRECFO_USECOARSE 0x00000001 |
---|
| 181 | #define PRECFO_USEPILOTS 0x00000002 |
---|
| 182 | |
---|
[1208] | 183 | //Bit masks for Tx Start/Reset register |
---|
| 184 | #define TX_MASTER_RESET 0x1 |
---|
| 185 | #define TX_START 0x2 |
---|
| 186 | |
---|
| 187 | //Bit masks for OFDM Tx options |
---|
[1494] | 188 | #define TX_SISO_MODE 0x00000001 |
---|
| 189 | #define TX_ALAMOUTI_MODE 0x00000002 |
---|
| 190 | #define TX_DISABLE_ANTB_PREAMBLE 0x00000004 |
---|
| 191 | #define TX_PILOT_SCRAMBLING 0x00000008 |
---|
| 192 | #define TX_PREAMBLE_B_DLY 0x000000F0 //4-bit value |
---|
| 193 | #define TX_RANDOM_PAYLOAD 0x00000100 |
---|
| 194 | #define TX_SWAP_ANTENNAS 0x00000200 |
---|
| 195 | #define TX_SOFTWARE_TXEN 0x00000400 |
---|
| 196 | #define TX_EXTERNAL_TXEN 0x00000800 |
---|
[1541] | 197 | #define TX_ALWAYS_USE_PRECFO 0x00001000 |
---|
| 198 | #define TX_CAPTURE_RANDOM_PAYLOAD 0x00002000 |
---|
| 199 | #define TX_AUTO_TWOTX_EN 0x00004000 |
---|
| 200 | #define TX_START_D0_OUT_EN 0x00008000 |
---|
| 201 | #define TX_START_D1_OUT_EN 0x00010000 |
---|
[1555] | 202 | #define TX_ALT_INTERPFILT 0x00020000 |
---|
| 203 | #define TX_CONJ_ANTB_STS 0x00040000 |
---|
| 204 | #define TX_CONJ_ANTB_LTS 0x00080000 |
---|
[1208] | 205 | |
---|
[1541] | 206 | //Bit masks for Tx_Delays register |
---|
| 207 | #define TX_EXTAUTO_TXEN_DLY_LSB 0 //0x000000FF //8-bit value |
---|
| 208 | #define TX_AUTOTX_EXTRA_DLY_LSB 8 //0x00000F00 //4-bit value |
---|
| 209 | #define TX_START_D_OUTPUTS_DLY_LSB 12 //0x000FF000 //8-bit value |
---|
| 210 | |
---|
[1169] | 211 | //Bit masks for the Tx/Rx status bits |
---|
[1270] | 212 | #define RXSTATUS_PKTDONE_RST 0x1 |
---|
| 213 | #define RXSTATUS_HEADER_RST 0x2 |
---|
[1169] | 214 | #define TXSTATUS_DONE_RST 0x4 |
---|
[675] | 215 | |
---|
[1169] | 216 | #define RXSTATUS_GOODPKT 0x8 |
---|
| 217 | #define RXSTATUS_BADPKT 0x10 |
---|
| 218 | #define RXSTATUS_GOODHEADER 0x20 |
---|
| 219 | #define RXSTATUS_BADHEADER 0x40 |
---|
| 220 | #define TXSTATUS_DONE 0x80 |
---|
[941] | 221 | |
---|
[1169] | 222 | #define ALL_STATUSBITS_ENABLE (RXSTATUS_GOODHEADER|RXSTATUS_BADHEADER|RXSTATUS_BADPKT|RXSTATUS_GOODPKT|TXSTATUS_DONE) |
---|
| 223 | #define DEFAULT_STATUSBITS (RXSTATUS_GOODHEADER|RXSTATUS_BADHEADER|RXSTATUS_BADPKT|RXSTATUS_GOODPKT) |
---|
| 224 | #define DEFAULT_STATUSBITRESETS (RXSTATUS_HEADER_RST|RXSTATUS_PKTDONE_RST|TXSTATUS_DONE_RST) |
---|
| 225 | |
---|
[941] | 226 | //Define which radios get used |
---|
[675] | 227 | //RADIOx_ADDR are defined by the radio controller driver |
---|
| 228 | #define FIRST_RADIO RADIO2_ADDR |
---|
| 229 | #define SECOND_RADIO RADIO3_ADDR |
---|
[1208] | 230 | #define BOTH_RADIOS (FIRST_RADIO | SECOND_RADIO) |
---|
[675] | 231 | |
---|
[941] | 232 | //Shorthand for configuring the radio controller's selected band |
---|
[675] | 233 | #define GHZ_5 0 |
---|
| 234 | #define GHZ_2 1 |
---|
| 235 | |
---|
[1203] | 236 | //Bit masks for OFDM Tx status register |
---|
| 237 | #define OFDM_TX_BUSY 0x1 |
---|
| 238 | #define OFDM_TX_HEADERBUSY 0x2 |
---|
| 239 | |
---|
[941] | 240 | //Bits 0xF0 are used for 4-bit preable shift value |
---|
[675] | 241 | #define TX_SISO_ON_ANTB 0x100 |
---|
| 242 | |
---|
| 243 | //MAC2PHY Options |
---|
[941] | 244 | #define TXBLOCK 0x0 |
---|
| 245 | #define TXNOBLOCK 0x1 |
---|
[675] | 246 | |
---|
[941] | 247 | //Macros for accessing the OFDM packet buffer; buff is an integer in [0,NUMPKTBUFFS-1] |
---|
| 248 | #define warpphy_copyBytesToPhy(buff,src,len) memcpy(OFDM_PKTBUFF_BASEADDR + buff * 0x1000,(src),(len)) |
---|
| 249 | #define warpphy_copyBytesFromPhy(buff,dest,len) memcpy((dest), OFDM_PKTBUFF_BASEADDR + buff * 0x1000, (len)) |
---|
[870] | 250 | |
---|
[941] | 251 | //Macro to retrieve the physical memory address for a given packet buffer index |
---|
[1103] | 252 | // PHY packet buffers are 2048 bytes (0x800) each |
---|
| 253 | // The current PHY has 32 buffers, so the buffer index is masked to 5 bits |
---|
| 254 | // here to avoid returning bogus buffer addresses |
---|
| 255 | #define warpphy_getBuffAddr(c) (OFDM_PKTBUFF_BASEADDR + (c & 0x1F)*(0x800)) |
---|
[870] | 256 | |
---|
[941] | 257 | //Macros to read/write PHY registers |
---|
[1210] | 258 | #define mimo_ofdmTx_setStartTx(c) ofdm_txrx_mimo_WriteReg_Tx_Start_Reset_Control(OFDM_BASEADDR, ( (c<<1) & TX_START) ) |
---|
[941] | 259 | #define mimo_ofdmRx_setByteNums(c) ofdm_txrx_mimo_WriteReg_Rx_pktByteNums(OFDM_BASEADDR, c) |
---|
| 260 | #define mimo_ofdmRx_setRxScaling(c) ofdm_txrx_mimo_WriteReg_Rx_Constellation_Scaling(OFDM_BASEADDR, c) |
---|
| 261 | #define mimo_ofdmRx_setLongCorrParams(c) ofdm_txrx_mimo_WriteReg_Rx_PktDet_LongCorr_Params(OFDM_BASEADDR, c) |
---|
[1222] | 262 | |
---|
| 263 | #define mimo_ofdmTx_setPilotIndcies(c) ofdm_txrx_mimo_WriteReg_TxRx_Pilots_Index(0, c) |
---|
| 264 | #define mimo_ofdmTxRx_setPilotValues(c) ofdm_txrx_mimo_WriteReg_TxRx_Pilots_Values(0, c) |
---|
| 265 | |
---|
[1712] | 266 | #define mimo_ofdmTxRx_setFECoptions(codingEn, softEn, zeroTail, scale_qpsk, scale_16qam) XIo_Out32(XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_FEC_CONFIG, ( \ |
---|
[1615] | 267 | ((codingEn<<0) & 0x1) | \ |
---|
| 268 | ((softEn<<1) & 0x2) | \ |
---|
| 269 | ((zeroTail<<2) & 0x4) | \ |
---|
| 270 | ((scale_qpsk<<4) & 0xF0) | \ |
---|
| 271 | ((scale_16qam<<8) & 0x1F00))) |
---|
| 272 | |
---|
[1712] | 273 | //#define warpphy_setChanEstMinMags(chanAA, chanBA) XIo_Out32(XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_RX_CHANEST_MINMAG, ( (chanAA & 0xFFFF) | ( (chanBA & 0xFFFF)<<16))) |
---|
| 274 | #define warpphy_setChanEstMinMags(estmag) XIo_Out32(XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_RX_CHANEST_MINMAG, (estmag)) |
---|
[1546] | 275 | |
---|
[1712] | 276 | #define warpphy_setAFblanking(start, stop) XIo_Out32(XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_RX_AF_BLANKING, ( (start & 0xFFF) | ( (stop & 0xFFF) << 16))) |
---|
[1546] | 277 | |
---|
[1712] | 278 | #define warpphy_setTxNumSyms(numBR, numT) XIo_Out32(XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TX_OFDM_SYMCOUNTS, ( (numT & 0xF) | ( (numBR & 0x1F)<<8) ) ) |
---|
| 279 | #define warpphy_setRxNumSyms(numBR, numT) XIo_Out32(XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_RX_OFDM_SYMBOLCOUNTS, ( (numT & 0xF) | ( (numBR & 0x1F)<<16) ) ) |
---|
[1169] | 280 | |
---|
[1712] | 281 | #define warpphy_setPreCFOoptions(c) XIo_Out32(XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_RX_PRECFO_OPTIONS, c) |
---|
[1494] | 282 | #define warpphy_getPreCFO_pktBuf(bufInd) XIo_In32( (XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_PKTBUFFREQOFFSETS + (4*((bufInd)&0x1F))) ) |
---|
[1504] | 283 | #define warpphy_setPreCFO_pktBuf(bufInd, cfoVal) XIo_Out32( (XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_PKTBUFFREQOFFSETS + (4*((bufInd)&0x1F))), cfoVal) |
---|
| 284 | |
---|
[1494] | 285 | #define warpphy_getPreCFO_pkt_coarse() XIo_In32(XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_RX_COARSECFOEST) |
---|
| 286 | #define warpphy_getPreCFO_pkt_pilots() XIo_In32(XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_RX_PILOTCFOEST) |
---|
[1712] | 287 | #define warpphy_setPilotCFOCorrection(c) XIo_Out32(XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_RX_PRECFO_PILOTCALCCORRECTION, c) |
---|
[1494] | 288 | |
---|
[1712] | 289 | #define warpphy_setCoarseCFOCorrection(c) XIo_Out32(XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_RX_COARSECFO_CORRECTION, c) |
---|
[1522] | 290 | |
---|
[1169] | 291 | #define mimo_ofdmTx_setTxScaling(pre, pay) ofdm_txrx_mimo_WriteReg_Tx_Scaling(OFDM_BASEADDR, ((0xFFFF & pre) | (0xFFFF0000 & (pay<<16))) ) |
---|
| 292 | |
---|
[675] | 293 | #define mimo_ofdmTx_setControlBits(c) ofdm_txrx_mimo_WriteReg_Tx_ControlBits(OFDM_BASEADDR, c) |
---|
| 294 | #define mimo_ofdmTx_getOptions() ofdm_txrx_mimo_ReadReg_Tx_ControlBits(OFDM_BASEADDR) |
---|
[1541] | 295 | |
---|
[1712] | 296 | #define mimo_ofdmTx_setDelays(extTxEn, extraAutoTx, txStartOut) XIo_Out32(XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TX_DELAYS, ( \ |
---|
[1541] | 297 | ( (extTxEn&0xFF) << TX_EXTAUTO_TXEN_DLY_LSB) | \ |
---|
| 298 | ( (extraAutoTx&0xF) << TX_AUTOTX_EXTRA_DLY_LSB) | \ |
---|
| 299 | ( (txStartOut&0xFF) << TX_START_D_OUTPUTS_DLY_LSB))) |
---|
| 300 | |
---|
[941] | 301 | #define mimo_ofdmTxRx_setFFTScaling(c) ofdm_txrx_mimo_WriteReg_TxRx_FFT_Scaling(OFDM_BASEADDR, c) |
---|
| 302 | #define mimo_ofdmRx_setFFTWindowOffset(c) ofdm_txrx_mimo_WriteReg_Rx_PktDet_Delay(OFDM_BASEADDR, (ofdm_txrx_mimo_ReadReg_Rx_PktDet_Delay(OFDM_BASEADDR) & 0xFFFFE07F) | ((c&0x3F)<<7)) |
---|
[1245] | 303 | |
---|
[941] | 304 | #define mimo_ofdmRx_setPktDetDly(c) ofdm_txrx_mimo_WriteReg_Rx_PktDet_Delay(OFDM_BASEADDR, (ofdm_txrx_mimo_ReadReg_Rx_PktDet_Delay(OFDM_BASEADDR) & 0xFFFFFF80)| (c&0x7F)) |
---|
[1245] | 305 | #define mimo_ofdmRx_setCFOCalcDly(c) ofdm_txrx_mimo_WriteReg_Rx_PktDet_Delay(OFDM_BASEADDR, (ofdm_txrx_mimo_ReadReg_Rx_PktDet_Delay(OFDM_BASEADDR) & ~0x001F0000) | ( (c&0x1F)<<16 )) |
---|
[1260] | 306 | #define mimo_ofdmRx_setCFOMaxDiff(c) ofdm_txrx_mimo_WriteReg_Rx_PktDet_Delay(OFDM_BASEADDR, (ofdm_txrx_mimo_ReadReg_Rx_PktDet_Delay(OFDM_BASEADDR) & ~0xFF000000) | ( (c&0xFF)<<24 )) |
---|
[1245] | 307 | |
---|
[941] | 308 | #define mimo_ofdmTx_setPktDoneReset(c) ofdm_txrx_mimo_WriteReg_Tx_Start_Reset_Control(OFDM_BASEADDR, (c<<2)&0x4) |
---|
[1282] | 309 | #define mimo_ofdmRx_getPayloadStatus() (PHYRXSTATUS_PAYLOAD & ofdm_txrx_mimo_ReadReg_Rx_packet_done(OFDM_BASEADDR)) |
---|
| 310 | #define mimo_ofdmRx_getHeaderStatus() ((PHYRXSTATUS_HEADER & ofdm_txrx_mimo_ReadReg_Rx_packet_done(OFDM_BASEADDR))) |
---|
| 311 | #define mimo_ofdmRx_getPktStatus() (((PHYRXSTATUS_PAYLOAD | PHYRXSTATUS_HEADER) & ofdm_txrx_mimo_ReadReg_Rx_packet_done(OFDM_BASEADDR))) |
---|
[675] | 312 | |
---|
[1222] | 313 | #define mimo_ofdmRx_setAFTxScaling(c) ofdm_rx_mimo_WriteReg_Rx_AFScaling(0, c) |
---|
[1164] | 314 | |
---|
[1524] | 315 | #define mimo_ofdmRx_setPilotCalcParams(minMag) ofdm_rx_mimo_WriteReg_Rx_PilotCalcParams(0, (minMag & 0xFFF)) |
---|
[1279] | 316 | |
---|
[1164] | 317 | //Timer Defines |
---|
| 318 | #define TIMER_A 0 |
---|
| 319 | #define TIMER_B 1 |
---|
| 320 | #define TIMER_C 2 |
---|
| 321 | #define TIMER_D 3 |
---|
| 322 | |
---|
| 323 | #define TIMER_A_DONE 0x1 |
---|
| 324 | #define TIMER_B_DONE 0x100 |
---|
| 325 | #define TIMER_C_DONE 0x10000 |
---|
| 326 | #define TIMER_D_DONE 0x1000000 |
---|
| 327 | |
---|
| 328 | #define TIMER_A_ACTIVE 0x2 |
---|
| 329 | #define TIMER_B_ACTIVE 0x200 |
---|
| 330 | #define TIMER_C_ACTIVE 0x20000 |
---|
| 331 | #define TIMER_D_ACTIVE 0x2000000 |
---|
| 332 | |
---|
| 333 | #define TIMER_A_PAUSED 0x4 |
---|
| 334 | #define TIMER_B_PAUSED 0x400 |
---|
| 335 | #define TIMER_C_PAUSED 0x40000 |
---|
| 336 | #define TIMER_D_PAUSED 0x4000000 |
---|
| 337 | |
---|
[1224] | 338 | //Byte indicies of various header fields (used for the autoRepsonse setup) |
---|
[1232] | 339 | #define PKTHEADER_INDX_SRCADDR 4 |
---|
[1224] | 340 | #define PKTHEADER_INDX_DSTADDR 6 |
---|
[1232] | 341 | #define PKTHEADER_INDX_RLYADDR 8 |
---|
[1224] | 342 | #define PKTHEADER_INDX_TYPE 10 |
---|
[1632] | 343 | #define PKTHEADER_INDX_RETX 11 |
---|
| 344 | #define PKTHEADER_INDX_SEQ 12 |
---|
| 345 | #define PKTHEADER_INDX_PREVCHECK 20 |
---|
| 346 | #define PKTHEADER_INDX_CHECK 22 |
---|
[1224] | 347 | |
---|
[1214] | 348 | ///Structure contains PHY header |
---|
| 349 | typedef struct { |
---|
| 350 | ///Full-rate modulation order |
---|
[1632] | 351 | unsigned char fullRate; //0 |
---|
[1214] | 352 | ///Rate for convolutional error correction code |
---|
[1632] | 353 | unsigned char codeRate; //1 |
---|
[1214] | 354 | ///The length of the packet (in bytes). NOTE: This should only specify the length of the payload to-be-sent. |
---|
[1632] | 355 | unsigned short int length; //2 |
---|
[1214] | 356 | ///Source MAC address. |
---|
[1632] | 357 | unsigned short int srcAddr; //4 |
---|
[1214] | 358 | ///Destination MAC address. |
---|
[1632] | 359 | unsigned short int destAddr; //6 |
---|
[1214] | 360 | ///Relay MAC address. |
---|
[1632] | 361 | unsigned short int relAddr; //8 |
---|
[1214] | 362 | ///Type of packet this particular Macframe corresponds to (e.g. DATA, ACKPACKET, etc.) |
---|
[1632] | 363 | unsigned char pktType; //10 |
---|
[1214] | 364 | ///Reserved byte |
---|
[1632] | 365 | unsigned char remainingTx; //11 |
---|
[1491] | 366 | ///Sequence number of this packet |
---|
[1632] | 367 | unsigned int seqNum; //12-15 |
---|
[1214] | 368 | ///Reserved byte |
---|
[1650] | 369 | unsigned short int timeLeft; |
---|
| 370 | unsigned char cogParam; |
---|
| 371 | unsigned char reserved0; |
---|
| 372 | unsigned char reserved1; //20 |
---|
| 373 | unsigned char reserved2; //21 |
---|
[1633] | 374 | |
---|
[1214] | 375 | ///Checksum of the packet will be automatically inserted by PHY |
---|
[1632] | 376 | unsigned short int checksum; //22 |
---|
| 377 | } phyHeader; |
---|
[719] | 378 | |
---|
[941] | 379 | //Prototypes for functions in warpphy.c |
---|
[675] | 380 | int warpphy_init(); |
---|
[720] | 381 | void warpphy_clearRxInterrupts(); |
---|
[828] | 382 | void warpphy_clearTxInterrupts(); |
---|
[827] | 383 | int warpphy_pktTx(unsigned int block); |
---|
[675] | 384 | void mimo_ofdmRx_enable(); |
---|
| 385 | void mimo_ofdmRx_disable(); |
---|
| 386 | void mimo_ofdmRx_setOptions(unsigned int someOptions, unsigned int intType); |
---|
| 387 | unsigned int mimo_ofdmRx_getOptions(); |
---|
[720] | 388 | void mimo_ofdmTx_disable(); |
---|
[675] | 389 | void mimo_ofdmTx_enable(); |
---|
| 390 | void warpphy_setBuffs(unsigned char txBufOffset, unsigned char rxBufOffset); |
---|
[1169] | 391 | void warpphy_setNumTrainingSyms(unsigned int numTraining); |
---|
[675] | 392 | void warpphy_setPktDlyPlus(); |
---|
| 393 | void warpphy_setPktDlyMinus(); |
---|
| 394 | void warpphy_set_PN_KPlus(unsigned int increment); |
---|
| 395 | void warpphy_set_PN_KMinus(unsigned int decrement); |
---|
[733] | 396 | void warpphy_set_CFODebugOutput(unsigned char outputSel); |
---|
[828] | 397 | void print_CFO_constants(); |
---|
[675] | 398 | void warpphy_set_B_KPPlus(unsigned int increment); |
---|
| 399 | void warpphy_set_B_KPMinus(unsigned int decrement); |
---|
| 400 | void warpphy_set_B_KIPlus(unsigned int increment); |
---|
| 401 | void warpphy_set_B_KIMinus(unsigned int decrement); |
---|
| 402 | void warpphy_set_FFTOffset_Plus(); |
---|
| 403 | void warpphy_set_FFTOffset_Minus(); |
---|
| 404 | void warpphy_setNoiseTargetPlus(); |
---|
| 405 | void warpphy_setNoiseTargetMinus(); |
---|
| 406 | void warpphy_setTargetPlus(); |
---|
| 407 | void warpphy_setTargetMinus(); |
---|
[1208] | 408 | void warpphy_set_modulation(unsigned char baseRate, unsigned char TxAntAFullRate, unsigned char TxAntBFullRate, unsigned char RxAntAFullRate, unsigned char RxAntBFullRate); |
---|
[1169] | 409 | int warpphy_setChannel(unsigned char band, unsigned int chan); |
---|
[903] | 410 | int warpphy_applyTxDCOCorrection(unsigned int radioSelection); |
---|
| 411 | void warpphy_clearRxHeaderInterrupt(); |
---|
| 412 | void warpphy_setPktDetPlus(unsigned int offset); |
---|
| 413 | void warpphy_setPktDetMinus(unsigned int offset); |
---|
| 414 | void warpphy_setCSMAPlus(unsigned int offset); |
---|
[856] | 415 | void warpphy_setCSMAMinus(unsigned int offset); |
---|
[903] | 416 | int warpphy_isFree(); |
---|
[1164] | 417 | char warpphy_pollRxStatus(unsigned char type); |
---|
[941] | 418 | void ofdm_AGC_SetTarget(unsigned int target); |
---|
[1594] | 419 | inline void ofdm_AGC_SetDCO(unsigned int AGCstate); |
---|
[941] | 420 | void ofdm_AGC_Reset(); |
---|
| 421 | void ofdm_AGC_MasterReset(); |
---|
| 422 | void ofdm_AGC_Initialize(int noise_estimate); |
---|
| 423 | void ofdm_AGC_setNoiseEstimate(int noise_estimate); |
---|
| 424 | unsigned int ofdm_AGC_GetGains(void); |
---|
| 425 | void ofdm_timer_start(); |
---|
| 426 | void ofdm_timer_stop(); |
---|
| 427 | void ofdm_timer_clearInterrupt(); |
---|
[1103] | 428 | int warpphy_setTxPower(unsigned char txPwr); |
---|
[1208] | 429 | int warpphy_setAntennaMode(unsigned int txMode, unsigned int rxMode); |
---|
[1316] | 430 | void warpphy_incrementTxScaling(int incr_preamble, int incr_payload); |
---|
[1245] | 431 | void warpphy_setLongCorrThresh(unsigned short thresh); |
---|
[1616] | 432 | void warpphy_setEnergyDetThresh(unsigned short thresh); |
---|
[1260] | 433 | void warpphy_clearAutoResponseFlag(unsigned char flagID); |
---|
[1264] | 434 | void warpphy_setAntBPreambleShift(unsigned char shift); |
---|
[1375] | 435 | void warpphy_AFrecordEnable(unsigned char recordEn); |
---|
[1537] | 436 | void warpphy_setNumBaseRateSyms(unsigned int numSyms); |
---|
[1633] | 437 | void warpphy_setAutoCorrDetParams(unsigned short corrThresh, unsigned short energyThresh); |
---|
[1661] | 438 | void warpphy_setCarrierSenseThresh(unsigned short thresh); |
---|
[1712] | 439 | void warpphy_clearRxPktStatus(); |
---|
| 440 | int warpphy_waitForTx(); |
---|
| 441 | int warpphy_applyTxDCOCalibration(); |
---|
[941] | 442 | |
---|
[1177] | 443 | //warp_timer function prototypes |
---|
[1049] | 444 | void warp_timer_start(unsigned char timer); |
---|
[1177] | 445 | void warp_timer_pause(unsigned char timer); |
---|
[1049] | 446 | void warp_timer_resume(unsigned char timer); |
---|
| 447 | void warp_timer_setMode(unsigned char timer, unsigned char mode); |
---|
[1177] | 448 | void warp_timer_resetDone(unsigned char timer); |
---|
| 449 | void warp_timer_resetAllDoneStatus(); |
---|
| 450 | void warp_timer_setTimer(unsigned char timer, unsigned int slotTime, unsigned int slotCount); |
---|
| 451 | void warp_timer_init(); |
---|
[1049] | 452 | unsigned char warp_timer_getStatus(unsigned char timer); |
---|
[1177] | 453 | unsigned char warp_timer_isDone(unsigned char timer); |
---|
[1049] | 454 | unsigned char warp_timer_isActive(unsigned char timer); |
---|
| 455 | unsigned char warp_timer_isPaused(unsigned char timer); |
---|
| 456 | unsigned int warp_timer_getStatuses(); |
---|
[1177] | 457 | unsigned char warp_timer_getDoneStatus(); |
---|
[1226] | 458 | void warpphy_saveAFpkt(unsigned char doSave); |
---|
[1232] | 459 | int warpphy_setTxAntennaSwap(unsigned int txMode); |
---|
[1477] | 460 | unsigned int warpphy_returnGainsDB(); |
---|
[1049] | 461 | |
---|
[1232] | 462 | //Register access macros |
---|
[1712] | 463 | #define mimo_ofdmTxRx_getAction0() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION0)) |
---|
| 464 | #define mimo_ofdmTxRx_getAction1() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION1)) |
---|
| 465 | #define mimo_ofdmTxRx_getAction2() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION2)) |
---|
| 466 | #define mimo_ofdmTxRx_getAction3() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION3)) |
---|
| 467 | #define mimo_ofdmTxRx_getAction4() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION4)) |
---|
| 468 | #define mimo_ofdmTxRx_getAction5() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION5)) |
---|
| 469 | #define mimo_ofdmTxRx_getAction6() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION6)) |
---|
| 470 | #define mimo_ofdmTxRx_getAction7() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION7)) |
---|
[1203] | 471 | |
---|
[1712] | 472 | #define mimo_ofdmTxRx_setAction0(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION0, d)) |
---|
| 473 | #define mimo_ofdmTxRx_setAction1(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION1, d)) |
---|
| 474 | #define mimo_ofdmTxRx_setAction2(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION2, d)) |
---|
| 475 | #define mimo_ofdmTxRx_setAction3(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION3, d)) |
---|
| 476 | #define mimo_ofdmTxRx_setAction4(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION4, d)) |
---|
| 477 | #define mimo_ofdmTxRx_setAction5(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION5, d)) |
---|
| 478 | #define mimo_ofdmTxRx_setAction6(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION6, d)) |
---|
| 479 | #define mimo_ofdmTxRx_setAction7(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_ACTION7, d)) |
---|
[1203] | 480 | |
---|
[1712] | 481 | #define mimo_ofdmTxRx_getMatch0() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH0)) |
---|
| 482 | #define mimo_ofdmTxRx_getMatch1() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH1)) |
---|
| 483 | #define mimo_ofdmTxRx_getMatch2() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH2)) |
---|
| 484 | #define mimo_ofdmTxRx_getMatch3() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH3)) |
---|
| 485 | #define mimo_ofdmTxRx_getMatch4() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH4)) |
---|
| 486 | #define mimo_ofdmTxRx_getMatch5() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH5)) |
---|
| 487 | #define mimo_ofdmTxRx_getMatch6() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH6)) |
---|
| 488 | #define mimo_ofdmTxRx_getMatch7() (XIo_In32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH7)) |
---|
[1203] | 489 | |
---|
[1712] | 490 | #define mimo_ofdmTxRx_setMatch0(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH0, d)) |
---|
| 491 | #define mimo_ofdmTxRx_setMatch1(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH1, d)) |
---|
| 492 | #define mimo_ofdmTxRx_setMatch2(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH2, d)) |
---|
| 493 | #define mimo_ofdmTxRx_setMatch3(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH3, d)) |
---|
| 494 | #define mimo_ofdmTxRx_setMatch4(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH4, d)) |
---|
| 495 | #define mimo_ofdmTxRx_setMatch5(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH5, d)) |
---|
| 496 | #define mimo_ofdmTxRx_setMatch6(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH6, d)) |
---|
| 497 | #define mimo_ofdmTxRx_setMatch7(d) (XIo_Out32((unsigned int)XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXRX_AUTOREPLY_MATCH7, d)) |
---|
[1203] | 498 | |
---|
[1232] | 499 | //Match definition fields for match units 0-5 (comparison of incoming header with static value) |
---|
[1203] | 500 | #define PHY_AUTORESPONSE_MATCH_BYTEADDR_MASK 0x0000001F |
---|
| 501 | #define PHY_AUTORESPONSE_MATCH_BYTEADDR_OFFSET 0 |
---|
| 502 | |
---|
| 503 | #define PHY_AUTORESPONSE_MATCH_LENGTH_MASK 0x00000060 |
---|
| 504 | #define PHY_AUTORESPONSE_MATCH_LENGTH_OFFSET 5 |
---|
| 505 | |
---|
| 506 | #define PHY_AUTORESPONSE_MATCH_VALUE_MASK 0xFFFFFF00 |
---|
| 507 | #define PHY_AUTORESPONSE_MATCH_VALUE_OFFSET 8 |
---|
| 508 | |
---|
| 509 | #define PHY_AUTORESPONSE_MATCH_VALUE_MAP(c) ((c<<PHY_AUTORESPONSE_MATCH_VALUE_OFFSET) & PHY_AUTORESPONSE_MATCH_VALUE_MASK) |
---|
| 510 | #define PHY_AUTORESPONSE_MATCH_LENGTH_MAP(c) ((c<<PHY_AUTORESPONSE_MATCH_LENGTH_OFFSET) & PHY_AUTORESPONSE_MATCH_LENGTH_MASK) |
---|
| 511 | #define PHY_AUTORESPONSE_MATCH_BYTEADDR_MAP(c) ((c<<PHY_AUTORESPONSE_MATCH_BYTEADDR_OFFSET) & PHY_AUTORESPONSE_MATCH_BYTEADDR_MASK) |
---|
| 512 | |
---|
| 513 | #define PHY_AUTORESPONSE_MATCH_CONFIG(addr, len, val) (PHY_AUTORESPONSE_MATCH_BYTEADDR_MAP(addr) | PHY_AUTORESPONSE_MATCH_LENGTH_MAP(len) | PHY_AUTORESPONSE_MATCH_VALUE_MAP(val)) |
---|
| 514 | |
---|
[1232] | 515 | //Match definition fields for match units 6-7 (comparison of incoming header with previously received header corresponding to saved waveform) |
---|
| 516 | #define PHY_AUTORESPONSE_MATCH_RXADDR0_OFFSET 0 |
---|
| 517 | #define PHY_AUTORESPONSE_MATCH_RXADDR0_MASK (0x0000001F<< PHY_AUTORESPONSE_MATCH_RXADDR0_OFFSET) |
---|
| 518 | #define PHY_AUTORESPONSE_MATCH_PREVADDR0_OFFSET 5 |
---|
| 519 | #define PHY_AUTORESPONSE_MATCH_PREVADDR0_MASK (0x0000001F<< PHY_AUTORESPONSE_MATCH_PREVADDR0_OFFSET) |
---|
| 520 | |
---|
| 521 | #define PHY_AUTORESPONSE_MATCH_RXADDR1_OFFSET 10 |
---|
| 522 | #define PHY_AUTORESPONSE_MATCH_RXADDR1_MASK (0x0000001F<< PHY_AUTORESPONSE_MATCH_RXADDR1_OFFSET) |
---|
| 523 | #define PHY_AUTORESPONSE_MATCH_PREVADDR1_OFFSET 15 |
---|
| 524 | #define PHY_AUTORESPONSE_MATCH_PREVADDR1_MASK (0x0000001F<< PHY_AUTORESPONSE_MATCH_PREVADDR1_OFFSET) |
---|
| 525 | #define PHY_AUTORESPONSE_MATCH_ADDR1_EN 0x40000000 |
---|
| 526 | |
---|
| 527 | #define PHY_AUTORESPONSE_MATCH_RXADDR2_OFFSET 20 |
---|
| 528 | #define PHY_AUTORESPONSE_MATCH_RXADDR2_MASK (0x0000001F<< PHY_AUTORESPONSE_MATCH_RXADDR2_OFFSET) |
---|
| 529 | #define PHY_AUTORESPONSE_MATCH_PREVADDR2_OFFSET 25 |
---|
| 530 | #define PHY_AUTORESPONSE_MATCH_PREVADDR2_MASK (0x0000001F<< PHY_AUTORESPONSE_MATCH_PREVADDR2_OFFSET) |
---|
| 531 | #define PHY_AUTORESPONSE_MATCH_ADDR2_EN 0x80000000 |
---|
| 532 | |
---|
| 533 | //Macro to help define header comparison match configuration registers |
---|
| 534 | #define PHY_AUTORESPONSE_MATCH_HDRCOMP_CONFIG(rxAddr0, prevAddr0, rxAddr1, prevAddr1, useAddr1, rxAddr2, prevAddr2, useAddr2) (\ |
---|
| 535 | ( (rxAddr0 << PHY_AUTORESPONSE_MATCH_RXADDR0_OFFSET) & PHY_AUTORESPONSE_MATCH_RXADDR0_MASK) | \ |
---|
| 536 | ( (rxAddr1 << PHY_AUTORESPONSE_MATCH_RXADDR1_OFFSET) & PHY_AUTORESPONSE_MATCH_RXADDR1_MASK) | \ |
---|
| 537 | ( (rxAddr2 << PHY_AUTORESPONSE_MATCH_RXADDR2_OFFSET) & PHY_AUTORESPONSE_MATCH_RXADDR2_MASK) | \ |
---|
| 538 | ( (prevAddr0 << PHY_AUTORESPONSE_MATCH_PREVADDR0_OFFSET) & PHY_AUTORESPONSE_MATCH_PREVADDR0_MASK) | \ |
---|
| 539 | ( (prevAddr1 << PHY_AUTORESPONSE_MATCH_PREVADDR1_OFFSET) & PHY_AUTORESPONSE_MATCH_PREVADDR1_MASK) | \ |
---|
| 540 | ( (prevAddr2 << PHY_AUTORESPONSE_MATCH_PREVADDR2_OFFSET) & PHY_AUTORESPONSE_MATCH_PREVADDR2_MASK) | \ |
---|
| 541 | ( useAddr1 ? PHY_AUTORESPONSE_MATCH_ADDR1_EN : 0) | \ |
---|
| 542 | ( useAddr2 ? PHY_AUTORESPONSE_MATCH_ADDR2_EN : 0) ) |
---|
| 543 | |
---|
| 544 | |
---|
[1203] | 545 | //Action fields |
---|
| 546 | #define PHY_AUTORESPONSE_ACT_ID_MASK 0x00FC0000 |
---|
| 547 | #define PHY_AUTORESPONSE_ACT_ID_OFFSET 18 |
---|
| 548 | |
---|
| 549 | #define PHY_AUTORESPONSE_ACT_PARAM_MASK 0xFF000000 |
---|
| 550 | #define PHY_AUTORESPONSE_ACT_PARAM_OFFSET 24 |
---|
| 551 | #define PHY_AUTORESPONSE_MAP_ACT_PARAM(c) ((c<<PHY_AUTORESPONSE_ACT_PARAM_OFFSET) & PHY_AUTORESPONSE_ACT_PARAM_MASK) |
---|
| 552 | |
---|
[1254] | 553 | #define PHY_AUTORESPONSE_ACT_TRANS_HDR 0x00010000 |
---|
| 554 | #define PHY_AUTORESPONSE_ACT_USE_PRECFO 0x00020000 |
---|
[1594] | 555 | #define PHY_AUTORESPONSE_ACT_RETX_CRC 0x00000200 |
---|
[1516] | 556 | #define PHY_AUTORESPONSE_ACT_SWAP_ANT 0x00000400 |
---|
[1254] | 557 | |
---|
| 558 | #define PHY_AUTORESPONSE_REQ_GOODHDR 0x000800 |
---|
| 559 | #define PHY_AUTORESPONSE_REQ_BADPKT 0x001000 |
---|
| 560 | #define PHY_AUTORESPONSE_REQ_GOODPKT 0x002000 |
---|
| 561 | |
---|
| 562 | #define PHY_AUTORESPONSE_REQ_FLAGA 0x004000 |
---|
| 563 | #define PHY_AUTORESPONSE_REQ_FLAGB 0x008000 |
---|
| 564 | |
---|
[1203] | 565 | #define PHY_AUTORESPONSE_REQ_MATCH0 0x001 |
---|
| 566 | #define PHY_AUTORESPONSE_REQ_MATCH1 0x002 |
---|
| 567 | #define PHY_AUTORESPONSE_REQ_MATCH2 0x004 |
---|
| 568 | #define PHY_AUTORESPONSE_REQ_MATCH3 0x008 |
---|
| 569 | #define PHY_AUTORESPONSE_REQ_MATCH4 0x010 |
---|
| 570 | #define PHY_AUTORESPONSE_REQ_MATCH5 0x020 |
---|
[1232] | 571 | #define PHY_AUTORESPONSE_REQ_MATCH6 0x040 |
---|
| 572 | #define PHY_AUTORESPONSE_REQ_MATCH7 0x080 |
---|
[1203] | 573 | |
---|
[1232] | 574 | #define PHY_AUTORESPONSE_REQ_MATCHALL (PHY_AUTORESPONSE_REQ_MATCH0 | PHY_AUTORESPONSE_REQ_MATCH1 | PHY_AUTORESPONSE_REQ_MATCH2 | PHY_AUTORESPONSE_REQ_MATCH3 | PHY_AUTORESPONSE_REQ_MATCH4 | PHY_AUTORESPONSE_REQ_MATCH5 | PHY_AUTORESPONSE_REQ_MATCH6 | PHY_AUTORESPONSE_REQ_MATCH7) |
---|
| 575 | #define PHY_AUTORESPONSE_REQ_ALLCONDS (PHY_AUTORESPONSE_REQ_MATCHALL | PHY_AUTORESPONSE_REQ_FLAGA | PHY_AUTORESPONSE_REQ_FLAGB | PHY_AUTORESPONSE_REQ_GOODHDR | PHY_AUTORESPONSE_REQ_BADPKT | PHY_AUTORESPONSE_REQ_GOODPKT) |
---|
| 576 | |
---|
[1203] | 577 | //ActionIDs |
---|
[1232] | 578 | #define PHY_AUTORESPONSE_ACTID_DISABLED ((00<<PHY_AUTORESPONSE_ACT_ID_OFFSET) & PHY_AUTORESPONSE_ACT_ID_MASK) |
---|
| 579 | #define PHY_AUTORESPONSE_ACTID_SETFLAGA ((62<<PHY_AUTORESPONSE_ACT_ID_OFFSET) & PHY_AUTORESPONSE_ACT_ID_MASK) |
---|
| 580 | #define PHY_AUTORESPONSE_ACTID_SETFLAGB ((61<<PHY_AUTORESPONSE_ACT_ID_OFFSET) & PHY_AUTORESPONSE_ACT_ID_MASK) |
---|
[1203] | 581 | #define PHY_AUTORESPONSE_ACTID_TXPKTBUF(c) (( c<<PHY_AUTORESPONSE_ACT_ID_OFFSET) & PHY_AUTORESPONSE_ACT_ID_MASK) |
---|
| 582 | |
---|
[1224] | 583 | #define PHY_HEADERTRANSLATE_SET(actionBuf, txByteNum, srcBuf, srcByteNum) \ |
---|
| 584 | XIo_Out32(\ |
---|
| 585 | (XPAR_OFDM_TXRX_MIMO_PLBW_0_MEMMAP_TXHEADERTRANSLATE + ((actionBuf)*32*sizeof(int)) + ((txByteNum)*sizeof(int))),\ |
---|
[1232] | 586 | (((srcBuf) & 0x1F)<<5) | ((srcByteNum) & 0x1F)) |
---|
[1224] | 587 | |
---|
[1232] | 588 | //Macro to help construct autoResponse Tx actions |
---|
[1516] | 589 | #define PHY_AUTORESPONSE_TXACTION_CONFIG(pktBuf, actionOptions, delay, conditions) (\ |
---|
[1232] | 590 | (PHY_AUTORESPONSE_ACTID_TXPKTBUF(pktBuf) ) | \ |
---|
[1516] | 591 | (actionOptions & (PHY_AUTORESPONSE_ACT_SWAP_ANT | PHY_AUTORESPONSE_ACT_TRANS_HDR | PHY_AUTORESPONSE_ACT_USE_PRECFO)) | \ |
---|
[1232] | 592 | (PHY_AUTORESPONSE_MAP_ACT_PARAM(delay) ) | \ |
---|
| 593 | (conditions & (PHY_AUTORESPONSE_REQ_ALLCONDS))) |
---|
[1224] | 594 | |
---|
[1232] | 595 | //Macro to help construct autoResponse action for setting Flag A |
---|
| 596 | #define PHY_AUTORESPONSE_ACTION_SETFLAGA_CONFIG(conditions) (PHY_AUTORESPONSE_ACTID_SETFLAGA | (conditions & (PHY_AUTORESPONSE_REQ_ALLCONDS))) |
---|
[1203] | 597 | |
---|
[1232] | 598 | //Macro to help construct autoResponse action for setting Flag B |
---|
| 599 | #define PHY_AUTORESPONSE_ACTION_SETFLAGB_CONFIG(conditions) (PHY_AUTORESPONSE_ACTID_SETFLAGB | (conditions & (PHY_AUTORESPONSE_REQ_ALLCONDS))) |
---|
[1203] | 600 | |
---|
[1260] | 601 | //Flag IDs for user functions |
---|
| 602 | #define AUTORESP_FLAGID_A 1 |
---|
| 603 | #define AUTORESP_FLAGID_B 2 |
---|
| 604 | |
---|
[869] | 605 | #endif |
---|