xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/include/d11_cfg.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Header file for splitrx mode definitions
3  * Explains different splitrx modes, macros for classify, conversion.
4  *
5  * Broadcom Proprietary and Confidential. Copyright (C) 2020,
6  * All Rights Reserved.
7  *
8  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom;
9  * the contents of this file may not be disclosed to third parties,
10  * copied or duplicated in any form, in whole or in part, without
11  * the prior written permission of Broadcom.
12  *
13  *
14  * <<Broadcom-WL-IPTag/Proprietary:>>
15  */
16 
17 #ifndef _d11_cfg_h_
18 #define _d11_cfg_h_
19 
20 #ifdef USE_BCMCONF_H
21 #include <bcmconf.h>
22 #else
23 #if defined(BCMDONGLEHOST) && !defined(WINNT)
24 #define D11REV_IS(var, val)		((var) == (val))
25 #define D11REV_GE(var, val)		((var) >= (val))
26 #define D11REV_GT(var, val)		((var) > (val))
27 #define D11REV_LT(var, val)		((var) < (val))
28 #define D11REV_LE(var, val)		((var) <= (val))
29 
30 #define D11MINORREV_IS(var, val)	((var) == (val))
31 #define D11MINORREV_GE(var, val)	((var) >= (val))
32 #define D11MINORREV_GT(var, val)	((var) > (val))
33 #define D11MINORREV_LT(var, val)	((var) < (val))
34 #define D11MINORREV_LE(var, val)	((var) <= (val))
35 
36 #define D11REV_MAJ_MIN_GE(corerev, corerev_minor, maj, min) \
37 	((D11REV_IS((corerev), (maj)) && D11MINORREV_GE((corerev_minor), (min))) || \
38 		D11REV_GT(corerev, (maj)))
39 
40 #endif /* BCMDONGLEHOST */
41 #endif /* USE_BCMCONF_H */
42 
43 #define	RXMODE0	0	/* no split */
44 #define	RXMODE1	1	/* descriptor split */
45 #define	RXMODE2	2	/* descriptor split + classification */
46 #define	RXMODE3	3	/* fifo split + classification */
47 #define	RXMODE4	4	/* fifo split + classification + hdr conversion */
48 
49 #ifdef BCMSPLITRX
50 	extern bool _bcmsplitrx;
51 #if defined(ROM_ENAB_RUNTIME_CHECK) || !defined(DONGLEBUILD)
52 	#define BCMSPLITRX_ENAB() (_bcmsplitrx)
53 #elif defined(BCMSPLITRX_DISABLED)
54 	#define BCMSPLITRX_ENAB()	(0)
55 #else
56 	#define BCMSPLITRX_ENAB()	(1)
57 #endif
58 
59 	extern uint8 _bcmsplitrx_mode;
60 #if defined(ROM_ENAB_RUNTIME_CHECK) || !defined(DONGLEBUILD)
61 	#define BCMSPLITRX_MODE() (_bcmsplitrx_mode)
62 #elif defined(BCMSPLITRX_DISABLED)
63 	#define BCMSPLITRX_MODE()	(0)
64 #else
65 	#define BCMSPLITRX_MODE() (_bcmsplitrx_mode)
66 #endif
67 #else
68 	#define BCMSPLITRX_ENAB()		(0)
69 	#define BCMSPLITRX_MODE()		(0)
70 #endif /* BCMSPLITRX */
71 
72 #define SPLIT_RXMODE1()	((BCMSPLITRX_MODE() == RXMODE1))
73 #define SPLIT_RXMODE2()	((BCMSPLITRX_MODE() == RXMODE2))
74 #define SPLIT_RXMODE3()	((BCMSPLITRX_MODE() == RXMODE3))
75 #define SPLIT_RXMODE4()	((BCMSPLITRX_MODE() == RXMODE4))
76 
77 #define PKT_CLASSIFY()	(SPLIT_RXMODE2() || SPLIT_RXMODE3() || SPLIT_RXMODE4())
78 #define RXFIFO_SPLIT()	(SPLIT_RXMODE3() || SPLIT_RXMODE4())
79 #define HDR_CONV()	(SPLIT_RXMODE4())
80 #define HDRCONV_PAD	2
81 
82 #define FRAG_CMN_MSG_HDROOM	(16u) /* Common msg headroom required by PCIe to push txstatus */
83 
84 #if defined(FMF_LIT) && !defined(FMF_LIT_DISABLED)
85 /* (188-4*24-16) required HEADROOM - 4 Rate info Block - CacheInfo */
86 #define FRAG_HEADROOM_D11REV_GE83 76u
87 #else
88 #if (defined(WLC_TXDC) && !defined(WLC_TXDC_DISABLED)) || \
89 	(defined(FMF_RIT) && !defined(FMF_RIT_DISABLED))
90 #define FRAG_HEADROOM_D11REV_GE83 92u /* (188-4*24) required HEADROOM - 4 Rate info Block */
91 #else
92 /* required HEADROOM = PTXD (24) + LIT (16) + RIT (96)
93 	+ max dot11hdr (44)::
94 	     "FC+DUR+SEQ+A1+A2+A3"(24) + QOS(2) + max("HTC(4) + AES IV(8)", WAPI IV(18))
95 	+ MSDU data size (22):: SFH (14) + LLC (8)
96 	- ETHER_HDR_LEN
97  */
98 #define FRAG_HEADROOM_D11REV_GE83 188u
99 #endif /* (WLC_TXDC && !WLC_TXDC_DISABLED) || (FMF_RIT && !FMF_RIT_DISABLED) */
100 #endif /* defined(FMF_LIT) && !defined(FMF_LIT_DISABLED) */
101 #define FRAG_HEADROOM_D11REV_LT80 226u /* TXOFF + amsdu header */
102 #define FRAG_HEADROOM_D11REV_GE80 \
103 		(FRAG_HEADROOM_D11REV_GE83 + 4u) /* + TSO_HEADER_PASSTHROUGH_LENGTH(4) */
104 
105 #ifdef USE_NEW_COREREV_API
106 #define FRAG_HEAD_ROOM(corerev) (D11REV_GE(corerev, 83) ? \
107 		FRAG_HEADROOM_D11REV_GE83 : D11REV_GE(corerev, 80) ? \
108 		FRAG_HEADROOM_D11REV_GE80 : FRAG_HEADROOM_D11REV_LT80)
109 #else
110 #define FRAG_HEAD_ROOM(sih, coreid) ((si_get_corerev(sih, coreid) >= 83) ? \
111 		FRAG_HEADROOM_D11REV_GE83 : ((si_get_corerev(sih, coreid) >= 80) ? \
112 		FRAG_HEADROOM_D11REV_GE80 : FRAG_HEADROOM_D11REV_LT80))
113 #endif
114 
115 #endif /* _d11_cfg_h_ */
116