qcacmn: Skip setting BA window size to 2 for NON BA case
As per the REO logic, if a packet is received with SN <= current SN, then it will be treated as a 2K jump error or OOR and the packet in consideration will be dropped by REO. For NON-BA case this case will be treated as 2k-jump error. For the NON-BA case, the packets with SN <= current SN should not be dropped. The current REO configuration, sets the BA window size to 2 for NON-BA case, which in turn enables 2k-jump detection. For configuring the REO to not drop packets with previous SN, we need not set the BA window size to 2, thereby disabling the 2k-jump check for NON-BA case. A. SN = 1, 2, 3, 4, 2096, … (good case, as long as the SN is within 2K range) B. SN = 3, 5, 2 (3, 5 are good packet, 2 is bad packet and will be dropped to ‘2K error’ with error code = 2K error.) (note that this is for non-BA session, for BA session, we detect SN as either 2K error or OOR error based on SN and window size). After this change, we will treat this as a good packet. C. SN = 1, 1, 1, 1, with duplicate detect enabled – these are duplicate packets and will be dropped to ‘DD queue’ with error code = DD (No change) D. SN = 1, 1, 1, 1, with duplicate detect disabled – packets will be dropped to ‘2K error’ with error code = 2K error. After this change, we will treat this as a good packet. Skip the setting of BA window size to 2 for aggregated packets in NON BA case. CRs-Fixed: 2580605 Change-Id: I19d5eced7c8730a9c3820fd6fc69923d2a98263a
This commit is contained in:

committed by
nshrivas

orang tua
8fd74a017d
melakukan
30294e2c79
@@ -63,6 +63,23 @@ static inline void hal_uniform_desc_hdr_setup(uint32_t *desc, uint32_t owner,
|
||||
#endif
|
||||
#define HAL_NON_QOS_TID 16
|
||||
|
||||
#ifdef HAL_DISABLE_NON_BA_2K_JUMP_ERROR
|
||||
static inline uint32_t hal_update_non_ba_win_size(int tid,
|
||||
uint32_t ba_window_size)
|
||||
{
|
||||
return ba_window_size;
|
||||
}
|
||||
#else
|
||||
static inline uint32_t hal_update_non_ba_win_size(int tid,
|
||||
uint32_t ba_window_size)
|
||||
{
|
||||
if ((ba_window_size == 1) && (tid != HAL_NON_QOS_TID))
|
||||
ba_window_size++;
|
||||
|
||||
return ba_window_size;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* hal_reo_qdesc_setup - Setup HW REO queue descriptor
|
||||
*
|
||||
@@ -114,12 +131,13 @@ void hal_reo_qdesc_setup(hal_soc_handle_t hal_soc_hdl, int tid,
|
||||
|
||||
if (ba_window_size < 1)
|
||||
ba_window_size = 1;
|
||||
|
||||
/* WAR to get 2k exception in Non BA case.
|
||||
* Setting window size to 2 to get 2k jump exception
|
||||
* when we receive aggregates in Non BA case
|
||||
*/
|
||||
if ((ba_window_size == 1) && (tid != HAL_NON_QOS_TID))
|
||||
ba_window_size++;
|
||||
ba_window_size = hal_update_non_ba_win_size(tid, ba_window_size);
|
||||
|
||||
/* Set RTY bit for non-BA case. Duplicate detection is currently not
|
||||
* done by HW in non-BA case if RTY bit is not set.
|
||||
* TODO: This is a temporary War and should be removed once HW fix is
|
||||
|
Reference in New Issue
Block a user