diff options
author | Thomson Kang <thomson.kang@broadcom.corp-partner.google.com> | 2020-08-07 13:10:38 +0900 |
---|---|---|
committer | Ahmed ElArabawy <arabawy@google.com> | 2020-08-11 08:50:34 -0700 |
commit | b201998fe9fc2dc6890a57b16d0b299f1c0ed4f7 (patch) | |
tree | ba4d5097a96ce881fb20d352cb63d15c7aa0a8a6 /linux_osl_priv.h | |
parent | c03ae442aeb9c733879fb0413b600098767f9923 (diff) | |
download | bcm4389-b201998fe9fc2dc6890a57b16d0b299f1c0ed4f7.tar.gz |
Initial Drop for bcm4389, 2020.08.07
Version : 101.10.355
Bug: 162998780
Test: Make sure it builds, starts at boot, and passes smoke test
Signed-off-by: Thomson Kang <thomson.kang@broadcom.corp-partner.google.com>
Change-Id: Iba369c92c096a3bcf25ada42ad6a80ac78ecb43d
Signed-off-by: Ahmed ElArabawy <arabawy@google.com>
Diffstat (limited to 'linux_osl_priv.h')
-rw-r--r-- | linux_osl_priv.h | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/linux_osl_priv.h b/linux_osl_priv.h new file mode 100644 index 0000000..de06b99 --- /dev/null +++ b/linux_osl_priv.h @@ -0,0 +1,185 @@ +/* + * Private header file for Linux OS Independent Layer + * + * Copyright (C) 2020, Broadcom. + * + * Unless you and Broadcom execute a separate written software license + * agreement governing use of this software, this software is licensed to you + * under the terms of the GNU General Public License version 2 (the "GPL"), + * available at http://www.broadcom.com/licenses/GPLv2.php, with the + * following added to such license: + * + * As a special exception, the copyright holders of this software give you + * permission to link this software with independent modules, and to copy and + * distribute the resulting executable under terms of your choice, provided that + * you also meet, for each linked independent module, the terms and conditions of + * the license of that module. An independent module is a module which is not + * derived from this software. The special exception does not apply to any + * modifications of the software. + * + * + * <<Broadcom-WL-IPTag/Dual:>> + */ + +#ifndef _LINUX_OSL_PRIV_H_ +#define _LINUX_OSL_PRIV_H_ + +#include <osl.h> + +#define OS_HANDLE_MAGIC 0x1234abcd /* Magic # to recognize osh */ +#define BCM_MEM_FILENAME_LEN 24 /* Mem. filename length */ + +/* dependancy check */ +#if !defined(BCMPCIE) && defined(DHD_USE_STATIC_CTRLBUF) +#error "DHD_USE_STATIC_CTRLBUF suppored PCIE target only" +#endif /* !BCMPCIE && DHD_USE_STATIC_CTRLBUF */ + +#define OSL_MEMLIST_LOCK(lock, flags) (flags) = osl_spin_lock(lock) +#define OSL_MEMLIST_UNLOCK(lock, flags) osl_spin_unlock((lock), (flags)) + +#define OSL_STATIC_BUF_LOCK(lock, flags) (flags) = osl_spin_lock(lock) +#define OSL_STATIC_BUF_UNLOCK(lock, flags) osl_spin_unlock((lock), (flags)) + +#define OSL_STATIC_PKT_LOCK(lock, flags) (flags) = osl_spin_lock(lock) +#define OSL_STATIC_PKT_UNLOCK(lock, flags) osl_spin_unlock((lock), (flags)) + +#define OSL_PKTLIST_LOCK(lock, flags) (flags) = osl_spin_lock(lock) +#define OSL_PKTLIST_UNLOCK(lock, flags) osl_spin_unlock((lock), (flags)) + +#define OSL_CTRACE_LOCK(lock, flags) (flags) = osl_spin_lock(lock) +#define OSL_CTRACE_UNLOCK(lock, flags) osl_spin_unlock((lock), (flags)) + +#ifdef CONFIG_DHD_USE_STATIC_BUF +#ifdef DHD_USE_STATIC_CTRLBUF +#define DHD_SKB_1PAGE_BUFSIZE (PAGE_SIZE*1) +#define DHD_SKB_2PAGE_BUFSIZE (PAGE_SIZE*2) +#define DHD_SKB_4PAGE_BUFSIZE (PAGE_SIZE*4) + +#define PREALLOC_FREE_MAGIC 0xFEDC +#define PREALLOC_USED_MAGIC 0xFCDE +#else +#define DHD_SKB_HDRSIZE 336 +#define DHD_SKB_1PAGE_BUFSIZE ((PAGE_SIZE*1)-DHD_SKB_HDRSIZE) +#define DHD_SKB_2PAGE_BUFSIZE ((PAGE_SIZE*2)-DHD_SKB_HDRSIZE) +#define DHD_SKB_4PAGE_BUFSIZE ((PAGE_SIZE*4)-DHD_SKB_HDRSIZE) +#endif /* DHD_USE_STATIC_CTRLBUF */ + +#define STATIC_BUF_MAX_NUM 16 +#define STATIC_BUF_SIZE (PAGE_SIZE*2) +#define STATIC_BUF_TOTAL_LEN (STATIC_BUF_MAX_NUM * STATIC_BUF_SIZE) + +typedef struct bcm_static_buf { + spinlock_t static_lock; + unsigned char *buf_ptr; + unsigned char buf_use[STATIC_BUF_MAX_NUM]; +} bcm_static_buf_t; + +extern bcm_static_buf_t *bcm_static_buf; + +#ifdef DHD_USE_STATIC_CTRLBUF +#define STATIC_PKT_4PAGE_NUM 0 +#define DHD_SKB_MAX_BUFSIZE DHD_SKB_2PAGE_BUFSIZE +#elif defined(ENHANCED_STATIC_BUF) +#define STATIC_PKT_4PAGE_NUM 1 +#define DHD_SKB_MAX_BUFSIZE DHD_SKB_4PAGE_BUFSIZE +#else +#define STATIC_PKT_4PAGE_NUM 0 +#define DHD_SKB_MAX_BUFSIZE DHD_SKB_2PAGE_BUFSIZE +#endif /* DHD_USE_STATIC_CTRLBUF */ + +#ifdef DHD_USE_STATIC_CTRLBUF +#define STATIC_PKT_1PAGE_NUM 0 +/* Should match DHD_SKB_2PAGE_BUF_NUM */ +#define STATIC_PKT_2PAGE_NUM 192 +#else +#define STATIC_PKT_1PAGE_NUM 8 +#define STATIC_PKT_2PAGE_NUM 8 +#endif /* DHD_USE_STATIC_CTRLBUF */ + +#define STATIC_PKT_1_2PAGE_NUM \ + ((STATIC_PKT_1PAGE_NUM) + (STATIC_PKT_2PAGE_NUM)) +#define STATIC_PKT_MAX_NUM \ + ((STATIC_PKT_1_2PAGE_NUM) + (STATIC_PKT_4PAGE_NUM)) + +typedef struct bcm_static_pkt { +#ifdef DHD_USE_STATIC_CTRLBUF + struct sk_buff *skb_8k[STATIC_PKT_2PAGE_NUM]; + unsigned char pkt_invalid[STATIC_PKT_2PAGE_NUM]; + spinlock_t osl_pkt_lock; + uint32 last_allocated_index; +#else + struct sk_buff *skb_4k[STATIC_PKT_1PAGE_NUM]; + struct sk_buff *skb_8k[STATIC_PKT_2PAGE_NUM]; +#ifdef ENHANCED_STATIC_BUF + struct sk_buff *skb_16k; +#endif /* ENHANCED_STATIC_BUF */ + struct semaphore osl_pkt_sem; +#endif /* DHD_USE_STATIC_CTRLBUF */ + unsigned char pkt_use[STATIC_PKT_MAX_NUM]; +} bcm_static_pkt_t; + +extern bcm_static_pkt_t *bcm_static_skb; +#endif /* CONFIG_DHD_USE_STATIC_BUF */ + +typedef struct bcm_mem_link { + struct bcm_mem_link *prev; + struct bcm_mem_link *next; + uint size; + int line; + void *osh; + char file[BCM_MEM_FILENAME_LEN]; +} bcm_mem_link_t; + +struct osl_cmn_info { + atomic_t malloced; + atomic_t pktalloced; /* Number of allocated packet buffers */ + spinlock_t dbgmem_lock; + bcm_mem_link_t *dbgmem_list; + bcm_mem_link_t *dbgvmem_list; +#ifdef BCMDBG_PKT /* pkt logging for debugging */ + spinlock_t pktlist_lock; + pktlist_info_t pktlist; +#endif /* BCMDBG_PKT */ + spinlock_t pktalloc_lock; + atomic_t refcount; /* Number of references to this shared structure. */ +}; +typedef struct osl_cmn_info osl_cmn_t; + +#if defined(AXI_TIMEOUTS_NIC) +typedef uint32 (*bpt_cb_fn)(void *ctx, void *addr); +#endif /* AXI_TIMEOUTS_NIC */ + +struct osl_info { + osl_pubinfo_t pub; + uint32 flags; /* If specific cases to be handled in the OSL */ + uint magic; + void *pdev; + uint failed; + uint bustype; + osl_cmn_t *cmn; /* Common OSL related data shred between two OSH's */ + + /* for host drivers, a bus handle is needed when reading from and/or writing to dongle + * registeres, however ai/si utilities only passes osh handle to R_REG and W_REG. as + * a work around, save the bus handle here + */ + void *bus_handle; +#ifdef BCMDBG_CTRACE + spinlock_t ctrace_lock; + struct list_head ctrace_list; + int ctrace_num; +#endif /* BCMDBG_CTRACE */ +#if defined(AXI_TIMEOUTS_NIC) + bpt_cb_fn bpt_cb; + void *sih; +#endif /* AXI_TIMEOUTS_NIC */ +#ifdef USE_DMA_LOCK + spinlock_t dma_lock; + bool dma_lock_bh; +#endif /* USE_DMA_LOCK */ +#ifdef DHD_MAP_LOGGING + void *dhd_map_log; + void *dhd_unmap_log; +#endif /* DHD_MAP_LOGGING */ +}; + +#endif /* _LINUX_OSL_PRIV_H_ */ |