xref: /OK3568_Linux_fs/external/rkwifibt/drivers/infineon/linux_osl_priv.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Private header file for Linux OS Independent Layer
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Portions of this code are copyright (c) 2021 Cypress Semiconductor Corporation
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Copyright (C) 1999-2017, Broadcom Corporation
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  *      Unless you and Broadcom execute a separate written software license
9*4882a593Smuzhiyun  * agreement governing use of this software, this software is licensed to you
10*4882a593Smuzhiyun  * under the terms of the GNU General Public License version 2 (the "GPL"),
11*4882a593Smuzhiyun  * available at http://www.broadcom.com/licenses/GPLv2.php, with the
12*4882a593Smuzhiyun  * following added to such license:
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  *      As a special exception, the copyright holders of this software give you
15*4882a593Smuzhiyun  * permission to link this software with independent modules, and to copy and
16*4882a593Smuzhiyun  * distribute the resulting executable under terms of your choice, provided that
17*4882a593Smuzhiyun  * you also meet, for each linked independent module, the terms and conditions of
18*4882a593Smuzhiyun  * the license of that module.  An independent module is a module which is not
19*4882a593Smuzhiyun  * derived from this software.  The special exception does not apply to any
20*4882a593Smuzhiyun  * modifications of the software.
21*4882a593Smuzhiyun  *
22*4882a593Smuzhiyun  *      Notwithstanding the above, under no circumstances may you combine this
23*4882a593Smuzhiyun  * software in any way with any other Broadcom software provided under a license
24*4882a593Smuzhiyun  * other than the GPL, without Broadcom's express prior written consent.
25*4882a593Smuzhiyun  *
26*4882a593Smuzhiyun  *
27*4882a593Smuzhiyun  * <<Broadcom-WL-IPTag/Open:>>
28*4882a593Smuzhiyun  *
29*4882a593Smuzhiyun  * $Id: linux_osl_priv.h 690260 2017-03-15 09:34:11Z $
30*4882a593Smuzhiyun  */
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun #ifndef _LINUX_OSL_PRIV_H_
33*4882a593Smuzhiyun #define _LINUX_OSL_PRIV_H_
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #define OS_HANDLE_MAGIC		0x1234abcd	/* Magic # to recognize osh */
36*4882a593Smuzhiyun #define BCM_MEM_FILENAME_LEN	24		/* Mem. filename length */
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun /* dependancy check */
39*4882a593Smuzhiyun #if !defined(BCMPCIE) && defined(DHD_USE_STATIC_CTRLBUF)
40*4882a593Smuzhiyun #error "DHD_USE_STATIC_CTRLBUF suppored PCIE target only"
41*4882a593Smuzhiyun #endif /* !BCMPCIE && DHD_USE_STATIC_CTRLBUF */
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #ifdef CONFIG_DHD_USE_STATIC_BUF
44*4882a593Smuzhiyun #ifdef DHD_USE_STATIC_CTRLBUF
45*4882a593Smuzhiyun #define DHD_SKB_1PAGE_BUFSIZE	(PAGE_SIZE*1)
46*4882a593Smuzhiyun #define DHD_SKB_2PAGE_BUFSIZE	(PAGE_SIZE*2)
47*4882a593Smuzhiyun #define DHD_SKB_4PAGE_BUFSIZE	(PAGE_SIZE*4)
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun #define PREALLOC_FREE_MAGIC	0xFEDC
50*4882a593Smuzhiyun #define PREALLOC_USED_MAGIC	0xFCDE
51*4882a593Smuzhiyun #else
52*4882a593Smuzhiyun #define DHD_SKB_HDRSIZE		336
53*4882a593Smuzhiyun #define DHD_SKB_1PAGE_BUFSIZE	((PAGE_SIZE*1)-DHD_SKB_HDRSIZE)
54*4882a593Smuzhiyun #define DHD_SKB_2PAGE_BUFSIZE	((PAGE_SIZE*2)-DHD_SKB_HDRSIZE)
55*4882a593Smuzhiyun #define DHD_SKB_4PAGE_BUFSIZE	((PAGE_SIZE*4)-DHD_SKB_HDRSIZE)
56*4882a593Smuzhiyun #endif /* DHD_USE_STATIC_CTRLBUF */
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun #define STATIC_BUF_MAX_NUM	16
59*4882a593Smuzhiyun #define STATIC_BUF_SIZE	(PAGE_SIZE*2)
60*4882a593Smuzhiyun #define STATIC_BUF_TOTAL_LEN	(STATIC_BUF_MAX_NUM * STATIC_BUF_SIZE)
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun typedef struct bcm_static_buf {
63*4882a593Smuzhiyun 	spinlock_t static_lock;
64*4882a593Smuzhiyun 	unsigned char *buf_ptr;
65*4882a593Smuzhiyun 	unsigned char buf_use[STATIC_BUF_MAX_NUM];
66*4882a593Smuzhiyun } bcm_static_buf_t;
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun extern bcm_static_buf_t *bcm_static_buf;
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun #ifdef DHD_USE_STATIC_CTRLBUF
71*4882a593Smuzhiyun #define STATIC_PKT_4PAGE_NUM	0
72*4882a593Smuzhiyun #define DHD_SKB_MAX_BUFSIZE	DHD_SKB_2PAGE_BUFSIZE
73*4882a593Smuzhiyun #elif defined(ENHANCED_STATIC_BUF)
74*4882a593Smuzhiyun #define STATIC_PKT_4PAGE_NUM	1
75*4882a593Smuzhiyun #define DHD_SKB_MAX_BUFSIZE	DHD_SKB_4PAGE_BUFSIZE
76*4882a593Smuzhiyun #else
77*4882a593Smuzhiyun #define STATIC_PKT_4PAGE_NUM	0
78*4882a593Smuzhiyun #define DHD_SKB_MAX_BUFSIZE	DHD_SKB_2PAGE_BUFSIZE
79*4882a593Smuzhiyun #endif /* DHD_USE_STATIC_CTRLBUF */
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun #ifdef DHD_USE_STATIC_CTRLBUF
82*4882a593Smuzhiyun #define STATIC_PKT_1PAGE_NUM	0
83*4882a593Smuzhiyun #define STATIC_PKT_2PAGE_NUM	128
84*4882a593Smuzhiyun #else
85*4882a593Smuzhiyun #define STATIC_PKT_1PAGE_NUM	8
86*4882a593Smuzhiyun #define STATIC_PKT_2PAGE_NUM	8
87*4882a593Smuzhiyun #endif /* DHD_USE_STATIC_CTRLBUF */
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun #define STATIC_PKT_1_2PAGE_NUM	\
90*4882a593Smuzhiyun 	((STATIC_PKT_1PAGE_NUM) + (STATIC_PKT_2PAGE_NUM))
91*4882a593Smuzhiyun #define STATIC_PKT_MAX_NUM	\
92*4882a593Smuzhiyun 	((STATIC_PKT_1_2PAGE_NUM) + (STATIC_PKT_4PAGE_NUM))
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun typedef struct bcm_static_pkt {
95*4882a593Smuzhiyun #ifdef DHD_USE_STATIC_CTRLBUF
96*4882a593Smuzhiyun 	struct sk_buff *skb_8k[STATIC_PKT_2PAGE_NUM];
97*4882a593Smuzhiyun 	unsigned char pkt_invalid[STATIC_PKT_2PAGE_NUM];
98*4882a593Smuzhiyun 	spinlock_t osl_pkt_lock;
99*4882a593Smuzhiyun 	uint32 last_allocated_index;
100*4882a593Smuzhiyun #else
101*4882a593Smuzhiyun 	struct sk_buff *skb_4k[STATIC_PKT_1PAGE_NUM];
102*4882a593Smuzhiyun 	struct sk_buff *skb_8k[STATIC_PKT_2PAGE_NUM];
103*4882a593Smuzhiyun #ifdef ENHANCED_STATIC_BUF
104*4882a593Smuzhiyun 	struct sk_buff *skb_16k;
105*4882a593Smuzhiyun #endif /* ENHANCED_STATIC_BUF */
106*4882a593Smuzhiyun 	struct semaphore osl_pkt_sem;
107*4882a593Smuzhiyun #endif /* DHD_USE_STATIC_CTRLBUF */
108*4882a593Smuzhiyun 	unsigned char pkt_use[STATIC_PKT_MAX_NUM];
109*4882a593Smuzhiyun } bcm_static_pkt_t;
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun extern bcm_static_pkt_t *bcm_static_skb;
112*4882a593Smuzhiyun #endif /* CONFIG_DHD_USE_STATIC_BUF */
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun typedef struct bcm_mem_link {
115*4882a593Smuzhiyun 	struct bcm_mem_link *prev;
116*4882a593Smuzhiyun 	struct bcm_mem_link *next;
117*4882a593Smuzhiyun 	uint	size;
118*4882a593Smuzhiyun 	int	line;
119*4882a593Smuzhiyun 	void 	*osh;
120*4882a593Smuzhiyun 	char	file[BCM_MEM_FILENAME_LEN];
121*4882a593Smuzhiyun } bcm_mem_link_t;
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun struct osl_cmn_info {
124*4882a593Smuzhiyun 	atomic_t malloced;
125*4882a593Smuzhiyun 	atomic_t pktalloced;    /* Number of allocated packet buffers */
126*4882a593Smuzhiyun 	spinlock_t dbgmem_lock;
127*4882a593Smuzhiyun 	bcm_mem_link_t *dbgmem_list;
128*4882a593Smuzhiyun 	bcm_mem_link_t *dbgvmem_list;
129*4882a593Smuzhiyun 	spinlock_t pktalloc_lock;
130*4882a593Smuzhiyun 	atomic_t refcount; /* Number of references to this shared structure. */
131*4882a593Smuzhiyun };
132*4882a593Smuzhiyun typedef struct osl_cmn_info osl_cmn_t;
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun #if defined(BCM_BACKPLANE_TIMEOUT)
135*4882a593Smuzhiyun typedef uint32 (*bpt_cb_fn)(void *ctx, void *addr);
136*4882a593Smuzhiyun #endif	/* BCM_BACKPLANE_TIMEOUT */
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun struct osl_info {
139*4882a593Smuzhiyun 	osl_pubinfo_t pub;
140*4882a593Smuzhiyun 	uint32  flags;		/* If specific cases to be handled in the OSL */
141*4882a593Smuzhiyun 	uint magic;
142*4882a593Smuzhiyun 	void *pdev;
143*4882a593Smuzhiyun 	uint failed;
144*4882a593Smuzhiyun 	uint bustype;
145*4882a593Smuzhiyun 	osl_cmn_t *cmn; /* Common OSL related data shred between two OSH's */
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun 	void *bus_handle;
148*4882a593Smuzhiyun #ifdef	BCM_SECURE_DMA
149*4882a593Smuzhiyun 	struct sec_mem_elem *sec_list_4096;
150*4882a593Smuzhiyun 	struct sec_mem_elem *sec_list_base_4096;
151*4882a593Smuzhiyun 	phys_addr_t  contig_base;
152*4882a593Smuzhiyun 	void *contig_base_va;
153*4882a593Smuzhiyun 	phys_addr_t  contig_base_alloc;
154*4882a593Smuzhiyun 	void *contig_base_alloc_va;
155*4882a593Smuzhiyun 	phys_addr_t contig_base_alloc_coherent;
156*4882a593Smuzhiyun 	void *contig_base_alloc_coherent_va;
157*4882a593Smuzhiyun 	void *contig_base_coherent_va;
158*4882a593Smuzhiyun 	void *contig_delta_va_pa;
159*4882a593Smuzhiyun 	struct {
160*4882a593Smuzhiyun 		phys_addr_t pa;
161*4882a593Smuzhiyun 		void *va;
162*4882a593Smuzhiyun 		bool avail;
163*4882a593Smuzhiyun 	} sec_cma_coherent[SEC_CMA_COHERENT_MAX];
164*4882a593Smuzhiyun 	int stb_ext_params;
165*4882a593Smuzhiyun #endif /* BCM_SECURE_DMA */
166*4882a593Smuzhiyun #if defined(BCM_BACKPLANE_TIMEOUT)
167*4882a593Smuzhiyun 	bpt_cb_fn bpt_cb;
168*4882a593Smuzhiyun 	void *sih;
169*4882a593Smuzhiyun #endif	/* BCM_BACKPLANE_TIMEOUT */
170*4882a593Smuzhiyun #ifdef USE_DMA_LOCK
171*4882a593Smuzhiyun 	spinlock_t dma_lock;
172*4882a593Smuzhiyun 	bool dma_lock_bh;
173*4882a593Smuzhiyun #endif /* USE_DMA_LOCK */
174*4882a593Smuzhiyun #ifdef DHD_MAP_LOGGING
175*4882a593Smuzhiyun 	void *dhd_map_log;
176*4882a593Smuzhiyun 	void *dhd_unmap_log;
177*4882a593Smuzhiyun #endif /* DHD_MAP_LOGGING */
178*4882a593Smuzhiyun };
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun #endif /* _LINUX_OSL_PRIV_H_ */
181