| /* |
| *Copyright (c) 2013-2016 The Linux Foundation. All rights reserved. |
| * |
| * Previously licensed under the ISC license by Qualcomm Atheros, Inc. |
| * |
| * |
| * Permission to use, copy, modify, and/or distribute this software for |
| * any purpose with or without fee is hereby granted, provided that the |
| * above copyright notice and this permission notice appear in all |
| * copies. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL |
| * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE |
| * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL |
| * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
| * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
| * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| * PERFORMANCE OF THIS SOFTWARE. |
| */ |
| |
| /* |
| * This file was originally distributed by Qualcomm Atheros, Inc. |
| * under proprietary terms before Copyright ownership was assigned |
| * to the Linux Foundation. |
| */ |
| |
| |
| //============================================================================== |
| // HIF definitions for message based HIFs |
| //============================================================================== |
| #ifndef _HIF_MSG_BASED_H_ |
| #define _HIF_MSG_BASED_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif /* __cplusplus */ |
| |
| #include "hif.h" |
| |
| /** |
| * @brief List of callbacks - filled in by HTC. |
| */ |
| typedef struct { |
| void *Context; /**< context meaningful to HTC */ |
| A_STATUS (*txCompletionHandler)(void *Context, adf_nbuf_t wbuf, |
| unsigned transferID); |
| A_STATUS (*rxCompletionHandler)(void *Context, adf_nbuf_t wbuf, |
| u_int8_t pipeID); |
| void (*txResourceAvailHandler)(void *context, u_int8_t pipe); |
| void (*fwEventHandler)(void *context, A_STATUS status); |
| void (*txResumeAllHandler)(void *context); |
| } MSG_BASED_HIF_CALLBACKS; |
| |
| int HIF_deregister(void); |
| |
| /** |
| * @brief: This API is used by the HTC layer to initialize the HIF layer and to |
| * register different callback routines. Support for following events has |
| * been captured - DSR, Read/Write completion, Device insertion/removal, |
| * Device suspension/resumption/wakeup. In addition to this, the API is |
| * also used to register the name and the revision of the chip. The latter |
| * can be used to verify the revision of the chip read from the device |
| * before reporting it to HTC. |
| * @param[in]: callbacks - List of HTC callbacks |
| * @param[out]: |
| * @return: an opaque HIF handle |
| */ |
| //void *HIFInit(void *hHTC, HTC_CALLBACKS *callbacks); |
| |
| void HIFPostInit(HIF_DEVICE *hifDevice, void *hHTC, MSG_BASED_HIF_CALLBACKS *callbacks); |
| |
| A_STATUS HIFStart(HIF_DEVICE *hifDevice); |
| |
| void HIFStop(HIF_DEVICE *hifDevice); |
| void HIFFlushSurpriseRemove(HIF_DEVICE *hifDevice); |
| |
| void HIFGrowBuffers(void* hif_hdl); |
| |
| void HIFDump(HIF_DEVICE *hifDevice, u_int8_t CmdId, bool start); |
| /** |
| * @brief: Send a buffer to HIF for transmission to the target. |
| * @param[in]: hifDevice - HIF handle |
| * @param[in]: pipeID - pipe to use |
| * @param[in]: hdr_buf - unused |
| * @param[in]: buf - buffer to send |
| * @param[out]: |
| * @return: Status of the send operation. |
| */ |
| int HIFSend(HIF_DEVICE *hifDevice, u_int8_t PipeID, |
| adf_nbuf_t hdr_buf, adf_nbuf_t wbuf); |
| |
| /** |
| * @brief: Send the head of a buffer to HIF for transmission to the target. |
| * @param[in]: hifDevice - HIF handle |
| * @param[in]: pipeID - pipe to use |
| * @param[in]: transferID - upper-layer ID for this transfer, used in the |
| * send completion callback to identify the transfer |
| * @param[in]: nbytes - number of initial bytes to send |
| * @param[in]: buf - buffer to send |
| * @param[out]: |
| * @return: Status of the send operation. |
| */ |
| int HIFSend_head(HIF_DEVICE *hifDevice, u_int8_t PipeID, |
| unsigned int transferID, unsigned int nbytes, adf_nbuf_t wbuf); |
| |
| /** |
| * @brief: Check if prior sends have completed. |
| * @details: |
| * Check whether the pipe in question has any completed sends that have |
| * not yet been processed. |
| * This function is only relevant for HIF pipes that are configured to be |
| * polled rather than interrupt-driven. |
| * |
| * @param[in]: hifDevice - HIF handle |
| * @param[in]: pipeID - pipe used for the prior sends |
| * @param[in]: force - whether this is a poll suggestion or poll command |
| */ |
| void HIFSendCompleteCheck(HIF_DEVICE *hifDevice, u_int8_t PipeID, int force); |
| void HIFCancelDeferredTargetSleep(HIF_DEVICE *hif_device); |
| |
| /** |
| * @brief: Shutdown the HIF layer. |
| * @param[in]: HIFHandle - opaque HIF handle. |
| * @param[out]: |
| * @return: |
| */ |
| void HIFShutDown(HIF_DEVICE *hifDevice); |
| |
| u_int32_t HIFQueryQueueDepth(HIF_DEVICE *hifDevice, u_int8_t epnum); |
| |
| void HIFGetDefaultPipe(HIF_DEVICE *hifDevice, u_int8_t *ULPipe, u_int8_t *DLPipe); |
| |
| int HIFMapServiceToPipe(HIF_DEVICE *hifDevice, u_int16_t ServiceId, u_int8_t *ULPipe, u_int8_t *DLPipe, int *ul_is_polled, int *dl_is_polled); |
| |
| u_int8_t HIFGetULPipeNum(void); |
| u_int8_t HIFGetDLPipeNum(void); |
| |
| //a_status_t HIFGetProductInfo(HIF_DEVICE *hifDevice, adf_net_dev_product_info_t *info); |
| |
| u_int16_t HIFGetFreeQueueNumber(HIF_DEVICE *hifDevice, u_int8_t PipeID); |
| u_int16_t HIFGetMaxQueueNumber(HIF_DEVICE *hifDevice, u_int8_t PipeID); |
| |
| void HIFDumpInfo(HIF_DEVICE *hifDevice); |
| void *hif_get_targetdef(HIF_DEVICE *hif_device); |
| void HIFsuspendwow(HIF_DEVICE *hif_device); |
| #if defined(HIF_SDIO) || defined(HIF_USB) |
| void HIFSetBundleMode(HIF_DEVICE *hif_device, bool enabled, int rx_bundle_cnt); |
| #endif |
| |
| #ifdef HIF_SDIO |
| int hif_set_target_reset(HIF_DEVICE *hif_device); |
| #else |
| static inline int hif_set_target_reset(HIF_DEVICE *hif_device) |
| { |
| return 0; |
| } |
| #endif |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _HIF_H_ */ |