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, &regs->regfoo);
24238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *    field = GFIELD(regval, <NAME>);
24338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *    regval = SFIELD(regval, <NAME>, 1);
24438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *    W_REG(osh, &regs->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