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