qcacmn: Add HTC APIs to schedule/cancel custom callbacks
Add HTC layer APIs to schedule/cancel custom callbacks. CRs-Fixed: 3408693 Change-Id: I1316685707b7abc6c8d86ec4d237dc920f9f78eb
This commit is contained in:

committed by
Madan Koyyalamudi

parent
63c5956a01
commit
10fe6982eb
100
htc/htc_api.h
100
htc/htc_api.h
@@ -531,6 +531,106 @@ void htc_ce_tasklet_debug_dump(HTC_HANDLE htc_handle);
|
|||||||
*/
|
*/
|
||||||
QDF_STATUS htc_send_pkt(HTC_HANDLE HTCHandle, HTC_PACKET *pPacket);
|
QDF_STATUS htc_send_pkt(HTC_HANDLE HTCHandle, HTC_PACKET *pPacket);
|
||||||
|
|
||||||
|
#ifdef CUSTOM_CB_SCHEDULER_SUPPORT
|
||||||
|
/**
|
||||||
|
* htc_register_custom_cb() - Helper API to register the custom callback
|
||||||
|
* @htc_handle: HTC handle
|
||||||
|
* @endpoint_id: Endpoint ID
|
||||||
|
* @custom_cb: Custom call back function pointer
|
||||||
|
* @custom_cb_context: Custom callback context
|
||||||
|
*
|
||||||
|
* return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
htc_register_custom_cb(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id,
|
||||||
|
void (*custom_cb)(void *), void *custom_cb_context);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* htc_unregister_custom_cb() - Helper API to unregister the custom callback
|
||||||
|
* @htc_handle: HTC handle
|
||||||
|
* @endpoint_id: Endpoint ID
|
||||||
|
*
|
||||||
|
* return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
htc_unregister_custom_cb(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* htc_enable_custom_cb() - Helper API to enable the custom callback
|
||||||
|
* @htc_handle: HTC handle
|
||||||
|
* @endpoint_id: Endpoint ID
|
||||||
|
*
|
||||||
|
* return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
htc_enable_custom_cb(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* htc_disable_custom_cb() - Helper API to disable the custom callback
|
||||||
|
* @htc_handle: HTC handle
|
||||||
|
* @endpoint_id: Endpoint ID
|
||||||
|
*
|
||||||
|
* return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
htc_disable_custom_cb(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id);
|
||||||
|
#else
|
||||||
|
/**
|
||||||
|
* htc_register_custom_cb() - Helper API to register the custom callback
|
||||||
|
* @htc_handle: HTC handle
|
||||||
|
* @endpoint_id: Endpoint ID
|
||||||
|
* @custom_cb: Custom call back function pointer
|
||||||
|
* @custom_cb_context: Custom callback context
|
||||||
|
*
|
||||||
|
* return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
htc_register_custom_cb(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id,
|
||||||
|
void (*custom_cb)(void *), void *custom_cb_context)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* htc_unregister_custom_cb() - Helper API to unregister the custom callback
|
||||||
|
* @htc_handle: HTC handle
|
||||||
|
* @endpoint_id: Endpoint ID
|
||||||
|
*
|
||||||
|
* return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
htc_unregister_custom_cb(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* htc_enable_custom_cb() - Helper API to enable the custom callback
|
||||||
|
* @htc_handle: HTC handle
|
||||||
|
* @endpoint_id: Endpoint ID
|
||||||
|
*
|
||||||
|
* return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
htc_enable_custom_cb(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* htc_disable_custom_cb() - Helper API to disable the custom callback
|
||||||
|
* @htc_handle: HTC handle
|
||||||
|
* @endpoint_id: Endpoint ID
|
||||||
|
*
|
||||||
|
* return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
htc_disable_custom_cb(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif /* CUSTOM_CB_SCHEDULER_SUPPORT */
|
||||||
|
|
||||||
#ifdef ATH_11AC_TXCOMPACT
|
#ifdef ATH_11AC_TXCOMPACT
|
||||||
/**
|
/**
|
||||||
* htc_send_data_pkt() - Send an HTC packet containing a tx descriptor and data
|
* htc_send_data_pkt() - Send an HTC packet containing a tx descriptor and data
|
||||||
|
168
htc/htc_send.c
168
htc/htc_send.c
@@ -1995,6 +1995,174 @@ static inline QDF_STATUS __htc_send_pkt(HTC_HANDLE HTCHandle,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CUSTOM_CB_SCHEDULER_SUPPORT
|
||||||
|
/**
|
||||||
|
* htc_get_endpoint_ul_pipeid() - Helper API to get uplink pipe ID
|
||||||
|
* @htc_handle: HTC handle
|
||||||
|
* @endpoint_id: Endpoint ID
|
||||||
|
* @ul_pipeid: Pointer to uplink pipe ID
|
||||||
|
*
|
||||||
|
* return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static QDF_STATUS
|
||||||
|
htc_get_endpoint_ul_pipeid(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id,
|
||||||
|
uint8_t *ul_pipeid)
|
||||||
|
{
|
||||||
|
HTC_TARGET *target;
|
||||||
|
HTC_ENDPOINT *end_point;
|
||||||
|
|
||||||
|
if (!htc_handle) {
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
|
||||||
|
("%s: HTCHandle is NULL\n", __func__));
|
||||||
|
return QDF_STATUS_E_NULL_VALUE;
|
||||||
|
}
|
||||||
|
target = GET_HTC_TARGET_FROM_HANDLE(htc_handle);
|
||||||
|
|
||||||
|
if (endpoint_id >= ENDPOINT_MAX || endpoint_id <= ENDPOINT_UNUSED) {
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND,
|
||||||
|
("%s endpoint is invalid\n", __func__));
|
||||||
|
AR_DEBUG_ASSERT(0);
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
end_point = &target->endpoint[endpoint_id];
|
||||||
|
|
||||||
|
if (!end_point->service_id) {
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("%s service_id is invalid\n",
|
||||||
|
__func__));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ul_pipeid = end_point->UL_PipeID;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS
|
||||||
|
htc_register_custom_cb(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id,
|
||||||
|
void (*custom_cb)(void *), void *custom_cb_context)
|
||||||
|
{
|
||||||
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
|
uint8_t ul_pipeid;
|
||||||
|
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("+%s\n", __func__));
|
||||||
|
|
||||||
|
status = htc_get_endpoint_ul_pipeid(htc_handle, endpoint_id,
|
||||||
|
&ul_pipeid);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("%s Failed to get ul pipeid\n",
|
||||||
|
__func__));
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = hif_register_ce_custom_cb(htc_get_hif_device(htc_handle),
|
||||||
|
ul_pipeid, custom_cb,
|
||||||
|
custom_cb_context);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("%s Failed to register cb\n",
|
||||||
|
__func__));
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("-%s\n", __func__));
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS
|
||||||
|
htc_unregister_custom_cb(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id)
|
||||||
|
{
|
||||||
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
|
uint8_t ul_pipeid;
|
||||||
|
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("+%s\n", __func__));
|
||||||
|
|
||||||
|
status = htc_get_endpoint_ul_pipeid(htc_handle, endpoint_id,
|
||||||
|
&ul_pipeid);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("%s Failed to get ul pipeid\n",
|
||||||
|
__func__));
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = hif_unregister_ce_custom_cb(htc_get_hif_device(htc_handle),
|
||||||
|
ul_pipeid);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("%s Failed to unregister cb\n",
|
||||||
|
__func__));
|
||||||
|
status = QDF_STATUS_E_INVAL;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("-%s\n", __func__));
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS
|
||||||
|
htc_enable_custom_cb(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id)
|
||||||
|
{
|
||||||
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
|
uint8_t ul_pipeid;
|
||||||
|
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("+%s\n", __func__));
|
||||||
|
|
||||||
|
status = htc_get_endpoint_ul_pipeid(htc_handle, endpoint_id,
|
||||||
|
&ul_pipeid);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("%s Failed to get ul pipeid\n",
|
||||||
|
__func__));
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = hif_enable_ce_custom_cb(htc_get_hif_device(htc_handle),
|
||||||
|
ul_pipeid);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("%s Failed to enable cb\n",
|
||||||
|
__func__));
|
||||||
|
status = QDF_STATUS_E_INVAL;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("-%s\n", __func__));
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS
|
||||||
|
htc_disable_custom_cb(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id)
|
||||||
|
{
|
||||||
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
|
uint8_t ul_pipeid;
|
||||||
|
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("+%s\n", __func__));
|
||||||
|
|
||||||
|
status = htc_get_endpoint_ul_pipeid(htc_handle, endpoint_id,
|
||||||
|
&ul_pipeid);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("%s Failed to get ul pipeid\n",
|
||||||
|
__func__));
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = hif_disable_ce_custom_cb(htc_get_hif_device(htc_handle),
|
||||||
|
ul_pipeid);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("%s Failed to disable cb\n",
|
||||||
|
__func__));
|
||||||
|
status = QDF_STATUS_E_INVAL;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
|
AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("-%s\n", __func__));
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
#endif /* CUSTOM_CB_SCHEDULER_SUPPORT */
|
||||||
|
|
||||||
/* HTC API - htc_send_pkt */
|
/* HTC API - htc_send_pkt */
|
||||||
QDF_STATUS htc_send_pkt(HTC_HANDLE htc_handle, HTC_PACKET *htc_packet)
|
QDF_STATUS htc_send_pkt(HTC_HANDLE htc_handle, HTC_PACKET *htc_packet)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user