1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#ifndef _BRCMFMAC_SDIO_CHIP_H_
18#define _BRCMFMAC_SDIO_CHIP_H_
19
20
21
22
23
24#define CORE_CC_REG(base, field) \
25 (base + offsetof(struct chipcregs, field))
26#define CORE_BUS_REG(base, field) \
27 (base + offsetof(struct sdpcmd_regs, field))
28#define CORE_SB(base, field) \
29 (base + SBCONFIGOFF + offsetof(struct sbconfig, field))
30
31
32
33#define SBSDIO_FORCE_ALP 0x01
34
35#define SBSDIO_FORCE_HT 0x02
36
37#define SBSDIO_FORCE_ILP 0x04
38
39#define SBSDIO_ALP_AVAIL_REQ 0x08
40
41#define SBSDIO_HT_AVAIL_REQ 0x10
42
43#define SBSDIO_FORCE_HW_CLKREQ_OFF 0x20
44
45#define SBSDIO_ALP_AVAIL 0x40
46
47#define SBSDIO_HT_AVAIL 0x80
48#define SBSDIO_AVBITS (SBSDIO_HT_AVAIL | SBSDIO_ALP_AVAIL)
49#define SBSDIO_ALPAV(regval) ((regval) & SBSDIO_AVBITS)
50#define SBSDIO_HTAV(regval) (((regval) & SBSDIO_AVBITS) == SBSDIO_AVBITS)
51#define SBSDIO_ALPONLY(regval) (SBSDIO_ALPAV(regval) && !SBSDIO_HTAV(regval))
52#define SBSDIO_CLKAV(regval, alponly) \
53 (SBSDIO_ALPAV(regval) && (alponly ? 1 : SBSDIO_HTAV(regval)))
54
55#define BRCMF_MAX_CORENUM 6
56
57struct chip_core_info {
58 u16 id;
59 u16 rev;
60 u32 base;
61 u32 wrapbase;
62 u32 caps;
63 u32 cib;
64};
65
66struct chip_info {
67 u32 chip;
68 u32 chiprev;
69 u32 socitype;
70
71
72 struct chip_core_info c_inf[BRCMF_MAX_CORENUM];
73 u32 pmurev;
74 u32 pmucaps;
75 u32 ramsize;
76 u32 rambase;
77 u32 rst_vec;
78
79 bool (*iscoreup)(struct brcmf_sdio_dev *sdiodev, struct chip_info *ci,
80 u16 coreid);
81 u32 (*corerev)(struct brcmf_sdio_dev *sdiodev, struct chip_info *ci,
82 u16 coreid);
83 void (*coredisable)(struct brcmf_sdio_dev *sdiodev,
84 struct chip_info *ci, u16 coreid, u32 core_bits);
85 void (*resetcore)(struct brcmf_sdio_dev *sdiodev,
86 struct chip_info *ci, u16 coreid, u32 core_bits);
87};
88
89struct sbconfig {
90 u32 PAD[2];
91 u32 sbipsflag;
92 u32 PAD[3];
93 u32 sbtpsflag;
94 u32 PAD[11];
95 u32 sbtmerrloga;
96 u32 PAD;
97 u32 sbtmerrlog;
98 u32 PAD[3];
99 u32 sbadmatch3;
100 u32 PAD;
101 u32 sbadmatch2;
102 u32 PAD;
103 u32 sbadmatch1;
104 u32 PAD[7];
105 u32 sbimstate;
106 u32 sbintvec;
107 u32 sbtmstatelow;
108 u32 sbtmstatehigh;
109 u32 sbbwa0;
110 u32 PAD;
111 u32 sbimconfiglow;
112 u32 sbimconfighigh;
113 u32 sbadmatch0;
114 u32 PAD;
115 u32 sbtmconfiglow;
116 u32 sbtmconfighigh;
117 u32 sbbconfig;
118 u32 PAD;
119 u32 sbbstate;
120 u32 PAD[3];
121 u32 sbactcnfg;
122 u32 PAD[3];
123 u32 sbflagst;
124 u32 PAD[3];
125 u32 sbidlow;
126 u32 sbidhigh;
127};
128
129
130struct sdpcmd_regs {
131 u32 corecontrol;
132 u32 corestatus;
133 u32 PAD[1];
134 u32 biststatus;
135
136
137 u16 pcmciamesportaladdr;
138 u16 PAD[1];
139 u16 pcmciamesportalmask;
140 u16 PAD[1];
141 u16 pcmciawrframebc;
142 u16 PAD[1];
143 u16 pcmciaunderflowtimer;
144 u16 PAD[1];
145
146
147 u32 intstatus;
148 u32 hostintmask;
149 u32 intmask;
150 u32 sbintstatus;
151 u32 sbintmask;
152 u32 funcintmask;
153 u32 PAD[2];
154 u32 tosbmailbox;
155 u32 tohostmailbox;
156 u32 tosbmailboxdata;
157 u32 tohostmailboxdata;
158
159
160 u32 sdioaccess;
161 u32 PAD[3];
162
163
164 u8 pcmciaframectrl;
165 u8 PAD[3];
166 u8 pcmciawatermark;
167 u8 PAD[155];
168
169
170 u32 intrcvlazy;
171 u32 PAD[3];
172
173
174 u32 cmd52rd;
175 u32 cmd52wr;
176 u32 cmd53rd;
177 u32 cmd53wr;
178 u32 abort;
179 u32 datacrcerror;
180 u32 rdoutofsync;
181 u32 wroutofsync;
182 u32 writebusy;
183 u32 readwait;
184 u32 readterm;
185 u32 writeterm;
186 u32 PAD[40];
187 u32 clockctlstatus;
188 u32 PAD[7];
189
190 u32 PAD[128];
191
192
193 char cis[512];
194
195
196 char pcmciafcr[256];
197 u16 PAD[55];
198
199
200 u16 backplanecsr;
201 u16 backplaneaddr0;
202 u16 backplaneaddr1;
203 u16 backplaneaddr2;
204 u16 backplaneaddr3;
205 u16 backplanedata0;
206 u16 backplanedata1;
207 u16 backplanedata2;
208 u16 backplanedata3;
209 u16 PAD[31];
210
211
212 u16 spromstatus;
213 u32 PAD[464];
214
215 u16 PAD[0x80];
216};
217
218extern int brcmf_sdio_chip_attach(struct brcmf_sdio_dev *sdiodev,
219 struct chip_info **ci_ptr, u32 regs);
220extern void brcmf_sdio_chip_detach(struct chip_info **ci_ptr);
221extern void brcmf_sdio_chip_drivestrengthinit(struct brcmf_sdio_dev *sdiodev,
222 struct chip_info *ci,
223 u32 drivestrength);
224extern u8 brcmf_sdio_chip_getinfidx(struct chip_info *ci, u16 coreid);
225extern void brcmf_sdio_chip_enter_download(struct brcmf_sdio_dev *sdiodev,
226 struct chip_info *ci);
227extern bool brcmf_sdio_chip_exit_download(struct brcmf_sdio_dev *sdiodev,
228 struct chip_info *ci, char *nvram_dat,
229 uint nvram_sz);
230
231#endif
232