From d8a881864cda6bb49d8303d7134d3dd97b581874 Mon Sep 17 00:00:00 2001 From: Mohit Khanna Date: Tue, 17 May 2016 15:28:18 -0700 Subject: [PATCH] qcacmn: Add USB bus support (QDF) Add module specific changes for USB bus support. Change-Id: Idb9fe1232d451e4f88a001fbd6591ba13b0c859a CRs-Fixed: 1023663 --- qdf/inc/qdf_nbuf.h | 22 ++++++---------------- qdf/inc/qdf_status.h | 2 ++ qdf/linux/src/i_qdf_nbuf.h | 26 ++++++++++++++++++++++++++ qdf/linux/src/i_qdf_time.h | 4 ++++ qdf/linux/src/i_qdf_types.h | 4 +++- qdf/linux/src/qdf_mem.c | 10 +++++++--- qdf/linux/src/qdf_nbuf.c | 8 +++++--- 7 files changed, 53 insertions(+), 23 deletions(-) diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index a99607d30c..51085bf944 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -1141,29 +1141,19 @@ bool qdf_nbuf_is_ipv4_arp_pkt(qdf_nbuf_t buf) } /** - * qdf_invalidate_range() - invalidate the virtual address range specified by - * start and end addresses. - * Note: This does not write back the cache entries. + * qdf_invalidate_range() - invalidate virtual address range + * @start: start address of the address range + * @end: end address of the address range + * + * Note that this function does not write back the cache entries. * * Return: none */ -#ifdef MSM_PLATFORM static inline void qdf_invalidate_range(void *start, void *end) { - dmac_inv_range(start, end); + __qdf_invalidate_range(start, end); } -#else -static inline void qdf_invalidate_range(void *start, void *end) -{ - /* TODO figure out how to invalidate cache on x86 and other - non-MSM platform */ - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL, - "Cache invalidate not yet implemneted for non-MSM platform"); - return; -} -#endif - /** * qdf_nbuf_reset_num_frags() - decrement the number of fragments * @buf: Network buffer diff --git a/qdf/inc/qdf_status.h b/qdf/inc/qdf_status.h index 2344c89aff..0a58c4eb48 100644 --- a/qdf/inc/qdf_status.h +++ b/qdf/inc/qdf_status.h @@ -78,6 +78,7 @@ * @QDF_STATUS_FT_PREAUTH_KEY_FAILED: ft preauth key failed * @QDF_STATUS_CMD_NOT_QUEUED: command not queued * @QDF_STATUS_FW_MSG_TIMEDOUT: target message timeout + * @QDF_STATUS_E_USB_ERROR: USB transaction error * @QDF_STATUS_MAX: not a realy value just a place holder for max */ typedef enum { @@ -123,6 +124,7 @@ typedef enum { QDF_STATUS_FT_PREAUTH_KEY_FAILED, QDF_STATUS_CMD_NOT_QUEUED, QDF_STATUS_FW_MSG_TIMEDOUT, + QDF_STATUS_E_USB_ERROR, QDF_STATUS_MAX } QDF_STATUS; diff --git a/qdf/linux/src/i_qdf_nbuf.h b/qdf/linux/src/i_qdf_nbuf.h index 6fafff7a1b..0a0bf77da6 100644 --- a/qdf/linux/src/i_qdf_nbuf.h +++ b/qdf/linux/src/i_qdf_nbuf.h @@ -1608,4 +1608,30 @@ __qdf_nbuf_get_priv_ptr(struct sk_buff *skb) return &skb->cb[8]; } +/** + * __qdf_invalidate_range() - invalidate virtual address range + * @start: start address of the address range + * @end: end address of the address range + * + * Note that this function does not write back the cache entries. + * + * Return: none + */ +#ifdef MSM_PLATFORM +static inline void __qdf_invalidate_range(void *start, void *end) +{ + dmac_inv_range(start, end); +} + +#else +static inline void __qdf_invalidate_range(void *start, void *end) +{ + /* TODO figure out how to invalidate cache on x86 and other + non-MSM platform */ + pr_err("Cache invalidate not yet implemneted for non-MSM platforms\n"); + return; +} +#endif + + #endif /*_I_QDF_NET_BUF_H */ diff --git a/qdf/linux/src/i_qdf_time.h b/qdf/linux/src/i_qdf_time.h index 3d66c4d4c6..7862e250a3 100644 --- a/qdf/linux/src/i_qdf_time.h +++ b/qdf/linux/src/i_qdf_time.h @@ -35,7 +35,11 @@ #include #include +#ifdef MSM_PLATFORM #include +#else +#include +#endif #ifdef CONFIG_CNSS #include #endif diff --git a/qdf/linux/src/i_qdf_types.h b/qdf/linux/src/i_qdf_types.h index 74325b7b64..f915d0a9bc 100644 --- a/qdf/linux/src/i_qdf_types.h +++ b/qdf/linux/src/i_qdf_types.h @@ -154,6 +154,7 @@ struct __qdf_mempool_ctxt; * @QDF_BUS_TYPE_AHB: AHB Bus * @QDF_BUS_TYPE_SNOC: SNOC Bus * @QDF_BUS_TYPE_SIM: Simulator + * @QDF_BUS_TYPE_USB: USB Bus */ enum qdf_bus_type { QDF_BUS_TYPE_NONE = -1, @@ -161,7 +162,8 @@ enum qdf_bus_type { QDF_BUS_TYPE_AHB, QDF_BUS_TYPE_SNOC, QDF_BUS_TYPE_SIM, - QDF_BUS_TYPE_SDIO + QDF_BUS_TYPE_SDIO, + QDF_BUS_TYPE_USB }; /** diff --git a/qdf/linux/src/qdf_mem.c b/qdf/linux/src/qdf_mem.c index db76cde313..d29f13307a 100644 --- a/qdf/linux/src/qdf_mem.c +++ b/qdf/linux/src/qdf_mem.c @@ -945,7 +945,7 @@ void qdf_mem_move(void *dst_addr, const void *src_addr, uint32_t num_bytes) } EXPORT_SYMBOL(qdf_mem_move); -#if defined(A_SIMOS_DEVHOST) || defined(HIF_SDIO) +#if defined(A_SIMOS_DEVHOST) || defined(HIF_SDIO) || defined(HIF_USB) /** * qdf_mem_alloc_consistent() - allocates consistent qdf memory * @osdev: OS device handle @@ -961,7 +961,11 @@ void *qdf_mem_alloc_consistent(qdf_device_t osdev, void *dev, qdf_size_t size, void *vaddr; vaddr = qdf_mem_malloc(size); - *phy_addr = ((qdf_dma_addr_t) vaddr); + *phy_addr = ((uintptr_t) vaddr); + /* using this type conversion to suppress "cast from pointer to integer + * of different size" warning on some platforms + */ + BUILD_BUG_ON(sizeof(*phy_addr) < sizeof(vaddr)); return vaddr; } @@ -985,7 +989,7 @@ void *qdf_mem_alloc_consistent(qdf_device_t osdev, void *dev, qdf_size_t size, #endif EXPORT_SYMBOL(qdf_mem_alloc_consistent); -#if defined(A_SIMOS_DEVHOST) || defined(HIF_SDIO) +#if defined(A_SIMOS_DEVHOST) || defined(HIF_SDIO) || defined(HIF_USB) /** * qdf_mem_free_consistent() - free consistent qdf memory * @osdev: OS device handle diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c index aa6e2dcbdf..f82ad10485 100644 --- a/qdf/linux/src/qdf_nbuf.c +++ b/qdf/linux/src/qdf_nbuf.c @@ -311,13 +311,15 @@ EXPORT_SYMBOL(__qdf_nbuf_unmap); * * Return: QDF_STATUS */ -#ifdef A_SIMOS_DEVHOST +#if defined(A_SIMOS_DEVHOST) || defined (HIF_USB) QDF_STATUS __qdf_nbuf_map_single(qdf_device_t osdev, qdf_nbuf_t buf, qdf_dma_dir_t dir) { qdf_dma_addr_t paddr; - QDF_NBUF_CB_PADDR(buf) = paddr = buf->data; + QDF_NBUF_CB_PADDR(buf) = paddr = (uintptr_t)buf->data; + BUILD_BUG_ON(sizeof(paddr) < sizeof(buf->data)); + BUILD_BUG_ON(sizeof(QDF_NBUF_CB_PADDR(buf)) < sizeof(buf->data)); return QDF_STATUS_SUCCESS; } EXPORT_SYMBOL(__qdf_nbuf_map_single); @@ -345,7 +347,7 @@ EXPORT_SYMBOL(__qdf_nbuf_map_single); * * Return: none */ -#if defined(A_SIMOS_DEVHOST) +#if defined(A_SIMOS_DEVHOST) || defined (HIF_USB) void __qdf_nbuf_unmap_single(qdf_device_t osdev, qdf_nbuf_t buf, qdf_dma_dir_t dir) {