1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Misc system wide definitions 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: bcmdefs.h 700870 2017-05-22 19:05:22Z $ 30*4882a593Smuzhiyun */ 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #ifndef _bcmdefs_h_ 33*4882a593Smuzhiyun #define _bcmdefs_h_ 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* 36*4882a593Smuzhiyun * One doesn't need to include this file explicitly, gets included automatically if 37*4882a593Smuzhiyun * typedefs.h is included. 38*4882a593Smuzhiyun */ 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* Use BCM_REFERENCE to suppress warnings about intentionally-unused function 41*4882a593Smuzhiyun * arguments or local variables. 42*4882a593Smuzhiyun */ 43*4882a593Smuzhiyun #define BCM_REFERENCE(data) ((void)(data)) 44*4882a593Smuzhiyun #include <linux/compiler.h> 45*4882a593Smuzhiyun /* Allow for suppressing unused variable warnings. */ 46*4882a593Smuzhiyun #ifdef __GNUC__ 47*4882a593Smuzhiyun #define UNUSED_VAR __attribute__ ((unused)) 48*4882a593Smuzhiyun #else 49*4882a593Smuzhiyun #define UNUSED_VAR 50*4882a593Smuzhiyun #endif // endif 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun /* GNU GCC 4.6+ supports selectively turning off a warning. 53*4882a593Smuzhiyun * Define these diagnostic macros to help suppress cast-qual warning 54*4882a593Smuzhiyun * until all the work can be done to fix the casting issues. 55*4882a593Smuzhiyun */ 56*4882a593Smuzhiyun #if (defined(__GNUC__) && defined(STRICT_GCC_WARNINGS) && (__GNUC__ > 4 || (__GNUC__ == \ 57*4882a593Smuzhiyun 4 && __GNUC_MINOR__ >= 6))) 58*4882a593Smuzhiyun #define GCC_DIAGNOSTIC_PUSH_SUPPRESS_CAST() \ 59*4882a593Smuzhiyun _Pragma("GCC diagnostic push") \ 60*4882a593Smuzhiyun _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") 61*4882a593Smuzhiyun #define GCC_DIAGNOSTIC_POP() \ 62*4882a593Smuzhiyun _Pragma("GCC diagnostic pop") 63*4882a593Smuzhiyun #else 64*4882a593Smuzhiyun #define GCC_DIAGNOSTIC_PUSH_SUPPRESS_CAST() 65*4882a593Smuzhiyun #define GCC_DIAGNOSTIC_POP() 66*4882a593Smuzhiyun #endif /* Diagnostic macros not defined */ 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun /* Support clang for MACOSX compiler */ 69*4882a593Smuzhiyun #ifdef __clang__ 70*4882a593Smuzhiyun #define CLANG_DIAGNOSTIC_PUSH_SUPPRESS_CAST() \ 71*4882a593Smuzhiyun _Pragma("clang diagnostic push") \ 72*4882a593Smuzhiyun _Pragma("clang diagnostic ignored \"-Wcast-qual\"") 73*4882a593Smuzhiyun #define CLANG_DIAGNOSTIC_PUSH_SUPPRESS_FORMAT() \ 74*4882a593Smuzhiyun _Pragma("clang diagnostic push") \ 75*4882a593Smuzhiyun _Pragma("clang diagnostic ignored \"-Wformat-nonliteral\"") 76*4882a593Smuzhiyun #define CLANG_DIAGNOSTIC_POP() \ 77*4882a593Smuzhiyun _Pragma("clang diagnostic pop") 78*4882a593Smuzhiyun #else 79*4882a593Smuzhiyun #define CLANG_DIAGNOSTIC_PUSH_SUPPRESS_CAST() 80*4882a593Smuzhiyun #define CLANG_DIAGNOSTIC_PUSH_SUPPRESS_FORMAT() 81*4882a593Smuzhiyun #define CLANG_DIAGNOSTIC_POP() 82*4882a593Smuzhiyun #endif // endif 83*4882a593Smuzhiyun /* Compile-time assert can be used in place of ASSERT if the expression evaluates 84*4882a593Smuzhiyun * to a constant at compile time. 85*4882a593Smuzhiyun */ 86*4882a593Smuzhiyun #if (__GNUC__ <= 4 && __GNUC_MINOR__ >= 4) 87*4882a593Smuzhiyun #define STATIC_ASSERT(expr) { \ 88*4882a593Smuzhiyun /* Make sure the expression is constant. */ \ 89*4882a593Smuzhiyun typedef enum { _STATIC_ASSERT_NOT_CONSTANT = (expr) } _static_assert_e UNUSED_VAR; \ 90*4882a593Smuzhiyun /* Make sure the expression is true. */ \ 91*4882a593Smuzhiyun typedef char STATIC_ASSERT_FAIL[(expr) ? 1 : -1] UNUSED_VAR; \ 92*4882a593Smuzhiyun } 93*4882a593Smuzhiyun #else 94*4882a593Smuzhiyun #define STATIC_ASSERT(expr) compiletime_assert(expr, "Compile time condition failure"); 95*4882a593Smuzhiyun #endif /* __GNUC__ <= 4 && __GNUC_MINOR__ >= 4 */ 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun /* Reclaiming text and data : 98*4882a593Smuzhiyun * The following macros specify special linker sections that can be reclaimed 99*4882a593Smuzhiyun * after a system is considered 'up'. 100*4882a593Smuzhiyun * BCMATTACHFN is also used for detach functions (it's not worth having a BCMDETACHFN, 101*4882a593Smuzhiyun * as in most cases, the attach function calls the detach function to clean up on error). 102*4882a593Smuzhiyun */ 103*4882a593Smuzhiyun #if defined(BCM_RECLAIM) 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun extern bool bcm_reclaimed; 106*4882a593Smuzhiyun extern bool bcm_attach_part_reclaimed; 107*4882a593Smuzhiyun extern bool bcm_preattach_part_reclaimed; 108*4882a593Smuzhiyun extern bool bcm_postattach_part_reclaimed; 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun #define RECLAIMED() (bcm_reclaimed) 111*4882a593Smuzhiyun #define ATTACH_PART_RECLAIMED() (bcm_attach_part_reclaimed) 112*4882a593Smuzhiyun #define PREATTACH_PART_RECLAIMED() (bcm_preattach_part_reclaimed) 113*4882a593Smuzhiyun #define POSTATTACH_PART_RECLAIMED() (bcm_postattach_part_reclaimed) 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun #if defined(BCM_RECLAIM_ATTACH_FN_DATA) 116*4882a593Smuzhiyun #define _data __attribute__ ((__section__ (".dataini2." #_data))) _data 117*4882a593Smuzhiyun #define _fn __attribute__ ((__section__ (".textini2." #_fn), noinline)) _fn 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun /* Relocate attach symbols to save-restore region to increase pre-reclaim heap size. */ 120*4882a593Smuzhiyun #define BCM_SRM_ATTACH_DATA(_data) __attribute__ ((__section__ (".datasrm." #_data))) _data 121*4882a593Smuzhiyun #define BCM_SRM_ATTACH_FN(_fn) __attribute__ ((__section__ (".textsrm." #_fn), noinline)) _fn 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun #ifndef PREATTACH_NORECLAIM 124*4882a593Smuzhiyun #define BCMPREATTACHDATA(_data) __attribute__ ((__section__ (".dataini3." #_data))) _data 125*4882a593Smuzhiyun #define BCMPREATTACHFN(_fn) __attribute__ ((__section__ (".textini3." #_fn), noinline)) _fn 126*4882a593Smuzhiyun #else 127*4882a593Smuzhiyun #define BCMPREATTACHDATA(_data) __attribute__ ((__section__ (".dataini2." #_data))) _data 128*4882a593Smuzhiyun #define BCMPREATTACHFN(_fn) __attribute__ ((__section__ (".textini2." #_fn), noinline)) _fn 129*4882a593Smuzhiyun #endif /* PREATTACH_NORECLAIM */ 130*4882a593Smuzhiyun #define BCMPOSTATTACHDATA(_data) __attribute__ ((__section__ (".dataini5." #_data))) _data 131*4882a593Smuzhiyun #define BCMPOSTATTACHFN(_fn) __attribute__ ((__section__ (".textini5." #_fn), noinline)) _fn 132*4882a593Smuzhiyun #else /* BCM_RECLAIM_ATTACH_FN_DATA */ 133*4882a593Smuzhiyun #define _data _data 134*4882a593Smuzhiyun #define _fn _fn 135*4882a593Smuzhiyun #define BCMPREATTACHDATA(_data) _data 136*4882a593Smuzhiyun #define BCMPREATTACHFN(_fn) _fn 137*4882a593Smuzhiyun #define BCMPOSTATTACHDATA(_data) _data 138*4882a593Smuzhiyun #define BCMPOSTATTACHFN(_fn) _fn 139*4882a593Smuzhiyun #endif /* BCM_RECLAIM_ATTACH_FN_DATA */ 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun #ifdef BCMDBG_SR 142*4882a593Smuzhiyun /* 143*4882a593Smuzhiyun * Don't reclaim so we can compare SR ASM 144*4882a593Smuzhiyun */ 145*4882a593Smuzhiyun #define BCMPREATTACHDATASR(_data) _data 146*4882a593Smuzhiyun #define BCMPREATTACHFNSR(_fn) _fn 147*4882a593Smuzhiyun #define BCMATTACHDATASR(_data) _data 148*4882a593Smuzhiyun #define BCMATTACHFNSR(_fn) _fn 149*4882a593Smuzhiyun #else 150*4882a593Smuzhiyun #define BCMPREATTACHDATASR(_data) BCMPREATTACHDATA(_data) 151*4882a593Smuzhiyun #define BCMPREATTACHFNSR(_fn) BCMPREATTACHFN(_fn) 152*4882a593Smuzhiyun #define BCMATTACHDATASR(_data) _data 153*4882a593Smuzhiyun #define BCMATTACHFNSR(_fn) _fn 154*4882a593Smuzhiyun #endif // endif 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun #if defined(BCM_RECLAIM_INIT_FN_DATA) 157*4882a593Smuzhiyun #define _data __attribute__ ((__section__ (".dataini1." #_data))) _data 158*4882a593Smuzhiyun #define _fn __attribute__ ((__section__ (".textini1." #_fn), noinline)) _fn 159*4882a593Smuzhiyun #define CONST 160*4882a593Smuzhiyun #else /* BCM_RECLAIM_INIT_FN_DATA */ 161*4882a593Smuzhiyun #define _data _data 162*4882a593Smuzhiyun #define _fn _fn 163*4882a593Smuzhiyun #ifndef CONST 164*4882a593Smuzhiyun #define CONST const 165*4882a593Smuzhiyun #endif // endif 166*4882a593Smuzhiyun #endif /* BCM_RECLAIM_INIT_FN_DATA */ 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun /* Non-manufacture or internal attach function/dat */ 169*4882a593Smuzhiyun #define BCMNMIATTACHFN(_fn) _fn 170*4882a593Smuzhiyun #define BCMNMIATTACHDATA(_data) _data 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun #if defined(BCM_CISDUMP_NO_RECLAIM) 173*4882a593Smuzhiyun #define BCMCISDUMPATTACHFN(_fn) _fn 174*4882a593Smuzhiyun #define BCMCISDUMPATTACHDATA(_data) _data 175*4882a593Smuzhiyun #else 176*4882a593Smuzhiyun #define BCMCISDUMPATTACHFN(_fn) BCMNMIATTACHFN(_fn) 177*4882a593Smuzhiyun #define BCMCISDUMPATTACHDATA(_data) BCMNMIATTACHDATA(_data) 178*4882a593Smuzhiyun #endif // endif 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun /* SROM with OTP support */ 181*4882a593Smuzhiyun #if defined(BCMOTPSROM) 182*4882a593Smuzhiyun #define BCMSROMATTACHFN(_fn) _fn 183*4882a593Smuzhiyun #define BCMSROMATTACHDATA(_data) _data 184*4882a593Smuzhiyun #else 185*4882a593Smuzhiyun #define BCMSROMATTACHFN(_fn) BCMNMIATTACHFN(_fn) 186*4882a593Smuzhiyun #define BCMSROMATTACHDATA(_data) BCMNMIATTACHFN(_data) 187*4882a593Smuzhiyun #endif /* BCMOTPSROM */ 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun #if defined(BCM_CISDUMP_NO_RECLAIM) 190*4882a593Smuzhiyun #define BCMSROMCISDUMPATTACHFN(_fn) _fn 191*4882a593Smuzhiyun #define BCMSROMCISDUMPATTACHDATA(_data) _data 192*4882a593Smuzhiyun #else 193*4882a593Smuzhiyun #define BCMSROMCISDUMPATTACHFN(_fn) BCMSROMATTACHFN(_fn) 194*4882a593Smuzhiyun #define BCMSROMCISDUMPATTACHDATA(_data) BCMSROMATTACHDATA(_data) 195*4882a593Smuzhiyun #endif /* BCM_CISDUMP_NO_RECLAIM */ 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun #ifdef BCMNODOWN 198*4882a593Smuzhiyun #define _fn _fn 199*4882a593Smuzhiyun #else 200*4882a593Smuzhiyun #define _fn _fn 201*4882a593Smuzhiyun #endif // endif 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun #else /* BCM_RECLAIM */ 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun #define bcm_reclaimed (1) 206*4882a593Smuzhiyun #define bcm_attach_part_reclaimed (1) 207*4882a593Smuzhiyun #define bcm_preattach_part_reclaimed (1) 208*4882a593Smuzhiyun #define bcm_postattach_part_reclaimed (1) 209*4882a593Smuzhiyun #define _data _data 210*4882a593Smuzhiyun #define _fn _fn 211*4882a593Smuzhiyun #define BCM_SRM_ATTACH_DATA(_data) _data 212*4882a593Smuzhiyun #define BCM_SRM_ATTACH_FN(_fn) _fn 213*4882a593Smuzhiyun #define BCMPREATTACHDATA(_data) _data 214*4882a593Smuzhiyun #define BCMPREATTACHFN(_fn) _fn 215*4882a593Smuzhiyun #define BCMPOSTATTACHDATA(_data) _data 216*4882a593Smuzhiyun #define BCMPOSTATTACHFN(_fn) _fn 217*4882a593Smuzhiyun #define _data _data 218*4882a593Smuzhiyun #define _fn _fn 219*4882a593Smuzhiyun #define _fn _fn 220*4882a593Smuzhiyun #define BCMNMIATTACHFN(_fn) _fn 221*4882a593Smuzhiyun #define BCMNMIATTACHDATA(_data) _data 222*4882a593Smuzhiyun #define BCMSROMATTACHFN(_fn) _fn 223*4882a593Smuzhiyun #define BCMSROMATTACHDATA(_data) _data 224*4882a593Smuzhiyun #define BCMPREATTACHFNSR(_fn) _fn 225*4882a593Smuzhiyun #define BCMPREATTACHDATASR(_data) _data 226*4882a593Smuzhiyun #define BCMATTACHFNSR(_fn) _fn 227*4882a593Smuzhiyun #define BCMATTACHDATASR(_data) _data 228*4882a593Smuzhiyun #define BCMSROMATTACHFN(_fn) _fn 229*4882a593Smuzhiyun #define BCMSROMATTACHDATA(_data) _data 230*4882a593Smuzhiyun #define BCMCISDUMPATTACHFN(_fn) _fn 231*4882a593Smuzhiyun #define BCMCISDUMPATTACHDATA(_data) _data 232*4882a593Smuzhiyun #define BCMSROMCISDUMPATTACHFN(_fn) _fn 233*4882a593Smuzhiyun #define BCMSROMCISDUMPATTACHDATA(_data) _data 234*4882a593Smuzhiyun #define CONST const 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun #define RECLAIMED() (bcm_reclaimed) 237*4882a593Smuzhiyun #define ATTACH_PART_RECLAIMED() (bcm_attach_part_reclaimed) 238*4882a593Smuzhiyun #define PREATTACH_PART_RECLAIMED() (bcm_preattach_part_reclaimed) 239*4882a593Smuzhiyun #define POSTATTACH_PART_RECLAIMED() (bcm_postattach_part_reclaimed) 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun #endif /* BCM_RECLAIM */ 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun #define BCMUCODEDATA(_data) _data 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun #if defined(BCM_DMA_CT) && !defined(BCM_DMA_CT_DISABLED) 246*4882a593Smuzhiyun #define BCMUCODEFN(_fn) _fn 247*4882a593Smuzhiyun #else 248*4882a593Smuzhiyun #define BCMUCODEFN(_fn) _fn 249*4882a593Smuzhiyun #endif /* BCM_DMA_CT */ 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun #if !defined STB 252*4882a593Smuzhiyun #if defined(BCM47XX) && defined(__ARM_ARCH_7A__) && !defined(OEM_ANDROID) 253*4882a593Smuzhiyun #define BCM47XX_CA9 254*4882a593Smuzhiyun #else 255*4882a593Smuzhiyun #undef BCM47XX_CA9 256*4882a593Smuzhiyun #endif /* BCM47XX && __ARM_ARCH_7A__ && !OEM_ANDROID */ 257*4882a593Smuzhiyun #endif /* STB */ 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun /* BCMFASTPATH Related Macro defines 260*4882a593Smuzhiyun */ 261*4882a593Smuzhiyun #ifndef BCMFASTPATH 262*4882a593Smuzhiyun #if defined(STB) 263*4882a593Smuzhiyun #define BCMFASTPATH __attribute__ ((__section__ (".text.fastpath"))) 264*4882a593Smuzhiyun #define BCMFASTPATH_HOST __attribute__ ((__section__ (".text.fastpath_host"))) 265*4882a593Smuzhiyun #else /* mips || BCM47XX_CA9 || STB */ 266*4882a593Smuzhiyun #define BCMFASTPATH 267*4882a593Smuzhiyun #define BCMFASTPATH_HOST 268*4882a593Smuzhiyun #endif // endif 269*4882a593Smuzhiyun #endif /* BCMFASTPATH */ 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun /* Use the BCMRAMFN() macro to tag functions in source that must be included in RAM (excluded from 272*4882a593Smuzhiyun * ROM). This should eliminate the need to manually specify these functions in the ROM config file. 273*4882a593Smuzhiyun * It should only be used in special cases where the function must be in RAM for *all* ROM-based 274*4882a593Smuzhiyun * chips. 275*4882a593Smuzhiyun */ 276*4882a593Smuzhiyun #define BCMRAMFN(_fn) _fn 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun /* Use BCMSPECSYM() macro to tag symbols going to a special output section in the binary. */ 279*4882a593Smuzhiyun #define BCMSPECSYM(_sym) __attribute__ ((__section__ (".special." #_sym))) _sym 280*4882a593Smuzhiyun 281*4882a593Smuzhiyun #define STATIC static 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun /* Bus types */ 284*4882a593Smuzhiyun #define SI_BUS 0 /* SOC Interconnect */ 285*4882a593Smuzhiyun #define PCI_BUS 1 /* PCI target */ 286*4882a593Smuzhiyun #define PCMCIA_BUS 2 /* PCMCIA target */ 287*4882a593Smuzhiyun #define SDIO_BUS 3 /* SDIO target */ 288*4882a593Smuzhiyun #define JTAG_BUS 4 /* JTAG */ 289*4882a593Smuzhiyun #define USB_BUS 5 /* USB (does not support R/W REG) */ 290*4882a593Smuzhiyun #define SPI_BUS 6 /* gSPI target */ 291*4882a593Smuzhiyun #define RPC_BUS 7 /* RPC target */ 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun /* Allows size optimization for single-bus image */ 294*4882a593Smuzhiyun #ifdef BCMBUSTYPE 295*4882a593Smuzhiyun #define BUSTYPE(bus) (BCMBUSTYPE) 296*4882a593Smuzhiyun #else 297*4882a593Smuzhiyun #define BUSTYPE(bus) (bus) 298*4882a593Smuzhiyun #endif // endif 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun #ifdef BCMBUSCORETYPE 301*4882a593Smuzhiyun #define BUSCORETYPE(ct) (BCMBUSCORETYPE) 302*4882a593Smuzhiyun #else 303*4882a593Smuzhiyun #define BUSCORETYPE(ct) (ct) 304*4882a593Smuzhiyun #endif // endif 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun /* Allows size optimization for single-backplane image */ 307*4882a593Smuzhiyun #ifdef BCMCHIPTYPE 308*4882a593Smuzhiyun #define CHIPTYPE(bus) (BCMCHIPTYPE) 309*4882a593Smuzhiyun #else 310*4882a593Smuzhiyun #define CHIPTYPE(bus) (bus) 311*4882a593Smuzhiyun #endif // endif 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun /* Allows size optimization for SPROM support */ 314*4882a593Smuzhiyun #if defined(BCMSPROMBUS) 315*4882a593Smuzhiyun #define SPROMBUS (BCMSPROMBUS) 316*4882a593Smuzhiyun #elif defined(SI_PCMCIA_SROM) 317*4882a593Smuzhiyun #define SPROMBUS (PCMCIA_BUS) 318*4882a593Smuzhiyun #else 319*4882a593Smuzhiyun #define SPROMBUS (PCI_BUS) 320*4882a593Smuzhiyun #endif // endif 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun /* Allows size optimization for single-chip image */ 323*4882a593Smuzhiyun #ifdef BCMCHIPID 324*4882a593Smuzhiyun #define CHIPID(chip) (BCMCHIPID) 325*4882a593Smuzhiyun #else 326*4882a593Smuzhiyun #define CHIPID(chip) (chip) 327*4882a593Smuzhiyun #endif // endif 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun #ifdef BCMCHIPREV 330*4882a593Smuzhiyun #define CHIPREV(rev) (BCMCHIPREV) 331*4882a593Smuzhiyun #else 332*4882a593Smuzhiyun #define CHIPREV(rev) (rev) 333*4882a593Smuzhiyun #endif // endif 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun #ifdef BCMPCIEREV 336*4882a593Smuzhiyun #define PCIECOREREV(rev) (BCMPCIEREV) 337*4882a593Smuzhiyun #else 338*4882a593Smuzhiyun #define PCIECOREREV(rev) (rev) 339*4882a593Smuzhiyun #endif // endif 340*4882a593Smuzhiyun 341*4882a593Smuzhiyun #ifdef BCMPMUREV 342*4882a593Smuzhiyun #define PMUREV(rev) (BCMPMUREV) 343*4882a593Smuzhiyun #else 344*4882a593Smuzhiyun #define PMUREV(rev) (rev) 345*4882a593Smuzhiyun #endif // endif 346*4882a593Smuzhiyun 347*4882a593Smuzhiyun #ifdef BCMCCREV 348*4882a593Smuzhiyun #define CCREV(rev) (BCMCCREV) 349*4882a593Smuzhiyun #else 350*4882a593Smuzhiyun #define CCREV(rev) (rev) 351*4882a593Smuzhiyun #endif // endif 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun #ifdef BCMGCIREV 354*4882a593Smuzhiyun #define GCIREV(rev) (BCMGCIREV) 355*4882a593Smuzhiyun #else 356*4882a593Smuzhiyun #define GCIREV(rev) (rev) 357*4882a593Smuzhiyun #endif // endif 358*4882a593Smuzhiyun 359*4882a593Smuzhiyun #ifdef BCMCR4REV 360*4882a593Smuzhiyun #define CR4REV (BCMCR4REV) 361*4882a593Smuzhiyun #endif // endif 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun /* Defines for DMA Address Width - Shared between OSL and HNDDMA */ 364*4882a593Smuzhiyun #define DMADDR_MASK_32 0x0 /* Address mask for 32-bits */ 365*4882a593Smuzhiyun #define DMADDR_MASK_30 0xc0000000 /* Address mask for 30-bits */ 366*4882a593Smuzhiyun #define DMADDR_MASK_26 0xFC000000 /* Address maks for 26-bits */ 367*4882a593Smuzhiyun #define DMADDR_MASK_0 0xffffffff /* Address mask for 0-bits (hi-part) */ 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun #define DMADDRWIDTH_26 26 /* 26-bit addressing capability */ 370*4882a593Smuzhiyun #define DMADDRWIDTH_30 30 /* 30-bit addressing capability */ 371*4882a593Smuzhiyun #define DMADDRWIDTH_32 32 /* 32-bit addressing capability */ 372*4882a593Smuzhiyun #define DMADDRWIDTH_63 63 /* 64-bit addressing capability */ 373*4882a593Smuzhiyun #define DMADDRWIDTH_64 64 /* 64-bit addressing capability */ 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun typedef struct { 376*4882a593Smuzhiyun uint32 loaddr; 377*4882a593Smuzhiyun uint32 hiaddr; 378*4882a593Smuzhiyun } dma64addr_t; 379*4882a593Smuzhiyun 380*4882a593Smuzhiyun #define PHYSADDR64HI(_pa) ((_pa).hiaddr) 381*4882a593Smuzhiyun #define PHYSADDR64HISET(_pa, _val) \ 382*4882a593Smuzhiyun do { \ 383*4882a593Smuzhiyun (_pa).hiaddr = (_val); \ 384*4882a593Smuzhiyun } while (0) 385*4882a593Smuzhiyun #define PHYSADDR64LO(_pa) ((_pa).loaddr) 386*4882a593Smuzhiyun #define PHYSADDR64LOSET(_pa, _val) \ 387*4882a593Smuzhiyun do { \ 388*4882a593Smuzhiyun (_pa).loaddr = (_val); \ 389*4882a593Smuzhiyun } while (0) 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun #ifdef BCMDMA64OSL 392*4882a593Smuzhiyun typedef dma64addr_t dmaaddr_t; 393*4882a593Smuzhiyun #define PHYSADDRHI(_pa) PHYSADDR64HI(_pa) 394*4882a593Smuzhiyun #define PHYSADDRHISET(_pa, _val) PHYSADDR64HISET(_pa, _val) 395*4882a593Smuzhiyun #define PHYSADDRLO(_pa) PHYSADDR64LO(_pa) 396*4882a593Smuzhiyun #define PHYSADDRLOSET(_pa, _val) PHYSADDR64LOSET(_pa, _val) 397*4882a593Smuzhiyun #define PHYSADDRTOULONG(_pa, _ulong) \ 398*4882a593Smuzhiyun do { \ 399*4882a593Smuzhiyun _ulong = ((unsigned long long)(_pa).hiaddr << 32) | ((_pa).loaddr); \ 400*4882a593Smuzhiyun } while (0) 401*4882a593Smuzhiyun 402*4882a593Smuzhiyun #else 403*4882a593Smuzhiyun typedef unsigned long dmaaddr_t; 404*4882a593Smuzhiyun #define PHYSADDRHI(_pa) (0) 405*4882a593Smuzhiyun #define PHYSADDRHISET(_pa, _val) 406*4882a593Smuzhiyun #define PHYSADDRLO(_pa) ((_pa)) 407*4882a593Smuzhiyun #define PHYSADDRLOSET(_pa, _val) \ 408*4882a593Smuzhiyun do { \ 409*4882a593Smuzhiyun (_pa) = (_val); \ 410*4882a593Smuzhiyun } while (0) 411*4882a593Smuzhiyun #endif /* BCMDMA64OSL */ 412*4882a593Smuzhiyun #define PHYSADDRISZERO(_pa) (PHYSADDRLO(_pa) == 0 && PHYSADDRHI(_pa) == 0) 413*4882a593Smuzhiyun 414*4882a593Smuzhiyun /* One physical DMA segment */ 415*4882a593Smuzhiyun typedef struct { 416*4882a593Smuzhiyun dmaaddr_t addr; 417*4882a593Smuzhiyun uint32 length; 418*4882a593Smuzhiyun } hnddma_seg_t; 419*4882a593Smuzhiyun 420*4882a593Smuzhiyun #define MAX_DMA_SEGS 8 421*4882a593Smuzhiyun 422*4882a593Smuzhiyun typedef struct { 423*4882a593Smuzhiyun void *oshdmah; /* Opaque handle for OSL to store its information */ 424*4882a593Smuzhiyun uint origsize; /* Size of the virtual packet */ 425*4882a593Smuzhiyun uint nsegs; 426*4882a593Smuzhiyun hnddma_seg_t segs[MAX_DMA_SEGS]; 427*4882a593Smuzhiyun } hnddma_seg_map_t; 428*4882a593Smuzhiyun 429*4882a593Smuzhiyun /* packet headroom necessary to accommodate the largest header in the system, (i.e TXOFF). 430*4882a593Smuzhiyun * By doing, we avoid the need to allocate an extra buffer for the header when bridging to WL. 431*4882a593Smuzhiyun * There is a compile time check in wlc.c which ensure that this value is at least as big 432*4882a593Smuzhiyun * as TXOFF. This value is used in dma_rxfill (hnddma.c). 433*4882a593Smuzhiyun */ 434*4882a593Smuzhiyun 435*4882a593Smuzhiyun #if defined(BCM_RPC_NOCOPY) || defined(BCM_RCP_TXNOCOPY) 436*4882a593Smuzhiyun /* add 40 bytes to allow for extra RPC header and info */ 437*4882a593Smuzhiyun #define BCMEXTRAHDROOM 260 438*4882a593Smuzhiyun #else /* BCM_RPC_NOCOPY || BCM_RPC_TXNOCOPY */ 439*4882a593Smuzhiyun #if defined(STB) 440*4882a593Smuzhiyun #define BCMEXTRAHDROOM 224 441*4882a593Smuzhiyun #else 442*4882a593Smuzhiyun #define BCMEXTRAHDROOM 204 443*4882a593Smuzhiyun #endif // endif 444*4882a593Smuzhiyun #endif /* BCM_RPC_NOCOPY || BCM_RPC_TXNOCOPY */ 445*4882a593Smuzhiyun 446*4882a593Smuzhiyun /* Packet alignment for most efficient SDIO (can change based on platform) */ 447*4882a593Smuzhiyun #ifndef SDALIGN 448*4882a593Smuzhiyun #define SDALIGN 32 449*4882a593Smuzhiyun #endif // endif 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun /* Headroom required for dongle-to-host communication. Packets allocated 452*4882a593Smuzhiyun * locally in the dongle (e.g. for CDC ioctls or RNDIS messages) should 453*4882a593Smuzhiyun * leave this much room in front for low-level message headers which may 454*4882a593Smuzhiyun * be needed to get across the dongle bus to the host. (These messages 455*4882a593Smuzhiyun * don't go over the network, so room for the full WL header above would 456*4882a593Smuzhiyun * be a waste.). 457*4882a593Smuzhiyun */ 458*4882a593Smuzhiyun #define BCMDONGLEHDRSZ 12 459*4882a593Smuzhiyun #define BCMDONGLEPADSZ 16 460*4882a593Smuzhiyun 461*4882a593Smuzhiyun #define BCMDONGLEOVERHEAD (BCMDONGLEHDRSZ + BCMDONGLEPADSZ) 462*4882a593Smuzhiyun 463*4882a593Smuzhiyun #if defined(NO_BCMDBG_ASSERT) 464*4882a593Smuzhiyun # undef BCMDBG_ASSERT 465*4882a593Smuzhiyun # undef BCMASSERT_LOG 466*4882a593Smuzhiyun #endif // endif 467*4882a593Smuzhiyun 468*4882a593Smuzhiyun #if defined(BCMASSERT_LOG) 469*4882a593Smuzhiyun #define BCMASSERT_SUPPORT 470*4882a593Smuzhiyun #endif // endif 471*4882a593Smuzhiyun 472*4882a593Smuzhiyun /* Macros for doing definition and get/set of bitfields 473*4882a593Smuzhiyun * Usage example, e.g. a three-bit field (bits 4-6): 474*4882a593Smuzhiyun * #define <NAME>_M BITFIELD_MASK(3) 475*4882a593Smuzhiyun * #define <NAME>_S 4 476*4882a593Smuzhiyun * ... 477*4882a593Smuzhiyun * regval = R_REG(osh, ®s->regfoo); 478*4882a593Smuzhiyun * field = GFIELD(regval, <NAME>); 479*4882a593Smuzhiyun * regval = SFIELD(regval, <NAME>, 1); 480*4882a593Smuzhiyun * W_REG(osh, ®s->regfoo, regval); 481*4882a593Smuzhiyun */ 482*4882a593Smuzhiyun #define BITFIELD_MASK(width) \ 483*4882a593Smuzhiyun (((unsigned)1 << (width)) - 1) 484*4882a593Smuzhiyun #define GFIELD(val, field) \ 485*4882a593Smuzhiyun (((val) >> field ## _S) & field ## _M) 486*4882a593Smuzhiyun #define SFIELD(val, field, bits) \ 487*4882a593Smuzhiyun (((val) & (~(field ## _M << field ## _S))) | \ 488*4882a593Smuzhiyun ((unsigned)(bits) << field ## _S)) 489*4882a593Smuzhiyun 490*4882a593Smuzhiyun /* define BCMSMALL to remove misc features for memory-constrained environments */ 491*4882a593Smuzhiyun #ifdef BCMSMALL 492*4882a593Smuzhiyun #undef BCMSPACE 493*4882a593Smuzhiyun #define bcmspace FALSE /* if (bcmspace) code is discarded */ 494*4882a593Smuzhiyun #else 495*4882a593Smuzhiyun #define BCMSPACE 496*4882a593Smuzhiyun #define bcmspace TRUE /* if (bcmspace) code is retained */ 497*4882a593Smuzhiyun #endif // endif 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun /* Max. nvram variable table size */ 500*4882a593Smuzhiyun #ifndef MAXSZ_NVRAM_VARS 501*4882a593Smuzhiyun #ifdef LARGE_NVRAM_MAXSZ 502*4882a593Smuzhiyun #define MAXSZ_NVRAM_VARS (LARGE_NVRAM_MAXSZ * 2) 503*4882a593Smuzhiyun #else 504*4882a593Smuzhiyun #define LARGE_NVRAM_MAXSZ 8192 505*4882a593Smuzhiyun #define MAXSZ_NVRAM_VARS (LARGE_NVRAM_MAXSZ * 2) 506*4882a593Smuzhiyun #endif /* LARGE_NVRAM_MAXSZ */ 507*4882a593Smuzhiyun #endif /* !MAXSZ_NVRAM_VARS */ 508*4882a593Smuzhiyun 509*4882a593Smuzhiyun /* ROM_ENAB_RUNTIME_CHECK may be set based upon the #define below (for ROM builds). It may also 510*4882a593Smuzhiyun * be defined via makefiles (e.g. ROM auto abandon unoptimized compiles). 511*4882a593Smuzhiyun */ 512*4882a593Smuzhiyun 513*4882a593Smuzhiyun #ifdef BCMLFRAG /* BCMLFRAG support enab macros */ 514*4882a593Smuzhiyun extern bool _bcmlfrag; 515*4882a593Smuzhiyun #if defined(ROM_ENAB_RUNTIME_CHECK) || !defined(DONGLEBUILD) 516*4882a593Smuzhiyun #define BCMLFRAG_ENAB() (_bcmlfrag) 517*4882a593Smuzhiyun #elif defined(BCMLFRAG_DISABLED) 518*4882a593Smuzhiyun #define BCMLFRAG_ENAB() (0) 519*4882a593Smuzhiyun #else 520*4882a593Smuzhiyun #define BCMLFRAG_ENAB() (1) 521*4882a593Smuzhiyun #endif 522*4882a593Smuzhiyun #else 523*4882a593Smuzhiyun #define BCMLFRAG_ENAB() (0) 524*4882a593Smuzhiyun #endif /* BCMLFRAG_ENAB */ 525*4882a593Smuzhiyun 526*4882a593Smuzhiyun #ifdef BCMPCIEDEV /* BCMPCIEDEV support enab macros */ 527*4882a593Smuzhiyun extern bool _pciedevenab; 528*4882a593Smuzhiyun #if defined(ROM_ENAB_RUNTIME_CHECK) 529*4882a593Smuzhiyun #define BCMPCIEDEV_ENAB() (_pciedevenab) 530*4882a593Smuzhiyun #elif defined(BCMPCIEDEV_ENABLED) 531*4882a593Smuzhiyun #define BCMPCIEDEV_ENAB() 1 532*4882a593Smuzhiyun #else 533*4882a593Smuzhiyun #define BCMPCIEDEV_ENAB() 0 534*4882a593Smuzhiyun #endif 535*4882a593Smuzhiyun #else 536*4882a593Smuzhiyun #define BCMPCIEDEV_ENAB() 0 537*4882a593Smuzhiyun #endif /* BCMPCIEDEV */ 538*4882a593Smuzhiyun 539*4882a593Smuzhiyun #ifdef BCMRESVFRAGPOOL /* BCMRESVFRAGPOOL support enab macros */ 540*4882a593Smuzhiyun extern bool _resvfragpool_enab; 541*4882a593Smuzhiyun #if defined(ROM_ENAB_RUNTIME_CHECK) || !defined(DONGLEBUILD) 542*4882a593Smuzhiyun #define BCMRESVFRAGPOOL_ENAB() (_resvfragpool_enab) 543*4882a593Smuzhiyun #elif defined(BCMRESVFRAGPOOL_ENABLED) 544*4882a593Smuzhiyun #define BCMRESVFRAGPOOL_ENAB() 1 545*4882a593Smuzhiyun #else 546*4882a593Smuzhiyun #define BCMRESVFRAGPOOL_ENAB() 0 547*4882a593Smuzhiyun #endif 548*4882a593Smuzhiyun #else 549*4882a593Smuzhiyun #define BCMRESVFRAGPOOL_ENAB() 0 550*4882a593Smuzhiyun #endif /* BCMPCIEDEV */ 551*4882a593Smuzhiyun 552*4882a593Smuzhiyun #define BCMSDIODEV_ENAB() 0 553*4882a593Smuzhiyun 554*4882a593Smuzhiyun /* Max size for reclaimable NVRAM array */ 555*4882a593Smuzhiyun #ifdef DL_NVRAM 556*4882a593Smuzhiyun #define NVRAM_ARRAY_MAXSIZE DL_NVRAM 557*4882a593Smuzhiyun #else 558*4882a593Smuzhiyun #define NVRAM_ARRAY_MAXSIZE MAXSZ_NVRAM_VARS 559*4882a593Smuzhiyun #endif /* DL_NVRAM */ 560*4882a593Smuzhiyun 561*4882a593Smuzhiyun extern uint32 gFWID; 562*4882a593Smuzhiyun 563*4882a593Smuzhiyun #ifdef BCMFRWDPOOLREORG /* BCMFRWDPOOLREORG support enab macros */ 564*4882a593Smuzhiyun extern bool _bcmfrwdpoolreorg; 565*4882a593Smuzhiyun #if defined(ROM_ENAB_RUNTIME_CHECK) || !defined(DONGLEBUILD) 566*4882a593Smuzhiyun #define BCMFRWDPOOLREORG_ENAB() (_bcmfrwdpoolreorg) 567*4882a593Smuzhiyun #elif defined(BCMFRWDPOOLREORG_DISABLED) 568*4882a593Smuzhiyun #define BCMFRWDPOOLREORG_ENAB() (0) 569*4882a593Smuzhiyun #else 570*4882a593Smuzhiyun #define BCMFRWDPOOLREORG_ENAB() (1) 571*4882a593Smuzhiyun #endif 572*4882a593Smuzhiyun #else 573*4882a593Smuzhiyun #define BCMFRWDPOOLREORG_ENAB() (0) 574*4882a593Smuzhiyun #endif /* BCMFRWDPOOLREORG */ 575*4882a593Smuzhiyun 576*4882a593Smuzhiyun #ifdef BCMPOOLRECLAIM /* BCMPOOLRECLAIM support enab macros */ 577*4882a593Smuzhiyun extern bool _bcmpoolreclaim; 578*4882a593Smuzhiyun #if defined(ROM_ENAB_RUNTIME_CHECK) || !defined(DONGLEBUILD) 579*4882a593Smuzhiyun #define BCMPOOLRECLAIM_ENAB() (_bcmpoolreclaim) 580*4882a593Smuzhiyun #elif defined(BCMPOOLRECLAIM_DISABLED) 581*4882a593Smuzhiyun #define BCMPOOLRECLAIM_ENAB() (0) 582*4882a593Smuzhiyun #else 583*4882a593Smuzhiyun #define BCMPOOLRECLAIM_ENAB() (1) 584*4882a593Smuzhiyun #endif 585*4882a593Smuzhiyun #else 586*4882a593Smuzhiyun #define BCMPOOLRECLAIM_ENAB() (0) 587*4882a593Smuzhiyun #endif /* BCMPOOLRECLAIM */ 588*4882a593Smuzhiyun 589*4882a593Smuzhiyun /* Chip related low power flags (lpflags) */ 590*4882a593Smuzhiyun 591*4882a593Smuzhiyun #ifndef PAD 592*4882a593Smuzhiyun #define _PADLINE(line) pad ## line 593*4882a593Smuzhiyun #define _XSTR(line) _PADLINE(line) 594*4882a593Smuzhiyun #define PAD _XSTR(__LINE__) 595*4882a593Smuzhiyun #endif // endif 596*4882a593Smuzhiyun 597*4882a593Smuzhiyun #ifndef FRAG_HEADROOM 598*4882a593Smuzhiyun #define FRAG_HEADROOM 224 /* In absence of SFD, use default headroom of 224 */ 599*4882a593Smuzhiyun #endif // endif 600*4882a593Smuzhiyun 601*4882a593Smuzhiyun #define MODULE_DETACH(var, detach_func)\ 602*4882a593Smuzhiyun if (var) { \ 603*4882a593Smuzhiyun detach_func(var); \ 604*4882a593Smuzhiyun (var) = NULL; \ 605*4882a593Smuzhiyun } 606*4882a593Smuzhiyun #define MODULE_DETACH_2(var1, var2, detach_func) detach_func(var1, var2) 607*4882a593Smuzhiyun #define MODULE_DETACH_TYPECASTED(var, detach_func) detach_func(var) 608*4882a593Smuzhiyun 609*4882a593Smuzhiyun /* When building ROML image use runtime conditional to cause the compiler 610*4882a593Smuzhiyun * to compile everything but not to complain "defined but not used" 611*4882a593Smuzhiyun * as #ifdef would cause at the callsites. 612*4882a593Smuzhiyun * In the end functions called under if (0) {} will not be linked 613*4882a593Smuzhiyun * into the final binary if they're not called from other places either. 614*4882a593Smuzhiyun */ 615*4882a593Smuzhiyun #define BCM_ATTACH_REF_DECL() 616*4882a593Smuzhiyun #define BCM_ATTACH_REF() (1) 617*4882a593Smuzhiyun 618*4882a593Smuzhiyun /* Const in ROM else normal data in RAM */ 619*4882a593Smuzhiyun #if defined(ROM_ENAB_RUNTIME_CHECK) 620*4882a593Smuzhiyun #define ROMCONST CONST 621*4882a593Smuzhiyun #else 622*4882a593Smuzhiyun #define ROMCONST 623*4882a593Smuzhiyun #endif // endif 624*4882a593Smuzhiyun 625*4882a593Smuzhiyun #endif /* _bcmdefs_h_ */ 626