qcacmn: Lithium data path WMI changes
WMI changes for rx reorder queue setup. Also enable addba/delba handlers. Change-Id: I360673d7493264d2591ffe3ba2bb5c3afba47f84
This commit is contained in:

committed by
qcabuildsw

parent
1fe74c48cf
commit
ed1de12085
@@ -352,4 +352,32 @@ cdp_soc_detach(ol_txrx_soc_handle soc)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int cdp_addba_requestprocess(ol_txrx_soc_handle soc,
|
||||||
|
void *peer_handle, uint8_t dialogtoken, uint16_t tid,
|
||||||
|
uint16_t batimeout, uint16_t buffersize, uint16_t startseqnum)
|
||||||
|
{
|
||||||
|
if (soc->ops->cmn_drv_ops->addba_requestprocess)
|
||||||
|
return soc->ops->cmn_drv_ops->addba_requestprocess(peer_handle,
|
||||||
|
dialogtoken, tid, batimeout, buffersize, startseqnum);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void cdp_addba_responsesetup(ol_txrx_soc_handle soc,
|
||||||
|
void *peer_handle, uint8_t tid, uint8_t *dialogtoken,
|
||||||
|
uint16_t *statuscode, uint16_t *buffersize, uint16_t *batimeout)
|
||||||
|
{
|
||||||
|
if (soc->ops->cmn_drv_ops->addba_responsesetup)
|
||||||
|
soc->ops->cmn_drv_ops->addba_responsesetup(peer_handle, tid,
|
||||||
|
dialogtoken, statuscode, buffersize, batimeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int cdp_delba_process(ol_txrx_soc_handle soc,
|
||||||
|
void *peer_handle, int tid, uint16_t reasoncode)
|
||||||
|
{
|
||||||
|
if (soc->ops->cmn_drv_ops->delba_process)
|
||||||
|
return soc->ops->cmn_drv_ops->delba_process(peer_handle,
|
||||||
|
tid, reasoncode);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _CDP_TXRX_CMN_H_ */
|
#endif /* _CDP_TXRX_CMN_H_ */
|
||||||
|
@@ -170,6 +170,16 @@ struct cdp_cmn_ops {
|
|||||||
|
|
||||||
void (*txrx_soc_detach)(void *soc);
|
void (*txrx_soc_detach)(void *soc);
|
||||||
|
|
||||||
|
int (*addba_requestprocess)(void *peer_handle, uint8_t dialogtoken,
|
||||||
|
uint16_t tid, uint16_t batimeout, uint16_t buffersize,
|
||||||
|
uint16_t startseqnum);
|
||||||
|
|
||||||
|
void (*addba_responsesetup)(void *peer_handle, uint8_t tid,
|
||||||
|
uint8_t *dialogtoken, uint16_t *statuscode,
|
||||||
|
uint16_t *buffersize, uint16_t *batimeout);
|
||||||
|
|
||||||
|
int (*delba_process)(void *peer_handle,
|
||||||
|
int tid, uint16_t reasoncode);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cdp_ctrl_ops {
|
struct cdp_ctrl_ops {
|
||||||
|
@@ -81,4 +81,12 @@ void dp_local_peer_id_pool_init(struct dp_pdev *pdev);
|
|||||||
void dp_local_peer_id_alloc(struct dp_pdev *pdev, struct dp_peer *peer);
|
void dp_local_peer_id_alloc(struct dp_pdev *pdev, struct dp_peer *peer);
|
||||||
void dp_local_peer_id_free(struct dp_pdev *pdev, struct dp_peer *peer);
|
void dp_local_peer_id_free(struct dp_pdev *pdev, struct dp_peer *peer);
|
||||||
#endif
|
#endif
|
||||||
|
extern int dp_addba_requestprocess_wifi3(void *peer_handle,
|
||||||
|
uint8_t dialogtoken, uint16_t tid, uint16_t batimeout,
|
||||||
|
uint16_t buffersize, uint16_t startseqnum);
|
||||||
|
extern void dp_addba_responsesetup_wifi3(void *peer_handle, uint8_t tid,
|
||||||
|
uint8_t *dialogtoken, uint16_t *statuscode,
|
||||||
|
uint16_t *buffersize, uint16_t *batimeout);
|
||||||
|
extern int dp_delba_process_wifi3(void *peer_handle,
|
||||||
|
int tid, uint16_t reasoncode);
|
||||||
#endif /* #ifndef _DP_INTERNAL_H_ */
|
#endif /* #ifndef _DP_INTERNAL_H_ */
|
||||||
|
@@ -1643,6 +1643,9 @@ static struct cdp_cmn_ops dp_ops_cmn = {
|
|||||||
.txrx_get_vdev_mac_addr = dp_get_vdev_mac_addr_wifi3,
|
.txrx_get_vdev_mac_addr = dp_get_vdev_mac_addr_wifi3,
|
||||||
.txrx_get_vdev_from_vdev_id = dp_get_vdev_from_vdev_id_wifi3,
|
.txrx_get_vdev_from_vdev_id = dp_get_vdev_from_vdev_id_wifi3,
|
||||||
.txrx_get_ctrl_pdev_from_vdev = dp_get_ctrl_pdev_from_vdev_wifi3,
|
.txrx_get_ctrl_pdev_from_vdev = dp_get_ctrl_pdev_from_vdev_wifi3,
|
||||||
|
.addba_requestprocess = dp_addba_requestprocess_wifi3,
|
||||||
|
.addba_responsesetup = dp_addba_responsesetup_wifi3,
|
||||||
|
.delba_process = dp_delba_process_wifi3,
|
||||||
/* TODO: Add other functions */
|
/* TODO: Add other functions */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -670,6 +670,7 @@ void dp_peer_rx_init(struct dp_pdev *pdev, struct dp_peer *peer)
|
|||||||
|
|
||||||
/* Setup default (non-qos) rx tid queue */
|
/* Setup default (non-qos) rx tid queue */
|
||||||
dp_rx_tid_setup_wifi3(peer, DP_NON_QOS_TID, 1, 0);
|
dp_rx_tid_setup_wifi3(peer, DP_NON_QOS_TID, 1, 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set security defaults: no PN check, no security. The target may
|
* Set security defaults: no PN check, no security. The target may
|
||||||
* send a HTT SEC_IND message to overwrite these defaults.
|
* send a HTT SEC_IND message to overwrite these defaults.
|
||||||
@@ -709,30 +710,30 @@ void dp_peer_rx_cleanup(struct dp_vdev *vdev, struct dp_peer *peer)
|
|||||||
*
|
*
|
||||||
* @peer: Datapath peer handle
|
* @peer: Datapath peer handle
|
||||||
* @dialogtoken: dialogtoken from ADDBA frame
|
* @dialogtoken: dialogtoken from ADDBA frame
|
||||||
* @baparamset: BlockAck parameters received in ADDBA frame
|
* @tid: TID number
|
||||||
* @basequencectrl: BA sequence control received in ADDBA frame
|
* @startseqnum: Start seq. number received in BA sequence control
|
||||||
|
* in ADDBA frame
|
||||||
*
|
*
|
||||||
* Return: 0 on success, error code on failure
|
* Return: 0 on success, error code on failure
|
||||||
*/
|
*/
|
||||||
int dp_addba_requestprocess_wifi3(void *peer_handle, uint8_t dialogtoken,
|
int dp_addba_requestprocess_wifi3(void *peer_handle,
|
||||||
struct ieee80211_ba_parameterset *baparamset, uint16_t batimeout,
|
uint8_t dialogtoken, uint16_t tid, uint16_t batimeout,
|
||||||
struct ieee80211_ba_seqctrl basequencectrl)
|
uint16_t buffersize, uint16_t startseqnum)
|
||||||
{
|
{
|
||||||
struct dp_peer *peer = (struct dp_peer *)peer_handle;
|
struct dp_peer *peer = (struct dp_peer *)peer_handle;
|
||||||
uint16_t tid = baparamset->tid;
|
|
||||||
struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
|
struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
|
||||||
|
|
||||||
if ((rx_tid->ba_status == DP_RX_BA_ACTIVE) &&
|
if ((rx_tid->ba_status == DP_RX_BA_ACTIVE) &&
|
||||||
(rx_tid->hw_qdesc_vaddr_unaligned != NULL))
|
(rx_tid->hw_qdesc_vaddr_unaligned != NULL))
|
||||||
rx_tid->ba_status = DP_RX_BA_INACTIVE;
|
rx_tid->ba_status = DP_RX_BA_INACTIVE;
|
||||||
|
|
||||||
if (dp_rx_tid_setup_wifi3(peer, tid, baparamset->buffersize,
|
if (dp_rx_tid_setup_wifi3(peer, tid, buffersize,
|
||||||
basequencectrl.startseqnum)) {
|
startseqnum)) {
|
||||||
/* TODO: Should we send addba reject in this case */
|
/* TODO: Should we send addba reject in this case */
|
||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
rx_tid->ba_win_size = baparamset->buffersize;
|
rx_tid->ba_win_size = buffersize;
|
||||||
rx_tid->dialogtoken = dialogtoken;
|
rx_tid->dialogtoken = dialogtoken;
|
||||||
rx_tid->statuscode = QDF_STATUS_SUCCESS;
|
rx_tid->statuscode = QDF_STATUS_SUCCESS;
|
||||||
rx_tid->ba_status = DP_RX_BA_ACTIVE;
|
rx_tid->ba_status = DP_RX_BA_ACTIVE;
|
||||||
@@ -747,12 +748,12 @@ int dp_addba_requestprocess_wifi3(void *peer_handle, uint8_t dialogtoken,
|
|||||||
* @tid: TID number
|
* @tid: TID number
|
||||||
* @dialogtoken: output dialogtoken
|
* @dialogtoken: output dialogtoken
|
||||||
* @statuscode: output dialogtoken
|
* @statuscode: output dialogtoken
|
||||||
* @baparamset: Ouput structure to populate BA response parameters
|
* @buffersize: Ouput BA window sizze
|
||||||
* @batimeout: Ouput BA timeout
|
* @batimeout: Ouput BA timeout
|
||||||
*/
|
*/
|
||||||
void dp_addba_responsesetup_wifi3(void *peer_handle, uint8_t tid,
|
void dp_addba_responsesetup_wifi3(void *peer_handle, uint8_t tid,
|
||||||
uint8_t *dialogtoken, uint16_t *statuscode,
|
uint8_t *dialogtoken, uint16_t *statuscode,
|
||||||
struct ieee80211_ba_parameterset *baparamset, uint16_t *batimeout)
|
uint16_t *buffersize, uint16_t *batimeout)
|
||||||
{
|
{
|
||||||
struct dp_peer *peer = (struct dp_peer *)peer_handle;
|
struct dp_peer *peer = (struct dp_peer *)peer_handle;
|
||||||
struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
|
struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
|
||||||
@@ -760,26 +761,22 @@ void dp_addba_responsesetup_wifi3(void *peer_handle, uint8_t tid,
|
|||||||
/* setup ADDBA response paramters */
|
/* setup ADDBA response paramters */
|
||||||
*dialogtoken = rx_tid->dialogtoken;
|
*dialogtoken = rx_tid->dialogtoken;
|
||||||
*statuscode = rx_tid->statuscode;
|
*statuscode = rx_tid->statuscode;
|
||||||
baparamset->amsdusupported = IEEE80211_BA_AMSDU_SUPPORTED;
|
*buffersize = rx_tid->ba_win_size;
|
||||||
baparamset->bapolicy = IEEE80211_BA_POLICY_IMMEDIATE;
|
|
||||||
baparamset->tid = rx_tid->ba_win_size;
|
|
||||||
baparamset->buffersize = rx_tid->ba_win_size;
|
|
||||||
*batimeout = 0;
|
*batimeout = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dp_rx_delba_process_wifi3() – Process DELBA from peer
|
* dp_rx_delba_process_wifi3() – Process DELBA from peer
|
||||||
* @peer: Datapath peer handle
|
* @peer: Datapath peer handle
|
||||||
* @delbaparamset: DELBA parameters received in DELBA frame
|
* @tid: TID number
|
||||||
* @reasoncode: Reason code received in DELBA frame
|
* @reasoncode: Reason code received in DELBA frame
|
||||||
*
|
*
|
||||||
* Return: 0 on success, error code on failure
|
* Return: 0 on success, error code on failure
|
||||||
*/
|
*/
|
||||||
int dp_delba_process_wifi3(void *peer_handle,
|
int dp_delba_process_wifi3(void *peer_handle,
|
||||||
struct ieee80211_delba_parameterset *delbaparamset, uint16_t reasoncode)
|
int tid, uint16_t reasoncode)
|
||||||
{
|
{
|
||||||
struct dp_peer *peer = (struct dp_peer *)peer_handle;
|
struct dp_peer *peer = (struct dp_peer *)peer_handle;
|
||||||
uint16_t tid = (uint16_t)delbaparamset->tid;
|
|
||||||
struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
|
struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
|
||||||
|
|
||||||
if (rx_tid->ba_status != DP_RX_BA_ACTIVE)
|
if (rx_tid->ba_status != DP_RX_BA_ACTIVE)
|
||||||
|
Reference in New Issue
Block a user