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.
19 /* XXXXX this interface is under wlc.c by design
20 * http://hwnbu-twiki.broadcom.com/bin/view/Mwgroup/WlBmacDesign
22 * high driver files(e.g. wlc_ampdu.c etc)
24 * wlc_bmac.h/wlc_bmac.c
26 * So don't include this in files other than wlc.c, wlc_bmac* wl_rte.c(dongle port) and wl_phy.c
27 * create wrappers in wlc.c if needed
30 /* dup state between BMAC(struct wlc_hw_info) and HIGH(struct wlc_info)
32 typedef struct wlc_bmac_state
{
33 u32 machwcap
; /* mac hw capibility */
34 u32 preamble_ovr
; /* preamble override */
39 IOV_BMAC_SBGPIOTIMERVAL
,
41 IOV_BMAC_CCGPIOCTRL
, /* CC GPIOCTRL REG */
42 IOV_BMAC_CCGPIOOUT
, /* CC GPIOOUT REG */
43 IOV_BMAC_CCGPIOOUTEN
, /* CC GPIOOUTEN REG */
44 IOV_BMAC_CCGPIOIN
, /* CC GPIOIN REG */
45 IOV_BMAC_WPSGPIO
, /* WPS push button GPIO pin */
48 IOV_BMAC_PCIEASPM
, /* obfuscation clkreq/aspm control */
49 IOV_BMAC_PCIEADVCORRMASK
, /* advanced correctable error mask */
50 IOV_BMAC_PCIECLKREQ
, /* PCIE 1.1 clockreq enab support */
51 IOV_BMAC_PCIELCREG
, /* PCIE LCREG */
52 IOV_BMAC_SBGPIOTIMERMASK
,
53 IOV_BMAC_RFDISABLEDLY
,
54 IOV_BMAC_PCIEREG
, /* PCIE REG */
55 IOV_BMAC_PCICFGREG
, /* PCI Config register */
56 IOV_BMAC_PCIESERDESREG
, /* PCIE SERDES REG (dev, 0}offset) */
57 IOV_BMAC_PCIEGPIOOUT
, /* PCIEOUT REG */
58 IOV_BMAC_PCIEGPIOOUTEN
, /* PCIEOUTEN REG */
59 IOV_BMAC_PCIECLKREQENCTRL
, /* clkreqenctrl REG (PCIE REV > 6.0 */
77 IOV_BMAC_NVRAM_SOURCE
,
78 IOV_BMAC_OTP_RAW_READ
,
82 extern int wlc_bmac_attach(struct wlc_info
*wlc
, u16 vendor
, u16 device
,
83 uint unit
, bool piomode
, struct osl_info
*osh
,
84 void *regsva
, uint bustype
, void *btparam
);
85 extern int wlc_bmac_detach(struct wlc_info
*wlc
);
86 extern void wlc_bmac_watchdog(void *arg
);
88 /* up/down, reset, clk */
89 extern void wlc_bmac_copyto_objmem(struct wlc_hw_info
*wlc_hw
,
90 uint offset
, const void *buf
, int len
,
92 extern void wlc_bmac_copyfrom_objmem(struct wlc_hw_info
*wlc_hw
, uint offset
,
93 void *buf
, int len
, u32 sel
);
94 #define wlc_bmac_copyfrom_shm(wlc_hw, offset, buf, len) \
95 wlc_bmac_copyfrom_objmem(wlc_hw, offset, buf, len, OBJADDR_SHM_SEL)
96 #define wlc_bmac_copyto_shm(wlc_hw, offset, buf, len) \
97 wlc_bmac_copyto_objmem(wlc_hw, offset, buf, len, OBJADDR_SHM_SEL)
99 extern void wlc_bmac_core_phypll_reset(struct wlc_hw_info
*wlc_hw
);
100 extern void wlc_bmac_core_phypll_ctl(struct wlc_hw_info
*wlc_hw
, bool on
);
101 extern void wlc_bmac_phyclk_fgc(struct wlc_hw_info
*wlc_hw
, bool clk
);
102 extern void wlc_bmac_macphyclk_set(struct wlc_hw_info
*wlc_hw
, bool clk
);
103 extern void wlc_bmac_phy_reset(struct wlc_hw_info
*wlc_hw
);
104 extern void wlc_bmac_corereset(struct wlc_hw_info
*wlc_hw
, u32 flags
);
105 extern void wlc_bmac_reset(struct wlc_hw_info
*wlc_hw
);
106 extern void wlc_bmac_init(struct wlc_hw_info
*wlc_hw
, chanspec_t chanspec
,
108 extern int wlc_bmac_up_prep(struct wlc_hw_info
*wlc_hw
);
109 extern int wlc_bmac_up_finish(struct wlc_hw_info
*wlc_hw
);
110 extern int wlc_bmac_down_prep(struct wlc_hw_info
*wlc_hw
);
111 extern int wlc_bmac_down_finish(struct wlc_hw_info
*wlc_hw
);
112 extern void wlc_bmac_switch_macfreq(struct wlc_hw_info
*wlc_hw
, u8 spurmode
);
114 /* chanspec, ucode interface */
115 extern void wlc_bmac_set_chanspec(struct wlc_hw_info
*wlc_hw
,
117 bool mute
, struct txpwr_limits
*txpwr
);
119 extern int wlc_bmac_xmtfifo_sz_get(struct wlc_hw_info
*wlc_hw
, uint fifo
,
121 extern void wlc_bmac_mhf(struct wlc_hw_info
*wlc_hw
, u8 idx
, u16 mask
,
123 extern void wlc_bmac_mctrl(struct wlc_hw_info
*wlc_hw
, u32 mask
, u32 val
);
124 extern u16
wlc_bmac_mhf_get(struct wlc_hw_info
*wlc_hw
, u8 idx
, int bands
);
125 extern void wlc_bmac_txant_set(struct wlc_hw_info
*wlc_hw
, u16 phytxant
);
126 extern u16
wlc_bmac_get_txant(struct wlc_hw_info
*wlc_hw
);
127 extern void wlc_bmac_antsel_type_set(struct wlc_hw_info
*wlc_hw
,
129 extern int wlc_bmac_state_get(struct wlc_hw_info
*wlc_hw
,
130 wlc_bmac_state_t
*state
);
131 extern void wlc_bmac_write_shm(struct wlc_hw_info
*wlc_hw
, uint offset
, u16 v
);
132 extern u16
wlc_bmac_read_shm(struct wlc_hw_info
*wlc_hw
, uint offset
);
133 extern void wlc_bmac_set_shm(struct wlc_hw_info
*wlc_hw
, uint offset
, u16 v
,
135 extern void wlc_bmac_write_template_ram(struct wlc_hw_info
*wlc_hw
, int offset
,
137 extern void wlc_bmac_copyfrom_vars(struct wlc_hw_info
*wlc_hw
, char **buf
,
140 extern void wlc_bmac_hw_etheraddr(struct wlc_hw_info
*wlc_hw
,
143 extern bool wlc_bmac_radio_read_hwdisabled(struct wlc_hw_info
*wlc_hw
);
144 extern void wlc_bmac_set_shortslot(struct wlc_hw_info
*wlc_hw
, bool shortslot
);
145 extern void wlc_bmac_band_stf_ss_set(struct wlc_hw_info
*wlc_hw
, u8 stf_mode
);
147 extern void wlc_bmac_wait_for_wake(struct wlc_hw_info
*wlc_hw
);
149 extern void wlc_ucode_wake_override_set(struct wlc_hw_info
*wlc_hw
,
151 extern void wlc_ucode_wake_override_clear(struct wlc_hw_info
*wlc_hw
,
154 extern void wlc_bmac_set_rcmta(struct wlc_hw_info
*wlc_hw
, int idx
,
156 extern void wlc_bmac_set_addrmatch(struct wlc_hw_info
*wlc_hw
,
157 int match_reg_offset
,
159 extern void wlc_bmac_write_hw_bcntemplates(struct wlc_hw_info
*wlc_hw
,
160 void *bcn
, int len
, bool both
);
162 extern void wlc_bmac_read_tsf(struct wlc_hw_info
*wlc_hw
, u32
*tsf_l_ptr
,
164 extern void wlc_bmac_set_cwmin(struct wlc_hw_info
*wlc_hw
, u16 newmin
);
165 extern void wlc_bmac_set_cwmax(struct wlc_hw_info
*wlc_hw
, u16 newmax
);
166 extern void wlc_bmac_set_noreset(struct wlc_hw_info
*wlc
, bool noreset_flag
);
168 extern void wlc_bmac_retrylimit_upd(struct wlc_hw_info
*wlc_hw
, u16 SRL
,
171 extern void wlc_bmac_fifoerrors(struct wlc_hw_info
*wlc_hw
);
174 /* API for BMAC driver (e.g. wlc_phy.c etc) */
176 extern void wlc_bmac_bw_set(struct wlc_hw_info
*wlc_hw
, u16 bw
);
177 extern void wlc_bmac_pllreq(struct wlc_hw_info
*wlc_hw
, bool set
,
179 extern bool wlc_bmac_taclear(struct wlc_hw_info
*wlc_hw
, bool ta_ok
);
180 extern void wlc_bmac_hw_up(struct wlc_hw_info
*wlc_hw
);
181 extern u16
wlc_bmac_rate_shm_offset(struct wlc_hw_info
*wlc_hw
, u8 rate
);
182 extern void wlc_bmac_antsel_set(struct wlc_hw_info
*wlc_hw
, u32 antsel_avail
);
184 #endif /* _wlc_bmac_h_ */