1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2013-2014, 2016-2019 The Linux Foundation. All rights reserved. 3*5113495bSYour Name * 4*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for 5*5113495bSYour Name * any purpose with or without fee is hereby granted, provided that the 6*5113495bSYour Name * above copyright notice and this permission notice appear in all 7*5113495bSYour Name * copies. 8*5113495bSYour Name * 9*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10*5113495bSYour Name * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11*5113495bSYour Name * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12*5113495bSYour Name * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13*5113495bSYour Name * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14*5113495bSYour Name * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15*5113495bSYour Name * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16*5113495bSYour Name * PERFORMANCE OF THIS SOFTWARE. 17*5113495bSYour Name */ 18*5113495bSYour Name 19*5113495bSYour Name #ifndef _HIF_SDIO_INTERNAL_H_ 20*5113495bSYour Name #define _HIF_SDIO_INTERNAL_H_ 21*5113495bSYour Name 22*5113495bSYour Name #include "a_debug.h" 23*5113495bSYour Name #include "hif_sdio_dev.h" 24*5113495bSYour Name #include "htc_packet.h" 25*5113495bSYour Name #include "htc_api.h" 26*5113495bSYour Name #include "hif_internal.h" 27*5113495bSYour Name 28*5113495bSYour Name #if defined(CONFIG_SDIO_TRANSFER_MAILBOX) 29*5113495bSYour Name #include <transfer/mailbox.h> 30*5113495bSYour Name #elif defined(CONFIG_SDIO_TRANSFER_ADMA) 31*5113495bSYour Name #include <transfer/adma.h> 32*5113495bSYour Name #else 33*5113495bSYour Name #error "Error - Invalid transfer method" 34*5113495bSYour Name #endif 35*5113495bSYour Name 36*5113495bSYour Name #define INVALID_MAILBOX_NUMBER 0xFF 37*5113495bSYour Name 38*5113495bSYour Name #define HIF_SDIO_RX_BUFFER_SIZE 1792 39*5113495bSYour Name #define HIF_SDIO_RX_DATA_OFFSET 64 40*5113495bSYour Name 41*5113495bSYour Name /* TODO: print output level and mask control */ 42*5113495bSYour Name #define ATH_DEBUG_IRQ ATH_DEBUG_MAKE_MODULE_MASK(4) 43*5113495bSYour Name #define ATH_DEBUG_XMIT ATH_DEBUG_MAKE_MODULE_MASK(5) 44*5113495bSYour Name #define ATH_DEBUG_RECV ATH_DEBUG_MAKE_MODULE_MASK(6) 45*5113495bSYour Name 46*5113495bSYour Name #define ATH_DEBUG_MAX_MASK 32 47*5113495bSYour Name 48*5113495bSYour Name #define SDIO_NUM_DATA_RX_BUFFERS 64 49*5113495bSYour Name #define SDIO_DATA_RX_SIZE 1664 50*5113495bSYour Name 51*5113495bSYour Name struct hif_sdio_device { 52*5113495bSYour Name struct hif_sdio_dev *HIFDevice; 53*5113495bSYour Name qdf_spinlock_t Lock; 54*5113495bSYour Name qdf_spinlock_t TxLock; 55*5113495bSYour Name qdf_spinlock_t RxLock; 56*5113495bSYour Name struct hif_msg_callbacks hif_callbacks; 57*5113495bSYour Name uint32_t BlockSize; 58*5113495bSYour Name uint32_t BlockMask; 59*5113495bSYour Name enum hif_device_irq_mode HifIRQProcessingMode; 60*5113495bSYour Name struct hif_device_irq_yield_params HifIRQYieldParams; 61*5113495bSYour Name bool DSRCanYield; 62*5113495bSYour Name HIF_MASK_UNMASK_RECV_EVENT HifMaskUmaskRecvEvent; 63*5113495bSYour Name int CurrentDSRRecvCount; 64*5113495bSYour Name int RecheckIRQStatusCnt; 65*5113495bSYour Name uint32_t RecvStateFlags; 66*5113495bSYour Name void *pTarget; 67*5113495bSYour Name struct devRegisters devRegisters; 68*5113495bSYour Name #ifdef CONFIG_SDIO_TRANSFER_MAILBOX 69*5113495bSYour Name bool swap_mailbox; 70*5113495bSYour Name struct hif_device_mbox_info MailBoxInfo; 71*5113495bSYour Name #endif 72*5113495bSYour Name }; 73*5113495bSYour Name 74*5113495bSYour Name #define LOCK_HIF_DEV(device) qdf_spin_lock(&(device)->Lock) 75*5113495bSYour Name #define UNLOCK_HIF_DEV(device) qdf_spin_unlock(&(device)->Lock) 76*5113495bSYour Name #define LOCK_HIF_DEV_RX(t) qdf_spin_lock(&(t)->RxLock) 77*5113495bSYour Name #define UNLOCK_HIF_DEV_RX(t) qdf_spin_unlock(&(t)->RxLock) 78*5113495bSYour Name #define LOCK_HIF_DEV_TX(t) qdf_spin_lock(&(t)->TxLock) 79*5113495bSYour Name #define UNLOCK_HIF_DEV_TX(t) qdf_spin_unlock(&(t)->TxLock) 80*5113495bSYour Name 81*5113495bSYour Name #define DEV_CALC_RECV_PADDED_LEN(pDev, length) \ 82*5113495bSYour Name (((length) + (pDev)->BlockMask) & (~((pDev)->BlockMask))) 83*5113495bSYour Name #define DEV_CALC_SEND_PADDED_LEN(pDev, length) \ 84*5113495bSYour Name DEV_CALC_RECV_PADDED_LEN(pDev, length) 85*5113495bSYour Name #define DEV_IS_LEN_BLOCK_ALIGNED(pDev, length) \ 86*5113495bSYour Name (((length) % (pDev)->BlockSize) == 0) 87*5113495bSYour Name 88*5113495bSYour Name #define HTC_RECV_WAIT_BUFFERS (1 << 0) 89*5113495bSYour Name #define HTC_OP_STATE_STOPPING (1 << 0) 90*5113495bSYour Name 91*5113495bSYour Name #define HTC_RX_PKT_IGNORE_LOOKAHEAD (1 << 0) 92*5113495bSYour Name #define HTC_RX_PKT_REFRESH_HDR (1 << 1) 93*5113495bSYour Name #define HTC_RX_PKT_PART_OF_BUNDLE (1 << 2) 94*5113495bSYour Name #define HTC_RX_PKT_NO_RECYCLE (1 << 3) 95*5113495bSYour Name #define HTC_RX_PKT_LAST_BUNDLED_PKT_HAS_ADDTIONAL_BLOCK (1 << 4) 96*5113495bSYour Name 97*5113495bSYour Name #define IS_DEV_IRQ_PROCESSING_ASYNC_ALLOWED(pDev) \ 98*5113495bSYour Name ((pDev)->HifIRQProcessingMode != HIF_DEVICE_IRQ_SYNC_ONLY) 99*5113495bSYour Name 100*5113495bSYour Name /* hif_sdio_dev.c */ 101*5113495bSYour Name HTC_PACKET *hif_dev_alloc_rx_buffer(struct hif_sdio_device *pDev); 102*5113495bSYour Name 103*5113495bSYour Name /* hif_sdio_recv.c */ 104*5113495bSYour Name QDF_STATUS hif_dev_rw_completion_handler(void *context, QDF_STATUS status); 105*5113495bSYour Name QDF_STATUS hif_dev_dsr_handler(void *context); 106*5113495bSYour Name 107*5113495bSYour Name #endif /* _HIF_SDIO_INTERNAL_H_ */ 108