| 4 | |
| 5 | == 1.7 Releases == |
| 6 | '''Download Latest: [https://warpproject.org/dl/refdes/802.11/Mango_802.11_RefDes_v1.7.0.zip Mango_802.11_RefDes_v1.7.0.zip]''' |
| 7 | |
| 8 | Release Details: |
| 9 | ||= Hardware =||= Release =||= Date Posted =||= SVN Rev. =||= ISE Ver. =||= Arch =|| |
| 10 | || WARP v3 || [https://warpproject.org/dl/refdes/802.11/Mango_802.11_RefDes_v1.7.0.zip 1.7.0] || 16-Jun-2017 || [browser:ReferenceDesigns/w3_802.11?rev=6110 6110] || 14.4 || Dual MB/AXI || |
| 11 | |
| 12 | |
| 13 | ---- |
| 14 | '''Changes in v1.7.0:''' |
| 15 | |
| 16 | Release v1.7 of the 802.11 Reference Design reflects months of "under the hood" improvements to the C code. These improvements include many new features (described below). Equally important, this work lays the foundation for many new extensions that are planned for the near future. |
| 17 | |
| 18 | '''Code Organization:'''[[BR]] |
| 19 | The v1.7 code base has been reorganized to better isolate platform-agnostic ({{{framework}}}) and platform-dependent ({{{platform}}}) code. The code base now consists of: |
| 20 | * MAC Frameworks - platform-agnostic code: |
| 21 | * {{{wlan_mac_high_framework}}}: code common to all MAC applications in CPU High, includes Tx queues, BSS network state maintenance, associated station tracking, and wlan_exp frameworks |
| 22 | * {{{wlan_mac_common_framework}}}: code common to MAC applications in both CPUs, including inter-processor communication via the mailbox/mutex and Tx/Rx packet buffer state maintenance |
| 23 | * {{{wlan_mac_low_framework}}}: code common to MAC applications in CPU Low, including MAC/PHY hardware control |
| 24 | * WARP v3 Platform Code: |
| 25 | * {{{wlan_w3_high}}}: peripheral interface support for CPU High applications, including ETH A and B, DRAM, and UART |
| 26 | * {{{wlan_w3_common}}}: peripheral interface support shared by applications in both CPUs, including user I/O and MAC Time |
| 27 | * {{{wlan_w3_low}}}: peripheral interface support for CPU Low applications, including MAC/PHY register maps, EEPROM, and RF interfaces |
| 28 | * MAC Applications: |
| 29 | * {{{wlan_mac_high_ap}}}, {{{wlan_mac_high_sta}}}, {{{wlan_mac_high_ibss}}}: AP, STA and IBSS applications for CPU High |
| 30 | * {{{wlan_mac_low_dcf}}} and {{{wlan_mac_low_nomac}}}: DCF and NoMAC applications for CPU Low |
| 31 | |
| 32 | A CPU High application must use the high and common framework and platform code. A CPU Low application must use the low and common framework and platform code. |
| 33 | |
| 34 | The SDK Workspace in the reference design archive reflects this new organization and includes references to all required platform/framework code for each of the MAC application projects. |
| 35 | |
| 36 | '''Other high level code improvements:'''[[BR]] |
| 37 | * Removed (nearly) all cases of header files including other headers, greatly simplifying include hierarchy and reducing chances of unintentional and circular includes |
| 38 | * Removed any library dependencies in the BSPs |
| 39 | * Migrated {{{wlan_exp_ip_udp}}} library into MAC High Framework source; library no longer required via BSP |
| 40 | * Deprecated {{{WARP_HW_VER}}} library |
| 41 | * Moved linker scripts from application source folders to high/low platform source folders; applications for same CPU now share a single linker script. |
| 42 | * Removed dead code throughout design |
| 43 | * Adopted tagged struct typedefs and forward declarations of struct types throughout to reduce complexity of include hierarchies |
| 44 | * Simplified struct type definitions for almost-identical structs between MAC framework and wlan_exp |
| 45 | |
| 46 | '''Improvements to {{{station_info}}} framework:'''[[BR]] |
| 47 | The MAC High Framework uses a data structure called {{{station_info_t}}} to track information about devices in the wireless network. The {{{station_info}}} structure has been greatly improved in v1.7. |
| 48 | |
| 49 | The framework now maintains a flat list of {{{station_info}}} instances, with one {{{station_info}}} for every MAC address from which the nodes receives a packet or to which it transmits a packet. This list of {{{station_info}}} structs includes all associated stations and all devices from which the nodes "overhears" receptions. The AP uses a subset of the {{{station_info}}} list as its {{{member_list}}}, reflecting which stations are members of the AP's BSS. The full {{{station_info}}} list (including the Tx/Rx counts for each device) can be retrieved with the wlan_exp method {{{node.get_station_info_list()}}}. |
| 50 | |
| 51 | Other {{{station_info}}} changes: |
| 52 | * Added creation of {{{station_info}}} entries for multicast MAC addresses. As a result wlan_exp can now observe how many packets have been transmitted to the broadcast address (not possible in previous releases). |
| 53 | * Added {{{num_queued_packets}}} field to {{{station_info}}} struct to assist MAC framework and applications in tracking which {{{station_info}}} entries are safe to remove when the list gets too long. |
| 54 | * Moved maintenance of default Tx parameters (power, rate, PHY mode, antenna selection) to the MAC framework. The MAC application can modify and re-apply the framework's default Tx params for each combination of (unicast/multicast) and (data/management). The framework uses the default Tx param structs when creating new {{{station_info}}} entries. The MAC application can also modify the Tx params for each {{{station_info}}} independently. These modifications will be preserved even if the device represented by a {{{station_info}}} changes association state. For example, the framework will remember MCS selection for a node that associates, de-associations, then re-associates. Per-station Tx params can be manipulated by MAC C code and from wlan_exp. |
| 55 | * Updated wlan_exp methods for manipulating default and per-station Tx params (listed below). The {{{device_list}}} argument selects which {{{station_info}}} entries to modify. The new {{{update_default_}}} flags inform C code whether to overwrite the framework's default Tx params. These arguments replace the old {{{curr_assoc}}} and {{{new_assoc}}} arguments in previous releases. |
| 56 | * {{{set_tx_power_data(power, device_list, update_default_unicast, update_default_multicast)}}} |
| 57 | * {{{set_tx_power_mgmt(power, device_list, update_default_unicast, update_default_multicast)}}} |
| 58 | |
| 59 | '''Other Code Changes''':[[BR]] |
| 60 | * Simplified the definition of entries in the Tx queues. Previous releases kept a full {{{tx_frame_info_t}}} in each queue entry, implying each queue entry was a full packet. As of v1.7 each queue entry is a logical payload which can be used to construct a packet at dequeue time, and the {{{tx_frame_info}}} for each packet is created in the Tx packet buffer at dequeue time. |
| 61 | * Extended the definition of the doubly-linked list entry ({{{dl_entry}}}) for the {{{station_info}}} list to include the station's MAC address in BRAM, greatly speeding up searches for a given MAC address in the list |
| 62 | * Redesigned the {{{InfoStruct}}} class in {{{info.py}}} to support hierarchical field sets shared by multiple structs |
| 63 | * Deprecated {{{bss_info_t}}}, formalized {{{network_info_t}}} vs {{{bss_config_t}}}. A {{{network_info}}} includes a {{{bss_config}}} plus other information learned about the network from wireless activity. The updated wlan_exp methods are: |
| 64 | * {{{n.get_bss_config()}}}: retrieves the BSS configuration of the node |
| 65 | * {{{n.get_network_info()}}}: retrieves information about the node's current wireless network, including its BSS configuration |
| 66 | * {{{n.get_network_info_list()}}}: retrieves information about all wireless networks the node has observed |
| 67 | * {{{n.get_bss_info()}}}: Deprecated - use methods above instead |
| 68 | * Removed unnecessary callback for handling mailbox IPC receptions in High Framework |
| 69 | * Improved clarity of AP's UART prints when stations change association state |
| 70 | * Moved all updates of user IO outputs (LEDs, hex displays) to central {{{wlan_platform_userio_disp_status()}}} functions in high/low platform code |
| 71 | * Enabled wrapping of the wlan_exp event log by default; wrapping can still be enabled/disabled from C or Python |
| 72 | * Merged {{{RX_OFDM}}} log entry fields {{{u8 bb_gain}}} and {{{u8 rf_gain}}} into single {{{u8 rx_gain_index}}} field ({{{rf_gain}}} is 2 MSB, {{{bb_gain}}} is 5 LSB) |
| 73 | |
| 74 | '''Linker Script Change:'''[[BR]] |
| 75 | The linker script for CPU High has been updated to use a single 256kB memory area for the ILMB/DLMB. In hardware this 256kB area is implemented as two 128kB blocks. Due to an unfortunate limitation of the XPS->SDK flow it is now necessary to modify the {{{system.bmm}}} file written by XPS before using the hardware design in the SDK. |
| 76 | |
| 77 | The {{{system.bmm}}} file in the reference design archive's SDK workspace is already modified and ready to use. If you modify the hardware design in XPS and re-export to the SDK you must manually edit {{{system.bmm}}}. Refer to the [http://warpproject.org/trac/wiki/802.11/Usage/SDK#UpdatingSDKHardwareBMMFile user guide] for details. |
| 78 | |
| 79 | '''Hardware Design Changes'''[[BR]] |
| 80 | * CFO estimate value is now explicitly reset between Rx events, so the CFO correction DDS always starts at phase=0 for each Rx. This change won't affect performance but does improve reproducibility of hardware vs simulation Rx for a given waveform. |
| 81 | * Added pipeline registers in Tx PHY packet buffer -> encoder logic, breaking up long combinational path |
| 82 | |
| 83 | '''Bug fixes:'''[[BR]] |
| 84 | * Explicitly asserted {{{XIN_SVC_ALL_ISRS_OPTION}}} option for interrupt controller to ensure all asserted interrupt sources are serviced per processor interrupt, not just the highest-priority one (never actually a problem for WARP v3 design given the interrupt priorities and assertion rates in hardware) |
| 85 | * Rearranged post-Rx/post-Tx processing in DCF to achieve zero-slot Tx following ACK reception, now with ~700nsec slack |
| 86 | * Seeded PNRG in CPU High with node serial number, avoids race when two IBSS nodes boot simultaneously, scan for existing BSS for "random" duration before creating new BSS |
| 87 | * Fixed bug in {{{write_phy_preamble()}}} that calculated {{{L-SIG.LENGTH}}} value too large by 3 for some rates/lengths of HTMF transmissions |
| 88 | * Fixed {{{latest_rx_timestamp}}} and {{{latest_txrx_timestamp}}} to use same System Time value when updating both timestamps from same event |
| 89 | * Fixed bug when DTIM Multicast Buffering was enabled or disabled while CPU Low was actively transmitting multicast frame. Now CPU Low properly handles reorganization of its Tx lists independent of current Tx activity. |
| 90 | * Fixed potential deadlock where CPU High might stop dequeuing new Tx packets after CPU Low reboots (such as when re-loading the CPU Low application from the debugger) |
| 91 | * Fixed potential bogus value for {{{beacon_txrx_config.dtim_period}}} if wlan_exp configures BSS to transmit beacons but doesn't explicitly set DTIM period |
| 92 | * Fixed missing enforcement of {{{MAX_NUM_ASSOC}}} limit on number of associations at AP; now properly applies to associations created from wlan_exp or via wireless association handshake |
| 93 | * Fixed bug in accessing TIM bit fields when length of the network's SSID string changes |
| 94 | * Fixed a few cases of checking for {{{NULL}}} value after accessing pointer variable |
| 95 | * Fixed a few unlikely-but-possible {{{NULL}}} pointer dereferences |
| 96 | * Fixed wlan_exp to permit setting DCF minimum contention window exponent to 0 (was previously limited to 1 for no good reason) |
| 97 | * Fixed missing {{{poll_tx_queues()}}} following reception of a reception from a previously-dozing STA. Should improve performance when communicating with power-savings clients in a lightly-loaded network. |
| 98 | |
| 99 | ---- |