~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to drivers/staging/brcm80211/brcmsmac/wlc_bmac.h

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2010 Broadcom Corporation
 
3
 *
 
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.
 
7
 *
 
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.
 
15
 */
 
16
#ifndef _wlc_bmac_h_
 
17
#define _wlc_bmac_h_
 
18
 
 
19
/* XXXXX this interface is under wlc.c by design
 
20
 * http://hwnbu-twiki.broadcom.com/bin/view/Mwgroup/WlBmacDesign
 
21
 *
 
22
 *        high driver files(e.g. wlc_ampdu.c etc)
 
23
 *             wlc.h/wlc.c
 
24
 *         wlc_bmac.h/wlc_bmac.c
 
25
 *
 
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
 
28
 */
 
29
 
 
30
/* dup state between BMAC(struct wlc_hw_info) and HIGH(struct wlc_info)
 
31
   driver */
 
32
typedef struct wlc_bmac_state {
 
33
        u32 machwcap;   /* mac hw capibility */
 
34
        u32 preamble_ovr;       /* preamble override */
 
35
} wlc_bmac_state_t;
 
36
 
 
37
enum {
 
38
        IOV_BMAC_DIAG,
 
39
        IOV_BMAC_SBGPIOTIMERVAL,
 
40
        IOV_BMAC_SBGPIOOUT,
 
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 */
 
46
        IOV_BMAC_OTPDUMP,
 
47
        IOV_BMAC_OTPSTAT,
 
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 */
 
60
        IOV_BMAC_DMALPBK,
 
61
        IOV_BMAC_CCREG,
 
62
        IOV_BMAC_COREREG,
 
63
        IOV_BMAC_SDCIS,
 
64
        IOV_BMAC_SDIO_DRIVE,
 
65
        IOV_BMAC_OTPW,
 
66
        IOV_BMAC_NVOTPW,
 
67
        IOV_BMAC_SROM,
 
68
        IOV_BMAC_SRCRC,
 
69
        IOV_BMAC_CIS_SOURCE,
 
70
        IOV_BMAC_CISVAR,
 
71
        IOV_BMAC_OTPLOCK,
 
72
        IOV_BMAC_OTP_CHIPID,
 
73
        IOV_BMAC_CUSTOMVAR1,
 
74
        IOV_BMAC_BOARDFLAGS,
 
75
        IOV_BMAC_BOARDFLAGS2,
 
76
        IOV_BMAC_WPSLED,
 
77
        IOV_BMAC_NVRAM_SOURCE,
 
78
        IOV_BMAC_OTP_RAW_READ,
 
79
        IOV_BMAC_LAST
 
80
};
 
81
 
 
82
extern int wlc_bmac_attach(struct wlc_info *wlc, u16 vendor, u16 device,
 
83
                           uint unit, bool piomode, void *regsva, uint bustype,
 
84
                           void *btparam);
 
85
extern int wlc_bmac_detach(struct wlc_info *wlc);
 
86
extern void wlc_bmac_watchdog(void *arg);
 
87
 
 
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,
 
91
                                   u32 sel);
 
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)
 
98
 
 
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,
 
107
                          bool mute);
 
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);
 
113
 
 
114
/* chanspec, ucode interface */
 
115
extern void wlc_bmac_set_chanspec(struct wlc_hw_info *wlc_hw,
 
116
                                  chanspec_t chanspec,
 
117
                                  bool mute, struct txpwr_limits *txpwr);
 
118
 
 
119
extern int wlc_bmac_xmtfifo_sz_get(struct wlc_hw_info *wlc_hw, uint fifo,
 
120
                                   uint *blocks);
 
121
extern void wlc_bmac_mhf(struct wlc_hw_info *wlc_hw, u8 idx, u16 mask,
 
122
                         u16 val, int bands);
 
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,
 
128
                                     u8 antsel_type);
 
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_write_template_ram(struct wlc_hw_info *wlc_hw, int offset,
 
134
                                        int len, void *buf);
 
135
extern void wlc_bmac_copyfrom_vars(struct wlc_hw_info *wlc_hw, char **buf,
 
136
                                   uint *len);
 
137
 
 
138
extern void wlc_bmac_hw_etheraddr(struct wlc_hw_info *wlc_hw,
 
139
                                  u8 *ea);
 
140
 
 
141
extern bool wlc_bmac_radio_read_hwdisabled(struct wlc_hw_info *wlc_hw);
 
142
extern void wlc_bmac_set_shortslot(struct wlc_hw_info *wlc_hw, bool shortslot);
 
143
extern void wlc_bmac_band_stf_ss_set(struct wlc_hw_info *wlc_hw, u8 stf_mode);
 
144
 
 
145
extern void wlc_bmac_wait_for_wake(struct wlc_hw_info *wlc_hw);
 
146
 
 
147
extern void wlc_ucode_wake_override_set(struct wlc_hw_info *wlc_hw,
 
148
                                        u32 override_bit);
 
149
extern void wlc_ucode_wake_override_clear(struct wlc_hw_info *wlc_hw,
 
150
                                          u32 override_bit);
 
151
 
 
152
extern void wlc_bmac_set_addrmatch(struct wlc_hw_info *wlc_hw,
 
153
                                   int match_reg_offset,
 
154
                                   const u8 *addr);
 
155
extern void wlc_bmac_write_hw_bcntemplates(struct wlc_hw_info *wlc_hw,
 
156
                                           void *bcn, int len, bool both);
 
157
 
 
158
extern void wlc_bmac_read_tsf(struct wlc_hw_info *wlc_hw, u32 *tsf_l_ptr,
 
159
                              u32 *tsf_h_ptr);
 
160
extern void wlc_bmac_set_cwmin(struct wlc_hw_info *wlc_hw, u16 newmin);
 
161
extern void wlc_bmac_set_cwmax(struct wlc_hw_info *wlc_hw, u16 newmax);
 
162
 
 
163
extern void wlc_bmac_retrylimit_upd(struct wlc_hw_info *wlc_hw, u16 SRL,
 
164
                                    u16 LRL);
 
165
 
 
166
extern void wlc_bmac_fifoerrors(struct wlc_hw_info *wlc_hw);
 
167
 
 
168
 
 
169
/* API for BMAC driver (e.g. wlc_phy.c etc) */
 
170
 
 
171
extern void wlc_bmac_bw_set(struct wlc_hw_info *wlc_hw, u16 bw);
 
172
extern void wlc_bmac_pllreq(struct wlc_hw_info *wlc_hw, bool set,
 
173
                            mbool req_bit);
 
174
extern void wlc_bmac_hw_up(struct wlc_hw_info *wlc_hw);
 
175
extern u16 wlc_bmac_rate_shm_offset(struct wlc_hw_info *wlc_hw, u8 rate);
 
176
extern void wlc_bmac_antsel_set(struct wlc_hw_info *wlc_hw, u32 antsel_avail);
 
177
 
 
178
#endif /* _wlc_bmac_h_ */