nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | /* |
2 | * Misc system wide definitions |
||
3 | * |
||
4 | * Copyright (C) 1999-2013, Broadcom Corporation |
||
5 | * |
||
6 | * Unless you and Broadcom execute a separate written software license |
||
7 | * agreement governing use of this software, this software is licensed to you |
||
8 | * under the terms of the GNU General Public License version 2 (the "GPL"), |
||
9 | * available at http://www.broadcom.com/licenses/GPLv2.php, with the |
||
10 | * following added to such license: |
||
11 | * |
||
12 | * As a special exception, the copyright holders of this software give you |
||
13 | * permission to link this software with independent modules, and to copy and |
||
14 | * distribute the resulting executable under terms of your choice, provided that |
||
15 | * you also meet, for each linked independent module, the terms and conditions of |
||
16 | * the license of that module. An independent module is a module which is not |
||
17 | * derived from this software. The special exception does not apply to any |
||
18 | * modifications of the software. |
||
19 | * |
||
20 | * Notwithstanding the above, under no circumstances may you combine this |
||
21 | * software in any way with any other Broadcom software provided under a license |
||
22 | * other than the GPL, without Broadcom's express prior written consent. |
||
23 | * |
||
24 | * $Id: bcmdefs.h 416231 2013-08-02 07:38:34Z $ |
||
25 | */ |
||
26 | |||
27 | #ifndef _bcmdefs_h_ |
||
28 | #define _bcmdefs_h_ |
||
29 | |||
30 | /* |
||
31 | * One doesn't need to include this file explicitly, gets included automatically if |
||
32 | * typedefs.h is included. |
||
33 | */ |
||
34 | |||
35 | /* Use BCM_REFERENCE to suppress warnings about intentionally-unused function |
||
36 | * arguments or local variables. |
||
37 | */ |
||
38 | #define BCM_REFERENCE(data) ((void)(data)) |
||
39 | |||
40 | /* Compile-time assert can be used in place of ASSERT if the expression evaluates |
||
41 | * to a constant at compile time. |
||
42 | */ |
||
43 | #define STATIC_ASSERT(expr) { \ |
||
44 | /* Make sure the expression is constant. */ \ |
||
45 | typedef enum { _STATIC_ASSERT_NOT_CONSTANT = (expr) } _static_assert_e; \ |
||
46 | /* Make sure the expression is true. */ \ |
||
47 | typedef char STATIC_ASSERT_FAIL[(expr) ? 1 : -1]; \ |
||
48 | } |
||
49 | |||
50 | /* Reclaiming text and data : |
||
51 | * The following macros specify special linker sections that can be reclaimed |
||
52 | * after a system is considered 'up'. |
||
53 | * BCMATTACHFN is also used for detach functions (it's not worth having a BCMDETACHFN, |
||
54 | * as in most cases, the attach function calls the detach function to clean up on error). |
||
55 | */ |
||
56 | |||
57 | #define bcmreclaimed 0 |
||
58 | #define _data _data |
||
59 | #define _fn _fn |
||
60 | #define BCMPREATTACHDATA(_data) _data |
||
61 | #define BCMPREATTACHFN(_fn) _fn |
||
62 | #define _data _data |
||
63 | #define _fn _fn |
||
64 | #define _fn _fn |
||
65 | #define BCMNMIATTACHFN(_fn) _fn |
||
66 | #define BCMNMIATTACHDATA(_data) _data |
||
67 | #define CONST const |
||
68 | |||
69 | /* Do not put BCM47XX and __ARM_ARCH_7A__ to the same line. |
||
70 | * DHD build has problem because the BCM47XX will be excluded in DHD release. |
||
71 | */ |
||
72 | #undef BCM47XX_CA9 |
||
73 | #ifdef __ARM_ARCH_7A__ |
||
74 | #define BCM47XX_CA9 |
||
75 | #endif /* __ARM_ARCH_7A__ */ |
||
76 | #ifndef BCMFASTPATH |
||
77 | #if defined(BCM47XX_CA9) |
||
78 | #define BCMFASTPATH __attribute__ ((__section__ (".text.fastpath"))) |
||
79 | #define BCMFASTPATH_HOST __attribute__ ((__section__ (".text.fastpath_host"))) |
||
80 | #else |
||
81 | #define BCMFASTPATH |
||
82 | #define BCMFASTPATH_HOST |
||
83 | #endif |
||
84 | #endif /* BCMFASTPATH */ |
||
85 | |||
86 | |||
87 | /* Put some library data/code into ROM to reduce RAM requirements */ |
||
88 | #define _data _data |
||
89 | #define BCMROMDAT_NAME(_data) _data |
||
90 | #define _fn _fn |
||
91 | #define _fn _fn |
||
92 | #define STATIC static |
||
93 | #define BCMROMDAT_ARYSIZ(data) ARRAYSIZE(data) |
||
94 | #define BCMROMDAT_SIZEOF(data) sizeof(data) |
||
95 | #define BCMROMDAT_APATCH(data) |
||
96 | #define BCMROMDAT_SPATCH(data) |
||
97 | |||
98 | /* Bus types */ |
||
99 | #define SI_BUS 0 /* SOC Interconnect */ |
||
100 | #define PCI_BUS 1 /* PCI target */ |
||
101 | #define PCMCIA_BUS 2 /* PCMCIA target */ |
||
102 | #define SDIO_BUS 3 /* SDIO target */ |
||
103 | #define JTAG_BUS 4 /* JTAG */ |
||
104 | #define USB_BUS 5 /* USB (does not support R/W REG) */ |
||
105 | #define SPI_BUS 6 /* gSPI target */ |
||
106 | #define RPC_BUS 7 /* RPC target */ |
||
107 | |||
108 | /* Allows size optimization for single-bus image */ |
||
109 | #ifdef BCMBUSTYPE |
||
110 | #define BUSTYPE(bus) (BCMBUSTYPE) |
||
111 | #else |
||
112 | #define BUSTYPE(bus) (bus) |
||
113 | #endif |
||
114 | |||
115 | /* Allows size optimization for single-backplane image */ |
||
116 | #ifdef BCMCHIPTYPE |
||
117 | #define CHIPTYPE(bus) (BCMCHIPTYPE) |
||
118 | #else |
||
119 | #define CHIPTYPE(bus) (bus) |
||
120 | #endif |
||
121 | |||
122 | |||
123 | /* Allows size optimization for SPROM support */ |
||
124 | #if defined(BCMSPROMBUS) |
||
125 | #define SPROMBUS (BCMSPROMBUS) |
||
126 | #elif defined(SI_PCMCIA_SROM) |
||
127 | #define SPROMBUS (PCMCIA_BUS) |
||
128 | #else |
||
129 | #define SPROMBUS (PCI_BUS) |
||
130 | #endif |
||
131 | |||
132 | /* Allows size optimization for single-chip image */ |
||
133 | #ifdef BCMCHIPID |
||
134 | #define CHIPID(chip) (BCMCHIPID) |
||
135 | #else |
||
136 | #define CHIPID(chip) (chip) |
||
137 | #endif |
||
138 | |||
139 | #ifdef BCMCHIPREV |
||
140 | #define CHIPREV(rev) (BCMCHIPREV) |
||
141 | #else |
||
142 | #define CHIPREV(rev) (rev) |
||
143 | #endif |
||
144 | |||
145 | /* Defines for DMA Address Width - Shared between OSL and HNDDMA */ |
||
146 | #define DMADDR_MASK_32 0x0 /* Address mask for 32-bits */ |
||
147 | #define DMADDR_MASK_30 0xc0000000 /* Address mask for 30-bits */ |
||
148 | #define DMADDR_MASK_0 0xffffffff /* Address mask for 0-bits (hi-part) */ |
||
149 | |||
150 | #define DMADDRWIDTH_30 30 /* 30-bit addressing capability */ |
||
151 | #define DMADDRWIDTH_32 32 /* 32-bit addressing capability */ |
||
152 | #define DMADDRWIDTH_63 63 /* 64-bit addressing capability */ |
||
153 | #define DMADDRWIDTH_64 64 /* 64-bit addressing capability */ |
||
154 | |||
155 | #ifdef BCMDMA64OSL |
||
156 | typedef struct { |
||
157 | uint32 loaddr; |
||
158 | uint32 hiaddr; |
||
159 | } dma64addr_t; |
||
160 | |||
161 | typedef dma64addr_t dmaaddr_t; |
||
162 | #define PHYSADDRHI(_pa) ((_pa).hiaddr) |
||
163 | #define PHYSADDRHISET(_pa, _val) \ |
||
164 | do { \ |
||
165 | (_pa).hiaddr = (_val); \ |
||
166 | } while (0) |
||
167 | #define PHYSADDRLO(_pa) ((_pa).loaddr) |
||
168 | #define PHYSADDRLOSET(_pa, _val) \ |
||
169 | do { \ |
||
170 | (_pa).loaddr = (_val); \ |
||
171 | } while (0) |
||
172 | |||
173 | #else |
||
174 | typedef unsigned long dmaaddr_t; |
||
175 | #define PHYSADDRHI(_pa) (0) |
||
176 | #define PHYSADDRHISET(_pa, _val) |
||
177 | #define PHYSADDRLO(_pa) ((_pa)) |
||
178 | #define PHYSADDRLOSET(_pa, _val) \ |
||
179 | do { \ |
||
180 | (_pa) = (_val); \ |
||
181 | } while (0) |
||
182 | #endif /* BCMDMA64OSL */ |
||
183 | |||
184 | /* One physical DMA segment */ |
||
185 | typedef struct { |
||
186 | dmaaddr_t addr; |
||
187 | uint32 length; |
||
188 | } hnddma_seg_t; |
||
189 | |||
190 | #define MAX_DMA_SEGS 4 |
||
191 | |||
192 | |||
193 | typedef struct { |
||
194 | void *oshdmah; /* Opaque handle for OSL to store its information */ |
||
195 | uint origsize; /* Size of the virtual packet */ |
||
196 | uint nsegs; |
||
197 | hnddma_seg_t segs[MAX_DMA_SEGS]; |
||
198 | } hnddma_seg_map_t; |
||
199 | |||
200 | |||
201 | /* packet headroom necessary to accommodate the largest header in the system, (i.e TXOFF). |
||
202 | * By doing, we avoid the need to allocate an extra buffer for the header when bridging to WL. |
||
203 | * There is a compile time check in wlc.c which ensure that this value is at least as big |
||
204 | * as TXOFF. This value is used in dma_rxfill (hnddma.c). |
||
205 | */ |
||
206 | |||
207 | #if defined(BCM_RPC_NOCOPY) || defined(BCM_RCP_TXNOCOPY) |
||
208 | /* add 40 bytes to allow for extra RPC header and info */ |
||
209 | #define BCMEXTRAHDROOM 260 |
||
210 | #else /* BCM_RPC_NOCOPY || BCM_RPC_TXNOCOPY */ |
||
211 | #if defined(BCM47XX_CA9) |
||
212 | #define BCMEXTRAHDROOM 224 |
||
213 | #else |
||
214 | #define BCMEXTRAHDROOM 204 |
||
215 | #endif /* linux && BCM47XX_CA9 */ |
||
216 | #endif /* BCM_RPC_NOCOPY || BCM_RPC_TXNOCOPY */ |
||
217 | |||
218 | /* Packet alignment for most efficient SDIO (can change based on platform) */ |
||
219 | #ifndef SDALIGN |
||
220 | #define SDALIGN 32 |
||
221 | #endif |
||
222 | |||
223 | /* Headroom required for dongle-to-host communication. Packets allocated |
||
224 | * locally in the dongle (e.g. for CDC ioctls or RNDIS messages) should |
||
225 | * leave this much room in front for low-level message headers which may |
||
226 | * be needed to get across the dongle bus to the host. (These messages |
||
227 | * don't go over the network, so room for the full WL header above would |
||
228 | * be a waste.). |
||
229 | */ |
||
230 | #define BCMDONGLEHDRSZ 12 |
||
231 | #define BCMDONGLEPADSZ 16 |
||
232 | |||
233 | #define BCMDONGLEOVERHEAD (BCMDONGLEHDRSZ + BCMDONGLEPADSZ) |
||
234 | |||
235 | |||
236 | #if defined(NO_BCMDBG_ASSERT) |
||
237 | # undef BCMDBG_ASSERT |
||
238 | # undef BCMASSERT_LOG |
||
239 | #endif |
||
240 | |||
241 | #if defined(BCMASSERT_LOG) |
||
242 | #define BCMASSERT_SUPPORT |
||
243 | #endif |
||
244 | |||
245 | /* Macros for doing definition and get/set of bitfields |
||
246 | * Usage example, e.g. a three-bit field (bits 4-6): |
||
247 | * #define <NAME>_M BITFIELD_MASK(3) |
||
248 | * #define <NAME>_S 4 |
||
249 | * ... |
||
250 | * regval = R_REG(osh, ®s->regfoo); |
||
251 | * field = GFIELD(regval, <NAME>); |
||
252 | * regval = SFIELD(regval, <NAME>, 1); |
||
253 | * W_REG(osh, ®s->regfoo, regval); |
||
254 | */ |
||
255 | #define BITFIELD_MASK(width) \ |
||
256 | (((unsigned)1 << (width)) - 1) |
||
257 | #define GFIELD(val, field) \ |
||
258 | (((val) >> field ## _S) & field ## _M) |
||
259 | #define SFIELD(val, field, bits) \ |
||
260 | (((val) & (~(field ## _M << field ## _S))) | \ |
||
261 | ((unsigned)(bits) << field ## _S)) |
||
262 | |||
263 | /* define BCMSMALL to remove misc features for memory-constrained environments */ |
||
264 | #ifdef BCMSMALL |
||
265 | #undef BCMSPACE |
||
266 | #define bcmspace FALSE /* if (bcmspace) code is discarded */ |
||
267 | #else |
||
268 | #define BCMSPACE |
||
269 | #define bcmspace TRUE /* if (bcmspace) code is retained */ |
||
270 | #endif |
||
271 | |||
272 | /* Max. nvram variable table size */ |
||
273 | #define MAXSZ_NVRAM_VARS 4096 |
||
274 | |||
275 | |||
276 | /* Max size for reclaimable NVRAM array */ |
||
277 | #ifdef DL_NVRAM |
||
278 | #define NVRAM_ARRAY_MAXSIZE DL_NVRAM |
||
279 | #else |
||
280 | #define NVRAM_ARRAY_MAXSIZE MAXSZ_NVRAM_VARS |
||
281 | #endif /* DL_NVRAM */ |
||
282 | |||
283 | #ifdef BCMUSBDEV_ENABLED |
||
284 | extern uint32 gFWID; |
||
285 | #endif |
||
286 | |||
287 | #endif /* _bcmdefs_h_ */ |