2 * Copyright (c) 2010 Broadcom Corporation
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 #define SI_BUS 0 /* SOC Interconnect */
22 #define PCI_BUS 1 /* PCI target */
23 #define SDIO_BUS 3 /* SDIO target */
24 #define JTAG_BUS 4 /* JTAG */
25 #define USB_BUS 5 /* USB (does not support R/W REG) */
26 #define SPI_BUS 6 /* gSPI target */
27 #define RPC_BUS 7 /* RPC target */
29 #define WL_CHAN_FREQ_RANGE_2G 0
30 #define WL_CHAN_FREQ_RANGE_5GL 1
31 #define WL_CHAN_FREQ_RANGE_5GM 2
32 #define WL_CHAN_FREQ_RANGE_5GH 3
34 #define MAX_DMA_SEGS 4
36 #define BCMMSG(dev, fmt, args...) \
38 if (brcm_msg_level & LOG_TRACE_VAL) \
39 wiphy_err(dev, "%s: " fmt, __func__, ##args); \
42 #define WL_ERROR_ON() (brcm_msg_level & LOG_ERROR_VAL)
44 /* register access macros */
49 sizeof(*(r)) == sizeof(u8) ? \
50 readb((volatile u8*)(r)) : \
51 sizeof(*(r)) == sizeof(u16) ? readw((volatile u16*)(r)) : \
52 readl((volatile u32*)(r)); \
57 __typeof(*(r)) __osl_v; \
58 __asm__ __volatile__("sync"); \
59 switch (sizeof(*(r))) { \
61 __osl_v = readb((volatile u8*)(r)); \
64 __osl_v = readw((volatile u16*)(r)); \
68 readl((volatile u32*)(r)); \
71 __asm__ __volatile__("sync"); \
76 #define W_REG(r, v) do { \
77 switch (sizeof(*(r))) { \
79 writeb((u8)(v), (volatile u8*)(r)); break; \
81 writew((u16)(v), (volatile u16*)(r)); break; \
83 writel((u32)(v), (volatile u32*)(r)); break; \
86 #else /* __BIG_ENDIAN */
89 __typeof(*(r)) __osl_v; \
90 switch (sizeof(*(r))) { \
93 readb((volatile u8*)((r)^3)); \
97 readw((volatile u16*)((r)^2)); \
100 __osl_v = readl((volatile u32*)(r)); \
106 #define W_REG(r, v) do { \
107 switch (sizeof(*(r))) { \
110 (volatile u8*)((r)^3)); break; \
113 (volatile u16*)((r)^2)); break; \
116 (volatile u32*)(r)); break; \
119 #endif /* __BIG_ENDIAN */
123 * bcm4716 (which includes 4717 & 4718), plus 4706 on PCIe can reorder
124 * transactions. As a fix, a read after write is performed on certain places
125 * in the code. Older chips and the newer 5357 family don't require this fix.
127 #define W_REG_FLUSH(r, v) ({ W_REG((r), (v)); (void)R_REG(r); })
129 #define W_REG_FLUSH(r, v) W_REG((r), (v))
130 #endif /* __mips__ */
132 #define AND_REG(r, v) W_REG((r), R_REG(r) & (v))
133 #define OR_REG(r, v) W_REG((r), R_REG(r) | (v))
135 #define SET_REG(r, mask, val) \
136 W_REG((r), ((R_REG(r) & ~(mask)) | (val)))
138 /* forward declarations */
154 /* brcm_msg_level is a bit vector with defs in bcmdefs.h */
155 extern u32 brcm_msg_level;
157 #endif /* _wlc_types_h_ */