qcacmn: Add support for asynchronous Host to Target connection

Add support for asynchronous Host to Target connection connection in
whcih packets can be queued in both interrrupt and process context.

Change-Id: I52f0f972b938a558e4ef3c13cf4d76aa3a63d58f
CRs-Fixed: 1092518
Cette révision appartient à :
Venkateswara Swamy Bandaru
2016-11-21 15:06:24 +05:30
révisé par qcabuildsw
Parent 1dd971bf7f
révision ae41b9e0ae
4 fichiers modifiés avec 43 ajouts et 11 suppressions

Voir le fichier

@@ -616,14 +616,14 @@ static A_STATUS htc_issue_packets(HTC_TARGET *target,
}
}
if (pEndpoint->service_id != WMI_CONTROL_SVC) {
if (!pEndpoint->async_update) {
LOCK_HTC_TX(target);
}
/* store in look up queue to match completions */
HTC_PACKET_ENQUEUE(&pEndpoint->TxLookupQueue, pPacket);
INC_HTC_EP_STAT(pEndpoint, TxIssued, 1);
pEndpoint->ul_outstanding_cnt++;
if (pEndpoint->service_id != WMI_CONTROL_SVC) {
if (!pEndpoint->async_update) {
UNLOCK_HTC_TX(target);
hif_send_complete_check(target->hif_dev,
pEndpoint->UL_PipeID, false);
@@ -651,7 +651,7 @@ static A_STATUS htc_issue_packets(HTC_TARGET *target,
("hif_send Failed status:%d \n",
status));
}
if (pEndpoint->service_id != WMI_CONTROL_SVC) {
if (!pEndpoint->async_update) {
LOCK_HTC_TX(target);
}
target->ce_send_cnt--;
@@ -662,7 +662,7 @@ static A_STATUS htc_issue_packets(HTC_TARGET *target,
pPacket->PktInfo.AsTx.CreditsUsed;
/* put it back into the callers queue */
HTC_PACKET_ENQUEUE_TO_HEAD(pPktQueue, pPacket);
if (pEndpoint->service_id != WMI_CONTROL_SVC) {
if (!pEndpoint->async_update) {
UNLOCK_HTC_TX(target);
}
break;
@@ -1156,9 +1156,12 @@ static HTC_SEND_QUEUE_RESULT htc_try_send(HTC_TARGET *target,
* transmit resources */
while (true) {
if ((HTC_PACKET_QUEUE_DEPTH(&pEndpoint->TxQueue) == 0) ||
((!tx_resources) &&
(pEndpoint->service_id == WMI_CONTROL_SVC))) {
if (HTC_PACKET_QUEUE_DEPTH(&pEndpoint->TxQueue) == 0)
break;
if (pEndpoint->async_update &&
(!IS_TX_CREDIT_FLOW_ENABLED(pEndpoint)) &&
(!tx_resources)) {
break;
}
@@ -1211,7 +1214,7 @@ static HTC_SEND_QUEUE_RESULT htc_try_send(HTC_TARGET *target,
break;
}
if (pEndpoint->service_id != WMI_CONTROL_SVC) {
if (!pEndpoint->async_update) {
UNLOCK_HTC_TX(target);
}
@@ -1229,7 +1232,7 @@ static HTC_SEND_QUEUE_RESULT htc_try_send(HTC_TARGET *target,
HTC_PACKET_QUEUE_TRANSFER_TO_HEAD(&pEndpoint->TxQueue,
&sendQueue);
if (pEndpoint->service_id != WMI_CONTROL_SVC) {
if (!pEndpoint->async_update) {
LOCK_HTC_TX(target);
}
break;
@@ -1241,7 +1244,7 @@ static HTC_SEND_QUEUE_RESULT htc_try_send(HTC_TARGET *target,
pEndpoint->UL_PipeID);
}
if (pEndpoint->service_id != WMI_CONTROL_SVC) {
if (!pEndpoint->async_update) {
LOCK_HTC_TX(target);
}
@@ -1920,7 +1923,7 @@ QDF_STATUS htc_tx_completion_handler(void *Context,
* when credits flow back from the target.
* in the non-TX credit case, we recheck after the packet completes */
if ((qdf_atomic_read(&pEndpoint->TxProcessCount) == 0) ||
(pEndpoint->service_id != WMI_CONTROL_SVC)) {
(!pEndpoint->async_update)) {
htc_try_send(target, pEndpoint, NULL);
}
}