• Inaky Perez-Gonzalez's avatar
    wimax/i2400m: implement RX reorder support · c747583d
    Inaky Perez-Gonzalez authored
    Allow the device to give the driver RX data with reorder information.
    
    When that is done, the device will indicate the driver if a packet has
    to be held in a (sorted) queue. It will also tell the driver when held
    packets have to be released to the OS.
    
    This is done to improve the WiMAX-protocol level retransmission
    support when missing frames are detected.
    
    The code docs provide details about the implementation.
    
    In general, this just hooks into the RX path in rx.c; if a packet with
    the reorder bit in the RX header is detected, the reorder information
    in the header is extracted and one of the four main reorder operations
    are executed. In one case (queue) no packet will be delivered to the
    networking stack, just queued, whereas in the others (reset, update_ws
    and queue_update_ws), queued packet might be delivered depending on
    the window start for the specific queue.
    
    The modifications to files other than rx.c are:
    
    - control.c: during device initialization, enable reordering support
      if the rx_reorder_disabled module parameter is not enabled
    
    - driver.c: expose a rx_reorder_disable module parameter and call
      i2400m_rx_setup/release() to initialize/shutdown RX reorder
      support.
    
    - i2400m.h: introduce members in 'struct i2400m' needed for
      implementing reorder support.
    
    - linux/i2400m.h: introduce TLVs, commands and constant definitions
      related to RX reorder
    
    Last but not least, the rx reorder code includes an small circular log
    where the last N reorder operations are recorded to be displayed in
    case of inconsistency. Otherwise diagnosing issues would be almost
    impossible.
    Signed-off-by: default avatarInaky Perez-Gonzalez <inaky@linux.intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c747583d
control.c 41.3 KB