1b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/* 2b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt * Misc system wide definitions 3b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt * 438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Copyright (C) 1999-2013, Broadcom Corporation 56dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * 66dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * Permission to use, copy, modify, and/or distribute this software for any 76dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * purpose with or without fee is hereby granted, provided that the above 86dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * copyright notice and this permission notice appear in all copies. 96dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * 106dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 116dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 126dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 136dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 146dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 156dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 166dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt * 1838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * $Id: bcmdefs.h 381895 2013-01-30 07:06:40Z $ 19b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt */ 20b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 21b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#ifndef _bcmdefs_h_ 22b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define _bcmdefs_h_ 23b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 2438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 2538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * One doesn't need to include this file explicitly, gets included automatically if 2638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * typedefs.h is included. 2738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */ 28b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 2938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Use BCM_REFERENCE to suppress warnings about intentionally-unused function 3038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * arguments or local variables. 3138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */ 32ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define BCM_REFERENCE(data) ((void)(data)) 33ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 3438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Compile-time assert can be used in place of ASSERT if the expression evaluates 3538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * to a constant at compile time. 3638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */ 37ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define STATIC_ASSERT(expr) { \ 3838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt /* Make sure the expression is constant. */ \ 39ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt typedef enum { _STATIC_ASSERT_NOT_CONSTANT = (expr) } _static_assert_e; \ 4038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt /* Make sure the expression is true. */ \ 41ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt typedef char STATIC_ASSERT_FAIL[(expr) ? 1 : -1]; \ 42ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt} 43ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 4438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Reclaiming text and data : 4538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * The following macros specify special linker sections that can be reclaimed 4638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * after a system is considered 'up'. 4738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * BCMATTACHFN is also used for detach functions (it's not worth having a BCMDETACHFN, 4838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * as in most cases, the attach function calls the detach function to clean up on error). 4938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */ 50ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 51b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define bcmreclaimed 0 52b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define _data _data 53b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define _fn _fn 54ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define BCMPREATTACHDATA(_data) _data 55ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define BCMPREATTACHFN(_fn) _fn 56b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define _data _data 57b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define _fn _fn 58b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define _fn _fn 59ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define BCMNMIATTACHFN(_fn) _fn 60ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define BCMNMIATTACHDATA(_data) _data 61b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define CONST const 6238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#if defined(__ARM_ARCH_7A__) 6338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BCM47XX_CA9 6438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#else 6538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#undef BCM47XX_CA9 6638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif 67ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef BCMFASTPATH 6838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#if defined(BCM47XX_CA9) 6938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BCMFASTPATH __attribute__ ((__section__ (".text.fastpath"))) 7038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BCMFASTPATH_HOST __attribute__ ((__section__ (".text.fastpath_host"))) 7138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#else 72b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define BCMFASTPATH 73ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define BCMFASTPATH_HOST 7438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif 7538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif /* BCMFASTPATH */ 76b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 77b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 7838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Put some library data/code into ROM to reduce RAM requirements */ 79b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define _data _data 80ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define BCMROMDAT_NAME(_data) _data 81b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define _fn _fn 82b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define _fn _fn 83b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define STATIC static 84ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define BCMROMDAT_ARYSIZ(data) ARRAYSIZE(data) 85ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define BCMROMDAT_SIZEOF(data) sizeof(data) 86ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define BCMROMDAT_APATCH(data) 87ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define BCMROMDAT_SPATCH(data) 88b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 8938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Bus types */ 9038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define SI_BUS 0 /* SOC Interconnect */ 9138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define PCI_BUS 1 /* PCI target */ 9238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define PCMCIA_BUS 2 /* PCMCIA target */ 9338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define SDIO_BUS 3 /* SDIO target */ 9438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define JTAG_BUS 4 /* JTAG */ 9538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define USB_BUS 5 /* USB (does not support R/W REG) */ 9638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define SPI_BUS 6 /* gSPI target */ 9738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RPC_BUS 7 /* RPC target */ 9838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt 9938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Allows size optimization for single-bus image */ 100b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#ifdef BCMBUSTYPE 101b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define BUSTYPE(bus) (BCMBUSTYPE) 102b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#else 103b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define BUSTYPE(bus) (bus) 104b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#endif 105b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 10638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Allows size optimization for single-backplane image */ 107b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#ifdef BCMCHIPTYPE 108b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define CHIPTYPE(bus) (BCMCHIPTYPE) 109b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#else 110b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define CHIPTYPE(bus) (bus) 111b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#endif 112b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 113b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 11438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Allows size optimization for SPROM support */ 115b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#if defined(BCMSPROMBUS) 116b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define SPROMBUS (BCMSPROMBUS) 117b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#elif defined(SI_PCMCIA_SROM) 118b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define SPROMBUS (PCMCIA_BUS) 119b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#else 120b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define SPROMBUS (PCI_BUS) 121b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#endif 122b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 12338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Allows size optimization for single-chip image */ 124b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#ifdef BCMCHIPID 125b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define CHIPID(chip) (BCMCHIPID) 126b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#else 127b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define CHIPID(chip) (chip) 128b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#endif 129b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 130b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#ifdef BCMCHIPREV 131b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define CHIPREV(rev) (BCMCHIPREV) 132b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#else 133b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define CHIPREV(rev) (rev) 134b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#endif 135b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 13638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Defines for DMA Address Width - Shared between OSL and HNDDMA */ 13738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DMADDR_MASK_32 0x0 /* Address mask for 32-bits */ 13838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DMADDR_MASK_30 0xc0000000 /* Address mask for 30-bits */ 13938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DMADDR_MASK_0 0xffffffff /* Address mask for 0-bits (hi-part) */ 140b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 14138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DMADDRWIDTH_30 30 /* 30-bit addressing capability */ 14238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DMADDRWIDTH_32 32 /* 32-bit addressing capability */ 14338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DMADDRWIDTH_63 63 /* 64-bit addressing capability */ 14438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DMADDRWIDTH_64 64 /* 64-bit addressing capability */ 145b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 146b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#ifdef BCMDMA64OSL 147b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef struct { 148b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt uint32 loaddr; 149b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt uint32 hiaddr; 150b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} dma64addr_t; 151b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 152b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef dma64addr_t dmaaddr_t; 153b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define PHYSADDRHI(_pa) ((_pa).hiaddr) 154b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define PHYSADDRHISET(_pa, _val) \ 155b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt do { \ 156b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt (_pa).hiaddr = (_val); \ 157b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt } while (0) 158b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define PHYSADDRLO(_pa) ((_pa).loaddr) 159b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define PHYSADDRLOSET(_pa, _val) \ 160b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt do { \ 161b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt (_pa).loaddr = (_val); \ 162b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt } while (0) 163b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 164b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#else 165b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef unsigned long dmaaddr_t; 166b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define PHYSADDRHI(_pa) (0) 167b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define PHYSADDRHISET(_pa, _val) 168b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define PHYSADDRLO(_pa) ((_pa)) 169b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define PHYSADDRLOSET(_pa, _val) \ 170b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt do { \ 171b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt (_pa) = (_val); \ 172b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt } while (0) 17338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif /* BCMDMA64OSL */ 174b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 17538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* One physical DMA segment */ 176b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef struct { 177b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt dmaaddr_t addr; 178b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt uint32 length; 179b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} hnddma_seg_t; 180b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 181b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define MAX_DMA_SEGS 4 182b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 183b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 184b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef struct { 18538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt void *oshdmah; /* Opaque handle for OSL to store its information */ 18638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt uint origsize; /* Size of the virtual packet */ 187b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt uint nsegs; 188b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt hnddma_seg_t segs[MAX_DMA_SEGS]; 189b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} hnddma_seg_map_t; 190b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 191b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 19238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* packet headroom necessary to accommodate the largest header in the system, (i.e TXOFF). 19338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * By doing, we avoid the need to allocate an extra buffer for the header when bridging to WL. 19438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * There is a compile time check in wlc.c which ensure that this value is at least as big 19538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * as TXOFF. This value is used in dma_rxfill (hnddma.c). 19638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */ 197b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 198b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#if defined(BCM_RPC_NOCOPY) || defined(BCM_RCP_TXNOCOPY) 19938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* add 40 bytes to allow for extra RPC header and info */ 20038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BCMEXTRAHDROOM 260 20138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#else /* BCM_RPC_NOCOPY || BCM_RPC_TXNOCOPY */ 20238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#if defined(BCM47XX_CA9) 20338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BCMEXTRAHDROOM 224 204b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#else 20538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BCMEXTRAHDROOM 204 20638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif /* linux && BCM47XX_CA9 */ 20738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif /* BCM_RPC_NOCOPY || BCM_RPC_TXNOCOPY */ 208b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 20938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Packet alignment for most efficient SDIO (can change based on platform) */ 210ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef SDALIGN 211ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define SDALIGN 32 212ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 213ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 21438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Headroom required for dongle-to-host communication. Packets allocated 21538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * locally in the dongle (e.g. for CDC ioctls or RNDIS messages) should 21638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * leave this much room in front for low-level message headers which may 21738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * be needed to get across the dongle bus to the host. (These messages 21838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * don't go over the network, so room for the full WL header above would 21938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * be a waste.). 22038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt*/ 221b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define BCMDONGLEHDRSZ 12 222b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define BCMDONGLEPADSZ 16 223b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 224b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define BCMDONGLEOVERHEAD (BCMDONGLEHDRSZ + BCMDONGLEPADSZ) 225b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 226b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 227ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#if defined(NO_BCMDBG_ASSERT) 228ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt# undef BCMDBG_ASSERT 229ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt# undef BCMASSERT_LOG 230ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 231ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 232b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#if defined(BCMASSERT_LOG) 233b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define BCMASSERT_SUPPORT 23438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif 235b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 23638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Macros for doing definition and get/set of bitfields 23738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Usage example, e.g. a three-bit field (bits 4-6): 23838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * #define <NAME>_M BITFIELD_MASK(3) 23938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * #define <NAME>_S 4 24038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * ... 24138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * regval = R_REG(osh, ®s->regfoo); 24238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * field = GFIELD(regval, <NAME>); 24338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * regval = SFIELD(regval, <NAME>, 1); 24438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * W_REG(osh, ®s->regfoo, regval); 24538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */ 246b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define BITFIELD_MASK(width) \ 247b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt (((unsigned)1 << (width)) - 1) 248b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define GFIELD(val, field) \ 249b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt (((val) >> field ## _S) & field ## _M) 250b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define SFIELD(val, field, bits) \ 251b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt (((val) & (~(field ## _M << field ## _S))) | \ 252b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt ((unsigned)(bits) << field ## _S)) 253b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 25438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* define BCMSMALL to remove misc features for memory-constrained environments */ 255b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#ifdef BCMSMALL 256b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#undef BCMSPACE 25738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define bcmspace FALSE /* if (bcmspace) code is discarded */ 258b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#else 259b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define BCMSPACE 26038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define bcmspace TRUE /* if (bcmspace) code is retained */ 261b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#endif 262b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 26338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Max. nvram variable table size */ 264b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define MAXSZ_NVRAM_VARS 4096 265b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 266b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt 26738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Max size for reclaimable NVRAM array */ 268ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifdef DL_NVRAM 269ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define NVRAM_ARRAY_MAXSIZE DL_NVRAM 270ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#else 271ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define NVRAM_ARRAY_MAXSIZE MAXSZ_NVRAM_VARS 27238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif /* DL_NVRAM */ 273ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 274ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifdef BCMUSBDEV_ENABLED 275ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtextern uint32 gFWID; 2766dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#endif 277ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 27838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif /* _bcmdefs_h_ */ 279